/* global proportionalSize */ 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()) } } })