diff options
Diffstat (limited to 'dist/svg.js')
-rw-r--r-- | dist/svg.js | 225 |
1 files changed, 112 insertions, 113 deletions
diff --git a/dist/svg.js b/dist/svg.js index 0a5c1e3..f90eb55 100644 --- a/dist/svg.js +++ b/dist/svg.js @@ -1,12 +1,12 @@ /*! * svg.js - A lightweight library for manipulating and animating SVG. -* @version 2.6.6 +* @version 2.7.0 * https://svgdotjs.github.io/ * * @copyright Wout Fierens <wout@mick-wout.com> * @license MIT * -* BUILT: Tue Nov 13 2018 17:12:15 GMT+0100 (CET) +* BUILT: Tue Nov 13 2018 21:10:01 GMT+0100 (GMT+01:00) */; (function(root, factory) {
/* istanbul ignore next */
@@ -162,7 +162,7 @@ SVG.prepare = function() { // Create parser object
SVG.parser = {
body: body || document.documentElement
- , draw: draw.style('opacity:0;position:absolute;left:-100%;top:-100%;overflow:hidden').node
+ , draw: draw.style('opacity:0;position:absolute;left:-100%;top:-100%;overflow:hidden').attr('focusable', 'false').node
, poly: draw.polyline().node
, path: draw.path().node
, native: SVG.create('svg')
@@ -1032,6 +1032,7 @@ SVG.Element = SVG.invent({ // make stroke value accessible dynamically
this._stroke = SVG.defaults.attrs.stroke
this._event = null
+ this._events = {}
// initialize data object
this.dom = {}
@@ -1040,6 +1041,7 @@ SVG.Element = SVG.invent({ if (this.node = node) {
this.type = node.nodeName
this.node.instance = this
+ this._events = node._events || {}
// store current attribute value
this._stroke = node.getAttribute('stroke') || this._stroke
@@ -3400,146 +3402,142 @@ SVG.ViewBox = SVG.invent({ }) // Add events to elements
-;[ 'click'
- , 'dblclick'
- , 'mousedown'
- , 'mouseup'
- , 'mouseover'
- , 'mouseout'
- , 'mousemove'
- // , 'mouseenter' -> not supported by IE
- // , 'mouseleave' -> not supported by IE
- , 'touchstart'
- , 'touchmove'
- , 'touchleave'
- , 'touchend'
- , 'touchcancel' ].forEach(function(event) {
-
- // add event to SVG.Element
- SVG.Element.prototype[event] = function(f) {
- // bind event to element rather than element node
- SVG.on(this.node, event, f)
- return this
- }
-})
-// Initialize listeners stack
-SVG.listeners = []
-SVG.handlerMap = []
+;[ 'click',
+ 'dblclick',
+ 'mousedown',
+ 'mouseup',
+ 'mouseover',
+ 'mouseout',
+ 'mousemove',
+ 'mouseenter',
+ 'mouseleave',
+ 'touchstart',
+ 'touchmove',
+ 'touchleave',
+ 'touchend',
+ 'touchcancel' ].forEach(function (event) {
+ // add event to SVG.Element
+ SVG.Element.prototype[event] = function (f) {
+ // bind event to element rather than element node
+ if (f == null) {
+ SVG.off(this, event)
+ } else {
+ SVG.on(this, event, f)
+ }
+ return this
+ }
+ })
+
SVG.listenerId = 0
// Add event binder in the SVG namespace
-SVG.on = function(node, event, listener, binding, options) {
- // create listener, get object-index
- var l = listener.bind(binding || node.instance || node)
- , index = (SVG.handlerMap.indexOf(node) + 1 || SVG.handlerMap.push(node)) - 1
- , ev = event.split('.')[0]
- , ns = event.split('.')[1] || '*'
+SVG.on = function (node, events, listener, binding, options) {
+ var l = listener.bind(binding || node)
+ var n = node instanceof SVG.Element ? node.node : node
+ // ensure instance object for nodes which are not adopted
+ n.instance = n.instance || {_events: {}}
- // 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] || {}
+ var bag = n.instance._events
- if(!listener._svgjsListenerId)
- listener._svgjsListenerId = ++SVG.listenerId
+ // add id to listener
+ if (!listener._svgjsListenerId) { listener._svgjsListenerId = ++SVG.listenerId }
- // reference listener
- SVG.listeners[index][ev][ns][listener._svgjsListenerId] = l
+ events.split(SVG.regex.delimiter).forEach(function (event) {
+ var ev = event.split('.')[0]
+ var ns = event.split('.')[1] || '*'
- // add listener
- node.addEventListener(ev, l, options || false)
+ // ensure valid object
+ bag[ev] = bag[ev] || {}
+ bag[ev][ns] = bag[ev][ns] || {}
+
+ // reference listener
+ bag[ev][ns][listener._svgjsListenerId] = l
+
+ // add listener
+ n.addEventListener(ev, l, options || 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]
- , namespace = ''
+SVG.off = function (node, events, listener, options) {
+ var n = node instanceof SVG.Element ? node.node : node
+ if (!n.instance) return
- if(index == -1) return
-
- if (listener) {
- if(typeof listener == 'function') listener = listener._svgjsListenerId
- if(!listener) return
+ // listener can be a function or a number
+ if (typeof listener === 'function') {
+ listener = listener._svgjsListenerId
+ if (!listener) return
+ }
- // remove listener reference
- if (SVG.listeners[index][ev] && SVG.listeners[index][ev][ns || '*']) {
- // remove listener
- node.removeEventListener(ev, SVG.listeners[index][ev][ns || '*'][listener], false)
+ var bag = n.instance._events
- delete SVG.listeners[index][ev][ns || '*'][listener]
- }
+ ;(events || '').split(SVG.regex.delimiter).forEach(function (event) {
+ var ev = event && event.split('.')[0]
+ var ns = event && event.split('.')[1]
+ var namespace, l
- } else if (ns && ev) {
- // remove all listeners for a 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)
+ if (listener) {
+ // remove listener reference
+ if (bag[ev] && bag[ev][ns || '*']) {
+ // removeListener
+ n.removeEventListener(ev, bag[ev][ns || '*'][listener], options || false)
- delete SVG.listeners[index][ev][ns]
- }
+ delete bag[ev][ns || '*'][listener]
+ }
+ } else if (ev && ns) {
+ // remove all listeners for a namespaced event
+ if (bag[ev] && bag[ev][ns]) {
+ for (l in bag[ev][ns]) { SVG.off(n, [ev, ns].join('.'), l) }
- } else if (ns){
- // remove all listeners for a specific namespace
- for(event in SVG.listeners[index]){
- for(namespace in SVG.listeners[index][event]){
- if(ns === namespace){
- SVG.off(node, [event, ns].join('.'))
- }
+ delete bag[ev][ns]
+ }
+ } else if (ns) {
+ // remove all listeners for a specific namespace
+ for (event in bag) {
+ for (namespace in bag[event]) {
+ if (ns === namespace) { SVG.off(n, [event, ns].join('.')) }
}
- }
+ }
+ } else if (ev) {
+ // remove all listeners for the event
+ if (bag[ev]) {
+ for (namespace in bag[ev]) { SVG.off(n, [ev, namespace].join('.')) }
- } else if (ev) {
- // remove all listeners for the event
- if (SVG.listeners[index][ev]) {
- for (namespace in SVG.listeners[index][ev])
- SVG.off(node, [ev, namespace].join('.'))
+ delete bag[ev]
+ }
+ } else {
+ // remove all listeners on a given node
+ for (event in bag) { SVG.off(n, event) }
- delete SVG.listeners[index][ev]
+ n.instance._events = {}
}
-
- } else {
- // remove all listeners on a given node
- for (event in SVG.listeners[index])
- SVG.off(node, event)
-
- delete SVG.listeners[index]
- delete SVG.handlerMap[index]
-
- }
+ })
}
-//
SVG.extend(SVG.Element, {
// Bind given event to listener
- on: function(event, listener, binding, options) {
- SVG.on(this.node, event, listener, binding, options)
-
+ on: function (event, listener, binding, options) {
+ SVG.on(this, event, listener, binding, options)
return this
- }
+ },
// Unbind event from listener
-, off: function(event, listener) {
+ off: function (event, listener) {
SVG.off(this.node, event, listener)
-
return this
- }
- // Fire given event
-, fire: function(event, data) {
-
+ },
+ fire: function (event, data) {
// Dispatch event
- if(event instanceof window.Event){
- this.node.dispatchEvent(event)
- }else{
- this.node.dispatchEvent(event = new SVG.CustomEvent(event, {detail:data, cancelable: true}))
+ if (event instanceof window.Event) {
+ this.node.dispatchEvent(event)
+ } else {
+ this.node.dispatchEvent(event = new window.CustomEvent(event, {detail: data, cancelable: true}))
}
-
this._event = event
return this
- }
-, event: function() {
+ },
+ event: function() {
return this._event
}
})
@@ -5141,8 +5139,11 @@ SVG.extend(SVG.Parent, SVG.Text, SVG.Tspan, SVG.FX, { SVG.Set = SVG.invent({
// Initialize
create: function(members) {
- // Set initial state
- Array.isArray(members) ? this.members = members : this.clear()
+ if (members instanceof SVG.Set) {
+ this.members = members.members.slice()
+ } else {
+ Array.isArray(members) ? this.members = members : this.clear()
+ }
}
// Add class methods
@@ -5283,8 +5284,6 @@ SVG.Set.inherit = function() { }
})
}
-
-
SVG.extend(SVG.Element, {
|