{"version":3,"sources":["webpack:///./src/assets/scene/1/1.png","webpack:///./src/assets/scene/7/2.png","webpack:///./src/views/products.vue?aa09","webpack:///src/views/products.vue","webpack:///./src/views/products.vue?7114","webpack:///./src/views/products.vue","webpack:///./src/assets/scene/3/2.png","webpack:///./src/assets/scene/4/1.png","webpack:///./src/assets/scene/9/1.png","webpack:///./src/assets/scene/8/3.png","webpack:///./src/assets/img/products_bg1.png","webpack:///./src/assets/scene/7/1.png","webpack:///./src/assets/scene/8/1.png","webpack:///./src/views/products.vue?3c2e","webpack:///./src/assets/scene/5/1.png","webpack:///./src/assets/scene/3/1.png","webpack:///./src/assets/scene/9/3.png","webpack:///./src/assets/scene/8/2.png","webpack:///./node_modules/v-viewer/dist/v-viewer.js","webpack:///./src/assets/scene/2/2.png","webpack:///./src/assets/scene/7/3.png","webpack:///./src/assets/scene/5/2.png","webpack:///./src/assets/scene/5/3.png","webpack:///./src/assets/scene/6/1.png","webpack:///./src/assets/scene/6/3.png","webpack:///./src/assets/scene/4/2.png","webpack:///./node_modules/viewerjs/dist/viewer.js","webpack:///./src/assets/scene/9/2.png","webpack:///./src/assets/scene/2/1.png","webpack:///./src/assets/scene/4/3.png","webpack:///./src/assets/scene/2/3.png","webpack:///./src/assets/scene/3/3.png","webpack:///./src/assets/scene/6/2.png"],"names":["module","exports","render","_vm","this","_h","$createElement","_c","_self","staticClass","_m","_v","_l","item","index","key","class","active","on","$event","changeImg","_s","name","pain","deatil","attrs","staticStyle","staticRenderFns","data","component","root","factory","__WEBPACK_EXTERNAL_MODULE_0__","modules","installedModules","__webpack_require__","moduleId","i","l","call","m","c","value","d","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","rebuild","arguments","length","nextTick","destroyViewer","a","log","update","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","directive","bind","binding","modifiers","static","unbind","extend","extended","merge","obj","prop","toString","Component","__file","esModule","keys","some","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","use","throttle","delay","noTrailing","callback","debounceMode","timeoutID","cancelled","lastExec","clearExistingTimeout","clearTimeout","cancel","wrapper","self","elapsed","Date","now","args","exec","clear","setTimeout","debounce","atBegin","props","images","Array","Boolean","default","trigger","computed","methods","onChange","rebuildViewer","updateViewer","$viewer","$emit","$el","watch","_this","$nextTick","handler","_this2","_this3","mounted","destroyed","g","_typeof","Symbol","iterator","constructor","Function","eval","e","window","rawScriptExports","compiledTemplate","scopeId","cssModules","scriptExports","_scopeId","create","_t","_withStripped","_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","button","navbar","title","toolbar","className","container","fullscreen","inheritedAttributes","initialViewIndex","inline","interval","keyboard","focus","loading","loop","minWidth","minHeight","movable","rotatable","scalable","zoomable","zoomOnTouch","zoomOnWheel","slideOnTouch","toggleOnDblclick","tooltip","transition","zIndex","zIndexInline","zoomRatio","minZoomRatio","maxZoomRatio","url","ready","show","shown","hide","hidden","view","viewed","move","moved","rotate","rotated","scale","scaled","zoom","zoomed","play","stop","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_FOCUSIN","EVENT_KEY_DOWN","EVENT_LOAD","EVENT_TOUCH_END","EVENT_TOUCH_MOVE","EVENT_TOUCH_START","EVENT_POINTER_DOWN","EVENT_POINTER_MOVE","EVENT_POINTER_UP","EVENT_RESIZE","EVENT_TRANSITION_END","EVENT_WHEEL","EVENT_READY","EVENT_SHOW","EVENT_SHOWN","EVENT_HIDE","EVENT_HIDDEN","EVENT_VIEW","EVENT_VIEWED","EVENT_MOVE","EVENT_MOVED","EVENT_ROTATE","EVENT_ROTATED","EVENT_SCALE","EVENT_SCALED","EVENT_ZOOM","EVENT_ZOOMED","EVENT_PLAY","EVENT_STOP","DATA_ACTION","REGEXP_SPACES","BUTTONS","isString","isNaN","Number","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","bubbles","cancelable","detail","createEvent","initCustomEvent","getOffset","box","getBoundingClientRect","left","pageXOffset","clientLeft","top","pageYOffset","clientTop","getTransforms","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","getPointersCenter","count","_ref3","initContainer","initViewer","initList","renderViewer","initBody","ownerDocument","scrollbarWidth","innerWidth","clientWidth","initialBodyPaddingRight","paddingRight","initialBodyComputedPaddingRight","getComputedStyle","containerData","innerHeight","viewerData","parent","max","offsetWidth","offsetHeight","parentData","fulled","viewer","list","items","innerHTML","alt","getImageURL","img","firstElementChild","loadImage","renderList","outerWidth","resetList","initImage","done","sizingImage","footerHeight","footer","viewerWidth","viewerHeight","oldImageData","imageData","imageInitializing","abort","aspectRatio","min","x","y","initialImageData","renderImage","marginLeft","marginTop","viewing","moving","rotating","scaling","zooming","onTransitionEnd","imageRendering","resetImage","parentNode","events","canvas","onClick","click","onDragStart","dragstart","onPointerDown","pointerdown","onPointerMove","pointermove","onPointerUp","pointerup","onKeyDown","keydown","onResize","resize","onWheel","wheel","passive","capture","onDblclick","dblclick","handlers","action","localName","parentElement","isTrusted","clickCanvasTimeout","played","exit","full","toggle","reset","prev","next","preventDefault","doubleClickImageTimeout","load","timeout","originalImage","parentWidth","parentHeight","filled","keyCode","which","charCode","ctrlKey","buttons","showing","hiding","pointerType","changedTouches","touch","identifier","isSwitchable","change","imageClicked","isShown","close","open","fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement","player","getElementsByTagName","_this4","wheeling","delta","deltaY","wheelDelta","immediate","build","transitioning","id","removeAttribute","initialOffsetWidth","hideImmediately","onViewerTransitionEnd","onImageTransitionEnd","zoomTo","querySelector","activeItem","onLoad","onViewed","complete","maxIndex","moveTo","_originalEvent","oldX","oldY","changed","originalEvent","degree","rotateTo","oldDegree","_scaleX","_scaleY","_this5","oldScaleX","oldScaleY","hasTooltip","_this6","_zoomable","newWidth","newHeight","oldRatio","offset","center","_this7","total","onLoadWhenPlay","requestFullscreen","referrerPolicy","playing","_this8","exitFullscreen","_this9","enforceFocus","_this10","clearEnforceFocus","_this11","tooltipBox","textContent","round","tooltipping","fading","_this12","isImg","querySelectorAll","changedIndexes","changedIndex","delaying","initializing","onStart","others","onFocusin","parseFloat","fucus","webkitRequestFullscreen","Element","ALLOW_KEYBOARD_INPUT","mozRequestFullScreen","msRequestFullscreen","webkitExitFullscreen","mozCancelFullScreen","msExitFullscreen","offsetX","offsetY","absoluteOffsetX","AnotherViewer","Viewer","getUniqueID","nodeType","Error","init","progress","template","custom","zoomButtons","slice","rotateButtons","scaleButtons","size","rotates","position","insertBefore","nextSibling"],"mappings":"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","file":"js/chunk-d6f13c6c.f425d012.js","sourcesContent":["module.exports = __webpack_public_path__ + \"img/1.c02c2795.png\";","module.exports = __webpack_public_path__ + \"img/2.bfacea1d.png\";","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"products\"},[_vm._m(0),_c('div',{staticClass:\"products-content-box\"},[_c('div',{staticClass:\"products_content\"},[_c('div',{staticClass:\"products_tit\"},[_vm._v(\"重要场景\")]),_c('div',{staticClass:\"products_shu\"}),_c('div',{staticClass:\"products_content_box\"},[_c('div',{staticClass:\"products_content_box_left\"},_vm._l((_vm.itemDate),function(item,index){return _c('div',{key:index,class:['left-item',{'left-item-active':_vm.active==index}],on:{\"click\":function($event){return _vm.changeImg(index)}}},[_c('p',{staticClass:\"item_p1\"},[_vm._v(_vm._s(item.name))]),_c('p',{staticClass:\"item_p2\"},[_c('span',[_vm._v(\"痛点:\")]),_vm._v(_vm._s(item.pain))]),_c('p',{staticClass:\"item_p3\"},[_c('span',[_vm._v(\"简介:\")]),_vm._v(_vm._s(item.deatil))])])}),0),_c('div',{staticClass:\"products_content_box_right\"},[_c('el-carousel',{attrs:{\"type\":\"card\",\"autoplay\":false,\"indicator-position\":\"none\",\"arrow\":\"never\"}},_vm._l((_vm.imgUrlArr),function(item){return _c('el-carousel-item',{key:item},[_c('div',{staticClass:\"swiper_item\"},[_c('viewer',[_c('img',{attrs:{\"src\":item,\"alt\":\"\"}})])],1)])}),1)],1)])])]),_c('div',{staticStyle:{\"height\":\"100px\",\"background\":\"#fff\"}})])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"products_head\"},[_c('div',{staticClass:\"products_tit_box\"},[_c('div',{staticClass:\"products_tit\"},[_vm._v(\"特色\")]),_c('div',{staticClass:\"products_shu\"})]),_c('img',{attrs:{\"src\":require(\"../assets/img/products_bg1.png\"),\"alt\":\"\"}})])}]\n\nexport { render, staticRenderFns }","\r\n\r\n\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!./products.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!./products.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./products.vue?vue&type=template&id=f61b1036&scoped=true&\"\nimport script from \"./products.vue?vue&type=script&lang=js&\"\nexport * from \"./products.vue?vue&type=script&lang=js&\"\nimport style0 from \"./products.vue?vue&type=style&index=0&id=f61b1036&lang=scss&scoped=true&\"\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 \"f61b1036\",\n null\n \n)\n\nexport default component.exports","module.exports = __webpack_public_path__ + \"img/2.e66c6db3.png\";","module.exports = __webpack_public_path__ + \"img/1.0c7856d5.png\";","module.exports = __webpack_public_path__ + \"img/1.47d4f3e9.png\";","module.exports = __webpack_public_path__ + \"img/3.b2695ebe.png\";","module.exports = __webpack_public_path__ + \"img/products_bg1.97b62794.png\";","module.exports = __webpack_public_path__ + \"img/1.3e831f2f.png\";","module.exports = __webpack_public_path__ + \"img/1.728757b2.png\";","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./products.vue?vue&type=style&index=0&id=f61b1036&lang=scss&scoped=true&\"","module.exports = __webpack_public_path__ + \"img/1.6efe88a9.png\";","module.exports = __webpack_public_path__ + \"img/1.082a14e8.png\";","module.exports = __webpack_public_path__ + \"img/3.4446e699.png\";","module.exports = __webpack_public_path__ + \"img/2.3d671875.png\";","(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 var rebuild = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n Vue.nextTick(function () {\n if (rebuild || !el['$' + name]) {\n destroyViewer(el);\n el['$' + name] = new __WEBPACK_IMPORTED_MODULE_0_viewerjs___default.a(el, options);\n log('viewer created');\n } else {\n el['$' + name].update();\n log('viewer updated');\n }\n });\n }\n\n function createObserver(el, options, debouncedCreateViewer, rebuild) {\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, rebuild);\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, true);\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, binding.modifiers.rebuild);\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 = \"C:\\\\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 var timeoutID;\n var cancelled = false;\n\n var lastExec = 0;\n\n function clearExistingTimeout() {\n if (timeoutID) {\n clearTimeout(timeoutID);\n }\n }\n\n function cancel() {\n clearExistingTimeout();\n cancelled = true;\n }\n\n if (typeof noTrailing !== 'boolean') {\n debounceMode = callback;\n callback = noTrailing;\n noTrailing = undefined;\n }\n\n\n function wrapper() {\n var self = this;\n var elapsed = Date.now() - lastExec;\n var args = arguments;\n\n if (cancelled) {\n return;\n }\n\n function exec() {\n lastExec = Date.now();\n callback.apply(self, args);\n }\n\n\n function clear() {\n timeoutID = undefined;\n }\n\n if (debounceMode && !timeoutID) {\n exec();\n }\n\n clearExistingTimeout();\n\n if (debounceMode === undefined && elapsed > delay) {\n exec();\n } else if (noTrailing !== true) {\n timeoutID = setTimeout(debounceMode ? clear : exec, debounceMode === undefined ? delay - elapsed : delay);\n }\n }\n\n wrapper.cancel = cancel;\n\n return wrapper;\n}\n\nfunction debounce(delay, atBegin, callback) {\n return 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 rebuild: {\n type: Boolean,\n default: false\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 onChange: function onChange() {\n if (this.rebuild) {\n this.rebuildViewer();\n } else {\n this.updateViewer();\n }\n },\n rebuildViewer: function rebuildViewer() {\n this.destroyViewer();\n this.createViewer();\n },\n updateViewer: function updateViewer() {\n if (this.$viewer) {\n this.$viewer.update();\n this.$emit('inited', this.$viewer);\n } else {\n this.createViewer();\n }\n },\n destroyViewer: function destroyViewer() {\n this.$viewer && this.$viewer.destroy();\n },\n createViewer: function createViewer() {\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.onChange();\n });\n },\n\n trigger: {\n handler: function handler() {\n var _this2 = this;\n\n this.$nextTick(function () {\n _this2.onChange();\n });\n },\n\n deep: true\n },\n options: {\n handler: function handler() {\n var _this3 = this;\n\n this.$nextTick(function () {\n _this3.rebuildViewer();\n });\n },\n\n deep: true\n }\n },\n\n mounted: function mounted() {\n this.createViewer();\n },\n destroyed: function destroyed() {\n this.destroyViewer();\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});","module.exports = __webpack_public_path__ + \"img/2.7ba88b79.png\";","module.exports = __webpack_public_path__ + \"img/3.97ea5e9f.png\";","module.exports = __webpack_public_path__ + \"img/2.75379d14.png\";","module.exports = __webpack_public_path__ + \"img/3.931d9fc6.png\";","module.exports = __webpack_public_path__ + \"img/1.a5996b53.png\";","module.exports = __webpack_public_path__ + \"img/3.592d22f8.png\";","module.exports = __webpack_public_path__ + \"img/2.15489e77.png\";","/*!\n * Viewer.js v1.9.0\n * https://fengyuanchen.github.io/viewerjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2020-12-06T11:25:15.688Z\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 = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Viewer = factory());\n}(this, (function () { 'use strict';\n\n function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\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(Object(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(Object(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 extra attributes to inherit from the original image.\n * @type {Array}\n */\n inheritedAttributes: ['crossOrigin', 'decoding', 'isMap', 'loading', 'referrerPolicy', 'sizes', 'srcset', 'useMap'],\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 * Focus the viewer when initialized.\n * @type {boolean}\n */\n focus: 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 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 * Enable to zoom the image.\n * @type {boolean}\n */\n zoomable: true,\n\n /**\n * Enable to zoom the current image by dragging on the touch screen.\n * @type {boolean}\n */\n zoomOnTouch: true,\n\n /**\n * Enable to zoom the image by wheeling mouse.\n * @type {boolean}\n */\n zoomOnWheel: true,\n\n /**\n * Enable to slide to the next or previous image by swiping on the touch screen.\n * @type {boolean}\n */\n slideOnTouch: 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 move: null,\n moved: null,\n rotate: null,\n rotated: null,\n scale: null,\n scaled: null,\n zoom: null,\n zoomed: null,\n play: null,\n stop: 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 && WINDOW.document.documentElement ? '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\"); // Native events\n\n var EVENT_CLICK = 'click';\n var EVENT_DBLCLICK = 'dblclick';\n var EVENT_DRAG_START = 'dragstart';\n var EVENT_FOCUSIN = 'focusin';\n var EVENT_KEY_DOWN = 'keydown';\n var EVENT_LOAD = 'load';\n var EVENT_TOUCH_END = IS_TOUCH_DEVICE ? 'touchend touchcancel' : 'mouseup';\n var EVENT_TOUCH_MOVE = IS_TOUCH_DEVICE ? 'touchmove' : 'mousemove';\n var EVENT_TOUCH_START = IS_TOUCH_DEVICE ? 'touchstart' : 'mousedown';\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_RESIZE = 'resize';\n var EVENT_TRANSITION_END = 'transitionend';\n var EVENT_WHEEL = 'wheel'; // Custom events\n\n var EVENT_READY = 'ready';\n var EVENT_SHOW = 'show';\n var EVENT_SHOWN = 'shown';\n var EVENT_HIDE = 'hide';\n var EVENT_HIDDEN = 'hidden';\n var EVENT_VIEW = 'view';\n var EVENT_VIEWED = 'viewed';\n var EVENT_MOVE = 'move';\n var EVENT_MOVED = 'moved';\n var EVENT_ROTATE = 'rotate';\n var EVENT_ROTATED = 'rotated';\n var EVENT_SCALE = 'scale';\n var EVENT_SCALED = 'scaled';\n var EVENT_ZOOM = 'zoom';\n var EVENT_ZOOMED = 'zoomed';\n var EVENT_PLAY = 'play';\n var EVENT_STOP = 'stop'; // 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 * @param {Object} options - The additional event options.\n * @returns {boolean} Indicate if the event is default prevented or not.\n */\n\n function dispatchEvent(element, type, data, options) {\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, _objectSpread2({\n bubbles: true,\n cancelable: true,\n detail: data\n }, options));\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('https://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 {Object} options - The viewer options.\n * @param {Function} callback - The callback function.\n * @returns {HTMLImageElement} The new image.\n */\n\n function getImageNaturalSizes(image, options, 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 forEach(options.inheritedAttributes, function (name) {\n var value = image.getAttribute(name);\n\n if (value !== null) {\n newImage.setAttribute(name, value);\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 initBody: function initBody() {\n var ownerDocument = this.element.ownerDocument;\n var body = ownerDocument.body || ownerDocument.documentElement;\n this.body = body;\n this.scrollbarWidth = window.innerWidth - ownerDocument.documentElement.clientWidth;\n this.initialBodyPaddingRight = body.style.paddingRight;\n this.initialBodyComputedPaddingRight = window.getComputedStyle(body).paddingRight;\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\n var url = _this.getImageURL(image);\n\n if (src || url) {\n var item = document.createElement('li');\n var img = document.createElement('img');\n forEach(options.inheritedAttributes, function (name) {\n var value = image.getAttribute(name);\n\n if (value !== null) {\n img.setAttribute(name, value);\n }\n });\n img.src = src || url;\n img.alt = alt;\n img.setAttribute('data-original-url', url || src);\n item.setAttribute('data-index', index);\n item.setAttribute('data-viewer-action', 'view');\n item.setAttribute('role', 'button');\n\n if (options.keyboard) {\n item.setAttribute('tabindex', 0);\n }\n\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, options, 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 left = (viewerWidth - width) / 2;\n var top = (viewerHeight - height) / 2;\n var imageData = {\n left: left,\n top: top,\n x: left,\n y: top,\n width: width,\n height: height,\n ratio: width / naturalWidth,\n aspectRatio: aspectRatio,\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight\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.x,\n marginTop: imageData.y\n }, getTransforms(imageData)));\n\n if (done) {\n if ((this.viewing || this.moving || this.rotating || this.scaling || this.zooming) && this.options.transition && hasClass(image, CLASS_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_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.zoomable && options.zoomOnWheel) {\n addListener(viewer, EVENT_WHEEL, this.onWheel = this.wheel.bind(this), {\n passive: false,\n capture: true\n });\n }\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_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.zoomable && options.zoomOnWheel) {\n removeListener(viewer, EVENT_WHEEL, this.onWheel, {\n passive: false,\n capture: true\n });\n }\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 options = this.options,\n imageData = this.imageData;\n var target = event.target;\n var action = getData(target, DATA_ACTION);\n\n if (!action && target.localName === 'img' && target.parentElement.localName === 'li') {\n target = target.parentElement;\n action = getData(target, DATA_ACTION);\n } // Cancel the emulated click when the native click event was triggered.\n\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 cancelable: false\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, this.options, 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 (!options.keyboard) {\n return;\n }\n\n var keyCode = event.keyCode || event.which || event.charCode;\n\n switch (keyCode) {\n // Enter\n case 13:\n if (this.viewer.contains(event.target)) {\n this.click(event);\n }\n\n break;\n }\n\n if (!this.fulled) {\n return;\n }\n\n switch (keyCode) {\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 },\n dragstart: function dragstart(event) {\n if (event.target.localName === '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 (options.zoomOnTouch && options.zoomable && Object.keys(pointers).length > 1) {\n action = ACTION_ZOOM;\n } else if (options.slideOnTouch && (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 if (this.fulled) {\n this.close();\n this.initBody();\n this.open();\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 viewer.setAttribute('role', 'dialog');\n viewer.setAttribute('aria-labelledby', this.title.id);\n viewer.setAttribute('aria-modal', true);\n viewer.removeAttribute('aria-hidden');\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\n viewer.initialOffsetWidth = 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 _this = this;\n\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 image = this.image;\n\n var hideImmediately = function hideImmediately() {\n removeClass(viewer, CLASS_IN);\n\n _this.hidden();\n };\n\n if (options.transition && !immediate) {\n var onViewerTransitionEnd = function onViewerTransitionEnd(event) {\n // Ignore all propagating `transitionend` events (#275).\n if (event && event.target === viewer) {\n removeListener(viewer, EVENT_TRANSITION_END, onViewerTransitionEnd);\n\n _this.hidden();\n }\n };\n\n var onImageTransitionEnd = function onImageTransitionEnd() {\n // In case of show the viewer by `viewer.show(true)` previously (#407).\n if (hasClass(viewer, CLASS_TRANSITION)) {\n addListener(viewer, EVENT_TRANSITION_END, onViewerTransitionEnd);\n removeClass(viewer, CLASS_IN);\n } else {\n hideImmediately();\n }\n };\n\n this.transitioning = {\n abort: function abort() {\n if (_this.viewed && hasClass(image, CLASS_TRANSITION)) {\n removeListener(image, EVENT_TRANSITION_END, onImageTransitionEnd);\n } else if (hasClass(viewer, CLASS_TRANSITION)) {\n removeListener(viewer, EVENT_TRANSITION_END, onViewerTransitionEnd);\n }\n }\n }; // In case of hiding the viewer when holding on the image (#255),\n // note that the `CLASS_TRANSITION` class will be removed on pointer down.\n\n if (this.viewed && hasClass(image, CLASS_TRANSITION)) {\n addListener(image, EVENT_TRANSITION_END, onImageTransitionEnd, {\n once: true\n });\n this.zoomTo(0, false, false, true);\n } else {\n onImageTransitionEnd();\n }\n } else {\n hideImmediately();\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 _this2 = 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 forEach(options.inheritedAttributes, function (name) {\n var value = img.getAttribute(name);\n\n if (value !== null) {\n image.setAttribute(name, value);\n }\n });\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 var activeItem = this.items[this.index];\n removeClass(activeItem, CLASS_ACTIVE);\n activeItem.removeAttribute('aria-selected');\n addClass(item, CLASS_ACTIVE);\n item.setAttribute('aria-selected', true);\n\n if (options.focus) {\n item.focus();\n }\n\n this.image = image;\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 = _this2.imageData;\n var render = Array.isArray(options.title) ? options.title[1] : options.title;\n title.innerHTML = escapeHTMLEntities(isFunction(render) ? render.call(_this2, 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 (_this2.imageRendering) {\n _this2.imageRendering.abort();\n } else if (_this2.imageInitializing) {\n _this2.imageInitializing.abort();\n }\n } else {\n // Cancel download to save bandwidth.\n image.src = '';\n removeListener(image, EVENT_LOAD, onLoad);\n\n if (_this2.timeout) {\n clearTimeout(_this2.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 _this2.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} x - The moving distance in the horizontal direction.\n * @param {number} [y=x] The moving distance in the vertical direction.\n * @returns {Viewer} this\n */\n move: function move(x) {\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x;\n var imageData = this.imageData;\n this.moveTo(isUndefined(x) ? x : imageData.x + Number(x), isUndefined(y) ? y : imageData.y + Number(y));\n return this;\n },\n\n /**\n * Move the image to an absolute point.\n * @param {number} x - The new position in the horizontal direction.\n * @param {number} [y=x] - The new position in the vertical direction.\n * @param {Event} [_originalEvent=null] - The original event if any.\n * @returns {Viewer} this\n */\n moveTo: function moveTo(x) {\n var _this3 = this;\n\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x;\n\n var _originalEvent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n var element = this.element,\n options = this.options,\n imageData = this.imageData;\n x = Number(x);\n y = Number(y);\n\n if (this.viewed && !this.played && options.movable) {\n var oldX = imageData.x;\n var oldY = imageData.y;\n var changed = false;\n\n if (isNumber(x)) {\n changed = true;\n } else {\n x = oldX;\n }\n\n if (isNumber(y)) {\n changed = true;\n } else {\n y = oldY;\n }\n\n if (changed) {\n if (isFunction(options.move)) {\n addListener(element, EVENT_MOVE, options.move, {\n once: true\n });\n }\n\n if (dispatchEvent(element, EVENT_MOVE, {\n x: x,\n y: y,\n oldX: oldX,\n oldY: oldY,\n originalEvent: _originalEvent\n }) === false) {\n return this;\n }\n\n imageData.x = x;\n imageData.y = y;\n imageData.left = x;\n imageData.top = y;\n this.moving = true;\n this.renderImage(function () {\n _this3.moving = false;\n\n if (isFunction(options.moved)) {\n addListener(element, EVENT_MOVED, options.moved, {\n once: true\n });\n }\n\n dispatchEvent(element, EVENT_MOVED, {\n x: x,\n y: y,\n oldX: oldX,\n oldY: oldY,\n originalEvent: _originalEvent\n }, {\n cancelable: false\n });\n });\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 _this4 = this;\n\n var element = this.element,\n options = this.options,\n imageData = this.imageData;\n degree = Number(degree);\n\n if (isNumber(degree) && this.viewed && !this.played && options.rotatable) {\n var oldDegree = imageData.rotate;\n\n if (isFunction(options.rotate)) {\n addListener(element, EVENT_ROTATE, options.rotate, {\n once: true\n });\n }\n\n if (dispatchEvent(element, EVENT_ROTATE, {\n degree: degree,\n oldDegree: oldDegree\n }) === false) {\n return this;\n }\n\n imageData.rotate = degree;\n this.rotating = true;\n this.renderImage(function () {\n _this4.rotating = false;\n\n if (isFunction(options.rotated)) {\n addListener(element, EVENT_ROTATED, options.rotated, {\n once: true\n });\n }\n\n dispatchEvent(element, EVENT_ROTATED, {\n degree: degree,\n oldDegree: oldDegree\n }, {\n cancelable: false\n });\n });\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 _this5 = this;\n\n var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX;\n var element = this.element,\n options = this.options,\n imageData = this.imageData;\n scaleX = Number(scaleX);\n scaleY = Number(scaleY);\n\n if (this.viewed && !this.played && options.scalable) {\n var oldScaleX = imageData.scaleX;\n var oldScaleY = imageData.scaleY;\n var changed = false;\n\n if (isNumber(scaleX)) {\n changed = true;\n } else {\n scaleX = oldScaleX;\n }\n\n if (isNumber(scaleY)) {\n changed = true;\n } else {\n scaleY = oldScaleY;\n }\n\n if (changed) {\n if (isFunction(options.scale)) {\n addListener(element, EVENT_SCALE, options.scale, {\n once: true\n });\n }\n\n if (dispatchEvent(element, EVENT_SCALE, {\n scaleX: scaleX,\n scaleY: scaleY,\n oldScaleX: oldScaleX,\n oldScaleY: oldScaleY\n }) === false) {\n return this;\n }\n\n imageData.scaleX = scaleX;\n imageData.scaleY = scaleY;\n this.scaling = true;\n this.renderImage(function () {\n _this5.scaling = false;\n\n if (isFunction(options.scaled)) {\n addListener(element, EVENT_SCALED, options.scaled, {\n once: true\n });\n }\n\n dispatchEvent(element, EVENT_SCALED, {\n scaleX: scaleX,\n scaleY: scaleY,\n oldScaleX: oldScaleX,\n oldScaleY: oldScaleY\n }, {\n cancelable: false\n });\n });\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 _this6 = 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 x = imageData.x,\n y = imageData.y,\n width = imageData.width,\n height = imageData.height,\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 && options.zoomRatio >= 0.055 && 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.x -= offsetWidth * ((center.pageX - offset.left - x) / width);\n imageData.y -= offsetHeight * ((center.pageY - offset.top - y) / height);\n } else {\n // Zoom from the center of the image\n imageData.x -= offsetWidth / 2;\n imageData.y -= offsetHeight / 2;\n }\n\n imageData.left = imageData.x;\n imageData.top = imageData.y;\n imageData.width = newWidth;\n imageData.height = newHeight;\n imageData.ratio = ratio;\n this.renderImage(function () {\n _this6.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 cancelable: false\n });\n });\n\n if (hasTooltip) {\n this.tooltip();\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 _this7 = 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 element = this.element,\n options = this.options;\n\n if (isFunction(options.play)) {\n addListener(element, EVENT_PLAY, options.play, {\n once: true\n });\n }\n\n if (dispatchEvent(element, EVENT_PLAY) === false) {\n return this;\n }\n\n var 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 image.referrerPolicy = img.referrerPolicy;\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 _this7.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 _this8 = this;\n\n if (!this.played) {\n return this;\n }\n\n var element = this.element,\n options = this.options;\n\n if (isFunction(options.stop)) {\n addListener(element, EVENT_STOP, options.stop, {\n once: true\n });\n }\n\n if (dispatchEvent(element, EVENT_STOP) === false) {\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, _this8.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 _this9 = 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('role', 'dialog');\n viewer.setAttribute('aria-labelledby', this.title.id);\n viewer.setAttribute('aria-modal', true);\n viewer.removeAttribute('style');\n setStyle(viewer, {\n zIndex: options.zIndex\n });\n\n if (options.focus) {\n this.enforceFocus();\n }\n\n this.initContainer();\n this.viewerData = assign({}, this.containerData);\n this.renderList();\n\n if (this.viewed) {\n this.initImage(function () {\n _this9.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 _this10 = 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 if (options.focus) {\n this.clearEnforceFocus();\n }\n\n viewer.removeAttribute('role');\n viewer.removeAttribute('aria-labelledby');\n viewer.removeAttribute('aria-modal');\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 _this10.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 _this11 = 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);\n tooltipBox.removeAttribute('aria-hidden'); // Force reflow to enable CSS3 transition\n\n tooltipBox.initialOffsetWidth = tooltipBox.offsetWidth;\n addClass(tooltipBox, CLASS_IN);\n } else {\n addClass(tooltipBox, CLASS_SHOW);\n tooltipBox.removeAttribute('aria-hidden');\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 tooltipBox.setAttribute('aria-hidden', true);\n _this11.fading = false;\n }, {\n once: true\n });\n removeClass(tooltipBox, CLASS_IN);\n _this11.fading = true;\n } else {\n removeClass(tooltipBox, CLASS_SHOW);\n tooltipBox.setAttribute('aria-hidden', true);\n }\n\n _this11.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 _this12 = this;\n\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 (isFunction(options.filter)) {\n if (options.filter.call(_this12, image)) {\n images.push(image);\n }\n } else if (_this12.getImageURL(image)) {\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 changedIndexes = [];\n forEach(this.items, function (item, i) {\n var img = item.querySelector('img');\n var image = images[i];\n\n if (image && img) {\n if (image.src !== img.src // Title changed (#408)\n || image.alt !== img.alt) {\n changedIndexes.push(i);\n }\n } else {\n changedIndexes.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 changedIndex = changedIndexes.indexOf(this.index);\n\n if (changedIndex >= 0) {\n this.viewed = false;\n this.view(Math.max(Math.min(this.index - changedIndex, this.length - 1), 0));\n } else {\n var activeItem = this.items[this.index]; // Reactivate the current viewing item after reset the list.\n\n addClass(activeItem, CLASS_ACTIVE);\n activeItem.setAttribute('aria-selected', true);\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 getImageURL: function getImageURL(image) {\n var url = this.options.url;\n\n if (isString(url)) {\n url = image.getAttribute(url);\n } else if (isFunction(url)) {\n url = url.call(this, image);\n } else {\n url = '';\n }\n\n return url;\n },\n enforceFocus: function enforceFocus() {\n var _this = this;\n\n this.clearEnforceFocus();\n addListener(document, EVENT_FOCUSIN, this.onFocusin = function (_ref) {\n var target = _ref.target;\n var viewer = _this.viewer;\n\n if (target !== document && target !== viewer && !viewer.contains(target)) {\n viewer.focus();\n }\n });\n },\n clearEnforceFocus: function clearEnforceFocus() {\n if (this.onFocusin) {\n removeListener(document, EVENT_FOCUSIN, this.onFocusin);\n this.onFocusin = null;\n }\n },\n open: function open() {\n var body = this.body;\n addClass(body, CLASS_OPEN);\n body.style.paddingRight = \"\".concat(this.scrollbarWidth + (parseFloat(this.initialBodyComputedPaddingRight) || 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 viewer = this.viewer;\n this.fulled = true;\n this.isShown = true;\n this.render();\n this.bind();\n this.showing = false;\n\n if (options.focus) {\n viewer.focus();\n this.enforceFocus();\n }\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 viewer = this.viewer;\n\n if (options.fucus) {\n this.clearEnforceFocus();\n }\n\n this.fulled = false;\n this.viewed = false;\n this.isShown = false;\n this.close();\n this.unbind();\n addClass(viewer, CLASS_HIDE);\n viewer.removeAttribute('role');\n viewer.removeAttribute('aria-labelledby');\n viewer.removeAttribute('aria-modal');\n viewer.setAttribute('aria-hidden', true);\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, null, {\n cancelable: false\n });\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]]; // In the case of the `pointers` object is empty (#421)\n\n if (!pointer) {\n return;\n }\n\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, event);\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 } // 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.x >= 0 && imageData.y >= 0 && imageData.width <= viewerData.width && imageData.height <= viewerData.height;\n }\n };\n\n var AnotherViewer = WINDOW.Viewer;\n\n var getUniqueID = function (id) {\n return function () {\n id += 1;\n return id;\n };\n }(-1);\n\n var Viewer = /*#__PURE__*/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.moving = false;\n this.played = false;\n this.playing = false;\n this.pointers = {};\n this.ready = false;\n this.rotating = false;\n this.scaling = 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.id = getUniqueID();\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; // The `focus` option requires the `keyboard` option set to `true`.\n\n if (options.focus && !options.keyboard) {\n options.focus = false;\n }\n\n var isImg = element.localName === '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 if (_this.getImageURL(image)) {\n images.push(image);\n }\n });\n this.isImg = isImg;\n this.length = images.length;\n this.images = images;\n this.initBody(); // 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.localName === '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 viewer.id = \"\".concat(NAMESPACE).concat(this.id);\n title.id = \"\".concat(NAMESPACE, \"Title\").concat(this.id);\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.keyboard) {\n button.setAttribute('tabindex', 0);\n }\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\n if (options.keyboard) {\n item.setAttribute('tabindex', 0);\n }\n\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","module.exports = __webpack_public_path__ + \"img/2.304bc04d.png\";","module.exports = __webpack_public_path__ + \"img/1.c0f0d27d.png\";","module.exports = __webpack_public_path__ + \"img/3.30e227c3.png\";","module.exports = __webpack_public_path__ + \"img/3.61d6a753.png\";","module.exports = __webpack_public_path__ + \"img/3.45c86f98.png\";","module.exports = __webpack_public_path__ + \"img/2.9c220c3f.png\";"],"sourceRoot":""}