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/README.md +58 -8
- package/dist/viewer.common.js +282 -104
- package/dist/viewer.css +2 -2
- package/dist/viewer.esm.js +282 -104
- package/dist/viewer.js +282 -104
- package/dist/viewer.min.css +2 -2
- package/dist/viewer.min.js +3 -3
- package/package.json +1 -1
- package/src/js/constants.js +1 -0
- package/src/js/defaults.js +16 -1
- package/src/js/events.js +2 -2
- package/src/js/handlers.js +39 -5
- package/src/js/methods.js +195 -78
- package/src/js/others.js +22 -7
- package/src/js/render.js +4 -0
- package/src/js/template.js +7 -7
- package/src/js/utilities.js +27 -0
- package/src/js/viewer.js +30 -1
- package/types/index.d.ts +62 -9
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 = (
|
|
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
|
-
|
|
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>;
|