aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSaivan <savian@me.com>2018-02-27 17:23:59 +1100
committerSaivan <savian@me.com>2018-02-27 17:23:59 +1100
commit1cb509f863b17af90827012e6f6ae81cb694f654 (patch)
tree97155f552708385cb85b209ba0e6c2ccc523bbdf /src
parent4b078f8732a494b7f184556f276b011317a766b5 (diff)
downloadsvg.js-1cb509f863b17af90827012e6f6ae81cb694f654.tar.gz
svg.js-1cb509f863b17af90827012e6f6ae81cb694f654.zip
Made developing a little more enjoyable
This commit adds playgrounds and a build:dev mode. Now you can call npm run build:dev to make the linter warn you about errors without breaking. Also, we now have playgrounds, where you can use a built version of svg.js to run your own tests.
Diffstat (limited to 'src')
-rw-r--r--src/matrix.js218
-rw-r--r--src/sugar.js18
-rw-r--r--src/transform.js404
-rw-r--r--src/utilities.js1
4 files changed, 207 insertions, 434 deletions
diff --git a/src/matrix.js b/src/matrix.js
index 48ed7a1..a7676da 100644
--- a/src/matrix.js
+++ b/src/matrix.js
@@ -1,4 +1,4 @@
-/* global abcdef, arrayToMatrix, deltaTransformPoint, parseMatrix */
+/* global abcdef, arrayToMatrix, parseMatrix, unitCircle, mag */
SVG.Matrix = SVG.invent({
// Initialize
@@ -23,159 +23,130 @@ SVG.Matrix = SVG.invent({
},
// Add methods
-, extend: {
+ extend: {
// Convert an object of affine parameters into a matrix
compose: function (o, cx, cy) {
-
// Set the defaults
var tx = o.translateX || 0
- , ty = o.translateY || 0
- , theta = o.theta || 0
- , sx = o.scaleX || 1
- , sy = o.scaleY || 1
- , lam = o.shear || 0
- , cx = cx || 0
- , cy = cy || 0
+ var ty = o.translateY || 0
+ var theta = o.theta || 0
+ var sx = o.scaleX || 1
+ var sy = o.scaleY || 1
+ var lam = o.shear || 0
+ cx = cx || 0
+ cy = cy || 0
// Calculate the trigonometric values
var ct = Math.cos(theta * Math.PI / 180)
- , st Math.sin(theta * Math.PI / 180)
+ var st = Math.sin(theta * Math.PI / 180)
// Calculate the matrix components directly
var a = sx * ct
- , b = sx * st
- , c = lam * sx * ct - sy * st
- , d = lam * sx * st + sy * ct
- , e = - sx * ct * (cx + cy * lam) + sy * st * cy + tx + cx
- , f = - sx * st * (cx + cy * lam) - sy * ct * cy + ty + cy
+ var b = sx * st
+ var c = lam * sx * ct - sy * st
+ var d = lam * sx * st + sy * ct
+ var e = -sx * ct * (cx + cy * lam) + sy * st * cy + tx + cx
+ var f = -sx * st * (cx + cy * lam) - sy * ct * cy + ty + cy
// Construct a new matrix and return it
var matrix = new SVG.Matrix([a, b, c, d, e, f])
return matrix
- }
+ },
// Decompose a matrix into the affine parameters needed to form it
- , decompose: function (matrix, cx, cy) {
-
+ decompose: function (matrix, cx, cy) {
// Get the paramaters of the current matrix
var a = matrix.a
- , b = matrix.b
- , c = matrix.c
- , d = matrix.d
- , e = matrix.e
- , f = matrix.f
+ var b = matrix.b
+ var c = matrix.c
+ var d = matrix.d
+ var e = matrix.e
+ var f = matrix.f
// Project the first basis vector onto the unit circle
- var circle = unitCircle (a, b)
- , theta = circle.theta
- , ct = circle.cos
- , st = circle.sin
+ var circle = unitCircle(a, b)
+ var theta = circle.theta
+ var ct = circle.cos
+ var st = circle.sin
// Work out the transformation parameters
var signX = Math.sign(a * ct + b * st)
- , sx = signX * mag (a, b)
- , lam = (st * d + ct * c) / (ct * a + st * b)
- , signY = Math.sign(- c * st + d * ct)
- , sy = mag (lam * a - c, d - lam * b)
- , tx = e - cx + cx * ct * sx + cy * (lam * ct * sx - st * sy)
- , ty = f - cy + cx * st * sx + cy * (lam * st * sx + ct * sy)
+ var sx = signX * mag(a, b)
+ var lam = (st * d + ct * c) / (ct * a + st * b)
+ var sy = mag(lam * a - c, d - lam * b)
+ var tx = e - cx + cx * ct * sx + cy * (lam * ct * sx - st * sy)
+ var ty = f - cy + cx * st * sx + cy * (lam * st * sx + ct * sy)
// Package and return the parameters
return {
// Bundle the affine parameters
- translateX: tx
- , translateY: ty
- , theta: theta
- , scaleX: sx
- , scaleY: sy
- , shear: lam
+ translateX: tx,
+ translateY: ty,
+ theta: theta,
+ scaleX: sx,
+ scaleY: sy,
+ shear: lam,
// Bundle the matrix parameters
- , a: this.a
- , b: this.b
- , c: this.c
- , d: this.d
- , e: this.e
- , f: this.f
-
- // Return the new origin point
- , x: this.e
- , y: this.f
-
- // Store the matrix
- , matrix: new SVG.Matrix(this)
- // translation
- x: this.e,
- y: this.f,
- transformedX: (this.e * Math.cos(skewX * Math.PI / 180) + this.f * Math.sin(skewX * Math.PI / 180)) / Math.sqrt(this.a * this.a + this.b * this.b),
- transformedY: (this.f * Math.cos(skewX * Math.PI / 180) + this.e * Math.sin(-skewX * Math.PI / 180)) / Math.sqrt(this.c * this.c + this.d * this.d),
- // skew
- skewX: -skewX,
- skewY: 180 / Math.PI * Math.atan2(py.y, py.x),
- // scale
- scaleX: Math.sqrt(this.a * this.a + this.b * this.b),
- scaleY: Math.sqrt(this.c * this.c + this.d * this.d),
- // rotation
- rotation: skewX,
a: this.a,
b: this.b,
c: this.c,
d: this.d,
e: this.e,
f: this.f,
+
+ // Return the new origin point
+ x: this.e,
+ y: this.f,
matrix: new SVG.Matrix(this)
->>>>>>> 3.0.0
}
},
// Clone matrix
- , form: function (o) {
-
- // Get all of the parameters required to form the matrix
- var flipX = o.flip && (o.flip == "x" || o.flip == "both") ? -1 : 1
- , flipY = o.flip && (o.flip == "y" || o.flip == "both") ? -1 : 1
- , kX = o.skew.length ? o.skew[0]
+ form: function (o) {
+ // Get all of the parameters required to form the matrix
+ var flipX = o.flip && (o.flip === 'x' || o.flip === 'both') ? -1 : 1
+ var flipY = o.flip && (o.flip === 'y' || o.flip === 'both') ? -1 : 1
+ var skewX = o.skew.length ? o.skew[0]
: isFinite(o.skew) ? o.skew
: isFinite(o.skewX) ? o.skewX
: 0
- , kY = o.skew.length ? o.skew[1]
+ var skewY = o.skew.length ? o.skew[1]
: isFinite(o.skew) ? o.skew
: isFinite(o.skewY) ? o.skewY
: 0
- , skewX = o.scale.length ? o.scale[0] * flipX
+ var sx = o.scale.length ? o.scale[0] * flipX
: isFinite(o.scale) ? o.scale * flipX
: isFinite(o.scaleX) ? o.scaleX * flipX
: flipX
- , skewY = o.scale.length ? o.scale[1] * flipY
+ var sy = o.scale.length ? o.scale[1] * flipY
: isFinite(o.scale) ? o.scale * flipY
: isFinite(o.scaleY) ? o.scaleY * flipY
: flipY
- , kx = Math.tan(SVG.utils.radians(skewX))
- , ky = Math.tan(SVG.utils.radians(skewY))
- , lam = o.shear || 0
- , theta = SVG.utils.radians(o.rotate || 0)
- , st = Math.sin(theta)
- , ct = Math.cos(theta)
- , ox = o.origin.length ? o.origin[0] : o.ox || 0
- , oy = o.origin.length ? o.origin[1] : o.oy || 0
- , px = o.position.length ? o.position[0] : o.px || ox
- , py = o.position.length ? o.position[1] : o.py || oy
- , tx = o.translate.length ? o.translate[0] : o.tx || 0
- , ty = o.translate.length ? o.translate[1] : o.ty || 0
+ var kx = Math.tan(SVG.utils.radians(skewX))
+ var ky = Math.tan(SVG.utils.radians(skewY))
+ var lam = o.shear || 0
+ var theta = SVG.utils.radians(o.rotate || 0)
+ var st = Math.sin(theta)
+ var ct = Math.cos(theta)
+ var ox = o.origin.length ? o.origin[0] : o.ox || 0
+ var oy = o.origin.length ? o.origin[1] : o.oy || 0
+ var px = o.position.length ? o.position[0] : o.px || ox
+ var py = o.position.length ? o.position[1] : o.py || oy
+ var tx = o.translate.length ? o.translate[0] : o.tx || 0
+ var ty = o.translate.length ? o.translate[1] : o.ty || 0
// Form the matrix parameters... aka. welcome to wonderland! (used wolfram)
- var a = ct*sx + ky*st*sy
- , b = ct*ky*sy - st*sx
- , c = ct*kx*sx + st*sy + lam*(ct*sx+ky*st*sy)
- , d = -kx*st*sx + ct*sy + lam*(-st*sx + ct*ky*sy)
- , e = px + tx + cx*(ct*sx+ky*st*sy) + cy*(ct*kx*sx+st*sy+lam*(ct*sx+ky*st*sy))
- , f = py + ty + cx*(-st*sx + ct*ky*sy) + cy*(-kx*st*sx + ct*sy + lam*(-st*sx + ct*ky*sy))
- , result = new Matrix(a, b, c, d, e, f)
- return result
- }
- , clone: function() {
+ var a = ct * sx + ky * st * sy
+ var b = ct * ky * sy - st * sx
+ var c = ct * kx * sx + st * sy + lam * (ct * sx + ky * st * sy)
+ var d = -kx * st * sx + ct * sy + lam * (-st * sx + ct * ky * sy)
+ var e = px + tx + ox * (ct * sx + ky * st * sy) + oy * (ct * kx * sx + st * sy + lam * (ct * sx + ky * st * sy))
+ var f = py + ty + ox * (-st * sx + ct * ky * sy) + oy * (-kx * st * sx + ct * sy + lam * (-st * sx + ct * ky * sy))
+ var result = new SVG.Matrix(a, b, c, d, e, f)
+ return result
+ },
clone: function () {
->>>>>>> 3.0.0
return new SVG.Matrix(this)
},
// Morph one matrix into another
@@ -211,15 +182,15 @@ SVG.Matrix = SVG.invent({
return new SVG.Matrix(this.native().inverse())
},
// Translate matrix
- , translate: function(x, y) {
- var translation = new SVG.Matrix(this.native().translate(x || 0, y || 0))
- , matrix = this.multiply(translation)
+ translate: function (x, y) {
+ var translation = new SVG.Matrix(this.native().translate(x || 0, y || 0))
+ var matrix = this.multiply(translation)
return matrix
- }
+ },
// Scale matrix
- , scale: function(x, y, cx, cy) {
+ scale: function (x, y, cx, cy) {
// Support uniform scaling
- if (arguments.length == 1) {
+ if (arguments.length === 1) {
y = x
} else if (arguments.length === 3) {
cy = cx
@@ -229,22 +200,21 @@ SVG.Matrix = SVG.invent({
// Rotate the current matrix
var scale = new SVG.Matrix(x, 0, 0, y, 0, 0)
- , centered = this.around(cx, cy, rotation)
- , matrix = this.multiply(centered)
- return scale
- }
+ var centered = this.around(cx, cy, scale)
+ var matrix = this.multiply(centered)
+ return matrix
+ },
// Rotate matrix
- , rotate: function(r, cx, cy) {
-
+ rotate: function (r, cx, cy) {
// Convert degrees to radians
r = SVG.utils.radians(r)
// Construct the rotation matrix
var rotation = new SVG.Matrix(Math.cos(r), Math.sin(r), -Math.sin(r), Math.cos(r), 0, 0)
- , centered = this.around(cx, cy, rotation)
- , matrix = this.multiply(centered)
+ var centered = this.around(cx, cy, rotation)
+ var matrix = this.multiply(centered)
return matrix
- }
+ },
// Flip matrix on x or y, at a given offset
flip: function (a, o) {
return a === 'x' ? this.scale(-1, 1, o, 0)
@@ -252,13 +222,13 @@ SVG.Matrix = SVG.invent({
: this.scale(-1, -1, a, o != null ? o : a)
},
// Skew
- , shear: function(a, cx, cy) {
- var shear = new SVG.Matrix(1, a, 0, 1, 0, 0)
- , centered = this.around(cx, cy, shear)
- , matrix = this.multiply(centered)
- return matrix
- }
- , skew: function(x, y, cx, cy) {
+ shear: function (a, cx, cy) {
+ var shear = new SVG.Matrix(1, a, 0, 1, 0, 0)
+ var centered = this.around(cx, cy, shear)
+ var matrix = this.multiply(centered)
+ return matrix
+ },
+ skew: function (x, y, cx, cy) {
// support uniformal skew
if (arguments.length === 1) {
y = x
@@ -274,10 +244,10 @@ SVG.Matrix = SVG.invent({
// Construct the matrix
var skew = new SVG.Matrix(1, Math.tan(y), Math.tan(x), 1, 0, 0)
- , centered = this.around(cx, cy, skew)
- , matrix = this.multiply(centered)
+ var centered = this.around(cx, cy, skew)
+ var matrix = this.multiply(centered)
return matrix
- }
+ },
// SkewX
skewX: function (x, cx, cy) {
return this.skew(x, 0, cx, cy)
diff --git a/src/sugar.js b/src/sugar.js
index 7c555da..e82f4bb 100644
--- a/src/sugar.js
+++ b/src/sugar.js
@@ -35,17 +35,17 @@ var sugar = {
SVG.extend([SVG.Element, SVG.FX], {
// Map rotation to transform
-, rotate: function(angle, cx, cy) {
+ rotate: function (angle, cx, cy) {
var matrix = new SVG.Matrix().rotate(angle, cx, cy)
-
- return this.transform({ rotation: d, cx: cx, cy: cy })
+ return this.matrix(matrix, true)
},
// Map skew to transform
-, skew: function(x, y, cx, cy) {
- return arguments.length == 1 || arguments.length == 3 ?
- this.transform({ skew: x, cx: y, cy: cx }) :
- this.transform({ skewX: x, skewY: y, cx: cx, cy: cy })
- }
+ skew: function (x, y, cx, cy) {
+ var matrix = arguments.length === 1 || arguments.length === 3
+ ? new SVG.Matrix().skew(x, x, cx, cy)
+ : new SVG.Matrix().skew(x, y, cx, cy)
+ return this.matrix(matrix, true)
+ },
// Map scale to transform
scale: function (x, y, cx, cy) {
return arguments.length === 1 || arguments.length === 3
@@ -60,7 +60,7 @@ SVG.extend([SVG.Element, SVG.FX], {
flip: function (a, o) {
o = typeof a === 'number' ? a : o
return this.transform({ flip: a || 'both', offset: o })
- }
+ },
// Opacity
opacity: function (value) {
return this.attr('opacity', value)
diff --git a/src/transform.js b/src/transform.js
index 4076301..625a5ab 100644
--- a/src/transform.js
+++ b/src/transform.js
@@ -1,37 +1,72 @@
-/* global ensureCentre, capitalize, arrayToMatrix */
+/* global arrayToMatrix */
SVG.extend(SVG.Element, {
+ // Reset all transformations
+ untransform: function () {
+ return this.attr('transform', null)
+ },
- // Add transformations
- transform: function (o) {
+ // merge the whole transformation chain into one matrix and returns it
+ matrixify: function () {
+ var matrix = (this.attr('transform') || '')
+ // split transformations
+ .split(SVG.regex.transforms).slice(0, -1).map(function (str) {
+ // generate key => value pairs
+ var kv = str.trim().split('(')
+ return [kv[0], kv[1].split(SVG.regex.delimiter).map(function (str) { return parseFloat(str) })]
+ })
+ // merge every transformation into one matrix
+ .reduce(function (matrix, transform) {
+ if (transform[0] === 'matrix') return matrix.multiply(arrayToMatrix(transform[1]))
+ return matrix[transform[0]].apply(matrix, transform[1])
+ }, new SVG.Matrix())
- /**
- * EXTRACTING PARAMETERS
- */
+ return matrix
+ },
+ // add an element to another parent without changing the visual representation on the screen
+ toParent: function (parent) {
+ if (this === parent) return this
+ var ctm = this.screenCTM()
+ var pCtm = parent.screenCTM().inverse()
+
+ this.addTo(parent).untransform().transform(pCtm.multiply(ctm))
+
+ return this
+ },
+
+ // same as above with parent equals root-svg
+ toDoc: function () {
+ return this.toParent(this.doc())
+ }
+})
+
+SVG.extend(SVG.Element, {
+
+ // Add transformations
+ transform: function (o) {
// Act as a getter if no object was passed
if (typeof o !== 'object') {
- matrix = new SVG.Matrix(this).extract()
+ var matrix = new SVG.Matrix(this).decompose()
return typeof o === 'string' ? matrix[o] : matrix
}
// Allow the user to define the origin with a string
- if (typeof o.origin === "string") {
-
+ if (typeof o.origin === 'string') {
// Get the bounding box and string to use in our calculations
var string = o.origin.toLowerCase().trim()
- , bbox = this.bbox()
- , x = bbox.x
- , y = bbox.y
- , width = bbox.width
- , height = bbox.height
+ var bbox = this.bbox()
+ var x = bbox.x
+ var y = bbox.y
+ var width = bbox.width
+ var height = bbox.height
// Set the bounds eg : "bottom-left", "Top right", "middle" etc...
- o.ox = string.includes("left") ? x
- : string.includes("right") ? x + width
+ o.ox = string.includes('left') ? x
+ : string.includes('right') ? x + width
: x + width / 2
- o.oy = string.includes("top") ? y
- : string.includes("bottom") ? y + height
+ o.oy = string.includes('top') ? y
+ : string.includes('bottom') ? y + height
: y + height / 2
// Make sure we only pass ox and oy
@@ -40,71 +75,14 @@ SVG.extend(SVG.Element, {
// Get the resulting matrix and apply it to the element
var result = new SVG.Matrix().form(o)
- , matrixString = result.toString()
- // get current matrix
- matrix = new SVG.Matrix(target)
-
- // ensure relative flag
- relative = !!relative || !!o.relative
-
- // act on matrix
- if (o.a != null) {
- matrix = relative
- ? matrix.multiply(new SVG.Matrix(o))
- : new SVG.Matrix(o)
-
- // act on rotation
- } else if (o.rotation != null) {
- // ensure centre point
- ensureCentre(o, target)
-
- // apply transformation
- matrix = relative
- ? matrix.rotate(o.rotation, o.cx, o.cy)
- : matrix.rotate(o.rotation - matrix.extract().rotation, o.cx, o.cy)
-
- // act on scale
- } else if (o.scale != null || o.scaleX != null || o.scaleY != null) {
- // ensure centre point
- ensureCentre(o, target)
-
- // ensure scale values on both axes
- o.scaleX = o.scale != null ? o.scale : o.scaleX != null ? o.scaleX : 1
- o.scaleY = o.scale != null ? o.scale : o.scaleY != null ? o.scaleY : 1
-
- if (!relative) {
- // absolute; multiply inversed values
- var e = matrix.extract()
- o.scaleX = o.scaleX * 1 / e.scaleX
- o.scaleY = o.scaleY * 1 / e.scaleY
- }
-
- matrix = matrix.scale(o.scaleX, o.scaleY, o.cx, o.cy)
-
- // act on skew
- } else if (o.skew != null || o.skewX != null || o.skewY != null) {
- // ensure centre point
- ensureCentre(o, target)
-
- // ensure skew values on both axes
- o.skewX = o.skew != null ? o.skew : o.skewX != null ? o.skewX : 0
- o.skewY = o.skew != null ? o.skew : o.skewY != null ? o.skewY : 0
-
- if (!relative) {
- // absolute; reset skew values
- var el = matrix.extract()
- matrix = matrix.multiply(new SVG.Matrix().skew(el.skewX, el.skewY, el.cx, el.cy).inverse())
- }
->>>>>>> 3.0.0
+ var matrixString = result.toString()
// Apply the result
- return this.attr('transform', matrix)
- }
- }
+ return this.attr('transform', matrixString)
+ },
// Map matrix to transform
-, matrix: function(m, relative) {
-
+ matrix: function (m, relative) {
// Construct a matrix from the first parameter
var matrix = new SVG.Matrix(m)
@@ -120,10 +98,7 @@ SVG.extend(SVG.Element, {
})
SVG.extend(SVG.FX, {
- transform: function(o, relative) {
-
-
-
+ transform: function (o, relative) {
// // get target in case of the fx module, otherwise reference this
// var target = this.target()
@@ -203,90 +178,51 @@ SVG.extend(SVG.FX, {
//
// return this._callStart()
// }
- // ensure scale values on both axes
- o.scaleX = o.scale != null ? o.scale : o.scaleX != null ? o.scaleX : 1
- o.scaleY = o.scale != null ? o.scale : o.scaleY != null ? o.scaleY : 1
-
- matrix = new SVG.Scale(o.scaleX, o.scaleY, o.cx, o.cy)
-
- // act on skew
- } else if (o.skewX != null || o.skewY != null) {
- // ensure centre point
- ensureCentre(o, target)
-
- // ensure skew values on both axes
- o.skewX = o.skewX != null ? o.skewX : 0
- o.skewY = o.skewY != null ? o.skewY : 0
-
- matrix = new SVG.Skew(o.skewX, o.skewY, o.cx, o.cy)
-
- // act on flip
- } else if (o.flip) {
- if (o.flip === 'x' || o.flip === 'y') {
- o.offset = o.offset == null ? target.bbox()['c' + o.flip] : o.offset
- } else {
- if (o.offset == null) {
- bbox = target.bbox()
- o.flip = bbox.cx
- o.offset = bbox.cy
- } else {
- o.flip = o.offset
- }
- }
-
- matrix = new SVG.Matrix().flip(o.flip, o.offset)
-
- // act on translate
- } else if (o.x != null || o.y != null) {
- matrix = new SVG.Translate(o.x, o.y)
- }
-
- if (!matrix) return this
-
- matrix.relative = relative
-
- this.last().transforms.push(matrix)
-
- return this._callStart()
- }
->>>>>>> 3.0.0
-})
-
-SVG.extend(SVG.Element, {
- // Reset all transformations
- untransform: function () {
- return this.attr('transform', null)
- },
- // merge the whole transformation chain into one matrix and returns it
- matrixify: function () {
- var matrix = (this.attr('transform') || '')
- // split transformations
- .split(SVG.regex.transforms).slice(0, -1).map(function (str) {
- // generate key => value pairs
- var kv = str.trim().split('(')
- return [kv[0], kv[1].split(SVG.regex.delimiter).map(function (str) { return parseFloat(str) })]
- })
- // merge every transformation into one matrix
- .reduce(function (matrix, transform) {
- if (transform[0] === 'matrix') return matrix.multiply(arrayToMatrix(transform[1]))
- return matrix[transform[0]].apply(matrix, transform[1])
- }, new SVG.Matrix())
-
- return matrix
- },
- // add an element to another parent without changing the visual representation on the screen
- toParent: function (parent) {
- if (this === parent) return this
- var ctm = this.screenCTM()
- var pCtm = parent.screenCTM().inverse()
-
- this.addTo(parent).untransform().transform(pCtm.multiply(ctm))
-
- return this
- },
- // same as above with parent equals root-svg
- toDoc: function () {
- return this.toParent(this.doc())
+ // // ensure scale values on both axes
+ // o.scaleX = o.scale != null ? o.scale : o.scaleX != null ? o.scaleX : 1
+ // o.scaleY = o.scale != null ? o.scale : o.scaleY != null ? o.scaleY : 1
+ //
+ // matrix = new SVG.Scale(o.scaleX, o.scaleY, o.cx, o.cy)
+ //
+ // // act on skew
+ // } else if (o.skewX != null || o.skewY != null) {
+ // // ensure centre point
+ // ensureCentre(o, target)
+ //
+ // // ensure skew values on both axes
+ // o.skewX = o.skewX != null ? o.skewX : 0
+ // o.skewY = o.skewY != null ? o.skewY : 0
+ //
+ // matrix = new SVG.Skew(o.skewX, o.skewY, o.cx, o.cy)
+ //
+ // // act on flip
+ // } else if (o.flip) {
+ // if (o.flip === 'x' || o.flip === 'y') {
+ // o.offset = o.offset == null ? target.bbox()['c' + o.flip] : o.offset
+ // } else {
+ // if (o.offset == null) {
+ // bbox = target.bbox()
+ // o.flip = bbox.cx
+ // o.offset = bbox.cy
+ // } else {
+ // o.flip = o.offset
+ // }
+ // }
+ //
+ // matrix = new SVG.Matrix().flip(o.flip, o.offset)
+ //
+ // // act on translate
+ // } else if (o.x != null || o.y != null) {
+ // matrix = new SVG.Translate(o.x, o.y)
+ // }
+ //
+ // if (!matrix) return this
+ //
+ // matrix.relative = relative
+ //
+ // this.last().transforms.push(matrix)
+ //
+ // return this._callStart()
}
})
@@ -432,137 +368,3 @@ SVG.extend(SVG.Element, {
// }
//
// })
-SVG.Transformation = SVG.invent({
-
- create: function (source, inversed) {
- if (arguments.length > 1 && typeof inversed !== 'boolean') {
- return this.constructor.bind(this)([].slice.call(arguments))
- }
-
- var i, len
- if (Array.isArray(source)) {
- for (i = 0, len = this.arguments.length; i < len; ++i) {
- this[this.arguments[i]] = source[i]
- }
- } else if (typeof source === 'object') {
- for (i = 0, len = this.arguments.length; i < len; ++i) {
- this[this.arguments[i]] = source[this.arguments[i]]
- }
- }
-
- this.inversed = false
-
- if (inversed === true) {
- this.inversed = true
- }
- },
-
- extend: {
-
- arguments: [],
- method: '',
-
- at: function (pos) {
- var params = []
-
- for (var i = 0, len = this.arguments.length; i < len; ++i) {
- params.push(this[this.arguments[i]])
- }
-
- var m = this._undo || new SVG.Matrix()
-
- m = new SVG.Matrix().morph(SVG.Matrix.prototype[this.method].apply(m, params)).at(pos)
-
- return this.inversed ? m.inverse() : m
- },
-
- undo: function (o) {
- for (var i = 0, len = this.arguments.length; i < len; ++i) {
- o[this.arguments[i]] = typeof this[this.arguments[i]] === 'undefined' ? 0 : o[this.arguments[i]]
- }
-
- // The method SVG.Matrix.extract which was used before calling this
- // method to obtain a value for the parameter o doesn't return a cx and
- // a cy so we use the ones that were provided to this object at its creation
- o.cx = this.cx
- o.cy = this.cy
-
- this._undo = new SVG[capitalize(this.method)](o, true).at(1)
- return this
- }
-
- }
-
-})
-
-SVG.Translate = SVG.invent({
-
- parent: SVG.Matrix,
- inherit: SVG.Transformation,
-
- create: function (source, inversed) {
- this.constructor.apply(this, [].slice.call(arguments))
- },
-
- extend: {
- arguments: ['transformedX', 'transformedY'],
- method: 'translate'
- }
-
-})
-
-SVG.Rotate = SVG.invent({
-
- parent: SVG.Matrix,
- inherit: SVG.Transformation,
-
- create: function (source, inversed) {
- this.constructor.apply(this, [].slice.call(arguments))
- },
-
- extend: {
- arguments: ['rotation', 'cx', 'cy'],
- method: 'rotate',
- at: function (pos) {
- var m = new SVG.Matrix().rotate(new SVG.Number().morph(this.rotation - (this._undo ? this._undo.rotation : 0)).at(pos), this.cx, this.cy)
- return this.inversed ? m.inverse() : m
- },
- undo: function (o) {
- this._undo = o
- return this
- }
- }
-
-})
-
-SVG.Scale = SVG.invent({
-
- parent: SVG.Matrix,
- inherit: SVG.Transformation,
-
- create: function (source, inversed) {
- this.constructor.apply(this, [].slice.call(arguments))
- },
-
- extend: {
- arguments: ['scaleX', 'scaleY', 'cx', 'cy'],
- method: 'scale'
- }
-
-})
-
-SVG.Skew = SVG.invent({
-
- parent: SVG.Matrix,
- inherit: SVG.Transformation,
-
- create: function (source, inversed) {
- this.constructor.apply(this, [].slice.call(arguments))
- },
-
- extend: {
- arguments: ['skewX', 'skewY', 'cx', 'cy'],
- method: 'skew'
- }
-})
->>>>>>> 3.0.0
diff --git a/src/utilities.js b/src/utilities.js
index 5ebe808..01b8ba5 100644
--- a/src/utilities.js
+++ b/src/utilities.js
@@ -1,3 +1,4 @@
+
SVG.utils = {
// Map function
map: function (array, block) {