aboutsummaryrefslogtreecommitdiffstats
path: root/src/helpers.js
diff options
context:
space:
mode:
authorwout <wout@impinc.co.uk>2014-08-29 12:45:21 +0200
committerwout <wout@impinc.co.uk>2014-08-29 12:45:21 +0200
commitdd4be62e397e4db78444881eed32865f98e52582 (patch)
treec2300f62c756fde22c80f30aba66dca04602297b /src/helpers.js
parent8789391f036ffded3ac919d62ee652e7cae15c5c (diff)
downloadsvg.js-dd4be62e397e4db78444881eed32865f98e52582.tar.gz
svg.js-dd4be62e397e4db78444881eed32865f98e52582.zip
Added SVG.TBox for transformed bounding boxes
Diffstat (limited to 'src/helpers.js')
-rw-r--r--src/helpers.js213
1 files changed, 111 insertions, 102 deletions
diff --git a/src/helpers.js b/src/helpers.js
index 8b11a00..70f189f 100644
--- a/src/helpers.js
+++ b/src/helpers.js
@@ -1,156 +1,165 @@
// Convert dash-separated-string to camelCase
function camelCase(s) {
- return s.toLowerCase().replace(/-(.)/g, function(m, g) {
- return g.toUpperCase()
- })
+ return s.toLowerCase().replace(/-(.)/g, function(m, g) {
+ return g.toUpperCase()
+ })
}
// Capitalize first letter of a string
function capitalize(s) {
- return s.charAt(0).toUpperCase() + s.slice(1)
+ return s.charAt(0).toUpperCase() + s.slice(1)
}
// Ensure to six-based hex
function fullHex(hex) {
- return hex.length == 4 ?
- [ '#',
- hex.substring(1, 2), hex.substring(1, 2)
- , hex.substring(2, 3), hex.substring(2, 3)
- , hex.substring(3, 4), hex.substring(3, 4)
- ].join('') : hex
+ return hex.length == 4 ?
+ [ '#',
+ hex.substring(1, 2), hex.substring(1, 2)
+ , hex.substring(2, 3), hex.substring(2, 3)
+ , hex.substring(3, 4), hex.substring(3, 4)
+ ].join('') : hex
}
// Component to hex value
function compToHex(comp) {
- var hex = comp.toString(16)
- return hex.length == 1 ? '0' + hex : hex
+ var hex = comp.toString(16)
+ return hex.length == 1 ? '0' + hex : hex
}
// Calculate proportional width and height values when necessary
function proportionalSize(box, width, height) {
- if (height == null)
- height = box.height / box.width * width
- else if (width == null)
- width = box.width / box.height * height
-
- return {
- width: width
- , height: height
- }
+ if (height == null)
+ height = box.height / box.width * width
+ else if (width == null)
+ width = box.width / box.height * height
+
+ return {
+ width: width
+ , height: height
+ }
}
// Delta transform point
function deltaTransformPoint(matrix, x, y) {
- return {
- x: x * matrix.a + y * matrix.c + 0
- , y: x * matrix.b + y * matrix.d + 0
- }
+ return {
+ x: x * matrix.a + y * matrix.c + 0
+ , y: x * matrix.b + y * matrix.d + 0
+ }
}
// Map matrix array to object
function arrayToMatrix(a) {
- return { a: a[0], b: a[1], c: a[2], d: a[3], e: a[4], f: a[5] }
+ return { a: a[0], b: a[1], c: a[2], d: a[3], e: a[4], f: a[5] }
}
// Parse matrix if required
function parseMatrix(matrix) {
- if (!(matrix instanceof SVG.Matrix))
- matrix = new SVG.Matrix(matrix)
-
- return matrix
+ if (!(matrix instanceof SVG.Matrix))
+ matrix = new SVG.Matrix(matrix)
+
+ return matrix
}
// Convert string to matrix
function stringToMatrix(source) {
- // remove matrix wrapper and split to individual numbers
- source = source
- .replace(SVG.regex.whitespace, '')
- .replace(SVG.regex.matrix, '')
- .split(',')
-
- // convert string values to floats and convert to a matrix-formatted object
- return arrayToMatrix(
- SVG.utils.map(source, function(n) {
- return parseFloat(n)
- })
- )
+ // remove matrix wrapper and split to individual numbers
+ source = source
+ .replace(SVG.regex.whitespace, '')
+ .replace(SVG.regex.matrix, '')
+ .split(',')
+
+ // convert string values to floats and convert to a matrix-formatted object
+ return arrayToMatrix(
+ SVG.utils.map(source, function(n) {
+ return parseFloat(n)
+ })
+ )
}
// Calculate position according to from and to
function at(o, pos) {
- // number recalculation (don't bother converting to SVG.Number for performance reasons)
- return typeof o.from == 'number' ?
- o.from + (o.to - o.from) * pos :
-
- // instance recalculation
- o instanceof SVG.Color || o instanceof SVG.Number || o instanceof SVG.Matrix ? o.at(pos) :
-
- // for all other values wait until pos has reached 1 to return the final value
- pos < 1 ? o.from : o.to
+ // number recalculation (don't bother converting to SVG.Number for performance reasons)
+ return typeof o.from == 'number' ?
+ o.from + (o.to - o.from) * pos :
+
+ // instance recalculation
+ o instanceof SVG.Color || o instanceof SVG.Number || o instanceof SVG.Matrix ? o.at(pos) :
+
+ // for all other values wait until pos has reached 1 to return the final value
+ pos < 1 ? o.from : o.to
}
// PathArray Helpers
function arrayToString(a) {
- for (var i = 0, il = a.length, s = ''; i < il; i++) {
- s += a[i][0]
-
- if (a[i][1] != null) {
- s += a[i][1]
-
- if (a[i][2] != null) {
- s += ' '
- s += a[i][2]
-
- if (a[i][3] != null) {
- s += ' '
- s += a[i][3]
- s += ' '
- s += a[i][4]
-
- if (a[i][5] != null) {
- s += ' '
- s += a[i][5]
- s += ' '
- s += a[i][6]
-
- if (a[i][7] != null) {
- s += ' '
- s += a[i][7]
- }
- }
- }
- }
- }
- }
-
- return s + ' '
+ for (var i = 0, il = a.length, s = ''; i < il; i++) {
+ s += a[i][0]
+
+ if (a[i][1] != null) {
+ s += a[i][1]
+
+ if (a[i][2] != null) {
+ s += ' '
+ s += a[i][2]
+
+ if (a[i][3] != null) {
+ s += ' '
+ s += a[i][3]
+ s += ' '
+ s += a[i][4]
+
+ if (a[i][5] != null) {
+ s += ' '
+ s += a[i][5]
+ s += ' '
+ s += a[i][6]
+
+ if (a[i][7] != null) {
+ s += ' '
+ s += a[i][7]
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return s + ' '
}
// Deep new id assignment
function assignNewId(node) {
- // Do the same for SVG child nodes as well
- for (var i = node.childNodes.length - 1; i >= 0; i--)
- if (node.childNodes[i] instanceof SVGElement)
- assignNewId(node.childNodes[i])
+ // do the same for SVG child nodes as well
+ for (var i = node.childNodes.length - 1; i >= 0; i--)
+ if (node.childNodes[i] instanceof SVGElement)
+ assignNewId(node.childNodes[i])
- return SVG.adopt(node).id(SVG.eid(node.nodeName))
+ return SVG.adopt(node).id(SVG.eid(node.nodeName))
}
// Add more bounding box properties
function fullBox(b) {
- b.x2 = b.x + b.width
- b.y2 = b.y + b.height
- b.cx = b.x + b.width / 2
- b.cy = b.y + b.height / 2
-
- return b
+ if (b.x == null) {
+ b.x = 0
+ b.y = 0
+ b.width = 0
+ b.height = 0
+ }
+
+ b.w = b.width
+ b.h = b.height
+ b.x2 = b.x + b.width
+ b.y2 = b.y + b.height
+ b.cx = b.x + b.width / 2
+ b.cy = b.y + b.height / 2
+
+ return b
}
// Get id from reference string
function idFromReference(url) {
- var m = url.toString().match(SVG.regex.reference)
+ var m = url.toString().match(SVG.regex.reference)
- if (m) return m[1]
+ if (m) return m[1]
}
// Create matrix array for looping
@@ -158,9 +167,9 @@ var abcdef = 'abcdef'.split('')
// Shim layer with setTimeout fallback by Paul Irish
window.requestAnimFrame = (function(){
- return window.requestAnimationFrame ||
- window.webkitRequestAnimationFrame ||
- window.mozRequestAnimationFrame ||
- window.msRequestAnimationFrame ||
- function (c) { window.setTimeout(c, 1000 / 60) }
+ return window.requestAnimationFrame ||
+ window.webkitRequestAnimationFrame ||
+ window.mozRequestAnimationFrame ||
+ window.msRequestAnimationFrame ||
+ function (c) { window.setTimeout(c, 1000 / 60) }
})() \ No newline at end of file