@sumaris-net/ngx-components 18.25.16 → 18.25.18
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/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +4 -1
- package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +4 -1
- package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +47 -12
- package/esm2022/src/app/shared/image/gallery/image-gallery.model.mjs +1 -1
- package/esm2022/src/app/shared/image/gallery/slideshow/image-gallery-slideshow.component.mjs +121 -15
- package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.mjs +7 -3
- package/fesm2022/sumaris-net.ngx-components.mjs +178 -27
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/src/app/core/table/entities-async-table-datasource.class.d.ts +1 -0
- package/src/app/core/table/entities-table-datasource.class.d.ts +1 -0
- package/src/app/shared/image/gallery/image-gallery.component.d.ts +25 -6
- package/src/app/shared/image/gallery/image-gallery.model.d.ts +4 -0
- package/src/app/shared/image/gallery/slideshow/image-gallery-slideshow.component.d.ts +39 -4
- package/src/app/shared/image/gallery/testing/gallery.testing.d.ts +2 -0
- package/src/app/shared/inputs.d.ts +1 -1
- package/src/assets/i18n/en-US.json +2 -0
- package/src/assets/i18n/en.json +2 -0
- package/src/assets/i18n/fr.json +2 -0
- package/src/assets/manifest.json +1 -1
|
@@ -18,6 +18,7 @@ export class GalleryTestPage {
|
|
|
18
18
|
_subscription = new Subscription();
|
|
19
19
|
dataSource;
|
|
20
20
|
slideshowMode = 'modal';
|
|
21
|
+
enableSlideshowLoop = true;
|
|
21
22
|
debug = false;
|
|
22
23
|
constructor(dataService, route) {
|
|
23
24
|
this.dataService = dataService;
|
|
@@ -41,14 +42,17 @@ export class GalleryTestPage {
|
|
|
41
42
|
toggleZoomPresentation() {
|
|
42
43
|
this.slideshowMode = this.slideshowMode === 'modal' ? 'inline' : 'modal';
|
|
43
44
|
}
|
|
45
|
+
toggleSlideshowLoop() {
|
|
46
|
+
this.enableSlideshowLoop = !this.enableSlideshowLoop;
|
|
47
|
+
}
|
|
44
48
|
toggleDebug() {
|
|
45
49
|
this.debug = !this.debug;
|
|
46
50
|
}
|
|
47
51
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GalleryTestPage, deps: [{ token: i1.ImageAttachmentService }, { token: i2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
|
|
48
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GalleryTestPage, selector: "app-gallery-test-page", providers: [{ provide: ImageAttachmentService, useClass: ImageAttachmentService }], ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"primary\">\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Image gallery</ion-title>\n\n <ion-buttons slot=\"end\">\n <button mat-icon-button [matMenuTriggerFor]=\"toolbarOptionsMenu\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<mat-menu #toolbarOptionsMenu=\"matMenu\" xPosition=\"after\">\n <ng-template matMenuContent>\n <button mat-menu-item (click)=\"toggleZoomPresentation()\">\n <mat-icon>{{ slideshowMode === 'modal' ? 'check' : '' }}</mat-icon>\n <ion-label translate>IMAGE.GALLERY.BTN_ENABLE_MODAL_ZOOM</ion-label>\n </button>\n\n <button mat-menu-item (click)=\"toggleDebug()\">\n <mat-icon>{{ debug ? 'check' : '' }}</mat-icon>\n <ion-label translate>COMMON.DEBUG.BTN_ENABLE_DEBUG</ion-label>\n </button>\n </ng-template>\n</mat-menu>\n\n<ion-content>\n <!-- DEBUG -->\n @if (debug) {\n <app-debug title=\"Galley\">\n <ion-grid>\n <ion-row>\n <ion-col>gallery.count: {{ gallery.rows?.length }}</ion-col>\n </ion-row>\n </ion-grid>\n </app-debug>\n }\n\n <app-image-gallery\n #gallery\n [dataSource]=\"dataSource\"\n [slideshowMode]=\"slideshowMode\"\n [inlineZoomHeight]=\"'100%'\"\n (onAfterAddRows)=\"save()\"\n (onAfterEditRow)=\"save()\"\n [debug]=\"debug\"\n ></app-image-gallery>\n</ion-content>\n", dependencies: [{ kind: "component", type: i3.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i3.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i3.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i3.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i3.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i3.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i3.IonRow, selector: "ion-row" }, { kind: "component", type: i3.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i3.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i3.IonBackButton, selector: "ion-back-button" }, { kind: "directive", type: i4.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i5.AppImageGalleryComponent, selector: "app-image-gallery", inputs: ["cardColor", "debug", "disabled", "readOnly", "mobile", "mode", "confirmBeforeDelete", "showToolbar", "showFabButton", "showTitle", "showAddToolbarButton", "showAddTextButton", "showAddCardButton", "showCardToolbar", "addButtonColor", "addButtonText", "cardTemplate", "imageSizes", "imageSizeQueryParam", "enableMouseZoom", "wheelZoomStep", "maxZoomRatio", "enableRotate", "enableCrop", "
|
|
52
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GalleryTestPage, selector: "app-gallery-test-page", providers: [{ provide: ImageAttachmentService, useClass: ImageAttachmentService }], ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"primary\">\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Image gallery</ion-title>\n\n <ion-buttons slot=\"end\">\n <button mat-icon-button [matMenuTriggerFor]=\"toolbarOptionsMenu\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<mat-menu #toolbarOptionsMenu=\"matMenu\" xPosition=\"after\">\n <ng-template matMenuContent>\n <button mat-menu-item (click)=\"toggleZoomPresentation()\">\n <mat-icon>{{ slideshowMode === 'modal' ? 'check' : '' }}</mat-icon>\n <ion-label translate>IMAGE.GALLERY.BTN_ENABLE_MODAL_ZOOM</ion-label>\n </button>\n\n <button mat-menu-item (click)=\"toggleSlideshowLoop()\">\n <mat-icon>{{ enableSlideshowLoop ? 'check' : '' }}</mat-icon>\n <ion-label translate>IMAGE.GALLERY.BTN_ENABLE_LOOP</ion-label>\n </button>\n\n <button mat-menu-item (click)=\"toggleDebug()\">\n <mat-icon>{{ debug ? 'check' : '' }}</mat-icon>\n <ion-label translate>COMMON.DEBUG.BTN_ENABLE_DEBUG</ion-label>\n </button>\n </ng-template>\n</mat-menu>\n\n<ion-content>\n <!-- DEBUG -->\n @if (debug) {\n <app-debug title=\"Galley\">\n <ion-grid>\n <ion-row>\n <ion-col>gallery.count: {{ gallery.rows?.length }}</ion-col>\n </ion-row>\n </ion-grid>\n </app-debug>\n }\n\n <app-image-gallery\n #gallery\n [dataSource]=\"dataSource\"\n [slideshowMode]=\"slideshowMode\"\n [enableSlideshowLoop]=\"enableSlideshowLoop\"\n [inlineZoomHeight]=\"'100%'\"\n (onAfterAddRows)=\"save()\"\n (onAfterEditRow)=\"save()\"\n [debug]=\"debug\"\n ></app-image-gallery>\n</ion-content>\n", dependencies: [{ kind: "component", type: i3.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i3.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i3.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i3.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i3.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i3.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i3.IonRow, selector: "ion-row" }, { kind: "component", type: i3.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i3.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i3.IonBackButton, selector: "ion-back-button" }, { kind: "directive", type: i4.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i5.AppImageGalleryComponent, selector: "app-image-gallery", inputs: ["cardColor", "debug", "disabled", "readOnly", "mobile", "mode", "confirmBeforeDelete", "showToolbar", "showFabButton", "showTitle", "showAddToolbarButton", "showAddTextButton", "showAddCardButton", "showCardToolbar", "addButtonColor", "addButtonText", "cardTemplate", "imageSizes", "imageSizeQueryParam", "enableMouseZoom", "wheelZoomStep", "maxZoomRatio", "enableRotate", "enableCrop", "editionFormat", "editionQuality", "slideshowMode", "inlineZoomHeight", "enableSlideshowLoop", "canFetchMore", "dataSource"], outputs: ["onBeforeDeleteRows", "onAfterAddRows", "onAfterEditRow", "onAfterEditImage", "click", "previousSlide", "nextSlide", "fetchMore"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i8.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i8.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i8.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i8.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i9.DebugComponent, selector: "app-debug", inputs: ["titlePrefix", "title", "enable", "expanded"] }] });
|
|
49
53
|
}
|
|
50
54
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GalleryTestPage, decorators: [{
|
|
51
55
|
type: Component,
|
|
52
|
-
args: [{ selector: 'app-gallery-test-page', providers: [{ provide: ImageAttachmentService, useClass: ImageAttachmentService }], template: "<ion-header>\n <ion-toolbar color=\"primary\">\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Image gallery</ion-title>\n\n <ion-buttons slot=\"end\">\n <button mat-icon-button [matMenuTriggerFor]=\"toolbarOptionsMenu\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<mat-menu #toolbarOptionsMenu=\"matMenu\" xPosition=\"after\">\n <ng-template matMenuContent>\n <button mat-menu-item (click)=\"toggleZoomPresentation()\">\n <mat-icon>{{ slideshowMode === 'modal' ? 'check' : '' }}</mat-icon>\n <ion-label translate>IMAGE.GALLERY.BTN_ENABLE_MODAL_ZOOM</ion-label>\n </button>\n\n <button mat-menu-item (click)=\"toggleDebug()\">\n <mat-icon>{{ debug ? 'check' : '' }}</mat-icon>\n <ion-label translate>COMMON.DEBUG.BTN_ENABLE_DEBUG</ion-label>\n </button>\n </ng-template>\n</mat-menu>\n\n<ion-content>\n <!-- DEBUG -->\n @if (debug) {\n <app-debug title=\"Galley\">\n <ion-grid>\n <ion-row>\n <ion-col>gallery.count: {{ gallery.rows?.length }}</ion-col>\n </ion-row>\n </ion-grid>\n </app-debug>\n }\n\n <app-image-gallery\n #gallery\n [dataSource]=\"dataSource\"\n [slideshowMode]=\"slideshowMode\"\n [inlineZoomHeight]=\"'100%'\"\n (onAfterAddRows)=\"save()\"\n (onAfterEditRow)=\"save()\"\n [debug]=\"debug\"\n ></app-image-gallery>\n</ion-content>\n" }]
|
|
56
|
+
args: [{ selector: 'app-gallery-test-page', providers: [{ provide: ImageAttachmentService, useClass: ImageAttachmentService }], template: "<ion-header>\n <ion-toolbar color=\"primary\">\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Image gallery</ion-title>\n\n <ion-buttons slot=\"end\">\n <button mat-icon-button [matMenuTriggerFor]=\"toolbarOptionsMenu\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<mat-menu #toolbarOptionsMenu=\"matMenu\" xPosition=\"after\">\n <ng-template matMenuContent>\n <button mat-menu-item (click)=\"toggleZoomPresentation()\">\n <mat-icon>{{ slideshowMode === 'modal' ? 'check' : '' }}</mat-icon>\n <ion-label translate>IMAGE.GALLERY.BTN_ENABLE_MODAL_ZOOM</ion-label>\n </button>\n\n <button mat-menu-item (click)=\"toggleSlideshowLoop()\">\n <mat-icon>{{ enableSlideshowLoop ? 'check' : '' }}</mat-icon>\n <ion-label translate>IMAGE.GALLERY.BTN_ENABLE_LOOP</ion-label>\n </button>\n\n <button mat-menu-item (click)=\"toggleDebug()\">\n <mat-icon>{{ debug ? 'check' : '' }}</mat-icon>\n <ion-label translate>COMMON.DEBUG.BTN_ENABLE_DEBUG</ion-label>\n </button>\n </ng-template>\n</mat-menu>\n\n<ion-content>\n <!-- DEBUG -->\n @if (debug) {\n <app-debug title=\"Galley\">\n <ion-grid>\n <ion-row>\n <ion-col>gallery.count: {{ gallery.rows?.length }}</ion-col>\n </ion-row>\n </ion-grid>\n </app-debug>\n }\n\n <app-image-gallery\n #gallery\n [dataSource]=\"dataSource\"\n [slideshowMode]=\"slideshowMode\"\n [enableSlideshowLoop]=\"enableSlideshowLoop\"\n [inlineZoomHeight]=\"'100%'\"\n (onAfterAddRows)=\"save()\"\n (onAfterEditRow)=\"save()\"\n [debug]=\"debug\"\n ></app-image-gallery>\n</ion-content>\n" }]
|
|
53
57
|
}], ctorParameters: () => [{ type: i1.ImageAttachmentService }, { type: i2.ActivatedRoute }] });
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FsbGVyeS50ZXN0aW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvaW1hZ2UvZ2FsbGVyeS90ZXN0aW5nL2dhbGxlcnkudGVzdGluZy50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL2ltYWdlL2dhbGxlcnkvdGVzdGluZy9nYWxsZXJ5LnRlc3RpbmcuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUU3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDakcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7QUFTcEMsTUFBTSxPQUFPLGVBQWU7SUFRZDtJQUNBO0lBUkosYUFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDbEMsVUFBVSxDQUFrRTtJQUMzRSxhQUFhLEdBQThCLE9BQU8sQ0FBQztJQUNuRCxtQkFBbUIsR0FBRyxJQUFJLENBQUM7SUFDM0IsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUV4QixZQUNZLFdBQW1DLEVBQ25DLEtBQXFCO1FBRHJCLGdCQUFXLEdBQVgsV0FBVyxDQUF3QjtRQUNuQyxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUUvQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksdUJBQXVCLENBQXlDLGVBQWUsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRTtZQUM3SCxnQkFBZ0IsRUFBRSxJQUFJO1lBQ3RCLGlCQUFpQixFQUFFLEtBQUs7U0FDekIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLE1BQU0sQ0FBQztJQUN6RSxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxhQUFhLEdBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBK0IsSUFBSSxPQUFPLENBQUM7UUFDekgsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFRCxJQUFJO1FBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQzNFLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ3ZELENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDM0IsQ0FBQzt3R0F6Q1UsZUFBZTs0RkFBZixlQUFlLGdEQUZmLENBQUMsRUFBRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsUUFBUSxFQUFFLHNCQUFzQixFQUFFLENBQUMsMEJDWHBGLHd1REEwREE7OzRGRDdDYSxlQUFlO2tCQUwzQixTQUFTOytCQUNFLHVCQUF1QixhQUV0QixDQUFDLEVBQUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLFFBQVEsRUFBRSxzQkFBc0IsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSW1hZ2VBdHRhY2htZW50LCBJbWFnZUF0dGFjaG1lbnRTZXJ2aWNlIH0gZnJvbSAnLi9nYWxsZXJ5LnNlcnZpY2UudGVzdGluZyc7XG5pbXBvcnQgeyBFbnRpdGllc1RhYmxlRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvdGFibGUvZW50aXRpZXMtdGFibGUtZGF0YXNvdXJjZS5jbGFzcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEltYWdlQXR0YWNobWVudEZpbHRlciB9IGZyb20gJy4vZ2FsbGVncnkubW9kZWwudGVzdGluZyc7XG5pbXBvcnQgeyBJbWFnZUdhbGxlcnlTbGlkZXNob3dNb2RlIH0gZnJvbSAnLi4vaW1hZ2UtZ2FsbGVyeS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZ2FsbGVyeS10ZXN0LXBhZ2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vZ2FsbGVyeS50ZXN0aW5nLmh0bWwnLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IEltYWdlQXR0YWNobWVudFNlcnZpY2UsIHVzZUNsYXNzOiBJbWFnZUF0dGFjaG1lbnRTZXJ2aWNlIH1dLFxufSlcbmV4cG9ydCBjbGFzcyBHYWxsZXJ5VGVzdFBhZ2UgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcmVhZG9ubHkgZGF0YVNvdXJjZTogRW50aXRpZXNUYWJsZURhdGFTb3VyY2U8SW1hZ2VBdHRhY2htZW50LCBJbWFnZUF0dGFjaG1lbnRGaWx0ZXI+O1xuICBwcm90ZWN0ZWQgc2xpZGVzaG93TW9kZTogSW1hZ2VHYWxsZXJ5U2xpZGVzaG93TW9kZSA9ICdtb2RhbCc7XG4gIHByb3RlY3RlZCBlbmFibGVTbGlkZXNob3dMb29wID0gdHJ1ZTtcbiAgcHJvdGVjdGVkIGRlYnVnID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGRhdGFTZXJ2aWNlOiBJbWFnZUF0dGFjaG1lbnRTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCByb3V0ZTogQWN0aXZhdGVkUm91dGVcbiAgKSB7XG4gICAgdGhpcy5kYXRhU291cmNlID0gbmV3IEVudGl0aWVzVGFibGVEYXRhU291cmNlPEltYWdlQXR0YWNobWVudCwgSW1hZ2VBdHRhY2htZW50RmlsdGVyPihJbWFnZUF0dGFjaG1lbnQsIHRoaXMuZGF0YVNlcnZpY2UsIG51bGwsIHtcbiAgICAgIHNhdmVCZWZvcmVEZWxldGU6IHRydWUsXG4gICAgICBzYXZlT25seURpcnR5Um93czogZmFsc2UsXG4gICAgfSk7XG4gICAgdGhpcy5kZWJ1ZyA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbU1hcC5nZXQoJ2RlYnVnJykgPT09ICd0cnVlJztcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc2xpZGVzaG93TW9kZSA9ICh0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1NYXAuZ2V0KCd6b29tUHJlc2VudGF0aW9uJykgYXMgSW1hZ2VHYWxsZXJ5U2xpZGVzaG93TW9kZSkgfHwgJ21vZGFsJztcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKHRoaXMuZGF0YVNvdXJjZS53YXRjaEFsbCgwLCAxMDAsIG51bGwsIG51bGwsIG51bGwpLnN1YnNjcmliZSgpKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgc2F2ZSgpIHtcbiAgICB0aGlzLmRhdGFTb3VyY2Uuc2F2ZSgpO1xuICB9XG5cbiAgdG9nZ2xlWm9vbVByZXNlbnRhdGlvbigpIHtcbiAgICB0aGlzLnNsaWRlc2hvd01vZGUgPSB0aGlzLnNsaWRlc2hvd01vZGUgPT09ICdtb2RhbCcgPyAnaW5saW5lJyA6ICdtb2RhbCc7XG4gIH1cblxuICB0b2dnbGVTbGlkZXNob3dMb29wKCkge1xuICAgIHRoaXMuZW5hYmxlU2xpZGVzaG93TG9vcCA9ICF0aGlzLmVuYWJsZVNsaWRlc2hvd0xvb3A7XG4gIH1cblxuICB0b2dnbGVEZWJ1ZygpIHtcbiAgICB0aGlzLmRlYnVnID0gIXRoaXMuZGVidWc7XG4gIH1cbn1cbiIsIjxpb24taGVhZGVyPlxuICA8aW9uLXRvb2xiYXIgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgPGlvbi1idXR0b25zIHNsb3Q9XCJzdGFydFwiPlxuICAgICAgPGlvbi1iYWNrLWJ1dHRvbj48L2lvbi1iYWNrLWJ1dHRvbj5cbiAgICA8L2lvbi1idXR0b25zPlxuXG4gICAgPGlvbi10aXRsZT5JbWFnZSBnYWxsZXJ5PC9pb24tdGl0bGU+XG5cbiAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiPlxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cInRvb2xiYXJPcHRpb25zTWVudVwiPlxuICAgICAgICA8bWF0LWljb24+bW9yZV92ZXJ0PC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvaW9uLWJ1dHRvbnM+XG4gIDwvaW9uLXRvb2xiYXI+XG48L2lvbi1oZWFkZXI+XG5cbjxtYXQtbWVudSAjdG9vbGJhck9wdGlvbnNNZW51PVwibWF0TWVudVwiIHhQb3NpdGlvbj1cImFmdGVyXCI+XG4gIDxuZy10ZW1wbGF0ZSBtYXRNZW51Q29udGVudD5cbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInRvZ2dsZVpvb21QcmVzZW50YXRpb24oKVwiPlxuICAgICAgPG1hdC1pY29uPnt7IHNsaWRlc2hvd01vZGUgPT09ICdtb2RhbCcgPyAnY2hlY2snIDogJycgfX08L21hdC1pY29uPlxuICAgICAgPGlvbi1sYWJlbCB0cmFuc2xhdGU+SU1BR0UuR0FMTEVSWS5CVE5fRU5BQkxFX01PREFMX1pPT008L2lvbi1sYWJlbD5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwidG9nZ2xlU2xpZGVzaG93TG9vcCgpXCI+XG4gICAgICA8bWF0LWljb24+e3sgZW5hYmxlU2xpZGVzaG93TG9vcCA/ICdjaGVjaycgOiAnJyB9fTwvbWF0LWljb24+XG4gICAgICA8aW9uLWxhYmVsIHRyYW5zbGF0ZT5JTUFHRS5HQUxMRVJZLkJUTl9FTkFCTEVfTE9PUDwvaW9uLWxhYmVsPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJ0b2dnbGVEZWJ1ZygpXCI+XG4gICAgICA8bWF0LWljb24+e3sgZGVidWcgPyAnY2hlY2snIDogJycgfX08L21hdC1pY29uPlxuICAgICAgPGlvbi1sYWJlbCB0cmFuc2xhdGU+Q09NTU9OLkRFQlVHLkJUTl9FTkFCTEVfREVCVUc8L2lvbi1sYWJlbD5cbiAgICA8L2J1dHRvbj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvbWF0LW1lbnU+XG5cbjxpb24tY29udGVudD5cbiAgPCEtLSBERUJVRyAtLT5cbiAgQGlmIChkZWJ1Zykge1xuICAgIDxhcHAtZGVidWcgdGl0bGU9XCJHYWxsZXlcIj5cbiAgICAgIDxpb24tZ3JpZD5cbiAgICAgICAgPGlvbi1yb3c+XG4gICAgICAgICAgPGlvbi1jb2w+Z2FsbGVyeS5jb3VudDoge3sgZ2FsbGVyeS5yb3dzPy5sZW5ndGggfX08L2lvbi1jb2w+XG4gICAgICAgIDwvaW9uLXJvdz5cbiAgICAgIDwvaW9uLWdyaWQ+XG4gICAgPC9hcHAtZGVidWc+XG4gIH1cblxuICA8YXBwLWltYWdlLWdhbGxlcnlcbiAgICAjZ2FsbGVyeVxuICAgIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIlxuICAgIFtzbGlkZXNob3dNb2RlXT1cInNsaWRlc2hvd01vZGVcIlxuICAgIFtlbmFibGVTbGlkZXNob3dMb29wXT1cImVuYWJsZVNsaWRlc2hvd0xvb3BcIlxuICAgIFtpbmxpbmVab29tSGVpZ2h0XT1cIicxMDAlJ1wiXG4gICAgKG9uQWZ0ZXJBZGRSb3dzKT1cInNhdmUoKVwiXG4gICAgKG9uQWZ0ZXJFZGl0Um93KT1cInNhdmUoKVwiXG4gICAgW2RlYnVnXT1cImRlYnVnXCJcbiAgPjwvYXBwLWltYWdlLWdhbGxlcnk+XG48L2lvbi1jb250ZW50PlxuIl19
|