viewerjs 1.11.8 → 1.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -56,14 +56,14 @@ dist/
56
56
  npm install viewerjs
57
57
  ```
58
58
 
59
- In browser:
59
+ In the browser:
60
60
 
61
61
  ```html
62
- <link href="/path/to/viewer.css" rel="stylesheet">
62
+ <link href="/path/to/viewer.css" rel="stylesheet">
63
63
  <script src="/path/to/viewer.js"></script>
64
64
  ```
65
65
 
66
- The [cdnjs](https://github.com/cdnjs/cdnjs) provides CDN support for Viewer.js's CSS and JavaScript. You can find the links [here](https://cdnjs.com/libraries/viewerjs).
66
+ The [cdnjs](https://github.com/cdnjs/cdnjs) project provides CDN support for Viewer.js CSS and JavaScript. You can find the links [here](https://cdnjs.com/libraries/viewerjs).
67
67
 
68
68
  ### Usage
69
69
 
@@ -75,11 +75,11 @@ new Viewer(element[, options])
75
75
 
76
76
  - **element**
77
77
  - Type: `HTMLElement`
78
- - The target image or container of images for viewing.
78
+ - The target image, or a container of images, for viewing.
79
79
 
80
80
  - **options** (optional)
81
81
  - Type: `Object`
82
- - The options for viewing. Check out the available [options](#options).
82
+ - The options for viewing. See the available [options](#options).
83
83
 
84
84
  #### Example
85
85
 
@@ -110,12 +110,12 @@ const viewer = new Viewer(document.getElementById('image'), {
110
110
  viewer.zoomTo(1);
111
111
  },
112
112
  });
113
- // Then, show the image by clicking it, or call `viewer.show()`.
113
+ // Then show the image by clicking it, or call `viewer.show()`.
114
114
 
115
115
  // View a list of images.
116
- // Note: All images within the container will be found by calling `element.querySelectorAll('img')`.
116
+ // Note: all images within the container will be found by calling `element.querySelectorAll('img')`.
117
117
  const gallery = new Viewer(document.getElementById('images'));
118
- // Then, show one image by click it, or call `gallery.show()`.
118
+ // Then show one image by clicking it, or call `gallery.show()`.
119
119
  ```
120
120
 
121
121
  ## Keyboard support
@@ -138,7 +138,7 @@ const gallery = new Viewer(document.getElementById('images'));
138
138
  ## Options
139
139
 
140
140
  You may set viewer options with `new Viewer(image, options)`.
141
- If you want to change the global default options, You may use `Viewer.setDefaults(options)`.
141
+ If you want to change the global default options, you may use `Viewer.setDefaults(options)`.
142
142
 
143
143
  ### backdrop
144
144
 
@@ -178,9 +178,9 @@ Specify the visibility of the navbar.
178
178
  - `3`: show the title only when the screen width is greater than 992 pixels
179
179
  - `4`: show the title only when the screen width is greater than 1200 pixels
180
180
  - `Function`: customize the title content
181
- - `[Number, Function]`: the first element indicate the visibility, the second element customize the title content
181
+ - `[Number, Function]`: the first element indicates the visibility; the second element customizes the title content
182
182
 
183
- Specify the visibility and the content of the title.
183
+ Specify the visibility and content of the title.
184
184
 
185
185
  > The name comes from the `alt` attribute of an image element or the image name parsed from its URL.
186
186
 
@@ -209,7 +209,7 @@ new Viewer(image, {
209
209
  - Available built-in keys: "zoomIn", "zoomOut", "oneToOne", "reset", "prev", "play", "next", "rotateLeft", "rotateRight", "flipHorizontal", "flipVertical".
210
210
  - Available built-in sizes: "small", "medium" (default) and "large".
211
211
 
212
- Specify the visibility and layout of the toolbar its buttons.
212
+ Specify the visibility and layout of the toolbar and its buttons.
213
213
 
214
214
  For example, `toolbar: 4` equals to:
215
215
 
@@ -295,7 +295,7 @@ Define the extra attributes to inherit from the original image.
295
295
  - Type: `Number`
296
296
  - Default: `0.9`
297
297
 
298
- Define the initial coverage of the viewing image. It must a positive number between 0 (0%) and 1 (100%).
298
+ Define the initial coverage of the viewing image. It must be a positive number between 0 (0%) and 1 (100%).
299
299
 
300
300
  ### initialViewIndex
301
301
 
@@ -424,9 +424,9 @@ Enable to slide to the next or previous image by swiping on the touch screen.
424
424
  - Type: `Boolean`
425
425
  - Default: `true`
426
426
 
427
- Indicate if toggle the image size between its natural size and initial size when double click on the image or not.
427
+ Indicate whether to toggle the image size between its natural size and initial size when double-clicking the image.
428
428
 
429
- In other words, call the [`toggle`](#toggle) method automatically when double click on the image.
429
+ In other words, call the [`toggle`](#toggle) method automatically when the image is double-clicked.
430
430
 
431
431
  > Requires [`dblclick`](https://developer.mozilla.org/en-US/docs/Web/Events/dblclick) event support.
432
432
 
@@ -442,7 +442,7 @@ Show the tooltip with image ratio (percentage) when zooming in or zooming out.
442
442
  - Type: `Boolean`
443
443
  - Default: `true`
444
444
 
445
- Enable CSS3 Transition for some special elements.
445
+ Enable CSS3 transitions for some special elements.
446
446
 
447
447
  ### zIndex
448
448
 
@@ -626,9 +626,9 @@ Shortcut of the `stop` event.
626
626
 
627
627
  ## Methods
628
628
 
629
- All methods allow chain composition.
629
+ All methods support chain composition.
630
630
 
631
- As there are some **asynchronous** processes when start the viewer, you should call a method only when it is available, see the following **lifecycle**:
631
+ As there are some **asynchronous** processes when starting the viewer, you should call a method only when it is available. See the following **lifecycle**:
632
632
 
633
633
  ```js
634
634
  new Viewer(image, {
@@ -856,9 +856,9 @@ viewer.zoomTo(0); // Zoom to zero size (0%)
856
856
  viewer.zoomTo(1); // Zoom to natural size (100%)
857
857
 
858
858
  // Zoom to 50% from the center of the window.
859
- viewer.zoomTo(.5, {
859
+ viewer.zoomTo(0.5, false, {
860
860
  x: window.innerWidth / 2,
861
- y: viewer.innerHeight / 2,
861
+ y: window.innerHeight / 2,
862
862
  });
863
863
  ```
864
864
 
@@ -867,7 +867,7 @@ viewer.zoomTo(.5, {
867
867
  - **fullscreen** (optional):
868
868
  - Type: `Boolean` or [`FullscreenOptions`](https://developer.mozilla.org/en-US/docs/Web/API/FullscreenOptions)
869
869
  - Default: `false`
870
- - Indicate if request fullscreen or not.
870
+ - Indicates whether to request fullscreen.
871
871
 
872
872
  Play the images.
873
873
 
@@ -1,11 +1,11 @@
1
1
  /*!
2
- * Viewer.js v1.11.8
2
+ * Viewer.js v1.12.0
3
3
  * https://fengyuanchen.github.io/viewerjs
4
4
  *
5
5
  * Copyright 2015-present Chen Fengyuan
6
6
  * Released under the MIT license
7
7
  *
8
- * Date: 2026-07-18T13:41:00.752Z
8
+ * Date: 2026-08-22T13:00:39.652Z
9
9
  */
10
10
 
11
11
  'use strict';
@@ -357,7 +357,7 @@ var EVENT_STOP = 'stop';
357
357
  var DATA_ACTION = "".concat(NAMESPACE, "Action");
358
358
 
359
359
  // RegExps
360
- var REGEXP_SPACES = /\s\s*/;
360
+ var REGEXP_SPACES = /\s+/;
361
361
 
362
362
  // Misc
363
363
  var BUTTONS = ['zoom-in', 'zoom-out', 'one-to-one', 'reset', 'prev', 'play', 'next', 'rotate-left', 'rotate-right', 'flip-horizontal', 'flip-vertical'];
@@ -513,7 +513,7 @@ function hasClass(element, value) {
513
513
  if (!element || !value) {
514
514
  return false;
515
515
  }
516
- return element.classList ? element.classList.contains(value) : element.className.indexOf(value) > -1;
516
+ return element.classList ? element.classList.contains(value) : element.className.split(REGEXP_SPACES).indexOf(value) > -1;
517
517
  }
518
518
 
519
519
  /**
@@ -562,8 +562,11 @@ function removeClass(element, value) {
562
562
  element.classList.remove(value);
563
563
  return;
564
564
  }
565
- if (element.className.indexOf(value) >= 0) {
566
- element.className = element.className.replace(value, '');
565
+ var className = element.className;
566
+ if (className && className.indexOf(value) >= 0) {
567
+ element.className = className.split(REGEXP_SPACES).filter(function (item) {
568
+ return item && item !== value;
569
+ }).join(' ');
567
570
  }
568
571
  }
569
572
 
@@ -1563,7 +1566,9 @@ var handlers = {
1563
1566
  clearTimeout(this.clickCanvasTimeout);
1564
1567
  clearTimeout(this.doubleClickImageTimeout);
1565
1568
  if (options.toggleOnDblclick && this.viewed && event.target === this.image) {
1566
- if (this.imageClicked) {
1569
+ if (this.pointerMoved) {
1570
+ this.imageClicked = false;
1571
+ } else if (this.imageClicked) {
1567
1572
  this.imageClicked = false;
1568
1573
 
1569
1574
  // This timeout will be cleared later when a native dblclick event is triggering
@@ -2702,7 +2707,8 @@ var methods = {
2702
2707
  }
2703
2708
  }
2704
2709
  if (!options.inline) {
2705
- removeListener(element, EVENT_CLICK, this.onStart);
2710
+ removeListener(element, EVENT_CLICK, this.onElementClick);
2711
+ removeListener(element, EVENT_KEY_DOWN, this.onElementKeyDown);
2706
2712
  }
2707
2713
  element[NAMESPACE] = undefined;
2708
2714
  return this;
@@ -2789,6 +2795,12 @@ var others = {
2789
2795
  var element = this.element,
2790
2796
  options = this.options,
2791
2797
  viewer = this.viewer;
2798
+ var activeElement = viewer.ownerDocument.activeElement;
2799
+
2800
+ // Avoid keeping focus inside the dialog before setting `aria-hidden`.
2801
+ if (activeElement && viewer.contains(activeElement) && isFunction(activeElement.blur)) {
2802
+ activeElement.blur();
2803
+ }
2792
2804
  if (options.focus) {
2793
2805
  this.clearEnforceFocus();
2794
2806
  }
@@ -3042,12 +3054,22 @@ var Viewer = /*#__PURE__*/function () {
3042
3054
  }
3043
3055
  });
3044
3056
  } else {
3045
- addListener(element, EVENT_CLICK, this.onStart = function (_ref) {
3057
+ addListener(element, EVENT_CLICK, this.onElementClick = function (_ref) {
3046
3058
  var target = _ref.target;
3047
3059
  if (target.localName === 'img' && (!isFunction(options.filter) || options.filter.call(_this, target))) {
3048
3060
  _this.view(_this.images.indexOf(target));
3049
3061
  }
3050
3062
  });
3063
+ addListener(element, EVENT_KEY_DOWN, this.onElementKeyDown = function (event) {
3064
+ var target = event.target,
3065
+ key = event.key;
3066
+ if (target.localName === 'img' && (key === 'Enter' || key === ' ')) {
3067
+ event.preventDefault();
3068
+ if (!isFunction(options.filter) || options.filter.call(_this, target)) {
3069
+ _this.view(_this.images.indexOf(target));
3070
+ }
3071
+ }
3072
+ });
3051
3073
  }
3052
3074
  }
3053
3075
  }, {
package/dist/viewer.css CHANGED
@@ -1,11 +1,11 @@
1
1
  /*!
2
- * Viewer.js v1.11.8
2
+ * Viewer.js v1.12.0
3
3
  * https://fengyuanchen.github.io/viewerjs
4
4
  *
5
5
  * Copyright 2015-present Chen Fengyuan
6
6
  * Released under the MIT license
7
7
  *
8
- * Date: 2026-07-18T13:40:58.328Z
8
+ * Date: 2026-08-22T13:00:37.884Z
9
9
  */
10
10
 
11
11
  .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 {
@@ -1,11 +1,11 @@
1
1
  /*!
2
- * Viewer.js v1.11.8
2
+ * Viewer.js v1.12.0
3
3
  * https://fengyuanchen.github.io/viewerjs
4
4
  *
5
5
  * Copyright 2015-present Chen Fengyuan
6
6
  * Released under the MIT license
7
7
  *
8
- * Date: 2026-07-18T13:41:00.752Z
8
+ * Date: 2026-08-22T13:00:39.652Z
9
9
  */
10
10
 
11
11
  function _classCallCheck(a, n) {
@@ -355,7 +355,7 @@ var EVENT_STOP = 'stop';
355
355
  var DATA_ACTION = "".concat(NAMESPACE, "Action");
356
356
 
357
357
  // RegExps
358
- var REGEXP_SPACES = /\s\s*/;
358
+ var REGEXP_SPACES = /\s+/;
359
359
 
360
360
  // Misc
361
361
  var BUTTONS = ['zoom-in', 'zoom-out', 'one-to-one', 'reset', 'prev', 'play', 'next', 'rotate-left', 'rotate-right', 'flip-horizontal', 'flip-vertical'];
@@ -511,7 +511,7 @@ function hasClass(element, value) {
511
511
  if (!element || !value) {
512
512
  return false;
513
513
  }
514
- return element.classList ? element.classList.contains(value) : element.className.indexOf(value) > -1;
514
+ return element.classList ? element.classList.contains(value) : element.className.split(REGEXP_SPACES).indexOf(value) > -1;
515
515
  }
516
516
 
517
517
  /**
@@ -560,8 +560,11 @@ function removeClass(element, value) {
560
560
  element.classList.remove(value);
561
561
  return;
562
562
  }
563
- if (element.className.indexOf(value) >= 0) {
564
- element.className = element.className.replace(value, '');
563
+ var className = element.className;
564
+ if (className && className.indexOf(value) >= 0) {
565
+ element.className = className.split(REGEXP_SPACES).filter(function (item) {
566
+ return item && item !== value;
567
+ }).join(' ');
565
568
  }
566
569
  }
567
570
 
@@ -1561,7 +1564,9 @@ var handlers = {
1561
1564
  clearTimeout(this.clickCanvasTimeout);
1562
1565
  clearTimeout(this.doubleClickImageTimeout);
1563
1566
  if (options.toggleOnDblclick && this.viewed && event.target === this.image) {
1564
- if (this.imageClicked) {
1567
+ if (this.pointerMoved) {
1568
+ this.imageClicked = false;
1569
+ } else if (this.imageClicked) {
1565
1570
  this.imageClicked = false;
1566
1571
 
1567
1572
  // This timeout will be cleared later when a native dblclick event is triggering
@@ -2700,7 +2705,8 @@ var methods = {
2700
2705
  }
2701
2706
  }
2702
2707
  if (!options.inline) {
2703
- removeListener(element, EVENT_CLICK, this.onStart);
2708
+ removeListener(element, EVENT_CLICK, this.onElementClick);
2709
+ removeListener(element, EVENT_KEY_DOWN, this.onElementKeyDown);
2704
2710
  }
2705
2711
  element[NAMESPACE] = undefined;
2706
2712
  return this;
@@ -2787,6 +2793,12 @@ var others = {
2787
2793
  var element = this.element,
2788
2794
  options = this.options,
2789
2795
  viewer = this.viewer;
2796
+ var activeElement = viewer.ownerDocument.activeElement;
2797
+
2798
+ // Avoid keeping focus inside the dialog before setting `aria-hidden`.
2799
+ if (activeElement && viewer.contains(activeElement) && isFunction(activeElement.blur)) {
2800
+ activeElement.blur();
2801
+ }
2790
2802
  if (options.focus) {
2791
2803
  this.clearEnforceFocus();
2792
2804
  }
@@ -3040,12 +3052,22 @@ var Viewer = /*#__PURE__*/function () {
3040
3052
  }
3041
3053
  });
3042
3054
  } else {
3043
- addListener(element, EVENT_CLICK, this.onStart = function (_ref) {
3055
+ addListener(element, EVENT_CLICK, this.onElementClick = function (_ref) {
3044
3056
  var target = _ref.target;
3045
3057
  if (target.localName === 'img' && (!isFunction(options.filter) || options.filter.call(_this, target))) {
3046
3058
  _this.view(_this.images.indexOf(target));
3047
3059
  }
3048
3060
  });
3061
+ addListener(element, EVENT_KEY_DOWN, this.onElementKeyDown = function (event) {
3062
+ var target = event.target,
3063
+ key = event.key;
3064
+ if (target.localName === 'img' && (key === 'Enter' || key === ' ')) {
3065
+ event.preventDefault();
3066
+ if (!isFunction(options.filter) || options.filter.call(_this, target)) {
3067
+ _this.view(_this.images.indexOf(target));
3068
+ }
3069
+ }
3070
+ });
3049
3071
  }
3050
3072
  }
3051
3073
  }, {
package/dist/viewer.js CHANGED
@@ -1,11 +1,11 @@
1
1
  /*!
2
- * Viewer.js v1.11.8
2
+ * Viewer.js v1.12.0
3
3
  * https://fengyuanchen.github.io/viewerjs
4
4
  *
5
5
  * Copyright 2015-present Chen Fengyuan
6
6
  * Released under the MIT license
7
7
  *
8
- * Date: 2026-07-18T13:41:00.752Z
8
+ * Date: 2026-08-22T13:00:39.652Z
9
9
  */
10
10
 
11
11
  (function (global, factory) {
@@ -361,7 +361,7 @@
361
361
  var DATA_ACTION = "".concat(NAMESPACE, "Action");
362
362
 
363
363
  // RegExps
364
- var REGEXP_SPACES = /\s\s*/;
364
+ var REGEXP_SPACES = /\s+/;
365
365
 
366
366
  // Misc
367
367
  var BUTTONS = ['zoom-in', 'zoom-out', 'one-to-one', 'reset', 'prev', 'play', 'next', 'rotate-left', 'rotate-right', 'flip-horizontal', 'flip-vertical'];
@@ -517,7 +517,7 @@
517
517
  if (!element || !value) {
518
518
  return false;
519
519
  }
520
- return element.classList ? element.classList.contains(value) : element.className.indexOf(value) > -1;
520
+ return element.classList ? element.classList.contains(value) : element.className.split(REGEXP_SPACES).indexOf(value) > -1;
521
521
  }
522
522
 
523
523
  /**
@@ -566,8 +566,11 @@
566
566
  element.classList.remove(value);
567
567
  return;
568
568
  }
569
- if (element.className.indexOf(value) >= 0) {
570
- element.className = element.className.replace(value, '');
569
+ var className = element.className;
570
+ if (className && className.indexOf(value) >= 0) {
571
+ element.className = className.split(REGEXP_SPACES).filter(function (item) {
572
+ return item && item !== value;
573
+ }).join(' ');
571
574
  }
572
575
  }
573
576
 
@@ -1567,7 +1570,9 @@
1567
1570
  clearTimeout(this.clickCanvasTimeout);
1568
1571
  clearTimeout(this.doubleClickImageTimeout);
1569
1572
  if (options.toggleOnDblclick && this.viewed && event.target === this.image) {
1570
- if (this.imageClicked) {
1573
+ if (this.pointerMoved) {
1574
+ this.imageClicked = false;
1575
+ } else if (this.imageClicked) {
1571
1576
  this.imageClicked = false;
1572
1577
 
1573
1578
  // This timeout will be cleared later when a native dblclick event is triggering
@@ -2706,7 +2711,8 @@
2706
2711
  }
2707
2712
  }
2708
2713
  if (!options.inline) {
2709
- removeListener(element, EVENT_CLICK, this.onStart);
2714
+ removeListener(element, EVENT_CLICK, this.onElementClick);
2715
+ removeListener(element, EVENT_KEY_DOWN, this.onElementKeyDown);
2710
2716
  }
2711
2717
  element[NAMESPACE] = undefined;
2712
2718
  return this;
@@ -2793,6 +2799,12 @@
2793
2799
  var element = this.element,
2794
2800
  options = this.options,
2795
2801
  viewer = this.viewer;
2802
+ var activeElement = viewer.ownerDocument.activeElement;
2803
+
2804
+ // Avoid keeping focus inside the dialog before setting `aria-hidden`.
2805
+ if (activeElement && viewer.contains(activeElement) && isFunction(activeElement.blur)) {
2806
+ activeElement.blur();
2807
+ }
2796
2808
  if (options.focus) {
2797
2809
  this.clearEnforceFocus();
2798
2810
  }
@@ -3046,12 +3058,22 @@
3046
3058
  }
3047
3059
  });
3048
3060
  } else {
3049
- addListener(element, EVENT_CLICK, this.onStart = function (_ref) {
3061
+ addListener(element, EVENT_CLICK, this.onElementClick = function (_ref) {
3050
3062
  var target = _ref.target;
3051
3063
  if (target.localName === 'img' && (!isFunction(options.filter) || options.filter.call(_this, target))) {
3052
3064
  _this.view(_this.images.indexOf(target));
3053
3065
  }
3054
3066
  });
3067
+ addListener(element, EVENT_KEY_DOWN, this.onElementKeyDown = function (event) {
3068
+ var target = event.target,
3069
+ key = event.key;
3070
+ if (target.localName === 'img' && (key === 'Enter' || key === ' ')) {
3071
+ event.preventDefault();
3072
+ if (!isFunction(options.filter) || options.filter.call(_this, target)) {
3073
+ _this.view(_this.images.indexOf(target));
3074
+ }
3075
+ }
3076
+ });
3055
3077
  }
3056
3078
  }
3057
3079
  }, {
@@ -1,9 +1,9 @@
1
1
  /*!
2
- * Viewer.js v1.11.7
2
+ * Viewer.js v1.12.0
3
3
  * https://fengyuanchen.github.io/viewerjs
4
4
  *
5
5
  * Copyright 2015-present Chen Fengyuan
6
6
  * Released under the MIT license
7
7
  *
8
- * Date: 2024-11-24T04:32:14.526Z
8
+ * Date: 2026-08-22T13:00:37.884Z
9
9
  */.viewer-close:before,.viewer-flip-horizontal:before,.viewer-flip-vertical:before,.viewer-fullscreen-exit:before,.viewer-fullscreen:before,.viewer-next:before,.viewer-one-to-one:before,.viewer-play:before,.viewer-prev:before,.viewer-reset:before,.viewer-rotate-left:before,.viewer-rotate-right:before,.viewer-zoom-in:before,.viewer-zoom-out:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 560 40'%3E%3Cpath fill='%23fff' d='M49.6 17.9h20.2v3.9H49.6zm123.1 2 10.9-11 2.7 2.8-8.2 8.2 8.2 8.2-2.7 2.7-10.9-10.9zm94 0-10.8-11-2.7 2.8 8.1 8.2-8.1 8.2 2.7 2.7 10.8-10.9zM212 9.3l20.1 10.6L212 30.5V9.3zm161.5 4.6-7.2 6 7.2 5.9v-4h12.4v4l7.3-5.9-7.3-6v4h-12.4v-4zm40.2 12.3 5.9 7.2 5.9-7.2h-4V13.6h4l-5.9-7.3-5.9 7.3h4v12.6h-4zm35.9-16.5h6.3v2h-4.3V16h-2V9.7Zm14 0h6.2V16h-2v-4.3h-4.2v-2Zm6.2 14V30h-6.2v-2h4.2v-4.3h2Zm-14 6.3h-6.2v-6.3h2v4.4h4.3v2Zm-438 .1v-8.3H9.6v-3.9h8.2V9.7h3.9v8.2h8.1v3.9h-8.1v8.3h-3.9zM93.6 9.7h-5.8v3.9h2V30h3.8V9.7zm16.1 0h-5.8v3.9h1.9V30h3.9V9.7zm-11.9 4.1h3.9v3.9h-3.9zm0 8.2h3.9v3.9h-3.9zm244.6-11.7 7.2 5.9-7.2 6v-3.6c-5.4-.4-7.8.8-8.7 2.8-.8 1.7-1.8 4.9 2.8 8.2-6.3-2-7.5-6.9-6-11.3 1.6-4.4 8-5 11.9-4.9v-3.1Zm147.2 13.4h6.3V30h-2v-4.3h-4.3v-2zm14 6.3v-6.3h6.2v2h-4.3V30h-1.9zm6.2-14h-6.2V9.7h1.9V14h4.3v2zm-13.9 0h-6.3v-2h4.3V9.7h2V16zm33.3 12.5 8.6-8.6-8.6-8.7 1.9-1.9 8.6 8.7 8.6-8.7 1.9 1.9-8.6 8.7 8.6 8.6-1.9 2-8.6-8.7-8.6 8.7-1.9-2zM297 10.3l-7.1 5.9 7.2 6v-3.6c5.3-.4 7.7.8 8.7 2.8.8 1.7 1.7 4.9-2.9 8.2 6.3-2 7.5-6.9 6-11.3-1.6-4.4-7.9-5-11.8-4.9v-3.1Zm-157.3-.6c2.3 0 4.4.7 6 2l2.5-3 1.9 9.2h-9.3l2.6-3.1a6.2 6.2 0 0 0-9.9 5.1c0 3.4 2.8 6.3 6.2 6.3 2.8 0 5.1-1.9 6-4.4h4c-1 4.7-5 8.3-10 8.3a10 10 0 0 1-10-10.2 10 10 0 0 1 10-10.2Z'/%3E%3C/svg%3E");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{-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;bottom:0;direction:ltr;font-size:0;left:0;line-height:0;overflow:hidden;position:absolute;right:0;top:0;-ms-touch-action:none;touch-action: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,.5);overflow:hidden}.viewer-list{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:.5;overflow:hidden;transition:opacity .15s;width:30px}.viewer-list>li:focus,.viewer-list>li:hover{opacity:.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;right:0;z-index:1}.viewer-player,.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,.5);border-radius:50%;cursor:pointer;float:left;height:24px;overflow:hidden;transition:background-color .15s;width:24px}.viewer-toolbar>ul>li:focus,.viewer-toolbar>ul>li:hover{background-color:rgba(0,0,0,.8)}.viewer-toolbar>ul>li:focus{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,.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.2;margin:5px 5%;max-width:90%;min-height:14px;opacity:.8;overflow:hidden;text-overflow:ellipsis;transition:opacity .15s;white-space:nowrap}.viewer-title:hover{opacity:1}.viewer-button{-webkit-app-region:no-drag;background-color:rgba(0,0,0,.5);border-radius:50%;cursor:pointer;height:80px;overflow:hidden;position:absolute;right:-40px;top:-40px;transition:background-color .15s;width:80px}.viewer-button:focus,.viewer-button:hover{background-color:rgba(0,0,0,.8)}.viewer-button:focus{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,.5)}.viewer-invisible{visibility:hidden}.viewer-move{cursor:move;cursor:grab}.viewer-fade{opacity:0}.viewer-in{opacity:1}.viewer-transition{transition:all .3s}@keyframes viewer-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.viewer-loading:after{animation:viewer-spinner 1s linear infinite;border:4px solid hsla(0,0%,100%,.1);border-left-color:hsla(0,0%,100%,.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}}
@@ -1,10 +1,10 @@
1
1
  /*!
2
- * Viewer.js v1.11.7
2
+ * Viewer.js v1.12.0
3
3
  * https://fengyuanchen.github.io/viewerjs
4
4
  *
5
5
  * Copyright 2015-present Chen Fengyuan
6
6
  * Released under the MIT license
7
7
  *
8
- * Date: 2024-11-24T04:32:19.116Z
8
+ * Date: 2026-08-22T13:00:39.652Z
9
9
  */
10
- ((t,e)=>{"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).Viewer=e()})(this,function(){function n(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,r(n.key),n)}}function s(e,t){var i,n=Object.keys(e);return Object.getOwnPropertySymbols&&(i=Object.getOwnPropertySymbols(e),t&&(i=i.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,i)),n}function P(n){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?s(Object(o),!0).forEach(function(t){var e,i;e=n,i=o[t=t],(t=r(t))in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(o)):s(Object(o)).forEach(function(t){Object.defineProperty(n,t,Object.getOwnPropertyDescriptor(o,t))})}return n}function r(t){t=((t,e)=>{if("object"!=typeof t||!t)return t;var i=t[Symbol.toPrimitive];if(void 0===i)return("string"===e?String:Number)(t);if("object"!=typeof(i=i.call(t,e||"default")))return i;throw new TypeError("@@toPrimitive must return a primitive value.")})(t,"string");return"symbol"==typeof t?t:t+""}function l(t){return(l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var W={backdrop:!0,button:!0,navbar:!0,title:!0,toolbar:!0,className:"",container:"body",filter:null,fullscreen:!0,inheritedAttributes:["crossOrigin","decoding","isMap","loading","referrerPolicy","sizes","srcset","useMap"],initialCoverage:.9,initialViewIndex:0,inline:!1,interval:5e3,keyboard:!0,focus:!0,loading:!0,loop:!0,minWidth:200,minHeight:100,movable:!0,rotatable:!0,scalable:!0,zoomable:!0,zoomOnTouch:!0,zoomOnWheel:!0,slideOnTouch:!0,toggleOnDblclick:!0,tooltip:!0,transition:!0,zIndex:2015,zIndexInline:0,zoomRatio:.1,minZoomRatio:.01,maxZoomRatio:100,url:"src",ready:null,show:null,shown:null,hide:null,hidden:null,view:null,viewed:null,move:null,moved:null,rotate:null,rotated:null,scale:null,scaled:null,zoom:null,zoomed:null,play:null,stop:null},t="undefined"!=typeof window&&void 0!==window.document,e=t?window:{},a=!(!t||!e.document.documentElement)&&"ontouchstart"in e.document.documentElement,i=t&&"PointerEvent"in e,g="viewer",h="move",j="switch",c="zoom",f="".concat(g,"-active"),H="".concat(g,"-close"),B="".concat(g,"-fade"),V="".concat(g,"-fixed"),U="".concat(g,"-fullscreen"),K="".concat(g,"-fullscreen-exit"),v="".concat(g,"-hide"),Z="".concat(g,"-hide-md-down"),$="".concat(g,"-hide-sm-down"),_="".concat(g,"-hide-xs-down"),u="".concat(g,"-in"),p="".concat(g,"-invisible"),b="".concat(g,"-loading"),G="".concat(g,"-move"),J="".concat(g,"-open"),d="".concat(g,"-show"),m="".concat(g,"-transition"),w="click",Q="dblclick",tt="dragstart",et="focusin",it="keydown",y="load",x="error",nt=i?"pointerdown":a?"touchstart":"mousedown",ot=i?"pointermove":a?"touchmove":"mousemove",st=i?"pointerup pointercancel":a?"touchend touchcancel":"mouseup",at="resize",k="transitionend",rt="wheel",z="viewed",lt="rotated",ht="".concat(g,"Action"),ct=/\s\s*/,ut=["zoom-in","zoom-out","one-to-one","reset","prev","play","next","rotate-left","rotate-right","flip-horizontal","flip-vertical"];function T(t){return"string"==typeof t}var dt=Number.isNaN||e.isNaN;function E(t){return"number"==typeof t&&!dt(t)}function D(t){return void 0===t}function o(t){return"object"===l(t)&&null!==t}var mt=Object.prototype.hasOwnProperty;function S(t){if(!o(t))return!1;try{var e=t.constructor,i=e.prototype;return e&&i&&mt.call(i,"isPrototypeOf")}catch(t){return!1}}function I(t){return"function"==typeof t}function A(e,i){if(e&&I(i))if(Array.isArray(e)||E(e.length))for(var t=e.length,n=0;n<t&&!1!==i.call(e,e[n],n,e);n+=1);else o(e)&&Object.keys(e).forEach(function(t){i.call(e,e[t],t,e)})}var O=Object.assign||function(i){for(var t=arguments.length,e=new Array(1<t?t-1:0),n=1;n<t;n++)e[n-1]=arguments[n];return o(i)&&0<e.length&&e.forEach(function(e){o(e)&&Object.keys(e).forEach(function(t){i[t]=e[t]})}),i},gt=/^(?:width|height|left|top|marginLeft|marginTop)$/;function C(t,e){var i=t.style;A(e,function(t,e){gt.test(e)&&E(t)&&(t+="px"),i[e]=t})}function L(t,e){return t&&e&&(t.classList?t.classList.contains(e):-1<t.className.indexOf(e))}function R(t,e){var i;t&&e&&(E(t.length)?A(t,function(t){R(t,e)}):t.classList?t.classList.add(e):(i=t.className.trim())?i.indexOf(e)<0&&(t.className="".concat(i," ").concat(e)):t.className=e)}function M(t,e){t&&e&&(E(t.length)?A(t,function(t){M(t,e)}):t.classList?t.classList.remove(e):0<=t.className.indexOf(e)&&(t.className=t.className.replace(e,"")))}function F(t,e,i){e&&(E(t.length)?A(t,function(t){F(t,e,i)}):(i?R:M)(t,e))}var ft=/([a-z\d])([A-Z])/g;function vt(t){return t.replace(ft,"$1-$2").toLowerCase()}function N(t,e){return o(t[e])?t[e]:t.dataset?t.dataset[e]:t.getAttribute("data-".concat(vt(e)))}function pt(t,e,i){o(i)?t[e]=i:t.dataset?t.dataset[e]=i:t.setAttribute("data-".concat(vt(e)),i)}wt=!1,t&&(bt=!1,i=function(){},t=Object.defineProperty({},"once",{get:function(){return wt=!0,bt},set:function(t){bt=t}}),e.addEventListener("test",i,t),e.removeEventListener("test",i,t));var bt,wt,yt=wt;function Y(i,t,n,e){var o=3<arguments.length&&void 0!==e?e:{},s=n;t.trim().split(ct).forEach(function(t){var e;yt||(e=i.listeners)&&e[t]&&e[t][n]&&(s=e[t][n],delete e[t][n],0===Object.keys(e[t]).length&&delete e[t],0===Object.keys(e).length)&&delete i.listeners,i.removeEventListener(t,s,o)})}function X(s,t,a,e){var r=3<arguments.length&&void 0!==e?e:{},l=a;t.trim().split(ct).forEach(function(n){var t,o;r.once&&!yt&&(t=s.listeners,l=function(){delete o[n][a],s.removeEventListener(n,l,r);for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];a.apply(s,e)},(o=void 0===t?{}:t)[n]||(o[n]={}),o[n][a]&&s.removeEventListener(n,o[n][a],r),o[n][a]=l,s.listeners=o),s.addEventListener(n,l,r)})}function q(t,e,i,n){var o;return I(Event)&&I(CustomEvent)?o=new CustomEvent(e,P({bubbles:!0,cancelable:!0,detail:i},n)):(o=document.createEvent("CustomEvent")).initCustomEvent(e,!0,!0,i),t.dispatchEvent(o)}function xt(t){var e=t.rotate,i=t.scaleX,n=t.scaleY,o=t.translateX,t=t.translateY,s=[],o=(E(o)&&0!==o&&s.push("translateX(".concat(o,"px)")),E(t)&&0!==t&&s.push("translateY(".concat(t,"px)")),E(e)&&0!==e&&s.push("rotate(".concat(e,"deg)")),E(i)&&1!==i&&s.push("scaleX(".concat(i,")")),E(n)&&1!==n&&s.push("scaleY(".concat(n,")")),s.length?s.join(" "):"none");return{WebkitTransform:o,msTransform:o,transform:o}}var kt=e.navigator&&/Version\/\d+(\.\d+)+?\s+Safari/i.test(e.navigator.userAgent);function zt(i,t,e){var n,o=document.createElement("img");return i.naturalWidth&&!kt?e(i.naturalWidth,i.naturalHeight):(n=document.body||document.documentElement,o.onload=function(){e(o.width,o.height),kt||n.removeChild(o)},A(t.inheritedAttributes,function(t){var e=i.getAttribute(t);null!==e&&o.setAttribute(t,e)}),o.src=i.src,kt||(o.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.appendChild(o))),o}function Tt(t){switch(t){case 2:return _;case 3:return $;case 4:return Z;default:return""}}function Et(t,e){var i=t.pageX,t=t.pageY,n={endX:i,endY:t};return e?n:P({timeStamp:Date.now(),startX:i,startY:t},n)}var Dt,i={render:function(){this.initContainer(),this.initViewer(),this.initList(),this.renderViewer()},initBody:function(){var t=this.element.ownerDocument,e=t.body||t.documentElement;this.body=e,this.scrollbarWidth=window.innerWidth-t.documentElement.clientWidth,this.initialBodyPaddingRight=e.style.paddingRight,this.initialBodyComputedPaddingRight=window.getComputedStyle(e).paddingRight},initContainer:function(){this.containerData={width:window.innerWidth,height:window.innerHeight}},initViewer:function(){var t,e=this.options,i=this.parent;e.inline&&(t={width:Math.max(i.offsetWidth,e.minWidth),height:Math.max(i.offsetHeight,e.minHeight)},this.parentData=t),!this.fulled&&t||(t=this.containerData),this.viewerData=O({},t)},renderViewer:function(){this.options.inline&&!this.fulled&&C(this.viewer,this.viewerData)},initList:function(){var r=this,t=this.element,l=this.options,h=this.list,c=[];h.innerHTML="",A(this.images,function(i,t){var e,n,o=i.src,s=i.alt||(T(s=o)?decodeURIComponent(s.replace(/^.*\//,"").replace(/[?&#].*$/,"")):""),a=r.getImageURL(i);(o||a)&&(e=document.createElement("li"),n=document.createElement("img"),A(l.inheritedAttributes,function(t){var e=i.getAttribute(t);null!==e&&n.setAttribute(t,e)}),l.navbar&&(n.src=o||a),n.alt=s,n.setAttribute("data-original-url",a||o),e.setAttribute("data-index",t),e.setAttribute("data-viewer-action","view"),e.setAttribute("role","button"),l.keyboard&&e.setAttribute("tabindex",0),e.appendChild(n),h.appendChild(e),c.push(e))}),A(this.items=c,function(e){var t,i,n=e.firstElementChild;pt(n,"filled",!0),l.loading&&R(e,b),X(n,y,t=function(t){Y(n,x,i),l.loading&&M(e,b),r.loadImage(t)},{once:!0}),X(n,x,i=function(){Y(n,y,t),l.loading&&M(e,b)},{once:!0})}),l.transition&&X(t,z,function(){R(h,m)},{once:!0})},renderList:function(){var t,e,i=this.index,n=this.items[i];n&&(t=n.nextElementSibling,t=parseInt(window.getComputedStyle(t||n).marginLeft,10),n=n.offsetWidth,C(this.list,O({width:(e=n+t)*this.length-t},xt({translateX:(this.viewerData.width-n)/2-e*i}))))},resetList:function(){var t=this.list;t.innerHTML="",M(t,m),C(t,xt({translateX:0}))},initImage:function(r){var t,l=this,h=this.options,e=this.image,i=this.viewerData,n=this.footer.offsetHeight,c=i.width,u=Math.max(i.height-n,n),d=this.imageData||{};this.imageInitializing={abort:function(){t.onload=null}},t=zt(e,h,function(t,e){var i=t/e,n=Math.max(0,Math.min(1,h.initialCoverage)),o=c,s=u,n=(l.imageInitializing=!1,c<u*i?s=c/i:o=u*i,n=E(n)?n:.9,o=Math.min(o*n,t),s=Math.min(s*n,e),(c-o)/2),a=(u-s)/2,n={left:n,top:a,x:n,y:a,width:o,height:s,oldRatio:1,ratio:o/t,aspectRatio:i,naturalWidth:t,naturalHeight:e},a=O({},n);h.rotatable&&(n.rotate=d.rotate||0,a.rotate=0),h.scalable&&(n.scaleX=d.scaleX||1,n.scaleY=d.scaleY||1,a.scaleX=1,a.scaleY=1),l.imageData=n,l.initialImageData=a,r&&r()})},renderImage:function(t){var e,i=this,n=this.image,o=this.imageData;C(n,O({width:o.width,height:o.height,marginLeft:o.x,marginTop:o.y},xt(o))),t&&((this.viewing||this.moving||this.rotating||this.scaling||this.zooming)&&this.options.transition&&L(n,m)?(e=function(){i.imageRendering=!1,t()},this.imageRendering={abort:function(){Y(n,k,e)}},X(n,k,e,{once:!0})):t())},resetImage:function(){var t=this.image;t&&(this.viewing&&this.viewing.abort(),t.parentNode.removeChild(t),this.image=null,this.title.innerHTML="")}},t={bind:function(){var t=this.options,e=this.viewer,i=this.canvas,n=this.element.ownerDocument;X(e,w,this.onClick=this.click.bind(this)),X(e,tt,this.onDragStart=this.dragstart.bind(this)),X(i,nt,this.onPointerDown=this.pointerdown.bind(this)),X(n,ot,this.onPointerMove=this.pointermove.bind(this)),X(n,st,this.onPointerUp=this.pointerup.bind(this)),X(n,it,this.onKeyDown=this.keydown.bind(this)),X(window,at,this.onResize=this.resize.bind(this)),t.zoomable&&t.zoomOnWheel&&X(e,rt,this.onWheel=this.wheel.bind(this),{passive:!1,capture:!0}),t.toggleOnDblclick&&X(i,Q,this.onDblclick=this.dblclick.bind(this))},unbind:function(){var t=this.options,e=this.viewer,i=this.canvas,n=this.element.ownerDocument;Y(e,w,this.onClick),Y(e,tt,this.onDragStart),Y(i,nt,this.onPointerDown),Y(n,ot,this.onPointerMove),Y(n,st,this.onPointerUp),Y(n,it,this.onKeyDown),Y(window,at,this.onResize),t.zoomable&&t.zoomOnWheel&&Y(e,rt,this.onWheel,{passive:!1,capture:!0}),t.toggleOnDblclick&&Y(i,Q,this.onDblclick)}},St={click:function(t){var e=this.options,i=this.imageData,n=t.target,o=N(n,ht);switch(o||"img"!==n.localName||"li"!==n.parentElement.localName||(o=N(n=n.parentElement,ht)),a&&t.isTrusted&&n===this.canvas&&clearTimeout(this.clickCanvasTimeout),o){case"mix":this.played?this.stop():e.inline?this.fulled?this.exit():this.full():this.hide();break;case"hide":this.pointerMoved||this.hide();break;case"view":this.view(N(n,"index"));break;case"zoom-in":this.zoom(.1,!0);break;case"zoom-out":this.zoom(-.1,!0);break;case"one-to-one":this.toggle();break;case"reset":this.reset();break;case"prev":this.prev(e.loop);break;case"play":this.play(e.fullscreen);break;case"next":this.next(e.loop);break;case"rotate-left":this.rotate(-90);break;case"rotate-right":this.rotate(90);break;case"flip-horizontal":this.scaleX(-i.scaleX||-1);break;case"flip-vertical":this.scaleY(-i.scaleY||-1);break;default:this.played&&this.stop()}},dblclick:function(t){t.preventDefault(),this.viewed&&t.target===this.image&&(a&&t.isTrusted&&clearTimeout(this.doubleClickImageTimeout),this.toggle(t.isTrusted?t:t.detail&&t.detail.originalEvent))},load:function(){var t=this,e=(this.timeout&&(clearTimeout(this.timeout),this.timeout=!1),this.element),i=this.options,n=this.image,o=this.index,s=this.viewerData;M(n,p),i.loading&&M(this.canvas,b),n.style.cssText="height:0;"+"margin-left:".concat(s.width/2,"px;")+"margin-top:".concat(s.height/2,"px;")+"max-width:none!important;position:relative;width:0;",this.initImage(function(){F(n,G,i.movable),F(n,m,i.transition),t.renderImage(function(){t.viewed=!0,t.viewing=!1,I(i.viewed)&&X(e,z,i.viewed,{once:!0}),q(e,z,{originalImage:t.images[o],index:o,image:n},{cancelable:!1})})})},loadImage:function(t){var n=t.target,t=n.parentNode,o=t.offsetWidth||30,s=t.offsetHeight||50,a=!!N(n,"filled");zt(n,this.options,function(t,e){var t=t/e,e=o,i=s;o<s*t?a?e=s*t:i=o/t:a?i=o/t:e=s*t,C(n,O({width:e,height:i},xt({translateX:(o-e)/2,translateY:(s-i)/2})))})},keydown:function(t){var e=this.options;if(e.keyboard){var i=t.keyCode||t.which||t.charCode;if(13===i&&this.viewer.contains(t.target)&&this.click(t),this.fulled)switch(i){case 27:this.played?this.stop():e.inline?this.fulled&&this.exit():this.hide();break;case 32:this.played&&this.stop();break;case 37:this.played&&this.playing?this.playing.prev():this.prev(e.loop);break;case 38:t.preventDefault(),this.zoom(e.zoomRatio,!0);break;case 39:this.played&&this.playing?this.playing.next():this.next(e.loop);break;case 40:t.preventDefault(),this.zoom(-e.zoomRatio,!0);break;case 48:case 49:t.ctrlKey&&(t.preventDefault(),this.toggle())}}},dragstart:function(t){"img"===t.target.localName&&t.preventDefault()},pointerdown:function(t){var e=this.options,i=this.pointers,n=t.buttons,o=t.button;this.pointerMoved=!1,!this.viewed||this.showing||this.viewing||this.hiding||("mousedown"===t.type||"pointerdown"===t.type&&"mouse"===t.pointerType)&&(E(n)&&1!==n||E(o)&&0!==o||t.ctrlKey)||(t.preventDefault(),t.changedTouches?A(t.changedTouches,function(t){i[t.identifier]=Et(t)}):i[t.pointerId||0]=Et(t),n=!!e.movable&&h,e.zoomOnTouch&&e.zoomable&&1<Object.keys(i).length?n=c:e.slideOnTouch&&("touch"===t.pointerType||"touchstart"===t.type)&&this.isSwitchable()&&(n=j),!e.transition||n!==h&&n!==c||M(this.image,m),this.action=n)},pointermove:function(t){var e=this.pointers,i=this.action;this.viewed&&i&&(t.preventDefault(),t.changedTouches?A(t.changedTouches,function(t){O(e[t.identifier]||{},Et(t,!0))}):O(e[t.pointerId||0]||{},Et(t,!0)),this.change(t))},pointerup:function(t){var e,i=this,n=this.options,o=this.action,s=this.pointers;t.changedTouches?A(t.changedTouches,function(t){e=s[t.identifier],delete s[t.identifier]}):(e=s[t.pointerId||0],delete s[t.pointerId||0]),o&&(t.preventDefault(),!n.transition||o!==h&&o!==c||R(this.image,m),this.action=!1,a)&&o!==c&&e&&Date.now()-e.timeStamp<500&&(clearTimeout(this.clickCanvasTimeout),clearTimeout(this.doubleClickImageTimeout),n.toggleOnDblclick&&this.viewed&&t.target===this.image?this.imageClicked?(this.imageClicked=!1,this.doubleClickImageTimeout=setTimeout(function(){q(i.image,Q,{originalEvent:t})},50)):(this.imageClicked=!0,this.doubleClickImageTimeout=setTimeout(function(){i.imageClicked=!1},500)):(this.imageClicked=!1,n.backdrop&&"static"!==n.backdrop&&t.target===this.canvas&&(this.clickCanvasTimeout=setTimeout(function(){q(i.canvas,w,{originalEvent:t})},50))))},resize:function(){var e=this;this.isShown&&!this.hiding&&(this.fulled&&(this.close(),this.initBody(),this.open()),this.initContainer(),this.initViewer(),this.renderViewer(),this.renderList(),this.viewed&&this.initImage(function(){e.renderImage()}),this.played)&&(this.options.fullscreen&&this.fulled&&!(document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement)?this.stop():A(this.player.getElementsByTagName("img"),function(t){X(t,y,e.loadImage.bind(e),{once:!0}),q(t,y)}))},wheel:function(t){var e,i,n=this;this.viewed&&(t.preventDefault(),this.wheeling||(this.wheeling=!0,setTimeout(function(){n.wheeling=!1},50),e=Number(this.options.zoomRatio)||.1,i=1,t.deltaY?i=0<t.deltaY?1:-1:t.wheelDelta?i=-t.wheelDelta/120:t.detail&&(i=0<t.detail?1:-1),this.zoom(-i*e,!0,null,t)))}},It={show:function(){var t,e,i=0<arguments.length&&void 0!==arguments[0]&&arguments[0],n=this.element,o=this.options;return o.inline||this.showing||this.isShown||this.showing||(this.ready?(I(o.show)&&X(n,"show",o.show,{once:!0}),!1!==q(n,"show")&&this.ready&&(this.hiding&&this.transitioning.abort(),this.showing=!0,this.open(),M(t=this.viewer,v),t.setAttribute("role","dialog"),t.setAttribute("aria-labelledby",this.title.id),t.setAttribute("aria-modal",!0),t.removeAttribute("aria-hidden"),o.transition&&!i?(e=this.shown.bind(this),this.transitioning={abort:function(){Y(t,k,e),M(t,u)}},R(t,m),t.initialOffsetWidth=t.offsetWidth,X(t,k,e,{once:!0}),R(t,u)):(R(t,u),this.shown()))):(this.build(),this.ready&&this.show(i))),this},hide:function(){var e,t,i,n,o,s=this,a=0<arguments.length&&void 0!==arguments[0]&&arguments[0],r=this.element,l=this.options;return l.inline||this.hiding||!this.isShown&&!this.showing||(I(l.hide)&&X(r,"hide",l.hide,{once:!0}),!1!==q(r,"hide")&&(this.showing&&this.transitioning.abort(),this.hiding=!0,this.played?this.stop():this.viewing&&this.viewing.abort(),e=this.viewer,t=this.image,i=function(){M(e,u),s.hidden()},l.transition&&!a?(n=function(t){t&&t.target===e&&(Y(e,k,n),s.hidden())},o=function(){L(e,m)?(X(e,k,n),M(e,u)):i()},this.transitioning={abort:function(){s.viewed&&L(t,m)?Y(t,k,o):L(e,m)&&Y(e,k,n)}},this.viewed&&L(t,m)?(X(t,k,o,{once:!0}),this.zoomTo(0,!1,null,null,!0)):o()):i())),this},view:function(){var i=this,t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:this.options.initialViewIndex,t=Number(t)||0;if(!(this.hiding||this.played||t<0||t>=this.length||this.viewed&&t===this.index)){if(!this.isShown)return this.index=t,this.show();this.viewing&&this.viewing.abort();var e,n,o,s=this.element,a=this.options,r=this.title,l=this.canvas,h=this.items[t],c=h.querySelector("img"),u=N(c,"originalUrl"),d=c.getAttribute("alt"),m=document.createElement("img");A(a.inheritedAttributes,function(t){var e=c.getAttribute(t);null!==e&&m.setAttribute(t,e)}),m.src=u,m.alt=d,I(a.view)&&X(s,"view",a.view,{once:!0}),!1===q(s,"view",{originalImage:this.images[t],index:t,image:m})||!this.isShown||this.hiding||this.played||((u=this.items[this.index])&&(M(u,f),u.removeAttribute("aria-selected")),R(h,f),h.setAttribute("aria-selected",!0),a.focus&&h.focus(),this.image=m,this.viewed=!1,this.index=t,this.imageData={},R(m,p),a.loading&&R(l,b),l.innerHTML="",l.appendChild(m),this.renderList(),r.innerHTML="",X(s,z,e=function(){var t=i.imageData,e=Array.isArray(a.title)?a.title[1]:a.title;r.innerHTML=T(e=I(e)?e.call(i,m,t):"".concat(d," (").concat(t.naturalWidth," × ").concat(t.naturalHeight,")"))?e.replace(/&(?!amp;|quot;|#39;|lt;|gt;)/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&#39;").replace(/</g,"&lt;").replace(/>/g,"&gt;"):e},{once:!0}),this.viewing={abort:function(){Y(s,z,e),m.complete?i.imageRendering?i.imageRendering.abort():i.imageInitializing&&i.imageInitializing.abort():(m.src="",Y(m,y,n),i.timeout&&clearTimeout(i.timeout))}},m.complete?this.load():(X(m,y,n=function(){Y(m,x,o),i.load()},{once:!0}),X(m,x,o=function(){Y(m,y,n),i.timeout&&(clearTimeout(i.timeout),i.timeout=!1),M(m,p),a.loading&&M(i.canvas,b)},{once:!0}),this.timeout&&clearTimeout(this.timeout),this.timeout=setTimeout(function(){M(m,p),i.timeout=!1},1e3)))}return this},prev:function(){var t=this.index-1;return t<0&&(t=0<arguments.length&&void 0!==arguments[0]&&arguments[0]?this.length-1:0),this.view(t),this},next:function(){var t=this.length-1,e=this.index+1;return this.view(e=t<e?0<arguments.length&&void 0!==arguments[0]&&arguments[0]?0:t:e),this},move:function(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:t,i=this.imageData;return this.moveTo(D(t)?t:i.x+Number(t),D(e)?e:i.y+Number(e)),this},moveTo:function(t){var e=this,i=1<arguments.length&&void 0!==arguments[1]?arguments[1]:t,n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null,o=this.element,s=this.options,a=this.imageData;if(t=Number(t),i=Number(i),this.viewed&&!this.played&&s.movable){var r=a.x,l=a.y,h=!1;if(E(t)?h=!0:t=r,E(i)?h=!0:i=l,h){if(I(s.move)&&X(o,"move",s.move,{once:!0}),!1===q(o,"move",{x:t,y:i,oldX:r,oldY:l,originalEvent:n}))return this;a.x=t,a.y=i,a.left=t,a.top=i,this.moving=!0,this.renderImage(function(){e.moving=!1,I(s.moved)&&X(o,"moved",s.moved,{once:!0}),q(o,"moved",{x:t,y:i,oldX:r,oldY:l,originalEvent:n},{cancelable:!1})})}}return this},rotate:function(t){return this.rotateTo((this.imageData.rotate||0)+Number(t)),this},rotateTo:function(t){var e=this,i=this.element,n=this.options,o=this.imageData;if(E(t=Number(t))&&this.viewed&&!this.played&&n.rotatable){var s=o.rotate;if(I(n.rotate)&&X(i,"rotate",n.rotate,{once:!0}),!1===q(i,"rotate",{degree:t,oldDegree:s}))return this;o.rotate=t,this.rotating=!0,this.renderImage(function(){e.rotating=!1,I(n.rotated)&&X(i,lt,n.rotated,{once:!0}),q(i,lt,{degree:t,oldDegree:s},{cancelable:!1})})}return this},scaleX:function(t){return this.scale(t,this.imageData.scaleY),this},scaleY:function(t){return this.scale(this.imageData.scaleX,t),this},scale:function(t){var e=this,i=1<arguments.length&&void 0!==arguments[1]?arguments[1]:t,n=this.element,o=this.options,s=this.imageData;if(t=Number(t),i=Number(i),this.viewed&&!this.played&&o.scalable){var a=s.scaleX,r=s.scaleY,l=!1;if(E(t)?l=!0:t=a,E(i)?l=!0:i=r,l){if(I(o.scale)&&X(n,"scale",o.scale,{once:!0}),!1===q(n,"scale",{scaleX:t,scaleY:i,oldScaleX:a,oldScaleY:r}))return this;s.scaleX=t,s.scaleY=i,this.scaling=!0,this.renderImage(function(){e.scaling=!1,I(o.scaled)&&X(n,"scaled",o.scaled,{once:!0}),q(n,"scaled",{scaleX:t,scaleY:i,oldScaleX:a,oldScaleY:r},{cancelable:!1})})}}return this},zoom:function(t){var e=1<arguments.length&&void 0!==arguments[1]&&arguments[1],i=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null,n=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null,o=this.imageData;return t=Number(t),this.zoomTo(o.width*(t=t<0?1/(1-t):1+t)/o.naturalWidth,e,i,n),this},zoomTo:function(t){var i,n,o,e=this,s=1<arguments.length&&void 0!==arguments[1]&&arguments[1],a=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null,r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null,l=4<arguments.length&&void 0!==arguments[4]&&arguments[4],h=this.element,c=this.options,u=this.pointers,d=this.imageData,m=d.x,g=d.y,f=d.width,v=d.height,p=d.naturalWidth,b=d.naturalHeight;if(E(t=Math.max(0,t))&&this.viewed&&!this.played&&(l||c.zoomable)){if(l||(l=Math.max(.01,c.minZoomRatio),y=Math.min(100,c.maxZoomRatio),t=Math.min(Math.max(t,l),y)),r)switch(r.type){case"wheel":.055<=c.zoomRatio&&.95<t&&t<1.05&&(t=1);break;case"pointermove":case"touchmove":case"mousemove":.99<t&&t<1.01&&(t=1)}var w,l=p*t,y=b*t,p=l-f,b=y-v,x=d.ratio;if(I(c.zoom)&&X(h,"zoom",c.zoom,{once:!0}),!1===q(h,"zoom",{ratio:t,oldRatio:x,originalEvent:r}))return this;this.zooming=!0,r?(w={left:(w=(w=this.viewer).getBoundingClientRect()).left+(window.pageXOffset-document.documentElement.clientLeft),top:w.top+(window.pageYOffset-document.documentElement.clientTop)},u=u&&0<Object.keys(u).length?(o=n=i=0,A(u,function(t){var e=t.startX;i+=e,n+=t.startY,o+=1}),{pageX:i/=o,pageY:n/=o}):{pageX:r.pageX,pageY:r.pageY},d.x-=(u.pageX-w.left-m)/f*p,d.y-=(u.pageY-w.top-g)/v*b):S(a)&&E(a.x)&&E(a.y)?(d.x-=p*((a.x-m)/f),d.y-=b*((a.y-g)/v)):(d.x-=p/2,d.y-=b/2),d.left=d.x,d.top=d.y,d.width=l,d.height=y,d.oldRatio=x,d.ratio=t,this.renderImage(function(){e.zooming=!1,I(c.zoomed)&&X(h,"zoomed",c.zoomed,{once:!0}),q(h,"zoomed",{ratio:t,oldRatio:x,originalEvent:r},{cancelable:!1})}),s&&this.tooltip()}return this},play:function(){var t,o,s,a,r,l,h,e,i,n=this,c=0<arguments.length&&void 0!==arguments[0]&&arguments[0];return this.isShown&&!this.played&&(t=this.element,I((o=this.options).play)&&X(t,"play",o.play,{once:!0}),!1!==q(t,"play")&&(s=this.player,a=this.loadImage.bind(this),r=[],h=l=0,this.played=!0,this.onLoadWhenPlay=a,c&&this.requestFullscreen(c),R(s,d),A(this.items,function(t,e){var i=t.querySelector("img"),n=document.createElement("img");n.src=N(i,"originalUrl"),n.alt=i.getAttribute("alt"),n.referrerPolicy=i.referrerPolicy,l+=1,R(n,B),F(n,m,o.transition),L(t,f)&&(R(n,u),h=e),r.push(n),X(n,y,a,{once:!0}),s.appendChild(n)}),E(o.interval))&&0<o.interval&&(e=function(){clearTimeout(n.playing.timeout),M(r[h],u),R(r[h=0<=--h?h:l-1],u),n.playing.timeout=setTimeout(e,o.interval)},i=function(){clearTimeout(n.playing.timeout),M(r[h],u),R(r[h=(h+=1)<l?h:0],u),n.playing.timeout=setTimeout(i,o.interval)},1<l))&&(this.playing={prev:e,next:i,timeout:setTimeout(i,o.interval)}),this},stop:function(){var t,e,i=this;return this.played&&(t=this.element,I((e=this.options).stop)&&X(t,"stop",e.stop,{once:!0}),!1!==q(t,"stop"))&&(e=this.player,clearTimeout(this.playing.timeout),this.playing=!1,this.played=!1,A(e.getElementsByTagName("img"),function(t){Y(t,y,i.onLoadWhenPlay)}),M(e,d),e.innerHTML="",this.exitFullscreen()),this},full:function(){var t=this,e=this.options,i=this.viewer,n=this.image,o=this.list;return this.isShown&&!this.played&&!this.fulled&&e.inline&&(this.fulled=!0,this.open(),R(this.button,K),e.transition&&(M(o,m),this.viewed)&&M(n,m),R(i,V),i.setAttribute("role","dialog"),i.setAttribute("aria-labelledby",this.title.id),i.setAttribute("aria-modal",!0),i.removeAttribute("style"),C(i,{zIndex:e.zIndex}),e.focus&&this.enforceFocus(),this.initContainer(),this.viewerData=O({},this.containerData),this.renderList(),this.viewed)&&this.initImage(function(){t.renderImage(function(){e.transition&&setTimeout(function(){R(n,m),R(o,m)},0)})}),this},exit:function(){var t=this,e=this.options,i=this.viewer,n=this.image,o=this.list;return this.isShown&&!this.played&&this.fulled&&e.inline&&(this.fulled=!1,this.close(),M(this.button,K),e.transition&&(M(o,m),this.viewed)&&M(n,m),e.focus&&this.clearEnforceFocus(),i.removeAttribute("role"),i.removeAttribute("aria-labelledby"),i.removeAttribute("aria-modal"),M(i,V),C(i,{zIndex:e.zIndexInline}),this.viewerData=O({},this.parentData),this.renderViewer(),this.renderList(),this.viewed)&&this.initImage(function(){t.renderImage(function(){e.transition&&setTimeout(function(){R(n,m),R(o,m)},0)})}),this},tooltip:function(){var t=this,e=this.options,i=this.tooltipBox,n=this.imageData;return this.viewed&&!this.played&&e.tooltip&&(i.textContent="".concat(Math.round(100*n.ratio),"%"),this.tooltipping?clearTimeout(this.tooltipping):e.transition?(this.fading&&q(i,k),R(i,d),R(i,B),R(i,m),i.removeAttribute("aria-hidden"),i.initialOffsetWidth=i.offsetWidth,R(i,u)):(R(i,d),i.removeAttribute("aria-hidden")),this.tooltipping=setTimeout(function(){e.transition?(X(i,k,function(){M(i,d),M(i,B),M(i,m),i.setAttribute("aria-hidden",!0),t.fading=!1},{once:!0}),M(i,u),t.fading=!0):(M(i,d),i.setAttribute("aria-hidden",!0)),t.tooltipping=!1},1e3)),this},toggle:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:null;return 1===this.imageData.ratio?this.zoomTo(this.imageData.oldRatio,!0,null,t):this.zoomTo(1,!0,null,t),this},reset:function(){return this.viewed&&!this.played&&(this.imageData=O({},this.initialImageData),this.renderImage()),this},update:function(){var n,o,e=this,t=this.element,i=this.options,s=this.isImg;return s&&!t.parentNode?this.destroy():(n=[],A(s?[t]:t.querySelectorAll("img"),function(t){I(i.filter)?i.filter.call(e,t)&&n.push(t):e.getImageURL(t)&&n.push(t)}),n.length&&(this.images=n,this.length=n.length,this.ready?(o=[],A(this.items,function(t,e){var t=t.querySelector("img"),i=n[e];i&&t&&i.src===t.src&&i.alt===t.alt||o.push(e)}),C(this.list,{width:"auto"}),this.initList(),this.isShown&&(this.length?this.viewed&&(0<=(s=o.indexOf(this.index))?(this.viewed=!1,this.view(Math.max(Math.min(this.index-s,this.length-1),0))):(R(t=this.items[this.index],f),t.setAttribute("aria-selected",!0))):(this.image=null,this.viewed=!1,this.index=0,this.imageData={},this.canvas.innerHTML="",this.title.innerHTML=""))):this.build()),this)},destroy:function(){var t=this.element,e=this.options;return t[g]&&(this.destroyed=!0,this.ready?(this.played&&this.stop(),e.inline?(this.fulled&&this.exit(),this.unbind()):this.isShown?(this.viewing&&(this.imageRendering?this.imageRendering.abort():this.imageInitializing&&this.imageInitializing.abort()),this.hiding&&this.transitioning.abort(),this.hidden()):this.showing&&(this.transitioning.abort(),this.hidden()),this.ready=!1,this.viewer.parentNode.removeChild(this.viewer)):e.inline&&(this.delaying?this.delaying.abort():this.initializing&&this.initializing.abort()),e.inline||Y(t,w,this.onStart),t[g]=void 0),this}},At={getImageURL:function(t){var e=this.options.url;return e=T(e)?t.getAttribute(e):I(e)?e.call(this,t):""},enforceFocus:function(){var n=this;this.clearEnforceFocus(),X(document,et,this.onFocusin=function(t){var e=n.viewer,i=t.target;if(i!==document&&i!==e&&!e.contains(i)){for(;i;){if(null!==i.getAttribute("tabindex")||"true"===i.getAttribute("aria-modal"))return;i=i.parentElement}e.focus()}})},clearEnforceFocus:function(){this.onFocusin&&(Y(document,et,this.onFocusin),this.onFocusin=null)},open:function(){var t=this.body;R(t,J),0<this.scrollbarWidth&&(t.style.paddingRight="".concat(this.scrollbarWidth+(parseFloat(this.initialBodyComputedPaddingRight)||0),"px"))},close:function(){var t=this.body;M(t,J),0<this.scrollbarWidth&&(t.style.paddingRight=this.initialBodyPaddingRight)},shown:function(){var t=this.element,e=this.options,i=this.viewer;this.fulled=!0,this.isShown=!0,this.render(),this.bind(),this.showing=!1,e.focus&&(i.focus(),this.enforceFocus()),I(e.shown)&&X(t,"shown",e.shown,{once:!0}),!1!==q(t,"shown")&&this.ready&&this.isShown&&!this.hiding&&this.view(this.index)},hidden:function(){var t=this.element,e=this.options,i=this.viewer;e.fucus&&this.clearEnforceFocus(),this.close(),this.unbind(),R(i,v),i.removeAttribute("role"),i.removeAttribute("aria-labelledby"),i.removeAttribute("aria-modal"),i.setAttribute("aria-hidden",!0),this.resetList(),this.resetImage(),this.fulled=!1,this.viewed=!1,this.isShown=!1,this.hiding=!1,this.destroyed||(I(e.hidden)&&X(t,"hidden",e.hidden,{once:!0}),q(t,"hidden",null,{cancelable:!1}))},requestFullscreen:function(t){var e=this.element.ownerDocument;this.fulled&&!(e.fullscreenElement||e.webkitFullscreenElement||e.mozFullScreenElement||e.msFullscreenElement)&&((e=e.documentElement).requestFullscreen?S(t)?e.requestFullscreen(t):e.requestFullscreen():e.webkitRequestFullscreen?e.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT):e.mozRequestFullScreen?e.mozRequestFullScreen():e.msRequestFullscreen&&e.msRequestFullscreen())},exitFullscreen:function(){var t=this.element.ownerDocument;this.fulled&&(t.fullscreenElement||t.webkitFullscreenElement||t.mozFullScreenElement||t.msFullscreenElement)&&(t.exitFullscreen?t.exitFullscreen():t.webkitExitFullscreen?t.webkitExitFullscreen():t.mozCancelFullScreen?t.mozCancelFullScreen():t.msExitFullscreen&&t.msExitFullscreen())},change:function(t){var e=this.options,i=this.pointers,n=i[Object.keys(i)[0]];if(n){var s,a,o=n.endX-n.startX,r=n.endY-n.startY;switch(this.action){case h:0==o&&0==r||(this.pointerMoved=!0,this.move(o,r,t));break;case c:this.zoom((s=P({},l=i),a=[],A(l,function(o,t){delete s[t],A(s,function(t){var e=Math.abs(o.startX-t.startX),i=Math.abs(o.startY-t.startY),n=Math.abs(o.endX-t.endX),t=Math.abs(o.endY-t.endY),e=Math.sqrt(e*e+i*i),i=Math.sqrt(n*n+t*t);a.push((i-e)/e)})}),a.sort(function(t,e){return Math.abs(t)<Math.abs(e)}),a[0]),!1,null,t);break;case j:this.action="switched";var l=Math.abs(o);1<l&&l>Math.abs(r)&&(this.pointers={},1<o?this.prev(e.loop):o<-1&&this.next(e.loop))}A(i,function(t){t.startX=t.endX,t.startY=t.endY})}},isSwitchable:function(){var t=this.imageData,e=this.viewerData;return 1<this.length&&0<=t.x&&0<=t.y&&t.width<=e.width&&t.height<=e.height}},Ot=e.Viewer,Ct=(Dt=-1,function(){return Dt+=1}),e=(()=>{function o(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},i=this,n=o;if(!(i instanceof n))throw new TypeError("Cannot call a class as a function");if(!t||1!==t.nodeType)throw new Error("The first argument is required and must be an element.");this.element=t,this.options=O({},W,S(e)&&e),this.action=!1,this.fading=!1,this.fulled=!1,this.hiding=!1,this.imageClicked=!1,this.imageData={},this.index=this.options.initialViewIndex,this.isImg=!1,this.isShown=!1,this.length=0,this.moving=!1,this.played=!1,this.playing=!1,this.pointers={},this.ready=!1,this.rotating=!1,this.scaling=!1,this.showing=!1,this.timeout=!1,this.tooltipping=!1,this.viewed=!1,this.viewing=!1,this.wheeling=!1,this.zooming=!1,this.pointerMoved=!1,this.id=Ct(),this.init()}return t=o,i=[{key:"noConflict",value:function(){return window.Viewer=Ot,o}},{key:"setDefaults",value:function(t){O(W,S(t)&&t)}}],(e=[{key:"init",value:function(){var t,e,i,n,o=this,s=this.element,a=this.options;s[g]||(s[g]=this,a.focus&&!a.keyboard&&(a.focus=!1),e=[],A((t="img"===s.localName)?[s]:s.querySelectorAll("img"),function(t){I(a.filter)?a.filter.call(o,t)&&e.push(t):o.getImageURL(t)&&e.push(t)}),this.isImg=t,this.length=e.length,this.images=e,this.initBody(),D(document.createElement(g).style.transition)&&(a.transition=!1),a.inline?(i=0,n=function(){var t;(i+=1)===o.length&&(o.initializing=!1,o.delaying={abort:function(){clearTimeout(t)}},t=setTimeout(function(){o.delaying=!1,o.build()},0))},this.initializing={abort:function(){A(e,function(t){t.complete||(Y(t,y,n),Y(t,x,n))})}},A(e,function(t){var e,i;t.complete?n():(X(t,y,e=function(){Y(t,x,i),n()},{once:!0}),X(t,x,i=function(){Y(t,y,e),n()},{once:!0}))})):X(s,w,this.onStart=function(t){t=t.target;"img"!==t.localName||I(a.filter)&&!a.filter.call(o,t)||o.view(o.images.indexOf(t))}))}},{key:"build",value:function(){var t,s,e,i,n,o,a,r,l,h,c,u,d,m;this.ready||(t=this.element,s=this.options,e=t.parentNode,(d=document.createElement("div")).innerHTML='<div class="viewer-container" tabindex="-1" touch-action="none"><div class="viewer-canvas"></div><div class="viewer-footer"><div class="viewer-title"></div><div class="viewer-toolbar"></div><div class="viewer-navbar"><ul class="viewer-list" role="navigation"></ul></div></div><div class="viewer-tooltip" role="alert" aria-hidden="true"></div><div class="viewer-button" data-viewer-action="mix" role="button"></div><div class="viewer-player"></div></div>',d=(i=d.querySelector(".".concat(g,"-container"))).querySelector(".".concat(g,"-title")),n=i.querySelector(".".concat(g,"-toolbar")),m=i.querySelector(".".concat(g,"-navbar")),o=i.querySelector(".".concat(g,"-button")),a=i.querySelector(".".concat(g,"-canvas")),this.parent=e,this.viewer=i,this.title=d,this.toolbar=n,this.navbar=m,this.button=o,this.canvas=a,this.footer=i.querySelector(".".concat(g,"-footer")),this.tooltipBox=i.querySelector(".".concat(g,"-tooltip")),this.player=i.querySelector(".".concat(g,"-player")),this.list=i.querySelector(".".concat(g,"-list")),i.id="".concat(g).concat(this.id),d.id="".concat(g,"Title").concat(this.id),R(d,s.title?Tt(Array.isArray(s.title)?s.title[0]:s.title):v),R(m,s.navbar?Tt(s.navbar):v),F(o,v,!s.button),s.keyboard&&o.setAttribute("tabindex",0),s.backdrop&&(R(i,"".concat(g,"-backdrop")),s.inline||"static"===s.backdrop||pt(a,ht,"hide")),T(s.className)&&s.className&&s.className.split(ct).forEach(function(t){R(i,t)}),s.toolbar?(r=document.createElement("ul"),l=S(s.toolbar),h=ut.slice(0,3),c=ut.slice(7,9),u=ut.slice(9),l||R(n,Tt(s.toolbar)),A(l?s.toolbar:ut,function(t,e){var i,n=l&&S(t),e=l?vt(e):t,o=n&&!D(t.show)?t.show:t;!o||!s.zoomable&&-1!==h.indexOf(e)||!s.rotatable&&-1!==c.indexOf(e)||!s.scalable&&-1!==u.indexOf(e)||(i=n&&!D(t.size)?t.size:t,n=n&&!D(t.click)?t.click:t,t=document.createElement("li"),s.keyboard&&t.setAttribute("tabindex",0),t.setAttribute("role","button"),R(t,"".concat(g,"-").concat(e)),I(n)||pt(t,ht,e),E(o)&&R(t,Tt(o)),-1!==["small","large"].indexOf(i)?R(t,"".concat(g,"-").concat(i)):"play"===e&&R(t,"".concat(g,"-large")),I(n)&&X(t,w,n),r.appendChild(t))}),n.appendChild(r)):R(n,v),s.rotatable||(R(d=n.querySelectorAll('li[class*="rotate"]'),p),A(d,function(t){n.appendChild(t)})),s.inline?(R(o,U),C(i,{zIndex:s.zIndexInline}),"static"===window.getComputedStyle(e).position&&C(e,{position:"relative"}),e.insertBefore(i,t.nextSibling)):(R(o,H),R(i,V),R(i,B),R(i,v),C(i,{zIndex:s.zIndex}),(m=(m=T(m=s.container)?t.ownerDocument.querySelector(m):m)||this.body).appendChild(i)),s.inline&&(this.render(),this.bind(),this.isShown=!0),this.ready=!0,I(s.ready)&&X(t,"ready",s.ready,{once:!0}),!1===q(t,"ready")?this.ready=!1:this.ready&&s.inline&&this.view(this.index))}}])&&n(t.prototype,e),i&&n(t,i),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,i})();return O(e.prototype,i,t,St,It,At),e});
10
+ ((t,e)=>{"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).Viewer=e()})(this,function(){function n(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,r(n.key),n)}}function s(e,t){var i,n=Object.keys(e);return Object.getOwnPropertySymbols&&(i=Object.getOwnPropertySymbols(e),t&&(i=i.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,i)),n}function P(n){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?s(Object(o),!0).forEach(function(t){var e,i;e=n,i=o[t=t],(t=r(t))in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(o)):s(Object(o)).forEach(function(t){Object.defineProperty(n,t,Object.getOwnPropertyDescriptor(o,t))})}return n}function r(t){t=((t,e)=>{if("object"!=typeof t||!t)return t;var i=t[Symbol.toPrimitive];if(void 0===i)return("string"===e?String:Number)(t);if("object"!=typeof(i=i.call(t,e||"default")))return i;throw new TypeError("@@toPrimitive must return a primitive value.")})(t,"string");return"symbol"==typeof t?t:t+""}function l(t){return(l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var W={backdrop:!0,button:!0,navbar:!0,title:!0,toolbar:!0,className:"",container:"body",filter:null,fullscreen:!0,inheritedAttributes:["crossOrigin","decoding","isMap","loading","referrerPolicy","sizes","srcset","useMap"],initialCoverage:.9,initialViewIndex:0,inline:!1,interval:5e3,keyboard:!0,focus:!0,loading:!0,loop:!0,minWidth:200,minHeight:100,movable:!0,rotatable:!0,scalable:!0,zoomable:!0,zoomOnTouch:!0,zoomOnWheel:!0,slideOnTouch:!0,toggleOnDblclick:!0,tooltip:!0,transition:!0,zIndex:2015,zIndexInline:0,zoomRatio:.1,minZoomRatio:.01,maxZoomRatio:100,url:"src",ready:null,show:null,shown:null,hide:null,hidden:null,view:null,viewed:null,move:null,moved:null,rotate:null,rotated:null,scale:null,scaled:null,zoom:null,zoomed:null,play:null,stop:null},t="undefined"!=typeof window&&void 0!==window.document,e=t?window:{},a=!(!t||!e.document.documentElement)&&"ontouchstart"in e.document.documentElement,i=t&&"PointerEvent"in e,g="viewer",h="move",j="switch",c="zoom",H="".concat(g,"-active"),B="".concat(g,"-close"),V="".concat(g,"-fade"),U="".concat(g,"-fixed"),K="".concat(g,"-fullscreen"),Z="".concat(g,"-fullscreen-exit"),f="".concat(g,"-hide"),$="".concat(g,"-hide-md-down"),_="".concat(g,"-hide-sm-down"),G="".concat(g,"-hide-xs-down"),u="".concat(g,"-in"),v="".concat(g,"-invisible"),p="".concat(g,"-loading"),J="".concat(g,"-move"),Q="".concat(g,"-open"),d="".concat(g,"-show"),m="".concat(g,"-transition"),b="click",tt="dblclick",et="dragstart",it="focusin",nt="keydown",w="load",y="error",ot=i?"pointerdown":a?"touchstart":"mousedown",st=i?"pointermove":a?"touchmove":"mousemove",at=i?"pointerup pointercancel":a?"touchend touchcancel":"mouseup",rt="resize",x="transitionend",lt="wheel",k="viewed",ht="rotated",ct="".concat(g,"Action"),z=/\s+/,ut=["zoom-in","zoom-out","one-to-one","reset","prev","play","next","rotate-left","rotate-right","flip-horizontal","flip-vertical"];function E(t){return"string"==typeof t}var dt=Number.isNaN||e.isNaN;function T(t){return"number"==typeof t&&!dt(t)}function D(t){return void 0===t}function o(t){return"object"===l(t)&&null!==t}var mt=Object.prototype.hasOwnProperty;function I(t){if(!o(t))return!1;try{var e=t.constructor,i=e.prototype;return e&&i&&mt.call(i,"isPrototypeOf")}catch(t){return!1}}function S(t){return"function"==typeof t}function A(e,i){if(e&&S(i))if(Array.isArray(e)||T(e.length))for(var t=e.length,n=0;n<t&&!1!==i.call(e,e[n],n,e);n+=1);else o(e)&&Object.keys(e).forEach(function(t){i.call(e,e[t],t,e)})}var O=Object.assign||function(i){for(var t=arguments.length,e=new Array(1<t?t-1:0),n=1;n<t;n++)e[n-1]=arguments[n];return o(i)&&0<e.length&&e.forEach(function(e){o(e)&&Object.keys(e).forEach(function(t){i[t]=e[t]})}),i},gt=/^(?:width|height|left|top|marginLeft|marginTop)$/;function C(t,e){var i=t.style;A(e,function(t,e){gt.test(e)&&T(t)&&(t+="px"),i[e]=t})}function L(t,e){return t&&e&&(t.classList?t.classList.contains(e):-1<t.className.split(z).indexOf(e))}function M(t,e){var i;t&&e&&(T(t.length)?A(t,function(t){M(t,e)}):t.classList?t.classList.add(e):(i=t.className.trim())?i.indexOf(e)<0&&(t.className="".concat(i," ").concat(e)):t.className=e)}function R(t,e){var i;t&&e&&(T(t.length)?A(t,function(t){R(t,e)}):t.classList?t.classList.remove(e):(i=t.className)&&0<=i.indexOf(e)&&(t.className=i.split(z).filter(function(t){return t&&t!==e}).join(" ")))}function F(t,e,i){e&&(T(t.length)?A(t,function(t){F(t,e,i)}):(i?M:R)(t,e))}var ft=/([a-z\d])([A-Z])/g;function vt(t){return t.replace(ft,"$1-$2").toLowerCase()}function N(t,e){return o(t[e])?t[e]:t.dataset?t.dataset[e]:t.getAttribute("data-".concat(vt(e)))}function pt(t,e,i){o(i)?t[e]=i:t.dataset?t.dataset[e]=i:t.setAttribute("data-".concat(vt(e)),i)}wt=!1,t&&(bt=!1,i=function(){},t=Object.defineProperty({},"once",{get:function(){return wt=!0,bt},set:function(t){bt=t}}),e.addEventListener("test",i,t),e.removeEventListener("test",i,t));var bt,wt,yt=wt;function Y(i,t,n,e){var o=3<arguments.length&&void 0!==e?e:{},s=n;t.trim().split(z).forEach(function(t){var e;yt||(e=i.listeners)&&e[t]&&e[t][n]&&(s=e[t][n],delete e[t][n],0===Object.keys(e[t]).length&&delete e[t],0===Object.keys(e).length)&&delete i.listeners,i.removeEventListener(t,s,o)})}function X(s,t,a,e){var r=3<arguments.length&&void 0!==e?e:{},l=a;t.trim().split(z).forEach(function(n){var t,o;r.once&&!yt&&(t=s.listeners,l=function(){delete o[n][a],s.removeEventListener(n,l,r);for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];a.apply(s,e)},(o=void 0===t?{}:t)[n]||(o[n]={}),o[n][a]&&s.removeEventListener(n,o[n][a],r),o[n][a]=l,s.listeners=o),s.addEventListener(n,l,r)})}function q(t,e,i,n){var o;return S(Event)&&S(CustomEvent)?o=new CustomEvent(e,P({bubbles:!0,cancelable:!0,detail:i},n)):(o=document.createEvent("CustomEvent")).initCustomEvent(e,!0,!0,i),t.dispatchEvent(o)}function xt(t){var e=t.rotate,i=t.scaleX,n=t.scaleY,o=t.translateX,t=t.translateY,s=[],o=(T(o)&&0!==o&&s.push("translateX(".concat(o,"px)")),T(t)&&0!==t&&s.push("translateY(".concat(t,"px)")),T(e)&&0!==e&&s.push("rotate(".concat(e,"deg)")),T(i)&&1!==i&&s.push("scaleX(".concat(i,")")),T(n)&&1!==n&&s.push("scaleY(".concat(n,")")),s.length?s.join(" "):"none");return{WebkitTransform:o,msTransform:o,transform:o}}var kt=e.navigator&&/Version\/\d+(\.\d+)+?\s+Safari/i.test(e.navigator.userAgent);function zt(i,t,e){var n,o=document.createElement("img");return i.naturalWidth&&!kt?e(i.naturalWidth,i.naturalHeight):(n=document.body||document.documentElement,o.onload=function(){e(o.width,o.height),kt||n.removeChild(o)},A(t.inheritedAttributes,function(t){var e=i.getAttribute(t);null!==e&&o.setAttribute(t,e)}),o.src=i.src,kt||(o.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.appendChild(o))),o}function Et(t){switch(t){case 2:return G;case 3:return _;case 4:return $;default:return""}}function Tt(t,e){var i=t.pageX,t=t.pageY,n={endX:i,endY:t};return e?n:P({timeStamp:Date.now(),startX:i,startY:t},n)}var Dt,i={render:function(){this.initContainer(),this.initViewer(),this.initList(),this.renderViewer()},initBody:function(){var t=this.element.ownerDocument,e=t.body||t.documentElement;this.body=e,this.scrollbarWidth=window.innerWidth-t.documentElement.clientWidth,this.initialBodyPaddingRight=e.style.paddingRight,this.initialBodyComputedPaddingRight=window.getComputedStyle(e).paddingRight},initContainer:function(){this.containerData={width:window.innerWidth,height:window.innerHeight}},initViewer:function(){var t,e=this.options,i=this.parent;e.inline&&(t={width:Math.max(i.offsetWidth,e.minWidth),height:Math.max(i.offsetHeight,e.minHeight)},this.parentData=t),!this.fulled&&t||(t=this.containerData),this.viewerData=O({},t)},renderViewer:function(){this.options.inline&&!this.fulled&&C(this.viewer,this.viewerData)},initList:function(){var r=this,t=this.element,l=this.options,h=this.list,c=[];h.innerHTML="",A(this.images,function(i,t){var e,n,o=i.src,s=i.alt||(E(s=o)?decodeURIComponent(s.replace(/^.*\//,"").replace(/[?&#].*$/,"")):""),a=r.getImageURL(i);(o||a)&&(e=document.createElement("li"),n=document.createElement("img"),A(l.inheritedAttributes,function(t){var e=i.getAttribute(t);null!==e&&n.setAttribute(t,e)}),l.navbar&&(n.src=o||a),n.alt=s,n.setAttribute("data-original-url",a||o),e.setAttribute("data-index",t),e.setAttribute("data-viewer-action","view"),e.setAttribute("role","button"),l.keyboard&&e.setAttribute("tabindex",0),e.appendChild(n),h.appendChild(e),c.push(e))}),A(this.items=c,function(e){var t,i,n=e.firstElementChild;pt(n,"filled",!0),l.loading&&M(e,p),X(n,w,t=function(t){Y(n,y,i),l.loading&&R(e,p),r.loadImage(t)},{once:!0}),X(n,y,i=function(){Y(n,w,t),l.loading&&R(e,p)},{once:!0})}),l.transition&&X(t,k,function(){M(h,m)},{once:!0})},renderList:function(){var t,e,i=this.index,n=this.items[i];n&&(t=n.nextElementSibling,t=parseInt(window.getComputedStyle(t||n).marginLeft,10),n=n.offsetWidth,C(this.list,O({width:(e=n+t)*this.length-t},xt({translateX:(this.viewerData.width-n)/2-e*i}))))},resetList:function(){var t=this.list;t.innerHTML="",R(t,m),C(t,O({width:0},xt({translateX:0})))},initImage:function(r){var t,l=this,h=this.options,e=this.image,i=this.viewerData,n=this.footer.offsetHeight,c=i.width,u=Math.max(i.height-n,n),d=this.imageData||{};this.imageInitializing={abort:function(){t.onload=null}},t=zt(e,h,function(t,e){var i=t/e,n=Math.max(0,Math.min(1,h.initialCoverage)),o=c,s=u,n=(l.imageInitializing=!1,c<u*i?s=c/i:o=u*i,n=T(n)?n:.9,o=Math.min(o*n,t),s=Math.min(s*n,e),(c-o)/2),a=(u-s)/2,n={left:n,top:a,x:n,y:a,width:o,height:s,oldRatio:1,ratio:o/t,aspectRatio:i,naturalWidth:t,naturalHeight:e},a=O({},n);h.rotatable&&(n.rotate=d.rotate||0,a.rotate=0),h.scalable&&(n.scaleX=d.scaleX||1,n.scaleY=d.scaleY||1,a.scaleX=1,a.scaleY=1),l.imageData=n,l.initialImageData=a,r&&r()})},renderImage:function(t){var e,i=this,n=this.image,o=this.imageData;C(n,O({width:o.width,height:o.height,marginLeft:o.x,marginTop:o.y},xt(o))),t&&((this.viewing||this.moving||this.rotating||this.scaling||this.zooming)&&this.options.transition&&L(n,m)?(e=function(){i.imageRendering=!1,t()},this.imageRendering={abort:function(){Y(n,x,e)}},X(n,x,e,{once:!0})):t())},resetImage:function(){var t=this.image;t&&(this.viewing&&this.viewing.abort(),t.parentNode.removeChild(t),this.image=null,this.title.innerHTML="")}},t={bind:function(){var t=this.options,e=this.viewer,i=this.canvas,n=this.element.ownerDocument;X(e,b,this.onClick=this.click.bind(this)),X(e,et,this.onDragStart=this.dragstart.bind(this)),X(i,ot,this.onPointerDown=this.pointerdown.bind(this)),X(n,st,this.onPointerMove=this.pointermove.bind(this)),X(n,at,this.onPointerUp=this.pointerup.bind(this)),X(n,nt,this.onKeyDown=this.keydown.bind(this)),X(window,rt,this.onResize=this.resize.bind(this)),t.zoomable&&t.zoomOnWheel&&X(e,lt,this.onWheel=this.wheel.bind(this),{passive:!1,capture:!0}),t.toggleOnDblclick&&X(i,tt,this.onDblclick=this.dblclick.bind(this))},unbind:function(){var t=this.options,e=this.viewer,i=this.canvas,n=this.element.ownerDocument;Y(e,b,this.onClick),Y(e,et,this.onDragStart),Y(i,ot,this.onPointerDown),Y(n,st,this.onPointerMove),Y(n,at,this.onPointerUp),Y(n,nt,this.onKeyDown),Y(window,rt,this.onResize),t.zoomable&&t.zoomOnWheel&&Y(e,lt,this.onWheel,{passive:!1,capture:!0}),t.toggleOnDblclick&&Y(i,tt,this.onDblclick)}},It={click:function(t){var e=this.options,i=this.imageData,n=t.target,o=N(n,ct);switch(o||"img"!==n.localName||"li"!==n.parentElement.localName||(o=N(n=n.parentElement,ct)),a&&t.isTrusted&&n===this.canvas&&clearTimeout(this.clickCanvasTimeout),o){case"mix":this.played?this.stop():e.inline?this.fulled?this.exit():this.full():this.hide();break;case"hide":this.pointerMoved||this.hide();break;case"view":this.view(N(n,"index"));break;case"zoom-in":this.zoom(.1,!0);break;case"zoom-out":this.zoom(-.1,!0);break;case"one-to-one":this.toggle();break;case"reset":this.reset();break;case"prev":this.prev(e.loop);break;case"play":this.play(e.fullscreen);break;case"next":this.next(e.loop);break;case"rotate-left":this.rotate(-90);break;case"rotate-right":this.rotate(90);break;case"flip-horizontal":this.scaleX(-i.scaleX||-1);break;case"flip-vertical":this.scaleY(-i.scaleY||-1);break;default:this.played&&this.stop()}},dblclick:function(t){t.preventDefault(),this.viewed&&t.target===this.image&&(a&&t.isTrusted&&clearTimeout(this.doubleClickImageTimeout),this.toggle(t.isTrusted?t:t.detail&&t.detail.originalEvent))},load:function(){var t=this,e=(this.timeout&&(clearTimeout(this.timeout),this.timeout=!1),this.element),i=this.options,n=this.image,o=this.index,s=this.viewerData;R(n,v),i.loading&&R(this.canvas,p),n.style.cssText="height:0;"+"margin-left:".concat(s.width/2,"px;")+"margin-top:".concat(s.height/2,"px;")+"max-width:none!important;position:relative;width:0;",this.initImage(function(){F(n,J,i.movable),F(n,m,i.transition),t.renderImage(function(){t.viewed=!0,t.viewing=!1,S(i.viewed)&&X(e,k,i.viewed,{once:!0}),q(e,k,{originalImage:t.images[o],index:o,image:n},{cancelable:!1})})})},loadImage:function(t){var n=t.target,t=n.parentNode,o=t.offsetWidth||30,s=t.offsetHeight||50,a=!!N(n,"filled");zt(n,this.options,function(t,e){var t=t/e,e=o,i=s;o<s*t?a?e=s*t:i=o/t:a?i=o/t:e=s*t,C(n,O({width:e,height:i},xt({translateX:(o-e)/2,translateY:(s-i)/2})))})},keydown:function(t){var e=this.options;if(e.keyboard){var i=t.keyCode||t.which||t.charCode;if(13===i&&this.viewer.contains(t.target)&&this.click(t),this.fulled)switch(i){case 27:this.played?this.stop():e.inline?this.fulled&&this.exit():this.hide();break;case 32:this.played&&this.stop();break;case 37:this.played&&this.playing?this.playing.prev():this.prev(e.loop);break;case 38:t.preventDefault(),this.zoom(e.zoomRatio,!0);break;case 39:this.played&&this.playing?this.playing.next():this.next(e.loop);break;case 40:t.preventDefault(),this.zoom(-e.zoomRatio,!0);break;case 48:case 49:t.ctrlKey&&(t.preventDefault(),this.toggle())}}},dragstart:function(t){"img"===t.target.localName&&t.preventDefault()},pointerdown:function(t){var e=this.options,i=this.pointers,n=t.buttons,o=t.button;this.pointerMoved=!1,!this.viewed||this.showing||this.viewing||this.hiding||("mousedown"===t.type||"pointerdown"===t.type&&"mouse"===t.pointerType)&&(T(n)&&1!==n||T(o)&&0!==o||t.ctrlKey)||(t.preventDefault(),t.changedTouches?A(t.changedTouches,function(t){i[t.identifier]=Tt(t)}):i[t.pointerId||0]=Tt(t),n=!!e.movable&&h,e.zoomOnTouch&&e.zoomable&&1<Object.keys(i).length?n=c:e.slideOnTouch&&("touch"===t.pointerType||"touchstart"===t.type)&&this.isSwitchable()&&(n=j),!e.transition||n!==h&&n!==c||R(this.image,m),this.action=n)},pointermove:function(t){var e=this.pointers,i=this.action;this.viewed&&i&&(t.preventDefault(),t.changedTouches?A(t.changedTouches,function(t){O(e[t.identifier]||{},Tt(t,!0))}):O(e[t.pointerId||0]||{},Tt(t,!0)),this.change(t))},pointerup:function(t){var e,i=this,n=this.options,o=this.action,s=this.pointers;t.changedTouches?A(t.changedTouches,function(t){e=s[t.identifier],delete s[t.identifier]}):(e=s[t.pointerId||0],delete s[t.pointerId||0]),o&&(t.preventDefault(),!n.transition||o!==h&&o!==c||M(this.image,m),this.action=!1,a)&&o!==c&&e&&Date.now()-e.timeStamp<500&&(clearTimeout(this.clickCanvasTimeout),clearTimeout(this.doubleClickImageTimeout),n.toggleOnDblclick&&this.viewed&&t.target===this.image?this.pointerMoved?this.imageClicked=!1:this.imageClicked?(this.imageClicked=!1,this.doubleClickImageTimeout=setTimeout(function(){q(i.image,tt,{originalEvent:t})},50)):(this.imageClicked=!0,this.doubleClickImageTimeout=setTimeout(function(){i.imageClicked=!1},500)):(this.imageClicked=!1,n.backdrop&&"static"!==n.backdrop&&t.target===this.canvas&&(this.clickCanvasTimeout=setTimeout(function(){q(i.canvas,b,{originalEvent:t})},50))))},resize:function(){var e=this;this.isShown&&!this.hiding&&(this.fulled&&(this.close(),this.initBody(),this.open()),this.initContainer(),this.initViewer(),this.renderViewer(),this.renderList(),this.viewed&&this.initImage(function(){e.renderImage()}),this.played)&&(this.options.fullscreen&&this.fulled&&!(document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement)?this.stop():A(this.player.getElementsByTagName("img"),function(t){X(t,w,e.loadImage.bind(e),{once:!0}),q(t,w)}))},wheel:function(t){var e,i,n=this;this.viewed&&(t.preventDefault(),this.wheeling||(this.wheeling=!0,setTimeout(function(){n.wheeling=!1},50),e=Number(this.options.zoomRatio)||.1,i=1,t.deltaY?i=0<t.deltaY?1:-1:t.wheelDelta?i=-t.wheelDelta/120:t.detail&&(i=0<t.detail?1:-1),this.zoom(-i*e,!0,null,t)))}},St={show:function(){var t,e,i=0<arguments.length&&void 0!==arguments[0]&&arguments[0],n=this.element,o=this.options;return o.inline||this.showing||this.isShown||this.showing||(this.ready?(S(o.show)&&X(n,"show",o.show,{once:!0}),!1!==q(n,"show")&&this.ready&&(this.hiding&&this.transitioning.abort(),this.showing=!0,this.open(),R(t=this.viewer,f),t.setAttribute("role","dialog"),t.setAttribute("aria-labelledby",this.title.id),t.setAttribute("aria-modal",!0),t.removeAttribute("aria-hidden"),o.transition&&!i?(e=this.shown.bind(this),this.transitioning={abort:function(){Y(t,x,e),R(t,u)}},M(t,m),t.initialOffsetWidth=t.offsetWidth,X(t,x,e,{once:!0}),M(t,u)):(M(t,u),this.shown()))):(this.build(),this.ready&&this.show(i))),this},hide:function(){var e,t,i,n,o,s=this,a=0<arguments.length&&void 0!==arguments[0]&&arguments[0],r=this.element,l=this.options;return l.inline||this.hiding||!this.isShown&&!this.showing||(S(l.hide)&&X(r,"hide",l.hide,{once:!0}),!1!==q(r,"hide")&&(this.showing&&this.transitioning.abort(),this.hiding=!0,this.played?this.stop():this.viewing&&this.viewing.abort(),e=this.viewer,t=this.image,i=function(){R(e,u),s.hidden()},l.transition&&!a?(n=function(t){t&&t.target===e&&(Y(e,x,n),s.hidden())},o=function(){L(e,m)?(X(e,x,n),R(e,u)):i()},this.transitioning={abort:function(){s.viewed&&L(t,m)?Y(t,x,o):L(e,m)&&Y(e,x,n)}},this.viewed&&L(t,m)?(X(t,x,o,{once:!0}),this.zoomTo(0,!1,null,null,!0)):o()):i())),this},view:function(){var i=this,t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:this.options.initialViewIndex,t=Number(t)||0;if(!(this.hiding||this.played||t<0||t>=this.length||this.viewed&&t===this.index)){if(!this.isShown)return this.index=t,this.show();this.viewing&&this.viewing.abort();var e,n,o,s=this.element,a=this.options,r=this.title,l=this.canvas,h=this.items[t],c=h.querySelector("img"),u=N(c,"originalUrl"),d=c.getAttribute("alt"),m=document.createElement("img");A(a.inheritedAttributes,function(t){var e=c.getAttribute(t);null!==e&&m.setAttribute(t,e)}),m.src=u,m.alt=d,S(a.view)&&X(s,"view",a.view,{once:!0}),!1===q(s,"view",{originalImage:this.images[t],index:t,image:m})||!this.isShown||this.hiding||this.played||((u=this.items[this.index])&&(R(u,H),u.removeAttribute("aria-selected")),M(h,H),h.setAttribute("aria-selected",!0),a.focus&&h.focus(),this.image=m,this.viewed=!1,this.index=t,this.imageData={},M(m,v),a.loading&&M(l,p),l.innerHTML="",l.appendChild(m),this.renderList(),r.innerHTML="",X(s,k,e=function(){var t=i.imageData,e=Array.isArray(a.title)?a.title[1]:a.title;r.innerHTML=E(e=S(e)?e.call(i,m,t):"".concat(d," (").concat(t.naturalWidth," × ").concat(t.naturalHeight,")"))?e.replace(/&(?!amp;|quot;|#39;|lt;|gt;)/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&#39;").replace(/</g,"&lt;").replace(/>/g,"&gt;"):e},{once:!0}),this.viewing={abort:function(){Y(s,k,e),m.complete?i.imageRendering?i.imageRendering.abort():i.imageInitializing&&i.imageInitializing.abort():(m.src="",Y(m,w,n),i.timeout&&clearTimeout(i.timeout))}},m.complete?this.load():(X(m,w,n=function(){Y(m,y,o),i.load()},{once:!0}),X(m,y,o=function(){Y(m,w,n),i.timeout&&(clearTimeout(i.timeout),i.timeout=!1),R(m,v),a.loading&&R(i.canvas,p)},{once:!0}),this.timeout&&clearTimeout(this.timeout),this.timeout=setTimeout(function(){R(m,v),i.timeout=!1},1e3)))}return this},prev:function(){var t=this.index-1;return t<0&&(t=0<arguments.length&&void 0!==arguments[0]&&arguments[0]?this.length-1:0),this.view(t),this},next:function(){var t=this.length-1,e=this.index+1;return this.view(e=t<e?0<arguments.length&&void 0!==arguments[0]&&arguments[0]?0:t:e),this},move:function(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:t,i=this.imageData;return this.moveTo(D(t)?t:i.x+Number(t),D(e)?e:i.y+Number(e)),this},moveTo:function(t){var e=this,i=1<arguments.length&&void 0!==arguments[1]?arguments[1]:t,n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null,o=this.element,s=this.options,a=this.imageData;if(t=Number(t),i=Number(i),this.viewed&&!this.played&&s.movable){var r=a.x,l=a.y,h=!1;if(T(t)?h=!0:t=r,T(i)?h=!0:i=l,h){if(S(s.move)&&X(o,"move",s.move,{once:!0}),!1===q(o,"move",{x:t,y:i,oldX:r,oldY:l,originalEvent:n}))return this;a.x=t,a.y=i,a.left=t,a.top=i,this.moving=!0,this.renderImage(function(){e.moving=!1,S(s.moved)&&X(o,"moved",s.moved,{once:!0}),q(o,"moved",{x:t,y:i,oldX:r,oldY:l,originalEvent:n},{cancelable:!1})})}}return this},rotate:function(t){return this.rotateTo((this.imageData.rotate||0)+Number(t)),this},rotateTo:function(t){var e=this,i=this.element,n=this.options,o=this.imageData;if(T(t=Number(t))&&this.viewed&&!this.played&&n.rotatable){var s=o.rotate;if(S(n.rotate)&&X(i,"rotate",n.rotate,{once:!0}),!1===q(i,"rotate",{degree:t,oldDegree:s}))return this;o.rotate=t,this.rotating=!0,this.renderImage(function(){e.rotating=!1,S(n.rotated)&&X(i,ht,n.rotated,{once:!0}),q(i,ht,{degree:t,oldDegree:s},{cancelable:!1})})}return this},scaleX:function(t){return this.scale(t,this.imageData.scaleY),this},scaleY:function(t){return this.scale(this.imageData.scaleX,t),this},scale:function(t){var e=this,i=1<arguments.length&&void 0!==arguments[1]?arguments[1]:t,n=this.element,o=this.options,s=this.imageData;if(t=Number(t),i=Number(i),this.viewed&&!this.played&&o.scalable){var a=s.scaleX,r=s.scaleY,l=!1;if(T(t)?l=!0:t=a,T(i)?l=!0:i=r,l){if(S(o.scale)&&X(n,"scale",o.scale,{once:!0}),!1===q(n,"scale",{scaleX:t,scaleY:i,oldScaleX:a,oldScaleY:r}))return this;s.scaleX=t,s.scaleY=i,this.scaling=!0,this.renderImage(function(){e.scaling=!1,S(o.scaled)&&X(n,"scaled",o.scaled,{once:!0}),q(n,"scaled",{scaleX:t,scaleY:i,oldScaleX:a,oldScaleY:r},{cancelable:!1})})}}return this},zoom:function(t){var e=1<arguments.length&&void 0!==arguments[1]&&arguments[1],i=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null,n=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null,o=this.imageData;return t=Number(t),this.zoomTo(o.width*(t=t<0?1/(1-t):1+t)/o.naturalWidth,e,i,n),this},zoomTo:function(t){var i,n,o,e=this,s=1<arguments.length&&void 0!==arguments[1]&&arguments[1],a=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null,r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null,l=4<arguments.length&&void 0!==arguments[4]&&arguments[4],h=this.element,c=this.options,u=this.pointers,d=this.imageData,m=d.x,g=d.y,f=d.width,v=d.height,p=d.naturalWidth,b=d.naturalHeight;if(T(t=Math.max(0,t))&&this.viewed&&!this.played&&(l||c.zoomable)){if(l||(l=Math.max(.01,c.minZoomRatio),y=Math.min(100,c.maxZoomRatio),t=Math.min(Math.max(t,l),y)),r)switch(r.type){case"wheel":.055<=c.zoomRatio&&.95<t&&t<1.05&&(t=1);break;case"pointermove":case"touchmove":case"mousemove":.99<t&&t<1.01&&(t=1)}var w,l=p*t,y=b*t,p=l-f,b=y-v,x=d.ratio;if(S(c.zoom)&&X(h,"zoom",c.zoom,{once:!0}),!1===q(h,"zoom",{ratio:t,oldRatio:x,originalEvent:r}))return this;this.zooming=!0,r?(w={left:(w=(w=this.viewer).getBoundingClientRect()).left+(window.pageXOffset-document.documentElement.clientLeft),top:w.top+(window.pageYOffset-document.documentElement.clientTop)},u=u&&0<Object.keys(u).length?(o=n=i=0,A(u,function(t){var e=t.startX;i+=e,n+=t.startY,o+=1}),{pageX:i/=o,pageY:n/=o}):{pageX:r.pageX,pageY:r.pageY},d.x-=(u.pageX-w.left-m)/f*p,d.y-=(u.pageY-w.top-g)/v*b):I(a)&&T(a.x)&&T(a.y)?(d.x-=p*((a.x-m)/f),d.y-=b*((a.y-g)/v)):(d.x-=p/2,d.y-=b/2),d.left=d.x,d.top=d.y,d.width=l,d.height=y,d.oldRatio=x,d.ratio=t,this.renderImage(function(){e.zooming=!1,S(c.zoomed)&&X(h,"zoomed",c.zoomed,{once:!0}),q(h,"zoomed",{ratio:t,oldRatio:x,originalEvent:r},{cancelable:!1})}),s&&this.tooltip()}return this},play:function(){var t,o,s,a,r,l,h,e,i,n=this,c=0<arguments.length&&void 0!==arguments[0]&&arguments[0];return this.isShown&&!this.played&&(t=this.element,S((o=this.options).play)&&X(t,"play",o.play,{once:!0}),!1!==q(t,"play")&&(s=this.player,a=this.loadImage.bind(this),r=[],h=l=0,this.played=!0,this.onLoadWhenPlay=a,c&&this.requestFullscreen(c),M(s,d),A(this.items,function(t,e){var i=t.querySelector("img"),n=document.createElement("img");n.src=N(i,"originalUrl"),n.alt=i.getAttribute("alt"),n.referrerPolicy=i.referrerPolicy,l+=1,M(n,V),F(n,m,o.transition),L(t,H)&&(M(n,u),h=e),r.push(n),X(n,w,a,{once:!0}),s.appendChild(n)}),T(o.interval))&&0<o.interval&&(e=function(){clearTimeout(n.playing.timeout),R(r[h],u),M(r[h=0<=--h?h:l-1],u),n.playing.timeout=setTimeout(e,o.interval)},i=function(){clearTimeout(n.playing.timeout),R(r[h],u),M(r[h=(h+=1)<l?h:0],u),n.playing.timeout=setTimeout(i,o.interval)},1<l))&&(this.playing={prev:e,next:i,timeout:setTimeout(i,o.interval)}),this},stop:function(){var t,e,i=this;return this.played&&(t=this.element,S((e=this.options).stop)&&X(t,"stop",e.stop,{once:!0}),!1!==q(t,"stop"))&&(e=this.player,clearTimeout(this.playing.timeout),this.playing=!1,this.played=!1,A(e.getElementsByTagName("img"),function(t){Y(t,w,i.onLoadWhenPlay)}),R(e,d),e.innerHTML="",this.exitFullscreen()),this},full:function(){var t=this,e=this.options,i=this.viewer,n=this.image,o=this.list;return this.isShown&&!this.played&&!this.fulled&&e.inline&&(this.fulled=!0,this.open(),M(this.button,Z),e.transition&&(R(o,m),this.viewed)&&R(n,m),M(i,U),i.setAttribute("role","dialog"),i.setAttribute("aria-labelledby",this.title.id),i.setAttribute("aria-modal",!0),i.removeAttribute("style"),C(i,{zIndex:e.zIndex}),e.focus&&this.enforceFocus(),this.initContainer(),this.viewerData=O({},this.containerData),this.renderList(),this.viewed)&&this.initImage(function(){t.renderImage(function(){e.transition&&setTimeout(function(){M(n,m),M(o,m)},0)})}),this},exit:function(){var t=this,e=this.options,i=this.viewer,n=this.image,o=this.list;return this.isShown&&!this.played&&this.fulled&&e.inline&&(this.fulled=!1,this.close(),R(this.button,Z),e.transition&&(R(o,m),this.viewed)&&R(n,m),e.focus&&this.clearEnforceFocus(),i.removeAttribute("role"),i.removeAttribute("aria-labelledby"),i.removeAttribute("aria-modal"),R(i,U),C(i,{zIndex:e.zIndexInline}),this.viewerData=O({},this.parentData),this.renderViewer(),this.renderList(),this.viewed)&&this.initImage(function(){t.renderImage(function(){e.transition&&setTimeout(function(){M(n,m),M(o,m)},0)})}),this},tooltip:function(){var t=this,e=this.options,i=this.tooltipBox,n=this.imageData;return this.viewed&&!this.played&&e.tooltip&&(i.textContent="".concat(Math.round(100*n.ratio),"%"),this.tooltipping?clearTimeout(this.tooltipping):e.transition?(this.fading&&q(i,x),M(i,d),M(i,V),M(i,m),i.removeAttribute("aria-hidden"),i.initialOffsetWidth=i.offsetWidth,M(i,u)):(M(i,d),i.removeAttribute("aria-hidden")),this.tooltipping=setTimeout(function(){e.transition?(X(i,x,function(){R(i,d),R(i,V),R(i,m),i.setAttribute("aria-hidden",!0),t.fading=!1},{once:!0}),R(i,u),t.fading=!0):(R(i,d),i.setAttribute("aria-hidden",!0)),t.tooltipping=!1},1e3)),this},toggle:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:null;return 1===this.imageData.ratio?this.zoomTo(this.imageData.oldRatio,!0,null,t):this.zoomTo(1,!0,null,t),this},reset:function(){return this.viewed&&!this.played&&(this.imageData=O({},this.initialImageData),this.renderImage()),this},update:function(){var n,o,e=this,t=this.element,i=this.options,s=this.isImg;return s&&!t.parentNode?this.destroy():(n=[],A(s?[t]:t.querySelectorAll("img"),function(t){S(i.filter)?i.filter.call(e,t)&&n.push(t):e.getImageURL(t)&&n.push(t)}),n.length&&(this.images=n,this.length=n.length,this.ready?(o=[],A(this.items,function(t,e){var t=t.querySelector("img"),i=n[e];i&&t&&i.src===t.src&&i.alt===t.alt||o.push(e)}),C(this.list,{width:"auto"}),this.initList(),this.isShown&&(this.length?this.viewed&&(0<=(s=o.indexOf(this.index))?(this.viewed=!1,this.view(Math.max(Math.min(this.index-s,this.length-1),0))):(M(t=this.items[this.index],H),t.setAttribute("aria-selected",!0))):(this.image=null,this.viewed=!1,this.index=0,this.imageData={},this.canvas.innerHTML="",this.title.innerHTML=""))):this.build()),this)},destroy:function(){var t=this.element,e=this.options;return t[g]&&(this.destroyed=!0,this.ready?(this.played&&this.stop(),e.inline?(this.fulled&&this.exit(),this.unbind()):this.isShown?(this.viewing&&(this.imageRendering?this.imageRendering.abort():this.imageInitializing&&this.imageInitializing.abort()),this.hiding&&this.transitioning.abort(),this.hidden()):this.showing&&(this.transitioning.abort(),this.hidden()),this.ready=!1,this.viewer.parentNode.removeChild(this.viewer)):e.inline&&(this.delaying?this.delaying.abort():this.initializing&&this.initializing.abort()),e.inline||(Y(t,b,this.onElementClick),Y(t,nt,this.onElementKeyDown)),t[g]=void 0),this}},At={getImageURL:function(t){var e=this.options.url;return e=E(e)?t.getAttribute(e):S(e)?e.call(this,t):""},enforceFocus:function(){var n=this;this.clearEnforceFocus(),X(document,it,this.onFocusin=function(t){var e=n.viewer,i=t.target;if(i!==document&&i!==e&&!e.contains(i)){for(;i;){if(null!==i.getAttribute("tabindex")||"true"===i.getAttribute("aria-modal"))return;i=i.parentElement}e.focus()}})},clearEnforceFocus:function(){this.onFocusin&&(Y(document,it,this.onFocusin),this.onFocusin=null)},open:function(){var t=this.body;M(t,Q),0<this.scrollbarWidth&&(t.style.paddingRight="".concat(this.scrollbarWidth+(parseFloat(this.initialBodyComputedPaddingRight)||0),"px"))},close:function(){var t=this.body;R(t,Q),0<this.scrollbarWidth&&(t.style.paddingRight=this.initialBodyPaddingRight)},shown:function(){var t=this.element,e=this.options,i=this.viewer;this.fulled=!0,this.isShown=!0,this.render(),this.bind(),this.showing=!1,e.focus&&(i.focus(),this.enforceFocus()),S(e.shown)&&X(t,"shown",e.shown,{once:!0}),!1!==q(t,"shown")&&this.ready&&this.isShown&&!this.hiding&&this.view(this.index)},hidden:function(){var t=this.element,e=this.options,i=this.viewer,n=i.ownerDocument.activeElement;n&&i.contains(n)&&S(n.blur)&&n.blur(),e.focus&&this.clearEnforceFocus(),this.close(),this.unbind(),M(i,f),i.removeAttribute("role"),i.removeAttribute("aria-labelledby"),i.removeAttribute("aria-modal"),i.setAttribute("aria-hidden",!0),this.resetList(),this.resetImage(),this.fulled=!1,this.viewed=!1,this.isShown=!1,this.hiding=!1,this.destroyed||(S(e.hidden)&&X(t,"hidden",e.hidden,{once:!0}),q(t,"hidden",null,{cancelable:!1}))},requestFullscreen:function(t){var e=this.element.ownerDocument;this.fulled&&!(e.fullscreenElement||e.webkitFullscreenElement||e.mozFullScreenElement||e.msFullscreenElement)&&((e=e.documentElement).requestFullscreen?I(t)?e.requestFullscreen(t):e.requestFullscreen():e.webkitRequestFullscreen?e.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT):e.mozRequestFullScreen?e.mozRequestFullScreen():e.msRequestFullscreen&&e.msRequestFullscreen())},exitFullscreen:function(){var t=this.element.ownerDocument;this.fulled&&(t.fullscreenElement||t.webkitFullscreenElement||t.mozFullScreenElement||t.msFullscreenElement)&&(t.exitFullscreen?t.exitFullscreen():t.webkitExitFullscreen?t.webkitExitFullscreen():t.mozCancelFullScreen?t.mozCancelFullScreen():t.msExitFullscreen&&t.msExitFullscreen())},change:function(t){var e=this.options,i=this.pointers,n=i[Object.keys(i)[0]];if(n){var s,a,o=n.endX-n.startX,r=n.endY-n.startY;switch(this.action){case h:0==o&&0==r||(this.pointerMoved=!0,this.move(o,r,t));break;case c:this.zoom((s=P({},l=i),a=[],A(l,function(o,t){delete s[t],A(s,function(t){var e=Math.abs(o.startX-t.startX),i=Math.abs(o.startY-t.startY),n=Math.abs(o.endX-t.endX),t=Math.abs(o.endY-t.endY),e=Math.sqrt(e*e+i*i),i=Math.sqrt(n*n+t*t);a.push((i-e)/e)})}),a.sort(function(t,e){return Math.abs(t)<Math.abs(e)}),a[0]),!1,null,t);break;case j:this.action="switched";var l=Math.abs(o);1<l&&l>Math.abs(r)&&(this.pointers={},1<o?this.prev(e.loop):o<-1&&this.next(e.loop))}A(i,function(t){t.startX=t.endX,t.startY=t.endY})}},isSwitchable:function(){var t=this.imageData,e=this.viewerData;return 1<this.length&&0<=t.x&&0<=t.y&&t.width<=e.width&&t.height<=e.height}},Ot=e.Viewer,Ct=(Dt=-1,function(){return Dt+=1}),e=(()=>{function o(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},i=this,n=o;if(!(i instanceof n))throw new TypeError("Cannot call a class as a function");if(!t||1!==t.nodeType)throw new Error("The first argument is required and must be an element.");this.element=t,this.options=O({},W,I(e)&&e),this.action=!1,this.fading=!1,this.fulled=!1,this.hiding=!1,this.imageClicked=!1,this.imageData={},this.index=this.options.initialViewIndex,this.isImg=!1,this.isShown=!1,this.length=0,this.moving=!1,this.played=!1,this.playing=!1,this.pointers={},this.ready=!1,this.rotating=!1,this.scaling=!1,this.showing=!1,this.timeout=!1,this.tooltipping=!1,this.viewed=!1,this.viewing=!1,this.wheeling=!1,this.zooming=!1,this.pointerMoved=!1,this.id=Ct(),this.init()}return t=o,i=[{key:"noConflict",value:function(){return window.Viewer=Ot,o}},{key:"setDefaults",value:function(t){O(W,I(t)&&t)}}],(e=[{key:"init",value:function(){var t,e,i,n,o=this,s=this.element,a=this.options;s[g]||(s[g]=this,a.focus&&!a.keyboard&&(a.focus=!1),e=[],A((t="img"===s.localName)?[s]:s.querySelectorAll("img"),function(t){S(a.filter)?a.filter.call(o,t)&&e.push(t):o.getImageURL(t)&&e.push(t)}),this.isImg=t,this.length=e.length,this.images=e,this.initBody(),D(document.createElement(g).style.transition)&&(a.transition=!1),a.inline?(i=0,n=function(){var t;(i+=1)===o.length&&(o.initializing=!1,o.delaying={abort:function(){clearTimeout(t)}},t=setTimeout(function(){o.delaying=!1,o.build()},0))},this.initializing={abort:function(){A(e,function(t){t.complete||(Y(t,w,n),Y(t,y,n))})}},A(e,function(t){var e,i;t.complete?n():(X(t,w,e=function(){Y(t,y,i),n()},{once:!0}),X(t,y,i=function(){Y(t,w,e),n()},{once:!0}))})):(X(s,b,this.onElementClick=function(t){t=t.target;"img"!==t.localName||S(a.filter)&&!a.filter.call(o,t)||o.view(o.images.indexOf(t))}),X(s,nt,this.onElementKeyDown=function(t){var e=t.target,i=t.key;"img"!==e.localName||"Enter"!==i&&" "!==i||(t.preventDefault(),S(a.filter)&&!a.filter.call(o,e))||o.view(o.images.indexOf(e))})))}},{key:"build",value:function(){var t,s,e,i,n,o,a,r,l,h,c,u,d,m;this.ready||(t=this.element,s=this.options,e=t.parentNode,(d=document.createElement("div")).innerHTML='<div class="viewer-container" tabindex="-1" touch-action="none"><div class="viewer-canvas"></div><div class="viewer-footer"><div class="viewer-title"></div><div class="viewer-toolbar"></div><div class="viewer-navbar"><ul class="viewer-list" role="navigation"></ul></div></div><div class="viewer-tooltip" role="alert" aria-hidden="true"></div><div class="viewer-button" data-viewer-action="mix" role="button"></div><div class="viewer-player"></div></div>',d=(i=d.querySelector(".".concat(g,"-container"))).querySelector(".".concat(g,"-title")),n=i.querySelector(".".concat(g,"-toolbar")),m=i.querySelector(".".concat(g,"-navbar")),o=i.querySelector(".".concat(g,"-button")),a=i.querySelector(".".concat(g,"-canvas")),this.parent=e,this.viewer=i,this.title=d,this.toolbar=n,this.navbar=m,this.button=o,this.canvas=a,this.footer=i.querySelector(".".concat(g,"-footer")),this.tooltipBox=i.querySelector(".".concat(g,"-tooltip")),this.player=i.querySelector(".".concat(g,"-player")),this.list=i.querySelector(".".concat(g,"-list")),i.id="".concat(g).concat(this.id),d.id="".concat(g,"Title").concat(this.id),M(d,s.title?Et(Array.isArray(s.title)?s.title[0]:s.title):f),M(m,s.navbar?Et(s.navbar):f),F(o,f,!s.button),s.keyboard&&o.setAttribute("tabindex",0),s.backdrop&&(M(i,"".concat(g,"-backdrop")),s.inline||"static"===s.backdrop||pt(a,ct,"hide")),E(s.className)&&s.className&&s.className.split(z).forEach(function(t){M(i,t)}),s.toolbar?(r=document.createElement("ul"),l=I(s.toolbar),h=ut.slice(0,3),c=ut.slice(7,9),u=ut.slice(9),l||M(n,Et(s.toolbar)),A(l?s.toolbar:ut,function(t,e){var i,n=l&&I(t),e=l?vt(e):t,o=n&&!D(t.show)?t.show:t;!o||!s.zoomable&&-1!==h.indexOf(e)||!s.rotatable&&-1!==c.indexOf(e)||!s.scalable&&-1!==u.indexOf(e)||(i=n&&!D(t.size)?t.size:t,n=n&&!D(t.click)?t.click:t,t=document.createElement("li"),s.keyboard&&t.setAttribute("tabindex",0),t.setAttribute("role","button"),M(t,"".concat(g,"-").concat(e)),S(n)||pt(t,ct,e),T(o)&&M(t,Et(o)),-1!==["small","large"].indexOf(i)?M(t,"".concat(g,"-").concat(i)):"play"===e&&M(t,"".concat(g,"-large")),S(n)&&X(t,b,n),r.appendChild(t))}),n.appendChild(r)):M(n,f),s.rotatable||(M(d=n.querySelectorAll('li[class*="rotate"]'),v),A(d,function(t){n.appendChild(t)})),s.inline?(M(o,K),C(i,{zIndex:s.zIndexInline}),"static"===window.getComputedStyle(e).position&&C(e,{position:"relative"}),e.insertBefore(i,t.nextSibling)):(M(o,B),M(i,U),M(i,V),M(i,f),C(i,{zIndex:s.zIndex}),(m=(m=E(m=s.container)?t.ownerDocument.querySelector(m):m)||this.body).appendChild(i)),s.inline&&(this.render(),this.bind(),this.isShown=!0),this.ready=!0,S(s.ready)&&X(t,"ready",s.ready,{once:!0}),!1===q(t,"ready")?this.ready=!1:this.ready&&s.inline&&this.view(this.index))}}])&&n(t.prototype,e),i&&n(t,i),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,i})();return O(e.prototype,i,t,It,St,At),e});
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "viewerjs",
3
3
  "description": "JavaScript image viewer.",
4
- "version": "1.11.8",
4
+ "version": "1.12.0",
5
5
  "main": "dist/viewer.common.js",
6
6
  "module": "dist/viewer.esm.js",
7
7
  "browser": "dist/viewer.js",
@@ -69,7 +69,7 @@
69
69
  "create-banner": "^2.0.0",
70
70
  "cssnano": "^5.1.15",
71
71
  "del-cli": "^5.1.0",
72
- "eslint": "^8.49.0",
72
+ "eslint": "^8.57.1",
73
73
  "eslint-config-airbnb-base": "^15.0.0",
74
74
  "eslint-plugin-import": "^2.32.0",
75
75
  "husky": "^8.0.3",
@@ -83,7 +83,7 @@
83
83
  "lint-staged": "^13.3.0",
84
84
  "mocha": "^9.2.2",
85
85
  "npm-run-all": "^4.1.5",
86
- "postcss": "^8.5.19",
86
+ "postcss": "^8.5.26",
87
87
  "postcss-cli": "^10.1.0",
88
88
  "postcss-header": "^3.0.3",
89
89
  "postcss-import": "^15.1.0",
@@ -69,7 +69,7 @@ export const EVENT_STOP = 'stop';
69
69
  export const DATA_ACTION = `${NAMESPACE}Action`;
70
70
 
71
71
  // RegExps
72
- export const REGEXP_SPACES = /\s\s*/;
72
+ export const REGEXP_SPACES = /\s+/;
73
73
 
74
74
  // Misc
75
75
  export const BUTTONS = [
@@ -444,7 +444,9 @@ export default {
444
444
  clearTimeout(this.doubleClickImageTimeout);
445
445
 
446
446
  if (options.toggleOnDblclick && this.viewed && event.target === this.image) {
447
- if (this.imageClicked) {
447
+ if (this.pointerMoved) {
448
+ this.imageClicked = false;
449
+ } else if (this.imageClicked) {
448
450
  this.imageClicked = false;
449
451
 
450
452
  // This timeout will be cleared later when a native dblclick event is triggering
package/src/js/methods.js CHANGED
@@ -12,6 +12,7 @@ import {
12
12
  EVENT_CLICK,
13
13
  EVENT_ERROR,
14
14
  EVENT_HIDE,
15
+ EVENT_KEY_DOWN,
15
16
  EVENT_LOAD,
16
17
  EVENT_MOVE,
17
18
  EVENT_MOVED,
@@ -1277,7 +1278,8 @@ export default {
1277
1278
  }
1278
1279
 
1279
1280
  if (!options.inline) {
1280
- removeListener(element, EVENT_CLICK, this.onStart);
1281
+ removeListener(element, EVENT_CLICK, this.onElementClick);
1282
+ removeListener(element, EVENT_KEY_DOWN, this.onElementKeyDown);
1281
1283
  }
1282
1284
 
1283
1285
  element[NAMESPACE] = undefined;
package/src/js/others.js CHANGED
@@ -117,6 +117,12 @@ export default {
117
117
 
118
118
  hidden() {
119
119
  const { element, options, viewer } = this;
120
+ const { activeElement } = viewer.ownerDocument;
121
+
122
+ // Avoid keeping focus inside the dialog before setting `aria-hidden`.
123
+ if (activeElement && viewer.contains(activeElement) && isFunction(activeElement.blur)) {
124
+ activeElement.blur();
125
+ }
120
126
 
121
127
  if (options.focus) {
122
128
  this.clearEnforceFocus();
@@ -172,7 +172,7 @@ export function hasClass(element, value) {
172
172
 
173
173
  return element.classList
174
174
  ? element.classList.contains(value)
175
- : element.className.indexOf(value) > -1;
175
+ : element.className.split(REGEXP_SPACES).indexOf(value) > -1;
176
176
  }
177
177
 
178
178
  /**
@@ -228,8 +228,10 @@ export function removeClass(element, value) {
228
228
  return;
229
229
  }
230
230
 
231
- if (element.className.indexOf(value) >= 0) {
232
- element.className = element.className.replace(value, '');
231
+ const { className } = element;
232
+
233
+ if (className && className.indexOf(value) >= 0) {
234
+ element.className = className.split(REGEXP_SPACES).filter((item) => item && item !== value).join(' ');
233
235
  }
234
236
  }
235
237
 
@@ -317,7 +319,7 @@ export function removeData(element, name) {
317
319
  element[name] = undefined;
318
320
  }
319
321
  } else if (element.dataset) {
320
- // #128 Safari not allows to delete dataset property
322
+ // Safari doesn't allow deleting dataset properties
321
323
  try {
322
324
  delete element.dataset[name];
323
325
  } catch (error) {
package/src/js/viewer.js CHANGED
@@ -16,6 +16,7 @@ import {
16
16
  DATA_ACTION,
17
17
  EVENT_CLICK,
18
18
  EVENT_ERROR,
19
+ EVENT_KEY_DOWN,
19
20
  EVENT_LOAD,
20
21
  EVENT_READY,
21
22
  NAMESPACE,
@@ -182,11 +183,22 @@ class Viewer {
182
183
  }
183
184
  });
184
185
  } else {
185
- addListener(element, EVENT_CLICK, (this.onStart = ({ target }) => {
186
+ addListener(element, EVENT_CLICK, (this.onElementClick = ({ target }) => {
186
187
  if (target.localName === 'img' && (!isFunction(options.filter) || options.filter.call(this, target))) {
187
188
  this.view(this.images.indexOf(target));
188
189
  }
189
190
  }));
191
+ addListener(element, EVENT_KEY_DOWN, (this.onElementKeyDown = (event) => {
192
+ const { target, key } = event;
193
+
194
+ if (target.localName === 'img' && (key === 'Enter' || key === ' ')) {
195
+ event.preventDefault();
196
+
197
+ if (!isFunction(options.filter) || options.filter.call(this, target)) {
198
+ this.view(this.images.indexOf(target));
199
+ }
200
+ }
201
+ }));
190
202
  }
191
203
  }
192
204
 
package/types/index.d.ts CHANGED
@@ -1,10 +1,15 @@
1
1
  declare namespace Viewer {
2
2
  export type Visibility = 0 | 1 | 2 | 3 | 4;
3
3
  export type ToolbarButtonSize = 'small' | 'medium' | 'large';
4
- export type ToolbarOption = boolean | Visibility | ToolbarButtonSize | Function | ToolbarButtonOptions | undefined;
4
+ export type EventHandler<T extends Event = CustomEvent> = (event: T) => void;
5
+ export type Filter = (this: Viewer, image: HTMLImageElement) => boolean;
6
+ export type TitleRenderer = (this: Viewer, image: HTMLImageElement, imageData: Record<string, any>) => string;
7
+ export type ImageURLResolver = (this: Viewer, image: HTMLImageElement) => string;
8
+ export type ToolbarButtonClick = (this: Viewer, event: Event) => void;
9
+ export type ToolbarOption = boolean | Visibility | ToolbarButtonSize | ToolbarButtonOptions | undefined;
5
10
 
6
11
  export interface ToolbarButtonOptions {
7
- click?: Function,
12
+ click?: ToolbarButtonClick,
8
13
  show?: boolean | Visibility;
9
14
  size?: ToolbarButtonSize,
10
15
  }
@@ -25,8 +30,8 @@ declare namespace Viewer {
25
30
  }
26
31
 
27
32
  export interface Pivot {
28
- x: Number;
29
- y: Number;
33
+ x: number;
34
+ y: number;
30
35
  }
31
36
 
32
37
  export interface MoveEventData {
@@ -37,26 +42,18 @@ declare namespace Viewer {
37
42
  originalEvent: PointerEvent | TouchEvent | MouseEvent | null;
38
43
  }
39
44
 
40
- export interface MoveEvent extends CustomEvent {
41
- detail: MoveEventData;
42
- }
45
+ export interface MoveEvent extends CustomEvent<MoveEventData> {}
43
46
 
44
- export interface MovedEvent extends CustomEvent {
45
- detail: MoveEventData;
46
- }
47
+ export interface MovedEvent extends CustomEvent<MoveEventData> {}
47
48
 
48
49
  export interface RotateEventData {
49
50
  degree: number;
50
51
  oldDegree: number;
51
52
  }
52
53
 
53
- export interface RotateEvent extends CustomEvent {
54
- detail: RotateEventData;
55
- }
54
+ export interface RotateEvent extends CustomEvent<RotateEventData> {}
56
55
 
57
- export interface RotatedEvent extends CustomEvent {
58
- detail: RotateEventData;
59
- }
56
+ export interface RotatedEvent extends CustomEvent<RotateEventData> {}
60
57
 
61
58
  export interface ScaleEventData {
62
59
  scaleX: number;
@@ -65,13 +62,9 @@ declare namespace Viewer {
65
62
  oldScaleY: number;
66
63
  }
67
64
 
68
- export interface ScaleEvent extends CustomEvent {
69
- detail: ScaleEventData;
70
- }
65
+ export interface ScaleEvent extends CustomEvent<ScaleEventData> {}
71
66
 
72
- export interface ScaledEvent extends CustomEvent {
73
- detail: ScaleEventData;
74
- }
67
+ export interface ScaledEvent extends CustomEvent<ScaleEventData> {}
75
68
 
76
69
  export interface ZoomEventData {
77
70
  ratio: number;
@@ -79,24 +72,20 @@ declare namespace Viewer {
79
72
  originalEvent: WheelEvent | PointerEvent | TouchEvent | MouseEvent | null;
80
73
  }
81
74
 
82
- export interface ZoomEvent extends CustomEvent {
83
- detail: ZoomEventData;
84
- }
75
+ export interface ZoomEvent extends CustomEvent<ZoomEventData> {}
85
76
 
86
- export interface ZoomedEvent extends CustomEvent {
87
- detail: ZoomEventData;
88
- }
77
+ export interface ZoomedEvent extends CustomEvent<ZoomEventData> {}
89
78
 
90
79
  export interface Options {
91
80
  backdrop?: boolean | string;
92
81
  button?: boolean;
93
82
  className?: string;
94
83
  container?: string | HTMLElement;
95
- filter?: Function;
84
+ filter?: Filter | null;
96
85
  fullscreen?: boolean | FullscreenOptions;
97
86
  focus?: boolean;
98
- hidden?(event: CustomEvent): void;
99
- hide?(event: CustomEvent): void;
87
+ hidden?: EventHandler;
88
+ hide?: EventHandler;
100
89
  inheritedAttributes?: string[];
101
90
  initialCoverage?: number;
102
91
  initialViewIndex?: number;
@@ -110,37 +99,37 @@ declare namespace Viewer {
110
99
  minWidth?: number;
111
100
  minZoomRatio?: number;
112
101
  movable?: boolean;
113
- move?(event: MoveEvent): void;
114
- moved?(event: MovedEvent): void;
102
+ move?: EventHandler<MoveEvent>;
103
+ moved?: EventHandler<MovedEvent>;
115
104
  navbar?: boolean | Visibility;
116
- play?(event: CustomEvent): void;
117
- ready?(event: CustomEvent): void;
105
+ play?: EventHandler;
106
+ ready?: EventHandler;
118
107
  rotatable?: boolean;
119
- rotate?(event: RotateEvent): void;
120
- rotated?(event: RotatedEvent): void;
108
+ rotate?: EventHandler<RotateEvent>;
109
+ rotated?: EventHandler<RotatedEvent>;
121
110
  scalable?: boolean;
122
- scale?(event: ScaleEvent): void;
123
- scaled?(event: ScaledEvent): void;
124
- show?(event: CustomEvent): void;
125
- shown?(event: CustomEvent): void;
111
+ scale?: EventHandler<ScaleEvent>;
112
+ scaled?: EventHandler<ScaledEvent>;
113
+ show?: EventHandler;
114
+ shown?: EventHandler;
126
115
  slideOnTouch?: boolean;
127
- stop?(event: CustomEvent): void;
128
- title?: boolean | Visibility | Function | [Visibility, Function];
116
+ stop?: EventHandler;
117
+ title?: boolean | Visibility | TitleRenderer | [Visibility, TitleRenderer] | null;
129
118
  toggleOnDblclick?: boolean;
130
119
  toolbar?: boolean | Visibility | ToolbarOptions;
131
120
  tooltip?: boolean;
132
121
  transition?: boolean;
133
- url?: string | Function;
134
- view?(event: CustomEvent): void;
135
- viewed?(event: CustomEvent): void;
122
+ url?: string | ImageURLResolver;
123
+ view?: EventHandler;
124
+ viewed?: EventHandler;
136
125
  zIndex?: number;
137
126
  zIndexInline?: number;
138
- zoom?(event: ZoomEvent): void;
127
+ zoom?: EventHandler<ZoomEvent>;
139
128
  zoomOnTouch?: boolean;
140
129
  zoomOnWheel?: boolean;
141
130
  zoomRatio?: number;
142
131
  zoomable?: boolean;
143
- zoomed?(event: ZoomedEvent): void;
132
+ zoomed?: EventHandler<ZoomedEvent>;
144
133
  }
145
134
  }
146
135