{"version":3,"sources":["webpack:///./node_modules/v-viewer/dist/v-viewer.js","webpack:///./src/components/imgViewer.vue?e531","webpack:///src/components/imgViewer.vue","webpack:///./src/components/imgViewer.vue?4963","webpack:///./src/components/imgViewer.vue","webpack:///./src/components/imgViewer.vue?ea2c","webpack:///./node_modules/viewerjs/dist/viewer.js"],"names":["root","factory","module","exports","this","__WEBPACK_EXTERNAL_MODULE_0__","modules","installedModules","__webpack_require__","moduleId","i","l","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","__webpack_exports__","global","__WEBPACK_IMPORTED_MODULE_0_viewerjs__","__WEBPACK_IMPORTED_MODULE_0_viewerjs___default","__WEBPACK_IMPORTED_MODULE_1_throttle_debounce__","install","Vue","_ref","_ref$name","undefined","_ref$debug","debug","createViewer","el","options","nextTick","destroyViewer","a","log","createObserver","debouncedCreateViewer","destroyObserver","MutationObserver","WebKitMutationObserver","MozMutationObserver","observer","mutations","forEach","mutation","type","config","attributes","childList","characterData","subtree","observe","createWatcher","_ref2","vnode","expression","simplePathRE","test","context","$watch","newVal","oldVal","deep","destroy","disconnect","destroyWatcher","_console","console","apply","arguments","directive","bind","binding","modifiers","static","unbind","extend","extended","length","merge","obj","prop","toString","Component","__file","esModule","keys","some","key","error","functional","__WEBPACK_IMPORTED_MODULE_0__utils__","__WEBPACK_IMPORTED_MODULE_1__component_vue__","__WEBPACK_IMPORTED_MODULE_1__component_vue___default","__WEBPACK_IMPORTED_MODULE_2__directive__","__WEBPACK_IMPORTED_MODULE_3_viewerjs__","__WEBPACK_IMPORTED_MODULE_3_viewerjs___default","defaultOptions","setDefaults","component","use","throttle","delay","noTrailing","callback","debounceMode","timeoutID","lastExec","wrapper","self","elapsed","Number","Date","args","exec","clear","clearTimeout","setTimeout","debounce","atBegin","props","images","Array","trigger","data","computed","methods","$viewer","$el","$emit","watch","_this","$nextTick","handler","_this2","_this3","mounted","destroyed","g","_typeof","Symbol","iterator","constructor","Function","eval","e","window","rawScriptExports","compiledTemplate","scopeId","cssModules","scriptExports","default","render","staticRenderFns","_scopeId","create","_vm","_h","$createElement","_c","_self","_t","_withStripped","ref","staticClass","attrs","on","inited","_l","img","index","staticStyle","_e","zIndex","inline","button","title","url","loadViewer","defIndex","created","f","AttInfo","beforeDestroy","eventBus","$off","viewer","view","_classCallCheck","instance","Constructor","TypeError","_defineProperties","target","descriptor","writable","_createClass","protoProps","staticProps","_defineProperty","ownKeys","enumerableOnly","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","push","_objectSpread2","source","getOwnPropertyDescriptors","defineProperties","DEFAULTS","backdrop","navbar","toolbar","className","container","fullscreen","initialViewIndex","interval","keyboard","loading","loop","minWidth","minHeight","movable","zoomable","rotatable","scalable","toggleOnDblclick","tooltip","transition","zIndexInline","zoomRatio","minZoomRatio","maxZoomRatio","ready","show","shown","hide","hidden","viewed","zoom","zoomed","TEMPLATE","IS_BROWSER","document","WINDOW","IS_TOUCH_DEVICE","documentElement","HAS_POINTER_EVENT","NAMESPACE","ACTION_MOVE","ACTION_SWITCH","ACTION_ZOOM","CLASS_ACTIVE","concat","CLASS_CLOSE","CLASS_FADE","CLASS_FIXED","CLASS_FULLSCREEN","CLASS_FULLSCREEN_EXIT","CLASS_HIDE","CLASS_HIDE_MD_DOWN","CLASS_HIDE_SM_DOWN","CLASS_HIDE_XS_DOWN","CLASS_IN","CLASS_INVISIBLE","CLASS_LOADING","CLASS_MOVE","CLASS_OPEN","CLASS_SHOW","CLASS_TRANSITION","EVENT_CLICK","EVENT_DBLCLICK","EVENT_DRAG_START","EVENT_HIDDEN","EVENT_HIDE","EVENT_KEY_DOWN","EVENT_LOAD","EVENT_TOUCH_START","EVENT_TOUCH_MOVE","EVENT_TOUCH_END","EVENT_POINTER_DOWN","EVENT_POINTER_MOVE","EVENT_POINTER_UP","EVENT_READY","EVENT_RESIZE","EVENT_SHOW","EVENT_SHOWN","EVENT_TRANSITION_END","EVENT_VIEW","EVENT_VIEWED","EVENT_WHEEL","EVENT_ZOOM","EVENT_ZOOMED","DATA_ACTION","REGEXP_SPACES","BUTTONS","isString","isNaN","isNumber","isUndefined","isObject","isPlainObject","_constructor","isFunction","isArray","assign","_len","_key","arg","REGEXP_SUFFIX","setStyle","element","styles","style","escapeHTMLEntities","replace","hasClass","classList","contains","indexOf","addClass","elem","add","trim","removeClass","remove","toggleClass","added","REGEXP_HYPHENATE","hyphenate","toLowerCase","getData","dataset","getAttribute","setData","setAttribute","onceSupported","supported","once","listener","set","addEventListener","removeEventListener","removeListener","split","event","listeners","addListener","_handler","_element$listeners","_len2","_key2","dispatchEvent","Event","CustomEvent","detail","bubbles","cancelable","createEvent","initCustomEvent","getOffset","box","getBoundingClientRect","left","pageXOffset","clientLeft","top","pageYOffset","clientTop","getTransforms","rotate","scaleX","scaleY","translateX","translateY","values","transform","join","WebkitTransform","msTransform","getImageNameFromURL","decodeURIComponent","IS_SAFARI","navigator","userAgent","getImageNaturalSizes","image","newImage","createElement","naturalWidth","naturalHeight","body","onload","width","height","removeChild","src","cssText","appendChild","getResponsiveClass","getMaxZoomRatio","pointers","pointers2","ratios","pointer","pointerId","pointer2","x1","Math","abs","startX","y1","startY","x2","endX","y2","endY","z1","sqrt","z2","ratio","sort","b","getPointer","endOnly","pageX","pageY","end","timeStamp","now","getPointersCenter","count","_ref3","initContainer","initViewer","initList","renderViewer","containerData","innerWidth","innerHeight","viewerData","parent","max","offsetWidth","offsetHeight","parentData","fulled","list","items","innerHTML","alt","item","firstElementChild","loadImage","renderList","outerWidth","resetList","initImage","done","sizingImage","footerHeight","footer","viewerWidth","viewerHeight","oldImageData","imageData","imageInitializing","abort","aspectRatio","min","initialImageData","renderImage","marginLeft","marginTop","viewing","zooming","onTransitionEnd","imageRendering","resetImage","parentNode","events","canvas","ownerDocument","onClick","click","onWheel","wheel","passive","capture","onDragStart","dragstart","onPointerDown","pointerdown","onPointerMove","pointermove","onPointerUp","pointerup","onKeyDown","keydown","onResize","resize","onDblclick","dblclick","handlers","action","isTrusted","clickCanvasTimeout","played","stop","exit","full","toggle","reset","prev","play","next","preventDefault","doubleClickImageTimeout","load","timeout","originalImage","parentWidth","parentHeight","filled","keyCode","which","charCode","ctrlKey","tagName","buttons","showing","hiding","pointerType","changedTouches","touch","identifier","isSwitchable","change","imageClicked","isShown","fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement","player","getElementsByTagName","_this4","wheeling","delta","deltaY","wheelDelta","immediate","build","transitioning","open","zoomTo","querySelector","onLoad","onViewed","complete","maxIndex","move","offsetX","offsetY","moveTo","x","y","changed","hasTooltip","_originalEvent","_zoomable","newWidth","newHeight","oldRatio","originalEvent","offset","center","degree","rotateTo","_scaleX","scale","_scaleY","total","onLoadWhenPlay","requestFullscreen","playing","exitFullscreen","_this5","_this6","close","_this7","tooltipBox","textContent","round","tooltipping","fading","update","isImg","querySelectorAll","indexes","delaying","initializing","onStart","others","paddingRight","scrollbarWidth","parseFloat","initialBodyPaddingRight","webkitRequestFullscreen","Element","ALLOW_KEYBOARD_INPUT","mozRequestFullScreen","msRequestFullscreen","webkitExitFullscreen","mozCancelFullScreen","msExitFullscreen","absoluteOffsetX","AnotherViewer","Viewer","nodeType","Error","init","clientWidth","getComputedStyle","progress","template","custom","zoomButtons","slice","rotateButtons","scaleButtons","size","rotates","position","insertBefore","nextSibling"],"mappings":"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","file":"js/chunk-712c4158.2da2d690.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"viewerjs\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"viewerjs\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"VueViewer\"] = factory(require(\"viewerjs\"));\n\telse\n\t\troot[\"VueViewer\"] = factory(root[\"Viewer\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_0__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \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// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\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, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\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/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 4);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_0__;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_viewerjs__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_viewerjs___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_viewerjs__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_throttle_debounce__ = __webpack_require__(5);\n\n\n\nvar install = function install(Vue, _ref) {\n var _ref$name = _ref.name,\n name = _ref$name === undefined ? 'viewer' : _ref$name,\n _ref$debug = _ref.debug,\n debug = _ref$debug === undefined ? false : _ref$debug;\n\n function createViewer(el, options) {\n Vue.nextTick(function () {\n destroyViewer(el);\n el['$' + name] = new __WEBPACK_IMPORTED_MODULE_0_viewerjs___default.a(el, options);\n log('viewer created');\n });\n }\n\n function createObserver(el, options, debouncedCreateViewer) {\n destroyObserver(el);\n var MutationObserver = global.MutationObserver || global.WebKitMutationObserver || global.MozMutationObserver;\n if (!MutationObserver) {\n log('observer not supported');\n return;\n }\n var observer = new MutationObserver(function (mutations) {\n mutations.forEach(function (mutation) {\n log('viewer mutation:' + mutation.type);\n debouncedCreateViewer(el, options);\n });\n });\n var config = { attributes: true, childList: true, characterData: true, subtree: true };\n observer.observe(el, config);\n el['$viewerMutationObserver'] = observer;\n log('observer created');\n }\n\n function createWatcher(el, _ref2, vnode, debouncedCreateViewer) {\n var expression = _ref2.expression;\n\n var simplePathRE = /^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['[^']*?']|\\[\"[^\"]*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*$/;\n if (!expression || !simplePathRE.test(expression)) {\n log('only simple dot-delimited paths can create watcher');\n return;\n }\n el['$viewerUnwatch'] = vnode.context.$watch(expression, function (newVal, oldVal) {\n log('change detected by watcher: ', expression);\n debouncedCreateViewer(el, newVal);\n }, {\n deep: true\n });\n log('watcher created, expression: ', expression);\n }\n\n function destroyViewer(el) {\n if (!el['$' + name]) {\n return;\n }\n el['$' + name].destroy();\n delete el['$' + name];\n log('viewer destroyed');\n }\n\n function destroyObserver(el) {\n if (!el['$viewerMutationObserver']) {\n return;\n }\n el['$viewerMutationObserver'].disconnect();\n delete el['$viewerMutationObserver'];\n log('observer destroyed');\n }\n\n function destroyWatcher(el) {\n if (!el['$viewerUnwatch']) {\n return;\n }\n el['$viewerUnwatch']();\n delete el['$viewerUnwatch'];\n log('watcher destroyed');\n }\n\n function log() {\n var _console;\n\n debug && (_console = console).log.apply(_console, arguments);\n }\n\n Vue.directive('viewer', {\n bind: function bind(el, binding, vnode) {\n log('viewer bind');\n var debouncedCreateViewer = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_throttle_debounce__[\"a\" /* debounce */])(50, createViewer);\n debouncedCreateViewer(el, binding.value);\n\n createWatcher(el, binding, vnode, debouncedCreateViewer);\n\n if (!binding.modifiers.static) {\n createObserver(el, binding.value, debouncedCreateViewer);\n }\n },\n unbind: function unbind(el, binding) {\n log('viewer unbind');\n\n destroyObserver(el);\n\n destroyWatcher(el);\n\n destroyViewer(el);\n }\n });\n};\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n install: install\n});\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(7)))\n\n/***/ }),\n/* 2 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = extend;\n\nfunction extend() {\n var extended = {};\n var deep = false;\n var i = 0;\n var length = arguments.length;\n\n if (Object.prototype.toString.call(arguments[0]) === '[object Boolean]') {\n deep = arguments[0];\n i++;\n }\n\n function merge(obj) {\n for (var prop in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n if (deep && Object.prototype.toString.call(obj[prop]) === '[object Object]') {\n extended[prop] = extend(true, extended[prop], obj[prop]);\n } else {\n extended[prop] = obj[prop];\n }\n }\n }\n }\n\n for (; i < length; i++) {\n var obj = arguments[i];\n merge(obj);\n }\n\n return extended;\n}\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Component = __webpack_require__(8)(\n /* script */\n __webpack_require__(6),\n /* template */\n __webpack_require__(9),\n /* scopeId */\n null,\n /* cssModules */\n null\n)\nComponent.options.__file = \"D:\\\\Workspaces\\\\Web\\\\Git\\\\v-viewer\\\\src\\\\component.vue\"\nif (Component.esModule && Object.keys(Component.esModule).some(function (key) {return key !== \"default\" && key !== \"__esModule\"})) {console.error(\"named exports are not supported in *.vue files.\")}\nif (Component.options.functional) {console.error(\"[vue-loader] component.vue: functional components are not supported with templates, they should use render functions.\")}\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-3091014c\", Component.options)\n } else {\n hotAPI.reload(\"data-v-3091014c\", Component.options)\n }\n})()}\n\nmodule.exports = Component.exports\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__component_vue__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__component_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1__component_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__directive__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_viewerjs__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_viewerjs___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_viewerjs__);\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n install: function install(Vue) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref$name = _ref.name,\n name = _ref$name === undefined ? 'viewer' : _ref$name,\n _ref$debug = _ref.debug,\n debug = _ref$debug === undefined ? false : _ref$debug,\n defaultOptions = _ref.defaultOptions;\n\n __WEBPACK_IMPORTED_MODULE_3_viewerjs___default.a.setDefaults(defaultOptions);\n\n Vue.component(name, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__[\"a\" /* extend */])(__WEBPACK_IMPORTED_MODULE_1__component_vue___default.a, { name: name }));\n Vue.use(__WEBPACK_IMPORTED_MODULE_2__directive__[\"a\" /* default */], { name: name, debug: debug });\n },\n setDefaults: function setDefaults(defaultOptions) {\n __WEBPACK_IMPORTED_MODULE_3_viewerjs___default.a.setDefaults(defaultOptions);\n }\n});\n\n/***/ }),\n/* 5 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* unused harmony export throttle */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return debounce; });\n\nfunction throttle(delay, noTrailing, callback, debounceMode) {\n\tvar timeoutID;\n\n\tvar lastExec = 0;\n\n\tif (typeof noTrailing !== 'boolean') {\n\t\tdebounceMode = callback;\n\t\tcallback = noTrailing;\n\t\tnoTrailing = undefined;\n\t}\n\n\tfunction wrapper() {\n\n\t\tvar self = this;\n\t\tvar elapsed = Number(new Date()) - lastExec;\n\t\tvar args = arguments;\n\n\t\tfunction exec() {\n\t\t\tlastExec = Number(new Date());\n\t\t\tcallback.apply(self, args);\n\t\t}\n\n\t\tfunction clear() {\n\t\t\ttimeoutID = undefined;\n\t\t}\n\n\t\tif (debounceMode && !timeoutID) {\n\t\t\texec();\n\t\t}\n\n\t\tif (timeoutID) {\n\t\t\tclearTimeout(timeoutID);\n\t\t}\n\n\t\tif (debounceMode === undefined && elapsed > delay) {\n\t\t\texec();\n\t\t} else if (noTrailing !== true) {\n\t\t\ttimeoutID = setTimeout(debounceMode ? clear : exec, debounceMode === undefined ? delay - elapsed : delay);\n\t\t}\n\t}\n\n\treturn wrapper;\n}\n\nfunction debounce(delay, atBegin, callback) {\n\treturn callback === undefined ? throttle(delay, atBegin, false) : throttle(delay, callback, atBegin !== false);\n}\n\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_viewerjs__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_viewerjs___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_viewerjs__);\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n props: {\n images: {\n type: Array\n },\n trigger: {},\n options: {\n type: Object\n }\n },\n\n data: function data() {\n return {};\n },\n\n\n computed: {},\n\n methods: {\n createViewer: function createViewer() {\n this.$viewer && this.$viewer.destroy();\n this.$viewer = new __WEBPACK_IMPORTED_MODULE_0_viewerjs___default.a(this.$el, this.options);\n this.$emit('inited', this.$viewer);\n }\n },\n\n watch: {\n images: function images() {\n var _this = this;\n\n this.$nextTick(function () {\n _this.createViewer();\n });\n },\n\n trigger: {\n handler: function handler() {\n var _this2 = this;\n\n this.$nextTick(function () {\n _this2.createViewer();\n });\n },\n deep: true\n },\n options: {\n handler: function handler() {\n var _this3 = this;\n\n this.$nextTick(function () {\n _this3.createViewer();\n });\n },\n deep: true\n }\n },\n\n mounted: function mounted() {\n this.createViewer();\n },\n destroyed: function destroyed() {\n this.$viewer && this.$viewer.destroy();\n }\n});\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar g;\n\ng = function () {\n\treturn this;\n}();\n\ntry {\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\n} catch (e) {\n\tif ((typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === \"object\") g = window;\n}\n\nmodule.exports = g;\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports) {\n\n// this module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle\n\nmodule.exports = function normalizeComponent (\n rawScriptExports,\n compiledTemplate,\n scopeId,\n cssModules\n) {\n var esModule\n var scriptExports = rawScriptExports = rawScriptExports || {}\n\n // ES6 modules interop\n var type = typeof rawScriptExports.default\n if (type === 'object' || type === 'function') {\n esModule = rawScriptExports\n scriptExports = rawScriptExports.default\n }\n\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (compiledTemplate) {\n options.render = compiledTemplate.render\n options.staticRenderFns = compiledTemplate.staticRenderFns\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = scopeId\n }\n\n // inject cssModules\n if (cssModules) {\n var computed = Object.create(options.computed || null)\n Object.keys(cssModules).forEach(function (key) {\n var module = cssModules[key]\n computed[key] = function () { return module }\n })\n options.computed = computed\n }\n\n return {\n esModule: esModule,\n exports: scriptExports,\n options: options\n }\n}\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('div', [_vm._t(\"default\", null, {\n images: _vm.images,\n options: _vm.options\n })], 2)\n},staticRenderFns: []}\nmodule.exports.render._withStripped = true\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\").rerender(\"data-v-3091014c\", module.exports)\n }\n}\n\n/***/ })\n/******/ ]);\n});","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.loadViewer)?_c('viewer',{ref:\"viewer\",staticClass:\"viewer\",attrs:{\"options\":_vm.options,\"images\":_vm.images},on:{\"inited\":_vm.inited}},_vm._l((_vm.images),function(img,index){return _c('img',{key:index,staticStyle:{\"display\":\"none\"},attrs:{\"src\":img}})}),0):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./imgViewer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./imgViewer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./imgViewer.vue?vue&type=template&id=4f26b42e&\"\nimport script from \"./imgViewer.vue?vue&type=script&lang=js&\"\nexport * from \"./imgViewer.vue?vue&type=script&lang=js&\"\nimport style0 from \"./imgViewer.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./imgViewer.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./imgViewer.vue?vue&type=style&index=0&lang=css&\"","/*!\n * Viewer.js v1.3.7\n * https://fengyuanchen.github.io/viewerjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2019-10-02T09:29:13.426Z\n */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = global || self, global.Viewer = factory());\n}(this, function () { 'use strict';\n\n function _typeof(obj) {\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n }\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n function ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n }\n\n function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(source, true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(source).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n }\n\n var DEFAULTS = {\n /**\n * Enable a modal backdrop, specify `static` for a backdrop\n * which doesn't close the modal on click.\n * @type {boolean}\n */\n backdrop: true,\n\n /**\n * Show the button on the top-right of the viewer.\n * @type {boolean}\n */\n button: true,\n\n /**\n * Show the navbar.\n * @type {boolean | number}\n */\n navbar: true,\n\n /**\n * Specify the visibility and the content of the title.\n * @type {boolean | number | Function | Array}\n */\n title: true,\n\n /**\n * Show the toolbar.\n * @type {boolean | number | Object}\n */\n toolbar: true,\n\n /**\n * Custom class name(s) to add to the viewer's root element.\n * @type {string}\n */\n className: '',\n\n /**\n * Define where to put the viewer in modal mode.\n * @type {string | Element}\n */\n container: 'body',\n\n /**\n * Filter the images for viewing. Return true if the image is viewable.\n * @type {Function}\n */\n filter: null,\n\n /**\n * Enable to request fullscreen when play.\n * @type {boolean}\n */\n fullscreen: true,\n\n /**\n * Define the initial index of image for viewing.\n * @type {number}\n */\n initialViewIndex: 0,\n\n /**\n * Enable inline mode.\n * @type {boolean}\n */\n inline: false,\n\n /**\n * The amount of time to delay between automatically cycling an image when playing.\n * @type {number}\n */\n interval: 5000,\n\n /**\n * Enable keyboard support.\n * @type {boolean}\n */\n keyboard: true,\n\n /**\n * Indicate if show a loading spinner when load image or not.\n * @type {boolean}\n */\n loading: true,\n\n /**\n * Indicate if enable loop viewing or not.\n * @type {boolean}\n */\n loop: true,\n\n /**\n * Min width of the viewer in inline mode.\n * @type {number}\n */\n minWidth: 200,\n\n /**\n * Min height of the viewer in inline mode.\n * @type {number}\n */\n minHeight: 100,\n\n /**\n * Enable to move the image.\n * @type {boolean}\n */\n movable: true,\n\n /**\n * Enable to zoom the image.\n * @type {boolean}\n */\n zoomable: true,\n\n /**\n * Enable to rotate the image.\n * @type {boolean}\n */\n rotatable: true,\n\n /**\n * Enable to scale the image.\n * @type {boolean}\n */\n scalable: true,\n\n /**\n * Indicate if toggle the image size between its natural size\n * and initial size when double click on the image or not.\n * @type {boolean}\n */\n toggleOnDblclick: true,\n\n /**\n * Show the tooltip with image ratio (percentage) when zoom in or zoom out.\n * @type {boolean}\n */\n tooltip: true,\n\n /**\n * Enable CSS3 Transition for some special elements.\n * @type {boolean}\n */\n transition: true,\n\n /**\n * Define the CSS `z-index` value of viewer in modal mode.\n * @type {number}\n */\n zIndex: 2015,\n\n /**\n * Define the CSS `z-index` value of viewer in inline mode.\n * @type {number}\n */\n zIndexInline: 0,\n\n /**\n * Define the ratio when zoom the image by wheeling mouse.\n * @type {number}\n */\n zoomRatio: 0.1,\n\n /**\n * Define the min ratio of the image when zoom out.\n * @type {number}\n */\n minZoomRatio: 0.01,\n\n /**\n * Define the max ratio of the image when zoom in.\n * @type {number}\n */\n maxZoomRatio: 100,\n\n /**\n * Define where to get the original image URL for viewing.\n * @type {string | Function}\n */\n url: 'src',\n\n /**\n * Event shortcuts.\n * @type {Function}\n */\n ready: null,\n show: null,\n shown: null,\n hide: null,\n hidden: null,\n view: null,\n viewed: null,\n zoom: null,\n zoomed: null\n };\n\n var TEMPLATE = '
' + '
' + '
' + '
' + '
' + '
' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ';\n\n var IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';\n var WINDOW = IS_BROWSER ? window : {};\n var IS_TOUCH_DEVICE = IS_BROWSER ? 'ontouchstart' in WINDOW.document.documentElement : false;\n var HAS_POINTER_EVENT = IS_BROWSER ? 'PointerEvent' in WINDOW : false;\n var NAMESPACE = 'viewer'; // Actions\n\n var ACTION_MOVE = 'move';\n var ACTION_SWITCH = 'switch';\n var ACTION_ZOOM = 'zoom'; // Classes\n\n var CLASS_ACTIVE = \"\".concat(NAMESPACE, \"-active\");\n var CLASS_CLOSE = \"\".concat(NAMESPACE, \"-close\");\n var CLASS_FADE = \"\".concat(NAMESPACE, \"-fade\");\n var CLASS_FIXED = \"\".concat(NAMESPACE, \"-fixed\");\n var CLASS_FULLSCREEN = \"\".concat(NAMESPACE, \"-fullscreen\");\n var CLASS_FULLSCREEN_EXIT = \"\".concat(NAMESPACE, \"-fullscreen-exit\");\n var CLASS_HIDE = \"\".concat(NAMESPACE, \"-hide\");\n var CLASS_HIDE_MD_DOWN = \"\".concat(NAMESPACE, \"-hide-md-down\");\n var CLASS_HIDE_SM_DOWN = \"\".concat(NAMESPACE, \"-hide-sm-down\");\n var CLASS_HIDE_XS_DOWN = \"\".concat(NAMESPACE, \"-hide-xs-down\");\n var CLASS_IN = \"\".concat(NAMESPACE, \"-in\");\n var CLASS_INVISIBLE = \"\".concat(NAMESPACE, \"-invisible\");\n var CLASS_LOADING = \"\".concat(NAMESPACE, \"-loading\");\n var CLASS_MOVE = \"\".concat(NAMESPACE, \"-move\");\n var CLASS_OPEN = \"\".concat(NAMESPACE, \"-open\");\n var CLASS_SHOW = \"\".concat(NAMESPACE, \"-show\");\n var CLASS_TRANSITION = \"\".concat(NAMESPACE, \"-transition\"); // Events\n\n var EVENT_CLICK = 'click';\n var EVENT_DBLCLICK = 'dblclick';\n var EVENT_DRAG_START = 'dragstart';\n var EVENT_HIDDEN = 'hidden';\n var EVENT_HIDE = 'hide';\n var EVENT_KEY_DOWN = 'keydown';\n var EVENT_LOAD = 'load';\n var EVENT_TOUCH_START = IS_TOUCH_DEVICE ? 'touchstart' : 'mousedown';\n var EVENT_TOUCH_MOVE = IS_TOUCH_DEVICE ? 'touchmove' : 'mousemove';\n var EVENT_TOUCH_END = IS_TOUCH_DEVICE ? 'touchend touchcancel' : 'mouseup';\n var EVENT_POINTER_DOWN = HAS_POINTER_EVENT ? 'pointerdown' : EVENT_TOUCH_START;\n var EVENT_POINTER_MOVE = HAS_POINTER_EVENT ? 'pointermove' : EVENT_TOUCH_MOVE;\n var EVENT_POINTER_UP = HAS_POINTER_EVENT ? 'pointerup pointercancel' : EVENT_TOUCH_END;\n var EVENT_READY = 'ready';\n var EVENT_RESIZE = 'resize';\n var EVENT_SHOW = 'show';\n var EVENT_SHOWN = 'shown';\n var EVENT_TRANSITION_END = 'transitionend';\n var EVENT_VIEW = 'view';\n var EVENT_VIEWED = 'viewed';\n var EVENT_WHEEL = 'wheel';\n var EVENT_ZOOM = 'zoom';\n var EVENT_ZOOMED = 'zoomed'; // Data keys\n\n var DATA_ACTION = \"\".concat(NAMESPACE, \"Action\"); // RegExps\n\n var REGEXP_SPACES = /\\s\\s*/; // Misc\n\n var BUTTONS = ['zoom-in', 'zoom-out', 'one-to-one', 'reset', 'prev', 'play', 'next', 'rotate-left', 'rotate-right', 'flip-horizontal', 'flip-vertical'];\n\n /**\n * Check if the given value is a string.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a string, else `false`.\n */\n\n function isString(value) {\n return typeof value === 'string';\n }\n /**\n * Check if the given value is not a number.\n */\n\n var isNaN = Number.isNaN || WINDOW.isNaN;\n /**\n * Check if the given value is a number.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a number, else `false`.\n */\n\n function isNumber(value) {\n return typeof value === 'number' && !isNaN(value);\n }\n /**\n * Check if the given value is undefined.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is undefined, else `false`.\n */\n\n function isUndefined(value) {\n return typeof value === 'undefined';\n }\n /**\n * Check if the given value is an object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is an object, else `false`.\n */\n\n function isObject(value) {\n return _typeof(value) === 'object' && value !== null;\n }\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n /**\n * Check if the given value is a plain object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a plain object, else `false`.\n */\n\n function isPlainObject(value) {\n if (!isObject(value)) {\n return false;\n }\n\n try {\n var _constructor = value.constructor;\n var prototype = _constructor.prototype;\n return _constructor && prototype && hasOwnProperty.call(prototype, 'isPrototypeOf');\n } catch (error) {\n return false;\n }\n }\n /**\n * Check if the given value is a function.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a function, else `false`.\n */\n\n function isFunction(value) {\n return typeof value === 'function';\n }\n /**\n * Iterate the given data.\n * @param {*} data - The data to iterate.\n * @param {Function} callback - The process function for each element.\n * @returns {*} The original data.\n */\n\n function forEach(data, callback) {\n if (data && isFunction(callback)) {\n if (Array.isArray(data) || isNumber(data.length)\n /* array-like */\n ) {\n var length = data.length;\n var i;\n\n for (i = 0; i < length; i += 1) {\n if (callback.call(data, data[i], i, data) === false) {\n break;\n }\n }\n } else if (isObject(data)) {\n Object.keys(data).forEach(function (key) {\n callback.call(data, data[key], key, data);\n });\n }\n }\n\n return data;\n }\n /**\n * Extend the given object.\n * @param {*} obj - The object to be extended.\n * @param {*} args - The rest objects which will be merged to the first object.\n * @returns {Object} The extended object.\n */\n\n var assign = Object.assign || function assign(obj) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n if (isObject(obj) && args.length > 0) {\n args.forEach(function (arg) {\n if (isObject(arg)) {\n Object.keys(arg).forEach(function (key) {\n obj[key] = arg[key];\n });\n }\n });\n }\n\n return obj;\n };\n var REGEXP_SUFFIX = /^(?:width|height|left|top|marginLeft|marginTop)$/;\n /**\n * Apply styles to the given element.\n * @param {Element} element - The target element.\n * @param {Object} styles - The styles for applying.\n */\n\n function setStyle(element, styles) {\n var style = element.style;\n forEach(styles, function (value, property) {\n if (REGEXP_SUFFIX.test(property) && isNumber(value)) {\n value += 'px';\n }\n\n style[property] = value;\n });\n }\n /**\n * Escape a string for using in HTML.\n * @param {String} value - The string to escape.\n * @returns {String} Returns the escaped string.\n */\n\n function escapeHTMLEntities(value) {\n return isString(value) ? value.replace(/&(?!amp;|quot;|#39;|lt;|gt;)/g, '&').replace(/\"/g, '"').replace(/'/g, ''').replace(//g, '>') : value;\n }\n /**\n * Check if the given element has a special class.\n * @param {Element} element - The element to check.\n * @param {string} value - The class to search.\n * @returns {boolean} Returns `true` if the special class was found.\n */\n\n function hasClass(element, value) {\n if (!element || !value) {\n return false;\n }\n\n return element.classList ? element.classList.contains(value) : element.className.indexOf(value) > -1;\n }\n /**\n * Add classes to the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be added.\n */\n\n function addClass(element, value) {\n if (!element || !value) {\n return;\n }\n\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n addClass(elem, value);\n });\n return;\n }\n\n if (element.classList) {\n element.classList.add(value);\n return;\n }\n\n var className = element.className.trim();\n\n if (!className) {\n element.className = value;\n } else if (className.indexOf(value) < 0) {\n element.className = \"\".concat(className, \" \").concat(value);\n }\n }\n /**\n * Remove classes from the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be removed.\n */\n\n function removeClass(element, value) {\n if (!element || !value) {\n return;\n }\n\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n removeClass(elem, value);\n });\n return;\n }\n\n if (element.classList) {\n element.classList.remove(value);\n return;\n }\n\n if (element.className.indexOf(value) >= 0) {\n element.className = element.className.replace(value, '');\n }\n }\n /**\n * Add or remove classes from the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be toggled.\n * @param {boolean} added - Add only.\n */\n\n function toggleClass(element, value, added) {\n if (!value) {\n return;\n }\n\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n toggleClass(elem, value, added);\n });\n return;\n } // IE10-11 doesn't support the second parameter of `classList.toggle`\n\n\n if (added) {\n addClass(element, value);\n } else {\n removeClass(element, value);\n }\n }\n var REGEXP_HYPHENATE = /([a-z\\d])([A-Z])/g;\n /**\n * Transform the given string from camelCase to kebab-case\n * @param {string} value - The value to transform.\n * @returns {string} The transformed value.\n */\n\n function hyphenate(value) {\n return value.replace(REGEXP_HYPHENATE, '$1-$2').toLowerCase();\n }\n /**\n * Get data from the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to get.\n * @returns {string} The data value.\n */\n\n function getData(element, name) {\n if (isObject(element[name])) {\n return element[name];\n }\n\n if (element.dataset) {\n return element.dataset[name];\n }\n\n return element.getAttribute(\"data-\".concat(hyphenate(name)));\n }\n /**\n * Set data to the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to set.\n * @param {string} data - The data value.\n */\n\n function setData(element, name, data) {\n if (isObject(data)) {\n element[name] = data;\n } else if (element.dataset) {\n element.dataset[name] = data;\n } else {\n element.setAttribute(\"data-\".concat(hyphenate(name)), data);\n }\n }\n\n var onceSupported = function () {\n var supported = false;\n\n if (IS_BROWSER) {\n var once = false;\n\n var listener = function listener() {};\n\n var options = Object.defineProperty({}, 'once', {\n get: function get() {\n supported = true;\n return once;\n },\n\n /**\n * This setter can fix a `TypeError` in strict mode\n * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only}\n * @param {boolean} value - The value to set\n */\n set: function set(value) {\n once = value;\n }\n });\n WINDOW.addEventListener('test', listener, options);\n WINDOW.removeEventListener('test', listener, options);\n }\n\n return supported;\n }();\n /**\n * Remove event listener from the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Function} listener - The event listener.\n * @param {Object} options - The event options.\n */\n\n\n function removeListener(element, type, listener) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var handler = listener;\n type.trim().split(REGEXP_SPACES).forEach(function (event) {\n if (!onceSupported) {\n var listeners = element.listeners;\n\n if (listeners && listeners[event] && listeners[event][listener]) {\n handler = listeners[event][listener];\n delete listeners[event][listener];\n\n if (Object.keys(listeners[event]).length === 0) {\n delete listeners[event];\n }\n\n if (Object.keys(listeners).length === 0) {\n delete element.listeners;\n }\n }\n }\n\n element.removeEventListener(event, handler, options);\n });\n }\n /**\n * Add event listener to the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Function} listener - The event listener.\n * @param {Object} options - The event options.\n */\n\n function addListener(element, type, listener) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var _handler = listener;\n type.trim().split(REGEXP_SPACES).forEach(function (event) {\n if (options.once && !onceSupported) {\n var _element$listeners = element.listeners,\n listeners = _element$listeners === void 0 ? {} : _element$listeners;\n\n _handler = function handler() {\n delete listeners[event][listener];\n element.removeEventListener(event, _handler, options);\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n listener.apply(element, args);\n };\n\n if (!listeners[event]) {\n listeners[event] = {};\n }\n\n if (listeners[event][listener]) {\n element.removeEventListener(event, listeners[event][listener], options);\n }\n\n listeners[event][listener] = _handler;\n element.listeners = listeners;\n }\n\n element.addEventListener(event, _handler, options);\n });\n }\n /**\n * Dispatch event on the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Object} data - The additional event data.\n * @returns {boolean} Indicate if the event is default prevented or not.\n */\n\n function dispatchEvent(element, type, data) {\n var event; // Event and CustomEvent on IE9-11 are global objects, not constructors\n\n if (isFunction(Event) && isFunction(CustomEvent)) {\n event = new CustomEvent(type, {\n detail: data,\n bubbles: true,\n cancelable: true\n });\n } else {\n event = document.createEvent('CustomEvent');\n event.initCustomEvent(type, true, true, data);\n }\n\n return element.dispatchEvent(event);\n }\n /**\n * Get the offset base on the document.\n * @param {Element} element - The target element.\n * @returns {Object} The offset data.\n */\n\n function getOffset(element) {\n var box = element.getBoundingClientRect();\n return {\n left: box.left + (window.pageXOffset - document.documentElement.clientLeft),\n top: box.top + (window.pageYOffset - document.documentElement.clientTop)\n };\n }\n /**\n * Get transforms base on the given object.\n * @param {Object} obj - The target object.\n * @returns {string} A string contains transform values.\n */\n\n function getTransforms(_ref) {\n var rotate = _ref.rotate,\n scaleX = _ref.scaleX,\n scaleY = _ref.scaleY,\n translateX = _ref.translateX,\n translateY = _ref.translateY;\n var values = [];\n\n if (isNumber(translateX) && translateX !== 0) {\n values.push(\"translateX(\".concat(translateX, \"px)\"));\n }\n\n if (isNumber(translateY) && translateY !== 0) {\n values.push(\"translateY(\".concat(translateY, \"px)\"));\n } // Rotate should come first before scale to match orientation transform\n\n\n if (isNumber(rotate) && rotate !== 0) {\n values.push(\"rotate(\".concat(rotate, \"deg)\"));\n }\n\n if (isNumber(scaleX) && scaleX !== 1) {\n values.push(\"scaleX(\".concat(scaleX, \")\"));\n }\n\n if (isNumber(scaleY) && scaleY !== 1) {\n values.push(\"scaleY(\".concat(scaleY, \")\"));\n }\n\n var transform = values.length ? values.join(' ') : 'none';\n return {\n WebkitTransform: transform,\n msTransform: transform,\n transform: transform\n };\n }\n /**\n * Get an image name from an image url.\n * @param {string} url - The target url.\n * @example\n * // picture.jpg\n * getImageNameFromURL('http://domain.com/path/to/picture.jpg?size=1280×960')\n * @returns {string} A string contains the image name.\n */\n\n function getImageNameFromURL(url) {\n return isString(url) ? decodeURIComponent(url.replace(/^.*\\//, '').replace(/[?&#].*$/, '')) : '';\n }\n var IS_SAFARI = WINDOW.navigator && /(Macintosh|iPhone|iPod|iPad).*AppleWebKit/i.test(WINDOW.navigator.userAgent);\n /**\n * Get an image's natural sizes.\n * @param {string} image - The target image.\n * @param {Function} callback - The callback function.\n * @returns {HTMLImageElement} The new image.\n */\n\n function getImageNaturalSizes(image, callback) {\n var newImage = document.createElement('img'); // Modern browsers (except Safari)\n\n if (image.naturalWidth && !IS_SAFARI) {\n callback(image.naturalWidth, image.naturalHeight);\n return newImage;\n }\n\n var body = document.body || document.documentElement;\n\n newImage.onload = function () {\n callback(newImage.width, newImage.height);\n\n if (!IS_SAFARI) {\n body.removeChild(newImage);\n }\n };\n\n newImage.src = image.src; // iOS Safari will convert the image automatically\n // with its orientation once append it into DOM\n\n if (!IS_SAFARI) {\n newImage.style.cssText = 'left:0;' + 'max-height:none!important;' + 'max-width:none!important;' + 'min-height:0!important;' + 'min-width:0!important;' + 'opacity:0;' + 'position:absolute;' + 'top:0;' + 'z-index:-1;';\n body.appendChild(newImage);\n }\n\n return newImage;\n }\n /**\n * Get the related class name of a responsive type number.\n * @param {string} type - The responsive type.\n * @returns {string} The related class name.\n */\n\n function getResponsiveClass(type) {\n switch (type) {\n case 2:\n return CLASS_HIDE_XS_DOWN;\n\n case 3:\n return CLASS_HIDE_SM_DOWN;\n\n case 4:\n return CLASS_HIDE_MD_DOWN;\n\n default:\n return '';\n }\n }\n /**\n * Get the max ratio of a group of pointers.\n * @param {string} pointers - The target pointers.\n * @returns {number} The result ratio.\n */\n\n function getMaxZoomRatio(pointers) {\n var pointers2 = _objectSpread2({}, pointers);\n\n var ratios = [];\n forEach(pointers, function (pointer, pointerId) {\n delete pointers2[pointerId];\n forEach(pointers2, function (pointer2) {\n var x1 = Math.abs(pointer.startX - pointer2.startX);\n var y1 = Math.abs(pointer.startY - pointer2.startY);\n var x2 = Math.abs(pointer.endX - pointer2.endX);\n var y2 = Math.abs(pointer.endY - pointer2.endY);\n var z1 = Math.sqrt(x1 * x1 + y1 * y1);\n var z2 = Math.sqrt(x2 * x2 + y2 * y2);\n var ratio = (z2 - z1) / z1;\n ratios.push(ratio);\n });\n });\n ratios.sort(function (a, b) {\n return Math.abs(a) < Math.abs(b);\n });\n return ratios[0];\n }\n /**\n * Get a pointer from an event object.\n * @param {Object} event - The target event object.\n * @param {boolean} endOnly - Indicates if only returns the end point coordinate or not.\n * @returns {Object} The result pointer contains start and/or end point coordinates.\n */\n\n function getPointer(_ref2, endOnly) {\n var pageX = _ref2.pageX,\n pageY = _ref2.pageY;\n var end = {\n endX: pageX,\n endY: pageY\n };\n return endOnly ? end : _objectSpread2({\n timeStamp: Date.now(),\n startX: pageX,\n startY: pageY\n }, end);\n }\n /**\n * Get the center point coordinate of a group of pointers.\n * @param {Object} pointers - The target pointers.\n * @returns {Object} The center point coordinate.\n */\n\n function getPointersCenter(pointers) {\n var pageX = 0;\n var pageY = 0;\n var count = 0;\n forEach(pointers, function (_ref3) {\n var startX = _ref3.startX,\n startY = _ref3.startY;\n pageX += startX;\n pageY += startY;\n count += 1;\n });\n pageX /= count;\n pageY /= count;\n return {\n pageX: pageX,\n pageY: pageY\n };\n }\n\n var render = {\n render: function render() {\n this.initContainer();\n this.initViewer();\n this.initList();\n this.renderViewer();\n },\n initContainer: function initContainer() {\n this.containerData = {\n width: window.innerWidth,\n height: window.innerHeight\n };\n },\n initViewer: function initViewer() {\n var options = this.options,\n parent = this.parent;\n var viewerData;\n\n if (options.inline) {\n viewerData = {\n width: Math.max(parent.offsetWidth, options.minWidth),\n height: Math.max(parent.offsetHeight, options.minHeight)\n };\n this.parentData = viewerData;\n }\n\n if (this.fulled || !viewerData) {\n viewerData = this.containerData;\n }\n\n this.viewerData = assign({}, viewerData);\n },\n renderViewer: function renderViewer() {\n if (this.options.inline && !this.fulled) {\n setStyle(this.viewer, this.viewerData);\n }\n },\n initList: function initList() {\n var _this = this;\n\n var element = this.element,\n options = this.options,\n list = this.list;\n var items = []; // initList may be called in this.update, so should keep idempotent\n\n list.innerHTML = '';\n forEach(this.images, function (image, index) {\n var src = image.src;\n var alt = image.alt || getImageNameFromURL(src);\n var url = options.url;\n\n if (isString(url)) {\n url = image.getAttribute(url);\n } else if (isFunction(url)) {\n url = url.call(_this, image);\n }\n\n if (src || url) {\n var item = document.createElement('li');\n var img = document.createElement('img');\n img.src = src || url;\n img.alt = alt;\n img.setAttribute('data-index', index);\n img.setAttribute('data-original-url', url || src);\n img.setAttribute('data-viewer-action', 'view');\n img.setAttribute('role', 'button');\n item.appendChild(img);\n list.appendChild(item);\n items.push(item);\n }\n });\n this.items = items;\n forEach(items, function (item) {\n var image = item.firstElementChild;\n setData(image, 'filled', true);\n\n if (options.loading) {\n addClass(item, CLASS_LOADING);\n }\n\n addListener(image, EVENT_LOAD, function (event) {\n if (options.loading) {\n removeClass(item, CLASS_LOADING);\n }\n\n _this.loadImage(event);\n }, {\n once: true\n });\n });\n\n if (options.transition) {\n addListener(element, EVENT_VIEWED, function () {\n addClass(list, CLASS_TRANSITION);\n }, {\n once: true\n });\n }\n },\n renderList: function renderList(index) {\n var i = index || this.index;\n var width = this.items[i].offsetWidth || 30;\n var outerWidth = width + 1; // 1 pixel of `margin-left` width\n // Place the active item in the center of the screen\n\n setStyle(this.list, assign({\n width: outerWidth * this.length\n }, getTransforms({\n translateX: (this.viewerData.width - width) / 2 - outerWidth * i\n })));\n },\n resetList: function resetList() {\n var list = this.list;\n list.innerHTML = '';\n removeClass(list, CLASS_TRANSITION);\n setStyle(list, getTransforms({\n translateX: 0\n }));\n },\n initImage: function initImage(done) {\n var _this2 = this;\n\n var options = this.options,\n image = this.image,\n viewerData = this.viewerData;\n var footerHeight = this.footer.offsetHeight;\n var viewerWidth = viewerData.width;\n var viewerHeight = Math.max(viewerData.height - footerHeight, footerHeight);\n var oldImageData = this.imageData || {};\n var sizingImage;\n this.imageInitializing = {\n abort: function abort() {\n sizingImage.onload = null;\n }\n };\n sizingImage = getImageNaturalSizes(image, function (naturalWidth, naturalHeight) {\n var aspectRatio = naturalWidth / naturalHeight;\n var width = viewerWidth;\n var height = viewerHeight;\n _this2.imageInitializing = false;\n\n if (viewerHeight * aspectRatio > viewerWidth) {\n height = viewerWidth / aspectRatio;\n } else {\n width = viewerHeight * aspectRatio;\n }\n\n width = Math.min(width * 0.9, naturalWidth);\n height = Math.min(height * 0.9, naturalHeight);\n var imageData = {\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight,\n aspectRatio: aspectRatio,\n ratio: width / naturalWidth,\n width: width,\n height: height,\n left: (viewerWidth - width) / 2,\n top: (viewerHeight - height) / 2\n };\n var initialImageData = assign({}, imageData);\n\n if (options.rotatable) {\n imageData.rotate = oldImageData.rotate || 0;\n initialImageData.rotate = 0;\n }\n\n if (options.scalable) {\n imageData.scaleX = oldImageData.scaleX || 1;\n imageData.scaleY = oldImageData.scaleY || 1;\n initialImageData.scaleX = 1;\n initialImageData.scaleY = 1;\n }\n\n _this2.imageData = imageData;\n _this2.initialImageData = initialImageData;\n\n if (done) {\n done();\n }\n });\n },\n renderImage: function renderImage(done) {\n var _this3 = this;\n\n var image = this.image,\n imageData = this.imageData;\n setStyle(image, assign({\n width: imageData.width,\n height: imageData.height,\n // XXX: Not to use translateX/Y to avoid image shaking when zooming\n marginLeft: imageData.left,\n marginTop: imageData.top\n }, getTransforms(imageData)));\n\n if (done) {\n if ((this.viewing || this.zooming) && this.options.transition) {\n var onTransitionEnd = function onTransitionEnd() {\n _this3.imageRendering = false;\n done();\n };\n\n this.imageRendering = {\n abort: function abort() {\n removeListener(image, EVENT_TRANSITION_END, onTransitionEnd);\n }\n };\n addListener(image, EVENT_TRANSITION_END, onTransitionEnd, {\n once: true\n });\n } else {\n done();\n }\n }\n },\n resetImage: function resetImage() {\n // this.image only defined after viewed\n if (this.viewing || this.viewed) {\n var image = this.image;\n\n if (this.viewing) {\n this.viewing.abort();\n }\n\n image.parentNode.removeChild(image);\n this.image = null;\n }\n }\n };\n\n var events = {\n bind: function bind() {\n var options = this.options,\n viewer = this.viewer,\n canvas = this.canvas;\n var document = this.element.ownerDocument;\n addListener(viewer, EVENT_CLICK, this.onClick = this.click.bind(this));\n addListener(viewer, EVENT_WHEEL, this.onWheel = this.wheel.bind(this), {\n passive: false,\n capture: true\n });\n addListener(viewer, EVENT_DRAG_START, this.onDragStart = this.dragstart.bind(this));\n addListener(canvas, EVENT_POINTER_DOWN, this.onPointerDown = this.pointerdown.bind(this));\n addListener(document, EVENT_POINTER_MOVE, this.onPointerMove = this.pointermove.bind(this));\n addListener(document, EVENT_POINTER_UP, this.onPointerUp = this.pointerup.bind(this));\n addListener(document, EVENT_KEY_DOWN, this.onKeyDown = this.keydown.bind(this));\n addListener(window, EVENT_RESIZE, this.onResize = this.resize.bind(this));\n\n if (options.toggleOnDblclick) {\n addListener(canvas, EVENT_DBLCLICK, this.onDblclick = this.dblclick.bind(this));\n }\n },\n unbind: function unbind() {\n var options = this.options,\n viewer = this.viewer,\n canvas = this.canvas;\n var document = this.element.ownerDocument;\n removeListener(viewer, EVENT_CLICK, this.onClick);\n removeListener(viewer, EVENT_WHEEL, this.onWheel, {\n passive: false,\n capture: true\n });\n removeListener(viewer, EVENT_DRAG_START, this.onDragStart);\n removeListener(canvas, EVENT_POINTER_DOWN, this.onPointerDown);\n removeListener(document, EVENT_POINTER_MOVE, this.onPointerMove);\n removeListener(document, EVENT_POINTER_UP, this.onPointerUp);\n removeListener(document, EVENT_KEY_DOWN, this.onKeyDown);\n removeListener(window, EVENT_RESIZE, this.onResize);\n\n if (options.toggleOnDblclick) {\n removeListener(canvas, EVENT_DBLCLICK, this.onDblclick);\n }\n }\n };\n\n var handlers = {\n click: function click(event) {\n var target = event.target;\n var options = this.options,\n imageData = this.imageData;\n var action = getData(target, DATA_ACTION); // Cancel the emulated click when the native click event was triggered.\n\n if (IS_TOUCH_DEVICE && event.isTrusted && target === this.canvas) {\n clearTimeout(this.clickCanvasTimeout);\n }\n\n switch (action) {\n case 'mix':\n if (this.played) {\n this.stop();\n } else if (options.inline) {\n if (this.fulled) {\n this.exit();\n } else {\n this.full();\n }\n } else {\n this.hide();\n }\n\n break;\n\n case 'hide':\n this.hide();\n break;\n\n case 'view':\n this.view(getData(target, 'index'));\n break;\n\n case 'zoom-in':\n this.zoom(0.1, true);\n break;\n\n case 'zoom-out':\n this.zoom(-0.1, true);\n break;\n\n case 'one-to-one':\n this.toggle();\n break;\n\n case 'reset':\n this.reset();\n break;\n\n case 'prev':\n this.prev(options.loop);\n break;\n\n case 'play':\n this.play(options.fullscreen);\n break;\n\n case 'next':\n this.next(options.loop);\n break;\n\n case 'rotate-left':\n this.rotate(-90);\n break;\n\n case 'rotate-right':\n this.rotate(90);\n break;\n\n case 'flip-horizontal':\n this.scaleX(-imageData.scaleX || -1);\n break;\n\n case 'flip-vertical':\n this.scaleY(-imageData.scaleY || -1);\n break;\n\n default:\n if (this.played) {\n this.stop();\n }\n\n }\n },\n dblclick: function dblclick(event) {\n event.preventDefault();\n\n if (this.viewed && event.target === this.image) {\n // Cancel the emulated double click when the native dblclick event was triggered.\n if (IS_TOUCH_DEVICE && event.isTrusted) {\n clearTimeout(this.doubleClickImageTimeout);\n }\n\n this.toggle();\n }\n },\n load: function load() {\n var _this = this;\n\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = false;\n }\n\n var element = this.element,\n options = this.options,\n image = this.image,\n index = this.index,\n viewerData = this.viewerData;\n removeClass(image, CLASS_INVISIBLE);\n\n if (options.loading) {\n removeClass(this.canvas, CLASS_LOADING);\n }\n\n image.style.cssText = 'height:0;' + \"margin-left:\".concat(viewerData.width / 2, \"px;\") + \"margin-top:\".concat(viewerData.height / 2, \"px;\") + 'max-width:none!important;' + 'position:absolute;' + 'width:0;';\n this.initImage(function () {\n toggleClass(image, CLASS_MOVE, options.movable);\n toggleClass(image, CLASS_TRANSITION, options.transition);\n\n _this.renderImage(function () {\n _this.viewed = true;\n _this.viewing = false;\n\n if (isFunction(options.viewed)) {\n addListener(element, EVENT_VIEWED, options.viewed, {\n once: true\n });\n }\n\n dispatchEvent(element, EVENT_VIEWED, {\n originalImage: _this.images[index],\n index: index,\n image: image\n });\n });\n });\n },\n loadImage: function loadImage(event) {\n var image = event.target;\n var parent = image.parentNode;\n var parentWidth = parent.offsetWidth || 30;\n var parentHeight = parent.offsetHeight || 50;\n var filled = !!getData(image, 'filled');\n getImageNaturalSizes(image, function (naturalWidth, naturalHeight) {\n var aspectRatio = naturalWidth / naturalHeight;\n var width = parentWidth;\n var height = parentHeight;\n\n if (parentHeight * aspectRatio > parentWidth) {\n if (filled) {\n width = parentHeight * aspectRatio;\n } else {\n height = parentWidth / aspectRatio;\n }\n } else if (filled) {\n height = parentWidth / aspectRatio;\n } else {\n width = parentHeight * aspectRatio;\n }\n\n setStyle(image, assign({\n width: width,\n height: height\n }, getTransforms({\n translateX: (parentWidth - width) / 2,\n translateY: (parentHeight - height) / 2\n })));\n });\n },\n keydown: function keydown(event) {\n var options = this.options;\n\n if (!this.fulled || !options.keyboard) {\n return;\n }\n\n switch (event.keyCode || event.which || event.charCode) {\n // Escape\n case 27:\n if (this.played) {\n this.stop();\n } else if (options.inline) {\n if (this.fulled) {\n this.exit();\n }\n } else {\n this.hide();\n }\n\n break;\n // Space\n\n case 32:\n if (this.played) {\n this.stop();\n }\n\n break;\n // ArrowLeft\n\n case 37:\n this.prev(options.loop);\n break;\n // ArrowUp\n\n case 38:\n // Prevent scroll on Firefox\n event.preventDefault(); // Zoom in\n\n this.zoom(options.zoomRatio, true);\n break;\n // ArrowRight\n\n case 39:\n this.next(options.loop);\n break;\n // ArrowDown\n\n case 40:\n // Prevent scroll on Firefox\n event.preventDefault(); // Zoom out\n\n this.zoom(-options.zoomRatio, true);\n break;\n // Ctrl + 0\n\n case 48: // Fall through\n // Ctrl + 1\n // eslint-disable-next-line no-fallthrough\n\n case 49:\n if (event.ctrlKey) {\n event.preventDefault();\n this.toggle();\n }\n\n break;\n\n default:\n }\n },\n dragstart: function dragstart(event) {\n if (event.target.tagName.toLowerCase() === 'img') {\n event.preventDefault();\n }\n },\n pointerdown: function pointerdown(event) {\n var options = this.options,\n pointers = this.pointers;\n var buttons = event.buttons,\n button = event.button;\n\n if (!this.viewed || this.showing || this.viewing || this.hiding // Handle mouse event and pointer event and ignore touch event\n || (event.type === 'mousedown' || event.type === 'pointerdown' && event.pointerType === 'mouse') && ( // No primary button (Usually the left button)\n isNumber(buttons) && buttons !== 1 || isNumber(button) && button !== 0 // Open context menu\n || event.ctrlKey)) {\n return;\n } // Prevent default behaviours as page zooming in touch devices.\n\n\n event.preventDefault();\n\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n pointers[touch.identifier] = getPointer(touch);\n });\n } else {\n pointers[event.pointerId || 0] = getPointer(event);\n }\n\n var action = options.movable ? ACTION_MOVE : false;\n\n if (Object.keys(pointers).length > 1) {\n action = ACTION_ZOOM;\n } else if ((event.pointerType === 'touch' || event.type === 'touchstart') && this.isSwitchable()) {\n action = ACTION_SWITCH;\n }\n\n if (options.transition && (action === ACTION_MOVE || action === ACTION_ZOOM)) {\n removeClass(this.image, CLASS_TRANSITION);\n }\n\n this.action = action;\n },\n pointermove: function pointermove(event) {\n var pointers = this.pointers,\n action = this.action;\n\n if (!this.viewed || !action) {\n return;\n }\n\n event.preventDefault();\n\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n assign(pointers[touch.identifier] || {}, getPointer(touch, true));\n });\n } else {\n assign(pointers[event.pointerId || 0] || {}, getPointer(event, true));\n }\n\n this.change(event);\n },\n pointerup: function pointerup(event) {\n var _this2 = this;\n\n var options = this.options,\n action = this.action,\n pointers = this.pointers;\n var pointer;\n\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n pointer = pointers[touch.identifier];\n delete pointers[touch.identifier];\n });\n } else {\n pointer = pointers[event.pointerId || 0];\n delete pointers[event.pointerId || 0];\n }\n\n if (!action) {\n return;\n }\n\n event.preventDefault();\n\n if (options.transition && (action === ACTION_MOVE || action === ACTION_ZOOM)) {\n addClass(this.image, CLASS_TRANSITION);\n }\n\n this.action = false; // Emulate click and double click in touch devices to support backdrop and image zooming (#210).\n\n if (IS_TOUCH_DEVICE && action !== ACTION_ZOOM && pointer && Date.now() - pointer.timeStamp < 500) {\n clearTimeout(this.clickCanvasTimeout);\n clearTimeout(this.doubleClickImageTimeout);\n\n if (options.toggleOnDblclick && this.viewed && event.target === this.image) {\n if (this.imageClicked) {\n this.imageClicked = false; // This timeout will be cleared later when a native dblclick event is triggering\n\n this.doubleClickImageTimeout = setTimeout(function () {\n dispatchEvent(_this2.image, EVENT_DBLCLICK);\n }, 50);\n } else {\n this.imageClicked = true; // The default timing of a double click in Windows is 500 ms\n\n this.doubleClickImageTimeout = setTimeout(function () {\n _this2.imageClicked = false;\n }, 500);\n }\n } else {\n this.imageClicked = false;\n\n if (options.backdrop && options.backdrop !== 'static' && event.target === this.canvas) {\n // This timeout will be cleared later when a native click event is triggering\n this.clickCanvasTimeout = setTimeout(function () {\n dispatchEvent(_this2.canvas, EVENT_CLICK);\n }, 50);\n }\n }\n }\n },\n resize: function resize() {\n var _this3 = this;\n\n if (!this.isShown || this.hiding) {\n return;\n }\n\n this.initContainer();\n this.initViewer();\n this.renderViewer();\n this.renderList();\n\n if (this.viewed) {\n this.initImage(function () {\n _this3.renderImage();\n });\n }\n\n if (this.played) {\n if (this.options.fullscreen && this.fulled && !(document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement)) {\n this.stop();\n return;\n }\n\n forEach(this.player.getElementsByTagName('img'), function (image) {\n addListener(image, EVENT_LOAD, _this3.loadImage.bind(_this3), {\n once: true\n });\n dispatchEvent(image, EVENT_LOAD);\n });\n }\n },\n wheel: function wheel(event) {\n var _this4 = this;\n\n if (!this.viewed) {\n return;\n }\n\n event.preventDefault(); // Limit wheel speed to prevent zoom too fast\n\n if (this.wheeling) {\n return;\n }\n\n this.wheeling = true;\n setTimeout(function () {\n _this4.wheeling = false;\n }, 50);\n var ratio = Number(this.options.zoomRatio) || 0.1;\n var delta = 1;\n\n if (event.deltaY) {\n delta = event.deltaY > 0 ? 1 : -1;\n } else if (event.wheelDelta) {\n delta = -event.wheelDelta / 120;\n } else if (event.detail) {\n delta = event.detail > 0 ? 1 : -1;\n }\n\n this.zoom(-delta * ratio, true, event);\n }\n };\n\n var methods = {\n /** Show the viewer (only available in modal mode)\n * @param {boolean} [immediate=false] - Indicates if show the viewer immediately or not.\n * @returns {Viewer} this\n */\n show: function show() {\n var immediate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var element = this.element,\n options = this.options;\n\n if (options.inline || this.showing || this.isShown || this.showing) {\n return this;\n }\n\n if (!this.ready) {\n this.build();\n\n if (this.ready) {\n this.show(immediate);\n }\n\n return this;\n }\n\n if (isFunction(options.show)) {\n addListener(element, EVENT_SHOW, options.show, {\n once: true\n });\n }\n\n if (dispatchEvent(element, EVENT_SHOW) === false || !this.ready) {\n return this;\n }\n\n if (this.hiding) {\n this.transitioning.abort();\n }\n\n this.showing = true;\n this.open();\n var viewer = this.viewer;\n removeClass(viewer, CLASS_HIDE);\n\n if (options.transition && !immediate) {\n var shown = this.shown.bind(this);\n this.transitioning = {\n abort: function abort() {\n removeListener(viewer, EVENT_TRANSITION_END, shown);\n removeClass(viewer, CLASS_IN);\n }\n };\n addClass(viewer, CLASS_TRANSITION); // Force reflow to enable CSS3 transition\n // eslint-disable-next-line\n\n viewer.offsetWidth;\n addListener(viewer, EVENT_TRANSITION_END, shown, {\n once: true\n });\n addClass(viewer, CLASS_IN);\n } else {\n addClass(viewer, CLASS_IN);\n this.shown();\n }\n\n return this;\n },\n\n /**\n * Hide the viewer (only available in modal mode)\n * @param {boolean} [immediate=false] - Indicates if hide the viewer immediately or not.\n * @returns {Viewer} this\n */\n hide: function hide() {\n var immediate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var element = this.element,\n options = this.options;\n\n if (options.inline || this.hiding || !(this.isShown || this.showing)) {\n return this;\n }\n\n if (isFunction(options.hide)) {\n addListener(element, EVENT_HIDE, options.hide, {\n once: true\n });\n }\n\n if (dispatchEvent(element, EVENT_HIDE) === false) {\n return this;\n }\n\n if (this.showing) {\n this.transitioning.abort();\n }\n\n this.hiding = true;\n\n if (this.played) {\n this.stop();\n } else if (this.viewing) {\n this.viewing.abort();\n }\n\n var viewer = this.viewer;\n\n if (options.transition && !immediate) {\n var hidden = this.hidden.bind(this);\n\n var hide = function hide() {\n // XXX: It seems the `event.stopPropagation()` method does not work here\n setTimeout(function () {\n addListener(viewer, EVENT_TRANSITION_END, hidden, {\n once: true\n });\n removeClass(viewer, CLASS_IN);\n }, 0);\n };\n\n this.transitioning = {\n abort: function abort() {\n if (this.viewed) {\n removeListener(this.image, EVENT_TRANSITION_END, hide);\n } else {\n removeListener(viewer, EVENT_TRANSITION_END, hidden);\n }\n }\n }; // Note that the `CLASS_TRANSITION` class will be removed on pointer down (#255)\n\n if (this.viewed && hasClass(this.image, CLASS_TRANSITION)) {\n addListener(this.image, EVENT_TRANSITION_END, hide, {\n once: true\n });\n this.zoomTo(0, false, false, true);\n } else {\n hide();\n }\n } else {\n removeClass(viewer, CLASS_IN);\n this.hidden();\n }\n\n return this;\n },\n\n /**\n * View one of the images with image's index\n * @param {number} index - The index of the image to view.\n * @returns {Viewer} this\n */\n view: function view() {\n var _this = this;\n\n var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.options.initialViewIndex;\n index = Number(index) || 0;\n\n if (this.hiding || this.played || index < 0 || index >= this.length || this.viewed && index === this.index) {\n return this;\n }\n\n if (!this.isShown) {\n this.index = index;\n return this.show();\n }\n\n if (this.viewing) {\n this.viewing.abort();\n }\n\n var element = this.element,\n options = this.options,\n title = this.title,\n canvas = this.canvas;\n var item = this.items[index];\n var img = item.querySelector('img');\n var url = getData(img, 'originalUrl');\n var alt = img.getAttribute('alt');\n var image = document.createElement('img');\n image.src = url;\n image.alt = alt;\n\n if (isFunction(options.view)) {\n addListener(element, EVENT_VIEW, options.view, {\n once: true\n });\n }\n\n if (dispatchEvent(element, EVENT_VIEW, {\n originalImage: this.images[index],\n index: index,\n image: image\n }) === false || !this.isShown || this.hiding || this.played) {\n return this;\n }\n\n this.image = image;\n removeClass(this.items[this.index], CLASS_ACTIVE);\n addClass(item, CLASS_ACTIVE);\n this.viewed = false;\n this.index = index;\n this.imageData = {};\n addClass(image, CLASS_INVISIBLE);\n\n if (options.loading) {\n addClass(canvas, CLASS_LOADING);\n }\n\n canvas.innerHTML = '';\n canvas.appendChild(image); // Center current item\n\n this.renderList(); // Clear title\n\n title.innerHTML = ''; // Generate title after viewed\n\n var onViewed = function onViewed() {\n var imageData = _this.imageData;\n var render = Array.isArray(options.title) ? options.title[1] : options.title;\n title.innerHTML = escapeHTMLEntities(isFunction(render) ? render.call(_this, image, imageData) : \"\".concat(alt, \" (\").concat(imageData.naturalWidth, \" \\xD7 \").concat(imageData.naturalHeight, \")\"));\n };\n\n var onLoad;\n addListener(element, EVENT_VIEWED, onViewed, {\n once: true\n });\n this.viewing = {\n abort: function abort() {\n removeListener(element, EVENT_VIEWED, onViewed);\n\n if (image.complete) {\n if (this.imageRendering) {\n this.imageRendering.abort();\n } else if (this.imageInitializing) {\n this.imageInitializing.abort();\n }\n } else {\n // Cancel download to save bandwidth.\n image.src = '';\n removeListener(image, EVENT_LOAD, onLoad);\n\n if (this.timeout) {\n clearTimeout(this.timeout);\n }\n }\n }\n };\n\n if (image.complete) {\n this.load();\n } else {\n addListener(image, EVENT_LOAD, onLoad = this.load.bind(this), {\n once: true\n });\n\n if (this.timeout) {\n clearTimeout(this.timeout);\n } // Make the image visible if it fails to load within 1s\n\n\n this.timeout = setTimeout(function () {\n removeClass(image, CLASS_INVISIBLE);\n _this.timeout = false;\n }, 1000);\n }\n\n return this;\n },\n\n /**\n * View the previous image\n * @param {boolean} [loop=false] - Indicate if view the last one\n * when it is the first one at present.\n * @returns {Viewer} this\n */\n prev: function prev() {\n var loop = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var index = this.index - 1;\n\n if (index < 0) {\n index = loop ? this.length - 1 : 0;\n }\n\n this.view(index);\n return this;\n },\n\n /**\n * View the next image\n * @param {boolean} [loop=false] - Indicate if view the first one\n * when it is the last one at present.\n * @returns {Viewer} this\n */\n next: function next() {\n var loop = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var maxIndex = this.length - 1;\n var index = this.index + 1;\n\n if (index > maxIndex) {\n index = loop ? 0 : maxIndex;\n }\n\n this.view(index);\n return this;\n },\n\n /**\n * Move the image with relative offsets.\n * @param {number} offsetX - The relative offset distance on the x-axis.\n * @param {number} offsetY - The relative offset distance on the y-axis.\n * @returns {Viewer} this\n */\n move: function move(offsetX, offsetY) {\n var imageData = this.imageData;\n this.moveTo(isUndefined(offsetX) ? offsetX : imageData.left + Number(offsetX), isUndefined(offsetY) ? offsetY : imageData.top + Number(offsetY));\n return this;\n },\n\n /**\n * Move the image to an absolute point.\n * @param {number} x - The x-axis coordinate.\n * @param {number} [y=x] - The y-axis coordinate.\n * @returns {Viewer} this\n */\n moveTo: function moveTo(x) {\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x;\n var imageData = this.imageData;\n x = Number(x);\n y = Number(y);\n\n if (this.viewed && !this.played && this.options.movable) {\n var changed = false;\n\n if (isNumber(x)) {\n imageData.left = x;\n changed = true;\n }\n\n if (isNumber(y)) {\n imageData.top = y;\n changed = true;\n }\n\n if (changed) {\n this.renderImage();\n }\n }\n\n return this;\n },\n\n /**\n * Zoom the image with a relative ratio.\n * @param {number} ratio - The target ratio.\n * @param {boolean} [hasTooltip=false] - Indicates if it has a tooltip or not.\n * @param {Event} [_originalEvent=null] - The original event if any.\n * @returns {Viewer} this\n */\n zoom: function zoom(ratio) {\n var hasTooltip = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var _originalEvent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n var imageData = this.imageData;\n ratio = Number(ratio);\n\n if (ratio < 0) {\n ratio = 1 / (1 - ratio);\n } else {\n ratio = 1 + ratio;\n }\n\n this.zoomTo(imageData.width * ratio / imageData.naturalWidth, hasTooltip, _originalEvent);\n return this;\n },\n\n /**\n * Zoom the image to an absolute ratio.\n * @param {number} ratio - The target ratio.\n * @param {boolean} [hasTooltip=false] - Indicates if it has a tooltip or not.\n * @param {Event} [_originalEvent=null] - The original event if any.\n * @param {Event} [_zoomable=false] - Indicates if the current zoom is available or not.\n * @returns {Viewer} this\n */\n zoomTo: function zoomTo(ratio) {\n var _this2 = this;\n\n var hasTooltip = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var _originalEvent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n var _zoomable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n var element = this.element,\n options = this.options,\n pointers = this.pointers,\n imageData = this.imageData;\n var width = imageData.width,\n height = imageData.height,\n left = imageData.left,\n top = imageData.top,\n naturalWidth = imageData.naturalWidth,\n naturalHeight = imageData.naturalHeight;\n ratio = Math.max(0, ratio);\n\n if (isNumber(ratio) && this.viewed && !this.played && (_zoomable || options.zoomable)) {\n if (!_zoomable) {\n var minZoomRatio = Math.max(0.01, options.minZoomRatio);\n var maxZoomRatio = Math.min(100, options.maxZoomRatio);\n ratio = Math.min(Math.max(ratio, minZoomRatio), maxZoomRatio);\n }\n\n if (_originalEvent && ratio > 0.95 && ratio < 1.05) {\n ratio = 1;\n }\n\n var newWidth = naturalWidth * ratio;\n var newHeight = naturalHeight * ratio;\n var offsetWidth = newWidth - width;\n var offsetHeight = newHeight - height;\n var oldRatio = width / naturalWidth;\n\n if (isFunction(options.zoom)) {\n addListener(element, EVENT_ZOOM, options.zoom, {\n once: true\n });\n }\n\n if (dispatchEvent(element, EVENT_ZOOM, {\n ratio: ratio,\n oldRatio: oldRatio,\n originalEvent: _originalEvent\n }) === false) {\n return this;\n }\n\n this.zooming = true;\n\n if (_originalEvent) {\n var offset = getOffset(this.viewer);\n var center = pointers && Object.keys(pointers).length ? getPointersCenter(pointers) : {\n pageX: _originalEvent.pageX,\n pageY: _originalEvent.pageY\n }; // Zoom from the triggering point of the event\n\n imageData.left -= offsetWidth * ((center.pageX - offset.left - left) / width);\n imageData.top -= offsetHeight * ((center.pageY - offset.top - top) / height);\n } else {\n // Zoom from the center of the image\n imageData.left -= offsetWidth / 2;\n imageData.top -= offsetHeight / 2;\n }\n\n imageData.width = newWidth;\n imageData.height = newHeight;\n imageData.ratio = ratio;\n this.renderImage(function () {\n _this2.zooming = false;\n\n if (isFunction(options.zoomed)) {\n addListener(element, EVENT_ZOOMED, options.zoomed, {\n once: true\n });\n }\n\n dispatchEvent(element, EVENT_ZOOMED, {\n ratio: ratio,\n oldRatio: oldRatio,\n originalEvent: _originalEvent\n });\n });\n\n if (hasTooltip) {\n this.tooltip();\n }\n }\n\n return this;\n },\n\n /**\n * Rotate the image with a relative degree.\n * @param {number} degree - The rotate degree.\n * @returns {Viewer} this\n */\n rotate: function rotate(degree) {\n this.rotateTo((this.imageData.rotate || 0) + Number(degree));\n return this;\n },\n\n /**\n * Rotate the image to an absolute degree.\n * @param {number} degree - The rotate degree.\n * @returns {Viewer} this\n */\n rotateTo: function rotateTo(degree) {\n var imageData = this.imageData;\n degree = Number(degree);\n\n if (isNumber(degree) && this.viewed && !this.played && this.options.rotatable) {\n imageData.rotate = degree;\n this.renderImage();\n }\n\n return this;\n },\n\n /**\n * Scale the image on the x-axis.\n * @param {number} scaleX - The scale ratio on the x-axis.\n * @returns {Viewer} this\n */\n scaleX: function scaleX(_scaleX) {\n this.scale(_scaleX, this.imageData.scaleY);\n return this;\n },\n\n /**\n * Scale the image on the y-axis.\n * @param {number} scaleY - The scale ratio on the y-axis.\n * @returns {Viewer} this\n */\n scaleY: function scaleY(_scaleY) {\n this.scale(this.imageData.scaleX, _scaleY);\n return this;\n },\n\n /**\n * Scale the image.\n * @param {number} scaleX - The scale ratio on the x-axis.\n * @param {number} [scaleY=scaleX] - The scale ratio on the y-axis.\n * @returns {Viewer} this\n */\n scale: function scale(scaleX) {\n var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX;\n var imageData = this.imageData;\n scaleX = Number(scaleX);\n scaleY = Number(scaleY);\n\n if (this.viewed && !this.played && this.options.scalable) {\n var changed = false;\n\n if (isNumber(scaleX)) {\n imageData.scaleX = scaleX;\n changed = true;\n }\n\n if (isNumber(scaleY)) {\n imageData.scaleY = scaleY;\n changed = true;\n }\n\n if (changed) {\n this.renderImage();\n }\n }\n\n return this;\n },\n\n /**\n * Play the images\n * @param {boolean} [fullscreen=false] - Indicate if request fullscreen or not.\n * @returns {Viewer} this\n */\n play: function play() {\n var _this3 = this;\n\n var fullscreen = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n if (!this.isShown || this.played) {\n return this;\n }\n\n var options = this.options,\n player = this.player;\n var onLoad = this.loadImage.bind(this);\n var list = [];\n var total = 0;\n var index = 0;\n this.played = true;\n this.onLoadWhenPlay = onLoad;\n\n if (fullscreen) {\n this.requestFullscreen();\n }\n\n addClass(player, CLASS_SHOW);\n forEach(this.items, function (item, i) {\n var img = item.querySelector('img');\n var image = document.createElement('img');\n image.src = getData(img, 'originalUrl');\n image.alt = img.getAttribute('alt');\n total += 1;\n addClass(image, CLASS_FADE);\n toggleClass(image, CLASS_TRANSITION, options.transition);\n\n if (hasClass(item, CLASS_ACTIVE)) {\n addClass(image, CLASS_IN);\n index = i;\n }\n\n list.push(image);\n addListener(image, EVENT_LOAD, onLoad, {\n once: true\n });\n player.appendChild(image);\n });\n\n if (isNumber(options.interval) && options.interval > 0) {\n var play = function play() {\n _this3.playing = setTimeout(function () {\n removeClass(list[index], CLASS_IN);\n index += 1;\n index = index < total ? index : 0;\n addClass(list[index], CLASS_IN);\n play();\n }, options.interval);\n };\n\n if (total > 1) {\n play();\n }\n }\n\n return this;\n },\n // Stop play\n stop: function stop() {\n var _this4 = this;\n\n if (!this.played) {\n return this;\n }\n\n var player = this.player;\n this.played = false;\n clearTimeout(this.playing);\n forEach(player.getElementsByTagName('img'), function (image) {\n removeListener(image, EVENT_LOAD, _this4.onLoadWhenPlay);\n });\n removeClass(player, CLASS_SHOW);\n player.innerHTML = '';\n this.exitFullscreen();\n return this;\n },\n // Enter modal mode (only available in inline mode)\n full: function full() {\n var _this5 = this;\n\n var options = this.options,\n viewer = this.viewer,\n image = this.image,\n list = this.list;\n\n if (!this.isShown || this.played || this.fulled || !options.inline) {\n return this;\n }\n\n this.fulled = true;\n this.open();\n addClass(this.button, CLASS_FULLSCREEN_EXIT);\n\n if (options.transition) {\n removeClass(list, CLASS_TRANSITION);\n\n if (this.viewed) {\n removeClass(image, CLASS_TRANSITION);\n }\n }\n\n addClass(viewer, CLASS_FIXED);\n viewer.setAttribute('style', '');\n setStyle(viewer, {\n zIndex: options.zIndex\n });\n this.initContainer();\n this.viewerData = assign({}, this.containerData);\n this.renderList();\n\n if (this.viewed) {\n this.initImage(function () {\n _this5.renderImage(function () {\n if (options.transition) {\n setTimeout(function () {\n addClass(image, CLASS_TRANSITION);\n addClass(list, CLASS_TRANSITION);\n }, 0);\n }\n });\n });\n }\n\n return this;\n },\n // Exit modal mode (only available in inline mode)\n exit: function exit() {\n var _this6 = this;\n\n var options = this.options,\n viewer = this.viewer,\n image = this.image,\n list = this.list;\n\n if (!this.isShown || this.played || !this.fulled || !options.inline) {\n return this;\n }\n\n this.fulled = false;\n this.close();\n removeClass(this.button, CLASS_FULLSCREEN_EXIT);\n\n if (options.transition) {\n removeClass(list, CLASS_TRANSITION);\n\n if (this.viewed) {\n removeClass(image, CLASS_TRANSITION);\n }\n }\n\n removeClass(viewer, CLASS_FIXED);\n setStyle(viewer, {\n zIndex: options.zIndexInline\n });\n this.viewerData = assign({}, this.parentData);\n this.renderViewer();\n this.renderList();\n\n if (this.viewed) {\n this.initImage(function () {\n _this6.renderImage(function () {\n if (options.transition) {\n setTimeout(function () {\n addClass(image, CLASS_TRANSITION);\n addClass(list, CLASS_TRANSITION);\n }, 0);\n }\n });\n });\n }\n\n return this;\n },\n // Show the current ratio of the image with percentage\n tooltip: function tooltip() {\n var _this7 = this;\n\n var options = this.options,\n tooltipBox = this.tooltipBox,\n imageData = this.imageData;\n\n if (!this.viewed || this.played || !options.tooltip) {\n return this;\n }\n\n tooltipBox.textContent = \"\".concat(Math.round(imageData.ratio * 100), \"%\");\n\n if (!this.tooltipping) {\n if (options.transition) {\n if (this.fading) {\n dispatchEvent(tooltipBox, EVENT_TRANSITION_END);\n }\n\n addClass(tooltipBox, CLASS_SHOW);\n addClass(tooltipBox, CLASS_FADE);\n addClass(tooltipBox, CLASS_TRANSITION); // Force reflow to enable CSS3 transition\n // eslint-disable-next-line\n\n tooltipBox.offsetWidth;\n addClass(tooltipBox, CLASS_IN);\n } else {\n addClass(tooltipBox, CLASS_SHOW);\n }\n } else {\n clearTimeout(this.tooltipping);\n }\n\n this.tooltipping = setTimeout(function () {\n if (options.transition) {\n addListener(tooltipBox, EVENT_TRANSITION_END, function () {\n removeClass(tooltipBox, CLASS_SHOW);\n removeClass(tooltipBox, CLASS_FADE);\n removeClass(tooltipBox, CLASS_TRANSITION);\n _this7.fading = false;\n }, {\n once: true\n });\n removeClass(tooltipBox, CLASS_IN);\n _this7.fading = true;\n } else {\n removeClass(tooltipBox, CLASS_SHOW);\n }\n\n _this7.tooltipping = false;\n }, 1000);\n return this;\n },\n // Toggle the image size between its natural size and initial size\n toggle: function toggle() {\n if (this.imageData.ratio === 1) {\n this.zoomTo(this.initialImageData.ratio, true);\n } else {\n this.zoomTo(1, true);\n }\n\n return this;\n },\n // Reset the image to its initial state\n reset: function reset() {\n if (this.viewed && !this.played) {\n this.imageData = assign({}, this.initialImageData);\n this.renderImage();\n }\n\n return this;\n },\n // Update viewer when images changed\n update: function update() {\n var element = this.element,\n options = this.options,\n isImg = this.isImg; // Destroy viewer if the target image was deleted\n\n if (isImg && !element.parentNode) {\n return this.destroy();\n }\n\n var images = [];\n forEach(isImg ? [element] : element.querySelectorAll('img'), function (image) {\n if (options.filter) {\n if (options.filter(image)) {\n images.push(image);\n }\n } else {\n images.push(image);\n }\n });\n\n if (!images.length) {\n return this;\n }\n\n this.images = images;\n this.length = images.length;\n\n if (this.ready) {\n var indexes = [];\n forEach(this.items, function (item, i) {\n var img = item.querySelector('img');\n var image = images[i];\n\n if (image) {\n if (image.src !== img.src) {\n indexes.push(i);\n }\n } else {\n indexes.push(i);\n }\n });\n setStyle(this.list, {\n width: 'auto'\n });\n this.initList();\n\n if (this.isShown) {\n if (this.length) {\n if (this.viewed) {\n var index = indexes.indexOf(this.index);\n\n if (index >= 0) {\n this.viewed = false;\n this.view(Math.max(this.index - (index + 1), 0));\n } else {\n addClass(this.items[this.index], CLASS_ACTIVE);\n }\n }\n } else {\n this.image = null;\n this.viewed = false;\n this.index = 0;\n this.imageData = {};\n this.canvas.innerHTML = '';\n this.title.innerHTML = '';\n }\n }\n } else {\n this.build();\n }\n\n return this;\n },\n // Destroy the viewer\n destroy: function destroy() {\n var element = this.element,\n options = this.options;\n\n if (!element[NAMESPACE]) {\n return this;\n }\n\n this.destroyed = true;\n\n if (this.ready) {\n if (this.played) {\n this.stop();\n }\n\n if (options.inline) {\n if (this.fulled) {\n this.exit();\n }\n\n this.unbind();\n } else if (this.isShown) {\n if (this.viewing) {\n if (this.imageRendering) {\n this.imageRendering.abort();\n } else if (this.imageInitializing) {\n this.imageInitializing.abort();\n }\n }\n\n if (this.hiding) {\n this.transitioning.abort();\n }\n\n this.hidden();\n } else if (this.showing) {\n this.transitioning.abort();\n this.hidden();\n }\n\n this.ready = false;\n this.viewer.parentNode.removeChild(this.viewer);\n } else if (options.inline) {\n if (this.delaying) {\n this.delaying.abort();\n } else if (this.initializing) {\n this.initializing.abort();\n }\n }\n\n if (!options.inline) {\n removeListener(element, EVENT_CLICK, this.onStart);\n }\n\n element[NAMESPACE] = undefined;\n return this;\n }\n };\n\n var others = {\n open: function open() {\n var body = this.body;\n addClass(body, CLASS_OPEN);\n body.style.paddingRight = \"\".concat(this.scrollbarWidth + (parseFloat(this.initialBodyPaddingRight) || 0), \"px\");\n },\n close: function close() {\n var body = this.body;\n removeClass(body, CLASS_OPEN);\n body.style.paddingRight = this.initialBodyPaddingRight;\n },\n shown: function shown() {\n var element = this.element,\n options = this.options;\n this.fulled = true;\n this.isShown = true;\n this.render();\n this.bind();\n this.showing = false;\n\n if (isFunction(options.shown)) {\n addListener(element, EVENT_SHOWN, options.shown, {\n once: true\n });\n }\n\n if (dispatchEvent(element, EVENT_SHOWN) === false) {\n return;\n }\n\n if (this.ready && this.isShown && !this.hiding) {\n this.view(this.index);\n }\n },\n hidden: function hidden() {\n var element = this.element,\n options = this.options;\n this.fulled = false;\n this.viewed = false;\n this.isShown = false;\n this.close();\n this.unbind();\n addClass(this.viewer, CLASS_HIDE);\n this.resetList();\n this.resetImage();\n this.hiding = false;\n\n if (!this.destroyed) {\n if (isFunction(options.hidden)) {\n addListener(element, EVENT_HIDDEN, options.hidden, {\n once: true\n });\n }\n\n dispatchEvent(element, EVENT_HIDDEN);\n }\n },\n requestFullscreen: function requestFullscreen() {\n var document = this.element.ownerDocument;\n\n if (this.fulled && !(document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement)) {\n var documentElement = document.documentElement; // Element.requestFullscreen()\n\n if (documentElement.requestFullscreen) {\n documentElement.requestFullscreen();\n } else if (documentElement.webkitRequestFullscreen) {\n documentElement.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);\n } else if (documentElement.mozRequestFullScreen) {\n documentElement.mozRequestFullScreen();\n } else if (documentElement.msRequestFullscreen) {\n documentElement.msRequestFullscreen();\n }\n }\n },\n exitFullscreen: function exitFullscreen() {\n var document = this.element.ownerDocument;\n\n if (this.fulled && (document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement)) {\n // Document.exitFullscreen()\n if (document.exitFullscreen) {\n document.exitFullscreen();\n } else if (document.webkitExitFullscreen) {\n document.webkitExitFullscreen();\n } else if (document.mozCancelFullScreen) {\n document.mozCancelFullScreen();\n } else if (document.msExitFullscreen) {\n document.msExitFullscreen();\n }\n }\n },\n change: function change(event) {\n var options = this.options,\n pointers = this.pointers;\n var pointer = pointers[Object.keys(pointers)[0]];\n var offsetX = pointer.endX - pointer.startX;\n var offsetY = pointer.endY - pointer.startY;\n\n switch (this.action) {\n // Move the current image\n case ACTION_MOVE:\n this.move(offsetX, offsetY);\n break;\n // Zoom the current image\n\n case ACTION_ZOOM:\n this.zoom(getMaxZoomRatio(pointers), false, event);\n break;\n\n case ACTION_SWITCH:\n {\n this.action = 'switched';\n var absoluteOffsetX = Math.abs(offsetX);\n\n if (absoluteOffsetX > 1 && absoluteOffsetX > Math.abs(offsetY)) {\n // Empty `pointers` as `touchend` event will not be fired after swiped in iOS browsers.\n this.pointers = {};\n\n if (offsetX > 1) {\n this.prev(options.loop);\n } else if (offsetX < -1) {\n this.next(options.loop);\n }\n }\n\n break;\n }\n\n default:\n } // Override\n\n\n forEach(pointers, function (p) {\n p.startX = p.endX;\n p.startY = p.endY;\n });\n },\n isSwitchable: function isSwitchable() {\n var imageData = this.imageData,\n viewerData = this.viewerData;\n return this.length > 1 && imageData.left >= 0 && imageData.top >= 0 && imageData.width <= viewerData.width && imageData.height <= viewerData.height;\n }\n };\n\n var AnotherViewer = WINDOW.Viewer;\n\n var Viewer =\n /*#__PURE__*/\n function () {\n /**\n * Create a new Viewer.\n * @param {Element} element - The target element for viewing.\n * @param {Object} [options={}] - The configuration options.\n */\n function Viewer(element) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, Viewer);\n\n if (!element || element.nodeType !== 1) {\n throw new Error('The first argument is required and must be an element.');\n }\n\n this.element = element;\n this.options = assign({}, DEFAULTS, isPlainObject(options) && options);\n this.action = false;\n this.fading = false;\n this.fulled = false;\n this.hiding = false;\n this.imageClicked = false;\n this.imageData = {};\n this.index = this.options.initialViewIndex;\n this.isImg = false;\n this.isShown = false;\n this.length = 0;\n this.played = false;\n this.playing = false;\n this.pointers = {};\n this.ready = false;\n this.showing = false;\n this.timeout = false;\n this.tooltipping = false;\n this.viewed = false;\n this.viewing = false;\n this.wheeling = false;\n this.zooming = false;\n this.init();\n }\n\n _createClass(Viewer, [{\n key: \"init\",\n value: function init() {\n var _this = this;\n\n var element = this.element,\n options = this.options;\n\n if (element[NAMESPACE]) {\n return;\n }\n\n element[NAMESPACE] = this;\n var isImg = element.tagName.toLowerCase() === 'img';\n var images = [];\n forEach(isImg ? [element] : element.querySelectorAll('img'), function (image) {\n if (isFunction(options.filter)) {\n if (options.filter.call(_this, image)) {\n images.push(image);\n }\n } else {\n images.push(image);\n }\n });\n this.isImg = isImg;\n this.length = images.length;\n this.images = images;\n var ownerDocument = element.ownerDocument;\n var body = ownerDocument.body || ownerDocument.documentElement;\n this.body = body;\n this.scrollbarWidth = window.innerWidth - ownerDocument.documentElement.clientWidth;\n this.initialBodyPaddingRight = window.getComputedStyle(body).paddingRight; // Override `transition` option if it is not supported\n\n if (isUndefined(document.createElement(NAMESPACE).style.transition)) {\n options.transition = false;\n }\n\n if (options.inline) {\n var count = 0;\n\n var progress = function progress() {\n count += 1;\n\n if (count === _this.length) {\n var timeout;\n _this.initializing = false;\n _this.delaying = {\n abort: function abort() {\n clearTimeout(timeout);\n }\n }; // build asynchronously to keep `this.viewer` is accessible in `ready` event handler.\n\n timeout = setTimeout(function () {\n _this.delaying = false;\n\n _this.build();\n }, 0);\n }\n };\n\n this.initializing = {\n abort: function abort() {\n forEach(images, function (image) {\n if (!image.complete) {\n removeListener(image, EVENT_LOAD, progress);\n }\n });\n }\n };\n forEach(images, function (image) {\n if (image.complete) {\n progress();\n } else {\n addListener(image, EVENT_LOAD, progress, {\n once: true\n });\n }\n });\n } else {\n addListener(element, EVENT_CLICK, this.onStart = function (_ref) {\n var target = _ref.target;\n\n if (target.tagName.toLowerCase() === 'img' && (!isFunction(options.filter) || options.filter.call(_this, target))) {\n _this.view(_this.images.indexOf(target));\n }\n });\n }\n }\n }, {\n key: \"build\",\n value: function build() {\n if (this.ready) {\n return;\n }\n\n var element = this.element,\n options = this.options;\n var parent = element.parentNode;\n var template = document.createElement('div');\n template.innerHTML = TEMPLATE;\n var viewer = template.querySelector(\".\".concat(NAMESPACE, \"-container\"));\n var title = viewer.querySelector(\".\".concat(NAMESPACE, \"-title\"));\n var toolbar = viewer.querySelector(\".\".concat(NAMESPACE, \"-toolbar\"));\n var navbar = viewer.querySelector(\".\".concat(NAMESPACE, \"-navbar\"));\n var button = viewer.querySelector(\".\".concat(NAMESPACE, \"-button\"));\n var canvas = viewer.querySelector(\".\".concat(NAMESPACE, \"-canvas\"));\n this.parent = parent;\n this.viewer = viewer;\n this.title = title;\n this.toolbar = toolbar;\n this.navbar = navbar;\n this.button = button;\n this.canvas = canvas;\n this.footer = viewer.querySelector(\".\".concat(NAMESPACE, \"-footer\"));\n this.tooltipBox = viewer.querySelector(\".\".concat(NAMESPACE, \"-tooltip\"));\n this.player = viewer.querySelector(\".\".concat(NAMESPACE, \"-player\"));\n this.list = viewer.querySelector(\".\".concat(NAMESPACE, \"-list\"));\n addClass(title, !options.title ? CLASS_HIDE : getResponsiveClass(Array.isArray(options.title) ? options.title[0] : options.title));\n addClass(navbar, !options.navbar ? CLASS_HIDE : getResponsiveClass(options.navbar));\n toggleClass(button, CLASS_HIDE, !options.button);\n\n if (options.backdrop) {\n addClass(viewer, \"\".concat(NAMESPACE, \"-backdrop\"));\n\n if (!options.inline && options.backdrop !== 'static') {\n setData(canvas, DATA_ACTION, 'hide');\n }\n }\n\n if (isString(options.className) && options.className) {\n // In case there are multiple class names\n options.className.split(REGEXP_SPACES).forEach(function (className) {\n addClass(viewer, className);\n });\n }\n\n if (options.toolbar) {\n var list = document.createElement('ul');\n var custom = isPlainObject(options.toolbar);\n var zoomButtons = BUTTONS.slice(0, 3);\n var rotateButtons = BUTTONS.slice(7, 9);\n var scaleButtons = BUTTONS.slice(9);\n\n if (!custom) {\n addClass(toolbar, getResponsiveClass(options.toolbar));\n }\n\n forEach(custom ? options.toolbar : BUTTONS, function (value, index) {\n var deep = custom && isPlainObject(value);\n var name = custom ? hyphenate(index) : value;\n var show = deep && !isUndefined(value.show) ? value.show : value;\n\n if (!show || !options.zoomable && zoomButtons.indexOf(name) !== -1 || !options.rotatable && rotateButtons.indexOf(name) !== -1 || !options.scalable && scaleButtons.indexOf(name) !== -1) {\n return;\n }\n\n var size = deep && !isUndefined(value.size) ? value.size : value;\n var click = deep && !isUndefined(value.click) ? value.click : value;\n var item = document.createElement('li');\n item.setAttribute('role', 'button');\n addClass(item, \"\".concat(NAMESPACE, \"-\").concat(name));\n\n if (!isFunction(click)) {\n setData(item, DATA_ACTION, name);\n }\n\n if (isNumber(show)) {\n addClass(item, getResponsiveClass(show));\n }\n\n if (['small', 'large'].indexOf(size) !== -1) {\n addClass(item, \"\".concat(NAMESPACE, \"-\").concat(size));\n } else if (name === 'play') {\n addClass(item, \"\".concat(NAMESPACE, \"-large\"));\n }\n\n if (isFunction(click)) {\n addListener(item, EVENT_CLICK, click);\n }\n\n list.appendChild(item);\n });\n toolbar.appendChild(list);\n } else {\n addClass(toolbar, CLASS_HIDE);\n }\n\n if (!options.rotatable) {\n var rotates = toolbar.querySelectorAll('li[class*=\"rotate\"]');\n addClass(rotates, CLASS_INVISIBLE);\n forEach(rotates, function (rotate) {\n toolbar.appendChild(rotate);\n });\n }\n\n if (options.inline) {\n addClass(button, CLASS_FULLSCREEN);\n setStyle(viewer, {\n zIndex: options.zIndexInline\n });\n\n if (window.getComputedStyle(parent).position === 'static') {\n setStyle(parent, {\n position: 'relative'\n });\n }\n\n parent.insertBefore(viewer, element.nextSibling);\n } else {\n addClass(button, CLASS_CLOSE);\n addClass(viewer, CLASS_FIXED);\n addClass(viewer, CLASS_FADE);\n addClass(viewer, CLASS_HIDE);\n setStyle(viewer, {\n zIndex: options.zIndex\n });\n var container = options.container;\n\n if (isString(container)) {\n container = element.ownerDocument.querySelector(container);\n }\n\n if (!container) {\n container = this.body;\n }\n\n container.appendChild(viewer);\n }\n\n if (options.inline) {\n this.render();\n this.bind();\n this.isShown = true;\n }\n\n this.ready = true;\n\n if (isFunction(options.ready)) {\n addListener(element, EVENT_READY, options.ready, {\n once: true\n });\n }\n\n if (dispatchEvent(element, EVENT_READY) === false) {\n this.ready = false;\n return;\n }\n\n if (this.ready && options.inline) {\n this.view(this.index);\n }\n }\n /**\n * Get the no conflict viewer class.\n * @returns {Viewer} The viewer class.\n */\n\n }], [{\n key: \"noConflict\",\n value: function noConflict() {\n window.Viewer = AnotherViewer;\n return Viewer;\n }\n /**\n * Change the default options.\n * @param {Object} options - The new default options.\n */\n\n }, {\n key: \"setDefaults\",\n value: function setDefaults(options) {\n assign(DEFAULTS, isPlainObject(options) && options);\n }\n }]);\n\n return Viewer;\n }();\n\n assign(Viewer.prototype, render, events, handlers, methods, others);\n\n return Viewer;\n\n}));\n"],"sourceRoot":""}