783 lines
43 KiB
JavaScript
783 lines
43 KiB
JavaScript
// svg-pan-zoom v3.2.5
|
|
// https://github.com/ariutta/svg-pan-zoom
|
|
! function t(e, o, n) {
|
|
function i(r, a) {
|
|
if (!o[r]) {
|
|
if (!e[r]) {
|
|
var l = "function" == typeof require && require;
|
|
if (!a && l) return l(r, !0);
|
|
if (s) return s(r, !0);
|
|
var u = new Error("Cannot find module '" + r + "'");
|
|
throw u.code = "MODULE_NOT_FOUND", u
|
|
}
|
|
var h = o[r] = {
|
|
exports: {}
|
|
};
|
|
e[r][0].call(h.exports, function(t) {
|
|
var o = e[r][1][t];
|
|
return i(o ? o : t)
|
|
}, h, h.exports, t, e, o, n)
|
|
}
|
|
return o[r].exports
|
|
}
|
|
for (var s = "function" == typeof require && require, r = 0; r < n.length; r++) i(n[r]);
|
|
return i
|
|
}({
|
|
1: [function(t, e) {
|
|
var o = t("./svg-pan-zoom.js");
|
|
! function(t) {
|
|
"function" == typeof define && define.amd ? define("svg-pan-zoom", function() {
|
|
return o
|
|
}) : "undefined" != typeof e && e.exports && (e.exports = o, t.svgPanZoom = o)
|
|
}(window, document)
|
|
}, {
|
|
"./svg-pan-zoom.js": 4
|
|
}],
|
|
2: [function(t, e) {
|
|
var o = t("./svg-utilities");
|
|
e.exports = {
|
|
enable: function(t) {
|
|
var e = t.svg.querySelector("defs");
|
|
e || (e = document.createElementNS(o.svgNS, "defs"), t.svg.appendChild(e));
|
|
var n = document.createElementNS(o.svgNS, "style");
|
|
n.setAttribute("type", "text/css"), n.textContent = ".svg-pan-zoom-control { cursor: pointer; fill: black; fill-opacity: 0.333; } .svg-pan-zoom-control:hover { fill-opacity: 0.8; } .svg-pan-zoom-control-background { fill: white; fill-opacity: 0.5; } .svg-pan-zoom-control-background { fill-opacity: 0.8; }", e.appendChild(n);
|
|
var i = document.createElementNS(o.svgNS, "g");
|
|
i.setAttribute("id", "svg-pan-zoom-controls"), i.setAttribute("transform", "translate(" + (t.width - 70) + " " + (t.height - 76) + ") scale(0.75)"), i.setAttribute("class", "svg-pan-zoom-control"), i.appendChild(this._createZoomIn(t)), i.appendChild(this._createZoomReset(t)), i.appendChild(this._createZoomOut(t)), t.svg.appendChild(i), t.controlIcons = i
|
|
},
|
|
_createZoomIn: function(t) {
|
|
var e = document.createElementNS(o.svgNS, "g");
|
|
e.setAttribute("id", "svg-pan-zoom-zoom-in"), e.setAttribute("transform", "translate(30.5 5) scale(0.015)"), e.setAttribute("class", "svg-pan-zoom-control"), e.addEventListener("click", function() {
|
|
t.getPublicInstance().zoomIn()
|
|
}, !1), e.addEventListener("touchstart", function() {
|
|
t.getPublicInstance().zoomIn()
|
|
}, !1);
|
|
var n = document.createElementNS(o.svgNS, "rect");
|
|
n.setAttribute("x", "0"), n.setAttribute("y", "0"), n.setAttribute("width", "1500"), n.setAttribute("height", "1400"), n.setAttribute("class", "svg-pan-zoom-control-background"), e.appendChild(n);
|
|
var i = document.createElementNS(o.svgNS, "path");
|
|
return i.setAttribute("d", "M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z"), i.setAttribute("class", "svg-pan-zoom-control-element"), e.appendChild(i), e
|
|
},
|
|
_createZoomReset: function(t) {
|
|
var e = document.createElementNS(o.svgNS, "g");
|
|
e.setAttribute("id", "svg-pan-zoom-reset-pan-zoom"), e.setAttribute("transform", "translate(5 35) scale(0.4)"), e.setAttribute("class", "svg-pan-zoom-control"), e.addEventListener("click", function() {
|
|
t.getPublicInstance().reset()
|
|
}, !1), e.addEventListener("touchstart", function() {
|
|
t.getPublicInstance().reset()
|
|
}, !1);
|
|
var n = document.createElementNS(o.svgNS, "rect");
|
|
n.setAttribute("x", "2"), n.setAttribute("y", "2"), n.setAttribute("width", "182"), n.setAttribute("height", "58"), n.setAttribute("class", "svg-pan-zoom-control-background"), e.appendChild(n);
|
|
var i = document.createElementNS(o.svgNS, "path");
|
|
i.setAttribute("d", "M33.051,20.632c-0.742-0.406-1.854-0.609-3.338-0.609h-7.969v9.281h7.769c1.543,0,2.701-0.188,3.473-0.562c1.365-0.656,2.048-1.953,2.048-3.891C35.032,22.757,34.372,21.351,33.051,20.632z"), i.setAttribute("class", "svg-pan-zoom-control-element"), e.appendChild(i);
|
|
var s = document.createElementNS(o.svgNS, "path");
|
|
return s.setAttribute("d", "M170.231,0.5H15.847C7.102,0.5,0.5,5.708,0.5,11.84v38.861C0.5,56.833,7.102,61.5,15.847,61.5h154.384c8.745,0,15.269-4.667,15.269-10.798V11.84C185.5,5.708,178.976,0.5,170.231,0.5z M42.837,48.569h-7.969c-0.219-0.766-0.375-1.383-0.469-1.852c-0.188-0.969-0.289-1.961-0.305-2.977l-0.047-3.211c-0.03-2.203-0.41-3.672-1.142-4.406c-0.732-0.734-2.103-1.102-4.113-1.102h-7.05v13.547h-7.055V14.022h16.524c2.361,0.047,4.178,0.344,5.45,0.891c1.272,0.547,2.351,1.352,3.234,2.414c0.731,0.875,1.31,1.844,1.737,2.906s0.64,2.273,0.64,3.633c0,1.641-0.414,3.254-1.242,4.84s-2.195,2.707-4.102,3.363c1.594,0.641,2.723,1.551,3.387,2.73s0.996,2.98,0.996,5.402v2.32c0,1.578,0.063,2.648,0.19,3.211c0.19,0.891,0.635,1.547,1.333,1.969V48.569z M75.579,48.569h-26.18V14.022h25.336v6.117H56.454v7.336h16.781v6H56.454v8.883h19.125V48.569z M104.497,46.331c-2.44,2.086-5.887,3.129-10.34,3.129c-4.548,0-8.125-1.027-10.731-3.082s-3.909-4.879-3.909-8.473h6.891c0.224,1.578,0.662,2.758,1.316,3.539c1.196,1.422,3.246,2.133,6.15,2.133c1.739,0,3.151-0.188,4.236-0.562c2.058-0.719,3.087-2.055,3.087-4.008c0-1.141-0.504-2.023-1.512-2.648c-1.008-0.609-2.607-1.148-4.796-1.617l-3.74-0.82c-3.676-0.812-6.201-1.695-7.576-2.648c-2.328-1.594-3.492-4.086-3.492-7.477c0-3.094,1.139-5.664,3.417-7.711s5.623-3.07,10.036-3.07c3.685,0,6.829,0.965,9.431,2.895c2.602,1.93,3.966,4.73,4.093,8.402h-6.938c-0.128-2.078-1.057-3.555-2.787-4.43c-1.154-0.578-2.587-0.867-4.301-0.867c-1.907,0-3.428,0.375-4.565,1.125c-1.138,0.75-1.706,1.797-1.706,3.141c0,1.234,0.561,2.156,1.682,2.766c0.721,0.406,2.25,0.883,4.589,1.43l6.063,1.43c2.657,0.625,4.648,1.461,5.975,2.508c2.059,1.625,3.089,3.977,3.089,7.055C108.157,41.624,106.937,44.245,104.497,46.331z M139.61,48.569h-26.18V14.022h25.336v6.117h-18.281v7.336h16.781v6h-16.781v8.883h19.125V48.569z M170.337,20.14h-10.336v28.43h-7.266V20.14h-10.383v-6.117h27.984V20.14z"), s.setAttribute("class", "svg-pan-zoom-control-element"), e.appendChild(s), e
|
|
},
|
|
_createZoomOut: function(t) {
|
|
var e = document.createElementNS(o.svgNS, "g");
|
|
e.setAttribute("id", "svg-pan-zoom-zoom-out"), e.setAttribute("transform", "translate(30.5 70) scale(0.015)"), e.setAttribute("class", "svg-pan-zoom-control"), e.addEventListener("click", function() {
|
|
t.getPublicInstance().zoomOut()
|
|
}, !1), e.addEventListener("touchstart", function() {
|
|
t.getPublicInstance().zoomOut()
|
|
}, !1);
|
|
var n = document.createElementNS(o.svgNS, "rect");
|
|
n.setAttribute("x", "0"), n.setAttribute("y", "0"), n.setAttribute("width", "1500"), n.setAttribute("height", "1400"), n.setAttribute("class", "svg-pan-zoom-control-background"), e.appendChild(n);
|
|
var i = document.createElementNS(o.svgNS, "path");
|
|
return i.setAttribute("d", "M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z"), i.setAttribute("class", "svg-pan-zoom-control-element"), e.appendChild(i), e
|
|
},
|
|
disable: function(t) {
|
|
t.controlIcons && (t.controlIcons.parentNode.removeChild(t.controlIcons), t.controlIcons = null)
|
|
}
|
|
}
|
|
}, {
|
|
"./svg-utilities": 5
|
|
}],
|
|
3: [function(t, e) {
|
|
var o = t("./svg-utilities"),
|
|
n = t("./utilities"),
|
|
i = function(t, e) {
|
|
this.init(t, e)
|
|
};
|
|
i.prototype.init = function(t, e) {
|
|
this.viewport = t, this.options = e, this.originalState = {
|
|
zoom: 1,
|
|
x: 0,
|
|
y: 0
|
|
}, this.activeState = {
|
|
zoom: 1,
|
|
x: 0,
|
|
y: 0
|
|
}, this.updateCTMCached = n.proxy(this.updateCTM, this), this.requestAnimationFrame = n.createRequestAnimationFrame(this.options.refreshRate), this.viewBox = {
|
|
x: 0,
|
|
y: 0,
|
|
width: 0,
|
|
height: 0
|
|
}, this.cacheViewBox(), this.processCTM(), this.updateCTM()
|
|
}, i.prototype.cacheViewBox = function() {
|
|
var t = this.options.svg.getAttribute("viewBox");
|
|
if (t) {
|
|
var e = t.split(/[\s\,]/).filter(function(t) {
|
|
return t
|
|
}).map(parseFloat);
|
|
this.viewBox.x = e[0], this.viewBox.y = e[1], this.viewBox.width = e[2], this.viewBox.height = e[3];
|
|
var o = Math.min(this.options.width / this.viewBox.width, this.options.height / this.viewBox.height);
|
|
this.activeState.zoom = o, this.activeState.x = (this.options.width - this.viewBox.width * o) / 2, this.activeState.y = (this.options.height - this.viewBox.height * o) / 2, this.updateCTMOnNextFrame(), this.options.svg.removeAttribute("viewBox")
|
|
} else {
|
|
var n = this.viewport.getBBox();
|
|
this.viewBox.x = n.x, this.viewBox.y = n.y, this.viewBox.width = n.width, this.viewBox.height = n.height
|
|
}
|
|
}, i.prototype.recacheViewBox = function() {
|
|
var t = this.viewport.getBoundingClientRect(),
|
|
e = t.width / this.getZoom(),
|
|
o = t.height / this.getZoom();
|
|
this.viewBox.x = 0, this.viewBox.y = 0, this.viewBox.width = e, this.viewBox.height = o
|
|
}, i.prototype.getViewBox = function() {
|
|
return n.extend({}, this.viewBox)
|
|
}, i.prototype.processCTM = function() {
|
|
var t = this.getCTM();
|
|
if (this.options.fit || this.options.contain) {
|
|
var e;
|
|
e = this.options.fit ? Math.min(this.options.width / this.viewBox.width, this.options.height / this.viewBox.height) : Math.max(this.options.width / this.viewBox.width, this.options.height / this.viewBox.height), t.a = e, t.d = e, t.e = -this.viewBox.x * e, t.f = -this.viewBox.y * e
|
|
}
|
|
if (this.options.center) {
|
|
var o = .5 * (this.options.width - (this.viewBox.width + 2 * this.viewBox.x) * t.a),
|
|
n = .5 * (this.options.height - (this.viewBox.height + 2 * this.viewBox.y) * t.a);
|
|
t.e = o, t.f = n
|
|
}
|
|
this.originalState.zoom = t.a, this.originalState.x = t.e, this.originalState.y = t.f, this.setCTM(t)
|
|
}, i.prototype.getOriginalState = function() {
|
|
return n.extend({}, this.originalState)
|
|
}, i.prototype.getState = function() {
|
|
return n.extend({}, this.activeState)
|
|
}, i.prototype.getZoom = function() {
|
|
return this.activeState.zoom
|
|
}, i.prototype.getRelativeZoom = function() {
|
|
return this.activeState.zoom / this.originalState.zoom
|
|
}, i.prototype.computeRelativeZoom = function(t) {
|
|
return t / this.originalState.zoom
|
|
}, i.prototype.getPan = function() {
|
|
return {
|
|
x: this.activeState.x,
|
|
y: this.activeState.y
|
|
}
|
|
}, i.prototype.getCTM = function() {
|
|
var t = this.options.svg.createSVGMatrix();
|
|
return t.a = this.activeState.zoom, t.b = 0, t.c = 0, t.d = this.activeState.zoom, t.e = this.activeState.x, t.f = this.activeState.y, t
|
|
}, i.prototype.setCTM = function(t) {
|
|
var e = this.isZoomDifferent(t),
|
|
o = this.isPanDifferent(t);
|
|
if (e || o) {
|
|
if (e && this.options.beforeZoom(this.getRelativeZoom(), this.computeRelativeZoom(t.a)) === !1 && (t.a = t.d = this.activeState.zoom, e = !1), o) {
|
|
var i = this.options.beforePan(this.getPan(), {
|
|
x: t.e,
|
|
y: t.f
|
|
}),
|
|
s = !1,
|
|
r = !1;
|
|
i === !1 ? (t.e = this.getPan().x, t.f = this.getPan().y, s = r = !0) : n.isObject(i) && (i.x === !1 ? (t.e = this.getPan().x, s = !0) : n.isNumber(i.x) && (t.e = i.x), i.y === !1 ? (t.f = this.getPan().y, r = !0) : n.isNumber(i.y) && (t.f = i.y)), s && r && (o = !1)
|
|
}(e || o) && (this.updateCache(t), this.updateCTMOnNextFrame(), e && this.options.onZoom(this.getRelativeZoom()), o && this.options.onPan(this.getPan()))
|
|
}
|
|
}, i.prototype.isZoomDifferent = function(t) {
|
|
return this.activeState.zoom !== t.a
|
|
}, i.prototype.isPanDifferent = function(t) {
|
|
return this.activeState.x !== t.e || this.activeState.y !== t.f
|
|
}, i.prototype.updateCache = function(t) {
|
|
this.activeState.zoom = t.a, this.activeState.x = t.e, this.activeState.y = t.f
|
|
}, i.prototype.pendingUpdate = !1, i.prototype.updateCTMOnNextFrame = function() {
|
|
this.pendingUpdate || (this.pendingUpdate = !0, this.requestAnimationFrame.call(window, this.updateCTMCached))
|
|
}, i.prototype.updateCTM = function() {
|
|
o.setCTM(this.viewport, this.getCTM(), this.defs), this.pendingUpdate = !1
|
|
}, e.exports = function(t, e) {
|
|
return new i(t, e)
|
|
}
|
|
}, {
|
|
"./svg-utilities": 5,
|
|
"./utilities": 7
|
|
}],
|
|
4: [function(t, e) {
|
|
var o = t("./uniwheel"),
|
|
n = t("./control-icons"),
|
|
i = t("./utilities"),
|
|
s = t("./svg-utilities"),
|
|
r = t("./shadow-viewport"),
|
|
a = function(t, e) {
|
|
this.init(t, e)
|
|
},
|
|
l = {
|
|
viewportSelector: ".svg-pan-zoom_viewport",
|
|
panEnabled: !0,
|
|
controlIconsEnabled: !1,
|
|
zoomEnabled: !0,
|
|
dblClickZoomEnabled: !0,
|
|
mouseWheelZoomEnabled: !0,
|
|
preventMouseEventsDefault: !0,
|
|
zoomScaleSensitivity: .1,
|
|
minZoom: .5,
|
|
maxZoom: 10,
|
|
fit: !0,
|
|
contain: !1,
|
|
center: !0,
|
|
refreshRate: "auto",
|
|
beforeZoom: null,
|
|
onZoom: null,
|
|
beforePan: null,
|
|
onPan: null,
|
|
customEventsHandler: null,
|
|
eventsListenerElement: null
|
|
};
|
|
a.prototype.init = function(t, e) {
|
|
var o = this;
|
|
this.svg = t, this.defs = t.querySelector("defs"), s.setupSvgAttributes(this.svg), this.options = i.extend(i.extend({}, l), e), this.state = "none";
|
|
var a = s.getBoundingClientRectNormalized(t);
|
|
this.width = a.width, this.height = a.height, this.viewport = r(s.getOrCreateViewport(this.svg, this.options.viewportSelector), {
|
|
svg: this.svg,
|
|
width: this.width,
|
|
height: this.height,
|
|
fit: this.options.fit,
|
|
contain: this.options.contain,
|
|
center: this.options.center,
|
|
refreshRate: this.options.refreshRate,
|
|
beforeZoom: function(t, e) {
|
|
return o.viewport && o.options.beforeZoom ? o.options.beforeZoom(t, e) : void 0
|
|
},
|
|
onZoom: function(t) {
|
|
return o.viewport && o.options.onZoom ? o.options.onZoom(t) : void 0
|
|
},
|
|
beforePan: function(t, e) {
|
|
return o.viewport && o.options.beforePan ? o.options.beforePan(t, e) : void 0
|
|
},
|
|
onPan: function(t) {
|
|
return o.viewport && o.options.onPan ? o.options.onPan(t) : void 0
|
|
}
|
|
});
|
|
var u = this.getPublicInstance();
|
|
u.setBeforeZoom(this.options.beforeZoom), u.setOnZoom(this.options.onZoom), u.setBeforePan(this.options.beforePan), u.setOnPan(this.options.onPan), this.options.controlIconsEnabled && n.enable(this), this.lastMouseWheelEventTime = Date.now(), this.setupHandlers()
|
|
}, a.prototype.setupHandlers = function() {
|
|
var t = this,
|
|
e = null;
|
|
if (this.eventListeners = {
|
|
mousedown: function(e) {
|
|
return t.handleMouseDown(e, null)
|
|
},
|
|
touchstart: function(o) {
|
|
var n = t.handleMouseDown(o, e);
|
|
return e = o, n
|
|
},
|
|
mouseup: function(e) {
|
|
return t.handleMouseUp(e)
|
|
},
|
|
touchend: function(e) {
|
|
return t.handleMouseUp(e)
|
|
},
|
|
mousemove: function(e) {
|
|
return t.handleMouseMove(e)
|
|
},
|
|
touchmove: function(e) {
|
|
return t.handleMouseMove(e)
|
|
},
|
|
mouseleave: function(e) {
|
|
return t.handleMouseUp(e)
|
|
},
|
|
touchleave: function(e) {
|
|
return t.handleMouseUp(e)
|
|
},
|
|
touchcancel: function(e) {
|
|
return t.handleMouseUp(e)
|
|
}
|
|
}, null != this.options.customEventsHandler) {
|
|
this.options.customEventsHandler.init({
|
|
svgElement: this.svg,
|
|
eventsListenerElement: this.options.eventsListenerElement,
|
|
instance: this.getPublicInstance()
|
|
});
|
|
var o = this.options.customEventsHandler.haltEventListeners;
|
|
if (o && o.length)
|
|
for (var n = o.length - 1; n >= 0; n--) this.eventListeners.hasOwnProperty(o[n]) && delete this.eventListeners[o[n]]
|
|
}
|
|
for (var i in this.eventListeners)(this.options.eventsListenerElement || this.svg).addEventListener(i, this.eventListeners[i], !1);
|
|
this.options.mouseWheelZoomEnabled && (this.options.mouseWheelZoomEnabled = !1, this.enableMouseWheelZoom())
|
|
}, a.prototype.enableMouseWheelZoom = function() {
|
|
if (!this.options.mouseWheelZoomEnabled) {
|
|
var t = this;
|
|
this.wheelListener = function(e) {
|
|
return t.handleMouseWheel(e)
|
|
}, o.on(this.options.eventsListenerElement || this.svg, this.wheelListener, !1), this.options.mouseWheelZoomEnabled = !0
|
|
}
|
|
}, a.prototype.disableMouseWheelZoom = function() {
|
|
this.options.mouseWheelZoomEnabled && (o.off(this.options.eventsListenerElement || this.svg, this.wheelListener, !1), this.options.mouseWheelZoomEnabled = !1)
|
|
}, a.prototype.handleMouseWheel = function(t) {
|
|
if (this.options.zoomEnabled && "none" === this.state) {
|
|
this.options.preventMouseEventsDefault && (t.preventDefault ? t.preventDefault() : t.returnValue = !1);
|
|
var e = t.deltaY || 1,
|
|
o = Date.now() - this.lastMouseWheelEventTime,
|
|
n = 3 + Math.max(0, 30 - o);
|
|
this.lastMouseWheelEventTime = Date.now(), "deltaMode" in t && 0 === t.deltaMode && t.wheelDelta && (e = 0 === t.deltaY ? 0 : Math.abs(t.wheelDelta) / t.deltaY), e = e > -.3 && .3 > e ? e : (e > 0 ? 1 : -1) * Math.log(Math.abs(e) + 10) / n;
|
|
var i = this.svg.getScreenCTM().inverse(),
|
|
r = s.getEventPoint(t, this.svg).matrixTransform(i),
|
|
a = Math.pow(1 + this.options.zoomScaleSensitivity, -1 * e);
|
|
this.zoomAtPoint(a, r)
|
|
}
|
|
}, a.prototype.zoomAtPoint = function(t, e, o) {
|
|
var n = this.viewport.getOriginalState();
|
|
o ? (t = Math.max(this.options.minZoom * n.zoom, Math.min(this.options.maxZoom * n.zoom, t)), t /= this.getZoom()) : this.getZoom() * t < this.options.minZoom * n.zoom ? t = this.options.minZoom * n.zoom / this.getZoom() : this.getZoom() * t > this.options.maxZoom * n.zoom && (t = this.options.maxZoom * n.zoom / this.getZoom());
|
|
var i = this.viewport.getCTM(),
|
|
s = e.matrixTransform(i.inverse()),
|
|
r = this.svg.createSVGMatrix().translate(s.x, s.y).scale(t).translate(-s.x, -s.y),
|
|
a = i.multiply(r);
|
|
a.a !== i.a && this.viewport.setCTM(a)
|
|
}, a.prototype.zoom = function(t, e) {
|
|
this.zoomAtPoint(t, s.getSvgCenterPoint(this.svg, this.width, this.height), e)
|
|
}, a.prototype.publicZoom = function(t, e) {
|
|
e && (t = this.computeFromRelativeZoom(t)), this.zoom(t, e)
|
|
}, a.prototype.publicZoomAtPoint = function(t, e, o) {
|
|
if (o && (t = this.computeFromRelativeZoom(t)), !("SVGPoint" !== i.getType(e) && "x" in e && "y" in e)) throw new Error("Given point is invalid");
|
|
e = s.createSVGPoint(this.svg, e.x, e.y), this.zoomAtPoint(t, e, o)
|
|
}, a.prototype.getZoom = function() {
|
|
return this.viewport.getZoom()
|
|
}, a.prototype.getRelativeZoom = function() {
|
|
return this.viewport.getRelativeZoom()
|
|
}, a.prototype.computeFromRelativeZoom = function(t) {
|
|
return t * this.viewport.getOriginalState().zoom
|
|
}, a.prototype.resetZoom = function() {
|
|
var t = this.viewport.getOriginalState();
|
|
this.zoom(t.zoom, !0)
|
|
}, a.prototype.resetPan = function() {
|
|
this.pan(this.viewport.getOriginalState())
|
|
}, a.prototype.reset = function() {
|
|
this.resetZoom(), this.resetPan()
|
|
}, a.prototype.handleDblClick = function(t) {
|
|
if (this.options.preventMouseEventsDefault && (t.preventDefault ? t.preventDefault() : t.returnValue = !1), this.options.controlIconsEnabled) {
|
|
var e = t.target.getAttribute("class") || "";
|
|
if (e.indexOf("svg-pan-zoom-control") > -1) return !1
|
|
}
|
|
var o;
|
|
o = t.shiftKey ? 1 / (2 * (1 + this.options.zoomScaleSensitivity)) : 2 * (1 + this.options.zoomScaleSensitivity);
|
|
var n = s.getEventPoint(t, this.svg).matrixTransform(this.svg.getScreenCTM().inverse());
|
|
this.zoomAtPoint(o, n)
|
|
}, a.prototype.handleMouseDown = function(t, e) {
|
|
this.options.preventMouseEventsDefault && (t.preventDefault ? t.preventDefault() : t.returnValue = !1), i.mouseAndTouchNormalize(t, this.svg), this.options.dblClickZoomEnabled && i.isDblClick(t, e) ? this.handleDblClick(t) : (this.state = "pan", this.firstEventCTM = this.viewport.getCTM(), this.stateOrigin = s.getEventPoint(t, this.svg).matrixTransform(this.firstEventCTM.inverse()))
|
|
}, a.prototype.handleMouseMove = function(t) {
|
|
if (this.options.preventMouseEventsDefault && (t.preventDefault ? t.preventDefault() : t.returnValue = !1), "pan" === this.state && this.options.panEnabled) {
|
|
var e = s.getEventPoint(t, this.svg).matrixTransform(this.firstEventCTM.inverse()),
|
|
o = this.firstEventCTM.translate(e.x - this.stateOrigin.x, e.y - this.stateOrigin.y);
|
|
this.viewport.setCTM(o)
|
|
}
|
|
}, a.prototype.handleMouseUp = function(t) {
|
|
this.options.preventMouseEventsDefault && (t.preventDefault ? t.preventDefault() : t.returnValue = !1), "pan" === this.state && (this.state = "none")
|
|
}, a.prototype.fit = function() {
|
|
var t = this.viewport.getViewBox(),
|
|
e = Math.min(this.width / t.width, this.height / t.height);
|
|
this.zoom(e, !0)
|
|
}, a.prototype.contain = function() {
|
|
var t = this.viewport.getViewBox(),
|
|
e = Math.max(this.width / t.width, this.height / t.height);
|
|
this.zoom(e, !0)
|
|
}, a.prototype.center = function() {
|
|
var t = this.viewport.getViewBox(),
|
|
e = .5 * (this.width - (t.width + 2 * t.x) * this.getZoom()),
|
|
o = .5 * (this.height - (t.height + 2 * t.y) * this.getZoom());
|
|
this.getPublicInstance().pan({
|
|
x: e,
|
|
y: o
|
|
})
|
|
}, a.prototype.updateBBox = function() {
|
|
this.viewport.recacheViewBox()
|
|
}, a.prototype.pan = function(t) {
|
|
var e = this.viewport.getCTM();
|
|
e.e = t.x, e.f = t.y, this.viewport.setCTM(e)
|
|
}, a.prototype.panBy = function(t) {
|
|
var e = this.viewport.getCTM();
|
|
e.e += t.x, e.f += t.y, this.viewport.setCTM(e)
|
|
}, a.prototype.getPan = function() {
|
|
var t = this.viewport.getState();
|
|
return {
|
|
x: t.x,
|
|
y: t.y
|
|
}
|
|
}, a.prototype.resize = function() {
|
|
var t = s.getBoundingClientRectNormalized(this.svg);
|
|
this.width = t.width, this.height = t.height, this.options.controlIconsEnabled && (this.getPublicInstance().disableControlIcons(), this.getPublicInstance().enableControlIcons())
|
|
}, a.prototype.destroy = function() {
|
|
var t = this;
|
|
this.beforeZoom = null, this.onZoom = null, this.beforePan = null, this.onPan = null, null != this.options.customEventsHandler && this.options.customEventsHandler.destroy({
|
|
svgElement: this.svg,
|
|
eventsListenerElement: this.options.eventsListenerElement,
|
|
instance: this.getPublicInstance()
|
|
});
|
|
for (var e in this.eventListeners)(this.options.eventsListenerElement || this.svg).removeEventListener(e, this.eventListeners[e], !1);
|
|
this.disableMouseWheelZoom(), this.getPublicInstance().disableControlIcons(), this.reset(), u = u.filter(function(e) {
|
|
return e.svg !== t.svg
|
|
}), delete this.options, delete this.publicInstance, delete this.pi, this.getPublicInstance = function() {
|
|
return null
|
|
}
|
|
}, a.prototype.getPublicInstance = function() {
|
|
var t = this;
|
|
return this.publicInstance || (this.publicInstance = this.pi = {
|
|
enablePan: function() {
|
|
return t.options.panEnabled = !0, t.pi
|
|
},
|
|
disablePan: function() {
|
|
return t.options.panEnabled = !1, t.pi
|
|
},
|
|
isPanEnabled: function() {
|
|
return !!t.options.panEnabled
|
|
},
|
|
pan: function(e) {
|
|
return t.pan(e), t.pi
|
|
},
|
|
panBy: function(e) {
|
|
return t.panBy(e), t.pi
|
|
},
|
|
getPan: function() {
|
|
return t.getPan()
|
|
},
|
|
setBeforePan: function(e) {
|
|
return t.options.beforePan = null === e ? null : i.proxy(e, t.publicInstance), t.pi
|
|
},
|
|
setOnPan: function(e) {
|
|
return t.options.onPan = null === e ? null : i.proxy(e, t.publicInstance), t.pi
|
|
},
|
|
enableZoom: function() {
|
|
return t.options.zoomEnabled = !0, t.pi
|
|
},
|
|
disableZoom: function() {
|
|
return t.options.zoomEnabled = !1, t.pi
|
|
},
|
|
isZoomEnabled: function() {
|
|
return !!t.options.zoomEnabled
|
|
},
|
|
enableControlIcons: function() {
|
|
return t.options.controlIconsEnabled || (t.options.controlIconsEnabled = !0, n.enable(t)), t.pi
|
|
},
|
|
disableControlIcons: function() {
|
|
return t.options.controlIconsEnabled && (t.options.controlIconsEnabled = !1, n.disable(t)), t.pi
|
|
},
|
|
isControlIconsEnabled: function() {
|
|
return !!t.options.controlIconsEnabled
|
|
},
|
|
enableDblClickZoom: function() {
|
|
return t.options.dblClickZoomEnabled = !0, t.pi
|
|
},
|
|
disableDblClickZoom: function() {
|
|
return t.options.dblClickZoomEnabled = !1, t.pi
|
|
},
|
|
isDblClickZoomEnabled: function() {
|
|
return !!t.options.dblClickZoomEnabled
|
|
},
|
|
enableMouseWheelZoom: function() {
|
|
return t.enableMouseWheelZoom(), t.pi
|
|
},
|
|
disableMouseWheelZoom: function() {
|
|
return t.disableMouseWheelZoom(), t.pi
|
|
},
|
|
isMouseWheelZoomEnabled: function() {
|
|
return !!t.options.mouseWheelZoomEnabled
|
|
},
|
|
setZoomScaleSensitivity: function(e) {
|
|
return t.options.zoomScaleSensitivity = e, t.pi
|
|
},
|
|
setMinZoom: function(e) {
|
|
return t.options.minZoom = e, t.pi
|
|
},
|
|
setMaxZoom: function(e) {
|
|
return t.options.maxZoom = e, t.pi
|
|
},
|
|
setBeforeZoom: function(e) {
|
|
return t.options.beforeZoom = null === e ? null : i.proxy(e, t.publicInstance), t.pi
|
|
},
|
|
setOnZoom: function(e) {
|
|
return t.options.onZoom = null === e ? null : i.proxy(e, t.publicInstance), t.pi
|
|
},
|
|
zoom: function(e) {
|
|
return t.publicZoom(e, !0), t.pi
|
|
},
|
|
zoomBy: function(e) {
|
|
return t.publicZoom(e, !1), t.pi
|
|
},
|
|
zoomAtPoint: function(e, o) {
|
|
return t.publicZoomAtPoint(e, o, !0), t.pi
|
|
},
|
|
zoomAtPointBy: function(e, o) {
|
|
return t.publicZoomAtPoint(e, o, !1), t.pi
|
|
},
|
|
zoomIn: function() {
|
|
return this.zoomBy(1 + t.options.zoomScaleSensitivity), t.pi
|
|
},
|
|
zoomOut: function() {
|
|
return this.zoomBy(1 / (1 + t.options.zoomScaleSensitivity)), t.pi
|
|
},
|
|
getZoom: function() {
|
|
return t.getRelativeZoom()
|
|
},
|
|
resetZoom: function() {
|
|
return t.resetZoom(), t.pi
|
|
},
|
|
resetPan: function() {
|
|
return t.resetPan(), t.pi
|
|
},
|
|
reset: function() {
|
|
return t.reset(), t.pi
|
|
},
|
|
fit: function() {
|
|
return t.fit(), t.pi
|
|
},
|
|
contain: function() {
|
|
return t.contain(), t.pi
|
|
},
|
|
center: function() {
|
|
return t.center(), t.pi
|
|
},
|
|
updateBBox: function() {
|
|
return t.updateBBox(), t.pi
|
|
},
|
|
resize: function() {
|
|
return t.resize(), t.pi
|
|
},
|
|
getSizes: function() {
|
|
return {
|
|
width: t.width,
|
|
height: t.height,
|
|
realZoom: t.getZoom(),
|
|
viewBox: t.viewport.getViewBox()
|
|
}
|
|
},
|
|
destroy: function() {
|
|
return t.destroy(), t.pi
|
|
}
|
|
}), this.publicInstance
|
|
};
|
|
var u = [],
|
|
h = function(t, e) {
|
|
var o = i.getSvg(t);
|
|
if (null === o) return null;
|
|
for (var n = u.length - 1; n >= 0; n--)
|
|
if (u[n].svg === o) return u[n].instance.getPublicInstance();
|
|
return u.push({
|
|
svg: o,
|
|
instance: new a(o, e)
|
|
}), u[u.length - 1].instance.getPublicInstance()
|
|
};
|
|
e.exports = h
|
|
}, {
|
|
"./control-icons": 2,
|
|
"./shadow-viewport": 3,
|
|
"./svg-utilities": 5,
|
|
"./uniwheel": 6,
|
|
"./utilities": 7
|
|
}],
|
|
5: [function(t, e) {
|
|
var o = t("./utilities"),
|
|
n = "unknown";
|
|
document.documentMode && (n = "ie"), e.exports = {
|
|
svgNS: "http://www.w3.org/2000/svg",
|
|
xmlNS: "http://www.w3.org/XML/1998/namespace",
|
|
xmlnsNS: "http://www.w3.org/2000/xmlns/",
|
|
xlinkNS: "http://www.w3.org/1999/xlink",
|
|
evNS: "http://www.w3.org/2001/xml-events",
|
|
getBoundingClientRectNormalized: function(t) {
|
|
if (t.clientWidth && t.clientHeight) return {
|
|
width: t.clientWidth,
|
|
height: t.clientHeight
|
|
};
|
|
if (t.getBoundingClientRect()) return t.getBoundingClientRect();
|
|
throw new Error("Cannot get BoundingClientRect for SVG.")
|
|
},
|
|
getOrCreateViewport: function(t, e) {
|
|
var n = null;
|
|
if (n = o.isElement(e) ? e : t.querySelector(e), !n) {
|
|
var i = Array.prototype.slice.call(t.childNodes || t.children).filter(function(t) {
|
|
return "defs" !== t.nodeName && "#text" !== t.nodeName
|
|
});
|
|
1 === i.length && "g" === i[0].nodeName && null === i[0].getAttribute("transform") && (n = i[0])
|
|
}
|
|
if (!n) {
|
|
var s = "viewport-" + (new Date).toISOString().replace(/\D/g, "");
|
|
n = document.createElementNS(this.svgNS, "g"), n.setAttribute("id", s);
|
|
var r = t.childNodes || t.children;
|
|
if (r && r.length > 0)
|
|
for (var a = r.length; a > 0; a--) "defs" !== r[r.length - a].nodeName && n.appendChild(r[r.length - a]);
|
|
t.appendChild(n)
|
|
}
|
|
var l = [];
|
|
return n.getAttribute("class") && (l = n.getAttribute("class").split(" ")), ~l.indexOf("svg-pan-zoom_viewport") || (l.push("svg-pan-zoom_viewport"), n.setAttribute("class", l.join(" "))), n
|
|
},
|
|
setupSvgAttributes: function(t) {
|
|
if (t.setAttribute("xmlns", this.svgNS), t.setAttributeNS(this.xmlnsNS, "xmlns:xlink", this.xlinkNS), t.setAttributeNS(this.xmlnsNS, "xmlns:ev", this.evNS), null !== t.parentNode) {
|
|
var e = t.getAttribute("style") || ""; - 1 === e.toLowerCase().indexOf("overflow") && t.setAttribute("style", "overflow: hidden; " + e)
|
|
}
|
|
},
|
|
internetExplorerRedisplayInterval: 300,
|
|
refreshDefsGlobal: o.throttle(function() {
|
|
for (var t = document.querySelectorAll("defs"), e = t.length, o = 0; e > o; o++) {
|
|
var n = t[o];
|
|
n.parentNode.insertBefore(n, n)
|
|
}
|
|
}, this.internetExplorerRedisplayInterval),
|
|
setCTM: function(t, e, o) {
|
|
var i = this,
|
|
s = "matrix(" + e.a + "," + e.b + "," + e.c + "," + e.d + "," + e.e + "," + e.f + ")";
|
|
t.setAttributeNS(null, "transform", s), "ie" === n && o && (o.parentNode.insertBefore(o, o), window.setTimeout(function() {
|
|
i.refreshDefsGlobal()
|
|
}, i.internetExplorerRedisplayInterval))
|
|
},
|
|
getEventPoint: function(t, e) {
|
|
var n = e.createSVGPoint();
|
|
return o.mouseAndTouchNormalize(t, e), n.x = t.clientX, n.y = t.clientY, n
|
|
},
|
|
getSvgCenterPoint: function(t, e, o) {
|
|
return this.createSVGPoint(t, e / 2, o / 2)
|
|
},
|
|
createSVGPoint: function(t, e, o) {
|
|
var n = t.createSVGPoint();
|
|
return n.x = e, n.y = o, n
|
|
}
|
|
}
|
|
}, {
|
|
"./utilities": 7
|
|
}],
|
|
6: [function(t, e) {
|
|
e.exports = function() {
|
|
function t(t, e, o) {
|
|
var n = function(t) {
|
|
!t && (t = window.event);
|
|
var o = {
|
|
originalEvent: t,
|
|
target: t.target || t.srcElement,
|
|
type: "wheel",
|
|
deltaMode: "MozMousePixelScroll" == t.type ? 0 : 1,
|
|
deltaX: 0,
|
|
delatZ: 0,
|
|
preventDefault: function() {
|
|
t.preventDefault ? t.preventDefault() : t.returnValue = !1
|
|
}
|
|
};
|
|
return "mousewheel" == u ? (o.deltaY = -1 / 40 * t.wheelDelta, t.wheelDeltaX && (o.deltaX = -1 / 40 * t.wheelDeltaX)) : o.deltaY = t.detail, e(o)
|
|
};
|
|
return c.push({
|
|
element: t,
|
|
fn: n,
|
|
capture: o
|
|
}), n
|
|
}
|
|
|
|
function e(t, e) {
|
|
for (var o = 0; o < c.length; o++)
|
|
if (c[o].element === t && c[o].capture === e) return c[o].fn;
|
|
return function() {}
|
|
}
|
|
|
|
function o(t, e) {
|
|
for (var o = 0; o < c.length; o++)
|
|
if (c[o].element === t && c[o].capture === e) return c.splice(o, 1)
|
|
}
|
|
|
|
function n(e, o, n, i) {
|
|
var s;
|
|
s = "wheel" === u ? n : t(e, n, i), e[a](h + o, s, i || !1)
|
|
}
|
|
|
|
function i(t, n, i, s) {
|
|
cb = "wheel" === u ? i : e(t, s), t[l](h + n, cb, s || !1), o(t, s)
|
|
}
|
|
|
|
function s(t, e, o) {
|
|
n(t, u, e, o), "DOMMouseScroll" == u && n(t, "MozMousePixelScroll", e, o)
|
|
}
|
|
|
|
function r(t, e, o) {
|
|
i(t, u, e, o), "DOMMouseScroll" == u && i(t, "MozMousePixelScroll", e, o)
|
|
}
|
|
var a, l, u, h = "",
|
|
c = [];
|
|
return window.addEventListener ? (a = "addEventListener", l = "removeEventListener") : (a = "attachEvent", l = "detachEvent", h = "on"), u = "onwheel" in document.createElement("div") ? "wheel" : void 0 !== document.onmousewheel ? "mousewheel" : "DOMMouseScroll", {
|
|
on: s,
|
|
off: r
|
|
}
|
|
}()
|
|
}, {}],
|
|
7: [function(t, e) {
|
|
function o(t) {
|
|
return function(e) {
|
|
window.setTimeout(e, t)
|
|
}
|
|
}
|
|
e.exports = {
|
|
extend: function(t, e) {
|
|
t = t || {};
|
|
for (var o in e) t[o] = this.isObject(e[o]) ? this.extend(t[o], e[o]) : e[o];
|
|
return t
|
|
},
|
|
isElement: function(t) {
|
|
return t instanceof HTMLElement || t instanceof SVGElement || t instanceof SVGSVGElement || t && "object" == typeof t && null !== t && 1 === t.nodeType && "string" == typeof t.nodeName
|
|
},
|
|
isObject: function(t) {
|
|
return "[object Object]" === Object.prototype.toString.call(t)
|
|
},
|
|
isNumber: function(t) {
|
|
return !isNaN(parseFloat(t)) && isFinite(t)
|
|
},
|
|
getSvg: function(t) {
|
|
var e, o;
|
|
if (this.isElement(t)) e = t;
|
|
else {
|
|
if (!("string" == typeof t || t instanceof String)) throw new Error("Provided selector is not an HTML object nor String");
|
|
if (e = document.querySelector(t), !e) throw new Error("Provided selector did not find any elements. Selector: " + t)
|
|
}
|
|
if ("svg" === e.tagName.toLowerCase()) o = e;
|
|
else if ("object" === e.tagName.toLowerCase()) o = e.contentDocument.documentElement;
|
|
else {
|
|
if ("embed" !== e.tagName.toLowerCase()) throw new Error("img" === e.tagName.toLowerCase() ? 'Cannot script an SVG in an "img" element. Please use an "object" element or an in-line SVG.' : "Cannot get SVG.");
|
|
o = e.getSVGDocument().documentElement
|
|
}
|
|
return o
|
|
},
|
|
proxy: function(t, e) {
|
|
return function() {
|
|
return t.apply(e, arguments)
|
|
}
|
|
},
|
|
getType: function(t) {
|
|
return Object.prototype.toString.apply(t).replace(/^\[object\s/, "").replace(/\]$/, "")
|
|
},
|
|
mouseAndTouchNormalize: function(t, e) {
|
|
if (void 0 === t.clientX || null === t.clientX)
|
|
if (t.clientX = 0, t.clientY = 0, void 0 !== t.changedTouches && t.changedTouches.length) {
|
|
if (void 0 !== t.changedTouches[0].clientX) t.clientX = t.changedTouches[0].clientX, t.clientY = t.changedTouches[0].clientY;
|
|
else if (void 0 !== t.changedTouches[0].pageX) {
|
|
var o = e.getBoundingClientRect();
|
|
t.clientX = t.changedTouches[0].pageX - o.left, t.clientY = t.changedTouches[0].pageY - o.top
|
|
}
|
|
} else void 0 !== t.originalEvent && void 0 !== t.originalEvent.clientX && (t.clientX = t.originalEvent.clientX, t.clientY = t.originalEvent.clientY)
|
|
},
|
|
isDblClick: function(t, e) {
|
|
if (2 === t.detail) return !0;
|
|
if (void 0 !== e && null !== e) {
|
|
var o = t.timeStamp - e.timeStamp,
|
|
n = Math.sqrt(Math.pow(t.clientX - e.clientX, 2) + Math.pow(t.clientY - e.clientY, 2));
|
|
return 250 > o && 10 > n
|
|
}
|
|
return !1
|
|
},
|
|
now: Date.now || function() {
|
|
return (new Date).getTime()
|
|
},
|
|
throttle: function(t, e, o) {
|
|
var n, i, s, r = this,
|
|
a = null,
|
|
l = 0;
|
|
o || (o = {});
|
|
var u = function() {
|
|
l = o.leading === !1 ? 0 : r.now(), a = null, s = t.apply(n, i), a || (n = i = null)
|
|
};
|
|
return function() {
|
|
var h = r.now();
|
|
l || o.leading !== !1 || (l = h);
|
|
var c = e - (h - l);
|
|
return n = this, i = arguments, 0 >= c || c > e ? (clearTimeout(a), a = null, l = h, s = t.apply(n, i), a || (n = i = null)) : a || o.trailing === !1 || (a = setTimeout(u, c)), s
|
|
}
|
|
},
|
|
createRequestAnimationFrame: function(t) {
|
|
var e = null;
|
|
return "auto" !== t && 60 > t && t > 1 && (e = Math.floor(1e3 / t)), null === e ? window.requestAnimationFrame || o(33) : o(e)
|
|
}
|
|
}
|
|
}, {}]
|
|
}, {}, [1]);
|