diff options
author | gschutz <guilherme@gschutz.com> | 2015-05-18 15:51:40 -0300 |
---|---|---|
committer | gschutz <guilherme@gschutz.com> | 2015-05-18 15:55:16 -0300 |
commit | 76a236a54c1e9b8457d9b13820fd6fa678df95dd (patch) | |
tree | ae4b22f4430661df83bd29a27098f28a9fe65caf /src | |
parent | 54b3f3f1aab6204624189b5ef04b7ea30125a455 (diff) | |
parent | 0d1e85f6e3953461808c70366528c2ac3ce7903b (diff) | |
download | svg.js-76a236a54c1e9b8457d9b13820fd6fa678df95dd.tar.gz svg.js-76a236a54c1e9b8457d9b13820fd6fa678df95dd.zip |
Merge remote-tracking branch 'upstream/master' generate the build
Diffstat (limited to 'src')
-rwxr-xr-x | src/doc.js | 10 | ||||
-rwxr-xr-x | src/event.js | 83 | ||||
-rwxr-xr-x | src/fx.js | 12 | ||||
-rw-r--r-- | src/helpers.js | 9 | ||||
-rwxr-xr-x | src/loader.js | 6 | ||||
-rw-r--r-- | src/polyfill.js | 30 | ||||
-rwxr-xr-x | src/text.js | 3 |
7 files changed, 96 insertions, 57 deletions
@@ -78,6 +78,16 @@ SVG.Doc = SVG.invent({ return this } + + // Removes the doc from the DOM + , remove: function() { + if(this.parent) { + this.parent.removeChild(this.node); + this.parent = null; + } + + return this; + } } }) diff --git a/src/event.js b/src/event.js index 63764ed..74f22eb 100755 --- a/src/event.js +++ b/src/event.js @@ -27,60 +27,76 @@ }) -// Initialize events and listeners stack -SVG.events = {} -SVG.listeners = {} - -// Event constructor -SVG.registerEvent = function(event) { - if (!SVG.events[event]) - SVG.events[event] = new CustomEvent(event) -} +// Initialize listeners stack +SVG.listeners = [] +SVG.handlerMap = [] + +// Only kept for consistency of API +SVG.registerEvent = function(){}; // Add event binder in the SVG namespace SVG.on = function(node, event, listener) { - // create listener - var l = listener.bind(node.instance || node) - - // ensure reference objects - SVG.listeners[node] = SVG.listeners[node] || {} - SVG.listeners[node][event] = SVG.listeners[node][event] || {} + // create listener, get object-index + var l = listener.bind(node.instance || node) + , index = (SVG.handlerMap.indexOf(node) + 1 || SVG.handlerMap.push(node)) - 1 + , ev = event.split('.')[0] + , ns = event.split('.')[1] || '*' + + + // ensure valid object + SVG.listeners[index] = SVG.listeners[index] || {} + SVG.listeners[index][ev] = SVG.listeners[index][ev] || {} + SVG.listeners[index][ev][ns] = SVG.listeners[index][ev][ns] || {} // reference listener - SVG.listeners[node][event][listener] = l + SVG.listeners[index][ev][ns][listener] = l // add listener - node.addEventListener(event, l, false) + node.addEventListener(ev, l, false) } // Add event unbinder in the SVG namespace SVG.off = function(node, event, listener) { + var index = SVG.handlerMap.indexOf(node) + , ev = event && event.split('.')[0] + , ns = event && event.split('.')[1] + + if(index == -1) return + if (listener) { // remove listener reference - if (SVG.listeners[node] && SVG.listeners[node][event]) { + if (SVG.listeners[index][ev] && SVG.listeners[index][ev][ns || '*']) { // remove listener - node.removeEventListener(event, SVG.listeners[node][event][listener], false) + node.removeEventListener(ev, SVG.listeners[index][ev][ns || '*'][listener], false) - delete SVG.listeners[node][event][listener] + delete SVG.listeners[index][ev][ns || '*'][listener] } - } else if (event) { + } else if (ns) { + // remove all listeners for the namespaced event + if (SVG.listeners[index][ev] && SVG.listeners[index][ev][ns]) { + for (listener in SVG.listeners[index][ev][ns]) + SVG.off(node, [ev, ns].join('.'), listener) + + delete SVG.listeners[index][ev][ns] + } + + } else if (ev) { // remove all listeners for the event - if (SVG.listeners[node][event]) { - for (listener in SVG.listeners[node][event]) - SVG.off(node, event, listener) + if (SVG.listeners[index][ev]) { + for (namespace in SVG.listeners[index][ev]) + SVG.off(node, [ev, namespace].join('.')) - delete SVG.listeners[node][event] + delete SVG.listeners[index][ev] } } else { // remove all listeners on a given node - if (SVG.listeners[node]) { - for (event in SVG.listeners[node]) - SVG.off(node, event) + for (event in SVG.listeners[index]) + SVG.off(node, event) + + delete SVG.listeners[index] - delete SVG.listeners[node] - } } } @@ -100,14 +116,9 @@ SVG.extend(SVG.Element, { } // Fire given event , fire: function(event, data) { - // Add detail data to event - SVG.events[event].detail = data // Dispatch event - this.node.dispatchEvent(SVG.events[event]) - - // Remove detail - delete SVG.events[event].detail + this.node.dispatchEvent(new CustomEvent(event, {detail:data})) return this } @@ -186,10 +186,10 @@ SVG.FX = SVG.invent({ } } else { - requestAnimFrame(fx.render) + fx.animationFrame = requestAnimationFrame(fx.render) } } else { - requestAnimFrame(fx.render) + fx.animationFrame = requestAnimationFrame(fx.render) } } @@ -233,6 +233,13 @@ SVG.FX = SVG.invent({ /* dlete matrixstring from object */ delete o.matrix + /* add rotation-center to transformations */ + this.target.trans.cx = o.cx || null + this.target.trans.cy = o.cy || null + + delete o.cx + delete o.cy + /* store matrix values */ for (v in o) this.trans[v] = { from: this.target.trans[v], to: o[v] } @@ -377,6 +384,7 @@ SVG.FX = SVG.invent({ } else { /* stop current animation */ clearTimeout(this.timeout) + cancelAnimationFrame(this.animationFrame); /* reset storage for properties that need animation */ this.attrs = {} diff --git a/src/helpers.js b/src/helpers.js index c63c215..f3f8f26 100644 --- a/src/helpers.js +++ b/src/helpers.js @@ -120,12 +120,3 @@ function idFromReference(url) { if (m) return m[1] } - -// 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) } -})()
\ No newline at end of file diff --git a/src/loader.js b/src/loader.js deleted file mode 100755 index 80644d8..0000000 --- a/src/loader.js +++ /dev/null @@ -1,6 +0,0 @@ - -// Use AMD or CommonJS if either is present -if (typeof define === 'function' && define.amd) - define(function() { return SVG }) -else if (typeof exports !== 'undefined') - exports.SVG = SVG
\ No newline at end of file diff --git a/src/polyfill.js b/src/polyfill.js index 3a3c25c..a913337 100644 --- a/src/polyfill.js +++ b/src/polyfill.js @@ -11,4 +11,32 @@ if (typeof CustomEvent !== 'function') { CustomEvent.prototype = window.Event.prototype window.CustomEvent = CustomEvent -}
\ No newline at end of file +} + +// requestAnimationFrame / cancelAnimationFrame Polyfill with fallback based on Paul Irish +(function(w) { + var lastTime = 0 + var vendors = ['moz', 'webkit'] + + for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { + w.requestAnimationFrame = w[vendors[x] + 'RequestAnimationFrame'] + w.cancelAnimationFrame = w[vendors[x] + 'CancelAnimationFrame'] || + w[vendors[x] + 'CancelRequestAnimationFrame'] + } + + w.requestAnimationFrame = w.requestAnimationFrame || + function(callback) { + var currTime = new Date().getTime() + var timeToCall = Math.max(0, 16 - (currTime - lastTime)) + + var id = w.setTimeout(function() { + callback(currTime + timeToCall) + }, timeToCall) + + lastTime = currTime + timeToCall + return id + } + + w.cancelAnimationFrame = w.cancelAnimationFrame || w.clearTimeout; + +}(window))
\ No newline at end of file diff --git a/src/text.js b/src/text.js index 1b6bd94..38d4ecc 100755 --- a/src/text.js +++ b/src/text.js @@ -222,6 +222,3 @@ SVG.extend(SVG.Text, SVG.TSpan, { return this.node.getComputedTextLength() } }) - -// Register rebuild event -SVG.registerEvent('rebuild') |