/* global proportionalSize */ SVG.Line = SVG.invent({ // Initialize node create: 'line', // Inherit from inherit: SVG.Shape, // Add class methods extend: { // Get array array: function () { return new SVG.PointArray([ [ this.attr('x1'), this.attr('y1') ], [ this.attr('x2'), this.attr('y2') ] ]) }, // Overwrite native plot() method plot: function (x1, y1, x2, y2) { if (x1 == null) { return this.array() } else if (typeof y1 !== 'undefined') { x1 = { x1: x1, y1: y1, x2: x2, y2: y2 } } else { x1 = new SVG.PointArray(x1).toLine() } return this.attr(x1) }, // Move by left top corner move: function (x, y) { return this.attr(this.array().move(x, y).toLine()) }, // Set element size to given width and height size: function (width, height) { var p = proportionalSize(this, width, height) return this.attr(this.array().size(p.width, p.height).toLine()) } }, // Add parent method construct: { // Create a line element line: function (x1, y1, x2, y2) { // make sure plot is called as a setter // x1 is not necessarily a number, it can also be an array, a string and a SVG.PointArray return SVG.Line.prototype.plot.apply( this.put(new SVG.Line()) , x1 != null ? [x1, y1, x2, y2] : [0, 0, 0, 0] ) } } })