{"version":3,"sources":["../src/scripts/lib/svg-pan-zoom.js","../src/scripts/apps/recherchepays/app.js"],"names":["e","t","n","r","s","o","u","a","require","i","f","Error","code","l","exports","call","length","1","module","svgPanZoom","window","document","define","amd","./svg-pan-zoom.js","2","SvgUtils","enable","instance","defs","svg","querySelector","createElementNS","svgNS","appendChild","styleEl","style","setAttribute","textContent","zoomGroup","width","height","this","_createZoomIn","_createZoomReset","_createZoomOut","controlIcons","zoomIn","addEventListener","getPublicInstance","zoomInBackground","zoomInShape","resetPanZoomControl","reset","resetPanZoomControlBackground","resetPanZoomControlShape1","resetPanZoomControlShape2","zoomOut","zoomOutBackground","zoomOutShape","disable","parentNode","removeChild","./svg-utilities","3","Utils","ShadowViewport","viewport","options","init","prototype","originalState","zoom","x","y","activeState","updateCTMCached","proxy","updateCTM","requestAnimationFrame","createRequestAnimationFrame","refreshRate","viewBox","cacheViewBox","newCTM","processCTM","setCTM","svgViewBox","getAttribute","viewBoxValues","split","filter","v","map","parseFloat","Math","min","updateCTMOnNextFrame","removeAttribute","simpleViewBoxCache","bBox","getBBox","getViewBox","extend","getCTM","fit","contain","newScale","max","d","center","offsetX","offsetY","getOriginalState","getState","getZoom","getRelativeZoom","computeRelativeZoom","scale","getPan","safeCTM","createSVGMatrix","b","c","willZoom","isZoomDifferent","willPan","isPanDifferent","beforeZoom","updateCache","onZoom","preventPan","beforePan","preventPanX","preventPanY","isObject","isNumber","onPan","pendingUpdate","ctm","onUpdatedCTM","./utilities","4","Wheel","ControlIcons","SvgPanZoom","optionsDefaults","viewportSelector","panEnabled","controlIconsEnabled","zoomEnabled","dblClickZoomEnabled","mouseWheelZoomEnabled","preventMouseEventsDefault","zoomScaleSensitivity","minZoom","maxZoom","customEventsHandler","eventsListenerElement","that","setupSvgAttributes","state","boundingClientRectNormalized","getBoundingClientRectNormalized","getOrCreateViewport","oldScale","oldPoint","newPoint","point","publicInstance","setBeforeZoom","setOnZoom","setBeforePan","setOnPan","setOnUpdatedCTM","lastMouseWheelEventTime","Date","now","setupHandlers","prevEvt","eventListeners","mousedown","evt","result","handleMouseDown","touchstart","mouseup","handleMouseUp","touchend","mousemove","handleMouseMove","touchmove","mouseleave","touchleave","touchcancel","svgElement","haltEventListeners","hasOwnProperty","event","enableMouseWheelZoom","wheelListener","handleMouseWheel","on","disableMouseWheelZoom","off","preventDefault","returnValue","delta","deltaY","timeDelta","divider","deltaMode","wheelDelta","abs","log","inversedScreenCTM","getScreenCTM","inverse","relativeMousePoint","getEventPoint","matrixTransform","pow","zoomAtPoint","zoomScale","zoomAbsolute","oldCTM","relativePoint","modifier","translate","multiply","absolute","getSvgCenterPoint","publicZoom","computeFromRelativeZoom","publicZoomAtPoint","getType","createSVGPoint","resetZoom","resetPan","pan","handleDblClick","targetClass","target","indexOf","zoomFactor","shiftKey","mouseAndTouchNormalize","isDblClick","firstEventCTM","stateOrigin","viewportCTM","updateBBox","panBy","resize","disableControlIcons","enableControlIcons","destroy","removeEventListener","instancesStore","pi","enablePan","disablePan","isPanEnabled","fn","enableZoom","disableZoom","isZoomEnabled","isControlIconsEnabled","enableDblClickZoom","disableDblClickZoom","isDblClickZoomEnabled","isMouseWheelZoomEnabled","setZoomScaleSensitivity","setMinZoom","setMaxZoom","zoomBy","zoomAtPointBy","getSizes","realZoom","elementOrSelector","getSvg","push","./control-icons","./shadow-viewport","./uniwheel","5","_browser","documentMode","xmlNS","xmlnsNS","xlinkNS","evNS","clientWidth","clientHeight","getBoundingClientRect","selector","isElement","childNodes","Array","slice","children","el","nodeName","viewportId","toISOString","replace","svgChildren","classNames","join","setAttributeNS","toLowerCase","internetExplorerRedisplayInterval","refreshDefsGlobal","throttle","allDefs","querySelectorAll","allDefsCount","thisDefs","insertBefore","element","matrix","transform","setTimeout","clientX","clientY","6","createCallback","callback","capture","originalEvent","srcElement","type","deltaX","delatZ","support","wheelDeltaX","detail","fns","getCallback","removeCallback","splice","_addWheelListener","elem","eventName","useCapture","cb","_addEventListener","prefix","_removeWheelListener","_removeEventListener","addWheelListener","removeWheelListener","createElement","undefined","onmousewheel","7","requestTimeout","timeout","source","prop","HTMLElement","SVGElement","SVGSVGElement","_typeof","nodeType","Object","toString","isNaN","isFinite","String","tagName","contentDocument","documentElement","getSVGDocument","context","apply","arguments","touches","pageX","rect","left","pageY","top","timeStampDiff","timeStamp","touchesDistance","sqrt","getTime","func","wait","args","previous","later","leading","remaining","clearTimeout","trailing","floor","recherchepays","navigation","activeClass","idMap","pathMap","paddingScroll","heightHeader","selectDestination","id","getElementById","location","pathname","selectedIndex","value","horizontalNav","nav","self","navLinks","concat","forEach","link","classList","remove","add","scrollIntoView","behavior","inline","activeNav","mainNavLinks","fromTop","scrollY","section","pos","loadSvgMap","pathCarte","fetch","then","response","text","innerHTML","zoomTiger","carte","pays","index","array","arrCodePays","includes","attributes","title","console","error","scrollPrevent","scrollPaddingTop","arr","helpers","isTouchDevice"],"mappings":"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","file":"static/scripts/recherchepays.js.map","sourcesContent":["// svg-pan-zoom v3.5.2\r\n// https://github.com/ariutta/svg-pan-zoom\r\n(function e(t, n, r) {\r\n\tfunction s(o, u) {\r\n\t\tif (!n[o]) {\r\n\t\t\tif (!t[o]) {\r\n\t\t\t\tvar a = typeof require == \"function\" && require;\r\n\t\t\t\tif (!u && a) return a(o, !0);\r\n\t\t\t\tif (i) return i(o, !0);\r\n\t\t\t\tvar f = new Error(\"Cannot find module '\" + o + \"'\");\r\n\t\t\t\tthrow f.code = \"MODULE_NOT_FOUND\", f\r\n\t\t\t}\r\n\t\t\tvar l = n[o] = {\r\n\t\t\t\texports: {}\r\n\t\t\t};\r\n\t\t\tt[o][0].call(l.exports, function (e) {\r\n\t\t\t\tvar n = t[o][1][e];\r\n\t\t\t\treturn s(n ? n : e)\r\n\t\t\t}, l, l.exports, e, t, n, r)\r\n\t\t}\r\n\t\treturn n[o].exports\r\n\t}\r\n\tvar i = typeof require == \"function\" && require;\r\n\tfor (var o = 0; o < r.length; o++) s(r[o]);\r\n\treturn s\r\n})({\r\n\t1: [function (require, module, exports) {\r\n\t\tvar svgPanZoom = require('./svg-pan-zoom.js');\r\n\r\n\t\t// UMD module definition\r\n\t\t(function (window, document) {\r\n\t\t\t// AMD\r\n\t\t\tif (typeof define === 'function' && define.amd) {\r\n\t\t\t\tdefine('svg-pan-zoom', function () {\r\n\t\t\t\t\treturn svgPanZoom;\r\n\t\t\t\t});\r\n\t\t\t\t// CMD\r\n\t\t\t} else if (typeof module !== 'undefined' && module.exports) {\r\n\t\t\t\tmodule.exports = svgPanZoom;\r\n\r\n\t\t\t\t// Browser\r\n\t\t\t\t// Keep exporting globally as module.exports is available because of browserify\r\n\t\t\t\twindow.svgPanZoom = svgPanZoom;\r\n\t\t\t}\r\n\t\t})(window, document)\r\n\r\n\t}, {\r\n\t\t\"./svg-pan-zoom.js\": 4\r\n\t}],\r\n\t2: [function (require, module, exports) {\r\n\t\tvar SvgUtils = require('./svg-utilities');\r\n\r\n\t\tmodule.exports = {\r\n\t\t\tenable: function (instance) {\r\n\t\t\t\t\t// Select (and create if necessary) defs\r\n\t\t\t\t\tvar defs = instance.svg.querySelector('defs')\r\n\t\t\t\t\tif (!defs) {\r\n\t\t\t\t\t\tdefs = document.createElementNS(SvgUtils.svgNS, 'defs')\r\n\t\t\t\t\t\tinstance.svg.appendChild(defs)\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Check for style element, and create it if it doesn't exist\r\n\t\t\t\t\tvar styleEl = defs.querySelector('style#svg-pan-zoom-controls-styles');\r\n\t\t\t\t\tif (!styleEl) {\r\n\t\t\t\t\t\tvar style = document.createElementNS(SvgUtils.svgNS, 'style')\r\n\t\t\t\t\t\tstyle.setAttribute('id', 'svg-pan-zoom-controls-styles')\r\n\t\t\t\t\t\tstyle.setAttribute('type', 'text/css')\r\n\t\t\t\t\t\tstyle.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; }'\r\n\t\t\t\t\t\tdefs.appendChild(style)\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Zoom Group\r\n\t\t\t\t\tvar zoomGroup = document.createElementNS(SvgUtils.svgNS, 'g');\r\n\t\t\t\t\tzoomGroup.setAttribute('id', 'svg-pan-zoom-controls');\r\n\t\t\t\t\tzoomGroup.setAttribute('transform', 'translate(' + (instance.width - 70) + ' ' + (instance.height - 76) + ') scale(0.75)');\r\n\t\t\t\t\tzoomGroup.setAttribute('class', 'svg-pan-zoom-control');\r\n\r\n\t\t\t\t\t// Control elements\r\n\t\t\t\t\tzoomGroup.appendChild(this._createZoomIn(instance))\r\n\t\t\t\t\tzoomGroup.appendChild(this._createZoomReset(instance))\r\n\t\t\t\t\tzoomGroup.appendChild(this._createZoomOut(instance))\r\n\r\n\t\t\t\t\t// Finally append created element\r\n\t\t\t\t\tinstance.svg.appendChild(zoomGroup)\r\n\r\n\t\t\t\t\t// Cache control instance\r\n\t\t\t\t\tinstance.controlIcons = zoomGroup\r\n\t\t\t\t}\r\n\r\n\t\t\t\t,\r\n\t\t\t_createZoomIn: function (instance) {\r\n\t\t\t\t\tvar zoomIn = document.createElementNS(SvgUtils.svgNS, 'g');\r\n\t\t\t\t\tzoomIn.setAttribute('id', 'svg-pan-zoom-zoom-in');\r\n\t\t\t\t\tzoomIn.setAttribute('transform', 'translate(30.5 5) scale(0.015)');\r\n\t\t\t\t\tzoomIn.setAttribute('class', 'svg-pan-zoom-control');\r\n\t\t\t\t\tzoomIn.addEventListener('click', function () {\r\n\t\t\t\t\t\tinstance.getPublicInstance().zoomIn()\r\n\t\t\t\t\t}, false)\r\n\t\t\t\t\tzoomIn.addEventListener('touchstart', function () {\r\n\t\t\t\t\t\tinstance.getPublicInstance().zoomIn()\r\n\t\t\t\t\t}, false)\r\n\r\n\t\t\t\t\tvar zoomInBackground = document.createElementNS(SvgUtils.svgNS, 'rect'); // TODO change these background space fillers to rounded rectangles so they look prettier\r\n\t\t\t\t\tzoomInBackground.setAttribute('x', '0');\r\n\t\t\t\t\tzoomInBackground.setAttribute('y', '0');\r\n\t\t\t\t\tzoomInBackground.setAttribute('width', '1500'); // larger than expected because the whole group is transformed to scale down\r\n\t\t\t\t\tzoomInBackground.setAttribute('height', '1400');\r\n\t\t\t\t\tzoomInBackground.setAttribute('class', 'svg-pan-zoom-control-background');\r\n\t\t\t\t\tzoomIn.appendChild(zoomInBackground);\r\n\r\n\t\t\t\t\tvar zoomInShape = document.createElementNS(SvgUtils.svgNS, 'path');\r\n\t\t\t\t\tzoomInShape.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');\r\n\t\t\t\t\tzoomInShape.setAttribute('class', 'svg-pan-zoom-control-element');\r\n\t\t\t\t\tzoomIn.appendChild(zoomInShape);\r\n\r\n\t\t\t\t\treturn zoomIn\r\n\t\t\t\t}\r\n\r\n\t\t\t\t,\r\n\t\t\t_createZoomReset: function (instance) {\r\n\t\t\t\t\t// reset\r\n\t\t\t\t\tvar resetPanZoomControl = document.createElementNS(SvgUtils.svgNS, 'g');\r\n\t\t\t\t\tresetPanZoomControl.setAttribute('id', 'svg-pan-zoom-reset-pan-zoom');\r\n\t\t\t\t\tresetPanZoomControl.setAttribute('transform', 'translate(5 35) scale(0.4)');\r\n\t\t\t\t\tresetPanZoomControl.setAttribute('class', 'svg-pan-zoom-control');\r\n\t\t\t\t\tresetPanZoomControl.addEventListener('click', function () {\r\n\t\t\t\t\t\tinstance.getPublicInstance().reset()\r\n\t\t\t\t\t}, false);\r\n\t\t\t\t\tresetPanZoomControl.addEventListener('touchstart', function () {\r\n\t\t\t\t\t\tinstance.getPublicInstance().reset()\r\n\t\t\t\t\t}, false);\r\n\r\n\t\t\t\t\tvar resetPanZoomControlBackground = document.createElementNS(SvgUtils.svgNS, 'rect'); // TODO change these background space fillers to rounded rectangles so they look prettier\r\n\t\t\t\t\tresetPanZoomControlBackground.setAttribute('x', '2');\r\n\t\t\t\t\tresetPanZoomControlBackground.setAttribute('y', '2');\r\n\t\t\t\t\tresetPanZoomControlBackground.setAttribute('width', '182'); // larger than expected because the whole group is transformed to scale down\r\n\t\t\t\t\tresetPanZoomControlBackground.setAttribute('height', '58');\r\n\t\t\t\t\tresetPanZoomControlBackground.setAttribute('class', 'svg-pan-zoom-control-background');\r\n\t\t\t\t\tresetPanZoomControl.appendChild(resetPanZoomControlBackground);\r\n\r\n\t\t\t\t\tvar resetPanZoomControlShape1 = document.createElementNS(SvgUtils.svgNS, 'path');\r\n\t\t\t\t\tresetPanZoomControlShape1.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');\r\n\t\t\t\t\tresetPanZoomControlShape1.setAttribute('class', 'svg-pan-zoom-control-element');\r\n\t\t\t\t\tresetPanZoomControl.appendChild(resetPanZoomControlShape1);\r\n\r\n\t\t\t\t\tvar resetPanZoomControlShape2 = document.createElementNS(SvgUtils.svgNS, 'path');\r\n\t\t\t\t\tresetPanZoomControlShape2.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');\r\n\t\t\t\t\tresetPanZoomControlShape2.setAttribute('class', 'svg-pan-zoom-control-element');\r\n\t\t\t\t\tresetPanZoomControl.appendChild(resetPanZoomControlShape2);\r\n\r\n\t\t\t\t\treturn resetPanZoomControl\r\n\t\t\t\t}\r\n\r\n\t\t\t\t,\r\n\t\t\t_createZoomOut: function (instance) {\r\n\t\t\t\t\t// zoom out\r\n\t\t\t\t\tvar zoomOut = document.createElementNS(SvgUtils.svgNS, 'g');\r\n\t\t\t\t\tzoomOut.setAttribute('id', 'svg-pan-zoom-zoom-out');\r\n\t\t\t\t\tzoomOut.setAttribute('transform', 'translate(30.5 70) scale(0.015)');\r\n\t\t\t\t\tzoomOut.setAttribute('class', 'svg-pan-zoom-control');\r\n\t\t\t\t\tzoomOut.addEventListener('click', function () {\r\n\t\t\t\t\t\tinstance.getPublicInstance().zoomOut()\r\n\t\t\t\t\t}, false);\r\n\t\t\t\t\tzoomOut.addEventListener('touchstart', function () {\r\n\t\t\t\t\t\tinstance.getPublicInstance().zoomOut()\r\n\t\t\t\t\t}, false);\r\n\r\n\t\t\t\t\tvar zoomOutBackground = document.createElementNS(SvgUtils.svgNS, 'rect'); // TODO change these background space fillers to rounded rectangles so they look prettier\r\n\t\t\t\t\tzoomOutBackground.setAttribute('x', '0');\r\n\t\t\t\t\tzoomOutBackground.setAttribute('y', '0');\r\n\t\t\t\t\tzoomOutBackground.setAttribute('width', '1500'); // larger than expected because the whole group is transformed to scale down\r\n\t\t\t\t\tzoomOutBackground.setAttribute('height', '1400');\r\n\t\t\t\t\tzoomOutBackground.setAttribute('class', 'svg-pan-zoom-control-background');\r\n\t\t\t\t\tzoomOut.appendChild(zoomOutBackground);\r\n\r\n\t\t\t\t\tvar zoomOutShape = document.createElementNS(SvgUtils.svgNS, 'path');\r\n\t\t\t\t\tzoomOutShape.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');\r\n\t\t\t\t\tzoomOutShape.setAttribute('class', 'svg-pan-zoom-control-element');\r\n\t\t\t\t\tzoomOut.appendChild(zoomOutShape);\r\n\r\n\t\t\t\t\treturn zoomOut\r\n\t\t\t\t}\r\n\r\n\t\t\t\t,\r\n\t\t\tdisable: function (instance) {\r\n\t\t\t\tif (instance.controlIcons) {\r\n\t\t\t\t\tinstance.controlIcons.parentNode.removeChild(instance.controlIcons)\r\n\t\t\t\t\tinstance.controlIcons = null\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}, {\r\n\t\t\"./svg-utilities\": 5\r\n\t}],\r\n\t3: [function (require, module, exports) {\r\n\t\tvar SvgUtils = require('./svg-utilities'),\r\n\t\t\tUtils = require('./utilities');\r\n\r\n\t\tvar ShadowViewport = function (viewport, options) {\r\n\t\t\tthis.init(viewport, options)\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Initialization\r\n\t\t *\r\n\t\t * @param {SVGElement} viewport\r\n\t\t * @param {Object} options\r\n\t\t */\r\n\t\tShadowViewport.prototype.init = function (viewport, options) {\r\n\t\t\t// DOM Elements\r\n\t\t\tthis.viewport = viewport\r\n\t\t\tthis.options = options\r\n\r\n\t\t\t// State cache\r\n\t\t\tthis.originalState = {\r\n\t\t\t\tzoom: 1,\r\n\t\t\t\tx: 0,\r\n\t\t\t\ty: 0\r\n\t\t\t}\r\n\t\t\tthis.activeState = {\r\n\t\t\t\tzoom: 1,\r\n\t\t\t\tx: 0,\r\n\t\t\t\ty: 0\r\n\t\t\t}\r\n\r\n\t\t\tthis.updateCTMCached = Utils.proxy(this.updateCTM, this)\r\n\r\n\t\t\t// Create a custom requestAnimationFrame taking in account refreshRate\r\n\t\t\tthis.requestAnimationFrame = Utils.createRequestAnimationFrame(this.options.refreshRate)\r\n\r\n\t\t\t// ViewBox\r\n\t\t\tthis.viewBox = {\r\n\t\t\t\tx: 0,\r\n\t\t\t\ty: 0,\r\n\t\t\t\twidth: 0,\r\n\t\t\t\theight: 0\r\n\t\t\t}\r\n\t\t\tthis.cacheViewBox()\r\n\r\n\t\t\t// Process CTM\r\n\t\t\tvar newCTM = this.processCTM()\r\n\r\n\t\t\t// Update viewport CTM and cache zoom and pan\r\n\t\t\tthis.setCTM(newCTM)\r\n\r\n\t\t\t// Update CTM in this frame\r\n\t\t\tthis.updateCTM()\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Cache initial viewBox value\r\n\t\t * If no viewBox is defined, then use viewport size/position instead for viewBox values\r\n\t\t */\r\n\t\tShadowViewport.prototype.cacheViewBox = function () {\r\n\t\t\tvar svgViewBox = this.options.svg.getAttribute('viewBox')\r\n\r\n\t\t\tif (svgViewBox) {\r\n\t\t\t\tvar viewBoxValues = svgViewBox.split(/[\\s\\,]/).filter(function (v) {\r\n\t\t\t\t\treturn v\r\n\t\t\t\t}).map(parseFloat)\r\n\r\n\t\t\t\t// Cache viewbox x and y offset\r\n\t\t\t\tthis.viewBox.x = viewBoxValues[0]\r\n\t\t\t\tthis.viewBox.y = viewBoxValues[1]\r\n\t\t\t\tthis.viewBox.width = viewBoxValues[2]\r\n\t\t\t\tthis.viewBox.height = viewBoxValues[3]\r\n\r\n\t\t\t\tvar zoom = Math.min(this.options.width / this.viewBox.width, this.options.height / this.viewBox.height)\r\n\r\n\t\t\t\t// Update active state\r\n\t\t\t\tthis.activeState.zoom = zoom\r\n\t\t\t\tthis.activeState.x = (this.options.width - this.viewBox.width * zoom) / 2\r\n\t\t\t\tthis.activeState.y = (this.options.height - this.viewBox.height * zoom) / 2\r\n\r\n\t\t\t\t// Force updating CTM\r\n\t\t\t\tthis.updateCTMOnNextFrame()\r\n\r\n\t\t\t\tthis.options.svg.removeAttribute('viewBox')\r\n\t\t\t} else {\r\n\t\t\t\tthis.simpleViewBoxCache()\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Recalculate viewport sizes and update viewBox cache\r\n\t\t */\r\n\t\tShadowViewport.prototype.simpleViewBoxCache = function () {\r\n\t\t\tvar bBox = this.viewport.getBBox()\r\n\r\n\t\t\tthis.viewBox.x = bBox.x\r\n\t\t\tthis.viewBox.y = bBox.y\r\n\t\t\tthis.viewBox.width = bBox.width\r\n\t\t\tthis.viewBox.height = bBox.height\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Returns a viewbox object. Safe to alter\r\n\t\t *\r\n\t\t * @return {Object} viewbox object\r\n\t\t */\r\n\t\tShadowViewport.prototype.getViewBox = function () {\r\n\t\t\treturn Utils.extend({}, this.viewBox)\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Get initial zoom and pan values. Save them into originalState\r\n\t\t * Parses viewBox attribute to alter initial sizes\r\n\t\t *\r\n\t\t * @return {CTM} CTM object based on options\r\n\t\t */\r\n\t\tShadowViewport.prototype.processCTM = function () {\r\n\t\t\tvar newCTM = this.getCTM()\r\n\r\n\t\t\tif (this.options.fit || this.options.contain) {\r\n\t\t\t\tvar newScale;\r\n\t\t\t\tif (this.options.fit) {\r\n\t\t\t\t\tnewScale = Math.min(this.options.width / this.viewBox.width, this.options.height / this.viewBox.height);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tnewScale = Math.max(this.options.width / this.viewBox.width, this.options.height / this.viewBox.height);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tnewCTM.a = newScale; //x-scale\r\n\t\t\t\tnewCTM.d = newScale; //y-scale\r\n\t\t\t\tnewCTM.e = -this.viewBox.x * newScale; //x-transform\r\n\t\t\t\tnewCTM.f = -this.viewBox.y * newScale; //y-transform\r\n\t\t\t}\r\n\r\n\t\t\tif (this.options.center) {\r\n\t\t\t\tvar offsetX = (this.options.width - (this.viewBox.width + this.viewBox.x * 2) * newCTM.a) * 0.5,\r\n\t\t\t\t\toffsetY = (this.options.height - (this.viewBox.height + this.viewBox.y * 2) * newCTM.a) * 0.5\r\n\r\n\t\t\t\tnewCTM.e = offsetX\r\n\t\t\t\tnewCTM.f = offsetY\r\n\t\t\t}\r\n\r\n\t\t\t// Cache initial values. Based on activeState and fix+center opitons\r\n\t\t\tthis.originalState.zoom = newCTM.a\r\n\t\t\tthis.originalState.x = newCTM.e\r\n\t\t\tthis.originalState.y = newCTM.f\r\n\r\n\t\t\treturn newCTM\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Return originalState object. Safe to alter\r\n\t\t *\r\n\t\t * @return {Object}\r\n\t\t */\r\n\t\tShadowViewport.prototype.getOriginalState = function () {\r\n\t\t\treturn Utils.extend({}, this.originalState)\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Return actualState object. Safe to alter\r\n\t\t *\r\n\t\t * @return {Object}\r\n\t\t */\r\n\t\tShadowViewport.prototype.getState = function () {\r\n\t\t\treturn Utils.extend({}, this.activeState)\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Get zoom scale\r\n\t\t *\r\n\t\t * @return {Float} zoom scale\r\n\t\t */\r\n\t\tShadowViewport.prototype.getZoom = function () {\r\n\t\t\treturn this.activeState.zoom\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Get zoom scale for pubilc usage\r\n\t\t *\r\n\t\t * @return {Float} zoom scale\r\n\t\t */\r\n\t\tShadowViewport.prototype.getRelativeZoom = function () {\r\n\t\t\treturn this.activeState.zoom / this.originalState.zoom\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Compute zoom scale for pubilc usage\r\n\t\t *\r\n\t\t * @return {Float} zoom scale\r\n\t\t */\r\n\t\tShadowViewport.prototype.computeRelativeZoom = function (scale) {\r\n\t\t\treturn scale / this.originalState.zoom\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Get pan\r\n\t\t *\r\n\t\t * @return {Object}\r\n\t\t */\r\n\t\tShadowViewport.prototype.getPan = function () {\r\n\t\t\treturn {\r\n\t\t\t\tx: this.activeState.x,\r\n\t\t\t\ty: this.activeState.y\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Return cached viewport CTM value that can be safely modified\r\n\t\t *\r\n\t\t * @return {SVGMatrix}\r\n\t\t */\r\n\t\tShadowViewport.prototype.getCTM = function () {\r\n\t\t\tvar safeCTM = this.options.svg.createSVGMatrix()\r\n\r\n\t\t\t// Copy values manually as in FF they are not itterable\r\n\t\t\tsafeCTM.a = this.activeState.zoom\r\n\t\t\tsafeCTM.b = 0\r\n\t\t\tsafeCTM.c = 0\r\n\t\t\tsafeCTM.d = this.activeState.zoom\r\n\t\t\tsafeCTM.e = this.activeState.x\r\n\t\t\tsafeCTM.f = this.activeState.y\r\n\r\n\t\t\treturn safeCTM\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Set a new CTM\r\n\t\t *\r\n\t\t * @param {SVGMatrix} newCTM\r\n\t\t */\r\n\t\tShadowViewport.prototype.setCTM = function (newCTM) {\r\n\t\t\tvar willZoom = this.isZoomDifferent(newCTM),\r\n\t\t\t\twillPan = this.isPanDifferent(newCTM)\r\n\r\n\t\t\tif (willZoom || willPan) {\r\n\t\t\t\t// Before zoom\r\n\t\t\t\tif (willZoom) {\r\n\t\t\t\t\t// If returns false then cancel zooming\r\n\t\t\t\t\tif (this.options.beforeZoom(this.getRelativeZoom(), this.computeRelativeZoom(newCTM.a)) === false) {\r\n\t\t\t\t\t\tnewCTM.a = newCTM.d = this.activeState.zoom\r\n\t\t\t\t\t\twillZoom = false\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.updateCache(newCTM);\r\n\t\t\t\t\t\tthis.options.onZoom(this.getRelativeZoom())\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Before pan\r\n\t\t\t\tif (willPan) {\r\n\t\t\t\t\tvar preventPan = this.options.beforePan(this.getPan(), {\r\n\t\t\t\t\t\t\tx: newCTM.e,\r\n\t\t\t\t\t\t\ty: newCTM.f\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t\t// If prevent pan is an object\r\n\t\t\t\t\t\t,\r\n\t\t\t\t\t\tpreventPanX = false,\r\n\t\t\t\t\t\tpreventPanY = false\r\n\r\n\t\t\t\t\t// If prevent pan is Boolean false\r\n\t\t\t\t\tif (preventPan === false) {\r\n\t\t\t\t\t\t// Set x and y same as before\r\n\t\t\t\t\t\tnewCTM.e = this.getPan().x\r\n\t\t\t\t\t\tnewCTM.f = this.getPan().y\r\n\r\n\t\t\t\t\t\tpreventPanX = preventPanY = true\r\n\t\t\t\t\t} else if (Utils.isObject(preventPan)) {\r\n\t\t\t\t\t\t// Check for X axes attribute\r\n\t\t\t\t\t\tif (preventPan.x === false) {\r\n\t\t\t\t\t\t\t// Prevent panning on x axes\r\n\t\t\t\t\t\t\tnewCTM.e = this.getPan().x\r\n\t\t\t\t\t\t\tpreventPanX = true\r\n\t\t\t\t\t\t} else if (Utils.isNumber(preventPan.x)) {\r\n\t\t\t\t\t\t\t// Set a custom pan value\r\n\t\t\t\t\t\t\tnewCTM.e = preventPan.x\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Check for Y axes attribute\r\n\t\t\t\t\t\tif (preventPan.y === false) {\r\n\t\t\t\t\t\t\t// Prevent panning on x axes\r\n\t\t\t\t\t\t\tnewCTM.f = this.getPan().y\r\n\t\t\t\t\t\t\tpreventPanY = true\r\n\t\t\t\t\t\t} else if (Utils.isNumber(preventPan.y)) {\r\n\t\t\t\t\t\t\t// Set a custom pan value\r\n\t\t\t\t\t\t\tnewCTM.f = preventPan.y\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Update willPan flag\r\n\t\t\t\t\t// Check if newCTM is still different\r\n\t\t\t\t\tif ((preventPanX && preventPanY) || !this.isPanDifferent(newCTM)) {\r\n\t\t\t\t\t\twillPan = false\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.updateCache(newCTM);\r\n\t\t\t\t\t\tthis.options.onPan(this.getPan());\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Check again if should zoom or pan\r\n\t\t\t\tif (willZoom || willPan) {\r\n\t\t\t\t\tthis.updateCTMOnNextFrame()\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tShadowViewport.prototype.isZoomDifferent = function (newCTM) {\r\n\t\t\treturn this.activeState.zoom !== newCTM.a\r\n\t\t}\r\n\r\n\t\tShadowViewport.prototype.isPanDifferent = function (newCTM) {\r\n\t\t\treturn this.activeState.x !== newCTM.e || this.activeState.y !== newCTM.f\r\n\t\t}\r\n\r\n\r\n\t\t/**\r\n\t\t * Update cached CTM and active state\r\n\t\t *\r\n\t\t * @param {SVGMatrix} newCTM\r\n\t\t */\r\n\t\tShadowViewport.prototype.updateCache = function (newCTM) {\r\n\t\t\tthis.activeState.zoom = newCTM.a\r\n\t\t\tthis.activeState.x = newCTM.e\r\n\t\t\tthis.activeState.y = newCTM.f\r\n\t\t}\r\n\r\n\t\tShadowViewport.prototype.pendingUpdate = false\r\n\r\n\t\t/**\r\n\t\t * Place a request to update CTM on next Frame\r\n\t\t */\r\n\t\tShadowViewport.prototype.updateCTMOnNextFrame = function () {\r\n\t\t\tif (!this.pendingUpdate) {\r\n\t\t\t\t// Lock\r\n\t\t\t\tthis.pendingUpdate = true\r\n\r\n\t\t\t\t// Throttle next update\r\n\t\t\t\tthis.requestAnimationFrame.call(window, this.updateCTMCached)\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Update viewport CTM with cached CTM\r\n\t\t */\r\n\t\tShadowViewport.prototype.updateCTM = function () {\r\n\t\t\tvar ctm = this.getCTM()\r\n\r\n\t\t\t// Updates SVG element\r\n\t\t\tSvgUtils.setCTM(this.viewport, ctm, this.defs)\r\n\r\n\t\t\t// Free the lock\r\n\t\t\tthis.pendingUpdate = false\r\n\r\n\t\t\t// Notify about the update\r\n\t\t\tif (this.options.onUpdatedCTM) {\r\n\t\t\t\tthis.options.onUpdatedCTM(ctm)\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tmodule.exports = function (viewport, options) {\r\n\t\t\treturn new ShadowViewport(viewport, options)\r\n\t\t}\r\n\r\n\t}, {\r\n\t\t\"./svg-utilities\": 5,\r\n\t\t\"./utilities\": 7\r\n\t}],\r\n\t4: [function (require, module, exports) {\r\n\t\tvar Wheel = require('./uniwheel'),\r\n\t\t\tControlIcons = require('./control-icons'),\r\n\t\t\tUtils = require('./utilities'),\r\n\t\t\tSvgUtils = require('./svg-utilities'),\r\n\t\t\tShadowViewport = require('./shadow-viewport')\r\n\r\n\t\tvar SvgPanZoom = function (svg, options) {\r\n\t\t\tthis.init(svg, options)\r\n\t\t}\r\n\r\n\t\tvar optionsDefaults = {\r\n\t\t\tviewportSelector: '.svg-pan-zoom_viewport' // Viewport selector. Can be querySelector string or SVGElement\r\n\t\t\t\t,\r\n\t\t\tpanEnabled: true // enable or disable panning (default enabled)\r\n\t\t\t\t,\r\n\t\t\tcontrolIconsEnabled: false // insert icons to give user an option in addition to mouse events to control pan/zoom (default disabled)\r\n\t\t\t\t,\r\n\t\t\tzoomEnabled: true // enable or disable zooming (default enabled)\r\n\t\t\t\t,\r\n\t\t\tdblClickZoomEnabled: true // enable or disable zooming by double clicking (default enabled)\r\n\t\t\t\t,\r\n\t\t\tmouseWheelZoomEnabled: true // enable or disable zooming by mouse wheel (default enabled)\r\n\t\t\t\t,\r\n\t\t\tpreventMouseEventsDefault: true // enable or disable preventDefault for mouse events\r\n\t\t\t\t,\r\n\t\t\tzoomScaleSensitivity: 0.1 // Zoom sensitivity\r\n\t\t\t\t,\r\n\t\t\tminZoom: 0.5 // Minimum Zoom level\r\n\t\t\t\t,\r\n\t\t\tmaxZoom: 10 // Maximum Zoom level\r\n\t\t\t\t,\r\n\t\t\tfit: true // enable or disable viewport fit in SVG (default true)\r\n\t\t\t\t,\r\n\t\t\tcontain: false // enable or disable viewport contain the svg (default false)\r\n\t\t\t\t,\r\n\t\t\tcenter: true // enable or disable viewport centering in SVG (default true)\r\n\t\t\t\t,\r\n\t\t\trefreshRate: 'auto' // Maximum number of frames per second (altering SVG's viewport)\r\n\t\t\t\t,\r\n\t\t\tbeforeZoom: null,\r\n\t\t\tonZoom: null,\r\n\t\t\tbeforePan: null,\r\n\t\t\tonPan: null,\r\n\t\t\tcustomEventsHandler: null,\r\n\t\t\teventsListenerElement: null,\r\n\t\t\tonUpdatedCTM: null\r\n\t\t}\r\n\r\n\t\tSvgPanZoom.prototype.init = function (svg, options) {\r\n\t\t\tvar that = this\r\n\r\n\t\t\tthis.svg = svg\r\n\t\t\tthis.defs = svg.querySelector('defs')\r\n\r\n\t\t\t// Add default attributes to SVG\r\n\t\t\tSvgUtils.setupSvgAttributes(this.svg)\r\n\r\n\t\t\t// Set options\r\n\t\t\tthis.options = Utils.extend(Utils.extend({}, optionsDefaults), options)\r\n\r\n\t\t\t// Set default state\r\n\t\t\tthis.state = 'none'\r\n\r\n\t\t\t// Get dimensions\r\n\t\t\tvar boundingClientRectNormalized = SvgUtils.getBoundingClientRectNormalized(svg)\r\n\t\t\tthis.width = boundingClientRectNormalized.width\r\n\t\t\tthis.height = boundingClientRectNormalized.height\r\n\r\n\t\t\t// Init shadow viewport\r\n\t\t\tthis.viewport = ShadowViewport(SvgUtils.getOrCreateViewport(this.svg, this.options.viewportSelector), {\r\n\t\t\t\tsvg: this.svg,\r\n\t\t\t\twidth: this.width,\r\n\t\t\t\theight: this.height,\r\n\t\t\t\tfit: this.options.fit,\r\n\t\t\t\tcontain: this.options.contain,\r\n\t\t\t\tcenter: this.options.center,\r\n\t\t\t\trefreshRate: this.options.refreshRate\r\n\t\t\t\t\t// Put callbacks into functions as they can change through time\r\n\t\t\t\t\t,\r\n\t\t\t\tbeforeZoom: function (oldScale, newScale) {\r\n\t\t\t\t\tif (that.viewport && that.options.beforeZoom) {\r\n\t\t\t\t\t\treturn that.options.beforeZoom(oldScale, newScale)\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tonZoom: function (scale) {\r\n\t\t\t\t\tif (that.viewport && that.options.onZoom) {\r\n\t\t\t\t\t\treturn that.options.onZoom(scale)\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tbeforePan: function (oldPoint, newPoint) {\r\n\t\t\t\t\tif (that.viewport && that.options.beforePan) {\r\n\t\t\t\t\t\treturn that.options.beforePan(oldPoint, newPoint)\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tonPan: function (point) {\r\n\t\t\t\t\tif (that.viewport && that.options.onPan) {\r\n\t\t\t\t\t\treturn that.options.onPan(point)\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tonUpdatedCTM: function (ctm) {\r\n\t\t\t\t\tif (that.viewport && that.options.onUpdatedCTM) {\r\n\t\t\t\t\t\treturn that.options.onUpdatedCTM(ctm)\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t})\r\n\r\n\t\t\t// Wrap callbacks into public API context\r\n\t\t\tvar publicInstance = this.getPublicInstance()\r\n\t\t\tpublicInstance.setBeforeZoom(this.options.beforeZoom)\r\n\t\t\tpublicInstance.setOnZoom(this.options.onZoom)\r\n\t\t\tpublicInstance.setBeforePan(this.options.beforePan)\r\n\t\t\tpublicInstance.setOnPan(this.options.onPan)\r\n\t\t\tpublicInstance.setOnUpdatedCTM(this.options.onUpdatedCTM)\r\n\r\n\t\t\tif (this.options.controlIconsEnabled) {\r\n\t\t\t\tControlIcons.enable(this)\r\n\t\t\t}\r\n\r\n\t\t\t// Init events handlers\r\n\t\t\tthis.lastMouseWheelEventTime = Date.now()\r\n\t\t\tthis.setupHandlers()\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Register event handlers\r\n\t\t */\r\n\t\tSvgPanZoom.prototype.setupHandlers = function () {\r\n\t\t\tvar that = this,\r\n\t\t\t\tprevEvt = null // use for touchstart event to detect double tap\r\n\t\t\t;\r\n\r\n\t\t\tthis.eventListeners = {\r\n\t\t\t\t// Mouse down group\r\n\t\t\t\tmousedown: function (evt) {\r\n\t\t\t\t\tvar result = that.handleMouseDown(evt, prevEvt);\r\n\t\t\t\t\tprevEvt = evt\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t},\r\n\t\t\t\ttouchstart: function (evt) {\r\n\t\t\t\t\t\tvar result = that.handleMouseDown(evt, prevEvt);\r\n\t\t\t\t\t\tprevEvt = evt\r\n\t\t\t\t\t\treturn result;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Mouse up group\r\n\t\t\t\t\t,\r\n\t\t\t\tmouseup: function (evt) {\r\n\t\t\t\t\treturn that.handleMouseUp(evt);\r\n\t\t\t\t},\r\n\t\t\t\ttouchend: function (evt) {\r\n\t\t\t\t\t\treturn that.handleMouseUp(evt);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Mouse move group\r\n\t\t\t\t\t,\r\n\t\t\t\tmousemove: function (evt) {\r\n\t\t\t\t\treturn that.handleMouseMove(evt);\r\n\t\t\t\t},\r\n\t\t\t\ttouchmove: function (evt) {\r\n\t\t\t\t\t\treturn that.handleMouseMove(evt);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Mouse leave group\r\n\t\t\t\t\t,\r\n\t\t\t\tmouseleave: function (evt) {\r\n\t\t\t\t\treturn that.handleMouseUp(evt);\r\n\t\t\t\t},\r\n\t\t\t\ttouchleave: function (evt) {\r\n\t\t\t\t\treturn that.handleMouseUp(evt);\r\n\t\t\t\t},\r\n\t\t\t\ttouchcancel: function (evt) {\r\n\t\t\t\t\treturn that.handleMouseUp(evt);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Init custom events handler if available\r\n\t\t\tif (this.options.customEventsHandler != null) { // jshint ignore:line\r\n\t\t\t\tthis.options.customEventsHandler.init({\r\n\t\t\t\t\tsvgElement: this.svg,\r\n\t\t\t\t\teventsListenerElement: this.options.eventsListenerElement,\r\n\t\t\t\t\tinstance: this.getPublicInstance()\r\n\t\t\t\t})\r\n\r\n\t\t\t\t// Custom event handler may halt builtin listeners\r\n\t\t\t\tvar haltEventListeners = this.options.customEventsHandler.haltEventListeners\r\n\t\t\t\tif (haltEventListeners && haltEventListeners.length) {\r\n\t\t\t\t\tfor (var i = haltEventListeners.length - 1; i >= 0; i--) {\r\n\t\t\t\t\t\tif (this.eventListeners.hasOwnProperty(haltEventListeners[i])) {\r\n\t\t\t\t\t\t\tdelete this.eventListeners[haltEventListeners[i]]\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Bind eventListeners\r\n\t\t\tfor (var event in this.eventListeners) {\r\n\t\t\t\t// Attach event to eventsListenerElement or SVG if not available\r\n\t\t\t\t(this.options.eventsListenerElement || this.svg)\r\n\t\t\t\t.addEventListener(event, this.eventListeners[event], false)\r\n\t\t\t}\r\n\r\n\t\t\t// Zoom using mouse wheel\r\n\t\t\tif (this.options.mouseWheelZoomEnabled) {\r\n\t\t\t\tthis.options.mouseWheelZoomEnabled = false // set to false as enable will set it back to true\r\n\t\t\t\tthis.enableMouseWheelZoom()\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Enable ability to zoom using mouse wheel\r\n\t\t */\r\n\t\tSvgPanZoom.prototype.enableMouseWheelZoom = function () {\r\n\t\t\tif (!this.options.mouseWheelZoomEnabled) {\r\n\t\t\t\tvar that = this\r\n\r\n\t\t\t\t// Mouse wheel listener\r\n\t\t\t\tthis.wheelListener = function (evt) {\r\n\t\t\t\t\treturn that.handleMouseWheel(evt);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Bind wheelListener\r\n\t\t\t\tWheel.on(this.options.eventsListenerElement || this.svg, this.wheelListener, false)\r\n\r\n\t\t\t\tthis.options.mouseWheelZoomEnabled = true\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Disable ability to zoom using mouse wheel\r\n\t\t */\r\n\t\tSvgPanZoom.prototype.disableMouseWheelZoom = function () {\r\n\t\t\tif (this.options.mouseWheelZoomEnabled) {\r\n\t\t\t\tWheel.off(this.options.eventsListenerElement || this.svg, this.wheelListener, false)\r\n\t\t\t\tthis.options.mouseWheelZoomEnabled = false\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Handle mouse wheel event\r\n\t\t *\r\n\t\t * @param {Event} evt\r\n\t\t */\r\n\t\tSvgPanZoom.prototype.handleMouseWheel = function (evt) {\r\n\t\t\tif (!this.options.zoomEnabled || this.state !== 'none') {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.options.preventMouseEventsDefault) {\r\n\t\t\t\tif (evt.preventDefault) {\r\n\t\t\t\t\tevt.preventDefault();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tevt.returnValue = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Default delta in case that deltaY is not available\r\n\t\t\tvar delta = evt.deltaY || 1,\r\n\t\t\t\ttimeDelta = Date.now() - this.lastMouseWheelEventTime,\r\n\t\t\t\tdivider = 3 + Math.max(0, 30 - timeDelta)\r\n\r\n\t\t\t// Update cache\r\n\t\t\tthis.lastMouseWheelEventTime = Date.now()\r\n\r\n\t\t\t// Make empirical adjustments for browsers that give deltaY in pixels (deltaMode=0)\r\n\t\t\tif ('deltaMode' in evt && evt.deltaMode === 0 && evt.wheelDelta) {\r\n\t\t\t\tdelta = evt.deltaY === 0 ? 0 : Math.abs(evt.wheelDelta) / evt.deltaY\r\n\t\t\t}\r\n\r\n\t\t\tdelta = -0.3 < delta && delta < 0.3 ? delta : (delta > 0 ? 1 : -1) * Math.log(Math.abs(delta) + 10) / divider\r\n\r\n\t\t\tvar inversedScreenCTM = this.svg.getScreenCTM().inverse(),\r\n\t\t\t\trelativeMousePoint = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(inversedScreenCTM),\r\n\t\t\t\tzoom = Math.pow(1 + this.options.zoomScaleSensitivity, (-1) * delta); // multiplying by neg. 1 so as to make zoom in/out behavior match Google maps behavior\r\n\r\n\t\t\tthis.zoomAtPoint(zoom, relativeMousePoint)\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Zoom in at a SVG point\r\n\t\t *\r\n\t\t * @param {SVGPoint} point\r\n\t\t * @param {Float} zoomScale Number representing how much to zoom\r\n\t\t * @param {Boolean} zoomAbsolute Default false. If true, zoomScale is treated as an absolute value.\r\n\t\t * Otherwise, zoomScale is treated as a multiplied (e.g. 1.10 would zoom in 10%)\r\n\t\t */\r\n\t\tSvgPanZoom.prototype.zoomAtPoint = function (zoomScale, point, zoomAbsolute) {\r\n\t\t\tvar originalState = this.viewport.getOriginalState()\r\n\r\n\t\t\tif (!zoomAbsolute) {\r\n\t\t\t\t// Fit zoomScale in set bounds\r\n\t\t\t\tif (this.getZoom() * zoomScale < this.options.minZoom * originalState.zoom) {\r\n\t\t\t\t\tzoomScale = (this.options.minZoom * originalState.zoom) / this.getZoom()\r\n\t\t\t\t} else if (this.getZoom() * zoomScale > this.options.maxZoom * originalState.zoom) {\r\n\t\t\t\t\tzoomScale = (this.options.maxZoom * originalState.zoom) / this.getZoom()\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\t// Fit zoomScale in set bounds\r\n\t\t\t\tzoomScale = Math.max(this.options.minZoom * originalState.zoom, Math.min(this.options.maxZoom * originalState.zoom, zoomScale))\r\n\t\t\t\t// Find relative scale to achieve desired scale\r\n\t\t\t\tzoomScale = zoomScale / this.getZoom()\r\n\t\t\t}\r\n\r\n\t\t\tvar oldCTM = this.viewport.getCTM(),\r\n\t\t\t\trelativePoint = point.matrixTransform(oldCTM.inverse()),\r\n\t\t\t\tmodifier = this.svg.createSVGMatrix().translate(relativePoint.x, relativePoint.y).scale(zoomScale).translate(-relativePoint.x, -relativePoint.y),\r\n\t\t\t\tnewCTM = oldCTM.multiply(modifier)\r\n\r\n\t\t\tif (newCTM.a !== oldCTM.a) {\r\n\t\t\t\tthis.viewport.setCTM(newCTM)\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Zoom at center point\r\n\t\t *\r\n\t\t * @param {Float} scale\r\n\t\t * @param {Boolean} absolute Marks zoom scale as relative or absolute\r\n\t\t */\r\n\t\tSvgPanZoom.prototype.zoom = function (scale, absolute) {\r\n\t\t\tthis.zoomAtPoint(scale, SvgUtils.getSvgCenterPoint(this.svg, this.width, this.height), absolute)\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Zoom used by public instance\r\n\t\t *\r\n\t\t * @param {Float} scale\r\n\t\t * @param {Boolean} absolute Marks zoom scale as relative or absolute\r\n\t\t */\r\n\t\tSvgPanZoom.prototype.publicZoom = function (scale, absolute) {\r\n\t\t\tif (absolute) {\r\n\t\t\t\tscale = this.computeFromRelativeZoom(scale)\r\n\t\t\t}\r\n\r\n\t\t\tthis.zoom(scale, absolute)\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Zoom at point used by public instance\r\n\t\t *\r\n\t\t * @param {Float} scale\r\n\t\t * @param {SVGPoint|Object} point An object that has x and y attributes\r\n\t\t * @param {Boolean} absolute Marks zoom scale as relative or absolute\r\n\t\t */\r\n\t\tSvgPanZoom.prototype.publicZoomAtPoint = function (scale, point, absolute) {\r\n\t\t\tif (absolute) {\r\n\t\t\t\t// Transform zoom into a relative value\r\n\t\t\t\tscale = this.computeFromRelativeZoom(scale)\r\n\t\t\t}\r\n\r\n\t\t\t// If not a SVGPoint but has x and y then create a SVGPoint\r\n\t\t\tif (Utils.getType(point) !== 'SVGPoint') {\r\n\t\t\t\tif ('x' in point && 'y' in point) {\r\n\t\t\t\t\tpoint = SvgUtils.createSVGPoint(this.svg, point.x, point.y)\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthrow new Error('Given point is invalid')\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.zoomAtPoint(scale, point, absolute)\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Get zoom scale\r\n\t\t *\r\n\t\t * @return {Float} zoom scale\r\n\t\t */\r\n\t\tSvgPanZoom.prototype.getZoom = function () {\r\n\t\t\treturn this.viewport.getZoom()\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Get zoom scale for public usage\r\n\t\t *\r\n\t\t * @return {Float} zoom scale\r\n\t\t */\r\n\t\tSvgPanZoom.prototype.getRelativeZoom = function () {\r\n\t\t\treturn this.viewport.getRelativeZoom()\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Compute actual zoom from public zoom\r\n\t\t *\r\n\t\t * @param {Float} zoom\r\n\t\t * @return {Float} zoom scale\r\n\t\t */\r\n\t\tSvgPanZoom.prototype.computeFromRelativeZoom = function (zoom) {\r\n\t\t\treturn zoom * this.viewport.getOriginalState().zoom\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Set zoom to initial state\r\n\t\t */\r\n\t\tSvgPanZoom.prototype.resetZoom = function () {\r\n\t\t\tvar originalState = this.viewport.getOriginalState()\r\n\r\n\t\t\tthis.zoom(originalState.zoom, true);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Set pan to initial state\r\n\t\t */\r\n\t\tSvgPanZoom.prototype.resetPan = function () {\r\n\t\t\tthis.pan(this.viewport.getOriginalState());\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Set pan and zoom to initial state\r\n\t\t */\r\n\t\tSvgPanZoom.prototype.reset = function () {\r\n\t\t\tthis.resetZoom()\r\n\t\t\tthis.resetPan()\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Handle double click event\r\n\t\t * See handleMouseDown() for alternate detection method\r\n\t\t *\r\n\t\t * @param {Event} evt\r\n\t\t */\r\n\t\tSvgPanZoom.prototype.handleDblClick = function (evt) {\r\n\t\t\tif (this.options.preventMouseEventsDefault) {\r\n\t\t\t\tif (evt.preventDefault) {\r\n\t\t\t\t\tevt.preventDefault()\r\n\t\t\t\t} else {\r\n\t\t\t\t\tevt.returnValue = false\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Check if target was a control button\r\n\t\t\tif (this.options.controlIconsEnabled) {\r\n\t\t\t\tvar targetClass = evt.target.getAttribute('class') || ''\r\n\t\t\t\tif (targetClass.indexOf('svg-pan-zoom-control') > -1) {\r\n\t\t\t\t\treturn false\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar zoomFactor\r\n\r\n\t\t\tif (evt.shiftKey) {\r\n\t\t\t\tzoomFactor = 1 / ((1 + this.options.zoomScaleSensitivity) * 2) // zoom out when shift key pressed\r\n\t\t\t} else {\r\n\t\t\t\tzoomFactor = (1 + this.options.zoomScaleSensitivity) * 2\r\n\t\t\t}\r\n\r\n\t\t\tvar point = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(this.svg.getScreenCTM().inverse())\r\n\t\t\tthis.zoomAtPoint(zoomFactor, point)\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Handle click event\r\n\t\t *\r\n\t\t * @param {Event} evt\r\n\t\t */\r\n\t\tSvgPanZoom.prototype.handleMouseDown = function (evt, prevEvt) {\r\n\t\t\tif (this.options.preventMouseEventsDefault) {\r\n\t\t\t\tif (evt.preventDefault) {\r\n\t\t\t\t\tevt.preventDefault()\r\n\t\t\t\t} else {\r\n\t\t\t\t\tevt.returnValue = false\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tUtils.mouseAndTouchNormalize(evt, this.svg)\r\n\r\n\t\t\t// Double click detection; more consistent than ondblclick\r\n\t\t\tif (this.options.dblClickZoomEnabled && Utils.isDblClick(evt, prevEvt)) {\r\n\t\t\t\tthis.handleDblClick(evt)\r\n\t\t\t} else {\r\n\t\t\t\t// Pan mode\r\n\t\t\t\tthis.state = 'pan'\r\n\t\t\t\tthis.firstEventCTM = this.viewport.getCTM()\r\n\t\t\t\tthis.stateOrigin = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(this.firstEventCTM.inverse())\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Handle mouse move event\r\n\t\t *\r\n\t\t * @param {Event} evt\r\n\t\t */\r\n\t\tSvgPanZoom.prototype.handleMouseMove = function (evt) {\r\n\t\t\tif (this.options.preventMouseEventsDefault) {\r\n\t\t\t\tif (evt.preventDefault) {\r\n\t\t\t\t\tevt.preventDefault()\r\n\t\t\t\t} else {\r\n\t\t\t\t\tevt.returnValue = false\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (this.state === 'pan' && this.options.panEnabled) {\r\n\t\t\t\t// Pan mode\r\n\t\t\t\tvar point = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(this.firstEventCTM.inverse()),\r\n\t\t\t\t\tviewportCTM = this.firstEventCTM.translate(point.x - this.stateOrigin.x, point.y - this.stateOrigin.y)\r\n\r\n\t\t\t\tthis.viewport.setCTM(viewportCTM)\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Handle mouse button release event\r\n\t\t *\r\n\t\t * @param {Event} evt\r\n\t\t */\r\n\t\tSvgPanZoom.prototype.handleMouseUp = function (evt) {\r\n\t\t\tif (this.options.preventMouseEventsDefault) {\r\n\t\t\t\tif (evt.preventDefault) {\r\n\t\t\t\t\tevt.preventDefault()\r\n\t\t\t\t} else {\r\n\t\t\t\t\tevt.returnValue = false\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (this.state === 'pan') {\r\n\t\t\t\t// Quit pan mode\r\n\t\t\t\tthis.state = 'none'\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Adjust viewport size (only) so it will fit in SVG\r\n\t\t * Does not center image\r\n\t\t */\r\n\t\tSvgPanZoom.prototype.fit = function () {\r\n\t\t\tvar viewBox = this.viewport.getViewBox(),\r\n\t\t\t\tnewScale = Math.min(this.width / viewBox.width, this.height / viewBox.height)\r\n\r\n\t\t\tthis.zoom(newScale, true)\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Adjust viewport size (only) so it will contain the SVG\r\n\t\t * Does not center image\r\n\t\t */\r\n\t\tSvgPanZoom.prototype.contain = function () {\r\n\t\t\tvar viewBox = this.viewport.getViewBox(),\r\n\t\t\t\tnewScale = Math.max(this.width / viewBox.width, this.height / viewBox.height)\r\n\r\n\t\t\tthis.zoom(newScale, true)\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Adjust viewport pan (only) so it will be centered in SVG\r\n\t\t * Does not zoom/fit/contain image\r\n\t\t */\r\n\t\tSvgPanZoom.prototype.center = function () {\r\n\t\t\tvar viewBox = this.viewport.getViewBox(),\r\n\t\t\t\toffsetX = (this.width - (viewBox.width + viewBox.x * 2) * this.getZoom()) * 0.5,\r\n\t\t\t\toffsetY = (this.height - (viewBox.height + viewBox.y * 2) * this.getZoom()) * 0.5\r\n\r\n\t\t\tthis.getPublicInstance().pan({\r\n\t\t\t\tx: offsetX,\r\n\t\t\t\ty: offsetY\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Update content cached BorderBox\r\n\t\t * Use when viewport contents change\r\n\t\t */\r\n\t\tSvgPanZoom.prototype.updateBBox = function () {\r\n\t\t\tthis.viewport.simpleViewBoxCache()\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Pan to a rendered position\r\n\t\t *\r\n\t\t * @param {Object} point {x: 0, y: 0}\r\n\t\t */\r\n\t\tSvgPanZoom.prototype.pan = function (point) {\r\n\t\t\tvar viewportCTM = this.viewport.getCTM()\r\n\t\t\tviewportCTM.e = point.x\r\n\t\t\tviewportCTM.f = point.y\r\n\t\t\tthis.viewport.setCTM(viewportCTM)\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Relatively pan the graph by a specified rendered position vector\r\n\t\t *\r\n\t\t * @param {Object} point {x: 0, y: 0}\r\n\t\t */\r\n\t\tSvgPanZoom.prototype.panBy = function (point) {\r\n\t\t\tvar viewportCTM = this.viewport.getCTM()\r\n\t\t\tviewportCTM.e += point.x\r\n\t\t\tviewportCTM.f += point.y\r\n\t\t\tthis.viewport.setCTM(viewportCTM)\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Get pan vector\r\n\t\t *\r\n\t\t * @return {Object} {x: 0, y: 0}\r\n\t\t */\r\n\t\tSvgPanZoom.prototype.getPan = function () {\r\n\t\t\tvar state = this.viewport.getState()\r\n\r\n\t\t\treturn {\r\n\t\t\t\tx: state.x,\r\n\t\t\t\ty: state.y\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Recalculates cached svg dimensions and controls position\r\n\t\t */\r\n\t\tSvgPanZoom.prototype.resize = function () {\r\n\t\t\t// Get dimensions\r\n\t\t\tvar boundingClientRectNormalized = SvgUtils.getBoundingClientRectNormalized(this.svg)\r\n\t\t\tthis.width = boundingClientRectNormalized.width\r\n\t\t\tthis.height = boundingClientRectNormalized.height\r\n\r\n\t\t\t// Recalculate original state\r\n\t\t\tvar viewport = this.viewport\r\n\t\t\tviewport.options.width = this.width\r\n\t\t\tviewport.options.height = this.height\r\n\t\t\tviewport.processCTM()\r\n\r\n\t\t\t// Reposition control icons by re-enabling them\r\n\t\t\tif (this.options.controlIconsEnabled) {\r\n\t\t\t\tthis.getPublicInstance().disableControlIcons()\r\n\t\t\t\tthis.getPublicInstance().enableControlIcons()\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Unbind mouse events, free callbacks and destroy public instance\r\n\t\t */\r\n\t\tSvgPanZoom.prototype.destroy = function () {\r\n\t\t\tvar that = this\r\n\r\n\t\t\t// Free callbacks\r\n\t\t\tthis.beforeZoom = null\r\n\t\t\tthis.onZoom = null\r\n\t\t\tthis.beforePan = null\r\n\t\t\tthis.onPan = null\r\n\t\t\tthis.onUpdatedCTM = null\r\n\r\n\t\t\t// Destroy custom event handlers\r\n\t\t\tif (this.options.customEventsHandler != null) { // jshint ignore:line\r\n\t\t\t\tthis.options.customEventsHandler.destroy({\r\n\t\t\t\t\tsvgElement: this.svg,\r\n\t\t\t\t\teventsListenerElement: this.options.eventsListenerElement,\r\n\t\t\t\t\tinstance: this.getPublicInstance()\r\n\t\t\t\t})\r\n\t\t\t}\r\n\r\n\t\t\t// Unbind eventListeners\r\n\t\t\tfor (var event in this.eventListeners) {\r\n\t\t\t\t(this.options.eventsListenerElement || this.svg)\r\n\t\t\t\t.removeEventListener(event, this.eventListeners[event], false)\r\n\t\t\t}\r\n\r\n\t\t\t// Unbind wheelListener\r\n\t\t\tthis.disableMouseWheelZoom()\r\n\r\n\t\t\t// Remove control icons\r\n\t\t\tthis.getPublicInstance().disableControlIcons()\r\n\r\n\t\t\t// Reset zoom and pan\r\n\t\t\tthis.reset()\r\n\r\n\t\t\t// Remove instance from instancesStore\r\n\t\t\tinstancesStore = instancesStore.filter(function (instance) {\r\n\t\t\t\treturn instance.svg !== that.svg\r\n\t\t\t})\r\n\r\n\t\t\t// Delete options and its contents\r\n\t\t\tdelete this.options\r\n\r\n\t\t\t// Delete viewport to make public shadow viewport functions uncallable\r\n\t\t\tdelete this.viewport\r\n\r\n\t\t\t// Destroy public instance and rewrite getPublicInstance\r\n\t\t\tdelete this.publicInstance\r\n\t\t\tdelete this.pi\r\n\t\t\tthis.getPublicInstance = function () {\r\n\t\t\t\treturn null\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Returns a public instance object\r\n\t\t *\r\n\t\t * @return {Object} Public instance object\r\n\t\t */\r\n\t\tSvgPanZoom.prototype.getPublicInstance = function () {\r\n\t\t\tvar that = this\r\n\r\n\t\t\t// Create cache\r\n\t\t\tif (!this.publicInstance) {\r\n\t\t\t\tthis.publicInstance = this.pi = {\r\n\t\t\t\t\t// Pan\r\n\t\t\t\t\tenablePan: function () {\r\n\t\t\t\t\t\tthat.options.panEnabled = true;\r\n\t\t\t\t\t\treturn that.pi\r\n\t\t\t\t\t},\r\n\t\t\t\t\tdisablePan: function () {\r\n\t\t\t\t\t\tthat.options.panEnabled = false;\r\n\t\t\t\t\t\treturn that.pi\r\n\t\t\t\t\t},\r\n\t\t\t\t\tisPanEnabled: function () {\r\n\t\t\t\t\t\treturn !!that.options.panEnabled\r\n\t\t\t\t\t},\r\n\t\t\t\t\tpan: function (point) {\r\n\t\t\t\t\t\tthat.pan(point);\r\n\t\t\t\t\t\treturn that.pi\r\n\t\t\t\t\t},\r\n\t\t\t\t\tpanBy: function (point) {\r\n\t\t\t\t\t\tthat.panBy(point);\r\n\t\t\t\t\t\treturn that.pi\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetPan: function () {\r\n\t\t\t\t\t\t\treturn that.getPan()\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// Pan event\r\n\t\t\t\t\t\t,\r\n\t\t\t\t\tsetBeforePan: function (fn) {\r\n\t\t\t\t\t\tthat.options.beforePan = fn === null ? null : Utils.proxy(fn, that.publicInstance);\r\n\t\t\t\t\t\treturn that.pi\r\n\t\t\t\t\t},\r\n\t\t\t\t\tsetOnPan: function (fn) {\r\n\t\t\t\t\t\t\tthat.options.onPan = fn === null ? null : Utils.proxy(fn, that.publicInstance);\r\n\t\t\t\t\t\t\treturn that.pi\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// Zoom and Control Icons\r\n\t\t\t\t\t\t,\r\n\t\t\t\t\tenableZoom: function () {\r\n\t\t\t\t\t\tthat.options.zoomEnabled = true;\r\n\t\t\t\t\t\treturn that.pi\r\n\t\t\t\t\t},\r\n\t\t\t\t\tdisableZoom: function () {\r\n\t\t\t\t\t\tthat.options.zoomEnabled = false;\r\n\t\t\t\t\t\treturn that.pi\r\n\t\t\t\t\t},\r\n\t\t\t\t\tisZoomEnabled: function () {\r\n\t\t\t\t\t\treturn !!that.options.zoomEnabled\r\n\t\t\t\t\t},\r\n\t\t\t\t\tenableControlIcons: function () {\r\n\t\t\t\t\t\tif (!that.options.controlIconsEnabled) {\r\n\t\t\t\t\t\t\tthat.options.controlIconsEnabled = true\r\n\t\t\t\t\t\t\tControlIcons.enable(that)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn that.pi\r\n\t\t\t\t\t},\r\n\t\t\t\t\tdisableControlIcons: function () {\r\n\t\t\t\t\t\tif (that.options.controlIconsEnabled) {\r\n\t\t\t\t\t\t\tthat.options.controlIconsEnabled = false;\r\n\t\t\t\t\t\t\tControlIcons.disable(that)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn that.pi\r\n\t\t\t\t\t},\r\n\t\t\t\t\tisControlIconsEnabled: function () {\r\n\t\t\t\t\t\t\treturn !!that.options.controlIconsEnabled\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// Double click zoom\r\n\t\t\t\t\t\t,\r\n\t\t\t\t\tenableDblClickZoom: function () {\r\n\t\t\t\t\t\tthat.options.dblClickZoomEnabled = true;\r\n\t\t\t\t\t\treturn that.pi\r\n\t\t\t\t\t},\r\n\t\t\t\t\tdisableDblClickZoom: function () {\r\n\t\t\t\t\t\tthat.options.dblClickZoomEnabled = false;\r\n\t\t\t\t\t\treturn that.pi\r\n\t\t\t\t\t},\r\n\t\t\t\t\tisDblClickZoomEnabled: function () {\r\n\t\t\t\t\t\t\treturn !!that.options.dblClickZoomEnabled\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// Mouse wheel zoom\r\n\t\t\t\t\t\t,\r\n\t\t\t\t\tenableMouseWheelZoom: function () {\r\n\t\t\t\t\t\tthat.enableMouseWheelZoom();\r\n\t\t\t\t\t\treturn that.pi\r\n\t\t\t\t\t},\r\n\t\t\t\t\tdisableMouseWheelZoom: function () {\r\n\t\t\t\t\t\tthat.disableMouseWheelZoom();\r\n\t\t\t\t\t\treturn that.pi\r\n\t\t\t\t\t},\r\n\t\t\t\t\tisMouseWheelZoomEnabled: function () {\r\n\t\t\t\t\t\t\treturn !!that.options.mouseWheelZoomEnabled\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// Zoom scale and bounds\r\n\t\t\t\t\t\t,\r\n\t\t\t\t\tsetZoomScaleSensitivity: function (scale) {\r\n\t\t\t\t\t\tthat.options.zoomScaleSensitivity = scale;\r\n\t\t\t\t\t\treturn that.pi\r\n\t\t\t\t\t},\r\n\t\t\t\t\tsetMinZoom: function (zoom) {\r\n\t\t\t\t\t\tthat.options.minZoom = zoom;\r\n\t\t\t\t\t\treturn that.pi\r\n\t\t\t\t\t},\r\n\t\t\t\t\tsetMaxZoom: function (zoom) {\r\n\t\t\t\t\t\t\tthat.options.maxZoom = zoom;\r\n\t\t\t\t\t\t\treturn that.pi\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// Zoom event\r\n\t\t\t\t\t\t,\r\n\t\t\t\t\tsetBeforeZoom: function (fn) {\r\n\t\t\t\t\t\tthat.options.beforeZoom = fn === null ? null : Utils.proxy(fn, that.publicInstance);\r\n\t\t\t\t\t\treturn that.pi\r\n\t\t\t\t\t},\r\n\t\t\t\t\tsetOnZoom: function (fn) {\r\n\t\t\t\t\t\t\tthat.options.onZoom = fn === null ? null : Utils.proxy(fn, that.publicInstance);\r\n\t\t\t\t\t\t\treturn that.pi\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// Zooming\r\n\t\t\t\t\t\t,\r\n\t\t\t\t\tzoom: function (scale) {\r\n\t\t\t\t\t\tthat.publicZoom(scale, true);\r\n\t\t\t\t\t\treturn that.pi\r\n\t\t\t\t\t},\r\n\t\t\t\t\tzoomBy: function (scale) {\r\n\t\t\t\t\t\tthat.publicZoom(scale, false);\r\n\t\t\t\t\t\treturn that.pi\r\n\t\t\t\t\t},\r\n\t\t\t\t\tzoomAtPoint: function (scale, point) {\r\n\t\t\t\t\t\tthat.publicZoomAtPoint(scale, point, true);\r\n\t\t\t\t\t\treturn that.pi\r\n\t\t\t\t\t},\r\n\t\t\t\t\tzoomAtPointBy: function (scale, point) {\r\n\t\t\t\t\t\tthat.publicZoomAtPoint(scale, point, false);\r\n\t\t\t\t\t\treturn that.pi\r\n\t\t\t\t\t},\r\n\t\t\t\t\tzoomIn: function () {\r\n\t\t\t\t\t\tthis.zoomBy(1 + that.options.zoomScaleSensitivity);\r\n\t\t\t\t\t\treturn that.pi\r\n\t\t\t\t\t},\r\n\t\t\t\t\tzoomOut: function () {\r\n\t\t\t\t\t\tthis.zoomBy(1 / (1 + that.options.zoomScaleSensitivity));\r\n\t\t\t\t\t\treturn that.pi\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetZoom: function () {\r\n\t\t\t\t\t\t\treturn that.getRelativeZoom()\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// CTM update\r\n\t\t\t\t\t\t,\r\n\t\t\t\t\tsetOnUpdatedCTM: function (fn) {\r\n\t\t\t\t\t\t\tthat.options.onUpdatedCTM = fn === null ? null : Utils.proxy(fn, that.publicInstance);\r\n\t\t\t\t\t\t\treturn that.pi\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// Reset\r\n\t\t\t\t\t\t,\r\n\t\t\t\t\tresetZoom: function () {\r\n\t\t\t\t\t\tthat.resetZoom();\r\n\t\t\t\t\t\treturn that.pi\r\n\t\t\t\t\t},\r\n\t\t\t\t\tresetPan: function () {\r\n\t\t\t\t\t\tthat.resetPan();\r\n\t\t\t\t\t\treturn that.pi\r\n\t\t\t\t\t},\r\n\t\t\t\t\treset: function () {\r\n\t\t\t\t\t\t\tthat.reset();\r\n\t\t\t\t\t\t\treturn that.pi\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// Fit, Contain and Center\r\n\t\t\t\t\t\t,\r\n\t\t\t\t\tfit: function () {\r\n\t\t\t\t\t\tthat.fit();\r\n\t\t\t\t\t\treturn that.pi\r\n\t\t\t\t\t},\r\n\t\t\t\t\tcontain: function () {\r\n\t\t\t\t\t\tthat.contain();\r\n\t\t\t\t\t\treturn that.pi\r\n\t\t\t\t\t},\r\n\t\t\t\t\tcenter: function () {\r\n\t\t\t\t\t\t\tthat.center();\r\n\t\t\t\t\t\t\treturn that.pi\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// Size and Resize\r\n\t\t\t\t\t\t,\r\n\t\t\t\t\tupdateBBox: function () {\r\n\t\t\t\t\t\tthat.updateBBox();\r\n\t\t\t\t\t\treturn that.pi\r\n\t\t\t\t\t},\r\n\t\t\t\t\tresize: function () {\r\n\t\t\t\t\t\tthat.resize();\r\n\t\t\t\t\t\treturn that.pi\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetSizes: function () {\r\n\t\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t\twidth: that.width,\r\n\t\t\t\t\t\t\t\theight: that.height,\r\n\t\t\t\t\t\t\t\trealZoom: that.getZoom(),\r\n\t\t\t\t\t\t\t\tviewBox: that.viewport.getViewBox()\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// Destroy\r\n\t\t\t\t\t\t,\r\n\t\t\t\t\tdestroy: function () {\r\n\t\t\t\t\t\tthat.destroy();\r\n\t\t\t\t\t\treturn that.pi\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn this.publicInstance\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Stores pairs of instances of SvgPanZoom and SVG\r\n\t\t * Each pair is represented by an object {svg: SVGSVGElement, instance: SvgPanZoom}\r\n\t\t *\r\n\t\t * @type {Array}\r\n\t\t */\r\n\t\tvar instancesStore = []\r\n\r\n\t\tvar svgPanZoom = function (elementOrSelector, options) {\r\n\t\t\tvar svg = Utils.getSvg(elementOrSelector)\r\n\r\n\t\t\tif (svg === null) {\r\n\t\t\t\treturn null\r\n\t\t\t} else {\r\n\t\t\t\t// Look for existent instance\r\n\t\t\t\tfor (var i = instancesStore.length - 1; i >= 0; i--) {\r\n\t\t\t\t\tif (instancesStore[i].svg === svg) {\r\n\t\t\t\t\t\treturn instancesStore[i].instance.getPublicInstance()\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// If instance not found - create one\r\n\t\t\t\tinstancesStore.push({\r\n\t\t\t\t\tsvg: svg,\r\n\t\t\t\t\tinstance: new SvgPanZoom(svg, options)\r\n\t\t\t\t})\r\n\r\n\t\t\t\t// Return just pushed instance\r\n\t\t\t\treturn instancesStore[instancesStore.length - 1].instance.getPublicInstance()\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tmodule.exports = svgPanZoom;\r\n\r\n\t}, {\r\n\t\t\"./control-icons\": 2,\r\n\t\t\"./shadow-viewport\": 3,\r\n\t\t\"./svg-utilities\": 5,\r\n\t\t\"./uniwheel\": 6,\r\n\t\t\"./utilities\": 7\r\n\t}],\r\n\t5: [function (require, module, exports) {\r\n\t\tvar Utils = require('./utilities'),\r\n\t\t\t_browser = 'unknown';\r\n\r\n\t\t// http://stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-browser\r\n\t\tif ( /*@cc_on!@*/ false || !!document.documentMode) { // internet explorer\r\n\t\t\t_browser = 'ie';\r\n\t\t}\r\n\r\n\t\tmodule.exports = {\r\n\t\t\tsvgNS: 'http://www.w3.org/2000/svg',\r\n\t\t\txmlNS: 'http://www.w3.org/XML/1998/namespace',\r\n\t\t\txmlnsNS: 'http://www.w3.org/2000/xmlns/',\r\n\t\t\txlinkNS: 'http://www.w3.org/1999/xlink',\r\n\t\t\tevNS: 'http://www.w3.org/2001/xml-events'\r\n\r\n\t\t\t\t/**\r\n\t\t\t\t * Get svg dimensions: width and height\r\n\t\t\t\t *\r\n\t\t\t\t * @param {SVGSVGElement} svg\r\n\t\t\t\t * @return {Object} {width: 0, height: 0}\r\n\t\t\t\t */\r\n\t\t\t\t,\r\n\t\t\tgetBoundingClientRectNormalized: function (svg) {\r\n\t\t\t\t\tif (svg.clientWidth && svg.clientHeight) {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\twidth: svg.clientWidth,\r\n\t\t\t\t\t\t\theight: svg.clientHeight\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if (!!svg.getBoundingClientRect()) {\r\n\t\t\t\t\t\treturn svg.getBoundingClientRect();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthrow new Error('Cannot get BoundingClientRect for SVG.');\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/**\r\n\t\t\t\t * Gets g element with class of \"viewport\" or creates it if it doesn't exist\r\n\t\t\t\t *\r\n\t\t\t\t * @param {SVGSVGElement} svg\r\n\t\t\t\t * @return {SVGElement} g (group) element\r\n\t\t\t\t */\r\n\t\t\t\t,\r\n\t\t\tgetOrCreateViewport: function (svg, selector) {\r\n\t\t\t\t\tvar viewport = null\r\n\r\n\t\t\t\t\tif (Utils.isElement(selector)) {\r\n\t\t\t\t\t\tviewport = selector\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tviewport = svg.querySelector(selector)\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Check if there is just one main group in SVG\r\n\t\t\t\t\tif (!viewport) {\r\n\t\t\t\t\t\tvar childNodes = Array.prototype.slice.call(svg.childNodes || svg.children).filter(function (el) {\r\n\t\t\t\t\t\t\treturn el.nodeName !== 'defs' && el.nodeName !== '#text'\r\n\t\t\t\t\t\t})\r\n\r\n\t\t\t\t\t\t// Node name should be SVGGElement and should have no transform attribute\r\n\t\t\t\t\t\t// Groups with transform are not used as viewport because it involves parsing of all transform possibilities\r\n\t\t\t\t\t\tif (childNodes.length === 1 && childNodes[0].nodeName === 'g' && childNodes[0].getAttribute('transform') === null) {\r\n\t\t\t\t\t\t\tviewport = childNodes[0]\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// If no favorable group element exists then create one\r\n\t\t\t\t\tif (!viewport) {\r\n\t\t\t\t\t\tvar viewportId = 'viewport-' + new Date().toISOString().replace(/\\D/g, '');\r\n\t\t\t\t\t\tviewport = document.createElementNS(this.svgNS, 'g');\r\n\t\t\t\t\t\tviewport.setAttribute('id', viewportId);\r\n\r\n\t\t\t\t\t\t// Internet Explorer (all versions?) can't use childNodes, but other browsers prefer (require?) using childNodes\r\n\t\t\t\t\t\tvar svgChildren = svg.childNodes || svg.children;\r\n\t\t\t\t\t\tif (!!svgChildren && svgChildren.length > 0) {\r\n\t\t\t\t\t\t\tfor (var i = svgChildren.length; i > 0; i--) {\r\n\t\t\t\t\t\t\t\t// Move everything into viewport except defs\r\n\t\t\t\t\t\t\t\tif (svgChildren[svgChildren.length - i].nodeName !== 'defs') {\r\n\t\t\t\t\t\t\t\t\tviewport.appendChild(svgChildren[svgChildren.length - i]);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tsvg.appendChild(viewport);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Parse class names\r\n\t\t\t\t\tvar classNames = [];\r\n\t\t\t\t\tif (viewport.getAttribute('class')) {\r\n\t\t\t\t\t\tclassNames = viewport.getAttribute('class').split(' ')\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Set class (if not set already)\r\n\t\t\t\t\tif (!~classNames.indexOf('svg-pan-zoom_viewport')) {\r\n\t\t\t\t\t\tclassNames.push('svg-pan-zoom_viewport')\r\n\t\t\t\t\t\tviewport.setAttribute('class', classNames.join(' '))\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn viewport\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/**\r\n\t\t\t\t * Set SVG attributes\r\n\t\t\t\t *\r\n\t\t\t\t * @param {SVGSVGElement} svg\r\n\t\t\t\t */\r\n\t\t\t\t,\r\n\t\t\tsetupSvgAttributes: function (svg) {\r\n\t\t\t\t\t// Setting default attributes\r\n\t\t\t\t\tsvg.setAttribute('xmlns', this.svgNS);\r\n\t\t\t\t\tsvg.setAttributeNS(this.xmlnsNS, 'xmlns:xlink', this.xlinkNS);\r\n\t\t\t\t\tsvg.setAttributeNS(this.xmlnsNS, 'xmlns:ev', this.evNS);\r\n\r\n\t\t\t\t\t// Needed for Internet Explorer, otherwise the viewport overflows\r\n\t\t\t\t\tif (svg.parentNode !== null) {\r\n\t\t\t\t\t\tvar style = svg.getAttribute('style') || '';\r\n\t\t\t\t\t\tif (style.toLowerCase().indexOf('overflow') === -1) {\r\n\t\t\t\t\t\t\tsvg.setAttribute('style', 'overflow: hidden; ' + style);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/**\r\n\t\t\t\t * How long Internet Explorer takes to finish updating its display (ms).\r\n\t\t\t\t */\r\n\t\t\t\t,\r\n\t\t\tinternetExplorerRedisplayInterval: 300\r\n\r\n\t\t\t\t/**\r\n\t\t\t\t * Forces the browser to redisplay all SVG elements that rely on an\r\n\t\t\t\t * element defined in a 'defs' section. It works globally, for every\r\n\t\t\t\t * available defs element on the page.\r\n\t\t\t\t * The throttling is intentionally global.\r\n\t\t\t\t *\r\n\t\t\t\t * This is only needed for IE. It is as a hack to make markers (and 'use' elements?)\r\n\t\t\t\t * visible after pan/zoom when there are multiple SVGs on the page.\r\n\t\t\t\t * See bug report: https://connect.microsoft.com/IE/feedback/details/781964/\r\n\t\t\t\t * also see svg-pan-zoom issue: https://github.com/ariutta/svg-pan-zoom/issues/62\r\n\t\t\t\t */\r\n\t\t\t\t,\r\n\t\t\trefreshDefsGlobal: Utils.throttle(function () {\r\n\t\t\t\t\tvar allDefs = document.querySelectorAll('defs');\r\n\t\t\t\t\tvar allDefsCount = allDefs.length;\r\n\t\t\t\t\tfor (var i = 0; i < allDefsCount; i++) {\r\n\t\t\t\t\t\tvar thisDefs = allDefs[i];\r\n\t\t\t\t\t\tthisDefs.parentNode.insertBefore(thisDefs, thisDefs);\r\n\t\t\t\t\t}\r\n\t\t\t\t}, this.internetExplorerRedisplayInterval)\r\n\r\n\t\t\t\t/**\r\n\t\t\t\t * Sets the current transform matrix of an element\r\n\t\t\t\t *\r\n\t\t\t\t * @param {SVGElement} element\r\n\t\t\t\t * @param {SVGMatrix} matrix CTM\r\n\t\t\t\t * @param {SVGElement} defs\r\n\t\t\t\t */\r\n\t\t\t\t,\r\n\t\t\tsetCTM: function (element, matrix, defs) {\r\n\t\t\t\t\tvar that = this,\r\n\t\t\t\t\t\ts = 'matrix(' + matrix.a + ',' + matrix.b + ',' + matrix.c + ',' + matrix.d + ',' + matrix.e + ',' + matrix.f + ')';\r\n\r\n\t\t\t\t\telement.setAttributeNS(null, 'transform', s);\r\n\t\t\t\t\tif ('transform' in element.style) {\r\n\t\t\t\t\t\telement.style.transform = s;\r\n\t\t\t\t\t} else if ('-ms-transform' in element.style) {\r\n\t\t\t\t\t\telement.style['-ms-transform'] = s;\r\n\t\t\t\t\t} else if ('-webkit-transform' in element.style) {\r\n\t\t\t\t\t\telement.style['-webkit-transform'] = s;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// IE has a bug that makes markers disappear on zoom (when the matrix \"a\" and/or \"d\" elements change)\r\n\t\t\t\t\t// see http://stackoverflow.com/questions/17654578/svg-marker-does-not-work-in-ie9-10\r\n\t\t\t\t\t// and http://srndolha.wordpress.com/2013/11/25/svg-line-markers-may-disappear-in-internet-explorer-11/\r\n\t\t\t\t\tif (_browser === 'ie' && !!defs) {\r\n\t\t\t\t\t\t// this refresh is intended for redisplaying the SVG during zooming\r\n\t\t\t\t\t\tdefs.parentNode.insertBefore(defs, defs);\r\n\t\t\t\t\t\t// this refresh is intended for redisplaying the other SVGs on a page when panning a given SVG\r\n\t\t\t\t\t\t// it is also needed for the given SVG itself, on zoomEnd, if the SVG contains any markers that\r\n\t\t\t\t\t\t// are located under any other element(s).\r\n\t\t\t\t\t\twindow.setTimeout(function () {\r\n\t\t\t\t\t\t\tthat.refreshDefsGlobal();\r\n\t\t\t\t\t\t}, that.internetExplorerRedisplayInterval);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/**\r\n\t\t\t\t * Instantiate an SVGPoint object with given event coordinates\r\n\t\t\t\t *\r\n\t\t\t\t * @param {Event} evt\r\n\t\t\t\t * @param {SVGSVGElement} svg\r\n\t\t\t\t * @return {SVGPoint} point\r\n\t\t\t\t */\r\n\t\t\t\t,\r\n\t\t\tgetEventPoint: function (evt, svg) {\r\n\t\t\t\t\tvar point = svg.createSVGPoint()\r\n\r\n\t\t\t\t\tUtils.mouseAndTouchNormalize(evt, svg)\r\n\r\n\t\t\t\t\tpoint.x = evt.clientX\r\n\t\t\t\t\tpoint.y = evt.clientY\r\n\r\n\t\t\t\t\treturn point\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/**\r\n\t\t\t\t * Get SVG center point\r\n\t\t\t\t *\r\n\t\t\t\t * @param {SVGSVGElement} svg\r\n\t\t\t\t * @return {SVGPoint}\r\n\t\t\t\t */\r\n\t\t\t\t,\r\n\t\t\tgetSvgCenterPoint: function (svg, width, height) {\r\n\t\t\t\t\treturn this.createSVGPoint(svg, width / 2, height / 2)\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/**\r\n\t\t\t\t * Create a SVGPoint with given x and y\r\n\t\t\t\t *\r\n\t\t\t\t * @param {SVGSVGElement} svg\r\n\t\t\t\t * @param {Number} x\r\n\t\t\t\t * @param {Number} y\r\n\t\t\t\t * @return {SVGPoint}\r\n\t\t\t\t */\r\n\t\t\t\t,\r\n\t\t\tcreateSVGPoint: function (svg, x, y) {\r\n\t\t\t\tvar point = svg.createSVGPoint()\r\n\t\t\t\tpoint.x = x\r\n\t\t\t\tpoint.y = y\r\n\r\n\t\t\t\treturn point\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}, {\r\n\t\t\"./utilities\": 7\r\n\t}],\r\n\t6: [function (require, module, exports) {\r\n\t\t// uniwheel 0.1.2 (customized)\r\n\t\t// A unified cross browser mouse wheel event handler\r\n\t\t// https://github.com/teemualap/uniwheel\r\n\r\n\t\tmodule.exports = (function () {\r\n\r\n\t\t\t//Full details: https://developer.mozilla.org/en-US/docs/Web/Reference/Events/wheel\r\n\r\n\t\t\tvar prefix = \"\",\r\n\t\t\t\t_addEventListener, _removeEventListener, onwheel, support, fns = [];\r\n\r\n\t\t\t// detect event model\r\n\t\t\tif (window.addEventListener) {\r\n\t\t\t\t_addEventListener = \"addEventListener\";\r\n\t\t\t\t_removeEventListener = \"removeEventListener\";\r\n\t\t\t} else {\r\n\t\t\t\t_addEventListener = \"attachEvent\";\r\n\t\t\t\t_removeEventListener = \"detachEvent\";\r\n\t\t\t\tprefix = \"on\";\r\n\t\t\t}\r\n\r\n\t\t\t// detect available wheel event\r\n\t\t\tsupport = \"onwheel\" in document.createElement(\"div\") ? \"wheel\" : // Modern browsers support \"wheel\"\r\n\t\t\t\tdocument.onmousewheel !== undefined ? \"mousewheel\" : // Webkit and IE support at least \"mousewheel\"\r\n\t\t\t\t\"DOMMouseScroll\"; // let's assume that remaining browsers are older Firefox\r\n\r\n\r\n\t\t\tfunction createCallback(element, callback, capture) {\r\n\r\n\t\t\t\tvar fn = function (originalEvent) {\r\n\r\n\t\t\t\t\t!originalEvent && (originalEvent = window.event);\r\n\r\n\t\t\t\t\t// create a normalized event object\r\n\t\t\t\t\tvar event = {\r\n\t\t\t\t\t\t// keep a ref to the original event object\r\n\t\t\t\t\t\toriginalEvent: originalEvent,\r\n\t\t\t\t\t\ttarget: originalEvent.target || originalEvent.srcElement,\r\n\t\t\t\t\t\ttype: \"wheel\",\r\n\t\t\t\t\t\tdeltaMode: originalEvent.type == \"MozMousePixelScroll\" ? 0 : 1,\r\n\t\t\t\t\t\tdeltaX: 0,\r\n\t\t\t\t\t\tdelatZ: 0,\r\n\t\t\t\t\t\tpreventDefault: function () {\r\n\t\t\t\t\t\t\toriginalEvent.preventDefault ?\r\n\t\t\t\t\t\t\t\toriginalEvent.preventDefault() :\r\n\t\t\t\t\t\t\t\toriginalEvent.returnValue = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\t// calculate deltaY (and deltaX) according to the event\r\n\t\t\t\t\tif (support == \"mousewheel\") {\r\n\t\t\t\t\t\tevent.deltaY = -1 / 40 * originalEvent.wheelDelta;\r\n\t\t\t\t\t\t// Webkit also support wheelDeltaX\r\n\t\t\t\t\t\toriginalEvent.wheelDeltaX && (event.deltaX = -1 / 40 * originalEvent.wheelDeltaX);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tevent.deltaY = originalEvent.detail;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// it's time to fire the callback\r\n\t\t\t\t\treturn callback(event);\r\n\r\n\t\t\t\t};\r\n\r\n\t\t\t\tfns.push({\r\n\t\t\t\t\telement: element,\r\n\t\t\t\t\tfn: fn,\r\n\t\t\t\t\tcapture: capture\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn fn;\r\n\t\t\t}\r\n\r\n\t\t\tfunction getCallback(element, capture) {\r\n\t\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\t\tif (fns[i].element === element && fns[i].capture === capture) {\r\n\t\t\t\t\t\treturn fns[i].fn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn function () {};\r\n\t\t\t}\r\n\r\n\t\t\tfunction removeCallback(element, capture) {\r\n\t\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\t\tif (fns[i].element === element && fns[i].capture === capture) {\r\n\t\t\t\t\t\treturn fns.splice(i, 1);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfunction _addWheelListener(elem, eventName, callback, useCapture) {\r\n\r\n\t\t\t\tvar cb;\r\n\r\n\t\t\t\tif (support === \"wheel\") {\r\n\t\t\t\t\tcb = callback;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tcb = createCallback(elem, callback, useCapture);\r\n\t\t\t\t}\r\n\r\n\t\t\t\telem[_addEventListener](prefix + eventName, cb, useCapture || false);\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfunction _removeWheelListener(elem, eventName, callback, useCapture) {\r\n\r\n\t\t\t\tvar cb;\r\n\r\n\t\t\t\tif (support === \"wheel\") {\r\n\t\t\t\t\tcb = callback;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tcb = getCallback(elem, useCapture);\r\n\t\t\t\t}\r\n\r\n\t\t\t\telem[_removeEventListener](prefix + eventName, cb, useCapture || false);\r\n\r\n\t\t\t\tremoveCallback(elem, useCapture);\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfunction addWheelListener(elem, callback, useCapture) {\r\n\t\t\t\t_addWheelListener(elem, support, callback, useCapture);\r\n\r\n\t\t\t\t// handle MozMousePixelScroll in older Firefox\r\n\t\t\t\tif (support == \"DOMMouseScroll\") {\r\n\t\t\t\t\t_addWheelListener(elem, \"MozMousePixelScroll\", callback, useCapture);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfunction removeWheelListener(elem, callback, useCapture) {\r\n\t\t\t\t_removeWheelListener(elem, support, callback, useCapture);\r\n\r\n\t\t\t\t// handle MozMousePixelScroll in older Firefox\r\n\t\t\t\tif (support == \"DOMMouseScroll\") {\r\n\t\t\t\t\t_removeWheelListener(elem, \"MozMousePixelScroll\", callback, useCapture);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn {\r\n\t\t\t\ton: addWheelListener,\r\n\t\t\t\toff: removeWheelListener\r\n\t\t\t};\r\n\r\n\t\t})();\r\n\r\n\t}, {}],\r\n\t7: [function (require, module, exports) {\r\n\t\tmodule.exports = {\r\n\t\t\t/**\r\n\t\t\t * Extends an object\r\n\t\t\t *\r\n\t\t\t * @param {Object} target object to extend\r\n\t\t\t * @param {Object} source object to take properties from\r\n\t\t\t * @return {Object} extended object\r\n\t\t\t */\r\n\t\t\textend: function (target, source) {\r\n\t\t\t\t\ttarget = target || {};\r\n\t\t\t\t\tfor (var prop in source) {\r\n\t\t\t\t\t\t// Go recursively\r\n\t\t\t\t\t\tif (this.isObject(source[prop])) {\r\n\t\t\t\t\t\t\ttarget[prop] = this.extend(target[prop], source[prop])\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\ttarget[prop] = source[prop]\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn target;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/**\r\n\t\t\t\t * Checks if an object is a DOM element\r\n\t\t\t\t *\r\n\t\t\t\t * @param {Object} o HTML element or String\r\n\t\t\t\t * @return {Boolean} returns true if object is a DOM element\r\n\t\t\t\t */\r\n\t\t\t\t,\r\n\t\t\tisElement: function (o) {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\to instanceof HTMLElement || o instanceof SVGElement || o instanceof SVGSVGElement || //DOM2\r\n\t\t\t\t\t\t(o && typeof o === 'object' && o !== null && o.nodeType === 1 && typeof o.nodeName === 'string')\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/**\r\n\t\t\t\t * Checks if an object is an Object\r\n\t\t\t\t *\r\n\t\t\t\t * @param {Object} o Object\r\n\t\t\t\t * @return {Boolean} returns true if object is an Object\r\n\t\t\t\t */\r\n\t\t\t\t,\r\n\t\t\tisObject: function (o) {\r\n\t\t\t\t\treturn Object.prototype.toString.call(o) === '[object Object]';\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/**\r\n\t\t\t\t * Checks if variable is Number\r\n\t\t\t\t *\r\n\t\t\t\t * @param {Integer|Float} n\r\n\t\t\t\t * @return {Boolean} returns true if variable is Number\r\n\t\t\t\t */\r\n\t\t\t\t,\r\n\t\t\tisNumber: function (n) {\r\n\t\t\t\t\treturn !isNaN(parseFloat(n)) && isFinite(n);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/**\r\n\t\t\t\t * Search for an SVG element\r\n\t\t\t\t *\r\n\t\t\t\t * @param {Object|String} elementOrSelector DOM Element or selector String\r\n\t\t\t\t * @return {Object|Null} SVG or null\r\n\t\t\t\t */\r\n\t\t\t\t,\r\n\t\t\tgetSvg: function (elementOrSelector) {\r\n\t\t\t\t\tvar element, svg;\r\n\r\n\t\t\t\t\tif (!this.isElement(elementOrSelector)) {\r\n\t\t\t\t\t\t// If selector provided\r\n\t\t\t\t\t\tif (typeof elementOrSelector === 'string' || elementOrSelector instanceof String) {\r\n\t\t\t\t\t\t\t// Try to find the element\r\n\t\t\t\t\t\t\telement = document.querySelector(elementOrSelector)\r\n\r\n\t\t\t\t\t\t\tif (!element) {\r\n\t\t\t\t\t\t\t\tthrow new Error('Provided selector did not find any elements. Selector: ' + elementOrSelector)\r\n\t\t\t\t\t\t\t\treturn null\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tthrow new Error('Provided selector is not an HTML object nor String')\r\n\t\t\t\t\t\t\treturn null\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\telement = elementOrSelector\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (element.tagName.toLowerCase() === 'svg') {\r\n\t\t\t\t\t\tsvg = element;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif (element.tagName.toLowerCase() === 'object') {\r\n\t\t\t\t\t\t\tsvg = element.contentDocument.documentElement;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tif (element.tagName.toLowerCase() === 'embed') {\r\n\t\t\t\t\t\t\t\tsvg = element.getSVGDocument().documentElement;\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tif (element.tagName.toLowerCase() === 'img') {\r\n\t\t\t\t\t\t\t\t\tthrow new Error('Cannot script an SVG in an \"img\" element. Please use an \"object\" element or an in-line SVG.');\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tthrow new Error('Cannot get SVG.');\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\treturn null\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn svg\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/**\r\n\t\t\t\t * Attach a given context to a function\r\n\t\t\t\t * @param {Function} fn Function\r\n\t\t\t\t * @param {Object} context Context\r\n\t\t\t\t * @return {Function} Function with certain context\r\n\t\t\t\t */\r\n\t\t\t\t,\r\n\t\t\tproxy: function (fn, context) {\r\n\t\t\t\t\treturn function () {\r\n\t\t\t\t\t\treturn fn.apply(context, arguments)\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/**\r\n\t\t\t\t * Returns object type\r\n\t\t\t\t * Uses toString that returns [object SVGPoint]\r\n\t\t\t\t * And than parses object type from string\r\n\t\t\t\t *\r\n\t\t\t\t * @param {Object} o Any object\r\n\t\t\t\t * @return {String} Object type\r\n\t\t\t\t */\r\n\t\t\t\t,\r\n\t\t\tgetType: function (o) {\r\n\t\t\t\t\treturn Object.prototype.toString.apply(o).replace(/^\\[object\\s/, '').replace(/\\]$/, '')\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/**\r\n\t\t\t\t * If it is a touch event than add clientX and clientY to event object\r\n\t\t\t\t *\r\n\t\t\t\t * @param {Event} evt\r\n\t\t\t\t * @param {SVGSVGElement} svg\r\n\t\t\t\t */\r\n\t\t\t\t,\r\n\t\t\tmouseAndTouchNormalize: function (evt, svg) {\r\n\t\t\t\t\t// If no clientX then fallback\r\n\t\t\t\t\tif (evt.clientX === void 0 || evt.clientX === null) {\r\n\t\t\t\t\t\t// Fallback\r\n\t\t\t\t\t\tevt.clientX = 0\r\n\t\t\t\t\t\tevt.clientY = 0\r\n\r\n\t\t\t\t\t\t// If it is a touch event\r\n\t\t\t\t\t\tif (evt.touches !== void 0 && evt.touches.length) {\r\n\t\t\t\t\t\t\tif (evt.touches[0].clientX !== void 0) {\r\n\t\t\t\t\t\t\t\tevt.clientX = evt.touches[0].clientX\r\n\t\t\t\t\t\t\t\tevt.clientY = evt.touches[0].clientY\r\n\t\t\t\t\t\t\t} else if (evt.touches[0].pageX !== void 0) {\r\n\t\t\t\t\t\t\t\tvar rect = svg.getBoundingClientRect();\r\n\r\n\t\t\t\t\t\t\t\tevt.clientX = evt.touches[0].pageX - rect.left\r\n\t\t\t\t\t\t\t\tevt.clientY = evt.touches[0].pageY - rect.top\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t// If it is a custom event\r\n\t\t\t\t\t\t} else if (evt.originalEvent !== void 0) {\r\n\t\t\t\t\t\t\tif (evt.originalEvent.clientX !== void 0) {\r\n\t\t\t\t\t\t\t\tevt.clientX = evt.originalEvent.clientX\r\n\t\t\t\t\t\t\t\tevt.clientY = evt.originalEvent.clientY\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/**\r\n\t\t\t\t * Check if an event is a double click/tap\r\n\t\t\t\t * TODO: For touch gestures use a library (hammer.js) that takes in account other events\r\n\t\t\t\t * (touchmove and touchend). It should take in account tap duration and traveled distance\r\n\t\t\t\t *\r\n\t\t\t\t * @param {Event} evt\r\n\t\t\t\t * @param {Event} prevEvt Previous Event\r\n\t\t\t\t * @return {Boolean}\r\n\t\t\t\t */\r\n\t\t\t\t,\r\n\t\t\tisDblClick: function (evt, prevEvt) {\r\n\t\t\t\t\t// Double click detected by browser\r\n\t\t\t\t\tif (evt.detail === 2) {\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// Try to compare events\r\n\t\t\t\t\telse if (prevEvt !== void 0 && prevEvt !== null) {\r\n\t\t\t\t\t\tvar timeStampDiff = evt.timeStamp - prevEvt.timeStamp // should be lower than 250 ms\r\n\t\t\t\t\t\t\t,\r\n\t\t\t\t\t\t\ttouchesDistance = Math.sqrt(Math.pow(evt.clientX - prevEvt.clientX, 2) + Math.pow(evt.clientY - prevEvt.clientY, 2))\r\n\r\n\t\t\t\t\t\treturn timeStampDiff < 250 && touchesDistance < 10\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Nothing found\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/**\r\n\t\t\t\t * Returns current timestamp as an integer\r\n\t\t\t\t *\r\n\t\t\t\t * @return {Number}\r\n\t\t\t\t */\r\n\t\t\t\t,\r\n\t\t\tnow: Date.now || function () {\r\n\t\t\t\t\treturn new Date().getTime();\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// From underscore.\r\n\t\t\t\t// Returns a function, that, when invoked, will only be triggered at most once\r\n\t\t\t\t// during a given window of time. Normally, the throttled function will run\r\n\t\t\t\t// as much as it can, without ever going more than once per `wait` duration;\r\n\t\t\t\t// but if you'd like to disable the execution on the leading edge, pass\r\n\t\t\t\t// `{leading: false}`. To disable execution on the trailing edge, ditto.\r\n\t\t\t\t// jscs:disable\r\n\t\t\t\t// jshint ignore:start\r\n\t\t\t\t,\r\n\t\t\tthrottle: function (func, wait, options) {\r\n\t\t\t\t\tvar that = this;\r\n\t\t\t\t\tvar context, args, result;\r\n\t\t\t\t\tvar timeout = null;\r\n\t\t\t\t\tvar previous = 0;\r\n\t\t\t\t\tif (!options) options = {};\r\n\t\t\t\t\tvar later = function () {\r\n\t\t\t\t\t\tprevious = options.leading === false ? 0 : that.now();\r\n\t\t\t\t\t\ttimeout = null;\r\n\t\t\t\t\t\tresult = func.apply(context, args);\r\n\t\t\t\t\t\tif (!timeout) context = args = null;\r\n\t\t\t\t\t};\r\n\t\t\t\t\treturn function () {\r\n\t\t\t\t\t\tvar now = that.now();\r\n\t\t\t\t\t\tif (!previous && options.leading === false) previous = now;\r\n\t\t\t\t\t\tvar remaining = wait - (now - previous);\r\n\t\t\t\t\t\tcontext = this;\r\n\t\t\t\t\t\targs = arguments;\r\n\t\t\t\t\t\tif (remaining <= 0 || remaining > wait) {\r\n\t\t\t\t\t\t\tclearTimeout(timeout);\r\n\t\t\t\t\t\t\ttimeout = null;\r\n\t\t\t\t\t\t\tprevious = now;\r\n\t\t\t\t\t\t\tresult = func.apply(context, args);\r\n\t\t\t\t\t\t\tif (!timeout) context = args = null;\r\n\t\t\t\t\t\t} else if (!timeout && options.trailing !== false) {\r\n\t\t\t\t\t\t\ttimeout = setTimeout(later, remaining);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn result;\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t\t// jshint ignore:end\r\n\t\t\t\t// jscs:enable\r\n\r\n\t\t\t\t/**\r\n\t\t\t\t * Create a requestAnimationFrame simulation\r\n\t\t\t\t *\r\n\t\t\t\t * @param {Number|String} refreshRate\r\n\t\t\t\t * @return {Function}\r\n\t\t\t\t */\r\n\t\t\t\t,\r\n\t\t\tcreateRequestAnimationFrame: function (refreshRate) {\r\n\t\t\t\tvar timeout = null\r\n\r\n\t\t\t\t// Convert refreshRate to timeout\r\n\t\t\t\tif (refreshRate !== 'auto' && refreshRate < 60 && refreshRate > 1) {\r\n\t\t\t\t\ttimeout = Math.floor(1000 / refreshRate)\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (timeout === null) {\r\n\t\t\t\t\treturn window.requestAnimationFrame || requestTimeout(33)\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn requestTimeout(timeout)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Create a callback that will execute after a given timeout\r\n\t\t *\r\n\t\t * @param {Function} timeout\r\n\t\t * @return {Function}\r\n\t\t */\r\n\t\tfunction requestTimeout(timeout) {\r\n\t\t\treturn function (callback) {\r\n\t\t\t\twindow.setTimeout(callback, timeout)\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}, {}]\r\n}, {}, [1]);","let recherchepays = {\r\n\r\n\tnavigation: document.querySelector('.recherchepays__navigation'),\r\n\tactiveClass: 'is-active',\r\n\tidMap: 'map',\r\n\tpathMap: '/Content/img/destinations/world.svg',\r\n\tpaddingScroll: '99px',\r\n\theightHeader: 84,\r\n\r\n\t/// On redirige vers la lr lorsque l'on choisit une destination dans le select\r\n\tselectDestination: function (id = 'ListDestination') {\r\n\t\tdocument.getElementById(id).addEventListener('change', function () {\r\n\t\t\tif (location.pathname !== this.options[this.selectedIndex].value)\r\n\t\t\t\tlocation = this.options[this.selectedIndex].value;\r\n\t\t})\r\n\t},\r\n\r\n\t/// @mobile\r\n\t/// Au click sur un item zone,\r\n\t/// on centre sur l'item cliqué\r\n\thorizontalNav: function (nav) {\r\n\r\n\t\tlet self = this;\r\n\r\n\t\tif (nav) {\r\n\t\t\tlet navLinks = nav.querySelectorAll('a'),\r\n\t\t\t\tactiveLink = document.querySelector(`.${self.activeClass}`)\r\n\r\n\t\t\tnavLinks.forEach(function (link) {\r\n\t\t\t\tlink.addEventListener(\"click\", (event) => {\r\n\t\t\t\t\tnavLinks.forEach(function (link) {\r\n\t\t\t\t\t\tlink.classList.remove(self.activeClass)\r\n\t\t\t\t\t})\r\n\t\t\t\t\tlink.classList.add(self.activeClass)\r\n\t\t\t\t\tlink.scrollIntoView({\r\n\t\t\t\t\t\tbehavior: \"smooth\",\r\n\t\t\t\t\t\tinline: \"center\"\r\n\t\t\t\t\t})\r\n\t\t\t\t})\r\n\t\t\t})\r\n\t\t}\r\n\t},\r\n\r\n\t/// @mobile\r\n\t/// au scroll sur une nouvelle zone,\r\n\t/// on toggle la classe active\r\n\tactiveNav: function (nav) {\r\n\t\tlet self = this,\r\n\t\t\tmainNavLinks = nav.querySelectorAll('a');\r\n\r\n\t\twindow.addEventListener('scroll', event => {\r\n\t\t\tlet fromTop = window.scrollY;\r\n\r\n\t\t\tmainNavLinks.forEach(link => {\r\n\t\t\t\tlet section = document.querySelector(link.getAttribute('href')),\r\n\t\t\t\t\tpos = section.getBoundingClientRect();\r\n\t\t\t\tif (pos.top < self.heightHeader) {\r\n\t\t\t\t\tmainNavLinks.forEach(el => el.classList.remove(self.activeClass))\r\n\t\t\t\t\tlink.classList.add(self.activeClass);\r\n\t\t\t\t} else if (pos.top + pos.height < fromTop) {\r\n\t\t\t\t\tlink.classList.remove(self.activeClass);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\t},\r\n\r\n\t/// @desktop\r\n\tloadSvgMap: function (selector, pathCarte, idMap) {\r\n\r\n\t\tlet self = this;\r\n\r\n\t\tfetch(pathCarte)\r\n\t\t\t.then(response => response.text())\r\n\t\t\t.then(svg => document.querySelector(selector).innerHTML = svg)\r\n\t\t\t.then(response => {\r\n\r\n\t\t\t\t// Gestion du zoom\r\n\t\t\t\twindow.zoomTiger = svgPanZoom(selector + ' svg', {\r\n\t\t\t\t\tcenter: true,\r\n\t\t\t\t\tcontrolIconsEnabled: true,\r\n\t\t\t\t\tfit: true,\r\n\t\t\t\t\tminZoom: 1,\r\n\t\t\t\t\tzoomEnabled: true\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// Gestion Desination terdav ou pas\r\n\t\t\t\tlet carte = document.getElementById(idMap),\r\n\t\t\t\t\tpays = carte.querySelectorAll('.land');\r\n\r\n\t\t\t\t[].forEach.call(pays, function (el, index, array) {\r\n\t\t\t\t\t// On ajoute une classe au correspondant à un pays TDV\r\n\t\t\t\t\tif (arrCodePays.includes(el.id)) {\r\n\t\t\t\t\t\tel.classList.add(self.activeClass);\r\n\t\t\t\t\t\tel.addEventListener('click', function () {\r\n\t\t\t\t\t\t\twindow.location = document.querySelector(`[data-expand-link=\"${el.id}\"]`).getAttribute('href')\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tel.addEventListener('mouseenter', function (el) {\r\n\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\tdocument.getElementById(idMap).querySelector('title').innerHTML = el.target.attributes.title.textContent;\r\n\t\t\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\t\t\tconsole.error(e)\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t})\r\n\t},\r\n\r\n\t/// @mobile\r\n\t/// pour gérer le menu en position fixed\r\n\tscrollPrevent: function (paddingScroll) {\r\n\t\tdocument.documentElement.style.scrollPaddingTop = paddingScroll;\r\n\t},\r\n\r\n\tinit: function (arr) {\r\n\t\tthis.selectDestination();\r\n\t\tlet arrCodePays = arr;\r\n\t\tif (!helpers.isTouchDevice()) {\r\n\t\t\tthis.loadSvgMap(`#${this.idMap}`, this.pathMap, this.idMap)\r\n\t\t} else {\r\n\t\t\tthis.scrollPrevent(this.paddingScroll);\r\n\t\t\tthis.horizontalNav(this.navigation);\r\n\t\t\tthis.activeNav(this.navigation);\r\n\t\t}\r\n\t}\r\n}\r\n\r\n"]}