{"version":3,"sources":["webpack:///./node_modules/viewerjs/dist/viewer.js","webpack:///./node_modules/viewerjs/dist/viewer.css?55d8","webpack:///./node_modules/viewerjs/dist/viewer.css","webpack:///./node_modules/css-loader/dist/runtime/api.js","webpack:///./node_modules/style-loader/lib/addStyles.js","webpack:///./node_modules/style-loader/lib/urls.js"],"names":["module","exports","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread2","target","i","arguments","length","source","forEach","key","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_typeof","obj","Symbol","iterator","constructor","prototype","_classCallCheck","instance","Constructor","TypeError","_defineProperties","props","descriptor","configurable","writable","value","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","IS_BROWSER","window","document","WINDOW","IS_TOUCH_DEVICE","documentElement","HAS_POINTER_EVENT","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_TOUCH_END","EVENT_TOUCH_MOVE","EVENT_TOUCH_START","EVENT_POINTER_DOWN","EVENT_POINTER_MOVE","EVENT_POINTER_UP","DATA_ACTION","REGEXP_SPACES","BUTTONS","isString","isNaN","Number","isNumber","isUndefined","isObject","hasOwnProperty","isPlainObject","_constructor","call","error","isFunction","data","callback","Array","isArray","assign","_len","args","_key","arg","REGEXP_SUFFIX","setStyle","element","styles","style","property","test","escapeHTMLEntities","replace","hasClass","classList","contains","indexOf","addClass","elem","add","trim","removeClass","remove","toggleClass","added","REGEXP_HYPHENATE","hyphenate","toLowerCase","getData","name","dataset","getAttribute","setData","setAttribute","onceSupported","supported","once","listener","options","get","set","addEventListener","removeEventListener","removeListener","type","undefined","handler","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","_ref","scaleX","scaleY","translateX","translateY","values","transform","join","WebkitTransform","msTransform","IS_SAFARI","navigator","userAgent","getImageNaturalSizes","image","newImage","createElement","naturalWidth","naturalHeight","body","onload","width","height","removeChild","src","cssText","appendChild","getResponsiveClass","getPointer","_ref2","endOnly","pageX","pageY","end","endX","endY","timeStamp","Date","now","startX","startY","getPointersCenter","pointers","count","_ref3","id","render","this","initContainer","initViewer","initList","renderViewer","initBody","ownerDocument","scrollbarWidth","innerWidth","clientWidth","initialBodyPaddingRight","paddingRight","initialBodyComputedPaddingRight","getComputedStyle","containerData","innerHeight","viewerData","parent","Math","max","offsetWidth","offsetHeight","parentData","fulled","viewer","_this","list","items","innerHTML","images","index","alt","decodeURIComponent","getImageNameFromURL","getImageURL","item","img","firstElementChild","loadImage","renderList","outerWidth","resetList","initImage","done","sizingImage","_this2","footerHeight","footer","viewerWidth","viewerHeight","oldImageData","imageData","imageInitializing","abort","aspectRatio","min","x","y","ratio","initialImageData","renderImage","_this3","marginLeft","marginTop","viewing","moving","rotating","scaling","zooming","onTransitionEnd","imageRendering","resetImage","parentNode","events","bind","canvas","onClick","click","onDragStart","dragstart","onPointerDown","pointerdown","onPointerMove","pointermove","onPointerUp","pointerup","onKeyDown","keydown","onResize","resize","onWheel","wheel","passive","capture","onDblclick","dblclick","unbind","handlers","action","localName","parentElement","isTrusted","clearTimeout","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","pointerId","isSwitchable","change","pointer","imageClicked","setTimeout","isShown","close","open","fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement","player","getElementsByTagName","_this4","wheeling","delta","deltaY","wheelDelta","methods","immediate","build","transitioning","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","update","_this12","isImg","destroy","querySelectorAll","changedIndexes","changedIndex","destroyed","delaying","initializing","onStart","others","onFocusin","parseFloat","fucus","webkitRequestFullscreen","Element","ALLOW_KEYBOARD_INPUT","mozRequestFullScreen","msRequestFullscreen","webkitExitFullscreen","mozCancelFullScreen","msExitFullscreen","offsetX","offsetY","pointers2","ratios","pointer2","x1","abs","y1","x2","y2","z1","sqrt","sort","a","b","getMaxZoomRatio","absoluteOffsetX","p","AnotherViewer","Viewer","getUniqueID","nodeType","Error","init","protoProps","staticProps","progress","template","custom","zoomButtons","slice","rotateButtons","scaleButtons","deep","size","rotates","position","insertBefore","nextSibling","factory","content","locals","useSourceMap","toString","map","cssMapping","btoa","sourceMapping","sourceMap","unescape","encodeURIComponent","JSON","stringify","sourceURLs","sources","sourceRoot","cssWithMappingToString","modules","mediaQuery","alreadyImportedModules","fn","memo","stylesInDom","isOldIE","all","atob","getTarget","getElement","styleTarget","HTMLIFrameElement","contentDocument","head","e","singleton","singletonCounter","stylesInsertedAtTop","fixUrls","addStylesToDom","domStyle","refs","j","parts","addStyle","listToStyles","newStyles","base","part","css","media","insertStyleElement","insertInto","lastStyleElementInsertedAtTop","insertAt","firstChild","before","removeStyleElement","idx","splice","createStyleElement","attrs","nonce","getNonce","addAttrs","el","result","default","styleIndex","applyToSingletonTag","URL","createObjectURL","revokeObjectURL","Blob","link","rel","createLinkElement","updateLink","href","applyToTag","newObj","DEBUG","newList","mayRemove","textStore","replaceText","replacement","Boolean","styleSheet","cssNode","createTextNode","childNodes","autoFixUrls","convertToAbsoluteUrls","blob","oldSrc","location","baseUrl","protocol","host","currentDir","pathname","fullMatch","origUrl","newUrl","unquotedOrigUrl","o","$1"],"mappings":"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","file":"vendor.js","sourcesContent":["/*!\n * Viewer.js v1.9.1\n * https://fengyuanchen.github.io/viewerjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2021-05-22T07:21:35.753Z\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 ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\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 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 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","\nvar content = require(\"!!../../css-loader/dist/cjs.js!../../sass-loader/dist/cjs.js!./viewer.css\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../css-loader/dist/cjs.js!../../sass-loader/dist/cjs.js!./viewer.css\", function() {\n\t\tvar newContent = require(\"!!../../css-loader/dist/cjs.js!../../sass-loader/dist/cjs.js!./viewer.css\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"/*!\\n * Viewer.js v1.9.1\\n * https://fengyuanchen.github.io/viewerjs\\n *\\n * Copyright 2015-present Chen Fengyuan\\n * Released under the MIT license\\n *\\n * Date: 2021-05-22T07:21:31.880Z\\n */.viewer-zoom-in::before,.viewer-zoom-out::before,.viewer-one-to-one::before,.viewer-reset::before,.viewer-prev::before,.viewer-play::before,.viewer-next::before,.viewer-rotate-left::before,.viewer-rotate-right::before,.viewer-flip-horizontal::before,.viewer-flip-vertical::before,.viewer-fullscreen::before,.viewer-fullscreen-exit::before,.viewer-close::before{background-image:url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARgAAAAUCAYAAABWOyJDAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAQPSURBVHic7Zs/iFxVFMa/0U2UaJGksUgnIVhYxVhpjDbZCBmLdAYECxsRFBTUamcXUiSNncgKQbSxsxH8gzAP3FU2jY0kKKJNiiiIghFlccnP4p3nPCdv3p9778vsLOcHB2bfveeb7955c3jvvNkBIMdxnD64a94GHMfZu3iBcRynN7zAOI7TG15gHCeeNUkr8zaxG2lbYDYsdgMbktBsP03jdQwljSXdtBhLOmtjowC9Mg9L+knSlcD8TNKpSA9lBpK2JF2VdDSR5n5J64m0qli399hNFMUlpshQii5jbXTbHGviB0nLNeNDSd9VO4A2UdB2fp+x0eCnaXxWXGA2X0au/3HgN9P4LFCjIANOJdrLr0zzZ+BEpNYDwKbpnQMeAw4m8HjQtM6Z9qa917zPQwFr3M5KgA6J5rTJCdFZJj9/lyvGhsDvwFNVuV2MhhjrK6b9bFiE+j1r87eBl4HDwCF7/U/k+ofAX5b/EXBv5JoLMuILzf3Ap6Z3EzgdqHMCuF7hcQf4HDgeoHnccncqdK/TvSDWffFXI/exICY/xZyqc6XLWF1UFZna4gJ7q8BsRvgd2/xXpo6P+D9dfT7PpECtA3cnWPM0GXGFZh/wgWltA+cDNC7X+AP4GzjZQe+k5dRxuYPeiuXU7e1qwLpDz7dFjXKRaSwuMLvAlG8zZlG+YmiK1HoFqT7wP2z+4Q45TfEGcMt01xLoNZEBTwRqD4BLpnMLeC1A41UmVxsXgXeBayV/Wx20rpTyrpnWRft7p6O/FdqzGrDukPNtkaMoMo3FBdBSQMOnYBCReyf05s126fU9ytfX98+mY54Kxnp7S9K3kj6U9KYdG0h6UdLbkh7poFXMfUnSOyVvL0h6VtIXHbS6nOP+s/Zm9mvyXW1uuC9ohZ72E9uDmXWLJOB1GxsH+DxPftsB8B6wlGDN02TAkxG6+4D3TWsbeC5CS8CDFce+AW500LhhOW2020TRjK3b21HEmgti9m0RonxbdMZeVzV+/4tF3cBpP7E9mKHNL5q8h5g0eYsCMQz0epq8gQrwMXAgcs0FGXGFRcB9wCemF9PkbYqM/Bas7fxLwNeJPdTdpo4itQti8lPMqTpXuozVRVXPpbHI3KkNTB1NfkL81j2mvhDp91HgV9MKuRIqrykj3WPq4rHyL+axj8/qGPmTqi6F9YDlHOvJU6oYcTsh/TYSzWmTE6JT19CtLTJt32D6CmHe0eQn1O8z5AXgT4sx4Vcu0/EQecMydB8z0hUWkTd2t4CrwNEePqMBcAR4mrBbwyXLPWJa8zrXmmLEhNBmfpkuY2102xxrih+pb+ieAb6vGhuA97UcJ5KR8gZ77K+99xxeYBzH6Q3/Z0fHcXrDC4zjOL3hBcZxnN74F+zlvXFWXF9PAAAAAElFTkSuQmCC\\\");background-repeat:no-repeat;background-size:280px;color:transparent;display:block;font-size:0;height:20px;line-height:0;width:20px}.viewer-zoom-in::before{background-position:0 0;content:'Zoom In'}.viewer-zoom-out::before{background-position:-20px 0;content:'Zoom Out'}.viewer-one-to-one::before{background-position:-40px 0;content:'One to One'}.viewer-reset::before{background-position:-60px 0;content:'Reset'}.viewer-prev::before{background-position:-80px 0;content:'Previous'}.viewer-play::before{background-position:-100px 0;content:'Play'}.viewer-next::before{background-position:-120px 0;content:'Next'}.viewer-rotate-left::before{background-position:-140px 0;content:'Rotate Left'}.viewer-rotate-right::before{background-position:-160px 0;content:'Rotate Right'}.viewer-flip-horizontal::before{background-position:-180px 0;content:'Flip Horizontal'}.viewer-flip-vertical::before{background-position:-200px 0;content:'Flip Vertical'}.viewer-fullscreen::before{background-position:-220px 0;content:'Enter Full Screen'}.viewer-fullscreen-exit::before{background-position:-240px 0;content:'Exit Full Screen'}.viewer-close::before{background-position:-260px 0;content:'Close'}.viewer-container{bottom:0;direction:ltr;font-size:0;left:0;line-height:0;overflow:hidden;position:absolute;right:0;-webkit-tap-highlight-color:transparent;top:0;-ms-touch-action:none;touch-action:none;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.viewer-container::-moz-selection,.viewer-container *::-moz-selection{background-color:transparent}.viewer-container::selection,.viewer-container *::selection{background-color:transparent}.viewer-container:focus{outline:0}.viewer-container img{display:block;height:auto;max-height:none !important;max-width:none !important;min-height:0 !important;min-width:0 !important;width:100%}.viewer-canvas{bottom:0;left:0;overflow:hidden;position:absolute;right:0;top:0}.viewer-canvas>img{height:auto;margin:15px auto;max-width:90% !important;width:auto}.viewer-footer{bottom:0;left:0;overflow:hidden;position:absolute;right:0;text-align:center}.viewer-navbar{background-color:rgba(0,0,0,0.5);overflow:hidden}.viewer-list{-webkit-box-sizing:content-box;box-sizing:content-box;height:50px;margin:0;overflow:hidden;padding:1px 0}.viewer-list>li{color:transparent;cursor:pointer;float:left;font-size:0;height:50px;line-height:0;opacity:0.5;overflow:hidden;-webkit-transition:opacity 0.15s;transition:opacity 0.15s;width:30px}.viewer-list>li:focus,.viewer-list>li:hover{opacity:0.75}.viewer-list>li:focus{outline:0}.viewer-list>li+li{margin-left:1px}.viewer-list>.viewer-loading{position:relative}.viewer-list>.viewer-loading::after{border-width:2px;height:20px;margin-left:-10px;margin-top:-10px;width:20px}.viewer-list>.viewer-active,.viewer-list>.viewer-active:focus,.viewer-list>.viewer-active:hover{opacity:1}.viewer-player{background-color:#000;bottom:0;cursor:none;display:none;left:0;position:absolute;right:0;top:0;z-index:1}.viewer-player>img{left:0;position:absolute;top:0}.viewer-toolbar>ul{display:inline-block;margin:0 auto 5px;overflow:hidden;padding:6px 3px}.viewer-toolbar>ul>li{background-color:rgba(0,0,0,0.5);border-radius:50%;cursor:pointer;float:left;height:24px;overflow:hidden;-webkit-transition:background-color 0.15s;transition:background-color 0.15s;width:24px}.viewer-toolbar>ul>li:focus,.viewer-toolbar>ul>li:hover{background-color:rgba(0,0,0,0.8)}.viewer-toolbar>ul>li:focus{-webkit-box-shadow:0 0 3px #fff;box-shadow:0 0 3px #fff;outline:0;position:relative;z-index:1}.viewer-toolbar>ul>li::before{margin:2px}.viewer-toolbar>ul>li+li{margin-left:1px}.viewer-toolbar>ul>.viewer-small{height:18px;margin-bottom:3px;margin-top:3px;width:18px}.viewer-toolbar>ul>.viewer-small::before{margin:-1px}.viewer-toolbar>ul>.viewer-large{height:30px;margin-bottom:-3px;margin-top:-3px;width:30px}.viewer-toolbar>ul>.viewer-large::before{margin:5px}.viewer-tooltip{background-color:rgba(0,0,0,0.8);border-radius:10px;color:#fff;display:none;font-size:12px;height:20px;left:50%;line-height:20px;margin-left:-25px;margin-top:-10px;position:absolute;text-align:center;top:50%;width:50px}.viewer-title{color:#ccc;display:inline-block;font-size:12px;line-height:1;margin:0 5% 5px;max-width:90%;opacity:0.8;overflow:hidden;text-overflow:ellipsis;-webkit-transition:opacity 0.15s;transition:opacity 0.15s;white-space:nowrap}.viewer-title:hover{opacity:1}.viewer-button{background-color:rgba(0,0,0,0.5);border-radius:50%;cursor:pointer;height:80px;overflow:hidden;position:absolute;right:-40px;top:-40px;-webkit-transition:background-color 0.15s;transition:background-color 0.15s;width:80px}.viewer-button:focus,.viewer-button:hover{background-color:rgba(0,0,0,0.8)}.viewer-button:focus{-webkit-box-shadow:0 0 3px #fff;box-shadow:0 0 3px #fff;outline:0}.viewer-button::before{bottom:15px;left:15px;position:absolute}.viewer-fixed{position:fixed}.viewer-open{overflow:hidden}.viewer-show{display:block}.viewer-hide{display:none}.viewer-backdrop{background-color:rgba(0,0,0,0.5)}.viewer-invisible{visibility:hidden}.viewer-move{cursor:move;cursor:-webkit-grab;cursor:grab}.viewer-fade{opacity:0}.viewer-in{opacity:1}.viewer-transition{-webkit-transition:all 0.3s;transition:all 0.3s}@-webkit-keyframes viewer-spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes viewer-spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.viewer-loading::after{-webkit-animation:viewer-spinner 1s linear infinite;animation:viewer-spinner 1s linear infinite;border:4px solid rgba(255,255,255,0.1);border-left-color:rgba(255,255,255,0.5);border-radius:50%;content:'';display:inline-block;height:40px;left:50%;margin-left:-20px;margin-top:-20px;position:absolute;top:50%;width:40px;z-index:1}@media (max-width: 767px){.viewer-hide-xs-down{display:none}}@media (max-width: 991px){.viewer-hide-sm-down{display:none}}@media (max-width: 1199px){.viewer-hide-md-down{display:none}}\\n\", \"\"]);\n\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function (useSourceMap) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item, useSourceMap);\n\n if (item[2]) {\n return '@media ' + item[2] + '{' + content + '}';\n } else {\n return content;\n }\n }).join('');\n }; // import a list of modules into the list\n\n\n list.i = function (modules, mediaQuery) {\n if (typeof modules === 'string') {\n modules = [[null, modules, '']];\n }\n\n var alreadyImportedModules = {};\n\n for (var i = 0; i < this.length; i++) {\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n\n for (i = 0; i < modules.length; i++) {\n var item = modules[i]; // skip already imported module\n // this implementation is not 100% perfect for weird media query combinations\n // when a module is imported multiple times with different media queries.\n // I hope this will never occur (Hey this way we have smaller bundles)\n\n if (item[0] == null || !alreadyImportedModules[item[0]]) {\n if (mediaQuery && !item[2]) {\n item[2] = mediaQuery;\n } else if (mediaQuery) {\n item[2] = '(' + item[2] + ') and (' + mediaQuery + ')';\n }\n\n list.push(item);\n }\n }\n };\n\n return list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n var content = item[1] || '';\n var cssMapping = item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (useSourceMap && typeof btoa === 'function') {\n var sourceMapping = toComment(cssMapping);\n var sourceURLs = cssMapping.sources.map(function (source) {\n return '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */';\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n }\n\n return [content].join('\\n');\n} // Adapted from convert-source-map (MIT)\n\n\nfunction toComment(sourceMap) {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n var data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n return '/*# ' + data + ' */';\n}","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\nvar stylesInDom = {};\n\nvar\tmemoize = function (fn) {\n\tvar memo;\n\n\treturn function () {\n\t\tif (typeof memo === \"undefined\") memo = fn.apply(this, arguments);\n\t\treturn memo;\n\t};\n};\n\nvar isOldIE = memoize(function () {\n\t// Test for IE <= 9 as proposed by Browserhacks\n\t// @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n\t// Tests for existence of standard globals is to allow style-loader\n\t// to operate correctly into non-standard environments\n\t// @see https://github.com/webpack-contrib/style-loader/issues/177\n\treturn window && document && document.all && !window.atob;\n});\n\nvar getTarget = function (target, parent) {\n if (parent){\n return parent.querySelector(target);\n }\n return document.querySelector(target);\n};\n\nvar getElement = (function (fn) {\n\tvar memo = {};\n\n\treturn function(target, parent) {\n // If passing function in options, then use it for resolve \"head\" element.\n // Useful for Shadow Root style i.e\n // {\n // insertInto: function () { return document.querySelector(\"#foo\").shadowRoot }\n // }\n if (typeof target === 'function') {\n return target();\n }\n if (typeof memo[target] === \"undefined\") {\n\t\t\tvar styleTarget = getTarget.call(this, target, parent);\n\t\t\t// Special case to return head of iframe instead of iframe itself\n\t\t\tif (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n\t\t\t\ttry {\n\t\t\t\t\t// This will throw an exception if access to iframe is blocked\n\t\t\t\t\t// due to cross-origin restrictions\n\t\t\t\t\tstyleTarget = styleTarget.contentDocument.head;\n\t\t\t\t} catch(e) {\n\t\t\t\t\tstyleTarget = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmemo[target] = styleTarget;\n\t\t}\n\t\treturn memo[target]\n\t};\n})();\n\nvar singleton = null;\nvar\tsingletonCounter = 0;\nvar\tstylesInsertedAtTop = [];\n\nvar\tfixUrls = require(\"./urls\");\n\nmodule.exports = function(list, options) {\n\tif (typeof DEBUG !== \"undefined\" && DEBUG) {\n\t\tif (typeof document !== \"object\") throw new Error(\"The style-loader cannot be used in a non-browser environment\");\n\t}\n\n\toptions = options || {};\n\n\toptions.attrs = typeof options.attrs === \"object\" ? options.attrs : {};\n\n\t// Force single-tag solution on IE6-9, which has a hard limit on the # of