{"version":3,"file":"view-script.min.js","sources":["../../../../node_modules/svg-pan-zoom/src/uniwheel.js","../../../../node_modules/svg-pan-zoom/src/utilities.js","../../../../node_modules/svg-pan-zoom/src/svg-utilities.js","../../../../node_modules/svg-pan-zoom/src/control-icons.js","../../../../node_modules/svg-pan-zoom/src/shadow-viewport.js","../../../../node_modules/svg-pan-zoom/src/svg-pan-zoom.js","../../../../block-editor/blocks/map-feature/view-script.js"],"sourcesContent":["// uniwheel 0.1.2 (customized)\n// A unified cross browser mouse wheel event handler\n// https://github.com/teemualap/uniwheel\n\nmodule.exports = (function(){\n\n //Full details: https://developer.mozilla.org/en-US/docs/Web/Reference/Events/wheel\n\n var prefix = \"\", _addEventListener, _removeEventListener, support, fns = [];\n var passiveOption = {passive: true};\n\n // detect event model\n if ( window.addEventListener ) {\n _addEventListener = \"addEventListener\";\n _removeEventListener = \"removeEventListener\";\n } else {\n _addEventListener = \"attachEvent\";\n _removeEventListener = \"detachEvent\";\n prefix = \"on\";\n }\n\n // detect available wheel event\n support = \"onwheel\" in document.createElement(\"div\") ? \"wheel\" : // Modern browsers support \"wheel\"\n document.onmousewheel !== undefined ? \"mousewheel\" : // Webkit and IE support at least \"mousewheel\"\n \"DOMMouseScroll\"; // let's assume that remaining browsers are older Firefox\n\n\n function createCallback(element,callback) {\n\n var fn = function(originalEvent) {\n\n !originalEvent && ( originalEvent = window.event );\n\n // create a normalized event object\n var event = {\n // keep a ref to the original event object\n originalEvent: originalEvent,\n target: originalEvent.target || originalEvent.srcElement,\n type: \"wheel\",\n deltaMode: originalEvent.type == \"MozMousePixelScroll\" ? 0 : 1,\n deltaX: 0,\n delatZ: 0,\n preventDefault: function() {\n originalEvent.preventDefault ?\n originalEvent.preventDefault() :\n originalEvent.returnValue = false;\n }\n };\n\n // calculate deltaY (and deltaX) according to the event\n if ( support == \"mousewheel\" ) {\n event.deltaY = - 1/40 * originalEvent.wheelDelta;\n // Webkit also support wheelDeltaX\n originalEvent.wheelDeltaX && ( event.deltaX = - 1/40 * originalEvent.wheelDeltaX );\n } else {\n event.deltaY = originalEvent.detail;\n }\n\n // it's time to fire the callback\n return callback( event );\n\n };\n\n fns.push({\n element: element,\n fn: fn,\n });\n\n return fn;\n }\n\n function getCallback(element) {\n for (var i = 0; i < fns.length; i++) {\n if (fns[i].element === element) {\n return fns[i].fn;\n }\n }\n return function(){};\n }\n\n function removeCallback(element) {\n for (var i = 0; i < fns.length; i++) {\n if (fns[i].element === element) {\n return fns.splice(i,1);\n }\n }\n }\n\n function _addWheelListener(elem, eventName, callback, isPassiveListener ) {\n var cb;\n\n if (support === \"wheel\") {\n cb = callback;\n } else {\n cb = createCallback(elem, callback);\n }\n\n elem[_addEventListener](prefix + eventName, cb, isPassiveListener ? passiveOption : false);\n }\n\n function _removeWheelListener(elem, eventName, callback, isPassiveListener ) {\n\n var cb;\n\n if (support === \"wheel\") {\n cb = callback;\n } else {\n cb = getCallback(elem);\n }\n\n elem[_removeEventListener](prefix + eventName, cb, isPassiveListener ? passiveOption : false);\n\n removeCallback(elem);\n }\n\n function addWheelListener( elem, callback, isPassiveListener ) {\n _addWheelListener(elem, support, callback, isPassiveListener );\n\n // handle MozMousePixelScroll in older Firefox\n if( support == \"DOMMouseScroll\" ) {\n _addWheelListener(elem, \"MozMousePixelScroll\", callback, isPassiveListener );\n }\n }\n\n function removeWheelListener(elem, callback, isPassiveListener){\n _removeWheelListener(elem, support, callback, isPassiveListener);\n\n // handle MozMousePixelScroll in older Firefox\n if( support == \"DOMMouseScroll\" ) {\n _removeWheelListener(elem, \"MozMousePixelScroll\", callback, isPassiveListener);\n }\n }\n\n return {\n on: addWheelListener,\n off: removeWheelListener\n };\n\n})();\n","module.exports = {\n /**\n * Extends an object\n *\n * @param {Object} target object to extend\n * @param {Object} source object to take properties from\n * @return {Object} extended object\n */\n extend: function(target, source) {\n target = target || {};\n for (var prop in source) {\n // Go recursively\n if (this.isObject(source[prop])) {\n target[prop] = this.extend(target[prop], source[prop]);\n } else {\n target[prop] = source[prop];\n }\n }\n return target;\n },\n\n /**\n * Checks if an object is a DOM element\n *\n * @param {Object} o HTML element or String\n * @return {Boolean} returns true if object is a DOM element\n */\n isElement: function(o) {\n return (\n o instanceof HTMLElement ||\n o instanceof SVGElement ||\n o instanceof SVGSVGElement || //DOM2\n (o &&\n typeof o === \"object\" &&\n o !== null &&\n o.nodeType === 1 &&\n typeof o.nodeName === \"string\")\n );\n },\n\n /**\n * Checks if an object is an Object\n *\n * @param {Object} o Object\n * @return {Boolean} returns true if object is an Object\n */\n isObject: function(o) {\n return Object.prototype.toString.call(o) === \"[object Object]\";\n },\n\n /**\n * Checks if variable is Number\n *\n * @param {Integer|Float} n\n * @return {Boolean} returns true if variable is Number\n */\n isNumber: function(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n },\n\n /**\n * Search for an SVG element\n *\n * @param {Object|String} elementOrSelector DOM Element or selector String\n * @return {Object|Null} SVG or null\n */\n getSvg: function(elementOrSelector) {\n var element, svg;\n\n if (!this.isElement(elementOrSelector)) {\n // If selector provided\n if (\n typeof elementOrSelector === \"string\" ||\n elementOrSelector instanceof String\n ) {\n // Try to find the element\n element = document.querySelector(elementOrSelector);\n\n if (!element) {\n throw new Error(\n \"Provided selector did not find any elements. Selector: \" +\n elementOrSelector\n );\n return null;\n }\n } else {\n throw new Error(\"Provided selector is not an HTML object nor String\");\n return null;\n }\n } else {\n element = elementOrSelector;\n }\n\n if (element.tagName.toLowerCase() === \"svg\") {\n svg = element;\n } else {\n if (element.tagName.toLowerCase() === \"object\") {\n svg = element.contentDocument.documentElement;\n } else {\n if (element.tagName.toLowerCase() === \"embed\") {\n svg = element.getSVGDocument().documentElement;\n } else {\n if (element.tagName.toLowerCase() === \"img\") {\n throw new Error(\n 'Cannot script an SVG in an \"img\" element. Please use an \"object\" element or an in-line SVG.'\n );\n } else {\n throw new Error(\"Cannot get SVG.\");\n }\n return null;\n }\n }\n }\n\n return svg;\n },\n\n /**\n * Attach a given context to a function\n * @param {Function} fn Function\n * @param {Object} context Context\n * @return {Function} Function with certain context\n */\n proxy: function(fn, context) {\n return function() {\n return fn.apply(context, arguments);\n };\n },\n\n /**\n * Returns object type\n * Uses toString that returns [object SVGPoint]\n * And than parses object type from string\n *\n * @param {Object} o Any object\n * @return {String} Object type\n */\n getType: function(o) {\n return Object.prototype.toString\n .apply(o)\n .replace(/^\\[object\\s/, \"\")\n .replace(/\\]$/, \"\");\n },\n\n /**\n * If it is a touch event than add clientX and clientY to event object\n *\n * @param {Event} evt\n * @param {SVGSVGElement} svg\n */\n mouseAndTouchNormalize: function(evt, svg) {\n // If no clientX then fallback\n if (evt.clientX === void 0 || evt.clientX === null) {\n // Fallback\n evt.clientX = 0;\n evt.clientY = 0;\n\n // If it is a touch event\n if (evt.touches !== void 0 && evt.touches.length) {\n if (evt.touches[0].clientX !== void 0) {\n evt.clientX = evt.touches[0].clientX;\n evt.clientY = evt.touches[0].clientY;\n } else if (evt.touches[0].pageX !== void 0) {\n var rect = svg.getBoundingClientRect();\n\n evt.clientX = evt.touches[0].pageX - rect.left;\n evt.clientY = evt.touches[0].pageY - rect.top;\n }\n // If it is a custom event\n } else if (evt.originalEvent !== void 0) {\n if (evt.originalEvent.clientX !== void 0) {\n evt.clientX = evt.originalEvent.clientX;\n evt.clientY = evt.originalEvent.clientY;\n }\n }\n }\n },\n\n /**\n * Check if an event is a double click/tap\n * TODO: For touch gestures use a library (hammer.js) that takes in account other events\n * (touchmove and touchend). It should take in account tap duration and traveled distance\n *\n * @param {Event} evt\n * @param {Event} prevEvt Previous Event\n * @return {Boolean}\n */\n isDblClick: function(evt, prevEvt) {\n // Double click detected by browser\n if (evt.detail === 2) {\n return true;\n }\n // Try to compare events\n else if (prevEvt !== void 0 && prevEvt !== null) {\n var timeStampDiff = evt.timeStamp - prevEvt.timeStamp, // should be lower than 250 ms\n touchesDistance = Math.sqrt(\n Math.pow(evt.clientX - prevEvt.clientX, 2) +\n Math.pow(evt.clientY - prevEvt.clientY, 2)\n );\n\n return timeStampDiff < 250 && touchesDistance < 10;\n }\n\n // Nothing found\n return false;\n },\n\n /**\n * Returns current timestamp as an integer\n *\n * @return {Number}\n */\n now:\n Date.now ||\n function() {\n return new Date().getTime();\n },\n\n // From underscore.\n // Returns a function, that, when invoked, will only be triggered at most once\n // during a given window of time. Normally, the throttled function will run\n // as much as it can, without ever going more than once per `wait` duration;\n // but if you'd like to disable the execution on the leading edge, pass\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\n throttle: function(func, wait, options) {\n var that = this;\n var context, args, result;\n var timeout = null;\n var previous = 0;\n if (!options) {\n options = {};\n }\n var later = function() {\n previous = options.leading === false ? 0 : that.now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) {\n context = args = null;\n }\n };\n return function() {\n var now = that.now();\n if (!previous && options.leading === false) {\n previous = now;\n }\n var remaining = wait - (now - previous);\n context = this; // eslint-disable-line consistent-this\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n clearTimeout(timeout);\n timeout = null;\n previous = now;\n result = func.apply(context, args);\n if (!timeout) {\n context = args = null;\n }\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n },\n\n /**\n * Create a requestAnimationFrame simulation\n *\n * @param {Number|String} refreshRate\n * @return {Function}\n */\n createRequestAnimationFrame: function(refreshRate) {\n var timeout = null;\n\n // Convert refreshRate to timeout\n if (refreshRate !== \"auto\" && refreshRate < 60 && refreshRate > 1) {\n timeout = Math.floor(1000 / refreshRate);\n }\n\n if (timeout === null) {\n return window.requestAnimationFrame || requestTimeout(33);\n } else {\n return requestTimeout(timeout);\n }\n }\n};\n\n/**\n * Create a callback that will execute after a given timeout\n *\n * @param {Function} timeout\n * @return {Function}\n */\nfunction requestTimeout(timeout) {\n return function(callback) {\n window.setTimeout(callback, timeout);\n };\n}\n","var Utils = require(\"./utilities\"),\n _browser = \"unknown\";\n\n// http://stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-browser\nif (/*@cc_on!@*/ false || !!document.documentMode) {\n // internet explorer\n _browser = \"ie\";\n}\n\nmodule.exports = {\n svgNS: \"http://www.w3.org/2000/svg\",\n xmlNS: \"http://www.w3.org/XML/1998/namespace\",\n xmlnsNS: \"http://www.w3.org/2000/xmlns/\",\n xlinkNS: \"http://www.w3.org/1999/xlink\",\n evNS: \"http://www.w3.org/2001/xml-events\",\n\n /**\n * Get svg dimensions: width and height\n *\n * @param {SVGSVGElement} svg\n * @return {Object} {width: 0, height: 0}\n */\n getBoundingClientRectNormalized: function(svg) {\n if (svg.clientWidth && svg.clientHeight) {\n return { width: svg.clientWidth, height: svg.clientHeight };\n } else if (!!svg.getBoundingClientRect()) {\n return svg.getBoundingClientRect();\n } else {\n throw new Error(\"Cannot get BoundingClientRect for SVG.\");\n }\n },\n\n /**\n * Gets g element with class of \"viewport\" or creates it if it doesn't exist\n *\n * @param {SVGSVGElement} svg\n * @return {SVGElement} g (group) element\n */\n getOrCreateViewport: function(svg, selector) {\n var viewport = null;\n\n if (Utils.isElement(selector)) {\n viewport = selector;\n } else {\n viewport = svg.querySelector(selector);\n }\n\n // Check if there is just one main group in SVG\n if (!viewport) {\n var childNodes = Array.prototype.slice\n .call(svg.childNodes || svg.children)\n .filter(function(el) {\n return el.nodeName !== \"defs\" && el.nodeName !== \"#text\";\n });\n\n // Node name should be SVGGElement and should have no transform attribute\n // Groups with transform are not used as viewport because it involves parsing of all transform possibilities\n if (\n childNodes.length === 1 &&\n childNodes[0].nodeName === \"g\" &&\n childNodes[0].getAttribute(\"transform\") === null\n ) {\n viewport = childNodes[0];\n }\n }\n\n // If no favorable group element exists then create one\n if (!viewport) {\n var viewportId =\n \"viewport-\" + new Date().toISOString().replace(/\\D/g, \"\");\n viewport = document.createElementNS(this.svgNS, \"g\");\n viewport.setAttribute(\"id\", viewportId);\n\n // Internet Explorer (all versions?) can't use childNodes, but other browsers prefer (require?) using childNodes\n var svgChildren = svg.childNodes || svg.children;\n if (!!svgChildren && svgChildren.length > 0) {\n for (var i = svgChildren.length; i > 0; i--) {\n // Move everything into viewport except defs\n if (svgChildren[svgChildren.length - i].nodeName !== \"defs\") {\n viewport.appendChild(svgChildren[svgChildren.length - i]);\n }\n }\n }\n svg.appendChild(viewport);\n }\n\n // Parse class names\n var classNames = [];\n if (viewport.getAttribute(\"class\")) {\n classNames = viewport.getAttribute(\"class\").split(\" \");\n }\n\n // Set class (if not set already)\n if (!~classNames.indexOf(\"svg-pan-zoom_viewport\")) {\n classNames.push(\"svg-pan-zoom_viewport\");\n viewport.setAttribute(\"class\", classNames.join(\" \"));\n }\n\n return viewport;\n },\n\n /**\n * Set SVG attributes\n *\n * @param {SVGSVGElement} svg\n */\n setupSvgAttributes: function(svg) {\n // Setting default attributes\n svg.setAttribute(\"xmlns\", this.svgNS);\n svg.setAttributeNS(this.xmlnsNS, \"xmlns:xlink\", this.xlinkNS);\n svg.setAttributeNS(this.xmlnsNS, \"xmlns:ev\", this.evNS);\n\n // Needed for Internet Explorer, otherwise the viewport overflows\n if (svg.parentNode !== null) {\n var style = svg.getAttribute(\"style\") || \"\";\n if (style.toLowerCase().indexOf(\"overflow\") === -1) {\n svg.setAttribute(\"style\", \"overflow: hidden; \" + style);\n }\n }\n },\n\n /**\n * How long Internet Explorer takes to finish updating its display (ms).\n */\n internetExplorerRedisplayInterval: 300,\n\n /**\n * Forces the browser to redisplay all SVG elements that rely on an\n * element defined in a 'defs' section. It works globally, for every\n * available defs element on the page.\n * The throttling is intentionally global.\n *\n * This is only needed for IE. It is as a hack to make markers (and 'use' elements?)\n * visible after pan/zoom when there are multiple SVGs on the page.\n * See bug report: https://connect.microsoft.com/IE/feedback/details/781964/\n * also see svg-pan-zoom issue: https://github.com/ariutta/svg-pan-zoom/issues/62\n */\n refreshDefsGlobal: Utils.throttle(\n function() {\n var allDefs = document.querySelectorAll(\"defs\");\n var allDefsCount = allDefs.length;\n for (var i = 0; i < allDefsCount; i++) {\n var thisDefs = allDefs[i];\n thisDefs.parentNode.insertBefore(thisDefs, thisDefs);\n }\n },\n this ? this.internetExplorerRedisplayInterval : null\n ),\n\n /**\n * Sets the current transform matrix of an element\n *\n * @param {SVGElement} element\n * @param {SVGMatrix} matrix CTM\n * @param {SVGElement} defs\n */\n setCTM: function(element, matrix, defs) {\n var that = this,\n s =\n \"matrix(\" +\n matrix.a +\n \",\" +\n matrix.b +\n \",\" +\n matrix.c +\n \",\" +\n matrix.d +\n \",\" +\n matrix.e +\n \",\" +\n matrix.f +\n \")\";\n\n element.setAttributeNS(null, \"transform\", s);\n if (\"transform\" in element.style) {\n element.style.transform = s;\n } else if (\"-ms-transform\" in element.style) {\n element.style[\"-ms-transform\"] = s;\n } else if (\"-webkit-transform\" in element.style) {\n element.style[\"-webkit-transform\"] = s;\n }\n\n // IE has a bug that makes markers disappear on zoom (when the matrix \"a\" and/or \"d\" elements change)\n // see http://stackoverflow.com/questions/17654578/svg-marker-does-not-work-in-ie9-10\n // and http://srndolha.wordpress.com/2013/11/25/svg-line-markers-may-disappear-in-internet-explorer-11/\n if (_browser === \"ie\" && !!defs) {\n // this refresh is intended for redisplaying the SVG during zooming\n defs.parentNode.insertBefore(defs, defs);\n // this refresh is intended for redisplaying the other SVGs on a page when panning a given SVG\n // it is also needed for the given SVG itself, on zoomEnd, if the SVG contains any markers that\n // are located under any other element(s).\n window.setTimeout(function() {\n that.refreshDefsGlobal();\n }, that.internetExplorerRedisplayInterval);\n }\n },\n\n /**\n * Instantiate an SVGPoint object with given event coordinates\n *\n * @param {Event} evt\n * @param {SVGSVGElement} svg\n * @return {SVGPoint} point\n */\n getEventPoint: function(evt, svg) {\n var point = svg.createSVGPoint();\n\n Utils.mouseAndTouchNormalize(evt, svg);\n\n point.x = evt.clientX;\n point.y = evt.clientY;\n\n return point;\n },\n\n /**\n * Get SVG center point\n *\n * @param {SVGSVGElement} svg\n * @return {SVGPoint}\n */\n getSvgCenterPoint: function(svg, width, height) {\n return this.createSVGPoint(svg, width / 2, height / 2);\n },\n\n /**\n * Create a SVGPoint with given x and y\n *\n * @param {SVGSVGElement} svg\n * @param {Number} x\n * @param {Number} y\n * @return {SVGPoint}\n */\n createSVGPoint: function(svg, x, y) {\n var point = svg.createSVGPoint();\n point.x = x;\n point.y = y;\n\n return point;\n }\n};\n","var SvgUtils = require(\"./svg-utilities\");\n\nmodule.exports = {\n enable: function(instance) {\n // Select (and create if necessary) defs\n var defs = instance.svg.querySelector(\"defs\");\n if (!defs) {\n defs = document.createElementNS(SvgUtils.svgNS, \"defs\");\n instance.svg.appendChild(defs);\n }\n\n // Check for style element, and create it if it doesn't exist\n var styleEl = defs.querySelector(\"style#svg-pan-zoom-controls-styles\");\n if (!styleEl) {\n var style = document.createElementNS(SvgUtils.svgNS, \"style\");\n style.setAttribute(\"id\", \"svg-pan-zoom-controls-styles\");\n style.setAttribute(\"type\", \"text/css\");\n style.textContent =\n \".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; }\";\n defs.appendChild(style);\n }\n\n // Zoom Group\n var zoomGroup = document.createElementNS(SvgUtils.svgNS, \"g\");\n zoomGroup.setAttribute(\"id\", \"svg-pan-zoom-controls\");\n zoomGroup.setAttribute(\n \"transform\",\n \"translate(\" +\n (instance.width - 70) +\n \" \" +\n (instance.height - 76) +\n \") scale(0.75)\"\n );\n zoomGroup.setAttribute(\"class\", \"svg-pan-zoom-control\");\n\n // Control elements\n zoomGroup.appendChild(this._createZoomIn(instance));\n zoomGroup.appendChild(this._createZoomReset(instance));\n zoomGroup.appendChild(this._createZoomOut(instance));\n\n // Finally append created element\n instance.svg.appendChild(zoomGroup);\n\n // Cache control instance\n instance.controlIcons = zoomGroup;\n },\n\n _createZoomIn: function(instance) {\n var zoomIn = document.createElementNS(SvgUtils.svgNS, \"g\");\n zoomIn.setAttribute(\"id\", \"svg-pan-zoom-zoom-in\");\n zoomIn.setAttribute(\"transform\", \"translate(30.5 5) scale(0.015)\");\n zoomIn.setAttribute(\"class\", \"svg-pan-zoom-control\");\n zoomIn.addEventListener(\n \"click\",\n function() {\n instance.getPublicInstance().zoomIn();\n },\n false\n );\n zoomIn.addEventListener(\n \"touchstart\",\n function() {\n instance.getPublicInstance().zoomIn();\n },\n false\n );\n\n var zoomInBackground = document.createElementNS(SvgUtils.svgNS, \"rect\"); // TODO change these background space fillers to rounded rectangles so they look prettier\n zoomInBackground.setAttribute(\"x\", \"0\");\n zoomInBackground.setAttribute(\"y\", \"0\");\n zoomInBackground.setAttribute(\"width\", \"1500\"); // larger than expected because the whole group is transformed to scale down\n zoomInBackground.setAttribute(\"height\", \"1400\");\n zoomInBackground.setAttribute(\"class\", \"svg-pan-zoom-control-background\");\n zoomIn.appendChild(zoomInBackground);\n\n var zoomInShape = document.createElementNS(SvgUtils.svgNS, \"path\");\n zoomInShape.setAttribute(\n \"d\",\n \"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\"\n );\n zoomInShape.setAttribute(\"class\", \"svg-pan-zoom-control-element\");\n zoomIn.appendChild(zoomInShape);\n\n return zoomIn;\n },\n\n _createZoomReset: function(instance) {\n // reset\n var resetPanZoomControl = document.createElementNS(SvgUtils.svgNS, \"g\");\n resetPanZoomControl.setAttribute(\"id\", \"svg-pan-zoom-reset-pan-zoom\");\n resetPanZoomControl.setAttribute(\"transform\", \"translate(5 35) scale(0.4)\");\n resetPanZoomControl.setAttribute(\"class\", \"svg-pan-zoom-control\");\n resetPanZoomControl.addEventListener(\n \"click\",\n function() {\n instance.getPublicInstance().reset();\n },\n false\n );\n resetPanZoomControl.addEventListener(\n \"touchstart\",\n function() {\n instance.getPublicInstance().reset();\n },\n false\n );\n\n var resetPanZoomControlBackground = document.createElementNS(\n SvgUtils.svgNS,\n \"rect\"\n ); // TODO change these background space fillers to rounded rectangles so they look prettier\n resetPanZoomControlBackground.setAttribute(\"x\", \"2\");\n resetPanZoomControlBackground.setAttribute(\"y\", \"2\");\n resetPanZoomControlBackground.setAttribute(\"width\", \"182\"); // larger than expected because the whole group is transformed to scale down\n resetPanZoomControlBackground.setAttribute(\"height\", \"58\");\n resetPanZoomControlBackground.setAttribute(\n \"class\",\n \"svg-pan-zoom-control-background\"\n );\n resetPanZoomControl.appendChild(resetPanZoomControlBackground);\n\n var resetPanZoomControlShape1 = document.createElementNS(\n SvgUtils.svgNS,\n \"path\"\n );\n resetPanZoomControlShape1.setAttribute(\n \"d\",\n \"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\"\n );\n resetPanZoomControlShape1.setAttribute(\n \"class\",\n \"svg-pan-zoom-control-element\"\n );\n resetPanZoomControl.appendChild(resetPanZoomControlShape1);\n\n var resetPanZoomControlShape2 = document.createElementNS(\n SvgUtils.svgNS,\n \"path\"\n );\n resetPanZoomControlShape2.setAttribute(\n \"d\",\n \"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\"\n );\n resetPanZoomControlShape2.setAttribute(\n \"class\",\n \"svg-pan-zoom-control-element\"\n );\n resetPanZoomControl.appendChild(resetPanZoomControlShape2);\n\n return resetPanZoomControl;\n },\n\n _createZoomOut: function(instance) {\n // zoom out\n var zoomOut = document.createElementNS(SvgUtils.svgNS, \"g\");\n zoomOut.setAttribute(\"id\", \"svg-pan-zoom-zoom-out\");\n zoomOut.setAttribute(\"transform\", \"translate(30.5 70) scale(0.015)\");\n zoomOut.setAttribute(\"class\", \"svg-pan-zoom-control\");\n zoomOut.addEventListener(\n \"click\",\n function() {\n instance.getPublicInstance().zoomOut();\n },\n false\n );\n zoomOut.addEventListener(\n \"touchstart\",\n function() {\n instance.getPublicInstance().zoomOut();\n },\n false\n );\n\n var zoomOutBackground = document.createElementNS(SvgUtils.svgNS, \"rect\"); // TODO change these background space fillers to rounded rectangles so they look prettier\n zoomOutBackground.setAttribute(\"x\", \"0\");\n zoomOutBackground.setAttribute(\"y\", \"0\");\n zoomOutBackground.setAttribute(\"width\", \"1500\"); // larger than expected because the whole group is transformed to scale down\n zoomOutBackground.setAttribute(\"height\", \"1400\");\n zoomOutBackground.setAttribute(\"class\", \"svg-pan-zoom-control-background\");\n zoomOut.appendChild(zoomOutBackground);\n\n var zoomOutShape = document.createElementNS(SvgUtils.svgNS, \"path\");\n zoomOutShape.setAttribute(\n \"d\",\n \"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\"\n );\n zoomOutShape.setAttribute(\"class\", \"svg-pan-zoom-control-element\");\n zoomOut.appendChild(zoomOutShape);\n\n return zoomOut;\n },\n\n disable: function(instance) {\n if (instance.controlIcons) {\n instance.controlIcons.parentNode.removeChild(instance.controlIcons);\n instance.controlIcons = null;\n }\n }\n};\n","var SvgUtils = require(\"./svg-utilities\"),\n Utils = require(\"./utilities\");\n\nvar ShadowViewport = function(viewport, options) {\n this.init(viewport, options);\n};\n\n/**\n * Initialization\n *\n * @param {SVGElement} viewport\n * @param {Object} options\n */\nShadowViewport.prototype.init = function(viewport, options) {\n // DOM Elements\n this.viewport = viewport;\n this.options = options;\n\n // State cache\n this.originalState = { zoom: 1, x: 0, y: 0 };\n this.activeState = { zoom: 1, x: 0, y: 0 };\n\n this.updateCTMCached = Utils.proxy(this.updateCTM, this);\n\n // Create a custom requestAnimationFrame taking in account refreshRate\n this.requestAnimationFrame = Utils.createRequestAnimationFrame(\n this.options.refreshRate\n );\n\n // ViewBox\n this.viewBox = { x: 0, y: 0, width: 0, height: 0 };\n this.cacheViewBox();\n\n // Process CTM\n var newCTM = this.processCTM();\n\n // Update viewport CTM and cache zoom and pan\n this.setCTM(newCTM);\n\n // Update CTM in this frame\n this.updateCTM();\n};\n\n/**\n * Cache initial viewBox value\n * If no viewBox is defined, then use viewport size/position instead for viewBox values\n */\nShadowViewport.prototype.cacheViewBox = function() {\n var svgViewBox = this.options.svg.getAttribute(\"viewBox\");\n\n if (svgViewBox) {\n var viewBoxValues = svgViewBox\n .split(/[\\s\\,]/)\n .filter(function(v) {\n return v;\n })\n .map(parseFloat);\n\n // Cache viewbox x and y offset\n this.viewBox.x = viewBoxValues[0];\n this.viewBox.y = viewBoxValues[1];\n this.viewBox.width = viewBoxValues[2];\n this.viewBox.height = viewBoxValues[3];\n\n var zoom = Math.min(\n this.options.width / this.viewBox.width,\n this.options.height / this.viewBox.height\n );\n\n // Update active state\n this.activeState.zoom = zoom;\n this.activeState.x = (this.options.width - this.viewBox.width * zoom) / 2;\n this.activeState.y = (this.options.height - this.viewBox.height * zoom) / 2;\n\n // Force updating CTM\n this.updateCTMOnNextFrame();\n\n this.options.svg.removeAttribute(\"viewBox\");\n } else {\n this.simpleViewBoxCache();\n }\n};\n\n/**\n * Recalculate viewport sizes and update viewBox cache\n */\nShadowViewport.prototype.simpleViewBoxCache = function() {\n var bBox = this.viewport.getBBox();\n\n this.viewBox.x = bBox.x;\n this.viewBox.y = bBox.y;\n this.viewBox.width = bBox.width;\n this.viewBox.height = bBox.height;\n};\n\n/**\n * Returns a viewbox object. Safe to alter\n *\n * @return {Object} viewbox object\n */\nShadowViewport.prototype.getViewBox = function() {\n return Utils.extend({}, this.viewBox);\n};\n\n/**\n * Get initial zoom and pan values. Save them into originalState\n * Parses viewBox attribute to alter initial sizes\n *\n * @return {CTM} CTM object based on options\n */\nShadowViewport.prototype.processCTM = function() {\n var newCTM = this.getCTM();\n\n if (this.options.fit || this.options.contain) {\n var newScale;\n if (this.options.fit) {\n newScale = Math.min(\n this.options.width / this.viewBox.width,\n this.options.height / this.viewBox.height\n );\n } else {\n newScale = Math.max(\n this.options.width / this.viewBox.width,\n this.options.height / this.viewBox.height\n );\n }\n\n newCTM.a = newScale; //x-scale\n newCTM.d = newScale; //y-scale\n newCTM.e = -this.viewBox.x * newScale; //x-transform\n newCTM.f = -this.viewBox.y * newScale; //y-transform\n }\n\n if (this.options.center) {\n var offsetX =\n (this.options.width -\n (this.viewBox.width + this.viewBox.x * 2) * newCTM.a) *\n 0.5,\n offsetY =\n (this.options.height -\n (this.viewBox.height + this.viewBox.y * 2) * newCTM.a) *\n 0.5;\n\n newCTM.e = offsetX;\n newCTM.f = offsetY;\n }\n\n // Cache initial values. Based on activeState and fix+center opitons\n this.originalState.zoom = newCTM.a;\n this.originalState.x = newCTM.e;\n this.originalState.y = newCTM.f;\n\n return newCTM;\n};\n\n/**\n * Return originalState object. Safe to alter\n *\n * @return {Object}\n */\nShadowViewport.prototype.getOriginalState = function() {\n return Utils.extend({}, this.originalState);\n};\n\n/**\n * Return actualState object. Safe to alter\n *\n * @return {Object}\n */\nShadowViewport.prototype.getState = function() {\n return Utils.extend({}, this.activeState);\n};\n\n/**\n * Get zoom scale\n *\n * @return {Float} zoom scale\n */\nShadowViewport.prototype.getZoom = function() {\n return this.activeState.zoom;\n};\n\n/**\n * Get zoom scale for pubilc usage\n *\n * @return {Float} zoom scale\n */\nShadowViewport.prototype.getRelativeZoom = function() {\n return this.activeState.zoom / this.originalState.zoom;\n};\n\n/**\n * Compute zoom scale for pubilc usage\n *\n * @return {Float} zoom scale\n */\nShadowViewport.prototype.computeRelativeZoom = function(scale) {\n return scale / this.originalState.zoom;\n};\n\n/**\n * Get pan\n *\n * @return {Object}\n */\nShadowViewport.prototype.getPan = function() {\n return { x: this.activeState.x, y: this.activeState.y };\n};\n\n/**\n * Return cached viewport CTM value that can be safely modified\n *\n * @return {SVGMatrix}\n */\nShadowViewport.prototype.getCTM = function() {\n var safeCTM = this.options.svg.createSVGMatrix();\n\n // Copy values manually as in FF they are not itterable\n safeCTM.a = this.activeState.zoom;\n safeCTM.b = 0;\n safeCTM.c = 0;\n safeCTM.d = this.activeState.zoom;\n safeCTM.e = this.activeState.x;\n safeCTM.f = this.activeState.y;\n\n return safeCTM;\n};\n\n/**\n * Set a new CTM\n *\n * @param {SVGMatrix} newCTM\n */\nShadowViewport.prototype.setCTM = function(newCTM) {\n var willZoom = this.isZoomDifferent(newCTM),\n willPan = this.isPanDifferent(newCTM);\n\n if (willZoom || willPan) {\n // Before zoom\n if (willZoom) {\n // If returns false then cancel zooming\n if (\n this.options.beforeZoom(\n this.getRelativeZoom(),\n this.computeRelativeZoom(newCTM.a)\n ) === false\n ) {\n newCTM.a = newCTM.d = this.activeState.zoom;\n willZoom = false;\n } else {\n this.updateCache(newCTM);\n this.options.onZoom(this.getRelativeZoom());\n }\n }\n\n // Before pan\n if (willPan) {\n var preventPan = this.options.beforePan(this.getPan(), {\n x: newCTM.e,\n y: newCTM.f\n }),\n // If prevent pan is an object\n preventPanX = false,\n preventPanY = false;\n\n // If prevent pan is Boolean false\n if (preventPan === false) {\n // Set x and y same as before\n newCTM.e = this.getPan().x;\n newCTM.f = this.getPan().y;\n\n preventPanX = preventPanY = true;\n } else if (Utils.isObject(preventPan)) {\n // Check for X axes attribute\n if (preventPan.x === false) {\n // Prevent panning on x axes\n newCTM.e = this.getPan().x;\n preventPanX = true;\n } else if (Utils.isNumber(preventPan.x)) {\n // Set a custom pan value\n newCTM.e = preventPan.x;\n }\n\n // Check for Y axes attribute\n if (preventPan.y === false) {\n // Prevent panning on x axes\n newCTM.f = this.getPan().y;\n preventPanY = true;\n } else if (Utils.isNumber(preventPan.y)) {\n // Set a custom pan value\n newCTM.f = preventPan.y;\n }\n }\n\n // Update willPan flag\n // Check if newCTM is still different\n if ((preventPanX && preventPanY) || !this.isPanDifferent(newCTM)) {\n willPan = false;\n } else {\n this.updateCache(newCTM);\n this.options.onPan(this.getPan());\n }\n }\n\n // Check again if should zoom or pan\n if (willZoom || willPan) {\n this.updateCTMOnNextFrame();\n }\n }\n};\n\nShadowViewport.prototype.isZoomDifferent = function(newCTM) {\n return this.activeState.zoom !== newCTM.a;\n};\n\nShadowViewport.prototype.isPanDifferent = function(newCTM) {\n return this.activeState.x !== newCTM.e || this.activeState.y !== newCTM.f;\n};\n\n/**\n * Update cached CTM and active state\n *\n * @param {SVGMatrix} newCTM\n */\nShadowViewport.prototype.updateCache = function(newCTM) {\n this.activeState.zoom = newCTM.a;\n this.activeState.x = newCTM.e;\n this.activeState.y = newCTM.f;\n};\n\nShadowViewport.prototype.pendingUpdate = false;\n\n/**\n * Place a request to update CTM on next Frame\n */\nShadowViewport.prototype.updateCTMOnNextFrame = function() {\n if (!this.pendingUpdate) {\n // Lock\n this.pendingUpdate = true;\n\n // Throttle next update\n this.requestAnimationFrame.call(window, this.updateCTMCached);\n }\n};\n\n/**\n * Update viewport CTM with cached CTM\n */\nShadowViewport.prototype.updateCTM = function() {\n var ctm = this.getCTM();\n\n // Updates SVG element\n SvgUtils.setCTM(this.viewport, ctm, this.defs);\n\n // Free the lock\n this.pendingUpdate = false;\n\n // Notify about the update\n if (this.options.onUpdatedCTM) {\n this.options.onUpdatedCTM(ctm);\n }\n};\n\nmodule.exports = function(viewport, options) {\n return new ShadowViewport(viewport, options);\n};\n","var Wheel = require(\"./uniwheel\"),\n ControlIcons = require(\"./control-icons\"),\n Utils = require(\"./utilities\"),\n SvgUtils = require(\"./svg-utilities\"),\n ShadowViewport = require(\"./shadow-viewport\");\n\nvar SvgPanZoom = function(svg, options) {\n this.init(svg, options);\n};\n\nvar optionsDefaults = {\n viewportSelector: \".svg-pan-zoom_viewport\", // Viewport selector. Can be querySelector string or SVGElement\n panEnabled: true, // enable or disable panning (default enabled)\n controlIconsEnabled: false, // insert icons to give user an option in addition to mouse events to control pan/zoom (default disabled)\n zoomEnabled: true, // enable or disable zooming (default enabled)\n dblClickZoomEnabled: true, // enable or disable zooming by double clicking (default enabled)\n mouseWheelZoomEnabled: true, // enable or disable zooming by mouse wheel (default enabled)\n preventMouseEventsDefault: true, // enable or disable preventDefault for mouse events\n zoomScaleSensitivity: 0.1, // Zoom sensitivity\n minZoom: 0.5, // Minimum Zoom level\n maxZoom: 10, // Maximum Zoom level\n fit: true, // enable or disable viewport fit in SVG (default true)\n contain: false, // enable or disable viewport contain the svg (default false)\n center: true, // enable or disable viewport centering in SVG (default true)\n refreshRate: \"auto\", // Maximum number of frames per second (altering SVG's viewport)\n beforeZoom: null,\n onZoom: null,\n beforePan: null,\n onPan: null,\n customEventsHandler: null,\n eventsListenerElement: null,\n onUpdatedCTM: null\n};\n\nvar passiveListenerOption = { passive: true };\n\nSvgPanZoom.prototype.init = function(svg, options) {\n var that = this;\n\n this.svg = svg;\n this.defs = svg.querySelector(\"defs\");\n\n // Add default attributes to SVG\n SvgUtils.setupSvgAttributes(this.svg);\n\n // Set options\n this.options = Utils.extend(Utils.extend({}, optionsDefaults), options);\n\n // Set default state\n this.state = \"none\";\n\n // Get dimensions\n var boundingClientRectNormalized = SvgUtils.getBoundingClientRectNormalized(\n svg\n );\n this.width = boundingClientRectNormalized.width;\n this.height = boundingClientRectNormalized.height;\n\n // Init shadow viewport\n this.viewport = ShadowViewport(\n SvgUtils.getOrCreateViewport(this.svg, this.options.viewportSelector),\n {\n svg: this.svg,\n width: this.width,\n height: this.height,\n fit: this.options.fit,\n contain: this.options.contain,\n center: this.options.center,\n refreshRate: this.options.refreshRate,\n // Put callbacks into functions as they can change through time\n beforeZoom: function(oldScale, newScale) {\n if (that.viewport && that.options.beforeZoom) {\n return that.options.beforeZoom(oldScale, newScale);\n }\n },\n onZoom: function(scale) {\n if (that.viewport && that.options.onZoom) {\n return that.options.onZoom(scale);\n }\n },\n beforePan: function(oldPoint, newPoint) {\n if (that.viewport && that.options.beforePan) {\n return that.options.beforePan(oldPoint, newPoint);\n }\n },\n onPan: function(point) {\n if (that.viewport && that.options.onPan) {\n return that.options.onPan(point);\n }\n },\n onUpdatedCTM: function(ctm) {\n if (that.viewport && that.options.onUpdatedCTM) {\n return that.options.onUpdatedCTM(ctm);\n }\n }\n }\n );\n\n // Wrap callbacks into public API context\n var publicInstance = this.getPublicInstance();\n publicInstance.setBeforeZoom(this.options.beforeZoom);\n publicInstance.setOnZoom(this.options.onZoom);\n publicInstance.setBeforePan(this.options.beforePan);\n publicInstance.setOnPan(this.options.onPan);\n publicInstance.setOnUpdatedCTM(this.options.onUpdatedCTM);\n\n if (this.options.controlIconsEnabled) {\n ControlIcons.enable(this);\n }\n\n // Init events handlers\n this.lastMouseWheelEventTime = Date.now();\n this.setupHandlers();\n};\n\n/**\n * Register event handlers\n */\nSvgPanZoom.prototype.setupHandlers = function() {\n var that = this,\n prevEvt = null; // use for touchstart event to detect double tap\n\n this.eventListeners = {\n // Mouse down group\n mousedown: function(evt) {\n var result = that.handleMouseDown(evt, prevEvt);\n prevEvt = evt;\n return result;\n },\n touchstart: function(evt) {\n var result = that.handleMouseDown(evt, prevEvt);\n prevEvt = evt;\n return result;\n },\n\n // Mouse up group\n mouseup: function(evt) {\n return that.handleMouseUp(evt);\n },\n touchend: function(evt) {\n return that.handleMouseUp(evt);\n },\n\n // Mouse move group\n mousemove: function(evt) {\n return that.handleMouseMove(evt);\n },\n touchmove: function(evt) {\n return that.handleMouseMove(evt);\n },\n\n // Mouse leave group\n mouseleave: function(evt) {\n return that.handleMouseUp(evt);\n },\n touchleave: function(evt) {\n return that.handleMouseUp(evt);\n },\n touchcancel: function(evt) {\n return that.handleMouseUp(evt);\n }\n };\n\n // Init custom events handler if available\n // eslint-disable-next-line eqeqeq\n if (this.options.customEventsHandler != null) {\n this.options.customEventsHandler.init({\n svgElement: this.svg,\n eventsListenerElement: this.options.eventsListenerElement,\n instance: this.getPublicInstance()\n });\n\n // Custom event handler may halt builtin listeners\n var haltEventListeners = this.options.customEventsHandler\n .haltEventListeners;\n if (haltEventListeners && haltEventListeners.length) {\n for (var i = haltEventListeners.length - 1; i >= 0; i--) {\n if (this.eventListeners.hasOwnProperty(haltEventListeners[i])) {\n delete this.eventListeners[haltEventListeners[i]];\n }\n }\n }\n }\n\n // Bind eventListeners\n for (var event in this.eventListeners) {\n // Attach event to eventsListenerElement or SVG if not available\n (this.options.eventsListenerElement || this.svg).addEventListener(\n event,\n this.eventListeners[event],\n !this.options.preventMouseEventsDefault ? passiveListenerOption : false\n );\n }\n\n // Zoom using mouse wheel\n if (this.options.mouseWheelZoomEnabled) {\n this.options.mouseWheelZoomEnabled = false; // set to false as enable will set it back to true\n this.enableMouseWheelZoom();\n }\n};\n\n/**\n * Enable ability to zoom using mouse wheel\n */\nSvgPanZoom.prototype.enableMouseWheelZoom = function() {\n if (!this.options.mouseWheelZoomEnabled) {\n var that = this;\n\n // Mouse wheel listener\n this.wheelListener = function(evt) {\n return that.handleMouseWheel(evt);\n };\n\n // Bind wheelListener\n var isPassiveListener = !this.options.preventMouseEventsDefault;\n Wheel.on(\n this.options.eventsListenerElement || this.svg,\n this.wheelListener,\n isPassiveListener\n );\n\n this.options.mouseWheelZoomEnabled = true;\n }\n};\n\n/**\n * Disable ability to zoom using mouse wheel\n */\nSvgPanZoom.prototype.disableMouseWheelZoom = function() {\n if (this.options.mouseWheelZoomEnabled) {\n var isPassiveListener = !this.options.preventMouseEventsDefault;\n Wheel.off(\n this.options.eventsListenerElement || this.svg,\n this.wheelListener,\n isPassiveListener\n );\n this.options.mouseWheelZoomEnabled = false;\n }\n};\n\n/**\n * Handle mouse wheel event\n *\n * @param {Event} evt\n */\nSvgPanZoom.prototype.handleMouseWheel = function(evt) {\n if (!this.options.zoomEnabled || this.state !== \"none\") {\n return;\n }\n\n if (this.options.preventMouseEventsDefault) {\n if (evt.preventDefault) {\n evt.preventDefault();\n } else {\n evt.returnValue = false;\n }\n }\n\n // Default delta in case that deltaY is not available\n var delta = evt.deltaY || 1,\n timeDelta = Date.now() - this.lastMouseWheelEventTime,\n divider = 3 + Math.max(0, 30 - timeDelta);\n\n // Update cache\n this.lastMouseWheelEventTime = Date.now();\n\n // Make empirical adjustments for browsers that give deltaY in pixels (deltaMode=0)\n if (\"deltaMode\" in evt && evt.deltaMode === 0 && evt.wheelDelta) {\n delta = evt.deltaY === 0 ? 0 : Math.abs(evt.wheelDelta) / evt.deltaY;\n }\n\n delta =\n -0.3 < delta && delta < 0.3\n ? delta\n : ((delta > 0 ? 1 : -1) * Math.log(Math.abs(delta) + 10)) / divider;\n\n var inversedScreenCTM = this.svg.getScreenCTM().inverse(),\n relativeMousePoint = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(\n inversedScreenCTM\n ),\n zoom = Math.pow(1 + this.options.zoomScaleSensitivity, -1 * delta); // multiplying by neg. 1 so as to make zoom in/out behavior match Google maps behavior\n\n this.zoomAtPoint(zoom, relativeMousePoint);\n};\n\n/**\n * Zoom in at a SVG point\n *\n * @param {SVGPoint} point\n * @param {Float} zoomScale Number representing how much to zoom\n * @param {Boolean} zoomAbsolute Default false. If true, zoomScale is treated as an absolute value.\n * Otherwise, zoomScale is treated as a multiplied (e.g. 1.10 would zoom in 10%)\n */\nSvgPanZoom.prototype.zoomAtPoint = function(zoomScale, point, zoomAbsolute) {\n var originalState = this.viewport.getOriginalState();\n\n if (!zoomAbsolute) {\n // Fit zoomScale in set bounds\n if (\n this.getZoom() * zoomScale <\n this.options.minZoom * originalState.zoom\n ) {\n zoomScale = (this.options.minZoom * originalState.zoom) / this.getZoom();\n } else if (\n this.getZoom() * zoomScale >\n this.options.maxZoom * originalState.zoom\n ) {\n zoomScale = (this.options.maxZoom * originalState.zoom) / this.getZoom();\n }\n } else {\n // Fit zoomScale in set bounds\n zoomScale = Math.max(\n this.options.minZoom * originalState.zoom,\n Math.min(this.options.maxZoom * originalState.zoom, zoomScale)\n );\n // Find relative scale to achieve desired scale\n zoomScale = zoomScale / this.getZoom();\n }\n\n var oldCTM = this.viewport.getCTM(),\n relativePoint = point.matrixTransform(oldCTM.inverse()),\n modifier = this.svg\n .createSVGMatrix()\n .translate(relativePoint.x, relativePoint.y)\n .scale(zoomScale)\n .translate(-relativePoint.x, -relativePoint.y),\n newCTM = oldCTM.multiply(modifier);\n\n if (newCTM.a !== oldCTM.a) {\n this.viewport.setCTM(newCTM);\n }\n};\n\n/**\n * Zoom at center point\n *\n * @param {Float} scale\n * @param {Boolean} absolute Marks zoom scale as relative or absolute\n */\nSvgPanZoom.prototype.zoom = function(scale, absolute) {\n this.zoomAtPoint(\n scale,\n SvgUtils.getSvgCenterPoint(this.svg, this.width, this.height),\n absolute\n );\n};\n\n/**\n * Zoom used by public instance\n *\n * @param {Float} scale\n * @param {Boolean} absolute Marks zoom scale as relative or absolute\n */\nSvgPanZoom.prototype.publicZoom = function(scale, absolute) {\n if (absolute) {\n scale = this.computeFromRelativeZoom(scale);\n }\n\n this.zoom(scale, absolute);\n};\n\n/**\n * Zoom at point used by public instance\n *\n * @param {Float} scale\n * @param {SVGPoint|Object} point An object that has x and y attributes\n * @param {Boolean} absolute Marks zoom scale as relative or absolute\n */\nSvgPanZoom.prototype.publicZoomAtPoint = function(scale, point, absolute) {\n if (absolute) {\n // Transform zoom into a relative value\n scale = this.computeFromRelativeZoom(scale);\n }\n\n // If not a SVGPoint but has x and y then create a SVGPoint\n if (Utils.getType(point) !== \"SVGPoint\") {\n if (\"x\" in point && \"y\" in point) {\n point = SvgUtils.createSVGPoint(this.svg, point.x, point.y);\n } else {\n throw new Error(\"Given point is invalid\");\n }\n }\n\n this.zoomAtPoint(scale, point, absolute);\n};\n\n/**\n * Get zoom scale\n *\n * @return {Float} zoom scale\n */\nSvgPanZoom.prototype.getZoom = function() {\n return this.viewport.getZoom();\n};\n\n/**\n * Get zoom scale for public usage\n *\n * @return {Float} zoom scale\n */\nSvgPanZoom.prototype.getRelativeZoom = function() {\n return this.viewport.getRelativeZoom();\n};\n\n/**\n * Compute actual zoom from public zoom\n *\n * @param {Float} zoom\n * @return {Float} zoom scale\n */\nSvgPanZoom.prototype.computeFromRelativeZoom = function(zoom) {\n return zoom * this.viewport.getOriginalState().zoom;\n};\n\n/**\n * Set zoom to initial state\n */\nSvgPanZoom.prototype.resetZoom = function() {\n var originalState = this.viewport.getOriginalState();\n\n this.zoom(originalState.zoom, true);\n};\n\n/**\n * Set pan to initial state\n */\nSvgPanZoom.prototype.resetPan = function() {\n this.pan(this.viewport.getOriginalState());\n};\n\n/**\n * Set pan and zoom to initial state\n */\nSvgPanZoom.prototype.reset = function() {\n this.resetZoom();\n this.resetPan();\n};\n\n/**\n * Handle double click event\n * See handleMouseDown() for alternate detection method\n *\n * @param {Event} evt\n */\nSvgPanZoom.prototype.handleDblClick = function(evt) {\n if (this.options.preventMouseEventsDefault) {\n if (evt.preventDefault) {\n evt.preventDefault();\n } else {\n evt.returnValue = false;\n }\n }\n\n // Check if target was a control button\n if (this.options.controlIconsEnabled) {\n var targetClass = evt.target.getAttribute(\"class\") || \"\";\n if (targetClass.indexOf(\"svg-pan-zoom-control\") > -1) {\n return false;\n }\n }\n\n var zoomFactor;\n\n if (evt.shiftKey) {\n zoomFactor = 1 / ((1 + this.options.zoomScaleSensitivity) * 2); // zoom out when shift key pressed\n } else {\n zoomFactor = (1 + this.options.zoomScaleSensitivity) * 2;\n }\n\n var point = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(\n this.svg.getScreenCTM().inverse()\n );\n this.zoomAtPoint(zoomFactor, point);\n};\n\n/**\n * Handle click event\n *\n * @param {Event} evt\n */\nSvgPanZoom.prototype.handleMouseDown = function(evt, prevEvt) {\n if (this.options.preventMouseEventsDefault) {\n if (evt.preventDefault) {\n evt.preventDefault();\n } else {\n evt.returnValue = false;\n }\n }\n\n Utils.mouseAndTouchNormalize(evt, this.svg);\n\n // Double click detection; more consistent than ondblclick\n if (this.options.dblClickZoomEnabled && Utils.isDblClick(evt, prevEvt)) {\n this.handleDblClick(evt);\n } else {\n // Pan mode\n this.state = \"pan\";\n this.firstEventCTM = this.viewport.getCTM();\n this.stateOrigin = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(\n this.firstEventCTM.inverse()\n );\n }\n};\n\n/**\n * Handle mouse move event\n *\n * @param {Event} evt\n */\nSvgPanZoom.prototype.handleMouseMove = function(evt) {\n if (this.options.preventMouseEventsDefault) {\n if (evt.preventDefault) {\n evt.preventDefault();\n } else {\n evt.returnValue = false;\n }\n }\n\n if (this.state === \"pan\" && this.options.panEnabled) {\n // Pan mode\n var point = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(\n this.firstEventCTM.inverse()\n ),\n viewportCTM = this.firstEventCTM.translate(\n point.x - this.stateOrigin.x,\n point.y - this.stateOrigin.y\n );\n\n this.viewport.setCTM(viewportCTM);\n }\n};\n\n/**\n * Handle mouse button release event\n *\n * @param {Event} evt\n */\nSvgPanZoom.prototype.handleMouseUp = function(evt) {\n if (this.options.preventMouseEventsDefault) {\n if (evt.preventDefault) {\n evt.preventDefault();\n } else {\n evt.returnValue = false;\n }\n }\n\n if (this.state === \"pan\") {\n // Quit pan mode\n this.state = \"none\";\n }\n};\n\n/**\n * Adjust viewport size (only) so it will fit in SVG\n * Does not center image\n */\nSvgPanZoom.prototype.fit = function() {\n var viewBox = this.viewport.getViewBox(),\n newScale = Math.min(\n this.width / viewBox.width,\n this.height / viewBox.height\n );\n\n this.zoom(newScale, true);\n};\n\n/**\n * Adjust viewport size (only) so it will contain the SVG\n * Does not center image\n */\nSvgPanZoom.prototype.contain = function() {\n var viewBox = this.viewport.getViewBox(),\n newScale = Math.max(\n this.width / viewBox.width,\n this.height / viewBox.height\n );\n\n this.zoom(newScale, true);\n};\n\n/**\n * Adjust viewport pan (only) so it will be centered in SVG\n * Does not zoom/fit/contain image\n */\nSvgPanZoom.prototype.center = function() {\n var viewBox = this.viewport.getViewBox(),\n offsetX =\n (this.width - (viewBox.width + viewBox.x * 2) * this.getZoom()) * 0.5,\n offsetY =\n (this.height - (viewBox.height + viewBox.y * 2) * this.getZoom()) * 0.5;\n\n this.getPublicInstance().pan({ x: offsetX, y: offsetY });\n};\n\n/**\n * Update content cached BorderBox\n * Use when viewport contents change\n */\nSvgPanZoom.prototype.updateBBox = function() {\n this.viewport.simpleViewBoxCache();\n};\n\n/**\n * Pan to a rendered position\n *\n * @param {Object} point {x: 0, y: 0}\n */\nSvgPanZoom.prototype.pan = function(point) {\n var viewportCTM = this.viewport.getCTM();\n viewportCTM.e = point.x;\n viewportCTM.f = point.y;\n this.viewport.setCTM(viewportCTM);\n};\n\n/**\n * Relatively pan the graph by a specified rendered position vector\n *\n * @param {Object} point {x: 0, y: 0}\n */\nSvgPanZoom.prototype.panBy = function(point) {\n var viewportCTM = this.viewport.getCTM();\n viewportCTM.e += point.x;\n viewportCTM.f += point.y;\n this.viewport.setCTM(viewportCTM);\n};\n\n/**\n * Get pan vector\n *\n * @return {Object} {x: 0, y: 0}\n */\nSvgPanZoom.prototype.getPan = function() {\n var state = this.viewport.getState();\n\n return { x: state.x, y: state.y };\n};\n\n/**\n * Recalculates cached svg dimensions and controls position\n */\nSvgPanZoom.prototype.resize = function() {\n // Get dimensions\n var boundingClientRectNormalized = SvgUtils.getBoundingClientRectNormalized(\n this.svg\n );\n this.width = boundingClientRectNormalized.width;\n this.height = boundingClientRectNormalized.height;\n\n // Recalculate original state\n var viewport = this.viewport;\n viewport.options.width = this.width;\n viewport.options.height = this.height;\n viewport.processCTM();\n\n // Reposition control icons by re-enabling them\n if (this.options.controlIconsEnabled) {\n this.getPublicInstance().disableControlIcons();\n this.getPublicInstance().enableControlIcons();\n }\n};\n\n/**\n * Unbind mouse events, free callbacks and destroy public instance\n */\nSvgPanZoom.prototype.destroy = function() {\n var that = this;\n\n // Free callbacks\n this.beforeZoom = null;\n this.onZoom = null;\n this.beforePan = null;\n this.onPan = null;\n this.onUpdatedCTM = null;\n\n // Destroy custom event handlers\n // eslint-disable-next-line eqeqeq\n if (this.options.customEventsHandler != null) {\n this.options.customEventsHandler.destroy({\n svgElement: this.svg,\n eventsListenerElement: this.options.eventsListenerElement,\n instance: this.getPublicInstance()\n });\n }\n\n // Unbind eventListeners\n for (var event in this.eventListeners) {\n (this.options.eventsListenerElement || this.svg).removeEventListener(\n event,\n this.eventListeners[event],\n !this.options.preventMouseEventsDefault ? passiveListenerOption : false\n );\n }\n\n // Unbind wheelListener\n this.disableMouseWheelZoom();\n\n // Remove control icons\n this.getPublicInstance().disableControlIcons();\n\n // Reset zoom and pan\n this.reset();\n\n // Remove instance from instancesStore\n instancesStore = instancesStore.filter(function(instance) {\n return instance.svg !== that.svg;\n });\n\n // Delete options and its contents\n delete this.options;\n\n // Delete viewport to make public shadow viewport functions uncallable\n delete this.viewport;\n\n // Destroy public instance and rewrite getPublicInstance\n delete this.publicInstance;\n delete this.pi;\n this.getPublicInstance = function() {\n return null;\n };\n};\n\n/**\n * Returns a public instance object\n *\n * @return {Object} Public instance object\n */\nSvgPanZoom.prototype.getPublicInstance = function() {\n var that = this;\n\n // Create cache\n if (!this.publicInstance) {\n this.publicInstance = this.pi = {\n // Pan\n enablePan: function() {\n that.options.panEnabled = true;\n return that.pi;\n },\n disablePan: function() {\n that.options.panEnabled = false;\n return that.pi;\n },\n isPanEnabled: function() {\n return !!that.options.panEnabled;\n },\n pan: function(point) {\n that.pan(point);\n return that.pi;\n },\n panBy: function(point) {\n that.panBy(point);\n return that.pi;\n },\n getPan: function() {\n return that.getPan();\n },\n // Pan event\n setBeforePan: function(fn) {\n that.options.beforePan =\n fn === null ? null : Utils.proxy(fn, that.publicInstance);\n return that.pi;\n },\n setOnPan: function(fn) {\n that.options.onPan =\n fn === null ? null : Utils.proxy(fn, that.publicInstance);\n return that.pi;\n },\n // Zoom and Control Icons\n enableZoom: function() {\n that.options.zoomEnabled = true;\n return that.pi;\n },\n disableZoom: function() {\n that.options.zoomEnabled = false;\n return that.pi;\n },\n isZoomEnabled: function() {\n return !!that.options.zoomEnabled;\n },\n enableControlIcons: function() {\n if (!that.options.controlIconsEnabled) {\n that.options.controlIconsEnabled = true;\n ControlIcons.enable(that);\n }\n return that.pi;\n },\n disableControlIcons: function() {\n if (that.options.controlIconsEnabled) {\n that.options.controlIconsEnabled = false;\n ControlIcons.disable(that);\n }\n return that.pi;\n },\n isControlIconsEnabled: function() {\n return !!that.options.controlIconsEnabled;\n },\n // Double click zoom\n enableDblClickZoom: function() {\n that.options.dblClickZoomEnabled = true;\n return that.pi;\n },\n disableDblClickZoom: function() {\n that.options.dblClickZoomEnabled = false;\n return that.pi;\n },\n isDblClickZoomEnabled: function() {\n return !!that.options.dblClickZoomEnabled;\n },\n // Mouse wheel zoom\n enableMouseWheelZoom: function() {\n that.enableMouseWheelZoom();\n return that.pi;\n },\n disableMouseWheelZoom: function() {\n that.disableMouseWheelZoom();\n return that.pi;\n },\n isMouseWheelZoomEnabled: function() {\n return !!that.options.mouseWheelZoomEnabled;\n },\n // Zoom scale and bounds\n setZoomScaleSensitivity: function(scale) {\n that.options.zoomScaleSensitivity = scale;\n return that.pi;\n },\n setMinZoom: function(zoom) {\n that.options.minZoom = zoom;\n return that.pi;\n },\n setMaxZoom: function(zoom) {\n that.options.maxZoom = zoom;\n return that.pi;\n },\n // Zoom event\n setBeforeZoom: function(fn) {\n that.options.beforeZoom =\n fn === null ? null : Utils.proxy(fn, that.publicInstance);\n return that.pi;\n },\n setOnZoom: function(fn) {\n that.options.onZoom =\n fn === null ? null : Utils.proxy(fn, that.publicInstance);\n return that.pi;\n },\n // Zooming\n zoom: function(scale) {\n that.publicZoom(scale, true);\n return that.pi;\n },\n zoomBy: function(scale) {\n that.publicZoom(scale, false);\n return that.pi;\n },\n zoomAtPoint: function(scale, point) {\n that.publicZoomAtPoint(scale, point, true);\n return that.pi;\n },\n zoomAtPointBy: function(scale, point) {\n that.publicZoomAtPoint(scale, point, false);\n return that.pi;\n },\n zoomIn: function() {\n this.zoomBy(1 + that.options.zoomScaleSensitivity);\n return that.pi;\n },\n zoomOut: function() {\n this.zoomBy(1 / (1 + that.options.zoomScaleSensitivity));\n return that.pi;\n },\n getZoom: function() {\n return that.getRelativeZoom();\n },\n // CTM update\n setOnUpdatedCTM: function(fn) {\n that.options.onUpdatedCTM =\n fn === null ? null : Utils.proxy(fn, that.publicInstance);\n return that.pi;\n },\n // Reset\n resetZoom: function() {\n that.resetZoom();\n return that.pi;\n },\n resetPan: function() {\n that.resetPan();\n return that.pi;\n },\n reset: function() {\n that.reset();\n return that.pi;\n },\n // Fit, Contain and Center\n fit: function() {\n that.fit();\n return that.pi;\n },\n contain: function() {\n that.contain();\n return that.pi;\n },\n center: function() {\n that.center();\n return that.pi;\n },\n // Size and Resize\n updateBBox: function() {\n that.updateBBox();\n return that.pi;\n },\n resize: function() {\n that.resize();\n return that.pi;\n },\n getSizes: function() {\n return {\n width: that.width,\n height: that.height,\n realZoom: that.getZoom(),\n viewBox: that.viewport.getViewBox()\n };\n },\n // Destroy\n destroy: function() {\n that.destroy();\n return that.pi;\n }\n };\n }\n\n return this.publicInstance;\n};\n\n/**\n * Stores pairs of instances of SvgPanZoom and SVG\n * Each pair is represented by an object {svg: SVGSVGElement, instance: SvgPanZoom}\n *\n * @type {Array}\n */\nvar instancesStore = [];\n\nvar svgPanZoom = function(elementOrSelector, options) {\n var svg = Utils.getSvg(elementOrSelector);\n\n if (svg === null) {\n return null;\n } else {\n // Look for existent instance\n for (var i = instancesStore.length - 1; i >= 0; i--) {\n if (instancesStore[i].svg === svg) {\n return instancesStore[i].instance.getPublicInstance();\n }\n }\n\n // If instance not found - create one\n instancesStore.push({\n svg: svg,\n instance: new SvgPanZoom(svg, options)\n });\n\n // Return just pushed instance\n return instancesStore[\n instancesStore.length - 1\n ].instance.getPublicInstance();\n }\n};\n\nmodule.exports = svgPanZoom;\n","import svgPanZoom from 'svg-pan-zoom';\nimport debounce from '../../../assets/js/base/_debounce.js';\n\nexport class MapFeature {\n\tconstructor( node, opts = {} ) {\n\t\tthis.node = node;\n\t\tthis.country = null;\n\t\tthis.results = this.node.querySelectorAll( '.map-feature__result' );\n\t\tthis.panel = this.node.querySelector( '.map-feature__info-panel' );\n\t\tthis.panelCloser = this.node.querySelector( '.map-feature__info-panel-closer' );\n\t\tthis.controls = this.node.querySelector( '.map-feature__controls' );\n\t\tthis.controls.zoomIn = this.node.querySelector( '.map-feature__controls--zoom-in' );\n\t\tthis.controls.zoomOut = this.node.querySelector( '.map-feature__controls--zoom-out' );\n\t\tthis.facetFilter = this.node.querySelectorAll( '.map-feature__facet-filter' );\n\t\tthis.facet = this.node.querySelector('.map-feature__facet');\n\t\tthis.facetToggle = this.node.querySelector('.map-feature__facet-toggle');\n\t\tthis.inner = this.node.querySelector('.map-feature__header__inner');\n\n\t\t// handle toggling of a facet dropdown\n\t\tthis.facetToggle.addEventListener( 'click', this.toggleSelectionBox.bind(this) );\n\n\t\t// handle \"blur\" of a facet dropdown by checking outer click (capturing)\n\t\tdocument.body.addEventListener( 'click', (e) => {\n\t\t\tlet node = e.target;\n\n\t\t\twhile ( node && node.parentNode ) {\n\t\t\t\tif ( node === this.facet ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tnode = node.parentNode;\n\t\t\t}\n\n\t\t\tthis.closeSelectionBox();\n\t\t}, true );\n\n\t\t// set the country value on select change\n\t\tthis.node.addEventListener('change', (e) => {\n\t\t\tif ( e.target.matches('input[name=\"country\"]') && e.target.value ) {\n\t\t\t\tthis.setCountry( e.target.value, true );\n\t\t\t}\n\t\t});\n\n\t\t// close info panel\n\t\tthis.panelCloser.addEventListener( 'click', () => this.closePanel() );\n\n\t\tthis.map = svgPanZoom(\n\t\t\t'.svg--world',\n\t\t\t{\n\t\t\t\tcontain: true,\n\t\t\t\tdblClickZoomEnabled: true,\n\t\t\t\tmaxZoom: 10,\n\t\t\t\tminZoom: 0.5,\n\t\t\t\tmouseWheelZoomEnabled: false,\n\t\t\t\tzoomScaleSensitivity: 0.1,\n\t\t\t\tbeforePan: ( oldPan, newPan ) => {\n\t\t\t\t\t// @see https://bumbu.me/svg-pan-zoom/demo/limit-pan.html\n\t\t\t\t\tconst gutterWidth = 200;\n\t\t\t\t\tconst gutterHeight = 200;\n\t\t\t\t\tconst sizes = this.map.getSizes();\n\t\t\t\t\tconst leftLimit = -((sizes.viewBox.x + sizes.viewBox.width) * sizes.realZoom) + gutterWidth;\n\t\t\t\t\tconst rightLimit = sizes.width - gutterWidth - (sizes.viewBox.x * sizes.realZoom);\n\t\t\t\t\tconst topLimit = -((sizes.viewBox.y + sizes.viewBox.height) * sizes.realZoom) + gutterHeight;\n\t\t\t\t\tconst bottomLimit = sizes.height - gutterHeight - (sizes.viewBox.y * sizes.realZoom);\n\n\t\t\t\t\tconst customPan = {}\n\t\t\t\t\tcustomPan.x = Math.max(leftLimit, Math.min(rightLimit, newPan.x))\n\t\t\t\t\tcustomPan.y = Math.max(topLimit, Math.min(bottomLimit, newPan.y))\n\n\t\t\t\t\treturn customPan;\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\n\t\tthis.map.el = this.node.querySelector( '.map-feature__body .svg-world svg' );\n\n\t\tthis.controls.zoomIn.addEventListener('mousedown', (e) => {\n\t\t\te.preventDefault();\n\n\t\t\tthis.interval = setInterval( () => this.map.zoomBy(1.02), 5 );\n\t\t});\n\n\t\tthis.controls.zoomIn.addEventListener('mouseup', (e) => {\n\t\t\te.preventDefault()\n\n\t\t\tclearInterval( this.interval );\n\t\t});\n\n\t\tthis.controls.zoomOut.addEventListener('mousedown', (e) => {\n\t\t\te.preventDefault();\n\n\t\t\tthis.interval = setInterval( () => this.map.zoomBy(0.98), 5);\n\t\t});\n\n\t\tthis.controls.zoomOut.addEventListener('mouseup', (e) => {\n\t\t\te.preventDefault();\n\n\t\t\tclearInterval( this.interval );\n\t\t});\n\n\t\tdocument.body.addEventListener( 'resize', () => {\n\t\t\tthis.map.resize();\n\t\t\tthis.map.fit();\n\t\t});\n\n\t\tthis.map.el = this.node.querySelector( '.map-feature__body .svg-world svg' );\n\n\t\tthis.data = Array.from( this.results ).reduce( ( data, result ) => {\n\t\t\tif ( result.dataset.country ) {\n\t\t\t\tconst svg = this.map.el.querySelector( `g[id=\"${result.dataset.country}\"]` );\n\n\t\t\t\tif ( svg ) {\n\t\t\t\t\tsvg.classList.add( 'relevant' );\n\t\t\t\t\tsvg.addEventListener( 'pointerup', () => this.setCountry( result.dataset.country ) );\n\t\t\t\t}\n\n\t\t\t\tdata[ result.dataset.country ] = { result, svg };\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}, {} );\n\t}\n\n\topenPanel() {\n\t\tthis.node.classList.add( 'map-feature--open-info-panel' );\n\t\tdocument.body.classList.add( 'map-feature-open' );\n\t\tthis.closeSelectionBox();\n\t}\n\n\tremoveActive() {\n\t\tconst countries = this.map.el.querySelectorAll('g');\n\t\tcountries.forEach((g) => g.classList.remove('active') );\n\t\tthis.map.resetZoom();\n\t\tthis.map.resetPan();\n\t}\n\n\ttoggleSelectionBox() {\n\t\tthis.facet.classList.toggle( 'map-feature__facet--opened' );\n\t}\n\n\topenSelectionBox() {\n\t\tthis.facet.classList.add( 'map-feature__facet--opened' );\n\t}\n\n\tcloseSelectionBox() {\n\t\tthis.facet.classList.remove( 'map-feature__facet--opened' );\n\t}\n\n\tclosePanel() {\n\t\tthis.node.classList.remove( 'map-feature--open-info-panel' );\n\t\tdocument.body.classList.remove( 'map-feature-open' );\n\t\tthis.removeActive();\n\t\tthis.node.querySelectorAll('input[name=\"country\"]').forEach( input => input.checked = false );\n\t}\n\n\tsetCountry( country, pan = true ) {\n\t\tif ( this.country && this.data[ this.country ] ) {\n\t\t\tthis.data[ this.country ].result.hidden = true;\n\t\t\tthis.data[ this.country ].svg.classList.remove('active');\n\t\t}\n\n\t\tthis.country = country;\n\n\t\tthis.openPanel();\n\t\tthis.data[ this.country ].result.removeAttribute( 'hidden' );\n\t\tthis.data[ this.country ].svg.classList.add('active');\n\n\t\tthis.facet.classList.remove( 'map-feature__facet--opened' );\n\n\t\t// if ( pan ) {\n\t\t// \tconst nodeRect = this.node.getBoundingClientRect();\n\t\t// \tconst countryRect = this.data[ this.country ].svg.getBoundingClientRect();\n\t\t// \tconst x = ( nodeRect.width / 2 - ( countryRect.left - nodeRect.left ) ) - ( this.inner.offsetWidth / 4 );\n\t\t// \tconst y = nodeRect.height / 2 - ( countryRect.top - nodeRect.top );\n\n\t\t// \tthis.map.panBy( { x, y } );\n\t\t// \tthis.map.zoom( 2 );\n\t\t// }\n\t}\n}\n\ndocument.addEventListener( 'DOMContentLoaded', () => {\n\treturn Array.from( document.querySelectorAll('.map-feature') ).map( node => {\n\t\treturn new MapFeature( node );\n\t} )\n} );\n"],"names":["uniwheel","_addEventListener","_removeEventListener","support","prefix","fns","passiveOption","passive","_addWheelListener","elem","eventName","callback","isPassiveListener","cb","element","fn","originalEvent","window","event","target","srcElement","type","deltaMode","deltaX","delatZ","preventDefault","returnValue","deltaY","wheelDelta","wheelDeltaX","detail","push","createCallback","_removeWheelListener","i","length","getCallback","splice","removeCallback","addEventListener","document","createElement","undefined","onmousewheel","on","off","utilities","extend","source","prop","this","isObject","isElement","o","HTMLElement","SVGElement","SVGSVGElement","nodeType","nodeName","Object","prototype","toString","call","isNumber","n","isNaN","parseFloat","isFinite","getSvg","elementOrSelector","svg","String","Error","querySelector","tagName","toLowerCase","contentDocument","documentElement","getSVGDocument","proxy","context","apply","arguments","getType","replace","mouseAndTouchNormalize","evt","clientX","clientY","touches","pageX","rect","getBoundingClientRect","left","pageY","top","isDblClick","prevEvt","timeStampDiff","timeStamp","touchesDistance","Math","sqrt","pow","now","Date","getTime","throttle","func","wait","options","args","result","that","timeout","previous","later","leading","remaining","clearTimeout","trailing","setTimeout","createRequestAnimationFrame","refreshRate","floor","requestAnimationFrame","requestTimeout","Utils","require$$0","_browser","documentMode","svgUtilities","svgNS","xmlNS","xmlnsNS","xlinkNS","evNS","getBoundingClientRectNormalized","clientWidth","clientHeight","width","height","getOrCreateViewport","selector","viewport","childNodes","Array","slice","children","filter","el","getAttribute","viewportId","toISOString","createElementNS","setAttribute","svgChildren","appendChild","classNames","split","indexOf","join","setupSvgAttributes","setAttributeNS","parentNode","style","internetExplorerRedisplayInterval","refreshDefsGlobal","allDefs","querySelectorAll","allDefsCount","thisDefs","insertBefore","setCTM","matrix","defs","s","a","b","c","d","e","f","transform","getEventPoint","point","createSVGPoint","x","y","getSvgCenterPoint","SvgUtils","controlIcons","enable","instance","textContent","zoomGroup","_createZoomIn","_createZoomReset","_createZoomOut","zoomIn","getPublicInstance","zoomInBackground","zoomInShape","resetPanZoomControl","reset","resetPanZoomControlBackground","resetPanZoomControlShape1","resetPanZoomControlShape2","zoomOut","zoomOutBackground","zoomOutShape","disable","removeChild","require$$1","ShadowViewport","init","ShadowViewport$1","originalState","zoom","activeState","updateCTMCached","updateCTM","viewBox","cacheViewBox","newCTM","processCTM","svgViewBox","viewBoxValues","v","map","min","updateCTMOnNextFrame","removeAttribute","simpleViewBoxCache","bBox","getBBox","getViewBox","newScale","getCTM","fit","contain","max","center","offsetX","offsetY","getOriginalState","getState","getZoom","getRelativeZoom","computeRelativeZoom","scale","getPan","safeCTM","createSVGMatrix","willZoom","isZoomDifferent","willPan","isPanDifferent","beforeZoom","updateCache","onZoom","preventPan","beforePan","preventPanX","preventPanY","onPan","pendingUpdate","ctm","onUpdatedCTM","Wheel","ControlIcons","require$$2","require$$3","SvgPanZoom","optionsDefaults","viewportSelector","panEnabled","controlIconsEnabled","zoomEnabled","dblClickZoomEnabled","mouseWheelZoomEnabled","preventMouseEventsDefault","zoomScaleSensitivity","minZoom","maxZoom","customEventsHandler","eventsListenerElement","passiveListenerOption","SvgPanZoom$1","state","boundingClientRectNormalized","oldScale","oldPoint","newPoint","publicInstance","setBeforeZoom","setOnZoom","setBeforePan","setOnPan","setOnUpdatedCTM","lastMouseWheelEventTime","setupHandlers","eventListeners","mousedown","handleMouseDown","touchstart","mouseup","handleMouseUp","touchend","mousemove","handleMouseMove","touchmove","mouseleave","touchleave","touchcancel","svgElement","haltEventListeners","hasOwnProperty","enableMouseWheelZoom","wheelListener","handleMouseWheel","disableMouseWheelZoom","delta","timeDelta","divider","abs","log","inversedScreenCTM","getScreenCTM","inverse","relativeMousePoint","matrixTransform","zoomAtPoint","zoomScale","zoomAbsolute","oldCTM","relativePoint","modifier","translate","multiply","absolute","publicZoom","computeFromRelativeZoom","publicZoomAtPoint","resetZoom","resetPan","pan","handleDblClick","zoomFactor","shiftKey","firstEventCTM","stateOrigin","viewportCTM","updateBBox","panBy","resize","disableControlIcons","enableControlIcons","destroy","removeEventListener","instancesStore","pi","enablePan","disablePan","isPanEnabled","enableZoom","disableZoom","isZoomEnabled","isControlIconsEnabled","enableDblClickZoom","disableDblClickZoom","isDblClickZoomEnabled","isMouseWheelZoomEnabled","setZoomScaleSensitivity","setMinZoom","setMaxZoom","zoomBy","zoomAtPointBy","getSizes","realZoom","MapFeature","constructor","node","opts","country","results","panel","panelCloser","controls","facetFilter","facet","facetToggle","inner","toggleSelectionBox","bind","body","closeSelectionBox","matches","value","setCountry","closePanel","svgPanZoom","oldPan","newPan","sizes","leftLimit","rightLimit","topLimit","bottomLimit","customPan","interval","setInterval","clearInterval","data","from","reduce","dataset","classList","add","openPanel","removeActive","forEach","g","remove","toggle","openSelectionBox","input","checked","hidden"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5]}