jui.define("util.svg.element.path", [ "util.base" ], function(_) {
/**
* @class util.svg.element.path
*
* @alias PathElement
* @extends util.svg.transform
* @requires util.base
*/
var PathElement = function() {
var orders = [];
this.moveTo = function(x, y, type) {
orders.push( (type || "m") + x + "," + y );
return this;
}
this.MoveTo = function(x, y) {
return this.moveTo(x, y, "M");
}
this.lineTo = function(x, y, type) {
orders.push( (type || "l") + x + "," + y );
return this;
}
this.LineTo = function(x, y) {
return this.lineTo(x, y, "L");
}
this.hLineTo = function(x, type) {
orders.push( (type || "h") + x );
return this;
}
this.HLineTo = function(x) {
return this.hLineTo(x, "H");
}
this.vLineTo = function(y, type) {
orders.push( (type || "v") + y );
return this;
}
this.VLineTo = function(y) {
return this.vLineTo(y, "V");
}
this.curveTo = function(x1, y1, x2, y2, x, y, type) {
orders.push( (type || "c") + x1 + "," + y1 + " " + x2 + "," + y2 + " " + x + "," + y );
return this;
}
this.CurveTo = function(x1, y1, x2, y2, x, y) {
return this.curveTo(x1, y1, x2, y2, x, y, "C");
}
this.sCurveTo = function(x2, y2, x, y, type) {
orders.push( (type || "s") + x2 + "," + y2 + " " + x + "," + y );
return this;
}
this.SCurveTo = function(x2, y2, x, y) {
return this.sCurveTo(x2, y2, x, y, "S");
}
this.qCurveTo = function(x1, y1, x, y, type) {
orders.push( (type || "q") + x1 + "," + y1 + " " + x + "," + y );
return this;
}
this.QCurveTo = function(x1, y1, x, y) {
return this.qCurveTo(x1, y1, x, y, "Q");
}
this.tCurveTo = function(x1, y1, x, y, type) {
orders.push( (type || "t") + x1 + "," + y1 + " " + x + "," + y );
return this;
}
this.TCurveTo = function(x1, y1, x, y) {
return this.tCurveTo(x1, y1, x, y, "T");
}
this.arc = function(rx, ry, x_axis_rotation, large_arc_flag, sweep_flag, x, y, type) {
large_arc_flag = (large_arc_flag) ? 1 : 0;
sweep_flag = (sweep_flag) ? 1 : 0;
orders.push( (type || "a") + rx + "," + ry + " " + x_axis_rotation + " " + large_arc_flag + "," + sweep_flag + " " + x + "," + y );
return this;
}
this.Arc = function(rx, ry, x_axis_rotation, large_arc_flag, sweep_flag, x, y) {
return this.arc(rx, ry, x_axis_rotation, large_arc_flag, sweep_flag, x, y, "A");
}
this.closePath = function(type) {
orders.push( (type || "z") );
return this;
}
this.ClosePath = function() {
return this.closePath("Z");
}
this.join = function() {
if(orders.length > 0) {
this.attr({ d: orders.join(" ") });
orders = [];
}
}
this.length = function() {
var id = _.createId(),
d = orders.join(" ");
var svg = document.createElement("svg"),
path = document.createElementNS("http://www.w3.org/2000/svg", "path");
path.setAttributeNS(null, "id", id);
path.setAttributeNS(null, "d", d);
svg.appendChild(path);
document.body.appendChild(svg);
var length = document.getElementById(id).getTotalLength();
document.body.removeChild(svg);
return length;
}
}
return PathElement;
}, "util.svg.element.transform");