65 lines
1.8 KiB
JavaScript
65 lines
1.8 KiB
JavaScript
SVG.Path = SVG.invent({
|
|
// Initialize node
|
|
create: 'path'
|
|
|
|
// Inherit from
|
|
, inherit: SVG.Shape
|
|
|
|
// Add class methods
|
|
, extend: {
|
|
// Define morphable array
|
|
morphArray: SVG.PathArray
|
|
// Get array
|
|
, array: function() {
|
|
return this._array || (this._array = new SVG.PathArray(this.attr('d')))
|
|
}
|
|
// Plot new path
|
|
, plot: function(d) {
|
|
return (d == null) ?
|
|
this.array() :
|
|
this.clear().attr('d', typeof d == 'string' ? d : (this._array = new SVG.PathArray(d)))
|
|
}
|
|
// Clear array cache
|
|
, clear: function() {
|
|
delete this._array
|
|
return this
|
|
}
|
|
// Move by left top corner
|
|
, move: function(x, y) {
|
|
return this.attr('d', this.array().move(x, y))
|
|
}
|
|
// Move by left top corner over x-axis
|
|
, x: function(x) {
|
|
return x == null ? this.bbox().x : this.move(x, this.bbox().y)
|
|
}
|
|
// Move by left top corner over y-axis
|
|
, y: function(y) {
|
|
return y == null ? this.bbox().y : this.move(this.bbox().x, y)
|
|
}
|
|
// Set element size to given width and height
|
|
, size: function(width, height) {
|
|
var p = proportionalSize(this, width, height)
|
|
|
|
return this.attr('d', this.array().size(p.width, p.height))
|
|
}
|
|
// Set width of element
|
|
, width: function(width) {
|
|
return width == null ? this.bbox().width : this.size(width, this.bbox().height)
|
|
}
|
|
// Set height of element
|
|
, height: function(height) {
|
|
return height == null ? this.bbox().height : this.size(this.bbox().width, height)
|
|
}
|
|
|
|
}
|
|
|
|
// Add parent method
|
|
, construct: {
|
|
// Create a wrapped path element
|
|
path: function(d) {
|
|
// make sure plot is called as a setter
|
|
return this.put(new SVG.Path).plot(d || new SVG.PathArray)
|
|
}
|
|
}
|
|
})
|