summaryrefslogtreecommitdiffstats
path: root/src/types
diff options
context:
space:
mode:
authorUlrich-Matthias Schäfer <ulima.ums@googlemail.com>2018-11-30 13:19:58 +0100
committerUlrich-Matthias Schäfer <ulima.ums@googlemail.com>2018-11-30 13:19:58 +0100
commitf4531868a190af69c4ecdcf6d7be6d3fc59f5d46 (patch)
tree1fc76780ad6918ef7b6eb0e302a55f1b043d8bc5 /src/types
parentd64b964d21e1399b198e44555be68a12378053e7 (diff)
parentefc82b0eafa72902b35c2b22cd9e86bdbdd3edfb (diff)
downloadsvg.js-f4531868a190af69c4ecdcf6d7be6d3fc59f5d46.tar.gz
svg.js-f4531868a190af69c4ecdcf6d7be6d3fc59f5d46.zip
Merge branch '3.0.0' into 790-color-spaces
Diffstat (limited to 'src/types')
-rw-r--r--src/types/Box.js26
-rw-r--r--src/types/Color.js20
-rw-r--r--src/types/Morphable.js253
3 files changed, 19 insertions, 280 deletions
diff --git a/src/types/Box.js b/src/types/Box.js
index c90c7e0..d2ddcdd 100644
--- a/src/types/Box.js
+++ b/src/types/Box.js
@@ -104,7 +104,7 @@ export default class Box {
}
}
-function getBox (cb) {
+function getBox (cb, retry) {
let box
try {
@@ -114,23 +114,29 @@ function getBox (cb) {
throw new Error('Element not in the dom')
}
} catch (e) {
- try {
- let clone = this.clone().addTo(parser().svg).show()
- box = cb(clone.node)
- clone.remove()
- } catch (e) {
- throw new Error('Getting a bounding box of element "' + this.node.nodeName + '" is not possible')
- }
+ box = retry(this)
}
+
return box
}
export function bbox () {
- return new Box(getBox.call(this, (node) => node.getBBox()))
+ return new Box(getBox.call(this, (node) => node.getBBox(), (el) => {
+ try {
+ let clone = el.clone().addTo(parser().svg).show()
+ let box = clone.node.getBBox()
+ clone.remove()
+ return box
+ } catch (e) {
+ throw new Error('Getting bbox of element "' + el.node.nodeName + '" is not possible')
+ }
+ }))
}
export function rbox (el) {
- let box = new Box(getBox.call(this, (node) => node.getBoundingClientRect()))
+ let box = new Box(getBox.call(this, (node) => node.getBoundingClientRect(), (el) => {
+ throw new Error('Getting rbox of element "' + el.node.nodeName + '" is not possible')
+ }))
if (el) return box.transform(el.screenCTM().inverse())
return box.addOffset()
}
diff --git a/src/types/Color.js b/src/types/Color.js
index 0004251..b745bfd 100644
--- a/src/types/Color.js
+++ b/src/types/Color.js
@@ -78,7 +78,7 @@ export default class Color {
Object.assign(this, { _a: a, _b: b, _c: c, _d: d, space })
// If the user gave us an array, make the color from it
} else if (a instanceof Array) {
- this.space = b || a[4] || 'rgb'
+ this.space = b || (typeof a[3] === 'string' ? a[3] : a[4]) || 'rgb'
Object.assign(this, { _a: a[0], _b: a[1], _c: a[2], _d: a[3] || 0 })
} else if (a instanceof Object) {
// Set the object up and assign its values directly
@@ -109,20 +109,6 @@ export default class Color {
Object.assign(this, components)
}
- opacity (opacity = 1) {
- this.opacity = opacity
- }
-
- /*
-
- */
-
- brightness () {
- const { _a: r, _b: g, _c: b } = this.rgb()
- const value = (r / 255 * 0.30) + (g / 255 * 0.59) + (b / 255 * 0.11)
- return value
- }
-
/*
Conversion Methods
*/
@@ -332,14 +318,14 @@ export default class Color {
Input and Output methods
*/
- hex () {
+ toHex () {
let { _a, _b, _c } = this.rgb()
let [ r, g, b ] = [ _a, _b, _c ].map(componentHex)
return `#${r}${g}${b}`
}
toString () {
- return this.hex()
+ return this.toHex()
}
toRgb () {
diff --git a/src/types/Morphable.js b/src/types/Morphable.js
deleted file mode 100644
index e7af8c1..0000000
--- a/src/types/Morphable.js
+++ /dev/null
@@ -1,253 +0,0 @@
-import { Ease } from '../animation/Controller.js'
-import {
- delimiter,
- numberAndUnit,
- pathLetters
-} from '../modules/core/regex.js'
-import { extend } from '../utils/adopter.js'
-import Color from './Color.js'
-import PathArray from './PathArray.js'
-import SVGArray from './SVGArray.js'
-import SVGNumber from './SVGNumber.js'
-
-export default class Morphable {
- constructor (stepper) {
- this._stepper = stepper || new Ease('-')
-
- this._from = null
- this._to = null
- this._type = null
- this._context = null
- this._morphObj = null
- }
-
- from (val) {
- if (val == null) {
- return this._from
- }
-
- this._from = this._set(val)
- return this
- }
-
- to (val) {
- if (val == null) {
- return this._to
- }
-
- this._to = this._set(val)
- return this
- }
-
- type (type) {
- // getter
- if (type == null) {
- return this._type
- }
-
- // setter
- this._type = type
- return this
- }
-
- _set (value) {
- if (!this._type) {
- var type = typeof value
-
- if (type === 'number') {
- this.type(SVGNumber)
- } else if (type === 'string') {
- if (Color.isColor(value)) {
- this.type(Color)
- } else if (delimiter.test(value)) {
- this.type(pathLetters.test(value)
- ? PathArray
- : SVGArray
- )
- } else if (numberAndUnit.test(value)) {
- this.type(SVGNumber)
- } else {
- this.type(NonMorphable)
- }
- } else if (morphableTypes.indexOf(value.constructor) > -1) {
- this.type(value.constructor)
- } else if (Array.isArray(value)) {
- this.type(SVGArray)
- } else if (type === 'object') {
- this.type(ObjectBag)
- } else {
- this.type(NonMorphable)
- }
- }
-
- var result = (new this._type(value))
- if (this._type === Color) {
- result = this._to ? result[this._to[4]]()
- : this._from ? result[this._from[4]]()
- : result
- }
- result = result.toArray()
-
- this._morphObj = this._morphObj || new this._type()
- this._context = this._context
- || Array.apply(null, Array(result.length)).map(Object)
- return result
- }
-
- stepper (stepper) {
- if (stepper == null) return this._stepper
- this._stepper = stepper
- return this
- }
-
- done () {
- var complete = this._context
- .map(this._stepper.done)
- .reduce(function (last, curr) {
- return last && curr
- }, true)
- return complete
- }
-
- at (pos) {
- var _this = this
-
- return this._morphObj.fromArray(
- this._from.map(function (i, index) {
- return _this._stepper.step(i, _this._to[index], pos, _this._context[index], _this._context)
- })
- )
- }
-}
-
-export class NonMorphable {
- constructor (...args) {
- this.init(...args)
- }
-
- init (val) {
- val = Array.isArray(val) ? val[0] : val
- this.value = val
- return this
- }
-
- valueOf () {
- return this.value
- }
-
- toArray () {
- return [ this.value ]
- }
-}
-
-export class TransformBag {
- constructor (...args) {
- this.init(...args)
- }
-
- init (obj) {
- if (Array.isArray(obj)) {
- obj = {
- scaleX: obj[0],
- scaleY: obj[1],
- shear: obj[2],
- rotate: obj[3],
- translateX: obj[4],
- translateY: obj[5],
- originX: obj[6],
- originY: obj[7]
- }
- }
-
- Object.assign(this, TransformBag.defaults, obj)
- return this
- }
-
- toArray () {
- var v = this
-
- return [
- v.scaleX,
- v.scaleY,
- v.shear,
- v.rotate,
- v.translateX,
- v.translateY,
- v.originX,
- v.originY
- ]
- }
-}
-
-TransformBag.defaults = {
- scaleX: 1,
- scaleY: 1,
- shear: 0,
- rotate: 0,
- translateX: 0,
- translateY: 0,
- originX: 0,
- originY: 0
-}
-
-export class ObjectBag {
- constructor (...args) {
- this.init(...args)
- }
-
- init (objOrArr) {
- this.values = []
-
- if (Array.isArray(objOrArr)) {
- this.values = objOrArr
- return
- }
-
- var entries = Object.entries(objOrArr || {}).sort((a, b) => {
- return a[0] - b[0]
- })
-
- this.values = entries.reduce((last, curr) => last.concat(curr), [])
- return this
- }
-
- valueOf () {
- var obj = {}
- var arr = this.values
-
- for (var i = 0, len = arr.length; i < len; i += 2) {
- obj[arr[i]] = arr[i + 1]
- }
-
- return obj
- }
-
- toArray () {
- return this.values
- }
-}
-
-const morphableTypes = [
- NonMorphable,
- TransformBag,
- ObjectBag
-]
-
-export function registerMorphableType (type = []) {
- morphableTypes.push(...[].concat(type))
-}
-
-export function makeMorphable () {
- extend(morphableTypes, {
- to (val) {
- return new Morphable()
- .type(this.constructor)
- .from(this.valueOf())
- .to(val)
- },
- fromArray (arr) {
- this.init(arr)
- return this
- }
- })
-}