aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorgschutz <guilherme@gschutz.com>2015-05-18 15:51:40 -0300
committergschutz <guilherme@gschutz.com>2015-05-18 15:55:16 -0300
commit76a236a54c1e9b8457d9b13820fd6fa678df95dd (patch)
treeae4b22f4430661df83bd29a27098f28a9fe65caf /src
parent54b3f3f1aab6204624189b5ef04b7ea30125a455 (diff)
parent0d1e85f6e3953461808c70366528c2ac3ce7903b (diff)
downloadsvg.js-76a236a54c1e9b8457d9b13820fd6fa678df95dd.tar.gz
svg.js-76a236a54c1e9b8457d9b13820fd6fa678df95dd.zip
Merge remote-tracking branch 'upstream/master' generate the build
Diffstat (limited to 'src')
-rwxr-xr-xsrc/doc.js10
-rwxr-xr-xsrc/event.js83
-rwxr-xr-xsrc/fx.js12
-rw-r--r--src/helpers.js9
-rwxr-xr-xsrc/loader.js6
-rw-r--r--src/polyfill.js30
-rwxr-xr-xsrc/text.js3
7 files changed, 96 insertions, 57 deletions
diff --git a/src/doc.js b/src/doc.js
index a10bffe..820a8cd 100755
--- a/src/doc.js
+++ b/src/doc.js
@@ -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
}
diff --git a/src/fx.js b/src/fx.js
index 2b983c3..6dceb2a 100755
--- a/src/fx.js
+++ b/src/fx.js
@@ -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')