Adding node-type-specific anchor code
This commit is contained in:
		
							parent
							
								
									9ba2b8579e
								
							
						
					
					
						commit
						c2d8473425
					
				@ -6,22 +6,30 @@ export default _.extend({}, Base, {
 | 
			
		||||
  type: 'charset',
 | 
			
		||||
 | 
			
		||||
  _render() {
 | 
			
		||||
    var partContainer = this.container.group();
 | 
			
		||||
    this.partContainer = this.container.group();
 | 
			
		||||
 | 
			
		||||
    return Q.all(_.map(this.parts.elements, part => {
 | 
			
		||||
      return part.render(partContainer.group());
 | 
			
		||||
    }))
 | 
			
		||||
    return Q.all(_.map(this.parts.elements, (part => {
 | 
			
		||||
      return part.render(this.partContainer.group());
 | 
			
		||||
    }).bind(this)))
 | 
			
		||||
      .then((() => {
 | 
			
		||||
        this.spaceVertically(this.parts.elements, {
 | 
			
		||||
          padding: 5
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        return this.renderLabeledBox(this.invert() ? 'None of:' : 'One of:', partContainer, {
 | 
			
		||||
        return this.renderLabeledBox(this.invert() ? 'None of:' : 'One of:', this.partContainer, {
 | 
			
		||||
          padding: 5
 | 
			
		||||
        });
 | 
			
		||||
      }).bind(this));
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  _getAnchor() {
 | 
			
		||||
    var matrix = this.transform().localMatrix;
 | 
			
		||||
 | 
			
		||||
    return _.extend(Base._getAnchor.call(this), {
 | 
			
		||||
      ay: matrix.y(0, this.partContainer.getBBox().cy)
 | 
			
		||||
    });
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  invert() {
 | 
			
		||||
    return this._invert.textValue !== '';
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@ -27,6 +27,7 @@ export default _.extend({}, Base, {
 | 
			
		||||
 | 
			
		||||
      return Q.all(_([start, partPromises, end]).flatten().compact().value())
 | 
			
		||||
        .then(((items) => {
 | 
			
		||||
          this.items = items;
 | 
			
		||||
          this.spaceHorizontally(items, {
 | 
			
		||||
            padding: 10
 | 
			
		||||
          });
 | 
			
		||||
@ -58,5 +59,18 @@ export default _.extend({}, Base, {
 | 
			
		||||
 | 
			
		||||
      return result;
 | 
			
		||||
    }, []);
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  _getAnchor() {
 | 
			
		||||
    var start = this.normalizeBBox(_.first(this.items).getBBox()),
 | 
			
		||||
        end = this.normalizeBBox(_.last(this.items).getBBox()),
 | 
			
		||||
        matrix = this.transform().localMatrix;
 | 
			
		||||
 | 
			
		||||
    return {
 | 
			
		||||
      atype: [start.atype, end.atype].join('/'),
 | 
			
		||||
      ax: matrix.x(start.ax, start.ay),
 | 
			
		||||
      ax2: matrix.x(end.ax2, end.ay),
 | 
			
		||||
      ay: matrix.y(start.ax, start.ay)
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
@ -17,17 +17,17 @@ export default _.extend({}, Base, {
 | 
			
		||||
          box = this._content.getBBox();
 | 
			
		||||
 | 
			
		||||
          if (this._repeat.hasSkip()) {
 | 
			
		||||
            paths.push(Snap.format('M0,{box.cy}q10,0 10,-10v-{vert}q0,-10 10,-10h{horiz}q10,0 10,10v{vert}q0,10 10,10', {
 | 
			
		||||
            paths.push(Snap.format('M0,{box.ay}q10,0 10,-10v-{vert}q0,-10 10,-10h{horiz}q10,0 10,10v{vert}q0,10 10,10', {
 | 
			
		||||
              box,
 | 
			
		||||
              vert: box.height / 2 - 10,
 | 
			
		||||
              vert: Math.max(0, box.ay - box.y - 10),
 | 
			
		||||
              horiz: box.width - 10
 | 
			
		||||
            }));
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          if (this._repeat.hasLoop()) {
 | 
			
		||||
            paths.push(Snap.format('M{box.x},{box.cy}q-10,0 -10,10v{vert}q0,10 10,10h{box.width}q10,0 10,-10v-{vert}q0,-10 -10,-10', {
 | 
			
		||||
            paths.push(Snap.format('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', {
 | 
			
		||||
              box,
 | 
			
		||||
              vert: box.height / 2 - 10
 | 
			
		||||
              vert: box.y2 - box.ay - 10
 | 
			
		||||
            }));
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
@ -37,5 +37,16 @@ export default _.extend({}, Base, {
 | 
			
		||||
          }
 | 
			
		||||
        }).bind(this));
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  _getAnchor() {
 | 
			
		||||
    var anchor = this._content.getAnchor(),
 | 
			
		||||
        matrix = this.transform().localMatrix;
 | 
			
		||||
 | 
			
		||||
    return _.extend(anchor, {
 | 
			
		||||
      ax: matrix.x(anchor.ax, anchor.ay),
 | 
			
		||||
      ax2: matrix.x(anchor.ax2, anchor.ay),
 | 
			
		||||
      ay: matrix.y(anchor.ax, anchor.ay)
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
@ -31,16 +31,8 @@ export default _.extend({}, Base, {
 | 
			
		||||
          containerBox = this.getBBox();
 | 
			
		||||
          paths = _.map(matches, this.makeConnectorLine.bind(this, containerBox));
 | 
			
		||||
 | 
			
		||||
          paths.push(Snap.format([
 | 
			
		||||
            'M0,{box.cy}q10,0 10,-10V{top}',
 | 
			
		||||
            'M0,{box.cy}q10,0 10,10V{bottom}',
 | 
			
		||||
            'M{box.width},{box.cy}m40,0q-10,0 -10,-10V{top}',
 | 
			
		||||
            'M{box.width},{box.cy}m40,0q-10,0 -10,10V{bottom}'
 | 
			
		||||
          ].join(''), {
 | 
			
		||||
            box: containerBox,
 | 
			
		||||
            top: _.first(matches).getBBox().ay + 10,
 | 
			
		||||
            bottom: _.last(matches).getBBox().ay - 10
 | 
			
		||||
          }));
 | 
			
		||||
          paths.push(this.makeSideLine(containerBox, _.first(matches)));
 | 
			
		||||
          paths.push(this.makeSideLine(containerBox, _.last(matches)));
 | 
			
		||||
 | 
			
		||||
          this.container.prepend(
 | 
			
		||||
            this.container.path(paths.join('')));
 | 
			
		||||
@ -48,6 +40,25 @@ export default _.extend({}, Base, {
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  makeSideLine(containerBox, match) {
 | 
			
		||||
    var box = match.getBBox(),
 | 
			
		||||
        direction = box.ay > containerBox.cy ? 1 : -1,
 | 
			
		||||
        distance = Math.abs(box.ay - containerBox.cy);
 | 
			
		||||
 | 
			
		||||
    if (distance >= 15) {
 | 
			
		||||
      return Snap.format([
 | 
			
		||||
        'M0,{box.cy}q10,0 10,{shift}V{edge}',
 | 
			
		||||
        'M{box.width},{box.cy}m40,0q-10,0 -10,{shift}V{edge}'
 | 
			
		||||
      ].join(''), {
 | 
			
		||||
        box: containerBox,
 | 
			
		||||
        edge: box.ay - 10 * direction,
 | 
			
		||||
        shift: 10 * direction
 | 
			
		||||
      });
 | 
			
		||||
    } else {
 | 
			
		||||
      return '';
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  makeConnectorLine(containerBox, match) {
 | 
			
		||||
    var box = match.getBBox(),
 | 
			
		||||
        direction = box.ay > containerBox.cy ? 1 : -1,
 | 
			
		||||
 | 
			
		||||
@ -20,17 +20,16 @@ export default {
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  contentPosition() {
 | 
			
		||||
    var x = 0, y = 0;
 | 
			
		||||
    var x = 0;
 | 
			
		||||
 | 
			
		||||
    if (this.hasLoop()) {
 | 
			
		||||
      x = 10;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (this.hasSkip()) {
 | 
			
		||||
      y = 10;
 | 
			
		||||
      x = 15;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return Snap.matrix().translate(x, y);
 | 
			
		||||
    return Snap.matrix().translate(x, 0);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -36,4 +36,15 @@ export default _.extend({}, Base, {
 | 
			
		||||
  resetCounter() {
 | 
			
		||||
    groupCounter = 1;
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  _getAnchor() {
 | 
			
		||||
    var anchor = this.regexp.getAnchor(),
 | 
			
		||||
        matrix = this.transform().localMatrix;
 | 
			
		||||
 | 
			
		||||
    return _.extend(anchor, {
 | 
			
		||||
      ax: matrix.x(anchor.ax, anchor.ay),
 | 
			
		||||
      ax2: matrix.x(anchor.ax2, anchor.ay),
 | 
			
		||||
      ay: matrix.y(anchor.ax, anchor.ay)
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user