-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
122 additions
and
133 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,12 +1,12 @@ | ||
/*! | ||
* svg.js - A lightweight library for manipulating and animating SVG. | ||
* @version 2.6.5 | ||
* @version 2.7.1 | ||
* https://svgdotjs.github.io/ | ||
* | ||
* @copyright Wout Fierens <[email protected]> | ||
* @license MIT | ||
* | ||
* BUILT: Sat May 26 2018 22:47:07 GMT+0200 (Mitteleuropäische Sommerzeit) | ||
* BUILT: Fri Nov 30 2018 10:01:55 GMT+0100 (GMT+01:00) | ||
*/; | ||
(function(root, factory) { | ||
/* istanbul ignore next */ | ||
|
@@ -21,8 +21,12 @@ | |
} | ||
}(typeof window !== "undefined" ? window : this, function(window, document) { | ||
|
||
// Find global reference - uses 'this' by default when available, | ||
// falls back to 'window' otherwise (for bundlers like Webpack) | ||
var globalRef = (typeof this !== "undefined") ? this : window; | ||
|
||
// The main wrapping element | ||
var SVG = this.SVG = function(element) { | ||
var SVG = globalRef.SVG = function(element) { | ||
if (SVG.supported) { | ||
element = new SVG.Doc(element) | ||
|
||
|
@@ -158,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') | ||
|
@@ -1028,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 = {} | ||
|
@@ -1036,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 | ||
|
@@ -1201,7 +1207,7 @@ SVG.Element = SVG.invent({ | |
// loop trough ancestors if type is given | ||
while(parent && parent.node instanceof window.SVGElement){ | ||
if(typeof type === 'string' ? parent.matches(type) : parent instanceof type) return parent | ||
if(!parent.node.parentNode || parent.node.parentNode.nodeName == '#document') return null // #759, #720 | ||
if(!parent.node.parentNode || parent.node.parentNode.nodeName == '#document' || parent.node.parentNode.nodeName == '#document-fragment') return null // #759, #720 | ||
parent = SVG.adopt(parent.node.parentNode) | ||
} | ||
} | ||
|
@@ -3396,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: {}} | ||
|
||
var bag = n.instance._events | ||
|
||
// add id to listener | ||
if (!listener._svgjsListenerId) { listener._svgjsListenerId = ++SVG.listenerId } | ||
|
||
// 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] || {} | ||
events.split(SVG.regex.delimiter).forEach(function (event) { | ||
var ev = event.split('.')[0] | ||
var ns = event.split('.')[1] || '*' | ||
|
||
if(!listener._svgjsListenerId) | ||
listener._svgjsListenerId = ++SVG.listenerId | ||
// ensure valid object | ||
bag[ev] = bag[ev] || {} | ||
bag[ev][ns] = bag[ev][ns] || {} | ||
|
||
// reference listener | ||
SVG.listeners[index][ev][ns][listener._svgjsListenerId] = l | ||
// reference listener | ||
bag[ev][ns][listener._svgjsListenerId] = l | ||
|
||
// add listener | ||
node.addEventListener(ev, l, options || false) | ||
// 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 = '' | ||
|
||
if(index == -1) return | ||
SVG.off = function (node, events, listener, options) { | ||
var n = node instanceof SVG.Element ? node.node : node | ||
if (!n.instance) 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 SVG.CustomEvent(event, {detail: data, cancelable: true})) | ||
} | ||
|
||
this._event = event | ||
return this | ||
} | ||
, event: function() { | ||
}, | ||
event: function() { | ||
return this._event | ||
} | ||
}) | ||
|
@@ -3655,7 +3657,7 @@ SVG.Doc = SVG.invent({ | |
} | ||
// custom parent method | ||
, parent: function() { | ||
if(!this.node.parentNode || this.node.parentNode.nodeName == '#document') return null | ||
if(!this.node.parentNode || this.node.parentNode.nodeName == '#document' || this.node.parentNode.nodeName == '#document-fragment') return null | ||
return this.node.parentNode | ||
} | ||
// Fix for possible sub-pixel offset. See: | ||
|
@@ -5137,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 | ||
|
@@ -5281,8 +5286,6 @@ SVG.Set.inherit = function() { | |
} | ||
|
||
|
||
|
||
|
||
SVG.extend(SVG.Element, { | ||
// Store data values on svg nodes | ||
data: function(a, v, r) { | ||
|
@@ -5595,4 +5598,4 @@ if (typeof window.CustomEvent !== 'function') { | |
|
||
return SVG | ||
|
||
})); | ||
})); |