viewerjs 1.13.0 → 1.14.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/src/js/viewer.js CHANGED
@@ -64,6 +64,7 @@ class Viewer {
64
64
  this.ownerDocument = element.ownerDocument || element.host.ownerDocument;
65
65
  this.options = assign({}, DEFAULTS, isPlainObject(options) && options);
66
66
  this.action = false;
67
+ this.actionEvent = null;
67
68
  this.fading = false;
68
69
  this.fulled = false;
69
70
  this.hiding = false;
@@ -185,8 +186,11 @@ class Viewer {
185
186
  }
186
187
  });
187
188
  } else {
188
- addListener(element, EVENT_CLICK, (this.onElementClick = ({ target }) => {
189
+ addListener(element, EVENT_CLICK, (this.onElementClick = (event) => {
190
+ const { target } = event;
191
+
189
192
  if (target.localName === 'img' && (!isFunction(options.filter) || options.filter.call(this, target))) {
193
+ this.actionEvent = event;
190
194
  this.view(this.images.indexOf(target));
191
195
  }
192
196
  }));
@@ -197,6 +201,7 @@ class Viewer {
197
201
  event.preventDefault();
198
202
 
199
203
  if (!isFunction(options.filter) || options.filter.call(this, target)) {
204
+ this.actionEvent = event;
200
205
  this.view(this.images.indexOf(target));
201
206
  }
202
207
  }
@@ -243,6 +248,10 @@ class Viewer {
243
248
  addClass(title, !options.title ? CLASS_HIDE : getResponsiveClass(Array.isArray(options.title)
244
249
  ? options.title[0]
245
250
  : options.title));
251
+
252
+ if (options.title) {
253
+ title.removeAttribute('aria-hidden');
254
+ }
246
255
  const navbarOptions = isPlainObject(options.navbar) ? options.navbar : {};
247
256
  let navbarShow = options.navbar;
248
257
  const navbarSize = !isUndefined(navbarOptions.size) ? navbarOptions.size : options.navbar;
@@ -253,6 +262,10 @@ class Viewer {
253
262
 
254
263
  addClass(navbar, !navbarShow ? CLASS_HIDE : getResponsiveClass(navbarShow));
255
264
 
265
+ if (navbarShow) {
266
+ navbar.removeAttribute('aria-hidden');
267
+ }
268
+
256
269
  if (['small', 'medium', 'large'].indexOf(navbarSize) !== -1) {
257
270
  addClass(navbar, `${NAMESPACE}-${navbarSize}`);
258
271
  }
@@ -284,8 +297,16 @@ class Viewer {
284
297
  );
285
298
  }
286
299
 
300
+ if (options.navigation) {
301
+ navigation.removeAttribute('aria-hidden');
302
+ }
303
+
287
304
  toggleClass(button, CLASS_HIDE, !options.button);
288
305
 
306
+ if (options.button) {
307
+ button.removeAttribute('aria-hidden');
308
+ }
309
+
289
310
  if (options.keyboard) {
290
311
  button.setAttribute('tabindex', 0);
291
312
  forEach(navigation.querySelectorAll('[role="button"]'), (item) => {
@@ -319,6 +340,8 @@ class Viewer {
319
340
  addClass(toolbar, getResponsiveClass(options.toolbar));
320
341
  }
321
342
 
343
+ toolbar.removeAttribute('aria-hidden');
344
+
322
345
  forEach(custom ? options.toolbar : BUTTONS, (value, index) => {
323
346
  const deep = custom && isPlainObject(value);
324
347
  const name = custom ? hyphenate(index) : value;
@@ -370,6 +393,12 @@ class Viewer {
370
393
  addClass(toolbar, CLASS_HIDE);
371
394
  }
372
395
 
396
+ if (options.title || navbarShow || options.toolbar) {
397
+ this.footer.removeAttribute('aria-hidden');
398
+ } else {
399
+ addClass(this.footer, CLASS_HIDE);
400
+ }
401
+
373
402
  if (!options.rotatable) {
374
403
  const rotates = toolbar.querySelectorAll('li[class*="rotate"]');
375
404
 
package/types/index.d.ts CHANGED
@@ -1,6 +1,7 @@
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 WheelModifierKey = 'ctrl' | 'shift' | 'alt' | 'meta' | (string & {});
4
5
  export type EventHandler<T extends Event = CustomEvent> = (event: T) => void;
5
6
  export type Filter = (this: Viewer, image: HTMLImageElement) => boolean;
6
7
  export type TitleRenderer = (this: Viewer, image: HTMLImageElement, imageData: Record<string, any>) => string;
@@ -88,6 +89,7 @@ declare namespace Viewer {
88
89
  export interface RotateEventData {
89
90
  degree: number;
90
91
  oldDegree: number;
92
+ originalEvent: Event | null;
91
93
  }
92
94
 
93
95
  export interface RotateEvent extends CustomEvent<RotateEventData> {}
@@ -99,12 +101,61 @@ declare namespace Viewer {
99
101
  scaleY: number;
100
102
  oldScaleX: number;
101
103
  oldScaleY: number;
104
+ originalEvent: Event | null;
102
105
  }
103
106
 
104
107
  export interface ScaleEvent extends CustomEvent<ScaleEventData> {}
105
108
 
106
109
  export interface ScaledEvent extends CustomEvent<ScaleEventData> {}
107
110
 
111
+ export interface ViewEventData {
112
+ image: HTMLImageElement;
113
+ index: number;
114
+ originalImage: HTMLImageElement;
115
+ originalEvent: Event | null;
116
+ }
117
+
118
+ export interface ViewEvent extends CustomEvent<ViewEventData> {}
119
+
120
+ export interface ViewedEvent extends CustomEvent<ViewEventData> {}
121
+
122
+ export interface ShowEventData {
123
+ originalEvent: Event | null;
124
+ }
125
+
126
+ export interface ShowEvent extends CustomEvent<ShowEventData> {}
127
+
128
+ export interface ShownEvent extends CustomEvent<ShowEventData> {}
129
+
130
+ export interface HideEventData {
131
+ originalEvent: Event | null;
132
+ }
133
+
134
+ export interface HideEvent extends CustomEvent<HideEventData> {}
135
+
136
+ export interface HiddenEvent extends CustomEvent<HideEventData> {}
137
+
138
+ export interface PlayEventData {
139
+ originalEvent: Event | null;
140
+ }
141
+
142
+ export interface PlayEvent extends CustomEvent<PlayEventData> {}
143
+
144
+ export interface PlayingEventData {
145
+ image: HTMLImageElement;
146
+ index: number;
147
+ originalImage: HTMLImageElement;
148
+ originalEvent: Event | null;
149
+ }
150
+
151
+ export interface PlayingEvent extends CustomEvent<PlayingEventData> {}
152
+
153
+ export interface StopEventData {
154
+ originalEvent: Event | null;
155
+ }
156
+
157
+ export interface StopEvent extends CustomEvent<StopEventData> {}
158
+
108
159
  export interface ZoomEventData {
109
160
  ratio: number;
110
161
  oldRatio: number;
@@ -123,8 +174,8 @@ declare namespace Viewer {
123
174
  filter?: Filter | null;
124
175
  fullscreen?: boolean | FullscreenOptions;
125
176
  focus?: boolean;
126
- hidden?: EventHandler;
127
- hide?: EventHandler;
177
+ hidden?: EventHandler<HiddenEvent>;
178
+ hide?: EventHandler<HideEvent>;
128
179
  inheritedAttributes?: string[];
129
180
  initialCoverage?: number;
130
181
  initialViewIndex?: number;
@@ -144,7 +195,8 @@ declare namespace Viewer {
144
195
  moved?: EventHandler<MovedEvent>;
145
196
  navbar?: NavbarOption;
146
197
  navigation?: boolean | Visibility | NavigationOptions;
147
- play?: EventHandler;
198
+ play?: EventHandler<PlayEvent>;
199
+ playing?: EventHandler<PlayingEvent>;
148
200
  preload?: boolean;
149
201
  ready?: EventHandler;
150
202
  rotatable?: boolean;
@@ -155,24 +207,25 @@ declare namespace Viewer {
155
207
  scalable?: boolean;
156
208
  scale?: EventHandler<ScaleEvent>;
157
209
  scaled?: EventHandler<ScaledEvent>;
158
- show?: EventHandler;
159
- shown?: EventHandler;
210
+ show?: EventHandler<ShowEvent>;
211
+ shown?: EventHandler<ShownEvent>;
160
212
  slideOnTouch?: boolean;
161
- stop?: EventHandler;
213
+ slideOnWheel?: boolean | WheelModifierKey;
214
+ stop?: EventHandler<StopEvent>;
162
215
  title?: boolean | Visibility | TitleRenderer | [Visibility, TitleRenderer] | null;
163
216
  toggleOnDblclick?: boolean;
164
217
  toolbar?: boolean | Visibility | ToolbarOptions;
165
218
  tooltip?: boolean;
166
219
  transition?: boolean | TransitionOptions;
167
220
  url?: string | ImageURLResolver;
168
- view?: EventHandler;
169
- viewed?: EventHandler;
221
+ view?: EventHandler<ViewEvent>;
222
+ viewed?: EventHandler<ViewedEvent>;
170
223
  zIndex?: number;
171
224
  zIndexInline?: number;
172
225
  zoom?: EventHandler<ZoomEvent>;
173
226
  zoomOnGesture?: boolean;
174
227
  zoomOnTouch?: boolean;
175
- zoomOnWheel?: boolean;
228
+ zoomOnWheel?: boolean | WheelModifierKey;
176
229
  zoomRatio?: number;
177
230
  zoomable?: boolean;
178
231
  zoomed?: EventHandler<ZoomedEvent>;