module.exports = Label; /** * A label represents the element(s) which further describe a link. * It encapsulates the property and its inverse property. * @param property the property; the inverse is inferred * @param link the link this label belongs to */ function Label( property, link ){ this.link = function (){ return link; }; this.property = function (){ return property; }; // "Forward" the fixed value set on the property to avoid having to access this container Object.defineProperty(this, "fixed", { get: function (){ var inverseFixed = property.inverse() ? property.inverse().fixed : false; return property.fixed || inverseFixed; }, set: function ( v ){ property.fixed = v; if ( property.inverse() ) property.inverse().fixed = v; } }); this.frozen = property.frozen; this.locked = property.locked; this.pinned = property.pinned; } Label.prototype.actualRadius = function (){ return this.property().actualRadius(); }; Label.prototype.draw = function ( container ){ return this.property().draw(container); }; Label.prototype.inverse = function (){ return this.property().inverse(); }; Label.prototype.equals = function ( other ){ if ( !other ) { return false; } var instance = other instanceof Label; var equalProperty = this.property().equals(other.property()); var equalInverse = false; if ( this.inverse() ) { equalInverse = this.inverse().equals(other.inverse()); } else if ( !other.inverse() ) { equalInverse = true; } return instance && equalProperty && equalInverse; };