@ks89/angular-modal-gallery 8.0.0-beta.5 → 9.0.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/CHANGELOG.md +153 -0
- package/CONTRIBUTING.md +20 -38
- package/LICENSE +1 -1
- package/README.md +36 -42
- package/esm2020/ks89-angular-modal-gallery.mjs +5 -0
- package/esm2020/lib/components/accessibility-default.mjs +41 -0
- package/esm2020/lib/components/accessible.component.mjs +130 -0
- package/esm2020/lib/components/carousel/carousel-previews/carousel-previews.component.mjs +462 -0
- package/esm2020/lib/components/carousel/carousel.component.mjs +747 -0
- package/esm2020/lib/components/components.mjs +50 -0
- package/esm2020/lib/components/current-image/current-image.component.mjs +616 -0
- package/esm2020/lib/components/current-image/loading-spinner/loading-spinner.component.mjs +80 -0
- package/esm2020/lib/components/dots/dots.component.mjs +127 -0
- package/esm2020/lib/components/modal-gallery/modal-gallery-ref.mjs +103 -0
- package/esm2020/lib/components/modal-gallery/modal-gallery.component.mjs +523 -0
- package/esm2020/lib/components/modal-gallery/modal-gallery.service.mjs +187 -0
- package/esm2020/lib/components/modal-gallery/modal-gallery.tokens.mjs +26 -0
- package/esm2020/lib/components/plain-gallery/plain-gallery.component.mjs +249 -0
- package/esm2020/lib/components/previews/previews.component.mjs +332 -0
- package/esm2020/lib/components/upper-buttons/upper-buttons-default.mjs +76 -0
- package/esm2020/lib/components/upper-buttons/upper-buttons.component.mjs +249 -0
- package/esm2020/lib/directives/a-tag-bg-image.directive.mjs +78 -0
- package/esm2020/lib/directives/click-outside.directive.mjs +91 -0
- package/esm2020/lib/directives/description.directive.mjs +98 -0
- package/esm2020/lib/directives/direction.directive.mjs +73 -0
- package/esm2020/lib/directives/directives.mjs +49 -0
- package/esm2020/lib/directives/fallback-image.directive.mjs +59 -0
- package/esm2020/lib/directives/keyboard-navigation.directive.mjs +58 -0
- package/esm2020/lib/directives/margin.directive.mjs +84 -0
- package/esm2020/lib/directives/max-size.directive.mjs +75 -0
- package/esm2020/lib/directives/size.directive.mjs +76 -0
- package/{esm2015/lib/directives/size.directive.js → esm2020/lib/directives/wrap.directive.mjs} +23 -22
- package/esm2020/lib/modal-gallery.module.mjs +94 -0
- package/esm2020/lib/model/accessibility.interface.mjs +25 -0
- package/esm2020/lib/model/action.enum.mjs +36 -0
- package/esm2020/lib/model/buttons-config.interface.mjs +62 -0
- package/esm2020/lib/model/carousel-config.interface.mjs +25 -0
- package/esm2020/lib/model/carousel-image-config.interface.mjs +25 -0
- package/esm2020/lib/model/carousel-preview-config.interface.mjs +25 -0
- package/{esm2015/lib/model/keyboard-service-config.interface.js → esm2020/lib/model/current-image-config.interface.mjs} +2 -2
- package/esm2020/lib/model/description.interface.mjs +33 -0
- package/{esm2015/lib/model/preview-config.interface.js → esm2020/lib/model/dots-config.interface.mjs} +2 -2
- package/esm2020/lib/model/image-internal.class.mjs +35 -0
- package/esm2020/lib/model/image.class.mjs +54 -0
- package/esm2020/lib/model/interaction-event.interface.mjs +2 -0
- package/esm2020/lib/model/keyboard-config.interface.mjs +25 -0
- package/esm2020/lib/model/keyboard-service-config.interface.mjs +25 -0
- package/esm2020/lib/model/keyboard.enum.mjs +35 -0
- package/esm2020/lib/model/lib-config.interface.mjs +25 -0
- package/esm2020/lib/model/loading-config.interface.mjs +37 -0
- package/{esm2015/lib/model/dots-config.interface.js → esm2020/lib/model/max-size.interface.mjs} +2 -2
- package/{esm2015/lib/model/carousel-preview-config.interface.js → esm2020/lib/model/modal-gallery-config.interface.mjs} +2 -2
- package/esm2020/lib/model/plain-gallery-config.interface.mjs +55 -0
- package/{esm2015/lib/model/image-internal.class.js → esm2020/lib/model/play-config.interface.mjs} +3 -13
- package/esm2020/lib/model/preview-config.interface.mjs +25 -0
- package/esm2020/lib/model/size.interface.mjs +25 -0
- package/{esm2015/lib/model/carousel-config.interface.js → esm2020/lib/model/slide-config.interface.mjs} +2 -2
- package/esm2020/lib/services/config.service.mjs +396 -0
- package/esm2020/lib/services/id-validator.service.mjs +71 -0
- package/esm2020/lib/services/keyboard.service.mjs +111 -0
- package/esm2020/lib/utils/image.util.mjs +48 -0
- package/esm2020/lib/utils/user-input.util.mjs +104 -0
- package/esm2020/public-api.mjs +42 -0
- package/fesm2015/ks89-angular-modal-gallery.mjs +5782 -0
- package/fesm2015/ks89-angular-modal-gallery.mjs.map +1 -0
- package/{fesm2015/ks89-angular-modal-gallery.js → fesm2020/ks89-angular-modal-gallery.mjs} +3046 -2947
- package/fesm2020/ks89-angular-modal-gallery.mjs.map +1 -0
- package/ks89-angular-modal-gallery.d.ts +1 -24
- package/lib/components/accessible.component.d.ts +5 -2
- package/lib/components/carousel/carousel-previews/carousel-previews.component.d.ts +7 -11
- package/lib/components/carousel/carousel.component.d.ts +28 -67
- package/lib/components/current-image/current-image.component.d.ts +10 -4
- package/lib/components/current-image/loading-spinner/loading-spinner.component.d.ts +3 -0
- package/lib/components/dots/dots.component.d.ts +7 -0
- package/lib/components/modal-gallery/modal-gallery-ref.d.ts +35 -0
- package/lib/components/modal-gallery/modal-gallery.component.d.ts +58 -50
- package/lib/components/modal-gallery/modal-gallery.service.d.ts +60 -1
- package/lib/components/plain-gallery/plain-gallery.component.d.ts +18 -9
- package/lib/components/previews/previews.component.d.ts +9 -0
- package/lib/components/upper-buttons/upper-buttons.component.d.ts +8 -1
- package/lib/directives/a-tag-bg-image.directive.d.ts +3 -0
- package/lib/directives/click-outside.directive.d.ts +3 -0
- package/lib/directives/description.directive.d.ts +3 -0
- package/lib/directives/direction.directive.d.ts +3 -0
- package/lib/directives/fallback-image.directive.d.ts +6 -0
- package/lib/directives/keyboard-navigation.directive.d.ts +4 -1
- package/lib/directives/margin.directive.d.ts +3 -0
- package/lib/directives/max-size.directive.d.ts +3 -0
- package/lib/directives/size.directive.d.ts +5 -2
- package/lib/directives/wrap.directive.d.ts +4 -1
- package/lib/modal-gallery.module.d.ts +28 -0
- package/lib/model/carousel-config.interface.d.ts +0 -1
- package/lib/model/keyboard-config.interface.d.ts +4 -4
- package/lib/model/keyboard.enum.d.ts +11 -8
- package/lib/model/lib-config.interface.d.ts +20 -7
- package/lib/model/modal-gallery-config.interface.d.ts +2 -2
- package/lib/model/plain-gallery-config.interface.d.ts +1 -9
- package/lib/services/config.service.d.ts +3 -0
- package/lib/services/id-validator.service.d.ts +5 -1
- package/lib/services/keyboard.service.d.ts +5 -2
- package/lib/utils/user-input.util.d.ts +35 -26
- package/package.json +28 -16
- package/public-api.d.ts +2 -2
- package/bundles/ks89-angular-modal-gallery.umd.js +0 -5906
- package/bundles/ks89-angular-modal-gallery.umd.js.map +0 -1
- package/bundles/ks89-angular-modal-gallery.umd.min.js +0 -16
- package/bundles/ks89-angular-modal-gallery.umd.min.js.map +0 -1
- package/esm2015/ks89-angular-modal-gallery.js +0 -29
- package/esm2015/lib/components/accessibility-default.js +0 -41
- package/esm2015/lib/components/accessible.component.js +0 -127
- package/esm2015/lib/components/carousel/carousel-previews/carousel-previews.component.js +0 -466
- package/esm2015/lib/components/carousel/carousel.component.js +0 -772
- package/esm2015/lib/components/components.js +0 -50
- package/esm2015/lib/components/current-image/current-image.component.js +0 -590
- package/esm2015/lib/components/current-image/loading-spinner/loading-spinner.component.js +0 -80
- package/esm2015/lib/components/dots/dots.component.js +0 -127
- package/esm2015/lib/components/modal-gallery/modal-gallery-ref.js +0 -45
- package/esm2015/lib/components/modal-gallery/modal-gallery.component.js +0 -534
- package/esm2015/lib/components/modal-gallery/modal-gallery.service.js +0 -135
- package/esm2015/lib/components/modal-gallery/modal-gallery.tokens.js +0 -3
- package/esm2015/lib/components/plain-gallery/plain-gallery.component.js +0 -243
- package/esm2015/lib/components/previews/previews.component.js +0 -331
- package/esm2015/lib/components/upper-buttons/upper-buttons-default.js +0 -76
- package/esm2015/lib/components/upper-buttons/upper-buttons.component.js +0 -256
- package/esm2015/lib/directives/a-tag-bg-image.directive.js +0 -78
- package/esm2015/lib/directives/click-outside.directive.js +0 -85
- package/esm2015/lib/directives/description.directive.js +0 -99
- package/esm2015/lib/directives/direction.directive.js +0 -73
- package/esm2015/lib/directives/directives.js +0 -49
- package/esm2015/lib/directives/fallback-image.directive.js +0 -54
- package/esm2015/lib/directives/keyboard-navigation.directive.js +0 -52
- package/esm2015/lib/directives/margin.directive.js +0 -82
- package/esm2015/lib/directives/max-size.directive.js +0 -76
- package/esm2015/lib/directives/wrap.directive.js +0 -74
- package/esm2015/lib/modal-gallery.module.js +0 -64
- package/esm2015/lib/model/accessibility.interface.js +0 -25
- package/esm2015/lib/model/action.enum.js +0 -36
- package/esm2015/lib/model/buttons-config.interface.js +0 -66
- package/esm2015/lib/model/carousel-image-config.interface.js +0 -25
- package/esm2015/lib/model/current-image-config.interface.js +0 -25
- package/esm2015/lib/model/description.interface.js +0 -33
- package/esm2015/lib/model/image.class.js +0 -54
- package/esm2015/lib/model/interaction-event.interface.js +0 -2
- package/esm2015/lib/model/keyboard-config.interface.js +0 -25
- package/esm2015/lib/model/keyboard.enum.js +0 -35
- package/esm2015/lib/model/lib-config.interface.js +0 -25
- package/esm2015/lib/model/loading-config.interface.js +0 -37
- package/esm2015/lib/model/max-size.interface.js +0 -25
- package/esm2015/lib/model/modal-gallery-config.interface.js +0 -25
- package/esm2015/lib/model/plain-gallery-config.interface.js +0 -64
- package/esm2015/lib/model/play-config.interface.js +0 -25
- package/esm2015/lib/model/size.interface.js +0 -25
- package/esm2015/lib/model/slide-config.interface.js +0 -25
- package/esm2015/lib/services/config.service.js +0 -392
- package/esm2015/lib/services/id-validator.service.js +0 -71
- package/esm2015/lib/services/keyboard.service.js +0 -108
- package/esm2015/lib/utils/image.util.js +0 -48
- package/esm2015/lib/utils/user-input.util.js +0 -95
- package/esm2015/public-api.js +0 -46
- package/fesm2015/ks89-angular-modal-gallery.js.map +0 -1
- package/ks89-angular-modal-gallery.metadata.json +0 -1
|
@@ -1,331 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
The MIT License (MIT)
|
|
3
|
-
|
|
4
|
-
Copyright (c) 2017-2020 Stefano Cappa (Ks89)
|
|
5
|
-
|
|
6
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
8
|
-
in the Software without restriction, including without limitation the rights
|
|
9
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
11
|
-
furnished to do so, subject to the following conditions:
|
|
12
|
-
|
|
13
|
-
The above copyright notice and this permission notice shall be included in all
|
|
14
|
-
copies or substantial portions of the Software.
|
|
15
|
-
|
|
16
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
|
-
SOFTWARE.
|
|
23
|
-
*/
|
|
24
|
-
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
|
|
25
|
-
import { AccessibleComponent } from '../accessible.component';
|
|
26
|
-
import { ImageModalEvent } from '../../model/image.class';
|
|
27
|
-
import { NEXT, PREV } from '../../utils/user-input.util';
|
|
28
|
-
import { getIndex } from '../../utils/image.util';
|
|
29
|
-
import { Action } from '../../model/action.enum';
|
|
30
|
-
import { ConfigService, DEFAULT_PREVIEW_SIZE } from '../../services/config.service';
|
|
31
|
-
/**
|
|
32
|
-
* Component with image previews
|
|
33
|
-
*/
|
|
34
|
-
export class PreviewsComponent extends AccessibleComponent {
|
|
35
|
-
constructor(configService) {
|
|
36
|
-
super();
|
|
37
|
-
this.configService = configService;
|
|
38
|
-
/**
|
|
39
|
-
* Output to emit the clicked preview. The payload contains the `ImageEvent` associated to the clicked preview.
|
|
40
|
-
*/
|
|
41
|
-
this.clickPreview = new EventEmitter();
|
|
42
|
-
/**
|
|
43
|
-
* Enum of type `Action` that represents a mouse click on a button.
|
|
44
|
-
* Declared here to be used inside the template.
|
|
45
|
-
*/
|
|
46
|
-
this.clickAction = Action.CLICK;
|
|
47
|
-
/**
|
|
48
|
-
* Enum of type `Action` that represents a keyboard action.
|
|
49
|
-
* Declared here to be used inside the template.
|
|
50
|
-
*/
|
|
51
|
-
this.keyboardAction = Action.KEYBOARD;
|
|
52
|
-
/**
|
|
53
|
-
* Array of `InternalLibImage` exposed to the template. This field is initialized
|
|
54
|
-
* applying transformations, default values and so on to the input of the same type.
|
|
55
|
-
*/
|
|
56
|
-
this.previews = [];
|
|
57
|
-
this.defaultPreviewSize = DEFAULT_PREVIEW_SIZE;
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Method ´ngOnInit´ to build `configPreview` applying a default value and also to
|
|
61
|
-
* init the `previews` array.
|
|
62
|
-
* This is an Angular's lifecycle hook, so its called automatically by Angular itself.
|
|
63
|
-
* In particular, it's called only one time!!!
|
|
64
|
-
*/
|
|
65
|
-
ngOnInit() {
|
|
66
|
-
if (!this.id) {
|
|
67
|
-
throw new Error('Internal library error - id must be defined');
|
|
68
|
-
}
|
|
69
|
-
const libConfig = this.configService.getConfig(this.id);
|
|
70
|
-
if (!libConfig) {
|
|
71
|
-
throw new Error('Internal library error - libConfig must be defined');
|
|
72
|
-
}
|
|
73
|
-
this.accessibilityConfig = libConfig.accessibilityConfig;
|
|
74
|
-
this.slideConfig = libConfig.slideConfig;
|
|
75
|
-
this.previewConfig = libConfig.previewConfig;
|
|
76
|
-
if (!this.currentImage || !this.images) {
|
|
77
|
-
throw new Error('Internal library error - currentImage and images must be defined');
|
|
78
|
-
}
|
|
79
|
-
this.initPreviews(this.currentImage, this.images);
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Method to check if an image is active (i.e. a preview image).
|
|
83
|
-
* @param InternalLibImage preview is an image to check if it's active or not
|
|
84
|
-
* @returns boolean true if is active, false otherwise
|
|
85
|
-
*/
|
|
86
|
-
isActive(preview) {
|
|
87
|
-
if (!preview || !this.currentImage) {
|
|
88
|
-
return false;
|
|
89
|
-
}
|
|
90
|
-
return preview.id === this.currentImage.id;
|
|
91
|
-
}
|
|
92
|
-
// TODO improve this method to simplify the sourcecode + remove duplicated codelines
|
|
93
|
-
/**
|
|
94
|
-
* Method ´ngOnChanges´ to update `previews` array.
|
|
95
|
-
* Also, both `start` and `end` local variables will be updated accordingly.
|
|
96
|
-
* This is an Angular's lifecycle hook, so its called automatically by Angular itself.
|
|
97
|
-
* In particular, it's called when any data-bound property of a directive changes!!!
|
|
98
|
-
*/
|
|
99
|
-
ngOnChanges(changes) {
|
|
100
|
-
const images = changes.images;
|
|
101
|
-
const currentImage = changes.currentImage;
|
|
102
|
-
let prev;
|
|
103
|
-
let current;
|
|
104
|
-
if (currentImage) {
|
|
105
|
-
prev = currentImage.previousValue;
|
|
106
|
-
current = currentImage.currentValue;
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
current = this.currentImage;
|
|
110
|
-
}
|
|
111
|
-
if (current && images && images.previousValue && images.currentValue) {
|
|
112
|
-
// I'm in this if statement, if input images are changed (for instance, because I removed one of them with the 'delete button',
|
|
113
|
-
// or because users changed the images array while modal gallery is still open).
|
|
114
|
-
// In this case, I have to re-init previews, because the input array of images is changed.
|
|
115
|
-
this.initPreviews(current, images.currentValue);
|
|
116
|
-
}
|
|
117
|
-
if (prev && current && prev.id !== current.id) {
|
|
118
|
-
this.updatePreviews(prev, current);
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Method called by events from both keyboard and mouse on a preview.
|
|
123
|
-
* This will trigger the `clickpreview` output with the input preview as its payload.
|
|
124
|
-
* @param InternalLibImage preview that triggered this method
|
|
125
|
-
* @param KeyboardEvent | MouseEvent event payload
|
|
126
|
-
*/
|
|
127
|
-
onImageEvent(preview, event, action = Action.NORMAL) {
|
|
128
|
-
if (!this.id || !this.images) {
|
|
129
|
-
throw new Error('Internal library error - id and images must be defined');
|
|
130
|
-
}
|
|
131
|
-
if (!this.previewConfig || !this.previewConfig.clickable) {
|
|
132
|
-
return;
|
|
133
|
-
}
|
|
134
|
-
const result = super.handleImageEvent(event);
|
|
135
|
-
if (result === NEXT || result === PREV) {
|
|
136
|
-
this.clickPreview.emit(new ImageModalEvent(this.id, action, getIndex(preview, this.images)));
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Method called by events from both keyboard and mouse on a navigation arrow.
|
|
141
|
-
* It also emits an event to specify which arrow.
|
|
142
|
-
* @param string direction of the navigation that can be either 'next' or 'prev'
|
|
143
|
-
* @param KeyboardEvent | MouseEvent event payload
|
|
144
|
-
*/
|
|
145
|
-
onNavigationEvent(direction, event, action = Action.NORMAL) {
|
|
146
|
-
const result = super.handleNavigationEvent(direction, event);
|
|
147
|
-
if (result === NEXT) {
|
|
148
|
-
// this.clickArrow.emit(<InteractionEvent>{ source: 'modal-previews', payload: DIRECTION_RIGHT, action: action });
|
|
149
|
-
this.next();
|
|
150
|
-
}
|
|
151
|
-
else if (result === PREV) {
|
|
152
|
-
// this.clickArrow.emit(<InteractionEvent>{ source: 'modal-previews', payload: DIRECTION_LEFT, action: action });
|
|
153
|
-
this.previous();
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* Method used in the template to track ids in ngFor.
|
|
158
|
-
* @param number index of the array
|
|
159
|
-
* @param Image item of the array
|
|
160
|
-
* @returns number the id of the item
|
|
161
|
-
*/
|
|
162
|
-
trackById(index, item) {
|
|
163
|
-
return item.id;
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Private method to init previews based on the currentImage and the full array of images.
|
|
167
|
-
* The current image in mandatory to show always the current preview (as highlighted).
|
|
168
|
-
* @param InternalLibImage currentImage to decide how to show previews, because I always want to see the current image as highlighted
|
|
169
|
-
* @param InternalLibImage[] images is the array of all images.
|
|
170
|
-
*/
|
|
171
|
-
initPreviews(currentImage, images) {
|
|
172
|
-
let index;
|
|
173
|
-
try {
|
|
174
|
-
index = getIndex(currentImage, images);
|
|
175
|
-
}
|
|
176
|
-
catch (err) {
|
|
177
|
-
throw err;
|
|
178
|
-
}
|
|
179
|
-
switch (index) {
|
|
180
|
-
case 0:
|
|
181
|
-
// first image
|
|
182
|
-
this.setBeginningIndexesPreviews();
|
|
183
|
-
break;
|
|
184
|
-
case images.length - 1:
|
|
185
|
-
// last image
|
|
186
|
-
this.setEndIndexesPreviews();
|
|
187
|
-
break;
|
|
188
|
-
default:
|
|
189
|
-
// other images
|
|
190
|
-
this.setIndexesPreviews();
|
|
191
|
-
break;
|
|
192
|
-
}
|
|
193
|
-
this.previews = images.filter((img, i) => i >= this.start && i < this.end);
|
|
194
|
-
}
|
|
195
|
-
/**
|
|
196
|
-
* Private method to init both `start` and `end` to the beginning.
|
|
197
|
-
*/
|
|
198
|
-
setBeginningIndexesPreviews() {
|
|
199
|
-
if (!this.previewConfig || !this.images) {
|
|
200
|
-
throw new Error('Internal library error - previewConfig and images must be defined');
|
|
201
|
-
}
|
|
202
|
-
this.start = 0;
|
|
203
|
-
this.end = Math.min(this.previewConfig.number, this.images.length);
|
|
204
|
-
}
|
|
205
|
-
/**
|
|
206
|
-
* Private method to init both `start` and `end` to the end.
|
|
207
|
-
*/
|
|
208
|
-
setEndIndexesPreviews() {
|
|
209
|
-
if (!this.previewConfig || !this.images) {
|
|
210
|
-
throw new Error('Internal library error - previewConfig and images must be defined');
|
|
211
|
-
}
|
|
212
|
-
this.start = this.images.length - 1 - (this.previewConfig.number - 1);
|
|
213
|
-
this.end = this.images.length;
|
|
214
|
-
}
|
|
215
|
-
/**
|
|
216
|
-
* Private method to update both `start` and `end` based on the currentImage.
|
|
217
|
-
*/
|
|
218
|
-
setIndexesPreviews() {
|
|
219
|
-
if (!this.previewConfig || !this.images || !this.currentImage) {
|
|
220
|
-
throw new Error('Internal library error - previewConfig, currentImage and images must be defined');
|
|
221
|
-
}
|
|
222
|
-
this.start = getIndex(this.currentImage, this.images) - Math.floor(this.previewConfig.number / 2);
|
|
223
|
-
this.end = getIndex(this.currentImage, this.images) + Math.floor(this.previewConfig.number / 2) + 1;
|
|
224
|
-
}
|
|
225
|
-
/**
|
|
226
|
-
* Private method to update the visible previews navigating to the right (next).
|
|
227
|
-
*/
|
|
228
|
-
next() {
|
|
229
|
-
if (!this.images) {
|
|
230
|
-
throw new Error('Internal library error - images must be defined');
|
|
231
|
-
}
|
|
232
|
-
// check if nextImage should be blocked
|
|
233
|
-
if (this.isPreventSliding(this.images.length - 1)) {
|
|
234
|
-
return;
|
|
235
|
-
}
|
|
236
|
-
if (this.end === this.images.length) {
|
|
237
|
-
return;
|
|
238
|
-
}
|
|
239
|
-
this.start++;
|
|
240
|
-
this.end = Math.min(this.end + 1, this.images.length);
|
|
241
|
-
this.previews = this.images.filter((img, i) => i >= this.start && i < this.end);
|
|
242
|
-
}
|
|
243
|
-
/**
|
|
244
|
-
* Private method to update the visible previews navigating to the left (previous).
|
|
245
|
-
*/
|
|
246
|
-
previous() {
|
|
247
|
-
if (!this.images) {
|
|
248
|
-
throw new Error('Internal library error - images must be defined');
|
|
249
|
-
}
|
|
250
|
-
// check if prevImage should be blocked
|
|
251
|
-
if (this.isPreventSliding(0)) {
|
|
252
|
-
return;
|
|
253
|
-
}
|
|
254
|
-
if (this.start === 0) {
|
|
255
|
-
return;
|
|
256
|
-
}
|
|
257
|
-
this.start = Math.max(this.start - 1, 0);
|
|
258
|
-
this.end = Math.min(this.end - 1, this.images.length);
|
|
259
|
-
this.previews = this.images.filter((img, i) => i >= this.start && i < this.end);
|
|
260
|
-
}
|
|
261
|
-
/**
|
|
262
|
-
* Private method to block/permit sliding between previews.
|
|
263
|
-
* @param number boundaryIndex is the first or the last index of `images` input array
|
|
264
|
-
* @returns boolean if true block sliding, otherwise not
|
|
265
|
-
*/
|
|
266
|
-
isPreventSliding(boundaryIndex) {
|
|
267
|
-
if (!this.images || !this.currentImage) {
|
|
268
|
-
throw new Error('Internal library error - images and currentImage must be defined');
|
|
269
|
-
}
|
|
270
|
-
return !!this.slideConfig && this.slideConfig.infinite === false && getIndex(this.currentImage, this.images) === boundaryIndex;
|
|
271
|
-
}
|
|
272
|
-
/**
|
|
273
|
-
* Private method to handle navigation changing the previews array and other variables.
|
|
274
|
-
*/
|
|
275
|
-
updatePreviews(prev, current) {
|
|
276
|
-
if (!this.images) {
|
|
277
|
-
throw new Error('Internal library error - images must be defined');
|
|
278
|
-
}
|
|
279
|
-
// to manage infinite sliding I have to reset both `start` and `end` at the beginning
|
|
280
|
-
// to show again previews from the first image.
|
|
281
|
-
// This happens when you navigate over the last image to return to the first one
|
|
282
|
-
let prevIndex;
|
|
283
|
-
let currentIndex;
|
|
284
|
-
try {
|
|
285
|
-
prevIndex = getIndex(prev, this.images);
|
|
286
|
-
currentIndex = getIndex(current, this.images);
|
|
287
|
-
}
|
|
288
|
-
catch (err) {
|
|
289
|
-
console.error('Cannot get previous and current image indexes in previews');
|
|
290
|
-
throw err;
|
|
291
|
-
}
|
|
292
|
-
if (prevIndex === this.images.length - 1 && currentIndex === 0) {
|
|
293
|
-
// first image
|
|
294
|
-
this.setBeginningIndexesPreviews();
|
|
295
|
-
this.previews = this.images.filter((img, i) => i >= this.start && i < this.end);
|
|
296
|
-
return;
|
|
297
|
-
}
|
|
298
|
-
// the same for the opposite case, when you navigate back from the fist image to go to the last one.
|
|
299
|
-
if (prevIndex === 0 && currentIndex === this.images.length - 1) {
|
|
300
|
-
// last image
|
|
301
|
-
this.setEndIndexesPreviews();
|
|
302
|
-
this.previews = this.images.filter((img, i) => i >= this.start && i < this.end);
|
|
303
|
-
return;
|
|
304
|
-
}
|
|
305
|
-
// otherwise manage standard scenarios
|
|
306
|
-
if (prevIndex > currentIndex) {
|
|
307
|
-
this.previous();
|
|
308
|
-
}
|
|
309
|
-
else if (prevIndex < currentIndex) {
|
|
310
|
-
this.next();
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
PreviewsComponent.decorators = [
|
|
315
|
-
{ type: Component, args: [{
|
|
316
|
-
selector: 'ks-previews',
|
|
317
|
-
template: "<nav class=\"previews-container\"\n [class.mobile-visible]=\"previewConfig.mobileVisible\"\n [attr.aria-label]=\"accessibilityConfig?.previewsContainerAriaLabel\"\n [title]=\"accessibilityConfig?.previewsContainerTitle\">\n\n <ng-container *ngIf=\"previewConfig?.visible\">\n <a class=\"nav-left\"\n [attr.aria-label]=\"accessibilityConfig?.previewScrollPrevAriaLabel\"\n [tabIndex]=\"previewConfig.arrows && start > 0 ? 0 : -1\" role=\"button\"\n (click)=\"onNavigationEvent('left', $event)\" (keyup)=\"onNavigationEvent('left', $event)\">\n <div class=\"inside {{previewConfig.arrows && start > 0 ? 'left-arrow-preview-image' : 'empty-arrow-preview-image'}}\"\n aria-hidden=\"true\"\n [title]=\"accessibilityConfig?.previewScrollPrevTitle\"></div>\n </a>\n\n <ng-container *ngFor=\"let preview of previews; trackBy: trackById; let index = index\">\n <img *ngIf=\"preview?.modal?.img\"\n class=\"inside preview-image {{isActive(preview) ? 'active' : ''}}{{!previewConfig.clickable ? ' unclickable' : ''}}\"\n [src]=\"preview.plain?.img ? preview.plain.img : preview.modal.img\"\n ksFallbackImage [fallbackImg]=\"preview.plain?.fallbackImg ? preview.plain.fallbackImg : preview.modal.fallbackImg\"\n ksSize [sizeConfig]=\"{width: previewConfig.size ? previewConfig.size.width : defaultPreviewSize.width,\n height: previewConfig.size ? previewConfig.size.height : defaultPreviewSize.height}\"\n [attr.aria-label]=\"preview.modal.ariaLabel ? preview.modal.ariaLabel : ''\"\n [title]=\"(preview.modal.title || preview.modal.title === '') ? preview.modal.title : ''\"\n alt=\"{{preview.modal.alt ? preview.modal.alt : ''}}\"\n [tabIndex]=\"0\" role=\"img\"\n (click)=\"onImageEvent(preview, $event, clickAction)\" (keyup)=\"onImageEvent(preview, $event, keyboardAction)\"/>\n </ng-container>\n\n\n <a class=\"nav-right\"\n [attr.aria-label]=\"accessibilityConfig?.previewScrollNextAriaLabel\"\n [tabIndex]=\"previewConfig.arrows && end < images.length ? 0 : -1\" role=\"button\"\n (click)=\"onNavigationEvent('right', $event)\" (keyup)=\"onNavigationEvent('right', $event)\">\n <div class=\"inside {{previewConfig.arrows && end < images.length ? 'right-arrow-preview-image' : 'empty-arrow-preview-image'}}\"\n aria-hidden=\"true\"\n [title]=\"accessibilityConfig?.previewScrollNextTitle\"></div>\n </a>\n </ng-container>\n\n</nav>\n",
|
|
318
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
319
|
-
styles: ["@media only screen and (max-device-width:767px),only screen and (max-width:767px){.previews-container,.previews-container>.nav-left,.previews-container>.nav-right,.previews-container>.preview-image{display:none}.previews-container.mobile-visible{align-items:center;animation:fadein-semi-visible08 .8s;display:flex;flex-direction:row;justify-content:center;margin-bottom:15px}.previews-container.mobile-visible>.nav-left,.previews-container.mobile-visible>.nav-right{display:flex}.previews-container.mobile-visible>.preview-image{cursor:pointer;display:flex;height:50px;margin-left:2px;margin-right:2px;opacity:.7}.previews-container.mobile-visible>.preview-image.active{opacity:1}.previews-container.mobile-visible>.preview-image.unclickable{cursor:not-allowed}.previews-container.mobile-visible>.preview-image:hover{opacity:1;transition:all .5s ease;transition-property:opacity}}@media only screen and (min-device-width:768px){.previews-container{align-items:center;animation:fadein-semi-visible08 .8s;display:flex;flex-direction:row;justify-content:center;margin-bottom:15px}.previews-container>.preview-image{cursor:pointer;height:50px;margin-left:2px;margin-right:2px;opacity:.7}.previews-container>.preview-image.active{opacity:1}.previews-container>.preview-image.unclickable{cursor:not-allowed}.previews-container>.preview-image:hover{opacity:1;transition:all .5s ease;transition-property:opacity}.previews-container .nav,.previews-container>.nav-left,.previews-container>.nav-right{color:#919191;cursor:pointer;transition:all .5s}.previews-container .nav:hover,.previews-container>.nav-left:hover,.previews-container>.nav-right:hover{transform:scale(1.1)}.previews-container>.nav-left{margin-right:10px}.previews-container>.nav-right{margin-left:10px}}@keyframes fadein-visible{0%{opacity:0}to{opacity:1}}@keyframes fadein-semi-visible05{0%{opacity:0}to{opacity:.5}}@keyframes fadein-semi-visible08{0%{opacity:0}to{opacity:.8}}@keyframes fadein-semi-visible09{0%{opacity:0}to{opacity:.9}}", ".arrow-preview-image,.empty-arrow-preview-image,.left-arrow-preview-image,.right-arrow-preview-image{height:15px;opacity:.5;width:15px}.empty-arrow-preview-image{background:#000;opacity:0}.left-arrow-preview-image{background-image:url(\"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/PjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDQ3Ny4xNzUgNDc3LjE3NSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDc3LjE3NSA0NzcuMTc1OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgd2lkdGg9IjUxMnB4IiBoZWlnaHQ9IjUxMnB4Ij48Zz48cGF0aCBkPSJNMTQ1LjE4OCwyMzguNTc1bDIxNS41LTIxNS41YzUuMy01LjMsNS4zLTEzLjgsMC0xOS4xcy0xMy44LTUuMy0xOS4xLDBsLTIyNS4xLDIyNS4xYy01LjMsNS4zLTUuMywxMy44LDAsMTkuMWwyMjUuMSwyMjUgICBjMi42LDIuNiw2LjEsNCw5LjUsNHM2LjktMS4zLDkuNS00YzUuMy01LjMsNS4zLTEzLjgsMC0xOS4xTDE0NS4xODgsMjM4LjU3NXoiIGZpbGw9IiNGRkZGRkYiLz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PC9zdmc+\");background-size:15px;transition:all .5s}.left-arrow-preview-image:hover{transform:scale(1.2)}.right-arrow-preview-image{background-image:url(\"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/PjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDQ3Ny4xNzUgNDc3LjE3NSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDc3LjE3NSA0NzcuMTc1OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgd2lkdGg9IjUxMnB4IiBoZWlnaHQ9IjUxMnB4Ij48Zz48cGF0aCBkPSJNMzYwLjczMSwyMjkuMDc1bC0yMjUuMS0yMjUuMWMtNS4zLTUuMy0xMy44LTUuMy0xOS4xLDBzLTUuMywxMy44LDAsMTkuMWwyMTUuNSwyMTUuNWwtMjE1LjUsMjE1LjUgICBjLTUuMyw1LjMtNS4zLDEzLjgsMCwxOS4xYzIuNiwyLjYsNi4xLDQsOS41LDRjMy40LDAsNi45LTEuMyw5LjUtNGwyMjUuMS0yMjUuMUMzNjUuOTMxLDI0Mi44NzUsMzY1LjkzMSwyMzQuMjc1LDM2MC43MzEsMjI5LjA3NXogICAiIGZpbGw9IiNGRkZGRkYiLz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PC9zdmc+\");background-size:15px;transition:all .5s}.right-arrow-preview-image:hover{transform:scale(1.2)}"]
|
|
320
|
-
},] }
|
|
321
|
-
];
|
|
322
|
-
PreviewsComponent.ctorParameters = () => [
|
|
323
|
-
{ type: ConfigService }
|
|
324
|
-
];
|
|
325
|
-
PreviewsComponent.propDecorators = {
|
|
326
|
-
id: [{ type: Input }],
|
|
327
|
-
currentImage: [{ type: Input }],
|
|
328
|
-
images: [{ type: Input }],
|
|
329
|
-
clickPreview: [{ type: Output }]
|
|
330
|
-
};
|
|
331
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlld3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL2tzODkvYW5ndWxhci1tb2RhbC1nYWxsZXJ5L3NyYy8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL3ByZXZpZXdzL3ByZXZpZXdzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUErQixNQUFNLGVBQWUsQ0FBQztBQUVoSixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUc5RCxPQUFPLEVBQXFCLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBSzdFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFJcEY7O0dBRUc7QUFPSCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsbUJBQW1CO0lBa0V4RCxZQUFvQixhQUE0QjtRQUM5QyxLQUFLLEVBQUUsQ0FBQztRQURVLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBckRoRDs7V0FFRztRQUVILGlCQUFZLEdBQTZCLElBQUksWUFBWSxFQUFjLENBQUM7UUFxQnhFOzs7V0FHRztRQUNILGdCQUFXLEdBQVcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNuQzs7O1dBR0c7UUFDSCxtQkFBYyxHQUFXLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDekM7OztXQUdHO1FBQ0gsYUFBUSxHQUF1QixFQUFFLENBQUM7UUFZbEMs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QUksWUFBWSxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM5RCxhQUFhO1lBQ2IsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQXFCLEVBQUUsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFHLE9BQU87U0FDUjtRQUVELHNDQUFzQztRQUN0QyxJQUFJLFNBQVMsR0FBRyxZQUFZLEVBQUU7WUFDNUIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ2pCO2FBQU0sSUFBSSxTQUFTLEdBQUcsWUFBWSxFQUFFO1lBQ25DLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNiO0lBQ0gsQ0FBQzs7O1lBNVZGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsYUFBYTtnQkFFdkIseWhGQUE0QjtnQkFDNUIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07O2FBQ2hEOzs7WUFaUSxhQUFhOzs7aUJBY25CLEtBQUs7MkJBSUwsS0FBSztxQkFNTCxLQUFLOzJCQUtMLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuXG4gQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgU3RlZmFubyBDYXBwYSAoS3M4OSlcblxuIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OIElORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2UsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQWNjZXNzaWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL2FjY2Vzc2libGUuY29tcG9uZW50JztcblxuaW1wb3J0IHsgQWNjZXNzaWJpbGl0eUNvbmZpZyB9IGZyb20gJy4uLy4uL21vZGVsL2FjY2Vzc2liaWxpdHkuaW50ZXJmYWNlJztcbmltcG9ydCB7IEltYWdlLCBJbWFnZUV2ZW50LCBJbWFnZU1vZGFsRXZlbnQgfSBmcm9tICcuLi8uLi9tb2RlbC9pbWFnZS5jbGFzcyc7XG5pbXBvcnQgeyBJbnRlcm5hbExpYkltYWdlIH0gZnJvbSAnLi4vLi4vbW9kZWwvaW1hZ2UtaW50ZXJuYWwuY2xhc3MnO1xuaW1wb3J0IHsgUHJldmlld0NvbmZpZyB9IGZyb20gJy4uLy4uL21vZGVsL3ByZXZpZXctY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTbGlkZUNvbmZpZyB9IGZyb20gJy4uLy4uL21vZGVsL3NsaWRlLWNvbmZpZy5pbnRlcmZhY2UnO1xuXG5pbXBvcnQgeyBORVhULCBQUkVWIH0gZnJvbSAnLi4vLi4vdXRpbHMvdXNlci1pbnB1dC51dGlsJztcbmltcG9ydCB7IGdldEluZGV4IH0gZnJvbSAnLi4vLi4vdXRpbHMvaW1hZ2UudXRpbCc7XG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbC9hY3Rpb24uZW51bSc7XG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlLCBERUZBVUxUX1BSRVZJRVdfU0laRSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IFNpemUgfSBmcm9tICcuLi8uLi9tb2RlbC9zaXplLmludGVyZmFjZSc7XG5pbXBvcnQgeyBMaWJDb25maWcgfSBmcm9tICcuLi8uLi9tb2RlbC9saWItY29uZmlnLmludGVyZmFjZSc7XG5cbi8qKlxuICogQ29tcG9uZW50IHdpdGggaW1hZ2UgcHJldmlld3NcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAna3MtcHJldmlld3MnLFxuICBzdHlsZVVybHM6IFsncHJldmlld3Muc2NzcycsICcuLi9wcmV2aWV3cy1hcnJvd3Muc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJ3ByZXZpZXdzLmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBQcmV2aWV3c0NvbXBvbmVudCBleHRlbmRzIEFjY2Vzc2libGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIGlkOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBPYmplY3Qgb2YgdHlwZSBgSW50ZXJuYWxMaWJJbWFnZWAgdGhhdCByZXByZXNlbnQgdGhlIHZpc2libGUgaW1hZ2UuXG4gICAqL1xuICBASW5wdXQoKVxuICBjdXJyZW50SW1hZ2U6IEludGVybmFsTGliSW1hZ2UgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBBcnJheSBvZiBgSW50ZXJuYWxMaWJJbWFnZWAgdGhhdCByZXByZXNlbnQgdGhlIG1vZGVsIG9mIHRoaXMgbGlicmFyeSB3aXRoIGFsbCBpbWFnZXMsXG4gICAqIHRodW1icyBhbmQgc28gb24uXG4gICAqL1xuICBASW5wdXQoKVxuICBpbWFnZXM6IEludGVybmFsTGliSW1hZ2VbXSB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIE91dHB1dCB0byBlbWl0IHRoZSBjbGlja2VkIHByZXZpZXcuIFRoZSBwYXlsb2FkIGNvbnRhaW5zIHRoZSBgSW1hZ2VFdmVudGAgYXNzb2NpYXRlZCB0byB0aGUgY2xpY2tlZCBwcmV2aWV3LlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIGNsaWNrUHJldmlldzogRXZlbnRFbWl0dGVyPEltYWdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxJbWFnZUV2ZW50PigpO1xuICAvLyAvKipcbiAgLy8gICogT3V0cHV0IHRvIGVtaXQgdGhlIGNsaWNrZWQgYXJyb3cuIFRoZSBwYXlsb2FkIGNvbnRhaW5zIHdoaWNoIGFycm93IChsZWZ0IG9yIHJpZ2h0KS5cbiAgLy8gICovXG4gIC8vIEBPdXRwdXQoKVxuICAvLyBjbGlja0Fycm93OiBFdmVudEVtaXR0ZXI8SW50ZXJhY3Rpb25FdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEludGVyYWN0aW9uRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIE9iamVjdCBvZiB0eXBlIGBBY2Nlc3NpYmlsaXR5Q29uZmlnYCB0byBpbml0IGN1c3RvbSBhY2Nlc3NpYmlsaXR5IGZlYXR1cmVzLlxuICAgKiBGb3IgaW5zdGFuY2UsIGl0IGNvbnRhaW5zIHRpdGxlcywgYWx0IHRleHRzLCBhcmlhLWxhYmVscyBhbmQgc28gb24uXG4gICAqL1xuICBhY2Nlc3NpYmlsaXR5Q29uZmlnOiBBY2Nlc3NpYmlsaXR5Q29uZmlnIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogT2JqZWN0IG9mIHR5cGUgYFNsaWRlQ29uZmlnYCB0byBnZXQgYGluZmluaXRlIHNsaWRpbmdgLlxuICAgKi9cbiAgc2xpZGVDb25maWc6IFNsaWRlQ29uZmlnIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogT2JqZWN0IG9mIHR5cGUgYFByZXZpZXdDb25maWdgIHRvIGluaXQgUHJldmlld3NDb21wb25lbnQncyBmZWF0dXJlcy5cbiAgICogRm9yIGluc3RhbmNlLCBpdCBjb250YWlucyBhIHBhcmFtIHRvIHNob3cvaGlkZSB0aGlzIGNvbXBvbmVudCwgc2l6ZXMuXG4gICAqL1xuICBwcmV2aWV3Q29uZmlnOiBQcmV2aWV3Q29uZmlnIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogRW51bSBvZiB0eXBlIGBBY3Rpb25gIHRoYXQgcmVwcmVzZW50cyBhIG1vdXNlIGNsaWNrIG9uIGEgYnV0dG9uLlxuICAgKiBEZWNsYXJlZCBoZXJlIHRvIGJlIHVzZWQgaW5zaWRlIHRoZSB0ZW1wbGF0ZS5cbiAgICovXG4gIGNsaWNrQWN0aW9uOiBBY3Rpb24gPSBBY3Rpb24uQ0xJQ0s7XG4gIC8qKlxuICAgKiBFbnVtIG9mIHR5cGUgYEFjdGlvbmAgdGhhdCByZXByZXNlbnRzIGEga2V5Ym9hcmQgYWN0aW9uLlxuICAgKiBEZWNsYXJlZCBoZXJlIHRvIGJlIHVzZWQgaW5zaWRlIHRoZSB0ZW1wbGF0ZS5cbiAgICovXG4gIGtleWJvYXJkQWN0aW9uOiBBY3Rpb24gPSBBY3Rpb24uS0VZQk9BUkQ7XG4gIC8qKlxuICAgKiBBcnJheSBvZiBgSW50ZXJuYWxMaWJJbWFnZWAgZXhwb3NlZCB0byB0aGUgdGVtcGxhdGUuIFRoaXMgZmllbGQgaXMgaW5pdGlhbGl6ZWRcbiAgICogYXBwbHlpbmcgdHJhbnNmb3JtYXRpb25zLCBkZWZhdWx0IHZhbHVlcyBhbmQgc28gb24gdG8gdGhlIGlucHV0IG9mIHRoZSBzYW1lIHR5cGUuXG4gICAqL1xuICBwcmV2aWV3czogSW50ZXJuYWxMaWJJbWFnZVtdID0gW107XG4gIC8qKlxuICAgKiBTdGFydCBpbmRleCBvZiB0aGUgaW5wdXQgaW1hZ2VzIHVzZWQgdG8gZGlzcGxheSBwcmV2aWV3cy5cbiAgICovXG4gIC8vIEB0cy1pZ25vcmVcbiAgc3RhcnQ6IG51bWJlcjtcbiAgLyoqXG4gICAqIEVuZCBpbmRleCBvZiB0aGUgaW5wdXQgaW1hZ2VzIHVzZWQgdG8gZGlzcGxheSBwcmV2aWV3cy5cbiAgICovXG4gIC8vIEB0cy1pZ25vcmVcbiAgZW5kOiBudW1iZXI7XG5cbiAgZGVmYXVsdFByZXZpZXdTaXplOiBTaXplID0gREVGQVVMVF9QUkVWSUVXX1NJWkU7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgwrRuZ09uSW5pdMK0IHRvIGJ1aWxkIGBjb25maWdQcmV2aWV3YCBhcHBseWluZyBhIGRlZmF1bHQgdmFsdWUgYW5kIGFsc28gdG9cbiAgICogaW5pdCB0aGUgYHByZXZpZXdzYCBhcnJheS5cbiAgICogVGhpcyBpcyBhbiBBbmd1bGFyJ3MgbGlmZWN5Y2xlIGhvb2ssIHNvIGl0cyBjYWxsZWQgYXV0b21hdGljYWxseSBieSBBbmd1bGFyIGl0c2VsZi5cbiAgICogSW4gcGFydGljdWxhciwgaXQncyBjYWxsZWQgb25seSBvbmUgdGltZSEhIVxuICAgKi9cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludGVybmFsIGxpYnJhcnkgZXJyb3IgLSBpZCBtdXN0IGJlIGRlZmluZWQnKTtcbiAgICB9XG4gICAgY29uc3QgbGliQ29uZmlnOiBMaWJDb25maWcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKHRoaXMuaWQpO1xuICAgIGlmICghbGliQ29uZmlnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludGVybmFsIGxpYnJhcnkgZXJyb3IgLSBsaWJDb25maWcgbXVzdCBiZSBkZWZpbmVkJyk7XG4gICAgfVxuICAgIHRoaXMuYWNjZXNzaWJpbGl0eUNvbmZpZyA9IGxpYkNvbmZpZy5hY2Nlc3NpYmlsaXR5Q29uZmlnO1xuICAgIHRoaXMuc2xpZGVDb25maWcgPSBsaWJDb25maWcuc2xpZGVDb25maWc7XG4gICAgdGhpcy5wcmV2aWV3Q29uZmlnID0gbGliQ29uZmlnLnByZXZpZXdDb25maWc7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRJbWFnZSB8fCAhdGhpcy5pbWFnZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW50ZXJuYWwgbGlicmFyeSBlcnJvciAtIGN1cnJlbnRJbWFnZSBhbmQgaW1hZ2VzIG11c3QgYmUgZGVmaW5lZCcpO1xuICAgIH1cbiAgICB0aGlzLmluaXRQcmV2aWV3cyh0aGlzLmN1cnJlbnRJbWFnZSwgdGhpcy5pbWFnZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byBjaGVjayBpZiBhbiBpbWFnZSBpcyBhY3RpdmUgKGkuZS4gYSBwcmV2aWV3IGltYWdlKS5cbiAgICogQHBhcmFtIEludGVybmFsTGliSW1hZ2UgcHJldmlldyBpcyBhbiBpbWFnZSB0byBjaGVjayBpZiBpdCdzIGFjdGl2ZSBvciBub3RcbiAgICogQHJldHVybnMgYm9vbGVhbiB0cnVlIGlmIGlzIGFjdGl2ZSwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBpc0FjdGl2ZShwcmV2aWV3OiBJbnRlcm5hbExpYkltYWdlKTogYm9vbGVhbiB7XG4gICAgaWYgKCFwcmV2aWV3IHx8ICF0aGlzLmN1cnJlbnRJbWFnZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gcHJldmlldy5pZCA9PT0gdGhpcy5jdXJyZW50SW1hZ2UuaWQ7XG4gIH1cblxuICAvLyBUT0RPIGltcHJvdmUgdGhpcyBtZXRob2QgdG8gc2ltcGxpZnkgdGhlIHNvdXJjZWNvZGUgKyByZW1vdmUgZHVwbGljYXRlZCBjb2RlbGluZXNcbiAgLyoqXG4gICAqIE1ldGhvZCDCtG5nT25DaGFuZ2VzwrQgdG8gdXBkYXRlIGBwcmV2aWV3c2AgYXJyYXkuXG4gICAqIEFsc28sIGJvdGggYHN0YXJ0YCBhbmQgYGVuZGAgbG9jYWwgdmFyaWFibGVzIHdpbGwgYmUgdXBkYXRlZCBhY2NvcmRpbmdseS5cbiAgICogVGhpcyBpcyBhbiBBbmd1bGFyJ3MgbGlmZWN5Y2xlIGhvb2ssIHNvIGl0cyBjYWxsZWQgYXV0b21hdGljYWxseSBieSBBbmd1bGFyIGl0c2VsZi5cbiAgICogSW4gcGFydGljdWxhciwgaXQncyBjYWxsZWQgd2hlbiBhbnkgZGF0YS1ib3VuZCBwcm9wZXJ0eSBvZiBhIGRpcmVjdGl2ZSBjaGFuZ2VzISEhXG4gICAqL1xuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgY29uc3QgaW1hZ2VzOiBTaW1wbGVDaGFuZ2UgPSBjaGFuZ2VzLmltYWdlcztcbiAgICBjb25zdCBjdXJyZW50SW1hZ2U6IFNpbXBsZUNoYW5nZSA9IGNoYW5nZXMuY3VycmVudEltYWdlO1xuXG4gICAgbGV0IHByZXY7XG4gICAgbGV0IGN1cnJlbnQ7XG5cbiAgICBpZiAoY3VycmVudEltYWdlKSB7XG4gICAgICBwcmV2ID0gY3VycmVudEltYWdlLnByZXZpb3VzVmFsdWU7XG4gICAgICBjdXJyZW50ID0gY3VycmVudEltYWdlLmN1cnJlbnRWYWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudCA9IHRoaXMuY3VycmVudEltYWdlO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50ICYmIGltYWdlcyAmJiBpbWFnZXMucHJldmlvdXNWYWx1ZSAmJiBpbWFnZXMuY3VycmVudFZhbHVlKSB7XG4gICAgICAvLyBJJ20gaW4gdGhpcyBpZiBzdGF0ZW1lbnQsIGlmIGlucHV0IGltYWdlcyBhcmUgY2hhbmdlZCAoZm9yIGluc3RhbmNlLCBiZWNhdXNlIEkgcmVtb3ZlZCBvbmUgb2YgdGhlbSB3aXRoIHRoZSAnZGVsZXRlIGJ1dHRvbicsXG4gICAgICAvLyBvciBiZWNhdXNlIHVzZXJzIGNoYW5nZWQgdGhlIGltYWdlcyBhcnJheSB3aGlsZSBtb2RhbCBnYWxsZXJ5IGlzIHN0aWxsIG9wZW4pLlxuICAgICAgLy8gSW4gdGhpcyBjYXNlLCBJIGhhdmUgdG8gcmUtaW5pdCBwcmV2aWV3cywgYmVjYXVzZSB0aGUgaW5wdXQgYXJyYXkgb2YgaW1hZ2VzIGlzIGNoYW5nZWQuXG4gICAgICB0aGlzLmluaXRQcmV2aWV3cyhjdXJyZW50LCBpbWFnZXMuY3VycmVudFZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAocHJldiAmJiBjdXJyZW50ICYmIHByZXYuaWQgIT09IGN1cnJlbnQuaWQpIHtcbiAgICAgIHRoaXMudXBkYXRlUHJldmlld3MocHJldiwgY3VycmVudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCBjYWxsZWQgYnkgZXZlbnRzIGZyb20gYm90aCBrZXlib2FyZCBhbmQgbW91c2Ugb24gYSBwcmV2aWV3LlxuICAgKiBUaGlzIHdpbGwgdHJpZ2dlciB0aGUgYGNsaWNrcHJldmlld2Agb3V0cHV0IHdpdGggdGhlIGlucHV0IHByZXZpZXcgYXMgaXRzIHBheWxvYWQuXG4gICAqIEBwYXJhbSBJbnRlcm5hbExpYkltYWdlIHByZXZpZXcgdGhhdCB0cmlnZ2VyZWQgdGhpcyBtZXRob2RcbiAgICogQHBhcmFtIEtleWJvYXJkRXZlbnQgfCBNb3VzZUV2ZW50IGV2ZW50IHBheWxvYWRcbiAgICovXG4gIG9uSW1hZ2VFdmVudChwcmV2aWV3OiBJbnRlcm5hbExpYkltYWdlLCBldmVudDogS2V5Ym9hcmRFdmVudCB8IE1vdXNlRXZlbnQsIGFjdGlvbjogQWN0aW9uID0gQWN0aW9uLk5PUk1BTCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pZCB8fCAhdGhpcy5pbWFnZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW50ZXJuYWwgbGlicmFyeSBlcnJvciAtIGlkIGFuZCBpbWFnZXMgbXVzdCBiZSBkZWZpbmVkJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5wcmV2aWV3Q29uZmlnIHx8ICF0aGlzLnByZXZpZXdDb25maWcuY2xpY2thYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdDogbnVtYmVyID0gc3VwZXIuaGFuZGxlSW1hZ2VFdmVudChldmVudCk7XG4gICAgaWYgKHJlc3VsdCA9PT0gTkVYVCB8fCByZXN1bHQgPT09IFBSRVYpIHtcbiAgICAgIHRoaXMuY2xpY2tQcmV2aWV3LmVtaXQobmV3IEltYWdlTW9kYWxFdmVudCh0aGlzLmlkLCBhY3Rpb24sIGdldEluZGV4KHByZXZpZXcsIHRoaXMuaW1hZ2VzKSkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgY2FsbGVkIGJ5IGV2ZW50cyBmcm9tIGJvdGgga2V5Ym9hcmQgYW5kIG1vdXNlIG9uIGEgbmF2aWdhdGlvbiBhcnJvdy5cbiAgICogSXQgYWxzbyBlbWl0cyBhbiBldmVudCB0byBzcGVjaWZ5IHdoaWNoIGFycm93LlxuICAgKiBAcGFyYW0gc3RyaW5nIGRpcmVjdGlvbiBvZiB0aGUgbmF2aWdhdGlvbiB0aGF0IGNhbiBiZSBlaXRoZXIgJ25leHQnIG9yICdwcmV2J1xuICAgKiBAcGFyYW0gS2V5Ym9hcmRFdmVudCB8IE1vdXNlRXZlbnQgZXZlbnQgcGF5bG9hZFxuICAgKi9cbiAgb25OYXZpZ2F0aW9uRXZlbnQoZGlyZWN0aW9uOiBzdHJpbmcsIGV2ZW50OiBLZXlib2FyZEV2ZW50IHwgTW91c2VFdmVudCwgYWN0aW9uOiBBY3Rpb24gPSBBY3Rpb24uTk9STUFMKTogdm9pZCB7XG4gICAgY29uc3QgcmVzdWx0OiBudW1iZXIgPSBzdXBlci5oYW5kbGVOYXZpZ2F0aW9uRXZlbnQoZGlyZWN0aW9uLCBldmVudCk7XG4gICAgaWYgKHJlc3VsdCA9PT0gTkVYVCkge1xuICAgICAgLy8gdGhpcy5jbGlja0Fycm93LmVtaXQoPEludGVyYWN0aW9uRXZlbnQ+eyBzb3VyY2U6ICdtb2RhbC1wcmV2aWV3cycsIHBheWxvYWQ6IERJUkVDVElPTl9SSUdIVCwgYWN0aW9uOiBhY3Rpb24gfSk7XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gUFJFVikge1xuICAgICAgLy8gdGhpcy5jbGlja0Fycm93LmVtaXQoPEludGVyYWN0aW9uRXZlbnQ+eyBzb3VyY2U6ICdtb2RhbC1wcmV2aWV3cycsIHBheWxvYWQ6IERJUkVDVElPTl9MRUZULCBhY3Rpb246IGFjdGlvbiB9KTtcbiAgICAgIHRoaXMucHJldmlvdXMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHVzZWQgaW4gdGhlIHRlbXBsYXRlIHRvIHRyYWNrIGlkcyBpbiBuZ0Zvci5cbiAgICogQHBhcmFtIG51bWJlciBpbmRleCBvZiB0aGUgYXJyYXlcbiAgICogQHBhcmFtIEltYWdlIGl0ZW0gb2YgdGhlIGFycmF5XG4gICAqIEByZXR1cm5zIG51bWJlciB0aGUgaWQgb2YgdGhlIGl0ZW1cbiAgICovXG4gIHRyYWNrQnlJZChpbmRleDogbnVtYmVyLCBpdGVtOiBJbWFnZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIGl0ZW0uaWQ7XG4gIH1cblxuICAvKipcbiAgICogUHJpdmF0ZSBtZXRob2QgdG8gaW5pdCBwcmV2aWV3cyBiYXNlZCBvbiB0aGUgY3VycmVudEltYWdlIGFuZCB0aGUgZnVsbCBhcnJheSBvZiBpbWFnZXMuXG4gICAqIFRoZSBjdXJyZW50IGltYWdlIGluIG1hbmRhdG9yeSB0byBzaG93IGFsd2F5cyB0aGUgY3VycmVudCBwcmV2aWV3IChhcyBoaWdobGlnaHRlZCkuXG4gICAqIEBwYXJhbSBJbnRlcm5hbExpYkltYWdlIGN1cnJlbnRJbWFnZSB0byBkZWNpZGUgaG93IHRvIHNob3cgcHJldmlld3MsIGJlY2F1c2UgSSBhbHdheXMgd2FudCB0byBzZWUgdGhlIGN1cnJlbnQgaW1hZ2UgYXMgaGlnaGxpZ2h0ZWRcbiAgICogQHBhcmFtIEludGVybmFsTGliSW1hZ2VbXSBpbWFnZXMgaXMgdGhlIGFycmF5IG9mIGFsbCBpbWFnZXMuXG4gICAqL1xuICBwcml2YXRlIGluaXRQcmV2aWV3cyhjdXJyZW50SW1hZ2U6IEludGVybmFsTGliSW1hZ2UsIGltYWdlczogSW50ZXJuYWxMaWJJbWFnZVtdKTogdm9pZCB7XG4gICAgbGV0IGluZGV4OiBudW1iZXI7XG4gICAgdHJ5IHtcbiAgICAgIGluZGV4ID0gZ2V0SW5kZXgoY3VycmVudEltYWdlLCBpbWFnZXMpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgICBzd2l0Y2ggKGluZGV4KSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIC8vIGZpcnN0IGltYWdlXG4gICAgICAgIHRoaXMuc2V0QmVnaW5uaW5nSW5kZXhlc1ByZXZpZXdzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBpbWFnZXMubGVuZ3RoIC0gMTpcbiAgICAgICAgLy8gbGFzdCBpbWFnZVxuICAgICAgICB0aGlzLnNldEVuZEluZGV4ZXNQcmV2aWV3cygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIG90aGVyIGltYWdlc1xuICAgICAgICB0aGlzLnNldEluZGV4ZXNQcmV2aWV3cygpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgdGhpcy5wcmV2aWV3cyA9IGltYWdlcy5maWx0ZXIoKGltZzogSW50ZXJuYWxMaWJJbWFnZSwgaTogbnVtYmVyKSA9PiBpID49IHRoaXMuc3RhcnQgJiYgaSA8IHRoaXMuZW5kKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcml2YXRlIG1ldGhvZCB0byBpbml0IGJvdGggYHN0YXJ0YCBhbmQgYGVuZGAgdG8gdGhlIGJlZ2lubmluZy5cbiAgICovXG4gIHByaXZhdGUgc2V0QmVnaW5uaW5nSW5kZXhlc1ByZXZpZXdzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5wcmV2aWV3Q29uZmlnIHx8ICF0aGlzLmltYWdlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlcm5hbCBsaWJyYXJ5IGVycm9yIC0gcHJldmlld0NvbmZpZyBhbmQgaW1hZ2VzIG11c3QgYmUgZGVmaW5lZCcpO1xuICAgIH1cbiAgICB0aGlzLnN0YXJ0ID0gMDtcbiAgICB0aGlzLmVuZCA9IE1hdGgubWluKHRoaXMucHJldmlld0NvbmZpZy5udW1iZXIgYXMgbnVtYmVyLCB0aGlzLmltYWdlcy5sZW5ndGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByaXZhdGUgbWV0aG9kIHRvIGluaXQgYm90aCBgc3RhcnRgIGFuZCBgZW5kYCB0byB0aGUgZW5kLlxuICAgKi9cbiAgcHJpdmF0ZSBzZXRFbmRJbmRleGVzUHJldmlld3MoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnByZXZpZXdDb25maWcgfHwgIXRoaXMuaW1hZ2VzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludGVybmFsIGxpYnJhcnkgZXJyb3IgLSBwcmV2aWV3Q29uZmlnIGFuZCBpbWFnZXMgbXVzdCBiZSBkZWZpbmVkJyk7XG4gICAgfVxuICAgIHRoaXMuc3RhcnQgPSB0aGlzLmltYWdlcy5sZW5ndGggLSAxIC0gKCh0aGlzLnByZXZpZXdDb25maWcubnVtYmVyIGFzIG51bWJlcikgLSAxKTtcbiAgICB0aGlzLmVuZCA9IHRoaXMuaW1hZ2VzLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcml2YXRlIG1ldGhvZCB0byB1cGRhdGUgYm90aCBgc3RhcnRgIGFuZCBgZW5kYCBiYXNlZCBvbiB0aGUgY3VycmVudEltYWdlLlxuICAgKi9cbiAgcHJpdmF0ZSBzZXRJbmRleGVzUHJldmlld3MoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnByZXZpZXdDb25maWcgfHwgIXRoaXMuaW1hZ2VzIHx8ICF0aGlzLmN1cnJlbnRJbWFnZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlcm5hbCBsaWJyYXJ5IGVycm9yIC0gcHJldmlld0NvbmZpZywgY3VycmVudEltYWdlIGFuZCBpbWFnZXMgbXVzdCBiZSBkZWZpbmVkJyk7XG4gICAgfVxuICAgIHRoaXMuc3RhcnQgPSBnZXRJbmRleCh0aGlzLmN1cnJlbnRJbWFnZSwgdGhpcy5pbWFnZXMpIC0gTWF0aC5mbG9vcigodGhpcy5wcmV2aWV3Q29uZmlnLm51bWJlciBhcyBudW1iZXIpIC8gMik7XG4gICAgdGhpcy5lbmQgPSBnZXRJbmRleCh0aGlzLmN1cnJlbnRJbWFnZSwgdGhpcy5pbWFnZXMpICsgTWF0aC5mbG9vcigodGhpcy5wcmV2aWV3Q29uZmlnLm51bWJlciBhcyBudW1iZXIpIC8gMikgKyAxO1xuICB9XG5cbiAgLyoqXG4gICAqIFByaXZhdGUgbWV0aG9kIHRvIHVwZGF0ZSB0aGUgdmlzaWJsZSBwcmV2aWV3cyBuYXZpZ2F0aW5nIHRvIHRoZSByaWdodCAobmV4dCkuXG4gICAqL1xuICBwcml2YXRlIG5leHQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmltYWdlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlcm5hbCBsaWJyYXJ5IGVycm9yIC0gaW1hZ2VzIG11c3QgYmUgZGVmaW5lZCcpO1xuICAgIH1cbiAgICAvLyBjaGVjayBpZiBuZXh0SW1hZ2Ugc2hvdWxkIGJlIGJsb2NrZWRcbiAgICBpZiAodGhpcy5pc1ByZXZlbnRTbGlkaW5nKHRoaXMuaW1hZ2VzLmxlbmd0aCAtIDEpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5kID09PSB0aGlzLmltYWdlcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXJ0Kys7XG4gICAgdGhpcy5lbmQgPSBNYXRoLm1pbih0aGlzLmVuZCArIDEsIHRoaXMuaW1hZ2VzLmxlbmd0aCk7XG5cbiAgICB0aGlzLnByZXZpZXdzID0gdGhpcy5pbWFnZXMuZmlsdGVyKChpbWc6IEludGVybmFsTGliSW1hZ2UsIGk6IG51bWJlcikgPT4gaSA+PSB0aGlzLnN0YXJ0ICYmIGkgPCB0aGlzLmVuZCk7XG4gIH1cblxuICAvKipcbiAgICogUHJpdmF0ZSBtZXRob2QgdG8gdXBkYXRlIHRoZSB2aXNpYmxlIHByZXZpZXdzIG5hdmlnYXRpbmcgdG8gdGhlIGxlZnQgKHByZXZpb3VzKS5cbiAgICovXG4gIHByaXZhdGUgcHJldmlvdXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmltYWdlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlcm5hbCBsaWJyYXJ5IGVycm9yIC0gaW1hZ2VzIG11c3QgYmUgZGVmaW5lZCcpO1xuICAgIH1cbiAgICAvLyBjaGVjayBpZiBwcmV2SW1hZ2Ugc2hvdWxkIGJlIGJsb2NrZWRcbiAgICBpZiAodGhpcy5pc1ByZXZlbnRTbGlkaW5nKDApKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhcnQgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXJ0ID0gTWF0aC5tYXgodGhpcy5zdGFydCAtIDEsIDApO1xuICAgIHRoaXMuZW5kID0gTWF0aC5taW4odGhpcy5lbmQgLSAxLCB0aGlzLmltYWdlcy5sZW5ndGgpO1xuXG4gICAgdGhpcy5wcmV2aWV3cyA9IHRoaXMuaW1hZ2VzLmZpbHRlcigoaW1nOiBJbnRlcm5hbExpYkltYWdlLCBpOiBudW1iZXIpID0+IGkgPj0gdGhpcy5zdGFydCAmJiBpIDwgdGhpcy5lbmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByaXZhdGUgbWV0aG9kIHRvIGJsb2NrL3Blcm1pdCBzbGlkaW5nIGJldHdlZW4gcHJldmlld3MuXG4gICAqIEBwYXJhbSBudW1iZXIgYm91bmRhcnlJbmRleCBpcyB0aGUgZmlyc3Qgb3IgdGhlIGxhc3QgaW5kZXggb2YgYGltYWdlc2AgaW5wdXQgYXJyYXlcbiAgICogQHJldHVybnMgYm9vbGVhbiBpZiB0cnVlIGJsb2NrIHNsaWRpbmcsIG90aGVyd2lzZSBub3RcbiAgICovXG4gIHByaXZhdGUgaXNQcmV2ZW50U2xpZGluZyhib3VuZGFyeUluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuaW1hZ2VzIHx8ICF0aGlzLmN1cnJlbnRJbWFnZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlcm5hbCBsaWJyYXJ5IGVycm9yIC0gaW1hZ2VzIGFuZCBjdXJyZW50SW1hZ2UgbXVzdCBiZSBkZWZpbmVkJyk7XG4gICAgfVxuICAgIHJldHVybiAhIXRoaXMuc2xpZGVDb25maWcgJiYgdGhpcy5zbGlkZUNvbmZpZy5pbmZpbml0ZSA9PT0gZmFsc2UgJiYgZ2V0SW5kZXgodGhpcy5jdXJyZW50SW1hZ2UsIHRoaXMuaW1hZ2VzKSA9PT0gYm91bmRhcnlJbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcml2YXRlIG1ldGhvZCB0byBoYW5kbGUgbmF2aWdhdGlvbiBjaGFuZ2luZyB0aGUgcHJldmlld3MgYXJyYXkgYW5kIG90aGVyIHZhcmlhYmxlcy5cbiAgICovXG4gIHByaXZhdGUgdXBkYXRlUHJldmlld3MocHJldjogSW50ZXJuYWxMaWJJbWFnZSwgY3VycmVudDogSW50ZXJuYWxMaWJJbWFnZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pbWFnZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW50ZXJuYWwgbGlicmFyeSBlcnJvciAtIGltYWdlcyBtdXN0IGJlIGRlZmluZWQnKTtcbiAgICB9XG4gICAgLy8gdG8gbWFuYWdlIGluZmluaXRlIHNsaWRpbmcgSSBoYXZlIHRvIHJlc2V0IGJvdGggYHN0YXJ0YCBhbmQgYGVuZGAgYXQgdGhlIGJlZ2lubmluZ1xuICAgIC8vIHRvIHNob3cgYWdhaW4gcHJldmlld3MgZnJvbSB0aGUgZmlyc3QgaW1hZ2UuXG4gICAgLy8gVGhpcyBoYXBwZW5zIHdoZW4geW91IG5hdmlnYXRlIG92ZXIgdGhlIGxhc3QgaW1hZ2UgdG8gcmV0dXJuIHRvIHRoZSBmaXJzdCBvbmVcbiAgICBsZXQgcHJldkluZGV4OiBudW1iZXI7XG4gICAgbGV0IGN1cnJlbnRJbmRleDogbnVtYmVyO1xuICAgIHRyeSB7XG4gICAgICBwcmV2SW5kZXggPSBnZXRJbmRleChwcmV2LCB0aGlzLmltYWdlcyk7XG4gICAgICBjdXJyZW50SW5kZXggPSBnZXRJbmRleChjdXJyZW50LCB0aGlzLmltYWdlcyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdDYW5ub3QgZ2V0IHByZXZpb3VzIGFuZCBjdXJyZW50IGltYWdlIGluZGV4ZXMgaW4gcHJldmlld3MnKTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gICAgaWYgKHByZXZJbmRleCA9PT0gdGhpcy5pbWFnZXMubGVuZ3RoIC0gMSAmJiBjdXJyZW50SW5kZXggPT09IDApIHtcbiAgICAgIC8vIGZpcnN0IGltYWdlXG4gICAgICB0aGlzLnNldEJlZ2lubmluZ0luZGV4ZXNQcmV2aWV3cygpO1xuICAgICAgdGhpcy5wcmV2aWV3cyA9IHRoaXMuaW1hZ2VzLmZpbHRlcigoaW1nOiBJbnRlcm5hbExpYkltYWdlLCBpOiBudW1iZXIpID0+IGkgPj0gdGhpcy5zdGFydCAmJiBpIDwgdGhpcy5lbmQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyB0aGUgc2FtZSBmb3IgdGhlIG9wcG9zaXRlIGNhc2UsIHdoZW4geW91IG5hdmlnYXRlIGJhY2sgZnJvbSB0aGUgZmlzdCBpbWFnZSB0byBnbyB0byB0aGUgbGFzdCBvbmUuXG4gICAgaWYgKHByZXZJbmRleCA9PT0gMCAmJiBjdXJyZW50SW5kZXggPT09IHRoaXMuaW1hZ2VzLmxlbmd0aCAtIDEpIHtcbiAgICAgIC8vIGxhc3QgaW1hZ2VcbiAgICAgIHRoaXMuc2V0RW5kSW5kZXhlc1ByZXZpZXdzKCk7XG4gICAgICB0aGlzLnByZXZpZXdzID0gdGhpcy5pbWFnZXMuZmlsdGVyKChpbWc6IEludGVybmFsTGliSW1hZ2UsIGk6IG51bWJlcikgPT4gaSA+PSB0aGlzLnN0YXJ0ICYmIGkgPCB0aGlzLmVuZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gb3RoZXJ3aXNlIG1hbmFnZSBzdGFuZGFyZCBzY2VuYXJpb3NcbiAgICBpZiAocHJldkluZGV4ID4gY3VycmVudEluZGV4KSB7XG4gICAgICB0aGlzLnByZXZpb3VzKCk7XG4gICAgfSBlbHNlIGlmIChwcmV2SW5kZXggPCBjdXJyZW50SW5kZXgpIHtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import { ButtonType } from '../../model/buttons-config.interface';
|
|
2
|
-
/**
|
|
3
|
-
* Default button size object
|
|
4
|
-
*/
|
|
5
|
-
export const KS_DEFAULT_SIZE = { height: 'auto', width: '30px' };
|
|
6
|
-
/**
|
|
7
|
-
* Default close button object
|
|
8
|
-
*/
|
|
9
|
-
export const KS_DEFAULT_BTN_CLOSE = {
|
|
10
|
-
className: 'close-image',
|
|
11
|
-
size: KS_DEFAULT_SIZE,
|
|
12
|
-
type: ButtonType.CLOSE,
|
|
13
|
-
title: 'Close this modal image gallery',
|
|
14
|
-
ariaLabel: 'Close this modal image gallery'
|
|
15
|
-
};
|
|
16
|
-
/**
|
|
17
|
-
* Default download button object
|
|
18
|
-
*/
|
|
19
|
-
export const KS_DEFAULT_BTN_DOWNLOAD = {
|
|
20
|
-
className: 'download-image',
|
|
21
|
-
size: KS_DEFAULT_SIZE,
|
|
22
|
-
type: ButtonType.DOWNLOAD,
|
|
23
|
-
title: 'Download the current image',
|
|
24
|
-
ariaLabel: 'Download the current image'
|
|
25
|
-
};
|
|
26
|
-
/**
|
|
27
|
-
* Default exturl button object
|
|
28
|
-
*/
|
|
29
|
-
export const KS_DEFAULT_BTN_EXTURL = {
|
|
30
|
-
className: 'ext-url-image',
|
|
31
|
-
size: KS_DEFAULT_SIZE,
|
|
32
|
-
type: ButtonType.EXTURL,
|
|
33
|
-
title: 'Navigate the current image',
|
|
34
|
-
ariaLabel: 'Navigate the current image'
|
|
35
|
-
};
|
|
36
|
-
// /**
|
|
37
|
-
// * Default refresh button object
|
|
38
|
-
// */
|
|
39
|
-
// export const KS_DEFAULT_BTN_REFRESH: ButtonConfig = {
|
|
40
|
-
// className: 'refresh-image',
|
|
41
|
-
// size: KS_DEFAULT_SIZE,
|
|
42
|
-
// type: ButtonType.REFRESH,
|
|
43
|
-
// title: 'Refresh all images',
|
|
44
|
-
// ariaLabel: 'Refresh all images'
|
|
45
|
-
// };
|
|
46
|
-
/**
|
|
47
|
-
* Default delete button object
|
|
48
|
-
*/
|
|
49
|
-
export const KS_DEFAULT_BTN_DELETE = {
|
|
50
|
-
className: 'delete-image',
|
|
51
|
-
size: KS_DEFAULT_SIZE,
|
|
52
|
-
type: ButtonType.DELETE,
|
|
53
|
-
title: 'Delete the current image',
|
|
54
|
-
ariaLabel: 'Delete the current image'
|
|
55
|
-
};
|
|
56
|
-
/**
|
|
57
|
-
* Default full-screen button object
|
|
58
|
-
*/
|
|
59
|
-
export const KS_DEFAULT_BTN_FULL_SCREEN = {
|
|
60
|
-
className: 'fullscreen-image',
|
|
61
|
-
size: KS_DEFAULT_SIZE,
|
|
62
|
-
type: ButtonType.FULLSCREEN,
|
|
63
|
-
title: 'Switch to full-screen',
|
|
64
|
-
ariaLabel: 'Switch to full-screen'
|
|
65
|
-
};
|
|
66
|
-
/**
|
|
67
|
-
* Default rotate button object
|
|
68
|
-
*/
|
|
69
|
-
// export const KS_DEFAULT_BTN_ROTATE: ButtonConfig = {
|
|
70
|
-
// className: 'rotate-image',
|
|
71
|
-
// size: KS_DEFAULT_SIZE,
|
|
72
|
-
// type: ButtonType.ROTATE,
|
|
73
|
-
// title: 'Rotate clockwise of 90 degrees the current image',
|
|
74
|
-
// ariaLabel: 'Rotate clockwise of 90 degrees the current image'
|
|
75
|
-
// };
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBwZXItYnV0dG9ucy1kZWZhdWx0LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL2tzODkvYW5ndWxhci1tb2RhbC1nYWxsZXJ5L3NyYy8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL3VwcGVyLWJ1dHRvbnMvdXBwZXItYnV0dG9ucy1kZWZhdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsVUFBVSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFHaEY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUV2RTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFpQjtJQUNoRCxTQUFTLEVBQUUsYUFBYTtJQUN4QixJQUFJLEVBQUUsZUFBZTtJQUNyQixJQUFJLEVBQUUsVUFBVSxDQUFDLEtBQUs7SUFDdEIsS0FBSyxFQUFFLGdDQUFnQztJQUN2QyxTQUFTLEVBQUUsZ0NBQWdDO0NBQzVDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFpQjtJQUNuRCxTQUFTLEVBQUUsZ0JBQWdCO0lBQzNCLElBQUksRUFBRSxlQUFlO0lBQ3JCLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUTtJQUN6QixLQUFLLEVBQUUsNEJBQTRCO0lBQ25DLFNBQVMsRUFBRSw0QkFBNEI7Q0FDeEMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQWlCO0lBQ2pELFNBQVMsRUFBRSxlQUFlO0lBQzFCLElBQUksRUFBRSxlQUFlO0lBQ3JCLElBQUksRUFBRSxVQUFVLENBQUMsTUFBTTtJQUN2QixLQUFLLEVBQUUsNEJBQTRCO0lBQ25DLFNBQVMsRUFBRSw0QkFBNEI7Q0FDeEMsQ0FBQztBQUNGLE1BQU07QUFDTixtQ0FBbUM7QUFDbkMsTUFBTTtBQUNOLHdEQUF3RDtBQUN4RCxnQ0FBZ0M7QUFDaEMsMkJBQTJCO0FBQzNCLDhCQUE4QjtBQUM5QixpQ0FBaUM7QUFDakMsb0NBQW9DO0FBQ3BDLEtBQUs7QUFFTDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFpQjtJQUNqRCxTQUFTLEVBQUUsY0FBYztJQUN6QixJQUFJLEVBQUUsZUFBZTtJQUNyQixJQUFJLEVBQUUsVUFBVSxDQUFDLE1BQU07SUFDdkIsS0FBSyxFQUFFLDBCQUEwQjtJQUNqQyxTQUFTLEVBQUUsMEJBQTBCO0NBQ3RDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFpQjtJQUN0RCxTQUFTLEVBQUUsa0JBQWtCO0lBQzdCLElBQUksRUFBRSxlQUFlO0lBQ3JCLElBQUksRUFBRSxVQUFVLENBQUMsVUFBVTtJQUMzQixLQUFLLEVBQUUsdUJBQXVCO0lBQzlCLFNBQVMsRUFBRSx1QkFBdUI7Q0FDbkMsQ0FBQztBQUNGOztHQUVHO0FBQ0gsdURBQXVEO0FBQ3ZELCtCQUErQjtBQUMvQiwyQkFBMkI7QUFDM0IsNkJBQTZCO0FBQzdCLCtEQUErRDtBQUMvRCxrRUFBa0U7QUFDbEUsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1dHRvbkNvbmZpZywgQnV0dG9uVHlwZSB9IGZyb20gJy4uLy4uL21vZGVsL2J1dHRvbnMtY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSAnLi4vLi4vbW9kZWwvc2l6ZS5pbnRlcmZhY2UnO1xuXG4vKipcbiAqIERlZmF1bHQgYnV0dG9uIHNpemUgb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBLU19ERUZBVUxUX1NJWkU6IFNpemUgPSB7IGhlaWdodDogJ2F1dG8nLCB3aWR0aDogJzMwcHgnIH07XG5cbi8qKlxuICogRGVmYXVsdCBjbG9zZSBidXR0b24gb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBLU19ERUZBVUxUX0JUTl9DTE9TRTogQnV0dG9uQ29uZmlnID0ge1xuICBjbGFzc05hbWU6ICdjbG9zZS1pbWFnZScsXG4gIHNpemU6IEtTX0RFRkFVTFRfU0laRSxcbiAgdHlwZTogQnV0dG9uVHlwZS5DTE9TRSxcbiAgdGl0bGU6ICdDbG9zZSB0aGlzIG1vZGFsIGltYWdlIGdhbGxlcnknLFxuICBhcmlhTGFiZWw6ICdDbG9zZSB0aGlzIG1vZGFsIGltYWdlIGdhbGxlcnknXG59O1xuXG4vKipcbiAqIERlZmF1bHQgZG93bmxvYWQgYnV0dG9uIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgS1NfREVGQVVMVF9CVE5fRE9XTkxPQUQ6IEJ1dHRvbkNvbmZpZyA9IHtcbiAgY2xhc3NOYW1lOiAnZG93bmxvYWQtaW1hZ2UnLFxuICBzaXplOiBLU19ERUZBVUxUX1NJWkUsXG4gIHR5cGU6IEJ1dHRvblR5cGUuRE9XTkxPQUQsXG4gIHRpdGxlOiAnRG93bmxvYWQgdGhlIGN1cnJlbnQgaW1hZ2UnLFxuICBhcmlhTGFiZWw6ICdEb3dubG9hZCB0aGUgY3VycmVudCBpbWFnZSdcbn07XG5cbi8qKlxuICogRGVmYXVsdCBleHR1cmwgYnV0dG9uIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgS1NfREVGQVVMVF9CVE5fRVhUVVJMOiBCdXR0b25Db25maWcgPSB7XG4gIGNsYXNzTmFtZTogJ2V4dC11cmwtaW1hZ2UnLFxuICBzaXplOiBLU19ERUZBVUxUX1NJWkUsXG4gIHR5cGU6IEJ1dHRvblR5cGUuRVhUVVJMLFxuICB0aXRsZTogJ05hdmlnYXRlIHRoZSBjdXJyZW50IGltYWdlJyxcbiAgYXJpYUxhYmVsOiAnTmF2aWdhdGUgdGhlIGN1cnJlbnQgaW1hZ2UnXG59O1xuLy8gLyoqXG4vLyAgKiBEZWZhdWx0IHJlZnJlc2ggYnV0dG9uIG9iamVjdFxuLy8gICovXG4vLyBleHBvcnQgY29uc3QgS1NfREVGQVVMVF9CVE5fUkVGUkVTSDogQnV0dG9uQ29uZmlnID0ge1xuLy8gICBjbGFzc05hbWU6ICdyZWZyZXNoLWltYWdlJyxcbi8vICAgc2l6ZTogS1NfREVGQVVMVF9TSVpFLFxuLy8gICB0eXBlOiBCdXR0b25UeXBlLlJFRlJFU0gsXG4vLyAgIHRpdGxlOiAnUmVmcmVzaCBhbGwgaW1hZ2VzJyxcbi8vICAgYXJpYUxhYmVsOiAnUmVmcmVzaCBhbGwgaW1hZ2VzJ1xuLy8gfTtcblxuLyoqXG4gKiBEZWZhdWx0IGRlbGV0ZSBidXR0b24gb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBLU19ERUZBVUxUX0JUTl9ERUxFVEU6IEJ1dHRvbkNvbmZpZyA9IHtcbiAgY2xhc3NOYW1lOiAnZGVsZXRlLWltYWdlJyxcbiAgc2l6ZTogS1NfREVGQVVMVF9TSVpFLFxuICB0eXBlOiBCdXR0b25UeXBlLkRFTEVURSxcbiAgdGl0bGU6ICdEZWxldGUgdGhlIGN1cnJlbnQgaW1hZ2UnLFxuICBhcmlhTGFiZWw6ICdEZWxldGUgdGhlIGN1cnJlbnQgaW1hZ2UnXG59O1xuXG4vKipcbiAqIERlZmF1bHQgZnVsbC1zY3JlZW4gYnV0dG9uIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgS1NfREVGQVVMVF9CVE5fRlVMTF9TQ1JFRU46IEJ1dHRvbkNvbmZpZyA9IHtcbiAgY2xhc3NOYW1lOiAnZnVsbHNjcmVlbi1pbWFnZScsXG4gIHNpemU6IEtTX0RFRkFVTFRfU0laRSxcbiAgdHlwZTogQnV0dG9uVHlwZS5GVUxMU0NSRUVOLFxuICB0aXRsZTogJ1N3aXRjaCB0byBmdWxsLXNjcmVlbicsXG4gIGFyaWFMYWJlbDogJ1N3aXRjaCB0byBmdWxsLXNjcmVlbidcbn07XG4vKipcbiAqIERlZmF1bHQgcm90YXRlIGJ1dHRvbiBvYmplY3RcbiAqL1xuLy8gZXhwb3J0IGNvbnN0IEtTX0RFRkFVTFRfQlROX1JPVEFURTogQnV0dG9uQ29uZmlnID0ge1xuLy8gICBjbGFzc05hbWU6ICdyb3RhdGUtaW1hZ2UnLFxuLy8gICBzaXplOiBLU19ERUZBVUxUX1NJWkUsXG4vLyAgIHR5cGU6IEJ1dHRvblR5cGUuUk9UQVRFLFxuLy8gICB0aXRsZTogJ1JvdGF0ZSBjbG9ja3dpc2Ugb2YgOTAgZGVncmVlcyB0aGUgY3VycmVudCBpbWFnZScsXG4vLyAgIGFyaWFMYWJlbDogJ1JvdGF0ZSBjbG9ja3dpc2Ugb2YgOTAgZGVncmVlcyB0aGUgY3VycmVudCBpbWFnZSdcbi8vIH07XG4iXX0=
|