You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.8 KiB
62 lines
1.8 KiB
/** |
|
* Abstract shape element. Shape element represents some visual vector or raster object. |
|
* @constructor |
|
* @param {String} name Tag name of the element. |
|
* @param {Object} config Set of parameters to initialize element with. |
|
* @param {Object} style Object with styles to set on element initialization. |
|
*/ |
|
jvm.AbstractShapeElement = function(name, config, style){ |
|
this.style = style || {}; |
|
this.style.current = this.style.current || {}; |
|
this.isHovered = false; |
|
this.isSelected = false; |
|
this.updateStyle(); |
|
}; |
|
|
|
/** |
|
* Set element's style. |
|
* @param {Object|String} property Could be string to set only one property or object to set several style properties at once. |
|
* @param {String} value Value to set in case only one property should be set. |
|
*/ |
|
jvm.AbstractShapeElement.prototype.setStyle = function(property, value){ |
|
var styles = {}; |
|
|
|
if (typeof property === 'object') { |
|
styles = property; |
|
} else { |
|
styles[property] = value; |
|
} |
|
jvm.$.extend(this.style.current, styles); |
|
this.updateStyle(); |
|
}; |
|
|
|
|
|
jvm.AbstractShapeElement.prototype.updateStyle = function(){ |
|
var attrs = {}; |
|
|
|
jvm.AbstractShapeElement.mergeStyles(attrs, this.style.initial); |
|
jvm.AbstractShapeElement.mergeStyles(attrs, this.style.current); |
|
if (this.isHovered) { |
|
jvm.AbstractShapeElement.mergeStyles(attrs, this.style.hover); |
|
} |
|
if (this.isSelected) { |
|
jvm.AbstractShapeElement.mergeStyles(attrs, this.style.selected); |
|
if (this.isHovered) { |
|
jvm.AbstractShapeElement.mergeStyles(attrs, this.style.selectedHover); |
|
} |
|
} |
|
this.set(attrs); |
|
}; |
|
|
|
jvm.AbstractShapeElement.mergeStyles = function(styles, newStyles){ |
|
var key; |
|
|
|
newStyles = newStyles || {}; |
|
for (key in newStyles) { |
|
if (newStyles[key] === null) { |
|
delete styles[key]; |
|
} else { |
|
styles[key] = newStyles[key]; |
|
} |
|
} |
|
} |