@eui/mobile-core 17.2.0-snapshot-1716538151901 → 17.2.0-snapshot-1716885030476
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/docs/components/EuimPdfViewerComponent.html +22 -2
- package/docs/dependencies.html +5 -5
- package/docs/js/menu-wc.js +3 -3
- package/docs/js/menu-wc_es5.js +11 -11
- package/docs/js/search/search_index.js +2 -2
- package/esm2022/lib/components/euim-pdf-viewer/euim-pdf-viewer.component.mjs +71 -29
- package/esm2022/lib/components/euim-pdf-viewer/euim-pdf-viewer.module.mjs +7 -3
- package/fesm2022/eui-mobile-core.mjs +73 -29
- package/fesm2022/eui-mobile-core.mjs.map +1 -1
- package/lib/components/euim-pdf-viewer/euim-pdf-viewer.component.d.ts +26 -3
- package/lib/components/euim-pdf-viewer/euim-pdf-viewer.component.d.ts.map +1 -1
- package/lib/components/euim-pdf-viewer/euim-pdf-viewer.module.d.ts +2 -1
- package/lib/components/euim-pdf-viewer/euim-pdf-viewer.module.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,18 +1,24 @@
|
|
|
1
1
|
import { Component, Input, ViewEncapsulation, ViewChild } from '@angular/core';
|
|
2
|
+
import { Subject, throwError } from 'rxjs';
|
|
3
|
+
import { map, switchMap, catchError, startWith } from 'rxjs/operators';
|
|
2
4
|
import * as i0 from "@angular/core";
|
|
3
5
|
import * as i1 from "@ionic/angular";
|
|
4
|
-
import * as i2 from "
|
|
5
|
-
import * as i3 from "
|
|
6
|
-
import * as i4 from "
|
|
7
|
-
import * as i5 from "../euim-spinner/euim-spinner
|
|
8
|
-
import * as i6 from "
|
|
6
|
+
import * as i2 from "@angular/common/http";
|
|
7
|
+
import * as i3 from "ng2-pdf-viewer";
|
|
8
|
+
import * as i4 from "@mapaxe/ngx-pinch-zoom";
|
|
9
|
+
import * as i5 from "../euim-spinner/euim-spinner.component";
|
|
10
|
+
import * as i6 from "../euim-spinner/euim-spinner-message/euim-spinner-message.component";
|
|
11
|
+
import * as i7 from "@ngx-translate/core";
|
|
9
12
|
export class EuimPdfViewerComponent {
|
|
10
|
-
constructor(alertService) {
|
|
13
|
+
constructor(alertService, http) {
|
|
11
14
|
this.alertService = alertService;
|
|
15
|
+
this.http = http;
|
|
12
16
|
this.page = 1;
|
|
13
17
|
this.zoom = 1;
|
|
14
18
|
this.loading = true;
|
|
15
19
|
this.errorMessage = '';
|
|
20
|
+
this.pdfNumPages = 1;
|
|
21
|
+
this.urlChange$ = new Subject();
|
|
16
22
|
this.showDefaultError = true;
|
|
17
23
|
setTimeout(() => {
|
|
18
24
|
if (this.showDefaultError) {
|
|
@@ -21,6 +27,29 @@ export class EuimPdfViewerComponent {
|
|
|
21
27
|
}
|
|
22
28
|
}, 15000);
|
|
23
29
|
}
|
|
30
|
+
ngOnInit() {
|
|
31
|
+
// subscribe and cancel previous subscription (if any) for fetching data while URL changes
|
|
32
|
+
this.subscription = this.urlChange$.pipe(startWith(this.url), switchMap((url) => this.getPDFData(url))).subscribe({
|
|
33
|
+
next: (data) => {
|
|
34
|
+
this.data = data;
|
|
35
|
+
this.showDefaultError = false;
|
|
36
|
+
this.loading = false;
|
|
37
|
+
},
|
|
38
|
+
error: () => {
|
|
39
|
+
this.onError();
|
|
40
|
+
this.data = null;
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
ngOnChanges(changes) {
|
|
45
|
+
if (changes['url']) {
|
|
46
|
+
this.loading = true;
|
|
47
|
+
this.urlChange$.next(changes['url'].currentValue);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
ngOnDestroy() {
|
|
51
|
+
this.subscription.unsubscribe();
|
|
52
|
+
}
|
|
24
53
|
zoomChange(event) {
|
|
25
54
|
this.eventResult = event;
|
|
26
55
|
this.zoom = this.eventResult.scale;
|
|
@@ -29,6 +58,7 @@ export class EuimPdfViewerComponent {
|
|
|
29
58
|
this.showDefaultError = false;
|
|
30
59
|
this.loading = false;
|
|
31
60
|
this.pdf = pdf;
|
|
61
|
+
this.pdfNumPages = this.pdf.numPages;
|
|
32
62
|
}
|
|
33
63
|
onError() {
|
|
34
64
|
this.showDefaultError = false;
|
|
@@ -36,16 +66,8 @@ export class EuimPdfViewerComponent {
|
|
|
36
66
|
this.errorMessage = 'File could not be loaded.';
|
|
37
67
|
}
|
|
38
68
|
onDownload() {
|
|
39
|
-
this.pdf
|
|
40
|
-
|
|
41
|
-
type: 'application/pdf',
|
|
42
|
-
});
|
|
43
|
-
const url = URL.createObjectURL(blob);
|
|
44
|
-
this.openLink(url);
|
|
45
|
-
// Remove the link when done
|
|
46
|
-
setTimeout(() => {
|
|
47
|
-
window.URL.revokeObjectURL(url);
|
|
48
|
-
}, 5000);
|
|
69
|
+
this.pdf?.getData().then((u8) => {
|
|
70
|
+
this.downloadFile(u8, 'file.pdf');
|
|
49
71
|
});
|
|
50
72
|
}
|
|
51
73
|
onZoomIn() {
|
|
@@ -59,9 +81,6 @@ export class EuimPdfViewerComponent {
|
|
|
59
81
|
onResetZoom() {
|
|
60
82
|
this.pinch.resetZoom();
|
|
61
83
|
}
|
|
62
|
-
// async onDismissModal() {
|
|
63
|
-
// await this.modalCtrl.dismiss();
|
|
64
|
-
// }
|
|
65
84
|
nextPage() {
|
|
66
85
|
if (this.page < this.pdf.numPages) {
|
|
67
86
|
this.page++;
|
|
@@ -72,23 +91,46 @@ export class EuimPdfViewerComponent {
|
|
|
72
91
|
this.page--;
|
|
73
92
|
}
|
|
74
93
|
}
|
|
75
|
-
|
|
94
|
+
/**
|
|
95
|
+
* Download file from the given data and filename using Blob.
|
|
96
|
+
* It generates an anchor link and clicks on it to download the file.
|
|
97
|
+
* @param data
|
|
98
|
+
* @param filename
|
|
99
|
+
* @private
|
|
100
|
+
*/
|
|
101
|
+
downloadFile(data, filename) {
|
|
102
|
+
const blob = new Blob([data.buffer], { type: 'application/pdf' });
|
|
103
|
+
const url = window.URL.createObjectURL(blob);
|
|
76
104
|
const a = document.createElement('a');
|
|
77
|
-
document.body.appendChild(a);
|
|
78
|
-
a.style.display = 'none';
|
|
79
105
|
a.href = url;
|
|
80
|
-
a.download =
|
|
106
|
+
a.download = filename;
|
|
107
|
+
document.body.appendChild(a);
|
|
81
108
|
a.click();
|
|
82
|
-
|
|
109
|
+
setTimeout(() => {
|
|
110
|
+
window.URL.revokeObjectURL(url);
|
|
111
|
+
}, 5000);
|
|
83
112
|
document.body.removeChild(a);
|
|
84
113
|
}
|
|
85
|
-
/**
|
|
86
|
-
|
|
114
|
+
/**
|
|
115
|
+
* Fetch PDF data from the given URL and return as Uint8Array.
|
|
116
|
+
* @param url
|
|
117
|
+
* @private
|
|
118
|
+
*/
|
|
119
|
+
getPDFData(url) {
|
|
120
|
+
return this.http.get(url, { responseType: 'arraybuffer' })
|
|
121
|
+
// transform ArrayBuffer to Uint8Array
|
|
122
|
+
.pipe(map((data) => new Uint8Array(data)), catchError(err => {
|
|
123
|
+
this.onError();
|
|
124
|
+
return throwError(() => err);
|
|
125
|
+
}));
|
|
126
|
+
}
|
|
127
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: EuimPdfViewerComponent, deps: [{ token: i1.AlertController }, { token: i2.HttpClient }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
128
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.7", type: EuimPdfViewerComponent, selector: "euim-pdf-viewer", inputs: { url: "url", page: "page" }, viewQueries: [{ propertyName: "pinch", first: true, predicate: ["pinch"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "@if (loading || errorMessage) {\n<div>\n @if (loading) {\n <euim-spinner>\n <div euimSpinnerMessage>Loading PDF...</div>\n </euim-spinner>\n }\n @if (errorMessage) {\n <div>{{errorMessage}}</div>\n }\n</div>\n}\n\n<pinch-zoom [limit-zoom]=\"4\" [transition-duration]=\"50\" [zoomControlScale]=\"0.5\" (onZoomChange)=\"zoomChange($event)\" [wheelZoomFactor]=\"0.5\" [stepZoomFactor]=\"0.5\" #pinch>\n <div style=\"display: block;width: 100%; height: 500px\">\n <pdf-viewer [src]=\"data\"\n [original-size]=\"false\"\n [zoom-scale]=\"'page-height'\"\n (after-load-complete)=\"onLoaded($event)\"\n (error)=\"onError()\"\n [(page)]=\"page\"\n [stick-to-page]=\"false\"\n [show-all]=\"false\"\n [render-text]=\"true\"\n style=\"width: 100%; height: 100%\">\n </pdf-viewer>\n </div>\n</pinch-zoom>\n\n<ion-footer>\n <ion-toolbar color=\"primary\" class=\"euim-pdf-viewer__footer\">\n <ion-buttons slot=\"start\">\n <ion-button (click)=\"onDownload()\" [disabled]=\"!pdf || !data\">\n <ion-icon name=\"download-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-buttons>\n <ion-buttons class=\"euim-pdf-viewer__footer-zoom-container\">\n <ion-button (click)=\"onZoomOut()\" [disabled]=\"zoom === 1 || !pdf || !data\">\n <ion-icon name=\"remove-circle-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <ion-button (click)=\"onResetZoom()\" [disabled]=\"zoom === 1 || !pdf || !data\">\n {{'euim.pdf-viewer.reset.zoom' | translate }}\n </ion-button>\n <ion-button (click)=\"onZoomIn()\" [disabled]=\"zoom === 4 || !pdf || !data\">\n <ion-icon name=\"add-circle-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n\n\n <ion-button (click)=\"prevPage()\" [disabled]=\"page === 1 || !pdf || !data\">\n {{'euim.stepper.previous' | translate }}\n </ion-button>\n {{page}}\n <ion-button (click)=\"nextPage()\" [disabled]=\"page === pdfNumPages || !pdf || !data\">\n {{'euim.stepper.next' | translate }}\n </ion-button>\n\n </ion-buttons>\n </ion-toolbar>\n</ion-footer>\n", styles: [".euim-pdf-viewer__footer-zoom-container{display:flex;align-items:center;justify-content:center;flex-wrap:wrap}\n"], dependencies: [{ kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i3.PdfViewerComponent, selector: "pdf-viewer", inputs: ["src", "c-maps-url", "page", "render-text", "render-text-mode", "original-size", "show-all", "stick-to-page", "zoom", "zoom-scale", "rotation", "external-link-target", "autoresize", "fit-to-page", "show-borders"], outputs: ["after-load-complete", "page-rendered", "pages-initialized", "text-layer-rendered", "error", "on-progress", "pageChange"] }, { kind: "component", type: i4.PinchZoomComponent, selector: "pinch-zoom, [pinch-zoom]", inputs: ["properties", "transition-duration", "transitionDuration", "double-tap", "doubleTap", "double-tap-scale", "doubleTapScale", "auto-zoom-out", "autoZoomOut", "limit-zoom", "limitZoom", "disabled", "disablePan", "overflow", "zoomControlScale", "disableZoomControl", "backgroundColor", "limitPan", "minPanScale", "minScale", "listeners", "wheel", "autoHeight", "stepZoomFactor", "wheelZoomFactor", "draggableImage"], outputs: ["onZoomChange"], exportAs: ["pinchZoom"] }, { kind: "component", type: i5.EuimSpinnerComponent, selector: "euim-spinner" }, { kind: "component", type: i6.EuimSpinnerMessageComponent, selector: "[euimSpinnerMessage]" }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
87
129
|
}
|
|
88
130
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: EuimPdfViewerComponent, decorators: [{
|
|
89
131
|
type: Component,
|
|
90
|
-
args: [{ selector: 'euim-pdf-viewer', encapsulation: ViewEncapsulation.None, template: "@if (loading || errorMessage) {\n<div>\n @if (loading) {\n <euim-spinner>\n <div euimSpinnerMessage>Loading PDF...</div>\n </euim-spinner>\n }\n @if (errorMessage) {\n <div>{{errorMessage}}</div>\n }\n</div>\n}\n\n<pinch-zoom [transition-duration]=\"50\" [zoomControlScale]=\"0.5\" (onZoomChange)=\"zoomChange($event)\" [wheelZoomFactor]=\"0.5\" [stepZoomFactor]=\"0.5\" #pinch>\n <div style=\"display: block;width: 100%; height: 500px\">\n <pdf-viewer [src]=\"
|
|
91
|
-
}], ctorParameters: () => [{ type: i1.AlertController }], propDecorators: { url: [{
|
|
132
|
+
args: [{ selector: 'euim-pdf-viewer', encapsulation: ViewEncapsulation.None, template: "@if (loading || errorMessage) {\n<div>\n @if (loading) {\n <euim-spinner>\n <div euimSpinnerMessage>Loading PDF...</div>\n </euim-spinner>\n }\n @if (errorMessage) {\n <div>{{errorMessage}}</div>\n }\n</div>\n}\n\n<pinch-zoom [limit-zoom]=\"4\" [transition-duration]=\"50\" [zoomControlScale]=\"0.5\" (onZoomChange)=\"zoomChange($event)\" [wheelZoomFactor]=\"0.5\" [stepZoomFactor]=\"0.5\" #pinch>\n <div style=\"display: block;width: 100%; height: 500px\">\n <pdf-viewer [src]=\"data\"\n [original-size]=\"false\"\n [zoom-scale]=\"'page-height'\"\n (after-load-complete)=\"onLoaded($event)\"\n (error)=\"onError()\"\n [(page)]=\"page\"\n [stick-to-page]=\"false\"\n [show-all]=\"false\"\n [render-text]=\"true\"\n style=\"width: 100%; height: 100%\">\n </pdf-viewer>\n </div>\n</pinch-zoom>\n\n<ion-footer>\n <ion-toolbar color=\"primary\" class=\"euim-pdf-viewer__footer\">\n <ion-buttons slot=\"start\">\n <ion-button (click)=\"onDownload()\" [disabled]=\"!pdf || !data\">\n <ion-icon name=\"download-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-buttons>\n <ion-buttons class=\"euim-pdf-viewer__footer-zoom-container\">\n <ion-button (click)=\"onZoomOut()\" [disabled]=\"zoom === 1 || !pdf || !data\">\n <ion-icon name=\"remove-circle-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <ion-button (click)=\"onResetZoom()\" [disabled]=\"zoom === 1 || !pdf || !data\">\n {{'euim.pdf-viewer.reset.zoom' | translate }}\n </ion-button>\n <ion-button (click)=\"onZoomIn()\" [disabled]=\"zoom === 4 || !pdf || !data\">\n <ion-icon name=\"add-circle-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n\n\n <ion-button (click)=\"prevPage()\" [disabled]=\"page === 1 || !pdf || !data\">\n {{'euim.stepper.previous' | translate }}\n </ion-button>\n {{page}}\n <ion-button (click)=\"nextPage()\" [disabled]=\"page === pdfNumPages || !pdf || !data\">\n {{'euim.stepper.next' | translate }}\n </ion-button>\n\n </ion-buttons>\n </ion-toolbar>\n</ion-footer>\n", styles: [".euim-pdf-viewer__footer-zoom-container{display:flex;align-items:center;justify-content:center;flex-wrap:wrap}\n"] }]
|
|
133
|
+
}], ctorParameters: () => [{ type: i1.AlertController }, { type: i2.HttpClient }], propDecorators: { url: [{
|
|
92
134
|
type: Input
|
|
93
135
|
}], page: [{
|
|
94
136
|
type: Input
|
|
@@ -96,4 +138,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImpor
|
|
|
96
138
|
type: ViewChild,
|
|
97
139
|
args: ['pinch', { static: true }]
|
|
98
140
|
}] } });
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpbS1wZGYtdmlld2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9ldWltLXBkZi12aWV3ZXIvZXVpbS1wZGYtdmlld2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9ldWltLXBkZi12aWV3ZXIvZXVpbS1wZGYtdmlld2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7QUFXL0UsTUFBTSxPQUFPLHNCQUFzQjtJQWMvQixZQUFvQixZQUE2QjtRQUE3QixpQkFBWSxHQUFaLFlBQVksQ0FBaUI7UUFaeEMsU0FBSSxHQUFJLENBQUMsQ0FBQztRQUluQixTQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ1QsWUFBTyxHQUFHLElBQUksQ0FBQztRQUNmLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBUWQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUM3QixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSwwQkFBMEIsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDM0U7UUFDTCxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDZCxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQWdCO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7SUFD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LCBWaWV3RW5jYXBzdWxhdGlvbiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQREZEb2N1bWVudFByb3h5IH0gZnJvbSAnbmcyLXBkZi12aWV3ZXInO1xuaW1wb3J0IHsgQWxlcnRDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgUGluY2hab29tQ29tcG9uZW50LCBab29tRXZlbnQgfSBmcm9tICdAbWFwYXhlL25neC1waW5jaC16b29tJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdldWltLXBkZi12aWV3ZXInLFxuICAgIHN0eWxlVXJsczogWycuL3N0eWxlcy9faW5kZXguc2NzcyddLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9ldWltLXBkZi12aWV3ZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIEV1aW1QZGZWaWV3ZXJDb21wb25lbnQge1xuICAgIEBJbnB1dCgpIHVybDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHBhZ2UgID0gMTtcblxuICAgIEBWaWV3Q2hpbGQoJ3BpbmNoJywgeyBzdGF0aWM6IHRydWUgfSkgcGluY2ghOiBQaW5jaFpvb21Db21wb25lbnQ7XG5cbiAgICB6b29tID0gMTtcbiAgICBsb2FkaW5nID0gdHJ1ZTtcbiAgICBlcnJvck1lc3NhZ2UgPSAnJztcbiAgICBwZGY6IFBERkRvY3VtZW50UHJveHk7XG4gICAgZXZlbnRSZXN1bHQ/OiBab29tRXZlbnQ7XG5cbiAgICBwcml2YXRlIHNob3dEZWZhdWx0RXJyb3I6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRDb250cm9sbGVyKSB7XG5cbiAgICAgICAgdGhpcy5zaG93RGVmYXVsdEVycm9yID0gdHJ1ZTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5zaG93RGVmYXVsdEVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuY3JlYXRlKHsgaGVhZGVyOiAnUERGIGNvdWxkIG5vdCBiZSBsb2FkZWQuJyB9KS50aGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDE1MDAwKTtcbiAgICB9XG5cbiAgICB6b29tQ2hhbmdlKGV2ZW50OiBab29tRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ldmVudFJlc3VsdCA9IGV2ZW50O1xuICAgICAgICB0aGlzLnpvb20gPSB0aGlzLmV2ZW50UmVzdWx0LnNjYWxlO1xuICAgIH1cblxuICAgIG9uTG9hZGVkKHBkZjogUERGRG9jdW1lbnRQcm94eSk6IHZvaWQge1xuICAgICAgICB0aGlzLnNob3dEZWZhdWx0RXJyb3IgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMucGRmID0gcGRmO1xuICAgIH1cblxuICAgIG9uRXJyb3IoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2hvd0RlZmF1bHRFcnJvciA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnRmlsZSBjb3VsZCBub3QgYmUgbG9hZGVkLic7XG4gICAgfVxuXG4gICAgb25Eb3dubG9hZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wZGYuZ2V0RGF0YSgpLnRoZW4oKHU4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW3U4LmJ1ZmZlcl0sIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnYXBwbGljYXRpb24vcGRmJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgICAgICAgdGhpcy5vcGVuTGluayh1cmwpO1xuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBsaW5rIHdoZW4gZG9uZVxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcbiAgICAgICAgICAgIH0sIDUwMDApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvblpvb21JbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5waW5jaC56b29tSW4oKTtcbiAgICB9XG5cbiAgICBvblpvb21PdXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnpvb20gPiAxKSB7XG4gICAgICAgICAgICB0aGlzLnBpbmNoLnpvb21PdXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUmVzZXRab29tKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnBpbmNoLnJlc2V0Wm9vbSgpO1xuICAgIH1cblxuICAgIC8vIGFzeW5jIG9uRGlzbWlzc01vZGFsKCkge1xuICAgIC8vICAgICBhd2FpdCB0aGlzLm1vZGFsQ3RybC5kaXNtaXNzKCk7XG4gICAgLy8gfVxuXG4gICAgbmV4dFBhZ2UoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnBhZ2UgPCB0aGlzLnBkZi5udW1QYWdlcykge1xuICAgICAgICAgICAgdGhpcy5wYWdlKys7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcmV2UGFnZSgpOnZvaWQge1xuICAgICAgICBpZiAodGhpcy5wYWdlID4gMSkge1xuICAgICAgICAgICAgdGhpcy5wYWdlLS07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9wZW5MaW5rKHVybDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG5cbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcbiAgICAgICAgYS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICBhLmhyZWYgPSB1cmw7XG4gICAgICAgIGEuZG93bmxvYWQgPSAnUERGX0ZpbGUucGRmJztcbiAgICAgICAgYS5jbGljaygpO1xuICAgICAgICAvLyBSZW1vdmUgdGhlIGxpbmsgd2hlbiBkb25lXG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSk7XG4gICAgfVxufVxuIiwiQGlmIChsb2FkaW5nIHx8IGVycm9yTWVzc2FnZSkge1xuPGRpdj5cbiAgQGlmIChsb2FkaW5nKSB7XG4gICAgPGV1aW0tc3Bpbm5lcj5cbiAgICAgIDxkaXYgZXVpbVNwaW5uZXJNZXNzYWdlPkxvYWRpbmcgUERGLi4uPC9kaXY+XG4gICAgPC9ldWltLXNwaW5uZXI+XG4gIH1cbiAgQGlmIChlcnJvck1lc3NhZ2UpIHtcbiAgICA8ZGl2Pnt7ZXJyb3JNZXNzYWdlfX08L2Rpdj5cbiAgfVxuPC9kaXY+XG59XG5cbjxwaW5jaC16b29tIFt0cmFuc2l0aW9uLWR1cmF0aW9uXT1cIjUwXCIgW3pvb21Db250cm9sU2NhbGVdPVwiMC41XCIgKG9uWm9vbUNoYW5nZSk9XCJ6b29tQ2hhbmdlKCRldmVudClcIiBbd2hlZWxab29tRmFjdG9yXT1cIjAuNVwiIFtzdGVwWm9vbUZhY3Rvcl09XCIwLjVcIiAjcGluY2g+XG4gICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGJsb2NrO3dpZHRoOiAxMDAlOyBoZWlnaHQ6IDUwMHB4XCI+XG4gICAgICAgIDxwZGYtdmlld2VyIFtzcmNdPVwidXJsXCJcbiAgICAgICAgICAgICAgICAgICAgW3pvb21dPVwiem9vbVwiXG4gICAgICAgICAgICAgICAgICAgIFtvcmlnaW5hbC1zaXplXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbYXV0b3Jlc2l6ZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIChhZnRlci1sb2FkLWNvbXBsZXRlKT1cIm9uTG9hZGVkKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwib25FcnJvcigpXCJcbiAgICAgICAgICAgICAgICAgICAgW3BhZ2VdPVwicGFnZVwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJVwiPlxuICAgICAgICA8L3BkZi12aWV3ZXI+XG4gICAgPC9kaXY+XG48L3BpbmNoLXpvb20+XG5cbjxpb24tZm9vdGVyPlxuICA8aW9uLXRvb2xiYXIgY29sb3I9XCJwcmltYXJ5XCIgY2xhc3M9XCJldWltLXBkZi12aWV3ZXJfX2Zvb3RlclwiPlxuICAgIDxpb24tYnV0dG9ucyBzbG90PVwic3RhcnRcIj5cbiAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJvbkRvd25sb2FkKClcIiBbZGlzYWJsZWRdPVwiIXBkZlwiPlxuICAgICAgICA8aW9uLWljb24gbmFtZT1cImRvd25sb2FkLW91dGxpbmVcIiBzbG90PVwiaWNvbi1vbmx5XCI+PC9pb24taWNvbj5cbiAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICA8L2lvbi1idXR0b25zPlxuICAgIDxpb24tYnV0dG9ucyBjbGFzcz1cImV1aW0tcGRmLXZpZXdlcl9fZm9vdGVyLXpvb20tY29udGFpbmVyXCI+XG4gICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwib25ab29tT3V0KClcIiBbZGlzYWJsZWRdPVwiem9vbSA9PT0gMVwiPlxuICAgICAgICA8aW9uLWljb24gbmFtZT1cInJlbW92ZS1jaXJjbGUtb3V0bGluZVwiIHNsb3Q9XCJpY29uLW9ubHlcIj48L2lvbi1pY29uPlxuICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cIm9uUmVzZXRab29tKClcIj5cbiAgICAgICAgICB7eydldWltLnBkZi12aWV3ZXIucmVzZXQuem9vbScgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJvblpvb21JbigpXCI+XG4gICAgICAgIDxpb24taWNvbiBuYW1lPVwiYWRkLWNpcmNsZS1vdXRsaW5lXCIgc2xvdD1cImljb24tb25seVwiPjwvaW9uLWljb24+XG4gICAgICA8L2lvbi1idXR0b24+XG5cblxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cInByZXZQYWdlKClcIj5cbiAgICAgICAgICB7eydldWltLnN0ZXBwZXIucHJldmlvdXMnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2lvbi1idXR0b24+XG4gICAgICB7e3BhZ2V9fVxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cIm5leHRQYWdlKClcIj5cbiAgICAgICAgICB7eydldWltLnN0ZXBwZXIubmV4dCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvaW9uLWJ1dHRvbj5cblxuICAgIDwvaW9uLWJ1dHRvbnM+XG4gIDwvaW9uLXRvb2xiYXI+XG48L2lvbi1mb290ZXI+XG4iXX0=
|
|
141
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpbS1wZGYtdmlld2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9ldWltLXBkZi12aWV3ZXIvZXVpbS1wZGYtdmlld2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9ldWltLXBkZi12aWV3ZXIvZXVpbS1wZGYtdmlld2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBdUMsU0FBUyxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFLNUgsT0FBTyxFQUFjLE9BQU8sRUFBZ0IsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7O0FBUXZFLE1BQU0sT0FBTyxzQkFBc0I7SUFrQi9CLFlBQW9CLFlBQTZCLEVBQVUsSUFBZ0I7UUFBdkQsaUJBQVksR0FBWixZQUFZLENBQWlCO1FBQVUsU0FBSSxHQUFKLElBQUksQ0FBWTtRQWhCbEUsU0FBSSxHQUFJLENBQUMsQ0FBQztRQUluQixTQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ1QsWUFBTyxHQUFHLElBQUksQ0FBQztRQUNmLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBR1IsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFJbEIsZUFBVSxHQUFHLElBQUksT0FBTyxFQUFVLENBQUM7UUFLdkMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUM3QixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUNyQixJQUFJLENBQUMsWUFBWSxD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LENBQUMsRUFDaEQsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2IsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2YsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNWLENBQUM7aUlBaEpRLHNCQUFzQjtxSEFBdEIsc0JBQXNCLGdPQ2RuQyxreEVBMkRBOzsyRkQ3Q2Esc0JBQXNCO2tCQU5sQyxTQUFTOytCQUNJLGlCQUFpQixpQkFHWixpQkFBaUIsQ0FBQyxJQUFJOzZHQUc1QixHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUVnQyxLQUFLO3NCQUExQyxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTaW1wbGVDaGFuZ2VzLCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgQ29tcG9uZW50LCBJbnB1dCwgVmlld0VuY2Fwc3VsYXRpb24sIFZpZXdDaGlsZCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQREZEb2N1bWVudFByb3h5IH0gZnJvbSAnbmcyLXBkZi12aWV3ZXInO1xuaW1wb3J0IHsgQWxlcnRDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgUGluY2hab29tQ29tcG9uZW50LCBab29tRXZlbnQgfSBmcm9tICdAbWFwYXhlL25neC1waW5jaC16b29tJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgc3dpdGNoTWFwLCBjYXRjaEVycm9yLCBzdGFydFdpdGggfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZXVpbS1wZGYtdmlld2VyJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zdHlsZXMvX2luZGV4LnNjc3MnXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZXVpbS1wZGYtdmlld2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBFdWltUGRmVmlld2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gICAgQElucHV0KCkgdXJsOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcGFnZSAgPSAxO1xuXG4gICAgQFZpZXdDaGlsZCgncGluY2gnLCB7IHN0YXRpYzogdHJ1ZSB9KSBwaW5jaCE6IFBpbmNoWm9vbUNvbXBvbmVudDtcblxuICAgIHpvb20gPSAxO1xuICAgIGxvYWRpbmcgPSB0cnVlO1xuICAgIGVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHBkZjogUERGRG9jdW1lbnRQcm94eTtcbiAgICBldmVudFJlc3VsdD86IFpvb21FdmVudDtcbiAgICBwcm90ZWN0ZWQgcGRmTnVtUGFnZXMgPSAxO1xuICAgIHByb3RlY3RlZCBkYXRhOiBVaW50OEFycmF5O1xuXG4gICAgcHJpdmF0ZSBzaG93RGVmYXVsdEVycm9yOiBib29sZWFuO1xuICAgIHByaXZhdGUgdXJsQ2hhbmdlJCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0Q29udHJvbGxlciwgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7XG5cbiAgICAgICAgdGhpcy5zaG93RGVmYXVsdEVycm9yID0gdHJ1ZTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5zaG93RGVmYXVsdEVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuY3JlYXRlKHsgaGVhZGVyOiAnUERGIGNvdWxkIG5vdCBiZSBsb2FkZWQuJyB9KS50aGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDE1MDAwKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgLy8gc3Vic2NyaWJlIGFuZCBjYW5jZWwgcHJldmlvdXMgc3Vic2NyaXB0aW9uIChpZiBhbnkpIGZvciBmZXRjaGluZyBkYXRhIHdoaWxlIFVSTCBjaGFuZ2VzXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy51cmxDaGFuZ2UkLnBpcGUoXG4gICAgICAgICAgICBzdGFydFdpdGgodGhpcy51cmwpLFxuICAgICAgICAgICAgc3dpdGNoTWFwKCh1cmwpID0+IHRoaXMuZ2V0UERGRGF0YSh1cmwpKSxcbiAgICAgICAgKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogKGRhdGE6IFVpbnQ4QXJyYXkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0RlZmF1bHRFcnJvciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gbnVsbDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYoY2hhbmdlc1sndXJsJ10pIHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnVybENoYW5nZSQubmV4dChjaGFuZ2VzWyd1cmwnXS5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgem9vbUNoYW5nZShldmVudDogWm9vbUV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuZXZlbnRSZXN1bHQgPSBldmVudDtcbiAgICAgICAgdGhpcy56b29tID0gdGhpcy5ldmVudFJlc3VsdC5zY2FsZTtcbiAgICB9XG5cbiAgICBvbkxvYWRlZChwZGY6IFBERkRvY3VtZW50UHJveHkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zaG93RGVmYXVsdEVycm9yID0gZmFsc2U7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBkZiA9IHBkZjtcbiAgICAgICAgdGhpcy5wZGZOdW1QYWdlcyA9IHRoaXMucGRmLm51bVBhZ2VzO1xuICAgIH1cblxuICAgIG9uRXJyb3IoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2hvd0RlZmF1bHRFcnJvciA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnRmlsZSBjb3VsZCBub3QgYmUgbG9hZGVkLic7XG4gICAgfVxuXG4gICAgb25Eb3dubG9hZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wZGY/LmdldERhdGEoKS50aGVuKCh1OCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kb3dubG9hZEZpbGUodTgsICdmaWxlLnBkZicpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvblpvb21JbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5waW5jaC56b29tSW4oKTtcbiAgICB9XG5cbiAgICBvblpvb21PdXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnpvb20gPiAxKSB7XG4gICAgICAgICAgICB0aGlzLnBpbmNoLnpvb21PdXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUmVzZXRab29tKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnBpbmNoLnJlc2V0Wm9vbSgpO1xuICAgIH1cblxuICAgIG5leHRQYWdlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5wYWdlIDwgdGhpcy5wZGYubnVtUGFnZXMpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZSsrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJldlBhZ2UoKTp2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucGFnZSA+IDEpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZS0tO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRG93bmxvYWQgZmlsZSBmcm9tIHRoZSBnaXZlbiBkYXRhIGFuZCBmaWxlbmFtZSB1c2luZyBCbG9iLlxuICAgICAqIEl0IGdlbmVyYXRlcyBhbiBhbmNob3IgbGluayBhbmQgY2xpY2tzIG9uIGl0IHRvIGRvd25sb2FkIHRoZSBmaWxlLlxuICAgICAqIEBwYXJhbSBkYXRhXG4gICAgICogQHBhcmFtIGZpbGVuYW1lXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGRvd25sb2FkRmlsZShkYXRhOiBVaW50OEFycmF5LCBmaWxlbmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbZGF0YS5idWZmZXJdLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9wZGYnIH0pO1xuICAgICAgICBjb25zdCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgYS5ocmVmID0gdXJsO1xuICAgICAgICBhLmRvd25sb2FkID0gZmlsZW5hbWU7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7XG4gICAgICAgIGEuY2xpY2soKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xuICAgICAgICB9LCA1MDAwKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGZXRjaCBQREYgZGF0YSBmcm9tIHRoZSBnaXZlbiBVUkwgYW5kIHJldHVybiBhcyBVaW50OEFycmF5LlxuICAgICAqIEBwYXJhbSB1cmxcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0UERGRGF0YSh1cmw6IHN0cmluZyk6IE9ic2VydmFibGU8VWludDhBcnJheT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldCh1cmwsIHsgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInIH0pXG4gICAgICAgICAgICAvLyB0cmFuc2Zvcm0gQXJyYXlCdWZmZXIgdG8gVWludDhBcnJheVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChkYXRhOiBBcnJheUJ1ZmZlcikgPT4gbmV3IFVpbnQ4QXJyYXkoZGF0YSkpLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycik7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgIH1cbn1cbiIsIkBpZiAobG9hZGluZyB8fCBlcnJvck1lc3NhZ2UpIHtcbjxkaXY+XG4gIEBpZiAobG9hZGluZykge1xuICAgIDxldWltLXNwaW5uZXI+XG4gICAgICA8ZGl2IGV1aW1TcGlubmVyTWVzc2FnZT5Mb2FkaW5nIFBERi4uLjwvZGl2PlxuICAgIDwvZXVpbS1zcGlubmVyPlxuICB9XG4gIEBpZiAoZXJyb3JNZXNzYWdlKSB7XG4gICAgPGRpdj57e2Vycm9yTWVzc2FnZX19PC9kaXY+XG4gIH1cbjwvZGl2PlxufVxuXG48cGluY2gtem9vbSBbbGltaXQtem9vbV09XCI0XCIgW3RyYW5zaXRpb24tZHVyYXRpb25dPVwiNTBcIiBbem9vbUNvbnRyb2xTY2FsZV09XCIwLjVcIiAob25ab29tQ2hhbmdlKT1cInpvb21DaGFuZ2UoJGV2ZW50KVwiIFt3aGVlbFpvb21GYWN0b3JdPVwiMC41XCIgW3N0ZXBab29tRmFjdG9yXT1cIjAuNVwiICNwaW5jaD5cbiAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogYmxvY2s7d2lkdGg6IDEwMCU7IGhlaWdodDogNTAwcHhcIj5cbiAgICAgICAgPHBkZi12aWV3ZXIgW3NyY109XCJkYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgW29yaWdpbmFsLXNpemVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICBbem9vbS1zY2FsZV09XCIncGFnZS1oZWlnaHQnXCJcbiAgICAgICAgICAgICAgICAgICAgKGFmdGVyLWxvYWQtY29tcGxldGUpPVwib25Mb2FkZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJvbkVycm9yKClcIlxuICAgICAgICAgICAgICAgICAgICBbKHBhZ2UpXT1cInBhZ2VcIlxuICAgICAgICAgICAgICAgICAgICBbc3RpY2stdG8tcGFnZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzaG93LWFsbF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIFtyZW5kZXItdGV4dF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlXCI+XG4gICAgICAgIDwvcGRmLXZpZXdlcj5cbiAgICA8L2Rpdj5cbjwvcGluY2gtem9vbT5cblxuPGlvbi1mb290ZXI+XG4gIDxpb24tdG9vbGJhciBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cImV1aW0tcGRmLXZpZXdlcl9fZm9vdGVyXCI+XG4gICAgPGlvbi1idXR0b25zIHNsb3Q9XCJzdGFydFwiPlxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cIm9uRG93bmxvYWQoKVwiIFtkaXNhYmxlZF09XCIhcGRmIHx8ICFkYXRhXCI+XG4gICAgICAgIDxpb24taWNvbiBuYW1lPVwiZG93bmxvYWQtb3V0bGluZVwiIHNsb3Q9XCJpY29uLW9ubHlcIj48L2lvbi1pY29uPlxuICAgICAgPC9pb24tYnV0dG9uPlxuICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgPGlvbi1idXR0b25zIGNsYXNzPVwiZXVpbS1wZGYtdmlld2VyX19mb290ZXItem9vbS1jb250YWluZXJcIj5cbiAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJvblpvb21PdXQoKVwiIFtkaXNhYmxlZF09XCJ6b29tID09PSAxIHx8ICFwZGYgfHwgIWRhdGFcIj5cbiAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJyZW1vdmUtY2lyY2xlLW91dGxpbmVcIiBzbG90PVwiaWNvbi1vbmx5XCI+PC9pb24taWNvbj5cbiAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJvblJlc2V0Wm9vbSgpXCIgW2Rpc2FibGVkXT1cInpvb20gPT09IDEgfHwgIXBkZiB8fCAhZGF0YVwiPlxuICAgICAgICAgIHt7J2V1aW0ucGRmLXZpZXdlci5yZXNldC56b29tJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cIm9uWm9vbUluKClcIiBbZGlzYWJsZWRdPVwiem9vbSA9PT0gNCB8fCAhcGRmIHx8ICFkYXRhXCI+XG4gICAgICAgIDxpb24taWNvbiBuYW1lPVwiYWRkLWNpcmNsZS1vdXRsaW5lXCIgc2xvdD1cImljb24tb25seVwiPjwvaW9uLWljb24+XG4gICAgICA8L2lvbi1idXR0b24+XG5cblxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cInByZXZQYWdlKClcIiBbZGlzYWJsZWRdPVwicGFnZSA9PT0gMSB8fCAhcGRmIHx8ICFkYXRhXCI+XG4gICAgICAgICAge3snZXVpbS5zdGVwcGVyLnByZXZpb3VzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAge3twYWdlfX1cbiAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJuZXh0UGFnZSgpXCIgW2Rpc2FibGVkXT1cInBhZ2UgPT09IHBkZk51bVBhZ2VzIHx8ICFwZGYgfHwgIWRhdGFcIj5cbiAgICAgICAgICB7eydldWltLnN0ZXBwZXIubmV4dCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvaW9uLWJ1dHRvbj5cblxuICAgIDwvaW9uLWJ1dHRvbnM+XG4gIDwvaW9uLXRvb2xiYXI+XG48L2lvbi1mb290ZXI+XG4iXX0=
|
|
@@ -6,6 +6,7 @@ import { PdfViewerModule } from 'ng2-pdf-viewer';
|
|
|
6
6
|
import { PinchZoomModule } from '@mapaxe/ngx-pinch-zoom';
|
|
7
7
|
import { EuimSpinnerComponentModule } from '../euim-spinner';
|
|
8
8
|
import { TranslateModule } from '@ngx-translate/core';
|
|
9
|
+
import { HttpClientModule } from '@angular/common/http';
|
|
9
10
|
import * as i0 from "@angular/core";
|
|
10
11
|
const COMPONENTS = [
|
|
11
12
|
EuimPdfViewerComponent,
|
|
@@ -17,13 +18,15 @@ export class EuimPdfViewerModule {
|
|
|
17
18
|
PdfViewerModule,
|
|
18
19
|
PinchZoomModule,
|
|
19
20
|
EuimSpinnerComponentModule,
|
|
20
|
-
TranslateModule
|
|
21
|
+
TranslateModule,
|
|
22
|
+
HttpClientModule], exports: [EuimPdfViewerComponent] }); }
|
|
21
23
|
/** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: EuimPdfViewerModule, imports: [CommonModule,
|
|
22
24
|
IonicModule,
|
|
23
25
|
PdfViewerModule,
|
|
24
26
|
PinchZoomModule,
|
|
25
27
|
EuimSpinnerComponentModule,
|
|
26
|
-
TranslateModule
|
|
28
|
+
TranslateModule,
|
|
29
|
+
HttpClientModule] }); }
|
|
27
30
|
}
|
|
28
31
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: EuimPdfViewerModule, decorators: [{
|
|
29
32
|
type: NgModule,
|
|
@@ -35,6 +38,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImpor
|
|
|
35
38
|
PinchZoomModule,
|
|
36
39
|
EuimSpinnerComponentModule,
|
|
37
40
|
TranslateModule,
|
|
41
|
+
HttpClientModule,
|
|
38
42
|
],
|
|
39
43
|
exports: [
|
|
40
44
|
...COMPONENTS,
|
|
@@ -44,4 +48,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImpor
|
|
|
44
48
|
],
|
|
45
49
|
}]
|
|
46
50
|
}] });
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpbS1wZGYtdmlld2VyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9ldWltLXBkZi12aWV3ZXIvZXVpbS1wZGYtdmlld2VyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBRXhELE1BQU0sVUFBVSxHQUFHO0lBQ2Ysc0JBQXNCO0NBQ3pCLENBQUM7QUFvQkYsTUFBTSxPQUFPLG1CQUFtQjtpSUFBbkIsbUJBQW1CO2tJQUFuQixtQkFBbUIsaUJBckI1QixzQkFBc0IsYUFNbEIsWUFBWTtZQUNaLFdBQVc7WUFDWCxlQUFlO1lBQ2YsZUFBZTtZQUNmLDBCQUEwQjtZQUMxQixlQUFlO1lBQ2YsZ0JBQWdCLGFBWnBCLHNCQUFzQjtrSUFxQmIsbUJBQW1CLFlBZnhCLFlBQVk7WUFDWixXQUFXO1lBQ1gsZUFBZTtZQUNmLGVBQWU7WUFDZiwwQkFBMEI7WUFDMUIsZUFBZTtZQUNmLGdCQUFnQjs7MkZBU1gsbUJBQW1CO2tCQWxCL0IsUUFBUTttQkFBQztvQkFFTixPQUFPLEVBQUU7d0JBQ0wsWUFBWTt3QkFDWixXQUFXO3dCQUNYLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZiwwQkFBMEI7d0JBQzFCLGVBQWU7d0JBQ2YsZ0JBQWdCO3FCQUNuQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ0wsR0FBRyxVQUFVO3FCQUNoQjtvQkFDRCxZQUFZLEVBQUU7d0JBQ1YsR0FBRyxVQUFVO3FCQUNoQjtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRXVpbVBkZlZpZXdlckNvbXBvbmVudCB9IGZyb20gJy4vZXVpbS1wZGYtdmlld2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJb25pY01vZHVsZSB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IFBkZlZpZXdlck1vZHVsZSB9IGZyb20gJ25nMi1wZGYtdmlld2VyJztcbmltcG9ydCB7IFBpbmNoWm9vbU1vZHVsZSB9IGZyb20gJ0BtYXBheGUvbmd4LXBpbmNoLXpvb20nO1xuaW1wb3J0IHsgRXVpbVNwaW5uZXJDb21wb25lbnRNb2R1bGUgfSBmcm9tICcuLi9ldWltLXNwaW5uZXInO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5jb25zdCBDT01QT05FTlRTID0gW1xuICAgIEV1aW1QZGZWaWV3ZXJDb21wb25lbnQsXG5dO1xuXG5ATmdNb2R1bGUoe1xuXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIElvbmljTW9kdWxlLFxuICAgICAgICBQZGZWaWV3ZXJNb2R1bGUsXG4gICAgICAgIFBpbmNoWm9vbU1vZHVsZSxcbiAgICAgICAgRXVpbVNwaW5uZXJDb21wb25lbnRNb2R1bGUsXG4gICAgICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICAgICAgSHR0cENsaWVudE1vZHVsZSxcbiAgICBdLFxuICAgIGV4cG9ydHM6IFtcbiAgICAgICAgLi4uQ09NUE9ORU5UUyxcbiAgICBdLFxuICAgIGRlY2xhcmF0aW9uczogW1xuICAgICAgICAuLi5DT01QT05FTlRTLFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIEV1aW1QZGZWaWV3ZXJNb2R1bGUge1xufVxuIl19
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export * from '@eui/base';
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
3
|
import { Injectable, booleanAttribute, Directive, Input, Component, ViewEncapsulation, ChangeDetectionStrategy, HostBinding, NgModule, EventEmitter, Output, ContentChildren, ViewChild, HostListener, ContentChild } from '@angular/core';
|
|
4
|
-
import { BehaviorSubject, Subject } from 'rxjs';
|
|
4
|
+
import { BehaviorSubject, Subject, throwError } from 'rxjs';
|
|
5
5
|
import * as i2$1 from '@angular/common';
|
|
6
6
|
import { CommonModule } from '@angular/common';
|
|
7
7
|
import * as i1 from '@ionic/angular';
|
|
@@ -9,14 +9,16 @@ import { IonicModule } from '@ionic/angular';
|
|
|
9
9
|
import { EclLanguageService, EclDefaultLanguageService } from '@eui/ecl';
|
|
10
10
|
import * as i2 from '@eui/core';
|
|
11
11
|
import { EuiEuLanguages } from '@eui/core';
|
|
12
|
-
import { takeUntil, distinctUntilKeyChanged } from 'rxjs/operators';
|
|
12
|
+
import { takeUntil, distinctUntilKeyChanged, startWith, switchMap, map, catchError } from 'rxjs/operators';
|
|
13
13
|
import * as i1$1 from '@ngx-translate/core';
|
|
14
14
|
import { TranslateModule } from '@ngx-translate/core';
|
|
15
15
|
import * as i1$2 from '@angular/router';
|
|
16
16
|
import { NavigationEnd, RouterModule } from '@angular/router';
|
|
17
|
-
import * as i2$2 from '
|
|
17
|
+
import * as i2$2 from '@angular/common/http';
|
|
18
|
+
import { HttpClientModule } from '@angular/common/http';
|
|
19
|
+
import * as i3 from 'ng2-pdf-viewer';
|
|
18
20
|
import { PdfViewerModule } from 'ng2-pdf-viewer';
|
|
19
|
-
import * as
|
|
21
|
+
import * as i4 from '@mapaxe/ngx-pinch-zoom';
|
|
20
22
|
import { PinchZoomModule } from '@mapaxe/ngx-pinch-zoom';
|
|
21
23
|
import * as i2$3 from 'angularx-qrcode';
|
|
22
24
|
import { QRCodeModule } from 'angularx-qrcode';
|
|
@@ -3046,12 +3048,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImpor
|
|
|
3046
3048
|
}] });
|
|
3047
3049
|
|
|
3048
3050
|
class EuimPdfViewerComponent {
|
|
3049
|
-
constructor(alertService) {
|
|
3051
|
+
constructor(alertService, http) {
|
|
3050
3052
|
this.alertService = alertService;
|
|
3053
|
+
this.http = http;
|
|
3051
3054
|
this.page = 1;
|
|
3052
3055
|
this.zoom = 1;
|
|
3053
3056
|
this.loading = true;
|
|
3054
3057
|
this.errorMessage = '';
|
|
3058
|
+
this.pdfNumPages = 1;
|
|
3059
|
+
this.urlChange$ = new Subject();
|
|
3055
3060
|
this.showDefaultError = true;
|
|
3056
3061
|
setTimeout(() => {
|
|
3057
3062
|
if (this.showDefaultError) {
|
|
@@ -3060,6 +3065,29 @@ class EuimPdfViewerComponent {
|
|
|
3060
3065
|
}
|
|
3061
3066
|
}, 15000);
|
|
3062
3067
|
}
|
|
3068
|
+
ngOnInit() {
|
|
3069
|
+
// subscribe and cancel previous subscription (if any) for fetching data while URL changes
|
|
3070
|
+
this.subscription = this.urlChange$.pipe(startWith(this.url), switchMap((url) => this.getPDFData(url))).subscribe({
|
|
3071
|
+
next: (data) => {
|
|
3072
|
+
this.data = data;
|
|
3073
|
+
this.showDefaultError = false;
|
|
3074
|
+
this.loading = false;
|
|
3075
|
+
},
|
|
3076
|
+
error: () => {
|
|
3077
|
+
this.onError();
|
|
3078
|
+
this.data = null;
|
|
3079
|
+
},
|
|
3080
|
+
});
|
|
3081
|
+
}
|
|
3082
|
+
ngOnChanges(changes) {
|
|
3083
|
+
if (changes['url']) {
|
|
3084
|
+
this.loading = true;
|
|
3085
|
+
this.urlChange$.next(changes['url'].currentValue);
|
|
3086
|
+
}
|
|
3087
|
+
}
|
|
3088
|
+
ngOnDestroy() {
|
|
3089
|
+
this.subscription.unsubscribe();
|
|
3090
|
+
}
|
|
3063
3091
|
zoomChange(event) {
|
|
3064
3092
|
this.eventResult = event;
|
|
3065
3093
|
this.zoom = this.eventResult.scale;
|
|
@@ -3068,6 +3096,7 @@ class EuimPdfViewerComponent {
|
|
|
3068
3096
|
this.showDefaultError = false;
|
|
3069
3097
|
this.loading = false;
|
|
3070
3098
|
this.pdf = pdf;
|
|
3099
|
+
this.pdfNumPages = this.pdf.numPages;
|
|
3071
3100
|
}
|
|
3072
3101
|
onError() {
|
|
3073
3102
|
this.showDefaultError = false;
|
|
@@ -3075,16 +3104,8 @@ class EuimPdfViewerComponent {
|
|
|
3075
3104
|
this.errorMessage = 'File could not be loaded.';
|
|
3076
3105
|
}
|
|
3077
3106
|
onDownload() {
|
|
3078
|
-
this.pdf
|
|
3079
|
-
|
|
3080
|
-
type: 'application/pdf',
|
|
3081
|
-
});
|
|
3082
|
-
const url = URL.createObjectURL(blob);
|
|
3083
|
-
this.openLink(url);
|
|
3084
|
-
// Remove the link when done
|
|
3085
|
-
setTimeout(() => {
|
|
3086
|
-
window.URL.revokeObjectURL(url);
|
|
3087
|
-
}, 5000);
|
|
3107
|
+
this.pdf?.getData().then((u8) => {
|
|
3108
|
+
this.downloadFile(u8, 'file.pdf');
|
|
3088
3109
|
});
|
|
3089
3110
|
}
|
|
3090
3111
|
onZoomIn() {
|
|
@@ -3098,9 +3119,6 @@ class EuimPdfViewerComponent {
|
|
|
3098
3119
|
onResetZoom() {
|
|
3099
3120
|
this.pinch.resetZoom();
|
|
3100
3121
|
}
|
|
3101
|
-
// async onDismissModal() {
|
|
3102
|
-
// await this.modalCtrl.dismiss();
|
|
3103
|
-
// }
|
|
3104
3122
|
nextPage() {
|
|
3105
3123
|
if (this.page < this.pdf.numPages) {
|
|
3106
3124
|
this.page++;
|
|
@@ -3111,23 +3129,46 @@ class EuimPdfViewerComponent {
|
|
|
3111
3129
|
this.page--;
|
|
3112
3130
|
}
|
|
3113
3131
|
}
|
|
3114
|
-
|
|
3132
|
+
/**
|
|
3133
|
+
* Download file from the given data and filename using Blob.
|
|
3134
|
+
* It generates an anchor link and clicks on it to download the file.
|
|
3135
|
+
* @param data
|
|
3136
|
+
* @param filename
|
|
3137
|
+
* @private
|
|
3138
|
+
*/
|
|
3139
|
+
downloadFile(data, filename) {
|
|
3140
|
+
const blob = new Blob([data.buffer], { type: 'application/pdf' });
|
|
3141
|
+
const url = window.URL.createObjectURL(blob);
|
|
3115
3142
|
const a = document.createElement('a');
|
|
3116
|
-
document.body.appendChild(a);
|
|
3117
|
-
a.style.display = 'none';
|
|
3118
3143
|
a.href = url;
|
|
3119
|
-
a.download =
|
|
3144
|
+
a.download = filename;
|
|
3145
|
+
document.body.appendChild(a);
|
|
3120
3146
|
a.click();
|
|
3121
|
-
|
|
3147
|
+
setTimeout(() => {
|
|
3148
|
+
window.URL.revokeObjectURL(url);
|
|
3149
|
+
}, 5000);
|
|
3122
3150
|
document.body.removeChild(a);
|
|
3123
3151
|
}
|
|
3124
|
-
/**
|
|
3125
|
-
|
|
3152
|
+
/**
|
|
3153
|
+
* Fetch PDF data from the given URL and return as Uint8Array.
|
|
3154
|
+
* @param url
|
|
3155
|
+
* @private
|
|
3156
|
+
*/
|
|
3157
|
+
getPDFData(url) {
|
|
3158
|
+
return this.http.get(url, { responseType: 'arraybuffer' })
|
|
3159
|
+
// transform ArrayBuffer to Uint8Array
|
|
3160
|
+
.pipe(map((data) => new Uint8Array(data)), catchError(err => {
|
|
3161
|
+
this.onError();
|
|
3162
|
+
return throwError(() => err);
|
|
3163
|
+
}));
|
|
3164
|
+
}
|
|
3165
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: EuimPdfViewerComponent, deps: [{ token: i1.AlertController }, { token: i2$2.HttpClient }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3166
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.7", type: EuimPdfViewerComponent, selector: "euim-pdf-viewer", inputs: { url: "url", page: "page" }, viewQueries: [{ propertyName: "pinch", first: true, predicate: ["pinch"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "@if (loading || errorMessage) {\n<div>\n @if (loading) {\n <euim-spinner>\n <div euimSpinnerMessage>Loading PDF...</div>\n </euim-spinner>\n }\n @if (errorMessage) {\n <div>{{errorMessage}}</div>\n }\n</div>\n}\n\n<pinch-zoom [limit-zoom]=\"4\" [transition-duration]=\"50\" [zoomControlScale]=\"0.5\" (onZoomChange)=\"zoomChange($event)\" [wheelZoomFactor]=\"0.5\" [stepZoomFactor]=\"0.5\" #pinch>\n <div style=\"display: block;width: 100%; height: 500px\">\n <pdf-viewer [src]=\"data\"\n [original-size]=\"false\"\n [zoom-scale]=\"'page-height'\"\n (after-load-complete)=\"onLoaded($event)\"\n (error)=\"onError()\"\n [(page)]=\"page\"\n [stick-to-page]=\"false\"\n [show-all]=\"false\"\n [render-text]=\"true\"\n style=\"width: 100%; height: 100%\">\n </pdf-viewer>\n </div>\n</pinch-zoom>\n\n<ion-footer>\n <ion-toolbar color=\"primary\" class=\"euim-pdf-viewer__footer\">\n <ion-buttons slot=\"start\">\n <ion-button (click)=\"onDownload()\" [disabled]=\"!pdf || !data\">\n <ion-icon name=\"download-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-buttons>\n <ion-buttons class=\"euim-pdf-viewer__footer-zoom-container\">\n <ion-button (click)=\"onZoomOut()\" [disabled]=\"zoom === 1 || !pdf || !data\">\n <ion-icon name=\"remove-circle-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <ion-button (click)=\"onResetZoom()\" [disabled]=\"zoom === 1 || !pdf || !data\">\n {{'euim.pdf-viewer.reset.zoom' | translate }}\n </ion-button>\n <ion-button (click)=\"onZoomIn()\" [disabled]=\"zoom === 4 || !pdf || !data\">\n <ion-icon name=\"add-circle-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n\n\n <ion-button (click)=\"prevPage()\" [disabled]=\"page === 1 || !pdf || !data\">\n {{'euim.stepper.previous' | translate }}\n </ion-button>\n {{page}}\n <ion-button (click)=\"nextPage()\" [disabled]=\"page === pdfNumPages || !pdf || !data\">\n {{'euim.stepper.next' | translate }}\n </ion-button>\n\n </ion-buttons>\n </ion-toolbar>\n</ion-footer>\n", styles: [".euim-pdf-viewer__footer-zoom-container{display:flex;align-items:center;justify-content:center;flex-wrap:wrap}\n"], dependencies: [{ kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i3.PdfViewerComponent, selector: "pdf-viewer", inputs: ["src", "c-maps-url", "page", "render-text", "render-text-mode", "original-size", "show-all", "stick-to-page", "zoom", "zoom-scale", "rotation", "external-link-target", "autoresize", "fit-to-page", "show-borders"], outputs: ["after-load-complete", "page-rendered", "pages-initialized", "text-layer-rendered", "error", "on-progress", "pageChange"] }, { kind: "component", type: i4.PinchZoomComponent, selector: "pinch-zoom, [pinch-zoom]", inputs: ["properties", "transition-duration", "transitionDuration", "double-tap", "doubleTap", "double-tap-scale", "doubleTapScale", "auto-zoom-out", "autoZoomOut", "limit-zoom", "limitZoom", "disabled", "disablePan", "overflow", "zoomControlScale", "disableZoomControl", "backgroundColor", "limitPan", "minPanScale", "minScale", "listeners", "wheel", "autoHeight", "stepZoomFactor", "wheelZoomFactor", "draggableImage"], outputs: ["onZoomChange"], exportAs: ["pinchZoom"] }, { kind: "component", type: EuimSpinnerComponent, selector: "euim-spinner" }, { kind: "component", type: EuimSpinnerMessageComponent, selector: "[euimSpinnerMessage]" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
3126
3167
|
}
|
|
3127
3168
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: EuimPdfViewerComponent, decorators: [{
|
|
3128
3169
|
type: Component,
|
|
3129
|
-
args: [{ selector: 'euim-pdf-viewer', encapsulation: ViewEncapsulation.None, template: "@if (loading || errorMessage) {\n<div>\n @if (loading) {\n <euim-spinner>\n <div euimSpinnerMessage>Loading PDF...</div>\n </euim-spinner>\n }\n @if (errorMessage) {\n <div>{{errorMessage}}</div>\n }\n</div>\n}\n\n<pinch-zoom [transition-duration]=\"50\" [zoomControlScale]=\"0.5\" (onZoomChange)=\"zoomChange($event)\" [wheelZoomFactor]=\"0.5\" [stepZoomFactor]=\"0.5\" #pinch>\n <div style=\"display: block;width: 100%; height: 500px\">\n <pdf-viewer [src]=\"
|
|
3130
|
-
}], ctorParameters: () => [{ type: i1.AlertController }], propDecorators: { url: [{
|
|
3170
|
+
args: [{ selector: 'euim-pdf-viewer', encapsulation: ViewEncapsulation.None, template: "@if (loading || errorMessage) {\n<div>\n @if (loading) {\n <euim-spinner>\n <div euimSpinnerMessage>Loading PDF...</div>\n </euim-spinner>\n }\n @if (errorMessage) {\n <div>{{errorMessage}}</div>\n }\n</div>\n}\n\n<pinch-zoom [limit-zoom]=\"4\" [transition-duration]=\"50\" [zoomControlScale]=\"0.5\" (onZoomChange)=\"zoomChange($event)\" [wheelZoomFactor]=\"0.5\" [stepZoomFactor]=\"0.5\" #pinch>\n <div style=\"display: block;width: 100%; height: 500px\">\n <pdf-viewer [src]=\"data\"\n [original-size]=\"false\"\n [zoom-scale]=\"'page-height'\"\n (after-load-complete)=\"onLoaded($event)\"\n (error)=\"onError()\"\n [(page)]=\"page\"\n [stick-to-page]=\"false\"\n [show-all]=\"false\"\n [render-text]=\"true\"\n style=\"width: 100%; height: 100%\">\n </pdf-viewer>\n </div>\n</pinch-zoom>\n\n<ion-footer>\n <ion-toolbar color=\"primary\" class=\"euim-pdf-viewer__footer\">\n <ion-buttons slot=\"start\">\n <ion-button (click)=\"onDownload()\" [disabled]=\"!pdf || !data\">\n <ion-icon name=\"download-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-buttons>\n <ion-buttons class=\"euim-pdf-viewer__footer-zoom-container\">\n <ion-button (click)=\"onZoomOut()\" [disabled]=\"zoom === 1 || !pdf || !data\">\n <ion-icon name=\"remove-circle-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <ion-button (click)=\"onResetZoom()\" [disabled]=\"zoom === 1 || !pdf || !data\">\n {{'euim.pdf-viewer.reset.zoom' | translate }}\n </ion-button>\n <ion-button (click)=\"onZoomIn()\" [disabled]=\"zoom === 4 || !pdf || !data\">\n <ion-icon name=\"add-circle-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n\n\n <ion-button (click)=\"prevPage()\" [disabled]=\"page === 1 || !pdf || !data\">\n {{'euim.stepper.previous' | translate }}\n </ion-button>\n {{page}}\n <ion-button (click)=\"nextPage()\" [disabled]=\"page === pdfNumPages || !pdf || !data\">\n {{'euim.stepper.next' | translate }}\n </ion-button>\n\n </ion-buttons>\n </ion-toolbar>\n</ion-footer>\n", styles: [".euim-pdf-viewer__footer-zoom-container{display:flex;align-items:center;justify-content:center;flex-wrap:wrap}\n"] }]
|
|
3171
|
+
}], ctorParameters: () => [{ type: i1.AlertController }, { type: i2$2.HttpClient }], propDecorators: { url: [{
|
|
3131
3172
|
type: Input
|
|
3132
3173
|
}], page: [{
|
|
3133
3174
|
type: Input
|
|
@@ -3146,13 +3187,15 @@ class EuimPdfViewerModule {
|
|
|
3146
3187
|
PdfViewerModule,
|
|
3147
3188
|
PinchZoomModule,
|
|
3148
3189
|
EuimSpinnerComponentModule,
|
|
3149
|
-
TranslateModule
|
|
3190
|
+
TranslateModule,
|
|
3191
|
+
HttpClientModule], exports: [EuimPdfViewerComponent] }); }
|
|
3150
3192
|
/** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: EuimPdfViewerModule, imports: [CommonModule,
|
|
3151
3193
|
IonicModule,
|
|
3152
3194
|
PdfViewerModule,
|
|
3153
3195
|
PinchZoomModule,
|
|
3154
3196
|
EuimSpinnerComponentModule,
|
|
3155
|
-
TranslateModule
|
|
3197
|
+
TranslateModule,
|
|
3198
|
+
HttpClientModule] }); }
|
|
3156
3199
|
}
|
|
3157
3200
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: EuimPdfViewerModule, decorators: [{
|
|
3158
3201
|
type: NgModule,
|
|
@@ -3164,6 +3207,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImpor
|
|
|
3164
3207
|
PinchZoomModule,
|
|
3165
3208
|
EuimSpinnerComponentModule,
|
|
3166
3209
|
TranslateModule,
|
|
3210
|
+
HttpClientModule,
|
|
3167
3211
|
],
|
|
3168
3212
|
exports: [
|
|
3169
3213
|
...COMPONENTS$1,
|