{"version":3,"sources":["libs/svg-pan-zoom.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","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","processCTM","svgViewBox","getAttribute","viewBoxValues","split","filter","v","map","parseFloat","Math","min","updateCTMOnNextFrame","removeAttribute","bBox","getBBox","recacheViewBox","boundingClientRect","getBoundingClientRect","viewBoxWidth","getZoom","viewBoxHeight","getViewBox","extend","newCTM","getCTM","fit","contain","newScale","max","d","center","offsetX","offsetY","setCTM","getOriginalState","getState","getRelativeZoom","computeRelativeZoom","scale","getPan","safeCTM","createSVGMatrix","b","c","willZoom","isZoomDifferent","willPan","isPanDifferent","beforeZoom","preventPan","beforePan","preventPanX","preventPanY","isObject","isNumber","updateCache","onZoom","onPan","pendingUpdate","./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","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","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","nodeType","Object","toString","isNaN","isFinite","String","tagName","contentDocument","documentElement","getSVGDocument","context","apply","arguments","changedTouches","pageX","rect","left","pageY","top","timeStampDiff","timeStamp","touchesDistance","sqrt","getTime","func","wait","args","previous","later","leading","remaining","clearTimeout","trailing","floor"],"mappings":"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","file":"libs/svg-pan-zoom.min.js","sourcesContent":["// svg-pan-zoom v3.2.10\r\n// https://github.com/ariutta/svg-pan-zoom\r\n(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 0; i--) {\r\n if (this.eventListeners.hasOwnProperty(haltEventListeners[i])) {\r\n delete this.eventListeners[haltEventListeners[i]]\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Bind eventListeners\r\n for (var event in this.eventListeners) {\r\n // Attach event to eventsListenerElement or SVG if not available\r\n (this.options.eventsListenerElement || this.svg)\r\n .addEventListener(event, this.eventListeners[event], false)\r\n }\r\n\r\n // Zoom using mouse wheel\r\n if (this.options.mouseWheelZoomEnabled) {\r\n this.options.mouseWheelZoomEnabled = false // set to false as enable will set it back to true\r\n this.enableMouseWheelZoom()\r\n }\r\n}\r\n\r\n/**\r\n * Enable ability to zoom using mouse wheel\r\n */\r\nSvgPanZoom.prototype.enableMouseWheelZoom = function() {\r\n if (!this.options.mouseWheelZoomEnabled) {\r\n var that = this\r\n\r\n // Mouse wheel listener\r\n this.wheelListener = function(evt) {\r\n return that.handleMouseWheel(evt);\r\n }\r\n\r\n // Bind wheelListener\r\n Wheel.on(this.options.eventsListenerElement || this.svg, this.wheelListener, false)\r\n\r\n this.options.mouseWheelZoomEnabled = true\r\n }\r\n}\r\n\r\n/**\r\n * Disable ability to zoom using mouse wheel\r\n */\r\nSvgPanZoom.prototype.disableMouseWheelZoom = function() {\r\n if (this.options.mouseWheelZoomEnabled) {\r\n Wheel.off(this.options.eventsListenerElement || this.svg, this.wheelListener, false)\r\n this.options.mouseWheelZoomEnabled = false\r\n }\r\n}\r\n\r\n/**\r\n * Handle mouse wheel event\r\n *\r\n * @param {Event} evt\r\n */\r\nSvgPanZoom.prototype.handleMouseWheel = function(evt) {\r\n if (!this.options.zoomEnabled || this.state !== 'none') {\r\n return;\r\n }\r\n\r\n if (this.options.preventMouseEventsDefault){\r\n if (evt.preventDefault) {\r\n evt.preventDefault();\r\n } else {\r\n evt.returnValue = false;\r\n }\r\n }\r\n\r\n // Default delta in case that deltaY is not available\r\n var delta = evt.deltaY || 1\r\n , timeDelta = Date.now() - this.lastMouseWheelEventTime\r\n , divider = 3 + Math.max(0, 30 - timeDelta)\r\n\r\n // Update cache\r\n this.lastMouseWheelEventTime = Date.now()\r\n\r\n // Make empirical adjustments for browsers that give deltaY in pixels (deltaMode=0)\r\n if ('deltaMode' in evt && evt.deltaMode === 0 && evt.wheelDelta) {\r\n delta = evt.deltaY === 0 ? 0 : Math.abs(evt.wheelDelta) / evt.deltaY\r\n }\r\n\r\n delta = -0.3 < delta && delta < 0.3 ? delta : (delta > 0 ? 1 : -1) * Math.log(Math.abs(delta) + 10) / divider\r\n\r\n var inversedScreenCTM = this.svg.getScreenCTM().inverse()\r\n , relativeMousePoint = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(inversedScreenCTM)\r\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\r\n\r\n this.zoomAtPoint(zoom, relativeMousePoint)\r\n}\r\n\r\n/**\r\n * Zoom in at a SVG point\r\n *\r\n * @param {SVGPoint} point\r\n * @param {Float} zoomScale Number representing how much to zoom\r\n * @param {Boolean} zoomAbsolute Default false. If true, zoomScale is treated as an absolute value.\r\n * Otherwise, zoomScale is treated as a multiplied (e.g. 1.10 would zoom in 10%)\r\n */\r\nSvgPanZoom.prototype.zoomAtPoint = function(zoomScale, point, zoomAbsolute) {\r\n var originalState = this.viewport.getOriginalState()\r\n\r\n if (!zoomAbsolute) {\r\n // Fit zoomScale in set bounds\r\n if (this.getZoom() * zoomScale < this.options.minZoom * originalState.zoom) {\r\n zoomScale = (this.options.minZoom * originalState.zoom) / this.getZoom()\r\n } else if (this.getZoom() * zoomScale > this.options.maxZoom * originalState.zoom) {\r\n zoomScale = (this.options.maxZoom * originalState.zoom) / this.getZoom()\r\n }\r\n } else {\r\n // Fit zoomScale in set bounds\r\n zoomScale = Math.max(this.options.minZoom * originalState.zoom, Math.min(this.options.maxZoom * originalState.zoom, zoomScale))\r\n // Find relative scale to achieve desired scale\r\n zoomScale = zoomScale/this.getZoom()\r\n }\r\n\r\n var oldCTM = this.viewport.getCTM()\r\n , relativePoint = point.matrixTransform(oldCTM.inverse())\r\n , modifier = this.svg.createSVGMatrix().translate(relativePoint.x, relativePoint.y).scale(zoomScale).translate(-relativePoint.x, -relativePoint.y)\r\n , newCTM = oldCTM.multiply(modifier)\r\n\r\n if (newCTM.a !== oldCTM.a) {\r\n this.viewport.setCTM(newCTM)\r\n }\r\n}\r\n\r\n/**\r\n * Zoom at center point\r\n *\r\n * @param {Float} scale\r\n * @param {Boolean} absolute Marks zoom scale as relative or absolute\r\n */\r\nSvgPanZoom.prototype.zoom = function(scale, absolute) {\r\n this.zoomAtPoint(scale, SvgUtils.getSvgCenterPoint(this.svg, this.width, this.height), absolute)\r\n}\r\n\r\n/**\r\n * Zoom used by public instance\r\n *\r\n * @param {Float} scale\r\n * @param {Boolean} absolute Marks zoom scale as relative or absolute\r\n */\r\nSvgPanZoom.prototype.publicZoom = function(scale, absolute) {\r\n if (absolute) {\r\n scale = this.computeFromRelativeZoom(scale)\r\n }\r\n\r\n this.zoom(scale, absolute)\r\n}\r\n\r\n/**\r\n * Zoom at point used by public instance\r\n *\r\n * @param {Float} scale\r\n * @param {SVGPoint|Object} point An object that has x and y attributes\r\n * @param {Boolean} absolute Marks zoom scale as relative or absolute\r\n */\r\nSvgPanZoom.prototype.publicZoomAtPoint = function(scale, point, absolute) {\r\n if (absolute) {\r\n // Transform zoom into a relative value\r\n scale = this.computeFromRelativeZoom(scale)\r\n }\r\n\r\n // If not a SVGPoint but has x and y then create a SVGPoint\r\n if (Utils.getType(point) !== 'SVGPoint') {\r\n if('x' in point && 'y' in point) {\r\n point = SvgUtils.createSVGPoint(this.svg, point.x, point.y)\r\n } else {\r\n throw new Error('Given point is invalid')\r\n }\r\n }\r\n\r\n this.zoomAtPoint(scale, point, absolute)\r\n}\r\n\r\n/**\r\n * Get zoom scale\r\n *\r\n * @return {Float} zoom scale\r\n */\r\nSvgPanZoom.prototype.getZoom = function() {\r\n return this.viewport.getZoom()\r\n}\r\n\r\n/**\r\n * Get zoom scale for public usage\r\n *\r\n * @return {Float} zoom scale\r\n */\r\nSvgPanZoom.prototype.getRelativeZoom = function() {\r\n return this.viewport.getRelativeZoom()\r\n}\r\n\r\n/**\r\n * Compute actual zoom from public zoom\r\n *\r\n * @param {Float} zoom\r\n * @return {Float} zoom scale\r\n */\r\nSvgPanZoom.prototype.computeFromRelativeZoom = function(zoom) {\r\n return zoom * this.viewport.getOriginalState().zoom\r\n}\r\n\r\n/**\r\n * Set zoom to initial state\r\n */\r\nSvgPanZoom.prototype.resetZoom = function() {\r\n var originalState = this.viewport.getOriginalState()\r\n\r\n this.zoom(originalState.zoom, true);\r\n}\r\n\r\n/**\r\n * Set pan to initial state\r\n */\r\nSvgPanZoom.prototype.resetPan = function() {\r\n this.pan(this.viewport.getOriginalState());\r\n}\r\n\r\n/**\r\n * Set pan and zoom to initial state\r\n */\r\nSvgPanZoom.prototype.reset = function() {\r\n this.resetZoom()\r\n this.resetPan()\r\n}\r\n\r\n/**\r\n * Handle double click event\r\n * See handleMouseDown() for alternate detection method\r\n *\r\n * @param {Event} evt\r\n */\r\nSvgPanZoom.prototype.handleDblClick = function(evt) {\r\n if (this.options.preventMouseEventsDefault) {\r\n if (evt.preventDefault) {\r\n evt.preventDefault()\r\n } else {\r\n evt.returnValue = false\r\n }\r\n }\r\n\r\n // Check if target was a control button\r\n if (this.options.controlIconsEnabled) {\r\n var targetClass = evt.target.getAttribute('class') || ''\r\n if (targetClass.indexOf('svg-pan-zoom-control') > -1) {\r\n return false\r\n }\r\n }\r\n\r\n var zoomFactor\r\n\r\n if (evt.shiftKey) {\r\n zoomFactor = 1/((1 + this.options.zoomScaleSensitivity) * 2) // zoom out when shift key pressed\r\n } else {\r\n zoomFactor = (1 + this.options.zoomScaleSensitivity) * 2\r\n }\r\n\r\n var point = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(this.svg.getScreenCTM().inverse())\r\n this.zoomAtPoint(zoomFactor, point)\r\n}\r\n\r\n/**\r\n * Handle click event\r\n *\r\n * @param {Event} evt\r\n */\r\nSvgPanZoom.prototype.handleMouseDown = function(evt, prevEvt) {\r\n if (this.options.preventMouseEventsDefault) {\r\n if (evt.preventDefault) {\r\n evt.preventDefault()\r\n } else {\r\n evt.returnValue = false\r\n }\r\n }\r\n\r\n Utils.mouseAndTouchNormalize(evt, this.svg)\r\n\r\n // Double click detection; more consistent than ondblclick\r\n if (this.options.dblClickZoomEnabled && Utils.isDblClick(evt, prevEvt)){\r\n this.handleDblClick(evt)\r\n } else {\r\n // Pan mode\r\n this.state = 'pan'\r\n this.firstEventCTM = this.viewport.getCTM()\r\n this.stateOrigin = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(this.firstEventCTM.inverse())\r\n }\r\n}\r\n\r\n/**\r\n * Handle mouse move event\r\n *\r\n * @param {Event} evt\r\n */\r\nSvgPanZoom.prototype.handleMouseMove = function(evt) {\r\n if (this.options.preventMouseEventsDefault) {\r\n if (evt.preventDefault) {\r\n evt.preventDefault()\r\n } else {\r\n evt.returnValue = false\r\n }\r\n }\r\n\r\n if (this.state === 'pan' && this.options.panEnabled) {\r\n // Pan mode\r\n var point = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(this.firstEventCTM.inverse())\r\n , viewportCTM = this.firstEventCTM.translate(point.x - this.stateOrigin.x, point.y - this.stateOrigin.y)\r\n\r\n this.viewport.setCTM(viewportCTM)\r\n }\r\n}\r\n\r\n/**\r\n * Handle mouse button release event\r\n *\r\n * @param {Event} evt\r\n */\r\nSvgPanZoom.prototype.handleMouseUp = function(evt) {\r\n if (this.options.preventMouseEventsDefault) {\r\n if (evt.preventDefault) {\r\n evt.preventDefault()\r\n } else {\r\n evt.returnValue = false\r\n }\r\n }\r\n\r\n if (this.state === 'pan') {\r\n // Quit pan mode\r\n this.state = 'none'\r\n }\r\n}\r\n\r\n/**\r\n * Adjust viewport size (only) so it will fit in SVG\r\n * Does not center image\r\n */\r\nSvgPanZoom.prototype.fit = function() {\r\n var viewBox = this.viewport.getViewBox()\r\n , newScale = Math.min(this.width/viewBox.width, this.height/viewBox.height)\r\n\r\n this.zoom(newScale, true)\r\n}\r\n\r\n/**\r\n * Adjust viewport size (only) so it will contain the SVG\r\n * Does not center image\r\n */\r\nSvgPanZoom.prototype.contain = function() {\r\n var viewBox = this.viewport.getViewBox()\r\n , newScale = Math.max(this.width/viewBox.width, this.height/viewBox.height)\r\n\r\n this.zoom(newScale, true)\r\n}\r\n\r\n/**\r\n * Adjust viewport pan (only) so it will be centered in SVG\r\n * Does not zoom/fit/contain image\r\n */\r\nSvgPanZoom.prototype.center = function() {\r\n var viewBox = this.viewport.getViewBox()\r\n , offsetX = (this.width - (viewBox.width + viewBox.x * 2) * this.getZoom()) * 0.5\r\n , offsetY = (this.height - (viewBox.height + viewBox.y * 2) * this.getZoom()) * 0.5\r\n\r\n this.getPublicInstance().pan({x: offsetX, y: offsetY})\r\n}\r\n\r\n/**\r\n * Update content cached BorderBox\r\n * Use when viewport contents change\r\n */\r\nSvgPanZoom.prototype.updateBBox = function() {\r\n this.viewport.recacheViewBox()\r\n}\r\n\r\n/**\r\n * Pan to a rendered position\r\n *\r\n * @param {Object} point {x: 0, y: 0}\r\n */\r\nSvgPanZoom.prototype.pan = function(point) {\r\n var viewportCTM = this.viewport.getCTM()\r\n viewportCTM.e = point.x\r\n viewportCTM.f = point.y\r\n this.viewport.setCTM(viewportCTM)\r\n}\r\n\r\n/**\r\n * Relatively pan the graph by a specified rendered position vector\r\n *\r\n * @param {Object} point {x: 0, y: 0}\r\n */\r\nSvgPanZoom.prototype.panBy = function(point) {\r\n var viewportCTM = this.viewport.getCTM()\r\n viewportCTM.e += point.x\r\n viewportCTM.f += point.y\r\n this.viewport.setCTM(viewportCTM)\r\n}\r\n\r\n/**\r\n * Get pan vector\r\n *\r\n * @return {Object} {x: 0, y: 0}\r\n */\r\nSvgPanZoom.prototype.getPan = function() {\r\n var state = this.viewport.getState()\r\n\r\n return {x: state.x, y: state.y}\r\n}\r\n\r\n/**\r\n * Recalculates cached svg dimensions and controls position\r\n */\r\nSvgPanZoom.prototype.resize = function() {\r\n // Get dimensions\r\n var boundingClientRectNormalized = SvgUtils.getBoundingClientRectNormalized(this.svg)\r\n this.width = boundingClientRectNormalized.width\r\n this.height = boundingClientRectNormalized.height\r\n\r\n // Reposition control icons by re-enabling them\r\n if (this.options.controlIconsEnabled) {\r\n this.getPublicInstance().disableControlIcons()\r\n this.getPublicInstance().enableControlIcons()\r\n }\r\n}\r\n\r\n/**\r\n * Unbind mouse events, free callbacks and destroy public instance\r\n */\r\nSvgPanZoom.prototype.destroy = function() {\r\n var that = this\r\n\r\n // Free callbacks\r\n this.beforeZoom = null\r\n this.onZoom = null\r\n this.beforePan = null\r\n this.onPan = null\r\n\r\n // Destroy custom event handlers\r\n if (this.options.customEventsHandler != null) { // jshint ignore:line\r\n this.options.customEventsHandler.destroy({\r\n svgElement: this.svg\r\n , eventsListenerElement: this.options.eventsListenerElement\r\n , instance: this.getPublicInstance()\r\n })\r\n }\r\n\r\n // Unbind eventListeners\r\n for (var event in this.eventListeners) {\r\n (this.options.eventsListenerElement || this.svg)\r\n .removeEventListener(event, this.eventListeners[event], false)\r\n }\r\n\r\n // Unbind wheelListener\r\n this.disableMouseWheelZoom()\r\n\r\n // Remove control icons\r\n this.getPublicInstance().disableControlIcons()\r\n\r\n // Reset zoom and pan\r\n this.reset()\r\n\r\n // Remove instance from instancesStore\r\n instancesStore = instancesStore.filter(function(instance){\r\n return instance.svg !== that.svg\r\n })\r\n\r\n // Delete options and its contents\r\n delete this.options\r\n\r\n // Destroy public instance and rewrite getPublicInstance\r\n delete this.publicInstance\r\n delete this.pi\r\n this.getPublicInstance = function(){\r\n return null\r\n }\r\n}\r\n\r\n/**\r\n * Returns a public instance object\r\n *\r\n * @return {Object} Public instance object\r\n */\r\nSvgPanZoom.prototype.getPublicInstance = function() {\r\n var that = this\r\n\r\n // Create cache\r\n if (!this.publicInstance) {\r\n this.publicInstance = this.pi = {\r\n // Pan\r\n enablePan: function() {that.options.panEnabled = true; return that.pi}\r\n , disablePan: function() {that.options.panEnabled = false; return that.pi}\r\n , isPanEnabled: function() {return !!that.options.panEnabled}\r\n , pan: function(point) {that.pan(point); return that.pi}\r\n , panBy: function(point) {that.panBy(point); return that.pi}\r\n , getPan: function() {return that.getPan()}\r\n // Pan event\r\n , setBeforePan: function(fn) {that.options.beforePan = fn === null ? null : Utils.proxy(fn, that.publicInstance); return that.pi}\r\n , setOnPan: function(fn) {that.options.onPan = fn === null ? null : Utils.proxy(fn, that.publicInstance); return that.pi}\r\n // Zoom and Control Icons\r\n , enableZoom: function() {that.options.zoomEnabled = true; return that.pi}\r\n , disableZoom: function() {that.options.zoomEnabled = false; return that.pi}\r\n , isZoomEnabled: function() {return !!that.options.zoomEnabled}\r\n , enableControlIcons: function() {\r\n if (!that.options.controlIconsEnabled) {\r\n that.options.controlIconsEnabled = true\r\n ControlIcons.enable(that)\r\n }\r\n return that.pi\r\n }\r\n , disableControlIcons: function() {\r\n if (that.options.controlIconsEnabled) {\r\n that.options.controlIconsEnabled = false;\r\n ControlIcons.disable(that)\r\n }\r\n return that.pi\r\n }\r\n , isControlIconsEnabled: function() {return !!that.options.controlIconsEnabled}\r\n // Double click zoom\r\n , enableDblClickZoom: function() {that.options.dblClickZoomEnabled = true; return that.pi}\r\n , disableDblClickZoom: function() {that.options.dblClickZoomEnabled = false; return that.pi}\r\n , isDblClickZoomEnabled: function() {return !!that.options.dblClickZoomEnabled}\r\n // Mouse wheel zoom\r\n , enableMouseWheelZoom: function() {that.enableMouseWheelZoom(); return that.pi}\r\n , disableMouseWheelZoom: function() {that.disableMouseWheelZoom(); return that.pi}\r\n , isMouseWheelZoomEnabled: function() {return !!that.options.mouseWheelZoomEnabled}\r\n // Zoom scale and bounds\r\n , setZoomScaleSensitivity: function(scale) {that.options.zoomScaleSensitivity = scale; return that.pi}\r\n , setMinZoom: function(zoom) {that.options.minZoom = zoom; return that.pi}\r\n , setMaxZoom: function(zoom) {that.options.maxZoom = zoom; return that.pi}\r\n // Zoom event\r\n , setBeforeZoom: function(fn) {that.options.beforeZoom = fn === null ? null : Utils.proxy(fn, that.publicInstance); return that.pi}\r\n , setOnZoom: function(fn) {that.options.onZoom = fn === null ? null : Utils.proxy(fn, that.publicInstance); return that.pi}\r\n // Zooming\r\n , zoom: function(scale) {that.publicZoom(scale, true); return that.pi}\r\n , zoomBy: function(scale) {that.publicZoom(scale, false); return that.pi}\r\n , zoomAtPoint: function(scale, point) {that.publicZoomAtPoint(scale, point, true); return that.pi}\r\n , zoomAtPointBy: function(scale, point) {that.publicZoomAtPoint(scale, point, false); return that.pi}\r\n , zoomIn: function() {this.zoomBy(1 + that.options.zoomScaleSensitivity); return that.pi}\r\n , zoomOut: function() {this.zoomBy(1 / (1 + that.options.zoomScaleSensitivity)); return that.pi}\r\n , getZoom: function() {return that.getRelativeZoom()}\r\n // Reset\r\n , resetZoom: function() {that.resetZoom(); return that.pi}\r\n , resetPan: function() {that.resetPan(); return that.pi}\r\n , reset: function() {that.reset(); return that.pi}\r\n // Fit, Contain and Center\r\n , fit: function() {that.fit(); return that.pi}\r\n , contain: function() {that.contain(); return that.pi}\r\n , center: function() {that.center(); return that.pi}\r\n // Size and Resize\r\n , updateBBox: function() {that.updateBBox(); return that.pi}\r\n , resize: function() {that.resize(); return that.pi}\r\n , getSizes: function() {\r\n return {\r\n width: that.width\r\n , height: that.height\r\n , realZoom: that.getZoom()\r\n , viewBox: that.viewport.getViewBox()\r\n }\r\n }\r\n // Destroy\r\n , destroy: function() {that.destroy(); return that.pi}\r\n }\r\n }\r\n\r\n return this.publicInstance\r\n}\r\n\r\n/**\r\n * Stores pairs of instances of SvgPanZoom and SVG\r\n * Each pair is represented by an object {svg: SVGSVGElement, instance: SvgPanZoom}\r\n *\r\n * @type {Array}\r\n */\r\nvar instancesStore = []\r\n\r\nvar svgPanZoom = function(elementOrSelector, options){\r\n var svg = Utils.getSvg(elementOrSelector)\r\n\r\n if (svg === null) {\r\n return null\r\n } else {\r\n // Look for existent instance\r\n for(var i = instancesStore.length - 1; i >= 0; i--) {\r\n if (instancesStore[i].svg === svg) {\r\n return instancesStore[i].instance.getPublicInstance()\r\n }\r\n }\r\n\r\n // If instance not found - create one\r\n instancesStore.push({\r\n svg: svg\r\n , instance: new SvgPanZoom(svg, options)\r\n })\r\n\r\n // Return just pushed instance\r\n return instancesStore[instancesStore.length - 1].instance.getPublicInstance()\r\n }\r\n}\r\n\r\nmodule.exports = svgPanZoom;\r\n\r\n},{\"./control-icons\":2,\"./shadow-viewport\":3,\"./svg-utilities\":5,\"./uniwheel\":6,\"./utilities\":7}],5:[function(require,module,exports){\r\nvar Utils = require('./utilities')\r\n , _browser = 'unknown'\r\n ;\r\n\r\n// http://stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-browser\r\nif (/*@cc_on!@*/false || !!document.documentMode) { // internet explorer\r\n _browser = 'ie';\r\n}\r\n\r\nmodule.exports = {\r\n svgNS: 'http://www.w3.org/2000/svg'\r\n, xmlNS: 'http://www.w3.org/XML/1998/namespace'\r\n, xmlnsNS: 'http://www.w3.org/2000/xmlns/'\r\n, xlinkNS: 'http://www.w3.org/1999/xlink'\r\n, evNS: 'http://www.w3.org/2001/xml-events'\r\n\r\n /**\r\n * Get svg dimensions: width and height\r\n *\r\n * @param {SVGSVGElement} svg\r\n * @return {Object} {width: 0, height: 0}\r\n */\r\n, getBoundingClientRectNormalized: function(svg) {\r\n if (svg.clientWidth && svg.clientHeight) {\r\n return {width: svg.clientWidth, height: svg.clientHeight}\r\n } else if (!!svg.getBoundingClientRect()) {\r\n return svg.getBoundingClientRect();\r\n } else {\r\n throw new Error('Cannot get BoundingClientRect for SVG.');\r\n }\r\n }\r\n\r\n /**\r\n * Gets g element with class of \"viewport\" or creates it if it doesn't exist\r\n *\r\n * @param {SVGSVGElement} svg\r\n * @return {SVGElement} g (group) element\r\n */\r\n, getOrCreateViewport: function(svg, selector) {\r\n var viewport = null\r\n\r\n if (Utils.isElement(selector)) {\r\n viewport = selector\r\n } else {\r\n viewport = svg.querySelector(selector)\r\n }\r\n\r\n // Check if there is just one main group in SVG\r\n if (!viewport) {\r\n var childNodes = Array.prototype.slice.call(svg.childNodes || svg.children).filter(function(el){\r\n return el.nodeName !== 'defs' && el.nodeName !== '#text'\r\n })\r\n\r\n // Node name should be SVGGElement and should have no transform attribute\r\n // Groups with transform are not used as viewport because it involves parsing of all transform possibilities\r\n if (childNodes.length === 1 && childNodes[0].nodeName === 'g' && childNodes[0].getAttribute('transform') === null) {\r\n viewport = childNodes[0]\r\n }\r\n }\r\n\r\n // If no favorable group element exists then create one\r\n if (!viewport) {\r\n var viewportId = 'viewport-' + new Date().toISOString().replace(/\\D/g, '');\r\n viewport = document.createElementNS(this.svgNS, 'g');\r\n viewport.setAttribute('id', viewportId);\r\n\r\n // Internet Explorer (all versions?) can't use childNodes, but other browsers prefer (require?) using childNodes\r\n var svgChildren = svg.childNodes || svg.children;\r\n if (!!svgChildren && svgChildren.length > 0) {\r\n for (var i = svgChildren.length; i > 0; i--) {\r\n // Move everything into viewport except defs\r\n if (svgChildren[svgChildren.length - i].nodeName !== 'defs') {\r\n viewport.appendChild(svgChildren[svgChildren.length - i]);\r\n }\r\n }\r\n }\r\n svg.appendChild(viewport);\r\n }\r\n\r\n // Parse class names\r\n var classNames = [];\r\n if (viewport.getAttribute('class')) {\r\n classNames = viewport.getAttribute('class').split(' ')\r\n }\r\n\r\n // Set class (if not set already)\r\n if (!~classNames.indexOf('svg-pan-zoom_viewport')) {\r\n classNames.push('svg-pan-zoom_viewport')\r\n viewport.setAttribute('class', classNames.join(' '))\r\n }\r\n\r\n return viewport\r\n }\r\n\r\n /**\r\n * Set SVG attributes\r\n *\r\n * @param {SVGSVGElement} svg\r\n */\r\n , setupSvgAttributes: function(svg) {\r\n // Setting default attributes\r\n svg.setAttribute('xmlns', this.svgNS);\r\n svg.setAttributeNS(this.xmlnsNS, 'xmlns:xlink', this.xlinkNS);\r\n svg.setAttributeNS(this.xmlnsNS, 'xmlns:ev', this.evNS);\r\n\r\n // Needed for Internet Explorer, otherwise the viewport overflows\r\n if (svg.parentNode !== null) {\r\n var style = svg.getAttribute('style') || '';\r\n if (style.toLowerCase().indexOf('overflow') === -1) {\r\n svg.setAttribute('style', 'overflow: hidden; ' + style);\r\n }\r\n }\r\n }\r\n\r\n/**\r\n * How long Internet Explorer takes to finish updating its display (ms).\r\n */\r\n, internetExplorerRedisplayInterval: 300\r\n\r\n/**\r\n * Forces the browser to redisplay all SVG elements that rely on an\r\n * element defined in a 'defs' section. It works globally, for every\r\n * available defs element on the page.\r\n * The throttling is intentionally global.\r\n *\r\n * This is only needed for IE. It is as a hack to make markers (and 'use' elements?)\r\n * visible after pan/zoom when there are multiple SVGs on the page.\r\n * See bug report: https://connect.microsoft.com/IE/feedback/details/781964/\r\n * also see svg-pan-zoom issue: https://github.com/ariutta/svg-pan-zoom/issues/62\r\n */\r\n, refreshDefsGlobal: Utils.throttle(function() {\r\n var allDefs = document.querySelectorAll('defs');\r\n var allDefsCount = allDefs.length;\r\n for (var i = 0; i < allDefsCount; i++) {\r\n var thisDefs = allDefs[i];\r\n thisDefs.parentNode.insertBefore(thisDefs, thisDefs);\r\n }\r\n }, this.internetExplorerRedisplayInterval)\r\n\r\n /**\r\n * Sets the current transform matrix of an element\r\n *\r\n * @param {SVGElement} element\r\n * @param {SVGMatrix} matrix CTM\r\n * @param {SVGElement} defs\r\n */\r\n, setCTM: function(element, matrix, defs) {\r\n var that = this\r\n , s = 'matrix(' + matrix.a + ',' + matrix.b + ',' + matrix.c + ',' + matrix.d + ',' + matrix.e + ',' + matrix.f + ')';\r\n\r\n element.setAttributeNS(null, 'transform', s);\r\n if ('transform' in element.style) {\r\n element.style.transform = s;\r\n } else if ('-ms-transform' in element.style) {\r\n element.style['-ms-transform'] = s;\r\n } else if ('-webkit-transform' in element.style) {\r\n element.style['-webkit-transform'] = s;\r\n }\r\n\r\n // IE has a bug that makes markers disappear on zoom (when the matrix \"a\" and/or \"d\" elements change)\r\n // see http://stackoverflow.com/questions/17654578/svg-marker-does-not-work-in-ie9-10\r\n // and http://srndolha.wordpress.com/2013/11/25/svg-line-markers-may-disappear-in-internet-explorer-11/\r\n if (_browser === 'ie' && !!defs) {\r\n // this refresh is intended for redisplaying the SVG during zooming\r\n defs.parentNode.insertBefore(defs, defs);\r\n // this refresh is intended for redisplaying the other SVGs on a page when panning a given SVG\r\n // it is also needed for the given SVG itself, on zoomEnd, if the SVG contains any markers that\r\n // are located under any other element(s).\r\n window.setTimeout(function() {\r\n that.refreshDefsGlobal();\r\n }, that.internetExplorerRedisplayInterval);\r\n }\r\n }\r\n\r\n /**\r\n * Instantiate an SVGPoint object with given event coordinates\r\n *\r\n * @param {Event} evt\r\n * @param {SVGSVGElement} svg\r\n * @return {SVGPoint} point\r\n */\r\n, getEventPoint: function(evt, svg) {\r\n var point = svg.createSVGPoint()\r\n\r\n Utils.mouseAndTouchNormalize(evt, svg)\r\n\r\n point.x = evt.clientX\r\n point.y = evt.clientY\r\n\r\n return point\r\n }\r\n\r\n /**\r\n * Get SVG center point\r\n *\r\n * @param {SVGSVGElement} svg\r\n * @return {SVGPoint}\r\n */\r\n, getSvgCenterPoint: function(svg, width, height) {\r\n return this.createSVGPoint(svg, width / 2, height / 2)\r\n }\r\n\r\n /**\r\n * Create a SVGPoint with given x and y\r\n *\r\n * @param {SVGSVGElement} svg\r\n * @param {Number} x\r\n * @param {Number} y\r\n * @return {SVGPoint}\r\n */\r\n, createSVGPoint: function(svg, x, y) {\r\n var point = svg.createSVGPoint()\r\n point.x = x\r\n point.y = y\r\n\r\n return point\r\n }\r\n}\r\n\r\n},{\"./utilities\":7}],6:[function(require,module,exports){\r\n// uniwheel 0.1.2 (customized)\r\n// A unified cross browser mouse wheel event handler\r\n// https://github.com/teemualap/uniwheel\r\n\r\nmodule.exports = (function(){\r\n\r\n //Full details: https://developer.mozilla.org/en-US/docs/Web/Reference/Events/wheel\r\n\r\n var prefix = \"\", _addEventListener, _removeEventListener, onwheel, support, fns = [];\r\n\r\n // detect event model\r\n if ( window.addEventListener ) {\r\n _addEventListener = \"addEventListener\";\r\n _removeEventListener = \"removeEventListener\";\r\n } else {\r\n _addEventListener = \"attachEvent\";\r\n _removeEventListener = \"detachEvent\";\r\n prefix = \"on\";\r\n }\r\n\r\n // detect available wheel event\r\n support = \"onwheel\" in document.createElement(\"div\") ? \"wheel\" : // Modern browsers support \"wheel\"\r\n document.onmousewheel !== undefined ? \"mousewheel\" : // Webkit and IE support at least \"mousewheel\"\r\n \"DOMMouseScroll\"; // let's assume that remaining browsers are older Firefox\r\n\r\n\r\n function createCallback(element,callback,capture) {\r\n\r\n var fn = function(originalEvent) {\r\n\r\n !originalEvent && ( originalEvent = window.event );\r\n\r\n // create a normalized event object\r\n var event = {\r\n // keep a ref to the original event object\r\n originalEvent: originalEvent,\r\n target: originalEvent.target || originalEvent.srcElement,\r\n type: \"wheel\",\r\n deltaMode: originalEvent.type == \"MozMousePixelScroll\" ? 0 : 1,\r\n deltaX: 0,\r\n delatZ: 0,\r\n preventDefault: function() {\r\n originalEvent.preventDefault ?\r\n originalEvent.preventDefault() :\r\n originalEvent.returnValue = false;\r\n }\r\n };\r\n\r\n // calculate deltaY (and deltaX) according to the event\r\n if ( support == \"mousewheel\" ) {\r\n event.deltaY = - 1/40 * originalEvent.wheelDelta;\r\n // Webkit also support wheelDeltaX\r\n originalEvent.wheelDeltaX && ( event.deltaX = - 1/40 * originalEvent.wheelDeltaX );\r\n } else {\r\n event.deltaY = originalEvent.detail;\r\n }\r\n\r\n // it's time to fire the callback\r\n return callback( event );\r\n\r\n };\r\n\r\n fns.push({\r\n element: element,\r\n fn: fn,\r\n capture: capture\r\n });\r\n\r\n return fn;\r\n }\r\n\r\n function getCallback(element,capture) {\r\n for (var i = 0; i < fns.length; i++) {\r\n if (fns[i].element === element && fns[i].capture === capture) {\r\n return fns[i].fn;\r\n }\r\n }\r\n return function(){};\r\n }\r\n\r\n function removeCallback(element,capture) {\r\n for (var i = 0; i < fns.length; i++) {\r\n if (fns[i].element === element && fns[i].capture === capture) {\r\n return fns.splice(i,1);\r\n }\r\n }\r\n }\r\n\r\n function _addWheelListener( elem, eventName, callback, useCapture ) {\r\n\r\n var cb;\r\n\r\n if (support === \"wheel\") {\r\n cb = callback;\r\n } else {\r\n cb = createCallback(elem,callback,useCapture);\r\n }\r\n\r\n elem[ _addEventListener ]( prefix + eventName, cb, useCapture || false );\r\n\r\n }\r\n\r\n function _removeWheelListener( elem, eventName, callback, useCapture ) {\r\n\r\n if (support === \"wheel\") {\r\n cb = callback;\r\n } else {\r\n cb = getCallback(elem,useCapture);\r\n }\r\n\r\n elem[ _removeEventListener ]( prefix + eventName, cb, useCapture || false );\r\n\r\n removeCallback(elem,useCapture);\r\n\r\n }\r\n\r\n function addWheelListener( elem, callback, useCapture ) {\r\n _addWheelListener( elem, support, callback, useCapture );\r\n\r\n // handle MozMousePixelScroll in older Firefox\r\n if( support == \"DOMMouseScroll\" ) {\r\n _addWheelListener( elem, \"MozMousePixelScroll\", callback, useCapture);\r\n }\r\n }\r\n\r\n function removeWheelListener(elem,callback,useCapture){\r\n _removeWheelListener(elem,support,callback,useCapture);\r\n\r\n // handle MozMousePixelScroll in older Firefox\r\n if( support == \"DOMMouseScroll\" ) {\r\n _removeWheelListener(elem, \"MozMousePixelScroll\", callback, useCapture);\r\n }\r\n }\r\n\r\n return {\r\n on: addWheelListener,\r\n off: removeWheelListener\r\n };\r\n\r\n})();\r\n\r\n},{}],7:[function(require,module,exports){\r\nmodule.exports = {\r\n /**\r\n * Extends an object\r\n *\r\n * @param {Object} target object to extend\r\n * @param {Object} source object to take properties from\r\n * @return {Object} extended object\r\n */\r\n extend: function(target, source) {\r\n target = target || {};\r\n for (var prop in source) {\r\n // Go recursively\r\n if (this.isObject(source[prop])) {\r\n target[prop] = this.extend(target[prop], source[prop])\r\n } else {\r\n target[prop] = source[prop]\r\n }\r\n }\r\n return target;\r\n }\r\n\r\n /**\r\n * Checks if an object is a DOM element\r\n *\r\n * @param {Object} o HTML element or String\r\n * @return {Boolean} returns true if object is a DOM element\r\n */\r\n, isElement: function(o){\r\n return (\r\n o instanceof HTMLElement || o instanceof SVGElement || o instanceof SVGSVGElement || //DOM2\r\n (o && typeof o === 'object' && o !== null && o.nodeType === 1 && typeof o.nodeName === 'string')\r\n );\r\n }\r\n\r\n /**\r\n * Checks if an object is an Object\r\n *\r\n * @param {Object} o Object\r\n * @return {Boolean} returns true if object is an Object\r\n */\r\n, isObject: function(o){\r\n return Object.prototype.toString.call(o) === '[object Object]';\r\n }\r\n\r\n /**\r\n * Checks if variable is Number\r\n *\r\n * @param {Integer|Float} n\r\n * @return {Boolean} returns true if variable is Number\r\n */\r\n, isNumber: function(n) {\r\n return !isNaN(parseFloat(n)) && isFinite(n);\r\n }\r\n\r\n /**\r\n * Search for an SVG element\r\n *\r\n * @param {Object|String} elementOrSelector DOM Element or selector String\r\n * @return {Object|Null} SVG or null\r\n */\r\n, getSvg: function(elementOrSelector) {\r\n var element\r\n , svg;\r\n\r\n if (!this.isElement(elementOrSelector)) {\r\n // If selector provided\r\n if (typeof elementOrSelector === 'string' || elementOrSelector instanceof String) {\r\n // Try to find the element\r\n element = document.querySelector(elementOrSelector)\r\n\r\n if (!element) {\r\n throw new Error('Provided selector did not find any elements. Selector: ' + elementOrSelector)\r\n return null\r\n }\r\n } else {\r\n throw new Error('Provided selector is not an HTML object nor String')\r\n return null\r\n }\r\n } else {\r\n element = elementOrSelector\r\n }\r\n\r\n if (element.tagName.toLowerCase() === 'svg') {\r\n svg = element;\r\n } else {\r\n if (element.tagName.toLowerCase() === 'object') {\r\n svg = element.contentDocument.documentElement;\r\n } else {\r\n if (element.tagName.toLowerCase() === 'embed') {\r\n svg = element.getSVGDocument().documentElement;\r\n } else {\r\n if (element.tagName.toLowerCase() === 'img') {\r\n throw new Error('Cannot script an SVG in an \"img\" element. Please use an \"object\" element or an in-line SVG.');\r\n } else {\r\n throw new Error('Cannot get SVG.');\r\n }\r\n return null\r\n }\r\n }\r\n }\r\n\r\n return svg\r\n }\r\n\r\n /**\r\n * Attach a given context to a function\r\n * @param {Function} fn Function\r\n * @param {Object} context Context\r\n * @return {Function} Function with certain context\r\n */\r\n, proxy: function(fn, context) {\r\n return function() {\r\n return fn.apply(context, arguments)\r\n }\r\n }\r\n\r\n /**\r\n * Returns object type\r\n * Uses toString that returns [object SVGPoint]\r\n * And than parses object type from string\r\n *\r\n * @param {Object} o Any object\r\n * @return {String} Object type\r\n */\r\n, getType: function(o) {\r\n return Object.prototype.toString.apply(o).replace(/^\\[object\\s/, '').replace(/\\]$/, '')\r\n }\r\n\r\n /**\r\n * If it is a touch event than add clientX and clientY to event object\r\n *\r\n * @param {Event} evt\r\n * @param {SVGSVGElement} svg\r\n */\r\n, mouseAndTouchNormalize: function(evt, svg) {\r\n // If no cilentX and but touch objects are available\r\n if (evt.clientX === void 0 || evt.clientX === null) {\r\n // Fallback\r\n evt.clientX = 0\r\n evt.clientY = 0\r\n\r\n // If it is a touch event\r\n if (evt.changedTouches !== void 0 && evt.changedTouches.length) {\r\n // If touch event has changedTouches\r\n if (evt.changedTouches[0].clientX !== void 0) {\r\n evt.clientX = evt.changedTouches[0].clientX\r\n evt.clientY = evt.changedTouches[0].clientY\r\n }\r\n // If changedTouches has pageX attribute\r\n else if (evt.changedTouches[0].pageX !== void 0) {\r\n var rect = svg.getBoundingClientRect();\r\n\r\n evt.clientX = evt.changedTouches[0].pageX - rect.left\r\n evt.clientY = evt.changedTouches[0].pageY - rect.top\r\n }\r\n // If it is a custom event\r\n } else if (evt.originalEvent !== void 0) {\r\n if (evt.originalEvent.clientX !== void 0) {\r\n evt.clientX = evt.originalEvent.clientX\r\n evt.clientY = evt.originalEvent.clientY\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Check if an event is a double click/tap\r\n * TODO: For touch gestures use a library (hammer.js) that takes in account other events\r\n * (touchmove and touchend). It should take in account tap duration and traveled distance\r\n *\r\n * @param {Event} evt\r\n * @param {Event} prevEvt Previous Event\r\n * @return {Boolean}\r\n */\r\n, isDblClick: function(evt, prevEvt) {\r\n // Double click detected by browser\r\n if (evt.detail === 2) {\r\n return true;\r\n }\r\n // Try to compare events\r\n else if (prevEvt !== void 0 && prevEvt !== null) {\r\n var timeStampDiff = evt.timeStamp - prevEvt.timeStamp // should be lower than 250 ms\r\n , touchesDistance = Math.sqrt(Math.pow(evt.clientX - prevEvt.clientX, 2) + Math.pow(evt.clientY - prevEvt.clientY, 2))\r\n\r\n return timeStampDiff < 250 && touchesDistance < 10\r\n }\r\n\r\n // Nothing found\r\n return false;\r\n }\r\n\r\n /**\r\n * Returns current timestamp as an integer\r\n *\r\n * @return {Number}\r\n */\r\n, now: Date.now || function() {\r\n return new Date().getTime();\r\n }\r\n\r\n // From underscore.\r\n // Returns a function, that, when invoked, will only be triggered at most once\r\n // during a given window of time. Normally, the throttled function will run\r\n // as much as it can, without ever going more than once per `wait` duration;\r\n // but if you'd like to disable the execution on the leading edge, pass\r\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\r\n// jscs:disable\r\n// jshint ignore:start\r\n, throttle: function(func, wait, options) {\r\n var that = this;\r\n var context, args, result;\r\n var timeout = null;\r\n var previous = 0;\r\n if (!options) options = {};\r\n var later = function() {\r\n previous = options.leading === false ? 0 : that.now();\r\n timeout = null;\r\n result = func.apply(context, args);\r\n if (!timeout) context = args = null;\r\n };\r\n return function() {\r\n var now = that.now();\r\n if (!previous && options.leading === false) previous = now;\r\n var remaining = wait - (now - previous);\r\n context = this;\r\n args = arguments;\r\n if (remaining <= 0 || remaining > wait) {\r\n clearTimeout(timeout);\r\n timeout = null;\r\n previous = now;\r\n result = func.apply(context, args);\r\n if (!timeout) context = args = null;\r\n } else if (!timeout && options.trailing !== false) {\r\n timeout = setTimeout(later, remaining);\r\n }\r\n return result;\r\n };\r\n }\r\n// jshint ignore:end\r\n// jscs:enable\r\n\r\n /**\r\n * Create a requestAnimationFrame simulation\r\n *\r\n * @param {Number|String} refreshRate\r\n * @return {Function}\r\n */\r\n, createRequestAnimationFrame: function(refreshRate) {\r\n var timeout = null\r\n\r\n // Convert refreshRate to timeout\r\n if (refreshRate !== 'auto' && refreshRate < 60 && refreshRate > 1) {\r\n timeout = Math.floor(1000 / refreshRate)\r\n }\r\n\r\n if (timeout === null) {\r\n return window.requestAnimationFrame || requestTimeout(33)\r\n } else {\r\n return requestTimeout(timeout)\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Create a callback that will execute after a given timeout\r\n *\r\n * @param {Function} timeout\r\n * @return {Function}\r\n */\r\nfunction requestTimeout(timeout) {\r\n return function(callback) {\r\n window.setTimeout(callback, timeout)\r\n }\r\n}\r\n\r\n},{}]},{},[1]);\r\n"],"sourceRoot":"/source/"}