diff options
author | Ulrich-Matthias Schäfer <ulima.ums@googlemail.com> | 2018-11-06 13:48:05 +0100 |
---|---|---|
committer | Ulrich-Matthias Schäfer <ulima.ums@googlemail.com> | 2018-11-06 13:48:05 +0100 |
commit | a0b13ebcacfd74b9f521110c7225bb404325bcd3 (patch) | |
tree | a07c5cc422645e31d7dfef81ce4e54f03f0945f6 /src/utils/utils.js | |
parent | 9f2696e8a2cf7e4eebc1cc7e31027fe2070094fa (diff) | |
download | svg.js-a0b13ebcacfd74b9f521110c7225bb404325bcd3.tar.gz svg.js-a0b13ebcacfd74b9f521110c7225bb404325bcd3.zip |
reordered modules, add es6 build
Diffstat (limited to 'src/utils/utils.js')
-rw-r--r-- | src/utils/utils.js | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/src/utils/utils.js b/src/utils/utils.js new file mode 100644 index 0000000..e3c9111 --- /dev/null +++ b/src/utils/utils.js @@ -0,0 +1,96 @@ +// Map function +export function map (array, block) { + var i + var il = array.length + var result = [] + + for (i = 0; i < il; i++) { + result.push(block(array[i])) + } + + return result +} + +// Filter function +export function filter (array, block) { + var i + var il = array.length + var result = [] + + for (i = 0; i < il; i++) { + if (block(array[i])) { result.push(array[i]) } + } + + return result +} + +// Degrees to radians +export function radians (d) { + return d % 360 * Math.PI / 180 +} + +// Radians to degrees +export function degrees (r) { + return r * 180 / Math.PI % 360 +} + +// Convert dash-separated-string to camelCase +export function camelCase (s) { + return s.toLowerCase().replace(/-(.)/g, function (m, g) { + return g.toUpperCase() + }) +} + +// Capitalize first letter of a string +export function capitalize (s) { + return s.charAt(0).toUpperCase() + s.slice(1) +} + +// Calculate proportional width and height values when necessary +export function proportionalSize (element, width, height) { + if (width == null || height == null) { + var box = element.bbox() + + if (width == null) { + width = box.width / box.height * height + } else if (height == null) { + height = box.height / box.width * width + } + } + + return { + width: width, + height: height + } +} + +export function getOrigin (o, element) { + // Allow origin or around as the names + let origin = o.origin // o.around == null ? o.origin : o.around + let ox, oy + + // Allow the user to pass a string to rotate around a given point + if (typeof origin === 'string' || origin == null) { + // Get the bounding box of the element with no transformations applied + const string = (origin || 'center').toLowerCase().trim() + const { height, width, x, y } = element.bbox() + + // Calculate the transformed x and y coordinates + let bx = string.includes('left') ? x + : string.includes('right') ? x + width + : x + width / 2 + let by = string.includes('top') ? y + : string.includes('bottom') ? y + height + : y + height / 2 + + // Set the bounds eg : "bottom-left", "Top right", "middle" etc... + ox = o.ox != null ? o.ox : bx + oy = o.oy != null ? o.oy : by + } else { + ox = origin[0] + oy = origin[1] + } + + // Return the origin as it is if it wasn't a string + return [ ox, oy ] +} |