Some cleanup of Match and MatchFragment in prep for tests

This commit is contained in:
Jeff Avallone 2014-12-23 11:17:28 -05:00
parent f264eee5f9
commit e11058688f
2 changed files with 47 additions and 31 deletions

View File

@ -8,8 +8,8 @@ export default {
definedProperties: { definedProperties: {
_anchor: { _anchor: {
get: function() { get: function() {
var start = util.normalizeBBox(_.first(this.items).getBBox()), var start = util.normalizeBBox(this.start.getBBox()),
end = util.normalizeBBox(_.last(this.items).getBBox()), end = util.normalizeBBox(this.end.getBBox()),
matrix = this.transform().localMatrix; matrix = this.transform().localMatrix;
return { return {
@ -43,7 +43,9 @@ export default {
.then(items => { .then(items => {
var prev, next, paths; var prev, next, paths;
this.items = items; this.start = _.first(items);
this.end = _.last(items);
util.spaceHorizontally(items, { util.spaceHorizontally(items, {
padding: 10 padding: 10
}); });

View File

@ -21,37 +21,19 @@ export default {
_render() { _render() {
return this.content.render(this.container.group()) return this.content.render(this.container.group())
.then(() => { .then(() => {
var box, paths = []; var box, paths;
this.content.transform(this.repeat.contentPosition); this.content.transform(this.repeat.contentPosition);
box = this.content.getBBox(); box = this.content.getBBox();
if (this.repeat.hasSkip) { paths = _.flatten([
let vert = Math.max(0, box.ay - box.y - 10), this.skipPath(box),
horiz = box.width - 10; this.loopPath(box)
]);
paths.push(`M0,${box.ay}q10,0 10,-10v${-vert}q0,-10 10,-10h${horiz}q10,0 10,10v${vert}q0,10 10,10`);
if (!this.repeat.greedy) {
paths.push(`M10,${box.ay - 15}l5,5m-5,-5l-5,5`);
}
}
if (this.repeat.hasLoop) {
let vert = box.y2 - box.ay - 10;
paths.push(`M${box.x},${box.ay}q-10,0 -10,10v${vert}q0,10 10,10h${box.width}q10,0 10,-10v${-vert}q0,-10 -10,-10`);
if (this.repeat.greedy) {
paths.push(`M${box.x2 + 10},${box.ay + 15}l5,-5m-5,5l-5,-5`);
}
}
if (paths.length) {
this.container.prepend( this.container.prepend(
this.container.path(paths.join(''))); this.container.path(paths.join('')));
}
}) })
.then(() => { .then(() => {
var labelStr = this.repeat.label, var labelStr = this.repeat.label,
@ -70,13 +52,45 @@ export default {
}); });
}, },
skipPath(box) {
var paths = [];
if (this.repeat.hasSkip) {
let vert = Math.max(0, box.ay - box.y - 10),
horiz = box.width - 10;
paths.push(`M0,${box.ay}q10,0 10,-10v${-vert}q0,-10 10,-10h${horiz}q10,0 10,10v${vert}q0,10 10,10`);
if (!this.repeat.greedy) {
paths.push(`M10,${box.ay - 15}l5,5m-5,-5l-5,5`);
}
}
return paths;
},
loopPath(box) {
var paths = [];
if (this.repeat.hasLoop) {
let vert = box.y2 - box.ay - 10;
paths.push(`M${box.x},${box.ay}q-10,0 -10,10v${vert}q0,10 10,10h${box.width}q10,0 10,-10v${-vert}q0,-10 -10,-10`);
if (this.repeat.greedy) {
paths.push(`M${box.x2 + 10},${box.ay + 15}l5,-5m-5,5l-5,-5`);
}
}
return paths;
},
setup() { setup() {
this.content = this.properties.content; this.content = this.properties.content;
this.canMerge = (this.elements[0].type === 'literal' && this.elements[1].textValue === ''); this.canMerge = (this.elements[0].type === 'literal' && this.elements[1].textValue === '');
if (this.properties.repeat.textValue !== '') {
this.repeat = this.properties.repeat; this.repeat = this.properties.repeat;
} else {
if (!this.repeat.hasLoop && !this.repeat.hasSkip) {
this.proxy = this.content; this.proxy = this.content;
} }
} }