{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./cartridges/app_custom_core/cartridge/client/default/js/spritespin.js","webpack:///./cartridges/app_custom_core/cartridge/client/default/js/components/spritespin.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","$","document","ready","Api","data","this","extendApi","methods","api","Error","canvas","context","img","$$1","window","jQuery","getCursorPosition","event","touches","source","undefined","originalEvent","length","x","clientX","y","clientY","detectSubsampling","width","height","createElement","getContext","fillStyle","fillRect","drawImage","dat","getImageData","err","getOuterSize","Math","floor","frameWidth","target","innerWidth","frameHeight","innerHeight","aspect","getComputedSize","size","getComputedStyle","style","Number","replace","getInnerSize","getInnerLayout","inner","outer","isFit","isFill","layout","top","left","bottom","right","position","overflow","aspectIsGreater","naturalSize","image","naturalWidth","naturalHeight","Image","src","measure","images","options","measureSheet","framesX","framesY","result","id","sheet","frames","push","measureMutipleSheets","measureFrames","sprites","isSubsampled","sampledWidth","sampledHeight","measureImage","ceil","divisor","sampledX","sampledY","findSpecs","metrics","frame","lane","spriteId","sheetId","sprite","indexOf","element","arr","noop","preload","opts","input","targetCount","preloadCount","onInitiated","initiated","onProgress","progress","onComplete","complete","count","completed","firstLoaded","tick","index","loaded","total","percent","round","_i","src_1","url","onload","onabort","onerror","padNumber","num","pad","String","sourceArray","template","digits","lPlacer","lanePlacer","fPlacer","framePlacer","fStart","fEnd","lStart","lEnd","namespace","eventNames","callbackNames","eventsToPrevent","defaults","lanes","sizeMode","renderer","frameTime","animate","retainAnimate","reverse","loop","stopFrame","wrap","wrapLane","sense","senseLane","orientation","touchScrollTimer","responsive","plugins","noop$1","wrapConsole","type","console","args","arguments","log","apply","warn","error","toArray","Array","isArray","clamp","min","max","prevent","e","preventDefault","func","spritespin","unbind","pixelRatio","devicePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","_Utils","freeze","isFunction","fn","applyLayout","attr","css","stage","hide","canvasRatio","scale","getState","state","getPluginState","is","flag","getPlaybackState","updateAnimation","handler","updateBefore","stopAnimation","updateAnimationFrame","updateAfter","lastFrame","lastLane","trigger","updateFrame","updateInputFrame","updateLane","clearInterval","applyAnimation","setInterval","startAnimation","registerPlugin","plugin","getPlugin","applyPlugins","mods","behavior","fixPlugins","name_1","$$2","counter","instances","eachInstance","cb","lazyinit","onResize","boot","_loop_1","eventName","_a","module_1","onEvent","eventNames_1","resizeTimeout","on","clearTimeout","setTimeout","applyEvents","eventsToPrevent_1","eName","_b","_c","eventNames_2","_d","callbackNames_1","_e","callbackNames_2","loading","addClass","spec","applyMetrics","show","removeClass","_this","extend","find","each","empty","append","pushInstance","createOrUpdate","destroy","popInstance","html","removeData","getInputState","updateInput","cursor","oldX","currentX","oldY","currentY","startX","startY","clickframe","clicklane","dX","dY","ddX","ddY","ndX","ndY","nddX","nddY","resetInput","pick","names","names_1","option","$target","isPlaying","isLooping","toggleAnimation","currentFrame","skipFrames","step","nextFrame","prevFrame","playTo","force","nearest","a","b","abs","browser","documentElement","changeEvent","unbindChangeEvent","unbindOrientationEvent","fullscreenElement","isFullscreen","requestFullscreen","oWidth","oHeight","oSource","oSize","oResponsive","enter","screen","callback","bindChangeEvent","fullscreenEnabled","exitFullscreen","toggleFullscreen","apiRequestFullscreen","click","half","pos","offset","mouseup","touchend","getState$$1","onInit","minTime","maxTime","dragStart","zoomPinFrame","now","Date","getTime","endAt","startAt","wasPlaying","dragEnd","drag","rad","PI","getAxis","sn","sin","cs","cos","mousedown","mousemove","documentmousemove","documentmouseup","touchstart","touchmove","touchcancel","mouseleave","start","rememberOptions","stop","restoreOptions","update","delta","onFrame","getOption","fallback","end","dS","dF","snap","fling","onLoad","wheel","we","signX","deltaX","signY","deltaY","NAME","appendTo","text","fadeIn","fadeOut","onDestroy","remove","detach","onDraw","specs","w","h","clearRect","scaleX","scaleY","toRemove","timeout","killLoop","clearFrame","steps","live","alpha","drawFrame","cssBlur","blur","filter","applyCssBlur","toRemove_1","item","splice","removeOldFrames","globalAlpha","fadeTime","trackTime","onFrameChanged","ani","unshift","trackFrame","samples","time","maxSamples","shift","sampleInput","last","samples_1","sample","dt","abortTime","laneStep","updateTime","frameStep","damping","offsets","speed","opacity","prependTo","naturalSize$$1","innerSize","outerSize","duration","isDragging","px","py","updateInput$$1","pinFrame","dx","dy","match","onClick","useClick","clickTime","doubleClickTime","toggleZoom","onMove","showZoom","hideZoom","useWheel","top_1","Utils","registerModule","factory"],"mappings":"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","file":"default/js/spritespin.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 155);\n","'use strict';\n\n\n$(document).ready(function () {\n require('./components/spritespin');\n});\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (factory((global.SpriteSpin = {})));\n}(this, (function (exports) {\n 'use strict';\n\n /**\n * @internal\n */\n var Api = /** @class */ (function () {\n function Api(data) {\n this.data = data;\n }\n return Api;\n }());\n /**\n * Adds methods to the SpriteSpin api\n *\n * @public\n */\n function extendApi(methods) {\n var api = Api.prototype;\n for (var key in methods) {\n if (methods.hasOwnProperty(key)) {\n if (api[key]) {\n throw new Error('API method is already defined: ' + key);\n } else {\n api[key] = methods[key];\n }\n }\n }\n return api;\n }\n\n var $$1 = window.jQuery || window.$;\n\n function getCursorPosition(event) {\n var touches = event.touches;\n var source = event;\n // jQuery Event normalization does not preserve the 'event.touches'\n // try to grab touches from the original event\n if (event.touches === undefined && event.originalEvent !== undefined) {\n touches = event.originalEvent.touches;\n }\n // get current touch or mouse position\n if (touches !== undefined && touches.length > 0) {\n source = touches[0];\n }\n return {\n x: source.clientX || 0,\n y: source.clientY || 0\n };\n }\n\n var canvas;\n var context;\n function detectionContext() {\n if (context) {\n return context;\n }\n if (!canvas) {\n canvas = document.createElement('canvas');\n }\n if (!canvas || !canvas.getContext) {\n return null;\n }\n context = canvas.getContext('2d');\n return context;\n }\n /**\n * Idea taken from https://github.com/stomita/ios-imagefile-megapixel\n * Detects whether the image has been sub sampled by the browser and does not have its original dimensions.\n * This method unfortunately does not work for images that have transparent background.\n */\n function detectSubsampling(img, width, height) {\n if (!detectionContext()) {\n return false;\n }\n // sub sampling happens on images above 1 megapixel\n if (width * height <= 1024 * 1024) {\n return false;\n }\n // set canvas to 1x1 pixel size and fill it with magenta color\n canvas.width = canvas.height = 1;\n context.fillStyle = '#FF00FF';\n context.fillRect(0, 0, 1, 1);\n // render the image with a negative offset to the left so that it would\n // fill the canvas pixel with the top right pixel of the image.\n context.drawImage(img, -width + 1, 0);\n // check color value to confirm image is covering edge pixel or not.\n // if color still magenta, the image is assumed to be sub sampled.\n try {\n var dat = context.getImageData(0, 0, 1, 1).data;\n return (dat[0] === 255) && (dat[1] === 0) && (dat[2] === 255);\n } catch (err) {\n // avoids cross origin exception for chrome when code runs without a server\n return false;\n }\n }\n\n /**\n *\n */\n function getOuterSize(data) {\n var width = Math.floor(data.width || data.frameWidth || data.target.innerWidth());\n var height = Math.floor(data.height || data.frameHeight || data.target.innerHeight());\n return {\n aspect: width / height,\n height: height,\n width: width\n };\n }\n function getComputedSize(data) {\n var size = getOuterSize(data);\n if (typeof window.getComputedStyle !== 'function') {\n return size;\n }\n var style = window.getComputedStyle(data.target[0]);\n if (!style.width) {\n return size;\n }\n size.width = Math.floor(Number(style.width.replace('px', '')));\n size.height = Math.floor(size.width / size.aspect);\n return size;\n }\n /**\n *\n */\n function getInnerSize(data) {\n var width = Math.floor(data.frameWidth || data.width || data.target.innerWidth());\n var height = Math.floor(data.frameHeight || data.height || data.target.innerHeight());\n return {\n aspect: width / height,\n height: height,\n width: width\n };\n }\n /**\n *\n */\n function getInnerLayout(mode, inner, outer) {\n // get mode\n var isFit = mode === 'fit';\n var isFill = mode === 'fill';\n var isMatch = mode === 'stretch';\n // resulting layout\n var layout = {\n width: '100%',\n height: '100%',\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n position: 'absolute',\n overflow: 'hidden'\n };\n // no calculation here\n if (!mode || isMatch) {\n return layout;\n }\n // get size and aspect\n var aspectIsGreater = inner.aspect >= outer.aspect;\n // mode == original\n var width = inner.width;\n var height = inner.height;\n // keep aspect ratio but fit/fill into container\n if (isFit && aspectIsGreater || isFill && !aspectIsGreater) {\n width = outer.width;\n height = outer.width / inner.aspect;\n }\n if (isFill && aspectIsGreater || isFit && !aspectIsGreater) {\n height = outer.height;\n width = outer.height * inner.aspect;\n }\n // floor the numbers\n width = Math.floor(width);\n height = Math.floor(height);\n // position in center\n layout.width = width;\n layout.height = height;\n layout.top = Math.floor((outer.height - height) / 2);\n layout.left = Math.floor((outer.width - width) / 2);\n layout.right = layout.left;\n layout.bottom = layout.top;\n return layout;\n }\n\n var img;\n /**\n * gets the original width and height of an image element\n */\n function naturalSize(image) {\n // for browsers that support naturalWidth and naturalHeight properties\n if (image.naturalWidth) {\n return {\n height: image.naturalHeight,\n width: image.naturalWidth\n };\n }\n // browsers that do not support naturalWidth and naturalHeight properties have to fall back to the width and\n // height properties. However, the image might have a css style applied so width and height would return the\n // css size. To avoid thet create a new Image object that is free of css rules and grab width and height\n // properties\n //\n // assume that the src has already been downloaded, so no onload callback is needed.\n img = img || new Image();\n img.src = image.src;\n return {\n height: img.height,\n width: img.width\n };\n }\n\n /**\n * Measures the image frames that are used in the given data object\n */\n function measure(images, options) {\n if (images.length === 1) {\n return [measureSheet(images[0], options)];\n } else if (options.framesX && options.framesY) {\n return measureMutipleSheets(images, options);\n }\n\n return measureFrames(images, options);\n }\n function measureSheet(image, options) {\n var result = { id: 0, sprites: [] };\n measureImage(image, options, result);\n var frames = options.frames;\n var framesX = Number(options.framesX) || frames;\n var framesY = Math.ceil(frames / framesX);\n var frameWidth = Math.floor(result.width / framesX);\n var frameHeight = Math.floor(result.height / framesY);\n var divisor = result.isSubsampled ? 2 : 1;\n for (var i = 0; i < frames; i++) {\n var x = (i % framesX) * frameWidth;\n var y = Math.floor(i / framesX) * frameHeight;\n result.sprites.push({\n id: i,\n x: x,\n y: y,\n width: frameWidth,\n height: frameHeight,\n sampledX: x / divisor,\n sampledY: y / divisor,\n sampledWidth: frameWidth / divisor,\n sampledHeight: frameHeight / divisor\n });\n }\n return result;\n }\n function measureFrames(images, options) {\n var result = [];\n for (var id = 0; id < images.length; id++) {\n // TODO: optimize\n // dont measure images with same size twice\n var sheet = measureSheet(images[id], { frames: 1, framesX: 1, detectSubsampling: options.detectSubsampling });\n sheet.id = id;\n result.push(sheet);\n }\n return result;\n }\n function measureMutipleSheets(images, options) {\n var result = [];\n for (var id = 0; id < images.length; id++) {\n // TODO: optimize\n // dont measure images with same size twice\n var sheet = measureSheet(images[id], {\n frames: undefined,\n framesX: options.framesX,\n framesY: options.framesY,\n detectSubsampling: options.detectSubsampling\n });\n sheet.id = id;\n result.push(sheet);\n }\n return result;\n }\n function measureImage(image, options, result) {\n var size = naturalSize(image);\n result.isSubsampled = options.detectSubsampling && detectSubsampling(image, size.width, size.height);\n result.width = size.width;\n result.height = size.height;\n result.sampledWidth = size.width / (result.isSubsampled ? 2 : 1);\n result.sampledHeight = size.height / (result.isSubsampled ? 2 : 1);\n return result;\n }\n function findSpecs(metrics, frames, frame, lane) {\n var spriteId = lane * frames + frame;\n var sheetId = 0;\n var sprite = null;\n var sheet = null;\n while (true) {\n sheet = metrics[sheetId];\n if (!sheet) {\n break;\n }\n if (spriteId >= sheet.sprites.length) {\n spriteId -= sheet.sprites.length;\n sheetId++;\n continue;\n }\n sprite = sheet.sprites[spriteId];\n break;\n }\n return { sprite: sprite, sheet: sheet };\n }\n\n function indexOf(element, arr) {\n for (var i = 0; i < arr.length; i++) {\n if (arr[i] === element) {\n return i;\n }\n }\n }\n function noop() {\n //\n }\n function preload(opts) {\n var src;\n var input = opts.source;\n src = typeof input === 'string' ? [input] : input;\n // const src: string[] = ? [opts.source] : opts.source\n var images = [];\n var targetCount = (opts.preloadCount || src.length);\n var onInitiated = opts.initiated || noop;\n var onProgress = opts.progress || noop;\n var onComplete = opts.complete || noop;\n var count = 0;\n var completed = false;\n var firstLoaded = false;\n var tick = function () {\n count += 1;\n onProgress({\n index: indexOf(this, images),\n loaded: count,\n total: src.length,\n percent: Math.round((count / src.length) * 100)\n });\n firstLoaded = firstLoaded || (this === images[0]);\n if (firstLoaded && !completed && (count >= targetCount)) {\n completed = true;\n onComplete(images);\n }\n };\n for (var _i = 0, src_1 = src; _i < src_1.length; _i++) {\n var url = src_1[_i];\n var img = new Image();\n // push result\n images.push(img);\n // bind logic, dont care about abort/errors\n img.onload = img.onabort = img.onerror = tick;\n // begin load\n img.src = url;\n }\n onInitiated(images);\n }\n\n function padNumber(num, length, pad) {\n var result = String(num);\n while (result.length < length) {\n result = String(pad) + result;\n }\n return result;\n }\n /**\n * Generates an array of source strings\n *\n * @remarks\n * Takes a template string and generates an array of strings by interpolating {lane} and {frame} placeholders.\n *\n * ```\n * sourceArray('http://example.com/image_{frame}.jpg, { frame: [1, 3], digits: 2 })\n * // gives:\n * // [ 'http://example.com/image_01.jpg', 'http://example.com/image_02.jpg', 'http://example.com/image_03.jpg' ]\n *\n * sourceArray('http://example.com/image_FRAME.jpg, { frame: [1, 3], digits: 2, framePlacer: 'FRAME' })\n * // gives:\n * // [ 'http://example.com/image_01.jpg', 'http://example.com/image_02.jpg', 'http://example.com/image_03.jpg' ]\n * ```\n *\n * @param template - The template string\n * @param opts - Interpolation options\n *\n * @public\n */\n function sourceArray(template, opts) {\n var digits = opts.digits || 2;\n var lPlacer = opts.lanePlacer || '{lane}';\n var fPlacer = opts.framePlacer || '{frame}';\n var fStart = 0;\n var fEnd = 0;\n if (opts.frame) {\n fStart = opts.frame[0];\n fEnd = opts.frame[1];\n }\n var lStart = 0;\n var lEnd = 0;\n if (opts.lane) {\n lStart = opts.lane[0];\n lEnd = opts.lane[1];\n }\n var result = [];\n for (var lane = lStart; lane <= lEnd; lane += 1) {\n for (var frame = fStart; frame <= fEnd; frame += 1) {\n result.push(template\n .replace(lPlacer, padNumber(lane, digits, '0'))\n .replace(fPlacer, padNumber(frame, digits, '0')));\n }\n }\n return result;\n }\n\n /**\n * The namespace that is used to bind functions to DOM events and store the data object\n */\n var namespace = 'spritespin';\n /**\n * Event names that are recognized by SpriteSpin. A module can implement any of these and they will be bound\n * to the target element on which the plugin is called.\n */\n var eventNames = [\n 'mousedown',\n 'mousemove',\n 'mouseup',\n 'mouseenter',\n 'mouseover',\n 'mouseleave',\n 'mousewheel',\n 'wheel',\n 'click',\n 'dblclick',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'selectstart',\n 'gesturestart',\n 'gesturechange',\n 'gestureend'\n ];\n /**\n *\n */\n var callbackNames = [\n 'onInit',\n 'onProgress',\n 'onLoad',\n 'onFrameChanged',\n 'onFrame',\n 'onDraw',\n 'onComplete',\n 'onDestroy'\n ];\n /**\n * Names of events for that the default behavior should be prevented.\n */\n var eventsToPrevent = [\n 'dragstart'\n ];\n /**\n * Default set of SpriteSpin options. This also represents the majority of data attributes that are used during the\n * lifetime of a SpriteSpin instance. The data is stored inside the target DOM element on which the plugin is called.\n */\n var defaults = {\n source: undefined,\n width: undefined,\n height: undefined,\n frames: undefined,\n framesX: undefined,\n lanes: 1,\n sizeMode: undefined,\n renderer: 'canvas',\n lane: 0,\n frame: 0,\n frameTime: 40,\n animate: true,\n retainAnimate: false,\n reverse: false,\n loop: true,\n stopFrame: 0,\n wrap: true,\n wrapLane: false,\n sense: 1,\n senseLane: undefined,\n orientation: 'horizontal',\n detectSubsampling: true,\n preloadCount: undefined,\n touchScrollTimer: [200, 1500],\n responsive: undefined,\n plugins: undefined\n };\n\n function noop$1() {\n // noop\n }\n function wrapConsole(type) {\n return console && console[type] ? function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return console.log.apply(console, args);\n } : noop$1;\n }\n var log = wrapConsole('log');\n var warn = wrapConsole('warn');\n var error = wrapConsole('error');\n function toArray(value) {\n return Array.isArray(value) ? value : [value];\n }\n /**\n * clamps the given value by the given min and max values\n */\n function clamp(value, min, max) {\n return (value > max ? max : (value < min ? min : value));\n }\n /**\n *\n */\n function wrap(value, min, max, size) {\n while (value > max) {\n value -= size;\n }\n while (value < min) {\n value += size;\n }\n return value;\n }\n /**\n * prevents default action on the given event\n */\n function prevent(e) {\n e.preventDefault();\n return false;\n }\n /**\n * Binds on the given target and event the given function.\n * The SpriteSpin namespace is attached to the event name\n */\n function bind(target, event, func) {\n if (func) {\n target.bind(event + '.' + namespace, function (e) {\n func.apply(target, [e, target.spritespin('data')]);\n });\n }\n }\n /**\n * Unbinds all SpriteSpin events from given target element\n */\n function unbind(target) {\n target.unbind('.' + namespace);\n }\n /**\n * Checks if given object is a function\n */\n function isFunction(fn) {\n return typeof fn === 'function';\n }\n function pixelRatio(context) {\n var devicePixelRatio = window.devicePixelRatio || 1;\n var backingStoreRatio = context.webkitBackingStorePixelRatio ||\n context.mozBackingStorePixelRatio ||\n context.msBackingStorePixelRatio ||\n context.oBackingStorePixelRatio ||\n context.backingStorePixelRatio || 1;\n return devicePixelRatio / backingStoreRatio;\n }\n\n\n var _Utils = Object.freeze({\n $: $$1,\n getCursorPosition: getCursorPosition,\n detectSubsampling: detectSubsampling,\n getOuterSize: getOuterSize,\n getComputedSize: getComputedSize,\n getInnerSize: getInnerSize,\n getInnerLayout: getInnerLayout,\n measure: measure,\n findSpecs: findSpecs,\n naturalSize: naturalSize,\n preload: preload,\n sourceArray: sourceArray,\n noop: noop$1,\n log: log,\n warn: warn,\n error: error,\n toArray: toArray,\n clamp: clamp,\n wrap: wrap,\n prevent: prevent,\n bind: bind,\n unbind: unbind,\n isFunction: isFunction,\n pixelRatio: pixelRatio\n });\n\n /**\n * Applies css attributes to layout the SpriteSpin containers.\n *\n * @internal\n */\n function applyLayout(data) {\n // disable selection\n data.target\n .attr('unselectable', 'on')\n .css({\n width: '',\n height: '',\n '-ms-user-select': 'none',\n '-moz-user-select': 'none',\n '-khtml-user-select': 'none',\n '-webkit-user-select': 'none',\n 'user-select': 'none'\n });\n var size = data.responsive ? getComputedSize(data) : getOuterSize(data);\n var layout = getInnerLayout(data.sizeMode, getInnerSize(data), size);\n // apply layout on target\n data.target.css({\n width: size.width,\n height: size.height,\n position: 'relative',\n overflow: 'hidden'\n });\n // apply layout on stage\n data.stage\n .css(layout)\n .hide();\n if (!data.canvas) {\n return;\n }\n // apply layout on canvas\n data.canvas.css(layout).hide();\n // apply pixel ratio on canvas\n data.canvasRatio = data.canvasRatio || pixelRatio(data.context);\n if (typeof layout.width === 'number' && typeof layout.height === 'number') {\n data.canvas[0].width = (layout.width * data.canvasRatio) || size.width;\n data.canvas[0].height = (layout.height * data.canvasRatio) || size.height;\n } else {\n data.canvas[0].width = (size.width * data.canvasRatio);\n data.canvas[0].height = (size.height * data.canvasRatio);\n }\n // width and height must be set before calling scale\n data.context.scale(data.canvasRatio, data.canvasRatio);\n }\n\n /**\n * Gets a state object by name.\n * @internal\n * @param data - The SpriteSpin instance data\n * @param name - The name of the state object\n */\n function getState(data, name) {\n data.state = data.state || {};\n data.state[name] = data.state[name] || {};\n return data.state[name];\n }\n /**\n * Gets a plugin state object by name.\n *\n * @remarks\n * Plugins should use this method to get or create a state object where they can\n * store any instance variables.\n *\n * @public\n * @param data - The SpriteSpin instance data\n * @param name - The name of the plugin\n */\n function getPluginState(data, name) {\n var state = getState(data, 'plugin');\n state[name] = state[name] || {};\n return state[name];\n }\n /**\n * Checks whether a flag is set. See {@link flag}.\n *\n * @public\n * @param data - The SpriteSpin instance data\n * @param key - The name of the flag\n */\n function is(data, key) {\n return !!getState(data, 'flags')[key];\n }\n /**\n * Sets a flag value. See {@link is}.\n *\n * @public\n * @param data - The SpriteSpin instance data\n * @param key - The name of the flag\n * @param value - The value to set\n */\n function flag(data, key, value) {\n getState(data, 'flags')[key] = !!value;\n }\n\n /**\n * Gets the playback state\n *\n * @public\n * @param data - The SpriteSpin instance data\n */\n function getPlaybackState(data) {\n return getState(data, 'playback');\n }\n function updateLane(data, lane) {\n data.lane = data.wrapLane\n ? wrap(lane, 0, data.lanes - 1, data.lanes)\n : clamp(lane, 0, data.lanes - 1);\n }\n function updateAnimationFrame(data) {\n data.frame += (data.reverse ? -1 : 1);\n // wrap the frame value to fit in range [0, data.frames)\n data.frame = wrap(data.frame, 0, data.frames - 1, data.frames);\n // stop animation if loop is disabled and the stopFrame is reached\n if (!data.loop && (data.frame === data.stopFrame)) {\n stopAnimation(data);\n }\n }\n function updateInputFrame(data, frame) {\n data.frame = Number(frame);\n data.frame = data.wrap\n ? wrap(data.frame, 0, data.frames - 1, data.frames)\n : clamp(data.frame, 0, data.frames - 1);\n }\n function updateAnimation(data) {\n var state = getPlaybackState(data);\n if (state.handler) {\n updateBefore(data);\n updateAnimationFrame(data);\n updateAfter(data);\n }\n }\n function updateBefore(data) {\n var state = getPlaybackState(data);\n state.lastFrame = data.frame;\n state.lastLane = data.lane;\n }\n function updateAfter(data) {\n var state = getPlaybackState(data);\n if (state.lastFrame !== data.frame || state.lastLane !== data.lane) {\n data.target.trigger('onFrameChanged.' + namespace, data);\n }\n data.target.trigger('onFrame.' + namespace, data);\n data.target.trigger('onDraw.' + namespace, data);\n }\n /**\n * Updates the frame or lane number of the SpriteSpin data.\n *\n * @public\n * @param data - The SpriteSpin instance data\n * @param frame - The frame number to set\n * @param lane - The lane number to set\n */\n function updateFrame(data, frame, lane) {\n updateBefore(data);\n if (frame != null) {\n updateInputFrame(data, frame);\n }\n if (lane != null) {\n updateLane(data, lane);\n }\n updateAfter(data);\n }\n /**\n * Stops the running animation.\n *\n * @public\n * @param data - The SpriteSpin instance data\n */\n function stopAnimation(data) {\n data.animate = false;\n var state = getPlaybackState(data);\n if (state.handler != null) {\n window.clearInterval(state.handler);\n state.handler = null;\n }\n }\n /**\n * Starts animation playback if needed.\n *\n * @remarks\n * Starts animation playback if `animate` property is `true` and the animation is not yet running.\n *\n * @public\n * @param data - The SpriteSpin instance data\n */\n function applyAnimation(data) {\n var state = getPlaybackState(data);\n if (state.handler && (!data.animate || state.frameTime !== data.frameTime)) {\n stopAnimation(data);\n }\n if (data.animate && !state.handler) {\n state.frameTime = data.frameTime;\n state.handler = window.setInterval(function () { return updateAnimation(data); }, state.frameTime);\n }\n }\n /**\n * Starts the animation playback\n *\n * @remarks\n * Starts the animation playback and also sets the `animate` property to `true`\n *\n * @public\n * @param data - The SpriteSpin instance data\n */\n function startAnimation(data) {\n data.animate = true;\n applyAnimation(data);\n }\n\n var plugins = {};\n /**\n * Registers a plugin.\n *\n * @remarks\n * Use this to add custom Rendering or Updating modules that can be addressed with the 'module' option.\n *\n * @public\n * @param name - The name of the plugin\n * @param plugin - The plugin implementation\n */\n function registerPlugin(name, plugin) {\n if (plugins[name]) {\n error('Plugin name \"' + name + '\" is already taken');\n return;\n }\n plugin = plugin || {};\n plugins[name] = plugin;\n return plugin;\n }\n /**\n * Registers a plugin.\n *\n * @public\n * @deprecated Use {@link registerPlugin} instead\n * @param name - The name of the plugin\n * @param plugin - The plugin implementation\n */\n function registerModule(name, plugin) {\n warn('\"registerModule\" is deprecated, use \"registerPlugin\" instead');\n registerPlugin(name, plugin);\n }\n /**\n * Gets an active plugin by name\n *\n * @internal\n * @param name - The name of the plugin\n */\n function getPlugin(name) {\n return plugins[name];\n }\n /**\n * Replaces module names on given SpriteSpin data and replaces them with actual implementations.\n * @internal\n */\n function applyPlugins(data) {\n fixPlugins(data);\n for (var i = 0; i < data.plugins.length; i += 1) {\n var name_1 = data.plugins[i];\n if (typeof name_1 !== 'string') {\n continue;\n }\n var plugin = getPlugin(name_1);\n if (!plugin) {\n error('No plugin found with name ' + name_1);\n continue;\n }\n data.plugins[i] = plugin;\n }\n }\n function fixPlugins(data) {\n // tslint:disable no-string-literal\n if (data.mods) {\n warn('\"mods\" option is deprecated, use \"plugins\" instead');\n data.plugins = data.mods;\n delete data.mods;\n }\n if (data.behavior) {\n warn('\"behavior\" option is deprecated, use \"plugins\" instead');\n data.plugins.push(data.behavior);\n delete data.behavior;\n }\n if (data.module) {\n warn('\"module\" option is deprecated, use \"plugins\" instead');\n data.plugins.push(data.module);\n delete data.module;\n }\n }\n\n var $$2 = $$1;\n var counter = 0;\n /**\n * Collection of all SpriteSpin instances\n */\n var instances = {};\n function pushInstance(data) {\n counter += 1;\n data.id = String(counter);\n instances[data.id] = data;\n }\n function popInstance(data) {\n delete instances[data.id];\n }\n function eachInstance(cb) {\n for (var id in instances) {\n if (instances.hasOwnProperty(id)) {\n cb(instances[id]);\n }\n }\n }\n var lazyinit = function () {\n // replace function with a noop\n // this logic must run only once\n lazyinit = function () { };\n function onEvent(eventName, e) {\n eachInstance(function (data) {\n for (var _i = 0, _a = data.plugins; _i < _a.length; _i++) {\n var module_1 = _a[_i];\n if (typeof module_1[eventName] === 'function') {\n module_1[eventName].apply(data.target, [e, data]);\n }\n }\n });\n }\n function onResize() {\n eachInstance(function (data) {\n if (data.responsive) {\n boot(data);\n }\n });\n }\n var _loop_1 = function (eventName) {\n $$2(window.document).bind(eventName + '.' + namespace, function (e) {\n onEvent('document' + eventName, e);\n });\n };\n for (var _i = 0, eventNames_1 = eventNames; _i < eventNames_1.length; _i++) {\n var eventName = eventNames_1[_i];\n _loop_1(eventName);\n }\n var resizeTimeout = null;\n $$2(window).on('resize', function () {\n window.clearTimeout(resizeTimeout);\n resizeTimeout = window.setTimeout(onResize, 100);\n });\n };\n /**\n * (re)binds all spritespin events on the target element\n *\n * @internal\n */\n function applyEvents(data) {\n var target = data.target;\n // Clear all SpriteSpin events on the target element\n unbind(target);\n // disable all default browser behavior on the following events\n // mainly prevents image drag operation\n for (var _i = 0, eventsToPrevent_1 = eventsToPrevent; _i < eventsToPrevent_1.length; _i++) {\n var eName = eventsToPrevent_1[_i];\n bind(target, eName, prevent);\n }\n // Bind module functions to SpriteSpin events\n for (var _a = 0, _b = data.plugins; _a < _b.length; _a++) {\n var plugin = _b[_a];\n for (var _c = 0, eventNames_2 = eventNames; _c < eventNames_2.length; _c++) {\n var eName = eventNames_2[_c];\n bind(target, eName, plugin[eName]);\n }\n for (var _d = 0, callbackNames_1 = callbackNames; _d < callbackNames_1.length; _d++) {\n var eName = callbackNames_1[_d];\n bind(target, eName, plugin[eName]);\n }\n }\n // bind auto start function to load event.\n bind(target, 'onLoad', function (e, d) {\n applyAnimation(d);\n });\n // bind all user events that have been passed on initialization\n for (var _e = 0, callbackNames_2 = callbackNames; _e < callbackNames_2.length; _e++) {\n var eName = callbackNames_2[_e];\n bind(target, eName, data[eName]);\n }\n }\n function applyMetrics(data) {\n if (!data.images) {\n data.metrics = [];\n }\n data.metrics = measure(data.images, data);\n var spec = findSpecs(data.metrics, data.frames, 0, 0);\n if (spec.sprite) {\n // TODO: try to remove frameWidth/frameHeight\n data.frameWidth = spec.sprite.width;\n data.frameHeight = spec.sprite.height;\n }\n }\n /**\n * Runs the boot process.\n *\n * @remarks\n * (re)initializes plugins, (re)initializes the layout, (re)binds events and loads source images.\n *\n * @internal\n */\n function boot(data) {\n applyPlugins(data);\n applyEvents(data);\n applyLayout(data);\n data.source = toArray(data.source);\n data.loading = true;\n data.target\n .addClass('loading')\n .trigger('onInit.' + namespace, data);\n preload({\n source: data.source,\n preloadCount: data.preloadCount,\n progress: function (progress) {\n data.progress = progress;\n data.target.trigger('onProgress.' + namespace, data);\n },\n complete: function (images) {\n data.images = images;\n data.loading = false;\n data.frames = data.frames || images.length;\n applyMetrics(data);\n applyLayout(data);\n data.stage.show();\n data.target\n .removeClass('loading')\n .trigger('onLoad.' + namespace, data)\n .trigger('onFrame.' + namespace, data)\n .trigger('onDraw.' + namespace, data)\n .trigger('onComplete.' + namespace, data);\n }\n });\n }\n /**\n * Creates a new SpriteSpin instance\n *\n * @public\n */\n function create(options) {\n var _this = this;\n var target = options.target;\n // SpriteSpin is not initialized\n // Create default settings object and extend with given options\n var data = $$2.extend(true, {}, defaults, options);\n // ensure source is set\n data.source = data.source || [];\n // ensure plugins are set\n data.plugins = data.plugins || [\n '360',\n 'drag'\n ];\n // if image tags are contained inside this DOM element\n // use these images as the source files\n target.find('img').each(function () {\n if (!Array.isArray(data.source)) {\n data.source = [];\n }\n data.source.push($$2(_this).attr('src'));\n });\n // build inner html\n //
\n //
\n // \n //
\n target\n .empty()\n .addClass('spritespin-instance')\n .append(\"
\");\n // add the canvas element if canvas rendering is enabled and supported\n if (data.renderer === 'canvas') {\n var canvas = document.createElement('canvas');\n if (canvas.getContext && canvas.getContext('2d')) {\n data.canvas = $$2(canvas).addClass('spritespin-canvas');\n data.context = canvas.getContext('2d');\n target.append(data.canvas);\n target.addClass('with-canvas');\n } else {\n // fallback to image rendering mode\n data.renderer = 'image';\n }\n }\n // setup references to DOM elements\n data.target = target;\n data.stage = target.find('.spritespin-stage');\n // store the data\n target.data(namespace, data);\n pushInstance(data);\n return data;\n }\n /**\n * Creates a new SpriteSpin instance, or updates an existing one\n *\n * @public\n */\n function createOrUpdate(options) {\n lazyinit();\n var data = options.target.data(namespace);\n if (!data) {\n data = create(options);\n } else {\n $$2.extend(data, options);\n }\n boot(data);\n return data;\n }\n /**\n * Destroys the SpriteSpin instance\n *\n * @remarks\n * - stops running animation\n * - unbinds all events\n * - deletes the data on the target element\n *\n * @public\n */\n function destroy(data) {\n popInstance(data);\n stopAnimation(data);\n data.target\n .trigger('onDestroy', data)\n .html(null)\n .attr('style', null)\n .attr('unselectable', null)\n .removeClass(['spritespin-instance', 'with-canvas']);\n unbind(data.target);\n data.target.removeData(namespace);\n }\n\n /**\n * Gets the current input state\n *\n * @public\n * @param data - The SpriteSpin instance data\n */\n function getInputState(data) {\n return getState(data, 'input');\n }\n /**\n * Updates the input state using a mous or touch event.\n *\n * @public\n * @param e - The input event\n * @param data - The SpriteSpin instance data\n */\n function updateInput(e, data) {\n var cursor = getCursorPosition(e);\n var state = getInputState(data);\n // cache positions from previous frame\n state.oldX = state.currentX;\n state.oldY = state.currentY;\n state.currentX = cursor.x;\n state.currentY = cursor.y;\n // Fix old position.\n if (state.oldX === undefined || state.oldY === undefined) {\n state.oldX = state.currentX;\n state.oldY = state.currentY;\n }\n // Cache the initial click/touch position and store the frame number at which the click happened.\n // Useful for different behavior implementations. This must be restored when the click/touch is released.\n if (state.startX === undefined || state.startY === undefined) {\n state.startX = state.currentX;\n state.startY = state.currentY;\n state.clickframe = data.frame;\n state.clicklane = data.lane;\n }\n // Calculate the vector from start position to current pointer position.\n state.dX = state.currentX - state.startX;\n state.dY = state.currentY - state.startY;\n // Calculate the vector from last frame position to current pointer position.\n state.ddX = state.currentX - state.oldX;\n state.ddY = state.currentY - state.oldY;\n // Normalize vectors to range [-1:+1]\n state.ndX = state.dX / data.target.innerWidth();\n state.ndY = state.dY / data.target.innerHeight();\n state.nddX = state.ddX / data.target.innerWidth();\n state.nddY = state.ddY / data.target.innerHeight();\n }\n /**\n * Resets the input state.\n *\n * @public\n */\n function resetInput(data) {\n var input = getInputState(data);\n input.startX = input.startY = undefined;\n input.currentX = input.currentY = undefined;\n input.oldX = input.oldY = undefined;\n input.dX = input.dY = 0;\n input.ddX = input.ddY = 0;\n input.ndX = input.ndY = 0;\n input.nddX = input.nddY = 0;\n }\n\n function extension(option, value) {\n var $target = $$1(this);\n if (option === 'data') {\n return $target.data(namespace);\n }\n if (option === 'api') {\n var data = $target.data(namespace);\n data.api = data.api || new Api(data);\n return data.api;\n }\n if (option === 'destroy') {\n return $target.each(function () {\n var data = $target.data(namespace);\n if (data) {\n destroy(data);\n }\n });\n }\n if (arguments.length === 2 && typeof option === 'string') {\n option = (_a = {}, _a[option] = value, _a);\n }\n if (typeof option === 'object') {\n return createOrUpdate($$1.extend(true, { target: $target }, option)).target;\n }\n throw new Error('Invalid call to spritespin');\n var _a;\n }\n $$1.fn[namespace] = extension;\n\n // tslint:disable:object-literal-shorthand\n // tslint:disable:only-arrow-functions\n extendApi({\n // Gets a value indicating whether the animation is currently running.\n isPlaying: function () {\n return getPlaybackState(this.data).handler != null;\n },\n // Gets a value indicating whether the animation looping is enabled.\n isLooping: function () {\n return this.data.loop;\n },\n // Starts/Stops the animation playback\n toggleAnimation: function () {\n if (this.isPlaying()) {\n this.stopAnimation();\n } else {\n this.startAnimation();\n }\n },\n // Stops animation playback\n stopAnimation: function () {\n this.data.animate = false;\n stopAnimation(this.data);\n },\n // Starts animation playback\n startAnimation: function () {\n this.data.animate = true;\n applyAnimation(this.data);\n },\n // Sets a value indicating whether the animation should be looped or not.\n // This might start the animation (if the 'animate' data attribute is set to true)\n loop: function (value) {\n this.data.loop = value;\n applyAnimation(this.data);\n return this;\n },\n // Gets the current frame number\n currentFrame: function () {\n return this.data.frame;\n },\n // Updates SpriteSpin to the specified frame.\n updateFrame: function (frame) {\n updateFrame(this.data, frame);\n return this;\n },\n // Skips the given number of frames\n skipFrames: function (step) {\n var data = this.data;\n updateFrame(data, data.frame + (data.reverse ? -step : +step));\n return this;\n },\n // Updates SpriteSpin so that the next frame is shown\n nextFrame: function () {\n return this.skipFrames(1);\n },\n // Updates SpriteSpin so that the previous frame is shown\n prevFrame: function () {\n return this.skipFrames(-1);\n },\n // Starts the animations that will play until the given frame number is reached\n // options:\n // force [boolean] starts the animation, even if current frame is the target frame\n // nearest [boolean] animates to the direction with minimum distance to the target frame\n playTo: function (frame, options) {\n var data = this.data;\n options = options || {};\n if (!options.force && data.frame === frame) {\n return;\n }\n if (options.nearest) {\n // distance to the target frame\n var a = frame - data.frame;\n // distance to last frame and the to target frame\n var b = frame > data.frame ? a - data.frames : a + data.frames;\n // minimum distance\n var c = Math.abs(a) < Math.abs(b) ? a : b;\n data.reverse = c < 0;\n }\n data.animate = true;\n data.loop = false;\n data.stopFrame = frame;\n applyAnimation(data);\n return this;\n }\n });\n\n function pick(target, names) {\n for (var _i = 0, names_1 = names; _i < names_1.length; _i++) {\n var name_1 = names_1[_i];\n if (target[name_1] || name_1 in target) {\n return name_1;\n }\n }\n return names[0];\n }\n var browser = {\n requestFullscreen: pick(document.documentElement, [\n 'requestFullscreen',\n 'webkitRequestFullScreen',\n 'mozRequestFullScreen',\n 'msRequestFullscreen'\n ]),\n exitFullscreen: pick(document, [\n 'exitFullscreen',\n 'webkitExitFullscreen',\n 'webkitCancelFullScreen',\n 'mozCancelFullScreen',\n 'msExitFullscreen'\n ]),\n fullscreenElement: pick(document, [\n 'fullscreenElement',\n 'webkitFullscreenElement',\n 'webkitCurrentFullScreenElement',\n 'mozFullScreenElement',\n 'msFullscreenElement'\n ]),\n fullscreenEnabled: pick(document, [\n 'fullscreenEnabled',\n 'webkitFullscreenEnabled',\n 'mozFullScreenEnabled',\n 'msFullscreenEnabled'\n ]),\n fullscreenchange: pick(document, [\n 'onfullscreenchange',\n 'onwebkitfullscreenchange',\n 'onmozfullscreenchange',\n 'onMSFullscreenChange'\n ]).replace(/^on/, ''),\n fullscreenerror: pick(document, [\n 'onfullscreenerror',\n 'onwebkitfullscreenerror',\n 'onmozfullscreenerror',\n 'onMSFullscreenError'\n ]).replace(/^on/, '')\n };\n var changeEvent = browser.fullscreenchange + '.' + namespace + '-fullscreen';\n function unbindChangeEvent() {\n $$1(document).unbind(changeEvent);\n }\n function bindChangeEvent(callback) {\n unbindChangeEvent();\n $$1(document).bind(changeEvent, callback);\n }\n var orientationEvent = 'orientationchange.' + namespace + '-fullscreen';\n function unbindOrientationEvent() {\n $$1(window).unbind(orientationEvent);\n }\n function bindOrientationEvent(callback) {\n unbindOrientationEvent();\n $$1(window).bind(orientationEvent, callback);\n }\n function requestFullscreenNative(e) {\n e = e || document.documentElement;\n e[browser.requestFullscreen]();\n }\n function exitFullscreen() {\n return document[browser.exitFullscreen]();\n }\n function fullscreenEnabled() {\n return document[browser.fullscreenEnabled];\n }\n function fullscreenElement() {\n return document[browser.fullscreenElement];\n }\n function isFullscreen() {\n return !!fullscreenElement();\n }\n function toggleFullscreen(data, opts) {\n if (isFullscreen()) {\n this.apiRequestFullscreen(opts);\n } else {\n this.exitFullscreen();\n }\n }\n function requestFullscreen(data, opts) {\n opts = opts || {};\n var oWidth = data.width;\n var oHeight = data.height;\n var oSource = data.source;\n var oSize = data.sizeMode;\n var oResponsive = data.responsive;\n var enter = function () {\n data.width = window.screen.width;\n data.height = window.screen.height;\n data.source = (opts.source || oSource);\n data.sizeMode = opts.sizeMode || 'fit';\n data.responsive = false;\n boot(data);\n };\n var exit = function () {\n data.width = oWidth;\n data.height = oHeight;\n data.source = oSource;\n data.sizeMode = oSize;\n data.responsive = oResponsive;\n boot(data);\n };\n bindChangeEvent(function () {\n if (isFullscreen()) {\n enter();\n bindOrientationEvent(enter);\n } else {\n unbindChangeEvent();\n unbindOrientationEvent();\n exit();\n }\n });\n requestFullscreenNative(data.target[0]);\n }\n extendApi({\n fullscreenEnabled: fullscreenEnabled,\n fullscreenElement: fullscreenElement,\n exitFullscreen: exitFullscreen,\n toggleFullscreen: function (opts) {\n toggleFullscreen(this.data, opts);\n },\n requestFullscreen: function (opts) {\n requestFullscreen(this.data, opts);\n }\n });\n\n (function () {\n var NAME = 'click';\n function click(e, data) {\n if (data.loading || !data.stage.is(':visible')) {\n return;\n }\n updateInput(e, data);\n var input = getInputState(data);\n var half; var\n pos;\n var target = data.target; var\n offset = target.offset();\n if (data.orientation === 'horizontal') {\n half = target.innerWidth() / 2;\n pos = input.currentX - offset.left;\n } else {\n half = target.innerHeight() / 2;\n pos = input.currentY - offset.top;\n }\n updateFrame(data, data.frame + (pos > half ? 1 : -1));\n }\n registerPlugin(NAME, {\n name: NAME,\n mouseup: click,\n touchend: click\n });\n }());\n\n (function () {\n var NAME = 'drag';\n function getState$$1(data) {\n return getPluginState(data, NAME);\n }\n function getAxis(data) {\n if (typeof data.orientation === 'number') {\n return data.orientation * Math.PI / 180;\n }\n if (data.orientation === 'horizontal') {\n return 0;\n }\n return Math.PI / 2;\n }\n function onInit(e, data) {\n var state = getState$$1(data);\n var d = [200, 1500];\n var t = data.touchScrollTimer || d;\n state.minTime = t[0] || d[0];\n state.maxTime = t[1] || d[1];\n }\n function dragStart(e, data) {\n var state = getState$$1(data);\n if (data.loading || is(data, 'dragging') || data.zoomPinFrame && !data.stage.is(':visible')) {\n return;\n }\n // Touch scroll can only be disabled by cancelling the 'touchstart' event.\n // If we would try to cancel the 'touchmove' event during a scroll\n // chrome browser raises an error\n //\n // When a user interacts with sprite spin, we dont know whether the intention\n // is to scroll the page or to roll the spin.\n //\n // On first interaction with SpriteSpin the scroll is not disabled\n // On double tap within 200ms the scroll is not disabled\n // Scroll is only disabled if there was an interaction with SpriteSpin in the past 1500ms\n var now = new Date().getTime();\n if (state.endAt && (now - state.endAt > state.maxTime)) {\n // reset timer if the user has no interaction with spritespin within 1500ms\n state.startAt = null;\n state.endAt = null;\n }\n if (state.startAt && (now - state.startAt > state.minTime)) {\n // disable scroll only if there was already an interaction with spritespin\n // however, allow scrolling on double tab within 200ms\n e.preventDefault();\n }\n state.startAt = now;\n state.wasPlaying = !!getPlaybackState(data).handler;\n state.frame = data.frame || 0;\n state.lane = data.lane || 0;\n flag(data, 'dragging', true);\n updateInput(e, data);\n }\n function dragEnd(e, data) {\n if (is(data, 'dragging')) {\n getState$$1(data).endAt = new Date().getTime();\n flag(data, 'dragging', false);\n resetInput(data);\n if (data.retainAnimate && getState$$1(data).wasPlaying) {\n startAnimation(data);\n }\n }\n }\n function drag(e, data) {\n var state = getState$$1(data);\n var input = getInputState(data);\n if (!is(data, 'dragging')) {\n return;\n }\n updateInput(e, data);\n var rad = getAxis(data);\n var sn = Math.sin(rad);\n var cs = Math.cos(rad);\n var x = ((input.nddX * cs - input.nddY * sn) * data.sense) || 0;\n var y = ((input.nddX * sn + input.nddY * cs) * (data.senseLane || data.sense)) || 0;\n // accumulate\n state.frame += data.frames * x;\n state.lane += data.lanes * y;\n // update spritespin\n var oldFrame = data.frame;\n var oldLane = data.lane;\n updateFrame(data, Math.floor(state.frame), Math.floor(state.lane));\n stopAnimation(data);\n }\n function mousemove(e, data) {\n dragStart(e, data);\n drag(e, data);\n }\n registerPlugin('drag', {\n name: 'drag',\n onInit: onInit,\n mousedown: dragStart,\n mousemove: drag,\n mouseup: dragEnd,\n documentmousemove: drag,\n documentmouseup: dragEnd,\n touchstart: dragStart,\n touchmove: drag,\n touchend: dragEnd,\n touchcancel: dragEnd\n });\n registerPlugin('move', {\n name: 'move',\n onInit: onInit,\n mousemove: mousemove,\n mouseleave: dragEnd,\n touchstart: dragStart,\n touchmove: drag,\n touchend: dragEnd,\n touchcancel: dragEnd\n });\n }());\n\n (function () {\n var NAME = 'hold';\n function getState$$1(data) {\n return getPluginState(data, NAME);\n }\n function rememberOptions(data) {\n var state = getState$$1(data);\n state.frameTime = data.frameTime;\n state.animate = data.animate;\n state.reverse = data.reverse;\n }\n function restoreOptions(data) {\n var state = getState$$1(data);\n data.frameTime = state.frameTime;\n data.animate = state.animate;\n data.reverse = state.reverse;\n }\n function start(e, data) {\n if (is(data, 'loading') || is(data, 'dragging') || !data.stage.is(':visible')) {\n return;\n }\n rememberOptions(data);\n updateInput(e, data);\n flag(data, 'dragging', true);\n data.animate = true;\n applyAnimation(data);\n }\n function stop(e, data) {\n flag(data, 'dragging', false);\n resetInput(data);\n stopAnimation(data);\n restoreOptions(data);\n applyAnimation(data);\n }\n function update(e, data) {\n if (!is(data, 'dragging')) {\n return;\n }\n updateInput(e, data);\n var input = getInputState(data);\n var half; var\n delta;\n var target = data.target; var\n offset = target.offset();\n if (data.orientation === 'horizontal') {\n half = target.innerWidth() / 2;\n delta = (input.currentX - offset.left - half) / half;\n } else {\n half = (data.height / 2);\n delta = (input.currentY - offset.top - half) / half;\n }\n data.reverse = delta < 0;\n delta = delta < 0 ? -delta : delta;\n data.frameTime = 80 * (1 - delta) + 20;\n if (((data.orientation === 'horizontal') && (input.dX < input.dY)) ||\n ((data.orientation === 'vertical') && (input.dX < input.dY))) {\n e.preventDefault();\n }\n }\n function onFrame(e, data) {\n data.animate = true;\n applyAnimation(data);\n }\n registerPlugin(NAME, {\n name: NAME,\n mousedown: start,\n mousemove: update,\n mouseup: stop,\n mouseleave: stop,\n touchstart: start,\n touchmove: update,\n touchend: stop,\n touchcancel: stop,\n onFrame: onFrame\n });\n }());\n\n (function () {\n var NAME = 'swipe';\n function getState$$1(data) {\n return getPluginState(data, NAME);\n }\n function getOption(data, name, fallback) {\n return data[name] || fallback;\n }\n function init(e, data) {\n var state = getState$$1(data);\n state.fling = getOption(data, 'swipeFling', 10);\n state.snap = getOption(data, 'swipeSnap', 0.50);\n }\n function start(e, data) {\n if (!data.loading && !is(data, 'dragging')) {\n updateInput(e, data);\n flag(data, 'dragging', true);\n }\n }\n function update(e, data) {\n if (!is(data, 'dragging')) {\n return;\n }\n updateInput(e, data);\n var frame = data.frame;\n var lane = data.lane;\n updateFrame(data, frame, lane);\n }\n function end(e, data) {\n if (!is(data, 'dragging')) {\n return;\n }\n flag(data, 'dragging', false);\n var state = getState$$1(data);\n var input = getInputState(data);\n var frame = data.frame;\n var lane = data.lane;\n var snap = state.snap;\n var fling = state.fling;\n var dS; var\n dF;\n if (data.orientation === 'horizontal') {\n dS = input.ndX;\n dF = input.ddX;\n } else {\n dS = input.ndY;\n dF = input.ddY;\n }\n if (dS >= snap || dF >= fling) {\n frame = data.frame - 1;\n } else if (dS <= -snap || dF <= -fling) {\n frame = data.frame + 1;\n }\n resetInput(data);\n updateFrame(data, frame, lane);\n stopAnimation(data);\n }\n registerPlugin(NAME, {\n name: NAME,\n onLoad: init,\n mousedown: start,\n mousemove: update,\n mouseup: end,\n mouseleave: end,\n touchstart: start,\n touchmove: update,\n touchend: end,\n touchcancel: end\n });\n }());\n\n (function () {\n var NAME = 'wheel';\n function wheel(e, data) {\n if (!data.loading && data.stage.is(':visible')) {\n e.preventDefault();\n var we = e.originalEvent;\n var signX = we.deltaX === 0 ? 0 : we.deltaX > 0 ? 1 : -1;\n var signY = we.deltaY === 0 ? 0 : we.deltaY > 0 ? 1 : -1;\n updateFrame(data, data.frame + signY, data.lane + signX);\n }\n }\n registerPlugin(NAME, {\n name: NAME,\n wheel: wheel\n });\n }());\n\n (function () {\n var template = \"\\n
\\n
\\n
\\n
\\n\";\n function getState$$1(data) {\n return getPluginState(data, NAME);\n }\n var NAME = 'progress';\n function onInit(e, data) {\n var state = getState$$1(data);\n if (!state.stage) {\n state.stage = $$1(template);\n state.stage.appendTo(data.target);\n }\n state.stage.find('.spritespin-progress-label')\n .text('0%')\n .css({ 'text-align': 'center' });\n state.stage.find('.spritespin-progress-bar').css({\n width: '0%'\n });\n state.stage.hide().fadeIn();\n }\n function onProgress(e, data) {\n var state = getState$$1(data);\n state.stage.find('.spritespin-progress-label')\n .text(data.progress.percent + '%')\n .css({ 'text-align': 'center' });\n state.stage.find('.spritespin-progress-bar').css({\n width: data.progress.percent + '%'\n });\n }\n function onLoad(e, data) {\n $$1(getState$$1(data).stage).fadeOut();\n }\n function onDestroy(e, data) {\n $$1(getState$$1(data).stage).remove();\n }\n registerPlugin(NAME, {\n name: NAME,\n onInit: onInit,\n onProgress: onProgress,\n onLoad: onLoad,\n onDestroy: onDestroy\n });\n }());\n\n (function () {\n var NAME = '360';\n function onLoad(e, data) {\n data.stage.find('.spritespin-frames').detach();\n if (data.renderer === 'image') {\n $(data.images).addClass('spritespin-frames').appendTo(data.stage);\n }\n }\n function onDraw(e, data) {\n var specs = findSpecs(data.metrics, data.frames, data.frame, data.lane);\n var sheet = specs.sheet;\n var sprite = specs.sprite;\n if (!sheet || !sprite) {\n return;\n }\n var src = data.source[sheet.id];\n var image = data.images[sheet.id];\n if (data.renderer === 'canvas') {\n data.canvas.show();\n var w = data.canvas[0].width / data.canvasRatio;\n var h = data.canvas[0].height / data.canvasRatio;\n data.context.clearRect(0, 0, w, h);\n data.context.drawImage(image, sprite.sampledX, sprite.sampledY, sprite.sampledWidth, sprite.sampledHeight, 0, 0, w, h);\n return;\n }\n var scaleX = data.stage.innerWidth() / sprite.sampledWidth;\n var scaleY = data.stage.innerHeight() / sprite.sampledHeight;\n var top = Math.floor(-sprite.sampledY * scaleY);\n var left = Math.floor(-sprite.sampledX * scaleX);\n var width = Math.floor(sheet.sampledWidth * scaleX);\n var height = Math.floor(sheet.sampledHeight * scaleY);\n if (data.renderer === 'background') {\n data.stage.css({\n 'background-image': \"url('\" + src + \"')\",\n 'background-position': left + 'px ' + top + 'px',\n 'background-repeat': 'no-repeat',\n // set custom background size to enable responsive rendering\n '-webkit-background-size': width + 'px ' + height + 'px',\n '-moz-background-size': width + 'px ' + height + 'px',\n '-o-background-size': width + 'px ' + height + 'px',\n 'background-size': width + 'px ' + height + 'px' /* Chrome, Firefox 4+, IE 9+, Opera, Safari 5+ */\n });\n return;\n }\n $(data.images).hide();\n $(image).show().css({\n position: 'absolute',\n top: top,\n left: left,\n 'max-width': 'initial',\n width: width,\n height: height\n });\n }\n registerPlugin(NAME, {\n name: NAME,\n onLoad: onLoad,\n onDraw: onDraw\n });\n }());\n\n (function () {\n var NAME = 'blur';\n function getState$$1(data) {\n return getPluginState(data, NAME);\n }\n function getOption(data, name, fallback) {\n return data[name] || fallback;\n }\n function init(e, data) {\n var state = getState$$1(data);\n state.canvas = state.canvas || $$1(\"\");\n state.context = state.context || state.canvas[0].getContext('2d');\n state.steps = state.steps || [];\n state.fadeTime = Math.max(getOption(data, 'blurFadeTime', 200), 1);\n state.frameTime = Math.max(getOption(data, 'blurFrameTime', data.frameTime), 16);\n state.trackTime = null;\n state.cssBlur = !!getOption(data, 'blurCss', false);\n var inner = getInnerSize(data);\n var outer = data.responsive ? getComputedSize(data) : getOuterSize(data);\n var css = getInnerLayout(data.sizeMode, inner, outer);\n state.canvas[0].width = data.width * data.canvasRatio;\n state.canvas[0].height = data.height * data.canvasRatio;\n state.canvas.css(css).show();\n state.context.scale(data.canvasRatio, data.canvasRatio);\n data.target.append(state.canvas);\n }\n function onFrame(e, data) {\n var state = getState$$1(data);\n trackFrame(data);\n if (state.timeout == null) {\n loop(data);\n }\n }\n function trackFrame(data) {\n var state = getState$$1(data);\n var ani = getPlaybackState(data);\n // distance between frames\n var d = Math.abs(data.frame - ani.lastFrame);\n // shortest distance\n d = d >= data.frames / 2 ? data.frames - d : d;\n state.steps.unshift({\n frame: data.frame,\n lane: data.lane,\n live: 1,\n step: state.frameTime / state.fadeTime,\n d: d,\n alpha: 0\n });\n }\n var toRemove = [];\n function removeOldFrames(frames) {\n toRemove.length = 0;\n for (var i = 0; i < frames.length; i += 1) {\n if (frames[i].alpha <= 0) {\n toRemove.push(i);\n }\n }\n for (var _i = 0, toRemove_1 = toRemove; _i < toRemove_1.length; _i++) {\n var item = toRemove_1[_i];\n frames.splice(item, 1);\n }\n }\n function loop(data) {\n var state = getState$$1(data);\n state.timeout = window.setTimeout(function () { tick(data); }, state.frameTime);\n }\n function killLoop(data) {\n var state = getState$$1(data);\n window.clearTimeout(state.timeout);\n state.timeout = null;\n }\n function applyCssBlur(canvas, d) {\n var amount = Math.min(Math.max((d / 2) - 4, 0), 2.5);\n var blur = 'blur(' + amount + 'px)';\n canvas.css({\n '-webkit-filter': blur,\n filter: blur\n });\n }\n function clearFrame(data, state) {\n state.canvas.show();\n var w = state.canvas[0].width / data.canvasRatio;\n var h = state.canvas[0].height / data.canvasRatio;\n // state.context.clearRect(0, 0, w, h)\n }\n function drawFrame(data, state, step) {\n if (step.alpha <= 0) {\n return;\n }\n var specs = findSpecs(data.metrics, data.frames, step.frame, step.lane);\n var sheet = specs.sheet;\n var sprite = specs.sprite;\n if (!sheet || !sprite) {\n return;\n }\n var src = data.source[sheet.id];\n var image = data.images[sheet.id];\n if (image.complete === false) {\n return;\n }\n state.canvas.show();\n var w = state.canvas[0].width / data.canvasRatio;\n var h = state.canvas[0].height / data.canvasRatio;\n state.context.globalAlpha = step.alpha;\n state.context.drawImage(image, sprite.sampledX, sprite.sampledY, sprite.sampledWidth, sprite.sampledHeight, 0, 0, w, h);\n }\n function tick(data) {\n var state = getState$$1(data);\n killLoop(data);\n if (!state.context) {\n return;\n }\n var d = 0;\n clearFrame(data, state);\n state.context.clearRect(0, 0, data.width, data.height);\n for (var _i = 0, _a = state.steps; _i < _a.length; _i++) {\n var step = _a[_i];\n step.live = Math.max(step.live - step.step, 0);\n step.alpha = Math.max(step.live - 0.25, 0);\n drawFrame(data, state, step);\n d += step.alpha + step.d;\n }\n if (state.cssBlur) {\n applyCssBlur(state.canvas, d);\n }\n removeOldFrames(state.steps);\n if (state.steps.length) {\n loop(data);\n }\n }\n registerPlugin(NAME, {\n name: NAME,\n onLoad: init,\n onFrameChanged: onFrame\n });\n }());\n\n (function () {\n var max = Math.max;\n var min = Math.min;\n var NAME = 'ease';\n function getState$$1(data) {\n return getPluginState(data, NAME);\n }\n function getOption(data, name, fallback) {\n return data[name] || fallback;\n }\n function init(e, data) {\n var state = getState$$1(data);\n state.maxSamples = max(getOption(data, 'easeMaxSamples', 5), 0);\n state.damping = max(min(getOption(data, 'easeDamping', 0.9), 0.999), 0);\n state.abortTime = max(getOption(data, 'easeAbortTime', 250), 16);\n state.updateTime = max(getOption(data, 'easeUpdateTime', data.frameTime), 16);\n state.samples = [];\n state.steps = [];\n }\n function update(e, data) {\n if (is(data, 'dragging')) {\n killLoop(data);\n sampleInput(data);\n }\n }\n function end(e, data) {\n var state = getState$$1(data);\n var samples = state.samples;\n var last;\n var lanes = 0;\n var frames = 0;\n var time = 0;\n for (var _i = 0, samples_1 = samples; _i < samples_1.length; _i++) {\n var sample = samples_1[_i];\n if (!last) {\n last = sample;\n continue;\n }\n var dt = sample.time - last.time;\n if (dt > state.abortTime) {\n lanes = frames = time = 0;\n return killLoop(data);\n }\n frames += sample.frame - last.frame;\n lanes += sample.lane - last.lane;\n time += dt;\n last = sample;\n }\n samples.length = 0;\n if (!time) {\n return;\n }\n state.lane = data.lane;\n state.lanes = 0;\n state.laneStep = lanes / time * state.updateTime;\n state.frame = data.frame;\n state.frames = 0;\n state.frameStep = frames / time * state.updateTime;\n loop(data);\n }\n function sampleInput(data) {\n var state = getState$$1(data);\n // add a new sample\n state.samples.push({\n time: new Date().getTime(),\n frame: data.frame,\n lane: data.lane\n });\n // drop old samples\n while (state.samples.length > state.maxSamples) {\n state.samples.shift();\n }\n }\n function killLoop(data) {\n var state = getState$$1(data);\n if (state.handler != null) {\n window.clearTimeout(state.handler);\n state.handler = null;\n }\n }\n function loop(data) {\n var state = getState$$1(data);\n state.handler = window.setTimeout(function () { tick(data); }, state.updateTime);\n }\n function tick(data) {\n var state = getState$$1(data);\n state.lanes += state.laneStep;\n state.frames += state.frameStep;\n state.laneStep *= state.damping;\n state.frameStep *= state.damping;\n var frame = Math.floor(state.frame + state.frames);\n var lane = Math.floor(state.lane + state.lanes);\n updateFrame(data, frame, lane);\n if (is(data, 'dragging')) {\n killLoop(data);\n } else if (Math.abs(state.frameStep) > 0.005 || Math.abs(state.laneStep) > 0.005) {\n loop(data);\n } else {\n killLoop(data);\n }\n }\n registerPlugin(NAME, {\n name: NAME,\n onLoad: init,\n mousemove: update,\n mouseup: end,\n mouseleave: end,\n touchmove: update,\n touchend: end,\n touchcancel: end\n });\n }());\n\n (function () {\n var NAME = 'gallery';\n function getState$$1(data) {\n return getPluginState(data, NAME);\n }\n function getOption(data, name, fallback) {\n return data[name] || fallback;\n }\n function load(e, data) {\n var state = getState$$1(data);\n state.images = [];\n state.offsets = [];\n state.frame = data.frame;\n state.speed = getOption(data, 'gallerySpeed', 500);\n state.opacity = getOption(data, 'galleryOpacity', 0.25);\n state.stage = getOption(data, 'galleryStage', $$1('
'));\n state.stage.empty().addClass('gallery-stage').prependTo(data.stage);\n var size = 0;\n for (var _i = 0, _a = data.images; _i < _a.length; _i++) {\n var image = _a[_i];\n var naturalSize$$1 = naturalSize(image);\n var scale = data.height / naturalSize$$1.height;\n var img = $$1(image);\n state.stage.append(img);\n state.images.push(img);\n state.offsets.push(-size + (data.width - image.width * scale) / 2);\n size += data.width;\n img.css({\n 'max-width': 'initial',\n opacity: state.opacity,\n width: data.width,\n height: data.height\n });\n }\n var innerSize = getInnerSize(data);\n var outerSize = data.responsive ? getComputedSize(data) : getOuterSize(data);\n var layout = getInnerLayout(data.sizeMode, innerSize, outerSize);\n state.stage.css(layout).css({ width: size, left: state.offsets[state.frame] });\n state.images[state.frame].animate({ opacity: 1 }, { duration: state.speed });\n }\n function draw(e, data) {\n var state = getState$$1(data);\n var input = getInputState(data);\n var isDragging = is(data, 'dragging');\n if (state.frame !== data.frame && !isDragging) {\n state.stage.stop(true, false).animate({ left: state.offsets[data.frame] }, { duration: state.speed });\n state.images[state.frame].animate({ opacity: state.opacity }, { duration: state.speed });\n state.frame = data.frame;\n state.images[state.frame].animate({ opacity: 1 }, { duration: state.speed });\n state.stage.animate({ left: state.offsets[state.frame] });\n } else if (isDragging || state.dX !== input.dX) {\n state.dX = input.dX;\n state.ddX = input.ddX;\n state.stage.stop(true, true).css({ left: state.offsets[state.frame] + state.dX });\n }\n }\n registerPlugin(NAME, {\n name: NAME,\n onLoad: load,\n onDraw: draw\n });\n }());\n\n (function () {\n var NAME = 'panorama';\n function getState$$1(data) {\n return getPluginState(data, NAME);\n }\n function onLoad(e, data) {\n var state = getState$$1(data);\n var sprite = data.metrics[0];\n if (!sprite) {\n return;\n }\n if (data.orientation === 'horizontal') {\n state.scale = data.target.innerHeight() / sprite.sampledHeight;\n data.frames = sprite.sampledWidth;\n } else {\n state.scale = data.target.innerWidth() / sprite.sampledWidth;\n data.frames = sprite.sampledHeight;\n }\n var width = Math.floor(sprite.sampledWidth * state.scale);\n var height = Math.floor(sprite.sampledHeight * state.scale);\n data.stage.css({\n 'background-image': 'url(' + data.source[sprite.id] + ')',\n 'background-repeat': 'repeat-both',\n // set custom background size to enable responsive rendering\n '-webkit-background-size': width + 'px ' + height + 'px',\n '-moz-background-size': width + 'px ' + height + 'px',\n '-o-background-size': width + 'px ' + height + 'px',\n 'background-size': width + 'px ' + height + 'px' /* Chrome, Firefox 4+, IE 9+, Opera, Safari 5+ */\n });\n }\n function onDraw(e, data) {\n var state = getState$$1(data);\n var px = data.orientation === 'horizontal' ? 1 : 0;\n var py = px ? 0 : 1;\n var offset = data.frame % data.frames;\n var left = Math.round(px * offset * state.scale);\n var top = Math.round(py * offset * state.scale);\n data.stage.css({ 'background-position': left + 'px ' + top + 'px' });\n }\n registerPlugin(NAME, {\n name: NAME,\n onLoad: onLoad,\n onDraw: onDraw\n });\n }());\n\n (function () {\n var NAME = 'zoom';\n function getState$$1(data) {\n return getPluginState(data, NAME);\n }\n function getOption(data, name, fallback) {\n return name in data ? data[name] : fallback;\n }\n function onInit(e, data) {\n var state = getState$$1(data);\n state.source = getOption(data, 'zoomSource', data.source);\n state.useWheel = getOption(data, 'zoomUseWheel', false);\n state.useClick = getOption(data, 'zoomUseClick', true);\n state.pinFrame = getOption(data, 'zoomPinFrame', true);\n state.doubleClickTime = getOption(data, 'zoomDoubleClickTime', 500);\n state.stage = state.stage || $$1(\"
\");\n state.stage.css({\n width: '100%',\n height: '100%',\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n position: 'absolute'\n })\n .appendTo(data.target)\n .hide();\n }\n function onDestroy(e, data) {\n var state = getState$$1(data);\n if (state.stage) {\n state.stage.remove();\n delete state.stage;\n }\n }\n function updateInput$$1(e, data) {\n var state = getState$$1(data);\n if (!state.stage.is(':visible')) {\n return;\n }\n e.preventDefault();\n if (state.pinFrame) {\n // hack into drag/move module and disable dragging\n // prevents frame change during zoom mode\n flag(data, 'dragging', false);\n }\n // grab touch/cursor position\n var cursor = getCursorPosition(e);\n // normalize cursor position into [0:1] range\n var x = cursor.x / data.width;\n var y = cursor.y / data.height;\n if (state.oldX == null) {\n state.oldX = x;\n state.oldY = y;\n }\n if (state.currentX == null) {\n state.currentX = x;\n state.currentY = y;\n }\n // calculate move delta since last frame and remember current position\n var dx = x - state.oldX;\n var dy = y - state.oldY;\n state.oldX = x;\n state.oldY = y;\n // invert drag direction for touch events to enable 'natural' scrolling\n if (e.type.match(/touch/)) {\n dx = -dx;\n dy = -dy;\n }\n // accumulate display coordinates\n state.currentX = clamp(state.currentX + dx, 0, 1);\n state.currentY = clamp(state.currentY + dy, 0, 1);\n updateFrame(data, data.frame, data.lane);\n }\n function onClick(e, data) {\n var state = getState$$1(data);\n if (!state.useClick) {\n return;\n }\n e.preventDefault();\n // simulate double click\n var clickTime = new Date().getTime();\n if (!state.clickTime) {\n // on first click\n state.clickTime = clickTime;\n return;\n }\n // on second click\n var timeDelta = clickTime - state.clickTime;\n if (timeDelta > state.doubleClickTime) {\n // took too long, back to first click\n state.clickTime = clickTime;\n return;\n }\n // on valid double click\n state.clickTime = undefined;\n if (toggleZoom(data)) {\n updateInput$$1(e, data);\n }\n }\n function onMove(e, data) {\n var state = getState$$1(data);\n if (state.stage.is(':visible')) {\n updateInput$$1(e, data);\n }\n }\n function onDraw(e, data) {\n var state = getState$$1(data);\n // calculate the frame index\n var index = data.lane * data.frames + data.frame;\n // get the zoom image. Use original frames as fallback. This won't work for spritesheets\n var source = state.source[index];\n var spec = findSpecs(data.metrics, data.frames, data.frame, data.lane);\n // get display position\n var x = state.currentX;\n var y = state.currentY;\n // fallback to centered position\n if (x == null) {\n x = state.currentX = 0.5;\n y = state.currentY = 0.5;\n }\n if (source) {\n // scale up from [0:1] to [0:100] range\n x = Math.floor(x * 100);\n y = Math.floor(y * 100);\n // update background image and position\n state.stage.css({\n 'background-repeat': 'no-repeat',\n 'background-image': \"url('\" + source + \"')\",\n 'background-position': x + '% ' + y + '%'\n });\n } else if (spec.sheet && spec.sprite) {\n var sprite = spec.sprite;\n var sheet = spec.sheet;\n var src = data.source[sheet.id];\n var left = -Math.floor(sprite.sampledX + x * (sprite.sampledWidth - data.width));\n var top_1 = -Math.floor(sprite.sampledY + y * (sprite.sampledHeight - data.height));\n var width = sheet.sampledWidth;\n var height = sheet.sampledHeight;\n state.stage.css({\n 'background-image': \"url('\" + src + \"')\",\n 'background-position': left + 'px ' + top_1 + 'px',\n 'background-repeat': 'no-repeat',\n // set custom background size to enable responsive rendering\n '-webkit-background-size': width + 'px ' + height + 'px',\n '-moz-background-size': width + 'px ' + height + 'px',\n '-o-background-size': width + 'px ' + height + 'px',\n 'background-size': width + 'px ' + height + 'px' /* Chrome, Firefox 4+, IE 9+, Opera, Safari 5+ */\n });\n }\n }\n function toggleZoom(data) {\n var state = getState$$1(data);\n if (!state.stage) {\n throw new Error('zoom module is not initialized or is not available.');\n }\n if (state.stage.is(':visible')) {\n showZoom(data);\n } else {\n hideZoom(data);\n return true;\n }\n return false;\n }\n function showZoom(data) {\n var state = getState$$1(data);\n state.stage.fadeOut();\n data.stage.fadeIn();\n }\n function hideZoom(data) {\n var state = getState$$1(data);\n state.stage.fadeIn();\n data.stage.fadeOut();\n }\n function wheel(e, data) {\n var state = getState$$1(data);\n if (!data.loading && state.useWheel) {\n var we = e.originalEvent;\n var signY = we.deltaY === 0 ? 0 : we.deltaY > 0 ? 1 : -1;\n if (typeof state.useWheel === 'number') {\n signY *= state.useWheel;\n }\n if (state.stage.is(':visible') && signY > 0) {\n e.preventDefault();\n showZoom(data);\n }\n if (!state.stage.is(':visible') && signY < 0) {\n e.preventDefault();\n hideZoom(data);\n }\n }\n }\n registerPlugin(NAME, {\n name: NAME,\n mousedown: onClick,\n touchstart: onClick,\n mousemove: onMove,\n touchmove: onMove,\n wheel: wheel,\n onInit: onInit,\n onDestroy: onDestroy,\n onDraw: onDraw\n });\n extendApi({\n toggleZoom: function () { toggleZoom(this.data); } // tslint:disable-line\n });\n }());\n\n var Utils = _Utils;\n\n exports.Utils = Utils;\n exports.sourceArray = sourceArray;\n exports.Api = Api;\n exports.extendApi = extendApi;\n exports.instances = instances;\n exports.applyEvents = applyEvents;\n exports.boot = boot;\n exports.create = create;\n exports.createOrUpdate = createOrUpdate;\n exports.destroy = destroy;\n exports.namespace = namespace;\n exports.eventNames = eventNames;\n exports.callbackNames = callbackNames;\n exports.eventsToPrevent = eventsToPrevent;\n exports.defaults = defaults;\n exports.getInputState = getInputState;\n exports.updateInput = updateInput;\n exports.resetInput = resetInput;\n exports.applyLayout = applyLayout;\n exports.getPlaybackState = getPlaybackState;\n exports.updateFrame = updateFrame;\n exports.stopAnimation = stopAnimation;\n exports.applyAnimation = applyAnimation;\n exports.startAnimation = startAnimation;\n exports.registerPlugin = registerPlugin;\n exports.registerModule = registerModule;\n exports.getPlugin = getPlugin;\n exports.applyPlugins = applyPlugins;\n exports.getState = getState;\n exports.getPluginState = getPluginState;\n exports.is = is;\n exports.flag = flag;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n})));\n// # sourceMappingURL=spritespin.js.map\n"],"sourceRoot":""}