ngx-rendering-service-lib 0.0.66859 → 0.0.66860

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.
@@ -71,7 +71,7 @@ export class PdfComponent {
71
71
  }
72
72
  }
73
73
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: PdfComponent, deps: [{ token: i1.AssetControllerService }, { token: RENDERING_SERVICE_LIB_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
74
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.6", type: PdfComponent, isStandalone: true, selector: "rs-module-pdf", inputs: { data: "data", node: "node" }, viewQueries: [{ propertyName: "viewerRef", first: true, predicate: ["pdfViewer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"pdf-wrapper\" [class.hide-all]=\"restrictedView\" *ngIf=\"fileData !== undefined\">\n <ng2-pdfjs-viewer\n #pdfViewer\n [pdfSrc]=\"fileData\"\n [print]=\"!restrictedView\"\n [download]=\"false\"\n [openFile]=\"false\"\n [viewBookmark]=\"false\"\n [viewerFolder]=\"configuration?.assetsUrl ? configuration.assetsUrl + '/pdfjs' : ''\"\n (onDocumentLoad)=\"onDocumentLoad()\"\n >\n </ng2-pdfjs-viewer>\n</div>\n", styles: [":host{position:relative;display:flex;align-items:center;width:100%;aspect-ratio:1/1.41}.pdf-wrapper{width:100%;height:100%}@media print{.hide-all *{display:none!important}}\n"], dependencies: [{ kind: "ngmodule", type: RenderingModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: PdfJsViewerModule }, { kind: "component", type: i3.PdfJsViewerComponent, selector: "ng2-pdfjs-viewer", inputs: ["viewerId", "viewerFolder", "externalWindow", "target", "showSpinner", "downloadFileName", "openFile", "download", "startDownload", "viewBookmark", "print", "startPrint", "fullScreen", "find", "zoom", "nameddest", "pagemode", "lastPage", "rotatecw", "rotateccw", "cursor", "scroll", "spread", "locale", "useOnlyCssZoom", "errorOverride", "errorAppend", "errorMessage", "diagnosticLogs", "externalWindowOptions", "page", "pdfSrc"], outputs: ["onBeforePrint", "onAfterPrint", "onDocumentLoad", "onPageChange"] }] }); }
74
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.6", type: PdfComponent, isStandalone: true, selector: "rs-module-pdf", inputs: { data: "data", node: "node" }, viewQueries: [{ propertyName: "viewerRef", first: true, predicate: ["pdfViewer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"pdf-wrapper\" [class.hide-all]=\"restrictedView\" *ngIf=\"fileData !== undefined\">\n <ng2-pdfjs-viewer\n #pdfViewer\n [pdfSrc]=\"fileData\"\n [print]=\"!restrictedView\"\n [download]=\"false\"\n [openFile]=\"false\"\n [viewBookmark]=\"false\"\n [viewerFolder]=\"configuration?.assetsUrl ? configuration.assetsUrl + '/pdfjs' : ''\"\n (onDocumentLoad)=\"onDocumentLoad()\"\n >\n </ng2-pdfjs-viewer>\n</div>\n", styles: [":host{position:relative;display:flex;align-items:center;width:100%}.pdf-wrapper{width:100%;height:100%}@media print{.hide-all *{display:none!important}}\n"], dependencies: [{ kind: "ngmodule", type: RenderingModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: PdfJsViewerModule }, { kind: "component", type: i3.PdfJsViewerComponent, selector: "ng2-pdfjs-viewer", inputs: ["viewerId", "viewerFolder", "externalWindow", "target", "showSpinner", "downloadFileName", "openFile", "download", "startDownload", "viewBookmark", "print", "startPrint", "fullScreen", "find", "zoom", "nameddest", "pagemode", "lastPage", "rotatecw", "rotateccw", "cursor", "scroll", "spread", "locale", "useOnlyCssZoom", "errorOverride", "errorAppend", "errorMessage", "diagnosticLogs", "externalWindowOptions", "page", "pdfSrc"], outputs: ["onBeforePrint", "onAfterPrint", "onDocumentLoad", "onPageChange"] }] }); }
75
75
  }
76
76
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: PdfComponent, decorators: [{
77
77
  type: Component,
@@ -80,7 +80,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImpor
80
80
  MatButtonModule,
81
81
  MatIconModule,
82
82
  PdfJsViewerModule
83
- ], template: "<div class=\"pdf-wrapper\" [class.hide-all]=\"restrictedView\" *ngIf=\"fileData !== undefined\">\n <ng2-pdfjs-viewer\n #pdfViewer\n [pdfSrc]=\"fileData\"\n [print]=\"!restrictedView\"\n [download]=\"false\"\n [openFile]=\"false\"\n [viewBookmark]=\"false\"\n [viewerFolder]=\"configuration?.assetsUrl ? configuration.assetsUrl + '/pdfjs' : ''\"\n (onDocumentLoad)=\"onDocumentLoad()\"\n >\n </ng2-pdfjs-viewer>\n</div>\n", styles: [":host{position:relative;display:flex;align-items:center;width:100%;aspect-ratio:1/1.41}.pdf-wrapper{width:100%;height:100%}@media print{.hide-all *{display:none!important}}\n"] }]
83
+ ], template: "<div class=\"pdf-wrapper\" [class.hide-all]=\"restrictedView\" *ngIf=\"fileData !== undefined\">\n <ng2-pdfjs-viewer\n #pdfViewer\n [pdfSrc]=\"fileData\"\n [print]=\"!restrictedView\"\n [download]=\"false\"\n [openFile]=\"false\"\n [viewBookmark]=\"false\"\n [viewerFolder]=\"configuration?.assetsUrl ? configuration.assetsUrl + '/pdfjs' : ''\"\n (onDocumentLoad)=\"onDocumentLoad()\"\n >\n </ng2-pdfjs-viewer>\n</div>\n", styles: [":host{position:relative;display:flex;align-items:center;width:100%}.pdf-wrapper{width:100%;height:100%}@media print{.hide-all *{display:none!important}}\n"] }]
84
84
  }], ctorParameters: () => [{ type: i1.AssetControllerService }, { type: i4.RenderingServiceLibConfiguration, decorators: [{
85
85
  type: Optional
86
86
  }, {
@@ -94,4 +94,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImpor
94
94
  type: ViewChild,
95
95
  args: ['pdfViewer']
96
96
  }] } });
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvbW9kdWxlL3BkZi9wZGYuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9tb2R1bGUvcGRmL3BkZi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWEsUUFBUSxFQUFpQixTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdEcsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBR3ZELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFFekQsT0FBTyxFQUF1QixpQkFBaUIsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBRXpFLE9BQU8sRUFDTCw0QkFBNEIsRUFFN0IsTUFBTSw4Q0FBOEMsQ0FBQzs7Ozs7O0FBZXRELE1BQU0sT0FBTyxZQUFZO0lBT3ZCLFlBQ1Usc0JBQThDLEVBQ0csYUFBK0M7UUFEaEcsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUNHLGtCQUFhLEdBQWIsYUFBYSxDQUFrQztRQUwxRyxtQkFBYyxHQUFZLEtBQUssQ0FBQTtJQU01QixDQUFDO0lBRUosV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQTtJQUNyQixDQUFDO0lBRU8sWUFBWTtRQUNsQixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDckUsT0FBTTtRQUNSLENBQUM7UUFDRCxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FB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QztnQkFDSCxDQUFDLENBQUMsQ0FBQTtZQUNKLENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQztJQUNILENBQUM7OEdBcEVVLFlBQVksd0RBU0QsNEJBQTRCO2tHQVR2QyxZQUFZLDhPQzNCekIsaWNBYUEsdU9ETUksZUFBZSxrSUFDZixlQUFlLDhCQUNmLGFBQWEsOEJBQ2IsaUJBQWlCOzsyRkFLUixZQUFZO2tCQVp4QixTQUFTOytCQUNFLGVBQWUsY0FDYixJQUFJLFdBQ1A7d0JBQ1AsZUFBZTt3QkFDZixlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsaUJBQWlCO3FCQUNsQjs7MEJBYUUsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyw0QkFBNEI7eUNBUnpDLElBQUk7c0JBQVosS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ2tCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbmplY3QsIElucHV0LCBPbkNoYW5nZXMsIE9wdGlvbmFsLCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtSZW5kZXJpbmdNb2R1bGV9IGZyb20gJy4uLy4uL3JlbmRlcmluZy5tb2R1bGUnO1xuaW1wb3J0IHtSZW5kZXJNb2R1bGV9IGZyb20gJy4uL1JlbmRlck1vZHVsZSc7XG5pbXBvcnQge05vZGV9IGZyb20gJ25neC1lZHUtc2hhcmluZy1hcGknO1xuaW1wb3J0IHtNYXRJY29uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7TWF0QnV0dG9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHtSZW5kZXJEYXRhfSBmcm9tICcuLi8uLi9kdG8vUmVuZGVyRGF0YSc7XG5pbXBvcnQge1BkZkpzVmlld2VyQ29tcG9uZW50LCBQZGZKc1ZpZXdlck1vZHVsZX0gZnJvbSAnbmcyLXBkZmpzLXZpZXdlcic7XG5pbXBvcnQge0Fzc2V0Q29udHJvbGxlclNlcnZpY2UsIEdldEFzc2V0JFBhcmFtc30gZnJvbSAnbmd4LXJlbmRlcmluZy1zZXJ2aWNlLWFwaSc7XG5pbXBvcnQge1xuICBSRU5ERVJJTkdfU0VSVklDRV9MSUJfQ09ORklHLFxuICBSZW5kZXJpbmdTZXJ2aWNlTGliQ29uZmlndXJhdGlvblxufSBmcm9tIFwiLi4vLi4vLi4vcmVuZGVyaW5nLXNlcnZpY2UtbGliLWNvbmZpZ3VyYXRpb25cIjtcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdycy1tb2R1bGUtcGRmJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIFJlbmRlcmluZ01vZHVsZSxcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgTWF0SWNvbk1vZHVsZSxcbiAgICBQZGZKc1ZpZXdlck1vZHVsZVxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vcGRmLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3BkZi5jb21wb25lbnQuc2Nzcydcbn0pXG5leHBvcnQgY2xhc3MgUGRmQ29tcG9uZW50IGltcGxlbWVudHMgUmVuZGVyTW9kdWxlLCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBkYXRhOiBSZW5kZXJEYXRhIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIG5vZGU6IE5vZGUgfCB1bmRlZmluZWRcbiAgQFZpZXdDaGlsZCgncGRmVmlld2VyJykgdmlld2VyUmVmOiBQZGZKc1ZpZXdlckNvbXBvbmVudCB8IHVuZGVmaW5lZFxuICByZXN0cmljdGVkVmlldzogYm9vbGVhbiA9IGZhbHNlXG4gIGZpbGVEYXRhOiBCbG9iIHwgdW5kZWZpbmVkXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhc3NldENvbnRyb2xsZXJTZXJ2aWNlOiBBc3NldENvbnRyb2xsZXJTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoUkVOREVSSU5HX1NFUlZJQ0VfTElCX0NPTkZJRykgcHVibGljIGNvbmZpZ3VyYXRpb246IFJlbmRlcmluZ1NlcnZpY2VMaWJDb25maWd1cmF0aW9uLFxuICApIHt9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIHRoaXMuZG93bmxvYWRGaWxlKClcbiAgfVxuXG4gIHByaXZhdGUgZG93bmxvYWRGaWxlKCkge1xuICAgIGlmICh0aGlzLmRhdGE/Lml0ZW1zID09PSB1bmRlZmluZWQgfHwgdGhpcy5kYXRhLml0ZW1zWzBdLmxpbmsgPT09ICcnKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTCh0aGlzLmRhdGEuaXRlbXNbMF0ubGluaylcbiAgICBjb25zdCBhc3NldFBhcmFtcyA9IHVybC5zZWFyY2hQYXJhbXMuZ2V0KCdhc3NldFBhcmFtcycpXG4gICAgaWYgKGFzc2V0UGFyYW1zID09PSBudWxsKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3QgcGFyYW1zOiBHZXRBc3NldCRQYXJhbXMgPSB7XG4gICAgICBhc3NldFBhcmFtczogYXNzZXRQYXJhbXNcbiAgICB9XG4gICAgdGhpcy5hc3NldENvbnRyb2xsZXJTZXJ2aWNlLmdldEFzc2V0JFJlc3BvbnNlKHBhcmFtcylcbiAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGxldCByZXNwb25zZURhdGEgPSByZXNwb25zZS5ib2R5XG4gICAgICAgIGlmIChyZXNwb25zZS5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykgPT09ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKSB7XG4gICAgICAgICAgdGhpcy5yZXN0cmljdGVkVmlldyA9IHRydWVcbiAgICAgICAgICByZXNwb25zZURhdGEgPSByZXNwb25zZURhdGEuc2xpY2UoMCwgcmVzcG9uc2VEYXRhLnNpemUsICdhcHBsaWNhdGlvbi9wZGYnKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsZURhdGEgPSByZXNwb25zZURhdGFcbiAgICAgIH1cbiAgICApXG4gIH1cblxuICBvbkRvY3VtZW50TG9hZCgpIHtcbiAgICBjb25zdCBpRnJhbWVEb2N1bWVudCA9IHRoaXMudmlld2VyUmVmPy5pZnJhbWUubmF0aXZlRWxlbWVudC5jb250ZW50V2luZG93LmRvY3VtZW50XG4gICAgLy8gQWx3YXlzIGhpZGUgZG9jdW1lbnQgcHJvcGVydGllcyBidXR0b24gaW4gcmlnaHQgZHJvcGRvd24gbWVudVxuICAgIGlGcmFtZURvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb2N1bWVudFByb3BlcnRpZXMnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXG4gICAgaUZyYW1lRG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmhvcml6b250YWxUb29sYmFyU2VwYXJhdG9yLnNwcmVhZE1vZGVCdXR0b25zJykuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuICAgIGlmICh0aGlzLnJlc3RyaWN0ZWRWaWV3KSB7XG4gICAgICBjb25zdCBpRnJhbWVXaW5kb3cgPSB0aGlzLnZpZXdlclJlZj8uaWZyYW1lLm5hdGl2ZUVsZW1lbnQuY29udGVudFdpbmRvd1xuICAgICAgLy8gRGlzYWJsZSBwcmludGluZyBpbiBpZnJhbWVcbiAgICAgIGlGcmFtZVdpbmRvdy5wcmludCA9ICgpID0+IHthbGVydCgnTmljZSB0cnkhJyl9XG4gICAgICAvLyBEaXNhYmxlIHNlbGVjdGlvbiB0b29sIGFuZCByZW1vdmUgdGhlIGNvcnJlc3BvbmRpbmcgYnV0dG9uIGZyb20gdGhlIHJpZ2h0IGRyb3Bkb3duIG1lbnVcbiAgICAgIGlGcmFtZURvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy50ZXh0TGF5ZXInKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXG4gICAgICBpRnJhbWVEb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3Vyc29yU2VsZWN0VG9vbCcpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcbiAgICAgIC8vIERpc2FibGUgY29udGV4dCBtZW51IGluIGlmcmFtZVxuICAgICAgaUZyYW1lRG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIChldmVudDpNb3VzZUV2ZW50KSA9PiB7ZXZlbnQucHJldmVudERlZmF1bHQoKTt9KTtcbiAgICAgIC8vIERpc2FibGUgcHJpbnRpbmcgdmlhIGtleWJvYXJkIHNob3J0Y3V0c1xuICAgICAgWydrZXl1cCcsICdrZXlkb3duJ10uZm9yRWFjaCh0eXBlID0+IHtcbiAgICAgICAgaUZyYW1lRG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCAoZXZlbnQ6S2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgIGlmICgoZXZlbnQua2V5ID09PSAncycgJiYgZXZlbnQuY3RybEtleSkgfHwgZXZlbnQua2V5ID09PSAnRjEyJykge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGlmIChldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24pIHtcbiAgICAgICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInBkZi13cmFwcGVyXCIgW2NsYXNzLmhpZGUtYWxsXT1cInJlc3RyaWN0ZWRWaWV3XCIgKm5nSWY9XCJmaWxlRGF0YSAhPT0gdW5kZWZpbmVkXCI+XG4gIDxuZzItcGRmanMtdmlld2VyXG4gICAgI3BkZlZpZXdlclxuICAgIFtwZGZTcmNdPVwiZmlsZURhdGFcIlxuICAgIFtwcmludF09XCIhcmVzdHJpY3RlZFZpZXdcIlxuICAgIFtkb3dubG9hZF09XCJmYWxzZVwiXG4gICAgW29wZW5GaWxlXT1cImZhbHNlXCJcbiAgICBbdmlld0Jvb2ttYXJrXT1cImZhbHNlXCJcbiAgICBbdmlld2VyRm9sZGVyXT1cImNvbmZpZ3VyYXRpb24/LmFzc2V0c1VybCA/IGNvbmZpZ3VyYXRpb24uYXNzZXRzVXJsICsgJy9wZGZqcycgOiAnJ1wiXG4gICAgKG9uRG9jdW1lbnRMb2FkKT1cIm9uRG9jdW1lbnRMb2FkKClcIlxuICA+XG4gIDwvbmcyLXBkZmpzLXZpZXdlcj5cbjwvZGl2PlxuIl19
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvbW9kdWxlL3BkZi9wZGYuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9tb2R1bGUvcGRmL3BkZi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWEsUUFBUSxFQUFpQixTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdEcsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBR3ZELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFFekQsT0FBTyxFQUF1QixpQkFBaUIsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBRXpFLE9BQU8sRUFDTCw0QkFBNEIsRUFFN0IsTUFBTSw4Q0FBOEMsQ0FBQzs7Ozs7O0FBZXRELE1BQU0sT0FBTyxZQUFZO0lBT3ZCLFlBQ1Usc0JBQThDLEVBQ0csYUFBK0M7UUFEaEcsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUNHLGtCQUFhLEdBQWIsYUFBYSxDQUFrQztRQUwxRyxtQkFBYyxHQUFZLEtBQUssQ0FBQTtJQU01QixDQUFDO0lBRUosV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQTtJQUNyQixDQUFDO0lBRU8sWUFBWTtRQUNsQixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDckUsT0FBTTtRQUNSLENBQUM7UUFDRCxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FB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QztnQkFDSCxDQUFDLENBQUMsQ0FBQTtZQUNKLENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQztJQUNILENBQUM7OEdBcEVVLFlBQVksd0RBU0QsNEJBQTRCO2tHQVR2QyxZQUFZLDhPQzNCekIsaWNBYUEsbU5ETUksZUFBZSxrSUFDZixlQUFlLDhCQUNmLGFBQWEsOEJBQ2IsaUJBQWlCOzsyRkFLUixZQUFZO2tCQVp4QixTQUFTOytCQUNFLGVBQWUsY0FDYixJQUFJLFdBQ1A7d0JBQ1AsZUFBZTt3QkFDZixlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsaUJBQWlCO3FCQUNsQjs7MEJBYUUsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyw0QkFBNEI7eUNBUnpDLElBQUk7c0JBQVosS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ2tCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbmplY3QsIElucHV0LCBPbkNoYW5nZXMsIE9wdGlvbmFsLCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtSZW5kZXJpbmdNb2R1bGV9IGZyb20gJy4uLy4uL3JlbmRlcmluZy5tb2R1bGUnO1xuaW1wb3J0IHtSZW5kZXJNb2R1bGV9IGZyb20gJy4uL1JlbmRlck1vZHVsZSc7XG5pbXBvcnQge05vZGV9IGZyb20gJ25neC1lZHUtc2hhcmluZy1hcGknO1xuaW1wb3J0IHtNYXRJY29uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7TWF0QnV0dG9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHtSZW5kZXJEYXRhfSBmcm9tICcuLi8uLi9kdG8vUmVuZGVyRGF0YSc7XG5pbXBvcnQge1BkZkpzVmlld2VyQ29tcG9uZW50LCBQZGZKc1ZpZXdlck1vZHVsZX0gZnJvbSAnbmcyLXBkZmpzLXZpZXdlcic7XG5pbXBvcnQge0Fzc2V0Q29udHJvbGxlclNlcnZpY2UsIEdldEFzc2V0JFBhcmFtc30gZnJvbSAnbmd4LXJlbmRlcmluZy1zZXJ2aWNlLWFwaSc7XG5pbXBvcnQge1xuICBSRU5ERVJJTkdfU0VSVklDRV9MSUJfQ09ORklHLFxuICBSZW5kZXJpbmdTZXJ2aWNlTGliQ29uZmlndXJhdGlvblxufSBmcm9tIFwiLi4vLi4vLi4vcmVuZGVyaW5nLXNlcnZpY2UtbGliLWNvbmZpZ3VyYXRpb25cIjtcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdycy1tb2R1bGUtcGRmJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIFJlbmRlcmluZ01vZHVsZSxcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgTWF0SWNvbk1vZHVsZSxcbiAgICBQZGZKc1ZpZXdlck1vZHVsZVxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vcGRmLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3BkZi5jb21wb25lbnQuc2Nzcydcbn0pXG5leHBvcnQgY2xhc3MgUGRmQ29tcG9uZW50IGltcGxlbWVudHMgUmVuZGVyTW9kdWxlLCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBkYXRhOiBSZW5kZXJEYXRhIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIG5vZGU6IE5vZGUgfCB1bmRlZmluZWRcbiAgQFZpZXdDaGlsZCgncGRmVmlld2VyJykgdmlld2VyUmVmOiBQZGZKc1ZpZXdlckNvbXBvbmVudCB8IHVuZGVmaW5lZFxuICByZXN0cmljdGVkVmlldzogYm9vbGVhbiA9IGZhbHNlXG4gIGZpbGVEYXRhOiBCbG9iIHwgdW5kZWZpbmVkXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhc3NldENvbnRyb2xsZXJTZXJ2aWNlOiBBc3NldENvbnRyb2xsZXJTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoUkVOREVSSU5HX1NFUlZJQ0VfTElCX0NPTkZJRykgcHVibGljIGNvbmZpZ3VyYXRpb246IFJlbmRlcmluZ1NlcnZpY2VMaWJDb25maWd1cmF0aW9uLFxuICApIHt9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIHRoaXMuZG93bmxvYWRGaWxlKClcbiAgfVxuXG4gIHByaXZhdGUgZG93bmxvYWRGaWxlKCkge1xuICAgIGlmICh0aGlzLmRhdGE/Lml0ZW1zID09PSB1bmRlZmluZWQgfHwgdGhpcy5kYXRhLml0ZW1zWzBdLmxpbmsgPT09ICcnKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTCh0aGlzLmRhdGEuaXRlbXNbMF0ubGluaylcbiAgICBjb25zdCBhc3NldFBhcmFtcyA9IHVybC5zZWFyY2hQYXJhbXMuZ2V0KCdhc3NldFBhcmFtcycpXG4gICAgaWYgKGFzc2V0UGFyYW1zID09PSBudWxsKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3QgcGFyYW1zOiBHZXRBc3NldCRQYXJhbXMgPSB7XG4gICAgICBhc3NldFBhcmFtczogYXNzZXRQYXJhbXNcbiAgICB9XG4gICAgdGhpcy5hc3NldENvbnRyb2xsZXJTZXJ2aWNlLmdldEFzc2V0JFJlc3BvbnNlKHBhcmFtcylcbiAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGxldCByZXNwb25zZURhdGEgPSByZXNwb25zZS5ib2R5XG4gICAgICAgIGlmIChyZXNwb25zZS5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykgPT09ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKSB7XG4gICAgICAgICAgdGhpcy5yZXN0cmljdGVkVmlldyA9IHRydWVcbiAgICAgICAgICByZXNwb25zZURhdGEgPSByZXNwb25zZURhdGEuc2xpY2UoMCwgcmVzcG9uc2VEYXRhLnNpemUsICdhcHBsaWNhdGlvbi9wZGYnKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsZURhdGEgPSByZXNwb25zZURhdGFcbiAgICAgIH1cbiAgICApXG4gIH1cblxuICBvbkRvY3VtZW50TG9hZCgpIHtcbiAgICBjb25zdCBpRnJhbWVEb2N1bWVudCA9IHRoaXMudmlld2VyUmVmPy5pZnJhbWUubmF0aXZlRWxlbWVudC5jb250ZW50V2luZG93LmRvY3VtZW50XG4gICAgLy8gQWx3YXlzIGhpZGUgZG9jdW1lbnQgcHJvcGVydGllcyBidXR0b24gaW4gcmlnaHQgZHJvcGRvd24gbWVudVxuICAgIGlGcmFtZURvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb2N1bWVudFByb3BlcnRpZXMnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXG4gICAgaUZyYW1lRG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmhvcml6b250YWxUb29sYmFyU2VwYXJhdG9yLnNwcmVhZE1vZGVCdXR0b25zJykuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuICAgIGlmICh0aGlzLnJlc3RyaWN0ZWRWaWV3KSB7XG4gICAgICBjb25zdCBpRnJhbWVXaW5kb3cgPSB0aGlzLnZpZXdlclJlZj8uaWZyYW1lLm5hdGl2ZUVsZW1lbnQuY29udGVudFdpbmRvd1xuICAgICAgLy8gRGlzYWJsZSBwcmludGluZyBpbiBpZnJhbWVcbiAgICAgIGlGcmFtZVdpbmRvdy5wcmludCA9ICgpID0+IHthbGVydCgnTmljZSB0cnkhJyl9XG4gICAgICAvLyBEaXNhYmxlIHNlbGVjdGlvbiB0b29sIGFuZCByZW1vdmUgdGhlIGNvcnJlc3BvbmRpbmcgYnV0dG9uIGZyb20gdGhlIHJpZ2h0IGRyb3Bkb3duIG1lbnVcbiAgICAgIGlGcmFtZURvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy50ZXh0TGF5ZXInKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXG4gICAgICBpRnJhbWVEb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3Vyc29yU2VsZWN0VG9vbCcpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcbiAgICAgIC8vIERpc2FibGUgY29udGV4dCBtZW51IGluIGlmcmFtZVxuICAgICAgaUZyYW1lRG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIChldmVudDpNb3VzZUV2ZW50KSA9PiB7ZXZlbnQucHJldmVudERlZmF1bHQoKTt9KTtcbiAgICAgIC8vIERpc2FibGUgcHJpbnRpbmcgdmlhIGtleWJvYXJkIHNob3J0Y3V0c1xuICAgICAgWydrZXl1cCcsICdrZXlkb3duJ10uZm9yRWFjaCh0eXBlID0+IHtcbiAgICAgICAgaUZyYW1lRG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCAoZXZlbnQ6S2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgIGlmICgoZXZlbnQua2V5ID09PSAncycgJiYgZXZlbnQuY3RybEtleSkgfHwgZXZlbnQua2V5ID09PSAnRjEyJykge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGlmIChldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24pIHtcbiAgICAgICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInBkZi13cmFwcGVyXCIgW2NsYXNzLmhpZGUtYWxsXT1cInJlc3RyaWN0ZWRWaWV3XCIgKm5nSWY9XCJmaWxlRGF0YSAhPT0gdW5kZWZpbmVkXCI+XG4gIDxuZzItcGRmanMtdmlld2VyXG4gICAgI3BkZlZpZXdlclxuICAgIFtwZGZTcmNdPVwiZmlsZURhdGFcIlxuICAgIFtwcmludF09XCIhcmVzdHJpY3RlZFZpZXdcIlxuICAgIFtkb3dubG9hZF09XCJmYWxzZVwiXG4gICAgW29wZW5GaWxlXT1cImZhbHNlXCJcbiAgICBbdmlld0Jvb2ttYXJrXT1cImZhbHNlXCJcbiAgICBbdmlld2VyRm9sZGVyXT1cImNvbmZpZ3VyYXRpb24/LmFzc2V0c1VybCA/IGNvbmZpZ3VyYXRpb24uYXNzZXRzVXJsICsgJy9wZGZqcycgOiAnJ1wiXG4gICAgKG9uRG9jdW1lbnRMb2FkKT1cIm9uRG9jdW1lbnRMb2FkKClcIlxuICA+XG4gIDwvbmcyLXBkZmpzLXZpZXdlcj5cbjwvZGl2PlxuIl19
@@ -20,6 +20,7 @@ export class RenderComponent {
20
20
  this.jobInfoControllerService = jobInfoControllerService;
21
21
  this.moduleInfoService = moduleInfoService;
22
22
  this.platformLocation = platformLocation;
23
+ this.activateServiceWorker = true;
23
24
  this.serviceWorkerReady = false;
24
25
  this.loadData = new Subject();
25
26
  this.renderData$ = new BehaviorSubject(null);
@@ -96,7 +97,7 @@ export class RenderComponent {
96
97
  }
97
98
  async ngOnInit() {
98
99
  // await firstValueFrom(this.translationsService.initialize())
99
- if ('serviceWorker' in navigator) {
100
+ if (this.activateServiceWorker && 'serviceWorker' in navigator) {
100
101
  const reg = await navigator.serviceWorker.getRegistrations();
101
102
  await Promise.all(reg?.map((r) => r.unregister()));
102
103
  const serviceWorkerUrl = this.serviceWorkerUrl ?? (this.platformLocation.getBaseHrefFromDOM() + 'edu-service-worker.js');
@@ -125,7 +126,7 @@ export class RenderComponent {
125
126
  console.info('Service Worker controlling this page.');
126
127
  });
127
128
  }
128
- else {
129
+ else if ('serviceWorker' in navigator && this.activateServiceWorker) {
129
130
  console.warn('Service worker API not available');
130
131
  }
131
132
  }
@@ -223,7 +224,7 @@ export class RenderComponent {
223
224
  });
224
225
  }
225
226
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: RenderComponent, deps: [{ token: i1.RenderControllerWrapperService }, { token: i1.JobInfoControllerService }, { token: i2.ModuleInfoService }, { token: i3.PlatformLocation }], target: i0.ɵɵFactoryTarget.Component }); }
226
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.6", type: RenderComponent, isStandalone: true, selector: "rs-root", inputs: { request: "request", node: "node", serviceWorkerUrl: "serviceWorkerUrl" }, providers: [
227
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.6", type: RenderComponent, isStandalone: true, selector: "rs-root", inputs: { request: "request", node: "node", serviceWorkerUrl: "serviceWorkerUrl", activateServiceWorker: "activateServiceWorker" }, providers: [
227
228
  TranslateService
228
229
  ], usesOnChanges: true, ngImport: i0, template: "<div class=\"module module-{{(renderData$ | async)?.module}}\">\n <ng-container *ngIf=\"renderData$ | async as data\">\n @defer (when data?.module === 'IMAGE'){\n <rs-module-image [data]=\"data\" [node]=\"node\"></rs-module-image>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'VIDEO'){\n <rs-module-video [data]=\"data\" [node]=\"node\"></rs-module-video>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'PDF' || data?.module === 'DOCUMENT') {\n <rs-module-pdf [data]=\"data\" [node]=\"node\"></rs-module-pdf>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'EDUHTML' || data?.module === 'H5P' || data?.module === 'JUPYTER' || data.module === 'SPREADSHEET') {\n <rs-module-edu-html [data]=\"data\" [node]=\"node\"></rs-module-edu-html>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'AUDIO'){\n <rs-module-audio [data]=\"data\" [node]=\"node\"></rs-module-audio>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'BINDER'){\n <rs-module-binder [data]=\"data\" [node]=\"node\"></rs-module-binder>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'DDB'){\n <rs-module-ddb [data]=\"data\" [node]=\"node\"></rs-module-ddb>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n <ng-container *ngIf=\"data.module === 'default'\">\n @defer (when data.module === 'default') {\n <rs-module-default [node]=\"node\"></rs-module-default>\n }\n </ng-container>\n <ng-container *ngIf=\"data.module === 'url'\">\n @defer (when data.module === 'url') {\n <rs-module-url [node]=\"node\" [data]=\"data\"></rs-module-url>\n }\n </ng-container>\n <ng-container *ngIf=\"data.module === 'ERROR'\">\n @defer (when data.module === 'ERROR') {\n <rs-module-error [node]=\"node\" [data]=\"data\"></rs-module-error>\n }\n </ng-container>\n </ng-container>\n\n <div class=\"progress\" *ngIf=\"(renderData$ | async) === null;\">\n <ng-container *ngIf=\"progress$ | async as progress\">\n <ng-container [ngSwitch]=\"['VIDEO', 'AUDIO'].includes(progress.module) ? 'bar' : 'spinner'\">\n <ng-container *ngSwitchCase=\"'bar'\">\n <div *ngIf=\"(progress.progress ?? 0) < 0\">Queue position: {{-(progress.progress ?? 0)}}</div>\n <mat-progress-bar [value]=\"(progress.progress ?? 0)\" *ngIf=\"(progress.progress ?? 0) >= 0\"></mat-progress-bar>\n </ng-container>\n <ng-container *ngSwitchCase=\"'spinner'\">\n <div *ngIf=\"(progress.progress ?? 0) < 0\">Queue position: {{-(progress.progress ?? 0)}</div>\n <mat-spinner [diameter]=\"50\" *ngIf=\"(progress.progress ?? 0) >= 0\"></mat-spinner>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n</div>\n\n<ng-template #loading>\n <div class=\"progress\">\n <mat-spinner></mat-spinner>\n </div>\n</ng-template>\n", styles: [":host{display:flex;flex-direction:column;gap:20px;padding:10px 30px}.module{overflow:auto;display:flex;flex-grow:1;height:auto;border:1px solid #aaa;padding:20px}.module rs-module-image,.module rs-module-video{width:100%}.module .progress{display:flex;justify-content:center;flex-grow:1}\n"], dependencies: [{ kind: "ngmodule", type: RenderingApiModule }, { kind: "ngmodule", type: RenderingModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i4.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i5.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "ngmodule", type: EduSharingApiModule }, { kind: "ngmodule", type: EduSharingUiModule }], deferBlockDependencies: [() => [import("./module/image/image.component").then(m => m.ImageComponent)], () => [import("./module/video/video.component").then(m => m.VideoComponent)], () => [import("./module/pdf/pdf.component").then(m => m.PdfComponent)], () => [import("./module/eduhtml/eduHtml.component").then(m => m.EduHtmlComponent)], () => [import("./module/audio/audio.component").then(m => m.AudioComponent)], () => [import("./module/binder/binder.component").then(m => m.BinderComponent)], () => [import("./module/ddb/ddb.component").then(m => m.DdbComponent)], () => [import("./module/default/default.component").then(m => m.DefaultComponent)], () => [import("./module/url/url.component").then(m => m.UrlComponent)], () => [import("./module/error/error.component").then(m => m.ErrorComponent)]] }); }
229
230
  }
@@ -255,5 +256,7 @@ i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "18.2.6", ng
255
256
  type: Input
256
257
  }], serviceWorkerUrl: [{
257
258
  type: Input
259
+ }], activateServiceWorker: [{
260
+ type: Input
258
261
  }] } }) });
259
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcmVuZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3NyYy9saWIvcmVuZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQVUsS0FBSyxFQUE2QyxNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFRbkQsT0FBTyxFQUFDLGVBQWUsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUU1RyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUUxRCxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUMsbUJBQW1CLEVBQU8sTUFBTSxxQkFBcUIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQU1wRSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFPdEMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7Ozs7Ozs7QUErQnRELE1BQU0sT0FBTyxlQUFlO0lBVzFCLFlBQ1UsdUJBQXVELEVBQ3ZELHdCQUFrRCxFQUNsRCxpQkFBb0MsRUFDcEMsZ0JBQWtDO1FBSGxDLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBZ0M7UUFDdkQsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFYNUMs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QUM7OEdBMU5VLGVBQWU7a0dBQWYsZUFBZSwwSUFOZjtZQUNULGdCQUFnQjtTQUNqQiwrQ0N4REgsc3hHQTJFQSwwVkR0Q0ksa0JBQWtCLDhCQUNsQixlQUFlLDBoQkFHZix3QkFBd0Isa09BQ3hCLG9CQUFvQix3TkFRcEIsbUJBQW1CLDhCQUNuQixrQkFBa0I7O2dHQVNULGVBQWU7c0JBM0IzQixTQUFTO21DQUNFLFNBQVMsY0FDUCxJQUFJLFdBQ1A7NEJBQ1Asa0JBQWtCOzRCQUNsQixlQUFlOzRCQUNmLGNBQWM7NEJBQ2QsY0FBYzs0QkFDZCx3QkFBd0I7NEJBQ3hCLG9CQUFvQjs0QkFDcEIsWUFBWTs0QkFDWixZQUFZOzRCQUNaLGdCQUFnQjs0QkFDaEIsZ0JBQWdCOzRCQUNoQixjQUFjOzRCQUNkLGVBQWU7NEJBQ2YsWUFBWTs0QkFDWixtQkFBbUI7NEJBQ25CLGtCQUFrQjs0QkFDbEIsY0FBYzt5QkFDZixhQUNVOzRCQUNULGdCQUFnQjt5QkFDakI7Nk1BS1EsT0FBTzswQkFBZixLQUFLO29CQUNHLElBQUk7MEJBQVosS0FBSztvQkFDRyxnQkFBZ0I7MEJBQXhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE9wdGlvbmFsLCBTaW1wbGVDaGFuZ2VzfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7UmVuZGVyaW5nTW9kdWxlfSBmcm9tICcuL3JlbmRlcmluZy5tb2R1bGUnO1xuaW1wb3J0IHtcbiAgSm9iSW5mb0NvbnRyb2xsZXJTZXJ2aWNlLFxuICBKb2JJbmZvUmVwbHksXG4gIFJlbmRlckNvbnRyb2xsZXJXcmFwcGVyU2VydmljZSxcbiAgUmVuZGVyRGF0YVJlcXVlc3RXaXRoVG9rZW4sXG4gIFJlbmRlckRhdGFSZXNwb25zZVxufSBmcm9tICduZ3gtcmVuZGVyaW5nLXNlcnZpY2UtYXBpJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBkZWJvdW5jZVRpbWUsIGZpcnN0VmFsdWVGcm9tLCBpbnRlcnZhbCwgU3ViamVjdCwgc3dpdGNoTWFwLCB0YWtlVW50aWx9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtJbWFnZUNvbXBvbmVudH0gZnJvbSAnLi9tb2R1bGUvaW1hZ2UvaW1hZ2UuY29tcG9uZW50JztcbmltcG9ydCB7UmVuZGVyaW5nQXBpTW9kdWxlfSBmcm9tICcuL3JlbmRlcmluZy1hcGkubW9kdWxlJztcbmltcG9ydCB7VmlkZW9Db21wb25lbnR9IGZyb20gJy4vbW9kdWxlL3ZpZGVvL3ZpZGVvLmNvbXBvbmVudCc7XG5pbXBvcnQge01hdFByb2dyZXNzU3Bpbm5lck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XG5pbXBvcnQge0VkdVNoYXJpbmdBcGlNb2R1bGUsIE5vZGV9IGZyb20gJ25neC1lZHUtc2hhcmluZy1hcGknO1xuaW1wb3J0IHtNYXRQcm9ncmVzc0Jhck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3MtYmFyJztcbmltcG9ydCB7QXNzZXRTdGF0ZUl0ZW0sIFJlbmRlckRhdGF9IGZyb20gJy4vZHRvL1JlbmRlckRhdGEnO1xuaW1wb3J0IHtQZGZDb21wb25lbnR9IGZyb20gJy4vbW9kdWxlL3BkZi9wZGYuY29tcG9uZW50JztcbmltcG9ydCB7VXJsQ29tcG9uZW50fSBmcm9tICcuL21vZHVsZS91cmwvdXJsLmNvbXBvbmVudCc7XG5pbXBvcnQge0VkdUh0bWxDb21wb25lbnR9IGZyb20gJy4vbW9kdWxlL2VkdWh0bWwvZWR1SHRtbC5jb21wb25lbnQnO1xuaW1wb3J0IHtNb2R1bGVJbmZvU2VydmljZX0gZnJvbSAnLi4vbW9kdWxlLWluZm8uc2VydmljZSc7XG5pbXBvcnQge2ZpbHRlcn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtQbGF0Zm9ybUxvY2F0aW9ufSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtEZWZhdWx0Q29tcG9uZW50fSBmcm9tICcuL21vZHVsZS9kZWZhdWx0L2RlZmF1bHQuY29tcG9uZW50JztcbmltcG9ydCB7RnJvbnRlbmRNb2R1bGVDb25maWd9IGZyb20gJy4vZHRvL0Zyb250ZW5kTW9kdWxlQ29uZmlnJztcbmltcG9ydCB7QXVkaW9Db21wb25lbnR9IGZyb20gJy4vbW9kdWxlL2F1ZGlvL2F1ZGlvLmNvbXBvbmVudCc7XG5pbXBvcnQge0JpbmRlckNvbXBvbmVudH0gZnJvbSAnLi9tb2R1bGUvYmluZGVyL2JpbmRlci5jb21wb25lbnQnO1xuaW1wb3J0IHtEZGJDb21wb25lbnR9IGZyb20gJy4vbW9kdWxlL2RkYi9kZGIuY29tcG9uZW50JztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0VkdVNoYXJpbmdVaU1vZHVsZX0gZnJvbSAnbmd4LWVkdS1zaGFyaW5nLXVpJztcbmltcG9ydCB7RXJyb3JDb21wb25lbnR9IGZyb20gJy4vbW9kdWxlL2Vycm9yL2Vycm9yLmNvbXBvbmVudCc7XG5pbXBvcnQge1JFTkRFUklOR19TRVJWSUNFX0xJQl9DT05GSUcsIFJlbmRlcmluZ1NlcnZpY2VMaWJDb25maWd1cmF0aW9ufSBmcm9tIFwiLi4vcmVuZGVyaW5nLXNlcnZpY2UtbGliLWNvbmZpZ3VyYXRpb25cIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnMtcm9vdCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBSZW5kZXJpbmdBcGlNb2R1bGUsXG4gICAgUmVuZGVyaW5nTW9kdWxlLFxuICAgIEltYWdlQ29tcG9uZW50LFxuICAgIFZpZGVvQ29tcG9uZW50LFxuICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcbiAgICBNYXRQcm9ncmVzc0Jhck1vZHVsZSxcbiAgICBQZGZDb21wb25lbnQsXG4gICAgVXJsQ29tcG9uZW50LFxuICAgIEVkdUh0bWxDb21wb25lbnQsXG4gICAgRGVmYXVsdENvbXBvbmVudCxcbiAgICBBdWRpb0NvbXBvbmVudCxcbiAgICBCaW5kZXJDb21wb25lbnQsXG4gICAgRGRiQ29tcG9uZW50LFxuICAgIEVkdVNoYXJpbmdBcGlNb2R1bGUsXG4gICAgRWR1U2hhcmluZ1VpTW9kdWxlLFxuICAgIEVycm9yQ29tcG9uZW50LFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICBUcmFuc2xhdGVTZXJ2aWNlXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9yZW5kZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vcmVuZGVyLmNvbXBvbmVudC5zY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBSZW5kZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHJlcXVlc3Q6IFJlbmRlckRhdGFSZXF1ZXN0V2l0aFRva2VuIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBub2RlOiBOb2RlIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBzZXJ2aWNlV29ya2VyVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHNlcnZpY2VXb3JrZXJSZWFkeSA9IGZhbHNlO1xuICBsb2FkRGF0YSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHJlbmRlckRhdGEkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSZW5kZXJEYXRhIHwgbnVsbD4obnVsbCk7XG4gIGZpbmlzaGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgc29tZUJ1dE5vdEFsbEZpbmlzaGVkID0gbmV3IFN1YmplY3Q8Qm9vbGVhbj4oKVxuICBwcm9ncmVzcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHsgbW9kdWxlOiBzdHJpbmcsIHByb2dyZXNzPzogbnVtYmVyIH0gfCBudWxsPihudWxsKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlbmRlckNvbnRyb2xsZXJTZXJ2aWNlOiBSZW5kZXJDb250cm9sbGVyV3JhcHBlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBqb2JJbmZvQ29udHJvbGxlclNlcnZpY2U6IEpvYkluZm9Db250cm9sbGVyU2VydmljZSxcbiAgICBwcml2YXRlIG1vZHVsZUluZm9TZXJ2aWNlOiBNb2R1bGVJbmZvU2VydmljZSxcbiAgICBwcml2YXRlIHBsYXRmb3JtTG9jYXRpb246IFBsYXRmb3JtTG9jYXRpb24sXG4gICkge1xuICAgIHRoaXMubG9hZERhdGEucGlwZShcbiAgICAgIGZpbHRlcigoKSA9PiB0aGlzLm5vZGUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnNlcnZpY2VXb3JrZXJSZWFkeSksXG4gICAgICBkZWJvdW5jZVRpbWUoMTApLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgLy8gc3Vic2NyaWJlIGVycm9yIGhhbmRsaW5nXG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrTW9kdWxlKClcbiAgICAgIH0pXG4gICAgKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogYXN5bmMgKGZyb250ZW5kTW9kdWxlKSA9PiB7XG4gICAgICAgIC8vIE5vIGZ1cnRoZXIgY2FsbHMgdG8gcnMyIG5lY2Vzc2FyeSBpZiB3ZSBoYXZlIGEgZnJvbnRlbmQgb25seSBtb2R1bGVcbiAgICAgICAgaWYgKGZyb250ZW5kTW9kdWxlICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgZGF0YTogUmVuZGVyRGF0YSA9IHtcbiAgICAgICAgICAgIG1vZHVsZTogZnJvbnRlbmRNb2R1bGUubW9kdWxlLFxuICAgICAgICAgICAgZnJvbnRlbmRNb2R1bGVDb25maWc6IGZyb250ZW5kTW9kdWxlXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucmVuZGVyRGF0YSQubmV4dChkYXRhKVxuICAgICAgICAgIHRoaXMuZmluaXNoZWQubmV4dCgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlclJlc3BvbnNlRGF0YSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMucmVuZGVyQ29udHJvbGxlclNlcnZpY2UuZ2V0UmVuZGVyRGF0YVRva2VuKHRoaXMucmVxdWVzdCEhKSlcbiAgICAgICAgICAgIC8vIENhc2UgMTogbm8gam9iIHJldHVybmVkID0+IG5vIHBvbGxpbmcgbmVlZGVkXG4gICAgICAgICAgICBpZiAocmVuZGVyUmVzcG9uc2VEYXRhLmpvYklkID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVuZGVyaW5nUmVzcG9uc2VXaXRob3V0Sm9iKHJlbmRlclJlc3BvbnNlRGF0YSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3MkLm5leHQoe21vZHVsZTogcmVuZGVyUmVzcG9uc2VEYXRhLm1vZHVsZSA/PyAnJ30pO1xuICAgICAgICAgICAgICBpbnRlcnZhbCg1MDApLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZmluaXNoZWQpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmpvYkluZm9Db250cm9sbGVyU2VydmljZS5nZXRKb2JJbmZvKHtqb2JJZDogcmVuZGVyUmVzcG9uc2VEYXRhLmpvYklkISF9KS5waXBlKCkpLFxuICAgICAgICAgICAgICApLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogYXN5bmMgKGpvYkluZm8pID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIFNvbWUsIGJ1dCBub3QgYWxsLCBqb2JzIGFyZSBpbiBhIGZpbmFsIHN0YXR1cyAodGhpcyBtZWFucyBzb21lIGFyZSBzdGlsbCBRVUVVRUQgb3IgUFJPQ0VTU0lORylcbiAgICAgICAgICAgICAgICAgIGlmIChqb2JJbmZvLmpvYnMuc29tZShqID0+IGouc3RhdHVzID09PSAnRklOSVNIRUQnKSAmJiBqb2JJbmZvLnN0YXR1cyAhPT0gJ0ZJTklTSEVEJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUpvYkluZm9XaXRoU3ViSm9ic0luUHJvZ3Jlc3MocmVuZGVyUmVzcG9uc2VEYXRhLCBqb2JJbmZvKVxuICAgICAgICAgICAgICAgICAgICAvLyBtYWluIGpvYiBmaW5pc2hlZCBvciBwYXJ0aWFsbHkgZmFpbGVkXG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGpvYkluZm8uc3RhdHVzID09PSAnRklOSVNIRUQnIHx8IGpvYkluZm8uc3RhdHVzID09PSAnUEFSVElBTExZX0ZBSUxFRCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVGaW5pc2hlZE9yUGFydGlhbEpvYkluZm8ocmVuZGVyUmVzcG9uc2VEYXRhLCBqb2JJbmZvKVxuICAgICAgICAgICAgICAgICAgICAvLyBNYWluIGpvYiBmYWlsZWQgPT4gbm8gbW9kdWxlIGJ1dCBlcnJvciBwYWdlXG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGpvYkluZm8uc3RhdHVzID09PSAnRkFJTEVEJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUZhaWxlZE1haW5Kb2Ioam9iSW5mbylcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG5vIGZpbmlzaGVkIGpvYnMgLT4gc2hvdyBlaXRoZXIgb25lIHByb2dyZXNzIGJhciB3aXRoIHJhY2UgbGVhZGVyIChwcm9ncmVzcyAwLTEwMClcbiAgICAgICAgICAgICAgICAgICAgLy8gb3IgcXVldWUgcG9zaXRpb24gKHByb2dyZXNzICgtaW5mLC0xXSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVNYWluSm9iV2l0aE5vU3ViSm9iSW5GaW5hbFN0YXR1cyhqb2JJbmZvKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQXBpRXJyb3IoZXJyb3IpXG4gICAgICAgICAgICAgICAgfX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUFwaUVycm9yKGVycm9yKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVBcGlFcnJvcihlcnJvcilcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZUFwaUVycm9yKGVycm9yOiBhbnkpIHtcbiAgICBjb25zdCBwdWJsaWNNZXNzYWdlID0gZXJyb3IuZXJyb3IudXNlck1lc3NhZ2UgPz8gJ0dFTkVSSUNfRVJST1JfTUVTU0FHRSdcbiAgICBjb25zdCBkYXRhOiBSZW5kZXJEYXRhID0ge1xuICAgICAgbW9kdWxlOiAnRVJST1InLFxuICAgICAgcHVibGljRXJyb3JNZXNzYWdlOiBwdWJsaWNNZXNzYWdlXG4gICAgfVxuICAgIHRoaXMucmVuZGVyRGF0YSQubmV4dChkYXRhKVxuICAgIHRoaXMuZmluaXNoZWQubmV4dCgpXG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICAvLyBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLnRyYW5zbGF0aW9uc1NlcnZpY2UuaW5pdGlhbGl6ZSgpKVxuICAgIGlmICgnc2VydmljZVdvcmtlcicgaW4gbmF2aWdhdG9yKSB7XG4gICAgICBjb25zdCByZWcgPSBhd2FpdCBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5nZXRSZWdpc3RyYXRpb25zKCk7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChyZWc/Lm1hcCgocjogU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbikgPT4gci51bnJlZ2lzdGVyKCkpKTtcbiAgICAgIGNvbnN0IHNlcnZpY2VXb3JrZXJVcmwgPSB0aGlzLnNlcnZpY2VXb3JrZXJVcmwgPz8gKHRoaXMucGxhdGZvcm1Mb2NhdGlvbi5nZXRCYXNlSHJlZkZyb21ET00oKSArICdlZHUtc2VydmljZS13b3JrZXIuanMnKTtcbiAgICAgIGNvbnN0IHNjb3BlID0gdGhpcy5zZXJ2aWNlV29ya2VyVXJsID8gJy8nIDogdGhpcy5wbGF0Zm9ybUxvY2F0aW9uLmdldEJhc2VIcmVmRnJvbURPTSgpO1xuICAgICAgY29uc3QgcmVnaXN0cmF0aW9uID0gYXdhaXQgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVnaXN0ZXIoc2VydmljZVdvcmtlclVybCwge1xuICAgICAgICBzY29wZTogc2NvcGVcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlZ2lzdHJhdGlvbi53YWl0aW5nKSB7XG4gICAgICAgIHJlZ2lzdHJhdGlvbi53YWl0aW5nLnBvc3RNZXNzYWdlKHt0eXBlOiAnU0tJUF9XQUlUSU5HJ30pO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXJ2aWNlV29ya2VyUmVhZHkgPSB0cnVlO1xuICAgICAgdGhpcy5sb2FkRGF0YS5uZXh0KCk7XG4gICAgICByZWdpc3RyYXRpb24ub251cGRhdGVmb3VuZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgbmV3V29ya2VyID0gcmVnaXN0cmF0aW9uLmluc3RhbGxpbmc7XG4gICAgICAgIGlmIChuZXdXb3JrZXIpIHtcbiAgICAgICAgICBuZXdXb3JrZXIub25zdGF0ZWNoYW5nZSA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChuZXdXb3JrZXIuc3RhdGUgPT09ICdpbnN0YWxsZWQnKSB7XG4gICAgICAgICAgICAgIGlmIChuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5jb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgbmV3V29ya2VyLnBvc3RNZXNzYWdlKHt0eXBlOiAnU0tJUF9XQUlUSU5HJ30pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbnRyb2xsZXJjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuaW5mbygnU2VydmljZSBXb3JrZXIgY29udHJvbGxpbmcgdGhpcyBwYWdlLicpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybignU2VydmljZSB3b3JrZXIgQVBJIG5vdCBhdmFpbGFibGUnKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBuZ09uQ2hhbmdlcyhfOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgdGhpcy5sb2FkRGF0YS5uZXh0KCk7XG4gIH1cblxuICBhc3luYyBjaGVja01vZHVsZSgpOiBQcm9taXNlPEZyb250ZW5kTW9kdWxlQ29uZmlnIHwgbnVsbD4ge1xuICAgIGlmICghYXdhaXQgdGhpcy5tb2R1bGVJbmZvU2VydmljZS5pc0F2YWlsYWJsZUJhY2tlbmRPYmplY3QodGhpcy5ub2RlKSkge1xuICAgICAgaWYgKHRoaXMubm9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZHVsZUluZm9TZXJ2aWNlLmdldEZyb250ZW5kTW9kdWxlU2V0dGluZyh0aGlzLm5vZGUpXG4gICAgICB9XG4gICAgICByZXR1cm4ge21vZHVsZTogJ2RlZmF1bHQnLCB1cmxNb2R1bGVDb25maWc6IG51bGx9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG5cbiAgaGFuZGxlUmVuZGVyaW5nUmVzcG9uc2VXaXRob3V0Sm9iKHJlbmRlckRhdGFSZXNwb25zZTogUmVuZGVyRGF0YVJlc3BvbnNlKSB7XG4gICAgY29uc3QgaXRlbXMgPSByZW5kZXJEYXRhUmVzcG9uc2Uub2JqZWN0TGlua3M/Lm1hcChpdGVtID0+IHtcbiAgICAgIGNvbnN0IGFzc2V0SXRlbTogQXNzZXRTdGF0ZUl0ZW0gPSB7XG4gICAgICAgIGxpbms6IGl0ZW0ubGluayxcbiAgICAgICAgcHJvZ3Jlc3M6IDEwMCxcbiAgICAgICAgaGVpZ2h0OiBpdGVtLmhlaWdodCxcbiAgICAgICAgd2lkdGg6IGl0ZW0ud2lkdGgsXG4gICAgICAgIGFkZGl0aW9uYWxEYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIHN0YXR1czogJ0ZJTklTSEVEJ1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFzc2V0SXRlbVxuICAgIH0pXG4gICAgY29uc3QgZGF0YTogUmVuZGVyRGF0YSA9IHtcbiAgICAgIG1vZHVsZTogcmVuZGVyRGF0YVJlc3BvbnNlLm1vZHVsZSA/PyAnJyxcbiAgICAgIGl0ZW1zOiBpdGVtc1xuICAgIH1cbiAgICByZW5kZXJEYXRhUmVzcG9uc2Uub2JqZWN0TGlua3MgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnJlbmRlckRhdGEkLm5leHQoZGF0YSk7XG4gICAgdGhpcy5maW5pc2hlZC5uZXh0KCk7XG4gIH1cblxuICBoYW5kbGVKb2JJbmZvV2l0aFN1YkpvYnNJblByb2dyZXNzKHJlbmRlckRhdGFSZXNwb25zZTogUmVuZGVyRGF0YVJlc3BvbnNlLCBqb2JJbmZvOiBKb2JJbmZvUmVwbHkpIHtcbiAgICBjb25zdCBpdGVtcyA9IGpvYkluZm8uam9icy5tYXAoc3ViSm9iID0+IHtcbiAgICAgIGNvbnN0IGFzc2V0SXRlbTogQXNzZXRTdGF0ZUl0ZW0gPSB7XG4gICAgICAgIGxpbms6IHN1YkpvYi5vYmplY3RMaW5rPy5saW5rID8/ICcnLFxuICAgICAgICBwcm9ncmVzczogc3ViSm9iLnN0YXR1cyAhPT0gJ1FVRVVFRCcgPyBzdWJKb2IucHJvZ3Jlc3MgOiAtKHN1YkpvYi5wcm9ncmVzcyArIDEpLFxuICAgICAgICBoZWlnaHQ6IHN1YkpvYi5vYmplY3RMaW5rPy5oZWlnaHQgPz8gc3ViSm9iLnF1YWxpdHksXG4gICAgICAgIHdpZHRoOiBzdWJKb2Iub2JqZWN0TGluaz8ud2lkdGggPz8gMCxcbiAgICAgICAgYWRkaXRpb25hbERhdGE6IHN1YkpvYi5hZGRpdGlvbmFsRGF0YSxcbiAgICAgICAgc3RhdHVzOiBzdWJKb2Iuc3RhdHVzLFxuICAgICAgfVxuICAgICAgcmV0dXJuIGFzc2V0SXRlbVxuICAgIH0pXG4gICAgY29uc3QgZGF0YTogUmVuZGVyRGF0YSA9IHtcbiAgICAgIG1vZHVsZTogcmVuZGVyRGF0YVJlc3BvbnNlLm1vZHVsZSA/PyAnJyxcbiAgICAgIGl0ZW1zOiBpdGVtc1xuICAgIH1cbiAgICB0aGlzLnJlbmRlckRhdGEkLm5leHQoZGF0YSlcbiAgICB0aGlzLnNvbWVCdXROb3RBbGxGaW5pc2hlZC5uZXh0KHRydWUpXG4gIH1cblxuICBoYW5kbGVGaW5pc2hlZE9yUGFydGlhbEpvYkluZm8ocmVuZGVyRGF0YVJlc3BvbnNlOiBSZW5kZXJEYXRhUmVzcG9uc2UsIGpvYkluZm86IEpvYkluZm9SZXBseSkge1xuICAgIGNvbnN0IGl0ZW1zID0gam9iSW5mby5qb2JzLm1hcChzdWJKb2IgPT4ge1xuICAgICAgY29uc3QgYXNzZXRJdGVtOiBBc3NldFN0YXRlSXRlbSA9IHtcbiAgICAgICAgbGluazogc3ViSm9iLm9iamVjdExpbms/LmxpbmsgPz8gJycsXG4gICAgICAgIHByb2dyZXNzOiBzdWJKb2IucHJvZ3Jlc3MsXG4gICAgICAgIGhlaWdodDogc3ViSm9iLm9iamVjdExpbms/LmhlaWdodCA/PyBzdWJKb2IucXVhbGl0eSxcbiAgICAgICAgd2lkdGg6IHN1YkpvYi5vYmplY3RMaW5rPy53aWR0aCA/PyAwLFxuICAgICAgICBhZGRpdGlvbmFsRGF0YTogc3ViSm9iLmFkZGl0aW9uYWxEYXRhLFxuICAgICAgICBwdWJsaWNFcnJvck1lc3NhZ2U6IHN1YkpvYi5lcnJvcj8udXNlck1lc3NhZ2UsXG4gICAgICAgIHN0YXR1czpzdWJKb2Iuc3RhdHVzLFxuICAgICAgfVxuICAgICAgcmV0dXJuIGFzc2V0SXRlbVxuICAgIH0pXG4gICAgY29uc3QgZGF0YTogUmVuZGVyRGF0YSA9IHtcbiAgICAgIG1vZHVsZTogcmVuZGVyRGF0YVJlc3BvbnNlLm1vZHVsZSA/PyAnJyxcbiAgICAgIGl0ZW1zOiBpdGVtc1xuICAgIH1cbiAgICB0aGlzLnJlbmRlckRhdGEkLm5leHQoZGF0YSlcbiAgICB0aGlzLmZpbmlzaGVkLm5leHQoKVxuICB9XG5cbiAgaGFuZGxlRmFpbGVkTWFpbkpvYihqb2JJbmZvOiBKb2JJbmZvUmVwbHkpIHtcbiAgICBjb25zdCBkYXRhOiBSZW5kZXJEYXRhID0ge1xuICAgICAgbW9kdWxlOiAnRVJST1InLFxuICAgICAgcHVibGljRXJyb3JNZXNzYWdlOiBqb2JJbmZvLmVycm9yTWVzc2FnZT8udXNlck1lc3NhZ2UgPz8gJ0dFTkVSSUNfRVJST1JfTUVTU0FHRSdcbiAgICB9XG4gICAgdGhpcy5yZW5kZXJEYXRhJC5uZXh0KGRhdGEpXG4gICAgdGhpcy5maW5pc2hlZC5uZXh0KClcbiAgfVxuXG4gIGhhbmRsZU1haW5Kb2JXaXRoTm9TdWJKb2JJbkZpbmFsU3RhdHVzKGpvYkluZm86IEpvYkluZm9SZXBseSkge1xuICAgIGxldCBwcm9ncmVzcyA9IDBcbiAgICBpZiAoam9iSW5mby5qb2JzLnNvbWUoaiA9PiBqLnN0YXR1cyA9PT0gJ1BST0NFU1NJTkcnKSkge1xuICAgICAgcHJvZ3Jlc3MgPSBNYXRoLm1heCguLi5qb2JJbmZvLmpvYnMubWFwKGogPT4gai5wcm9ncmVzcykpXG4gICAgfSBlbHNlIGlmIChqb2JJbmZvLmpvYnMuc29tZShqID0+IGouc3RhdHVzID09PSAnUVVFVUVEJykpIHtcbiAgICAgIHByb2dyZXNzID0gLShNYXRoLm1pbiguLi5qb2JJbmZvLmpvYnMubWFwKGogPT4gai5wcm9ncmVzcyArIDEpKSlcbiAgICB9XG4gICAgdGhpcy5wcm9ncmVzcyQubmV4dCh7XG4gICAgICBtb2R1bGU6IGpvYkluZm8ubW9kdWxlID8/ICcnLFxuICAgICAgcHJvZ3Jlc3M6IHByb2dyZXNzXG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJtb2R1bGUgbW9kdWxlLXt7KHJlbmRlckRhdGEkIHwgYXN5bmMpPy5tb2R1bGV9fVwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwicmVuZGVyRGF0YSQgfCBhc3luYyBhcyBkYXRhXCI+XG4gICAgQGRlZmVyICh3aGVuIGRhdGE/Lm1vZHVsZSA9PT0gJ0lNQUdFJyl7XG4gICAgICA8cnMtbW9kdWxlLWltYWdlIFtkYXRhXT1cImRhdGFcIiBbbm9kZV09XCJub2RlXCI+PC9ycy1tb2R1bGUtaW1hZ2U+XG4gICAgfSBAbG9hZGluZyB7XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ1wiPjwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgICBAZGVmZXIgKHdoZW4gZGF0YT8ubW9kdWxlID09PSAnVklERU8nKXtcbiAgICAgIDxycy1tb2R1bGUtdmlkZW8gW2RhdGFdPVwiZGF0YVwiIFtub2RlXT1cIm5vZGVcIj48L3JzLW1vZHVsZS12aWRlbz5cbiAgICB9IEBsb2FkaW5nIHtcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nXCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuICAgIEBkZWZlciAod2hlbiBkYXRhPy5tb2R1bGUgPT09ICdQREYnIHx8IGRhdGE/Lm1vZHVsZSA9PT0gJ0RPQ1VNRU5UJykge1xuICAgICAgPHJzLW1vZHVsZS1wZGYgW2RhdGFdPVwiZGF0YVwiIFtub2RlXT1cIm5vZGVcIj48L3JzLW1vZHVsZS1wZGY+XG4gICAgfSBAbG9hZGluZyB7XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ1wiPjwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgICBAZGVmZXIgKHdoZW4gZGF0YT8ubW9kdWxlID09PSAnRURVSFRNTCcgfHwgZGF0YT8ubW9kdWxlID09PSAnSDVQJyB8fCBkYXRhPy5tb2R1bGUgPT09ICdKVVBZVEVSJyB8fCBkYXRhLm1vZHVsZSA9PT0gJ1NQUkVBRFNIRUVUJykge1xuICAgICAgPHJzLW1vZHVsZS1lZHUtaHRtbCBbZGF0YV09XCJkYXRhXCIgW25vZGVdPVwibm9kZVwiPjwvcnMtbW9kdWxlLWVkdS1odG1sPlxuICAgIH0gQGxvYWRpbmcge1xuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvYWRpbmdcIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gICAgQGRlZmVyICh3aGVuIGRhdGE/Lm1vZHVsZSA9PT0gJ0FVRElPJyl7XG4gICAgICA8cnMtbW9kdWxlLWF1ZGlvIFtkYXRhXT1cImRhdGFcIiBbbm9kZV09XCJub2RlXCI+PC9ycy1tb2R1bGUtYXVkaW8+XG4gICAgfSBAbG9hZGluZyB7XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ1wiPjwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgICBAZGVmZXIgKHdoZW4gZGF0YT8ubW9kdWxlID09PSAnQklOREVSJyl7XG4gICAgICA8cnMtbW9kdWxlLWJpbmRlciBbZGF0YV09XCJkYXRhXCIgW25vZGVdPVwibm9kZVwiPjwvcnMtbW9kdWxlLWJpbmRlcj5cbiAgICB9IEBsb2FkaW5nIHtcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nXCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuICAgIEBkZWZlciAod2hlbiBkYXRhPy5tb2R1bGUgPT09ICdEREInKXtcbiAgICAgIDxycy1tb2R1bGUtZGRiIFtkYXRhXT1cImRhdGFcIiBbbm9kZV09XCJub2RlXCI+PC9ycy1tb2R1bGUtZGRiPlxuICAgIH0gQGxvYWRpbmcge1xuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvYWRpbmdcIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGEubW9kdWxlID09PSAnZGVmYXVsdCdcIj5cbiAgICAgIEBkZWZlciAod2hlbiBkYXRhLm1vZHVsZSA9PT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgIDxycy1tb2R1bGUtZGVmYXVsdCBbbm9kZV09XCJub2RlXCI+PC9ycy1tb2R1bGUtZGVmYXVsdD5cbiAgICAgIH1cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YS5tb2R1bGUgPT09ICd1cmwnXCI+XG4gICAgICBAZGVmZXIgKHdoZW4gZGF0YS5tb2R1bGUgPT09ICd1cmwnKSB7XG4gICAgICAgIDxycy1tb2R1bGUtdXJsIFtub2RlXT1cIm5vZGVcIiBbZGF0YV09XCJkYXRhXCI+PC9ycy1tb2R1bGUtdXJsPlxuICAgICAgfVxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhLm1vZHVsZSA9PT0gJ0VSUk9SJ1wiPlxuICAgICAgQGRlZmVyICh3aGVuIGRhdGEubW9kdWxlID09PSAnRVJST1InKSB7XG4gICAgICAgIDxycy1tb2R1bGUtZXJyb3IgW25vZGVdPVwibm9kZVwiIFtkYXRhXT1cImRhdGFcIj48L3JzLW1vZHVsZS1lcnJvcj5cbiAgICAgIH1cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPGRpdiBjbGFzcz1cInByb2dyZXNzXCIgKm5nSWY9XCIocmVuZGVyRGF0YSQgfCBhc3luYykgPT09IG51bGw7XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInByb2dyZXNzJCB8IGFzeW5jIGFzIHByb2dyZXNzXCI+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJbJ1ZJREVPJywgJ0FVRElPJ10uaW5jbHVkZXMocHJvZ3Jlc3MubW9kdWxlKSA/ICdiYXInIDogJ3NwaW5uZXInXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidiYXInXCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cIihwcm9ncmVzcy5wcm9ncmVzcyA/PyAwKSA8IDBcIj5RdWV1ZSBwb3NpdGlvbjoge3stKHByb2dyZXNzLnByb2dyZXNzID8/IDApfX08L2Rpdj5cbiAgICAgICAgICA8bWF0LXByb2dyZXNzLWJhciBbdmFsdWVdPVwiKHByb2dyZXNzLnByb2dyZXNzID8/IDApXCIgKm5nSWY9XCIocHJvZ3Jlc3MucHJvZ3Jlc3MgPz8gMCkgPj0gMFwiPjwvbWF0LXByb2dyZXNzLWJhcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzcGlubmVyJ1wiPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCIocHJvZ3Jlc3MucHJvZ3Jlc3MgPz8gMCkgPCAwXCI+UXVldWUgcG9zaXRpb246IHt7LShwcm9ncmVzcy5wcm9ncmVzcyA/PyAwKX08L2Rpdj5cbiAgICAgICAgICA8bWF0LXNwaW5uZXIgW2RpYW1ldGVyXT1cIjUwXCIgKm5nSWY9XCIocHJvZ3Jlc3MucHJvZ3Jlc3MgPz8gMCkgPj0gMFwiPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZz5cbiAgPGRpdiBjbGFzcz1cInByb2dyZXNzXCI+XG4gICAgPG1hdC1zcGlubmVyPjwvbWF0LXNwaW5uZXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
262
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcmVuZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3NyYy9saWIvcmVuZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQVUsS0FBSyxFQUE2QyxNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFRbkQsT0FBTyxFQUFDLGVBQWUsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUU1RyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUUxRCxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUMsbUJBQW1CLEVBQU8sTUFBTSxxQkFBcUIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQU1wRSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFPdEMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7Ozs7Ozs7QUErQnRELE1BQU0sT0FBTyxlQUFlO0lBWTFCLFlBQ1UsdUJBQXVELEVBQ3ZELHdCQUFrRCxFQUNsRCxpQkFBb0MsRUFDcEMsZ0JBQWtDO1FBSGxDLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBZ0M7UUFDdkQsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFabkMs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QUMsSUFBSSxDQUFDO1lBQ2xCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUU7WUFDNUIsUUFBUSxFQUFFLFFBQVE7U0FDbkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs4R0EzTlUsZUFBZTtrR0FBZixlQUFlLDBMQU5mO1lBQ1QsZ0JBQWdCO1NBQ2pCLCtDQ3hESCxzeEdBMkVBLDBWRHRDSSxrQkFBa0IsOEJBQ2xCLGVBQWUsMGhCQUdmLHdCQUF3QixrT0FDeEIsb0JBQW9CLHdOQVFwQixtQkFBbUIsOEJBQ25CLGtCQUFrQjs7Z0dBU1QsZUFBZTtzQkEzQjNCLFNBQVM7bUNBQ0UsU0FBUyxjQUNQLElBQUksV0FDUDs0QkFDUCxrQkFBa0I7NEJBQ2xCLGVBQWU7NEJBQ2YsY0FBYzs0QkFDZCxjQUFjOzRCQUNkLHdCQUF3Qjs0QkFDeEIsb0JBQW9COzRCQUNwQixZQUFZOzRCQUNaLFlBQVk7NEJBQ1osZ0JBQWdCOzRCQUNoQixnQkFBZ0I7NEJBQ2hCLGNBQWM7NEJBQ2QsZUFBZTs0QkFDZixZQUFZOzRCQUNaLG1CQUFtQjs0QkFDbkIsa0JBQWtCOzRCQUNsQixjQUFjO3lCQUNmLGFBQ1U7NEJBQ1QsZ0JBQWdCO3lCQUNqQjs2TUFLUSxPQUFPOzBCQUFmLEtBQUs7b0JBQ0csSUFBSTswQkFBWixLQUFLO29CQUNHLGdCQUFnQjswQkFBeEIsS0FBSztvQkFDRyxxQkFBcUI7MEJBQTdCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE9wdGlvbmFsLCBTaW1wbGVDaGFuZ2VzfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7UmVuZGVyaW5nTW9kdWxlfSBmcm9tICcuL3JlbmRlcmluZy5tb2R1bGUnO1xuaW1wb3J0IHtcbiAgSm9iSW5mb0NvbnRyb2xsZXJTZXJ2aWNlLFxuICBKb2JJbmZvUmVwbHksXG4gIFJlbmRlckNvbnRyb2xsZXJXcmFwcGVyU2VydmljZSxcbiAgUmVuZGVyRGF0YVJlcXVlc3RXaXRoVG9rZW4sXG4gIFJlbmRlckRhdGFSZXNwb25zZVxufSBmcm9tICduZ3gtcmVuZGVyaW5nLXNlcnZpY2UtYXBpJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBkZWJvdW5jZVRpbWUsIGZpcnN0VmFsdWVGcm9tLCBpbnRlcnZhbCwgU3ViamVjdCwgc3dpdGNoTWFwLCB0YWtlVW50aWx9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtJbWFnZUNvbXBvbmVudH0gZnJvbSAnLi9tb2R1bGUvaW1hZ2UvaW1hZ2UuY29tcG9uZW50JztcbmltcG9ydCB7UmVuZGVyaW5nQXBpTW9kdWxlfSBmcm9tICcuL3JlbmRlcmluZy1hcGkubW9kdWxlJztcbmltcG9ydCB7VmlkZW9Db21wb25lbnR9IGZyb20gJy4vbW9kdWxlL3ZpZGVvL3ZpZGVvLmNvbXBvbmVudCc7XG5pbXBvcnQge01hdFByb2dyZXNzU3Bpbm5lck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XG5pbXBvcnQge0VkdVNoYXJpbmdBcGlNb2R1bGUsIE5vZGV9IGZyb20gJ25neC1lZHUtc2hhcmluZy1hcGknO1xuaW1wb3J0IHtNYXRQcm9ncmVzc0Jhck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3MtYmFyJztcbmltcG9ydCB7QXNzZXRTdGF0ZUl0ZW0sIFJlbmRlckRhdGF9IGZyb20gJy4vZHRvL1JlbmRlckRhdGEnO1xuaW1wb3J0IHtQZGZDb21wb25lbnR9IGZyb20gJy4vbW9kdWxlL3BkZi9wZGYuY29tcG9uZW50JztcbmltcG9ydCB7VXJsQ29tcG9uZW50fSBmcm9tICcuL21vZHVsZS91cmwvdXJsLmNvbXBvbmVudCc7XG5pbXBvcnQge0VkdUh0bWxDb21wb25lbnR9IGZyb20gJy4vbW9kdWxlL2VkdWh0bWwvZWR1SHRtbC5jb21wb25lbnQnO1xuaW1wb3J0IHtNb2R1bGVJbmZvU2VydmljZX0gZnJvbSAnLi4vbW9kdWxlLWluZm8uc2VydmljZSc7XG5pbXBvcnQge2ZpbHRlcn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtQbGF0Zm9ybUxvY2F0aW9ufSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtEZWZhdWx0Q29tcG9uZW50fSBmcm9tICcuL21vZHVsZS9kZWZhdWx0L2RlZmF1bHQuY29tcG9uZW50JztcbmltcG9ydCB7RnJvbnRlbmRNb2R1bGVDb25maWd9IGZyb20gJy4vZHRvL0Zyb250ZW5kTW9kdWxlQ29uZmlnJztcbmltcG9ydCB7QXVkaW9Db21wb25lbnR9IGZyb20gJy4vbW9kdWxlL2F1ZGlvL2F1ZGlvLmNvbXBvbmVudCc7XG5pbXBvcnQge0JpbmRlckNvbXBvbmVudH0gZnJvbSAnLi9tb2R1bGUvYmluZGVyL2JpbmRlci5jb21wb25lbnQnO1xuaW1wb3J0IHtEZGJDb21wb25lbnR9IGZyb20gJy4vbW9kdWxlL2RkYi9kZGIuY29tcG9uZW50JztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0VkdVNoYXJpbmdVaU1vZHVsZX0gZnJvbSAnbmd4LWVkdS1zaGFyaW5nLXVpJztcbmltcG9ydCB7RXJyb3JDb21wb25lbnR9IGZyb20gJy4vbW9kdWxlL2Vycm9yL2Vycm9yLmNvbXBvbmVudCc7XG5pbXBvcnQge1JFTkRFUklOR19TRVJWSUNFX0xJQl9DT05GSUcsIFJlbmRlcmluZ1NlcnZpY2VMaWJDb25maWd1cmF0aW9ufSBmcm9tIFwiLi4vcmVuZGVyaW5nLXNlcnZpY2UtbGliLWNvbmZpZ3VyYXRpb25cIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnMtcm9vdCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBSZW5kZXJpbmdBcGlNb2R1bGUsXG4gICAgUmVuZGVyaW5nTW9kdWxlLFxuICAgIEltYWdlQ29tcG9uZW50LFxuICAgIFZpZGVvQ29tcG9uZW50LFxuICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcbiAgICBNYXRQcm9ncmVzc0Jhck1vZHVsZSxcbiAgICBQZGZDb21wb25lbnQsXG4gICAgVXJsQ29tcG9uZW50LFxuICAgIEVkdUh0bWxDb21wb25lbnQsXG4gICAgRGVmYXVsdENvbXBvbmVudCxcbiAgICBBdWRpb0NvbXBvbmVudCxcbiAgICBCaW5kZXJDb21wb25lbnQsXG4gICAgRGRiQ29tcG9uZW50LFxuICAgIEVkdVNoYXJpbmdBcGlNb2R1bGUsXG4gICAgRWR1U2hhcmluZ1VpTW9kdWxlLFxuICAgIEVycm9yQ29tcG9uZW50LFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICBUcmFuc2xhdGVTZXJ2aWNlXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9yZW5kZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vcmVuZGVyLmNvbXBvbmVudC5zY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBSZW5kZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHJlcXVlc3Q6IFJlbmRlckRhdGFSZXF1ZXN0V2l0aFRva2VuIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBub2RlOiBOb2RlIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBzZXJ2aWNlV29ya2VyVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIGFjdGl2YXRlU2VydmljZVdvcmtlcjogYm9vbGVhbiA9IHRydWU7XG4gIHNlcnZpY2VXb3JrZXJSZWFkeSA9IGZhbHNlO1xuICBsb2FkRGF0YSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHJlbmRlckRhdGEkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSZW5kZXJEYXRhIHwgbnVsbD4obnVsbCk7XG4gIGZpbmlzaGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgc29tZUJ1dE5vdEFsbEZpbmlzaGVkID0gbmV3IFN1YmplY3Q8Qm9vbGVhbj4oKVxuICBwcm9ncmVzcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHsgbW9kdWxlOiBzdHJpbmcsIHByb2dyZXNzPzogbnVtYmVyIH0gfCBudWxsPihudWxsKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlbmRlckNvbnRyb2xsZXJTZXJ2aWNlOiBSZW5kZXJDb250cm9sbGVyV3JhcHBlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBqb2JJbmZvQ29udHJvbGxlclNlcnZpY2U6IEpvYkluZm9Db250cm9sbGVyU2VydmljZSxcbiAgICBwcml2YXRlIG1vZHVsZUluZm9TZXJ2aWNlOiBNb2R1bGVJbmZvU2VydmljZSxcbiAgICBwcml2YXRlIHBsYXRmb3JtTG9jYXRpb246IFBsYXRmb3JtTG9jYXRpb24sXG4gICkge1xuICAgIHRoaXMubG9hZERhdGEucGlwZShcbiAgICAgIGZpbHRlcigoKSA9PiB0aGlzLm5vZGUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnNlcnZpY2VXb3JrZXJSZWFkeSksXG4gICAgICBkZWJvdW5jZVRpbWUoMTApLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgLy8gc3Vic2NyaWJlIGVycm9yIGhhbmRsaW5nXG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrTW9kdWxlKClcbiAgICAgIH0pXG4gICAgKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogYXN5bmMgKGZyb250ZW5kTW9kdWxlKSA9PiB7XG4gICAgICAgIC8vIE5vIGZ1cnRoZXIgY2FsbHMgdG8gcnMyIG5lY2Vzc2FyeSBpZiB3ZSBoYXZlIGEgZnJvbnRlbmQgb25seSBtb2R1bGVcbiAgICAgICAgaWYgKGZyb250ZW5kTW9kdWxlICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgZGF0YTogUmVuZGVyRGF0YSA9IHtcbiAgICAgICAgICAgIG1vZHVsZTogZnJvbnRlbmRNb2R1bGUubW9kdWxlLFxuICAgICAgICAgICAgZnJvbnRlbmRNb2R1bGVDb25maWc6IGZyb250ZW5kTW9kdWxlXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucmVuZGVyRGF0YSQubmV4dChkYXRhKVxuICAgICAgICAgIHRoaXMuZmluaXNoZWQubmV4dCgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlclJlc3BvbnNlRGF0YSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMucmVuZGVyQ29udHJvbGxlclNlcnZpY2UuZ2V0UmVuZGVyRGF0YVRva2VuKHRoaXMucmVxdWVzdCEhKSlcbiAgICAgICAgICAgIC8vIENhc2UgMTogbm8gam9iIHJldHVybmVkID0+IG5vIHBvbGxpbmcgbmVlZGVkXG4gICAgICAgICAgICBpZiAocmVuZGVyUmVzcG9uc2VEYXRhLmpvYklkID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVuZGVyaW5nUmVzcG9uc2VXaXRob3V0Sm9iKHJlbmRlclJlc3BvbnNlRGF0YSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3MkLm5leHQoe21vZHVsZTogcmVuZGVyUmVzcG9uc2VEYXRhLm1vZHVsZSA/PyAnJ30pO1xuICAgICAgICAgICAgICBpbnRlcnZhbCg1MDApLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZmluaXNoZWQpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmpvYkluZm9Db250cm9sbGVyU2VydmljZS5nZXRKb2JJbmZvKHtqb2JJZDogcmVuZGVyUmVzcG9uc2VEYXRhLmpvYklkISF9KS5waXBlKCkpLFxuICAgICAgICAgICAgICApLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogYXN5bmMgKGpvYkluZm8pID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIFNvbWUsIGJ1dCBub3QgYWxsLCBqb2JzIGFyZSBpbiBhIGZpbmFsIHN0YXR1cyAodGhpcyBtZWFucyBzb21lIGFyZSBzdGlsbCBRVUVVRUQgb3IgUFJPQ0VTU0lORylcbiAgICAgICAgICAgICAgICAgIGlmIChqb2JJbmZvLmpvYnMuc29tZShqID0+IGouc3RhdHVzID09PSAnRklOSVNIRUQnKSAmJiBqb2JJbmZvLnN0YXR1cyAhPT0gJ0ZJTklTSEVEJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUpvYkluZm9XaXRoU3ViSm9ic0luUHJvZ3Jlc3MocmVuZGVyUmVzcG9uc2VEYXRhLCBqb2JJbmZvKVxuICAgICAgICAgICAgICAgICAgICAvLyBtYWluIGpvYiBmaW5pc2hlZCBvciBwYXJ0aWFsbHkgZmFpbGVkXG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGpvYkluZm8uc3RhdHVzID09PSAnRklOSVNIRUQnIHx8IGpvYkluZm8uc3RhdHVzID09PSAnUEFSVElBTExZX0ZBSUxFRCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVGaW5pc2hlZE9yUGFydGlhbEpvYkluZm8ocmVuZGVyUmVzcG9uc2VEYXRhLCBqb2JJbmZvKVxuICAgICAgICAgICAgICAgICAgICAvLyBNYWluIGpvYiBmYWlsZWQgPT4gbm8gbW9kdWxlIGJ1dCBlcnJvciBwYWdlXG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGpvYkluZm8uc3RhdHVzID09PSAnRkFJTEVEJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUZhaWxlZE1haW5Kb2Ioam9iSW5mbylcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG5vIGZpbmlzaGVkIGpvYnMgLT4gc2hvdyBlaXRoZXIgb25lIHByb2dyZXNzIGJhciB3aXRoIHJhY2UgbGVhZGVyIChwcm9ncmVzcyAwLTEwMClcbiAgICAgICAgICAgICAgICAgICAgLy8gb3IgcXVldWUgcG9zaXRpb24gKHByb2dyZXNzICgtaW5mLC0xXSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVNYWluSm9iV2l0aE5vU3ViSm9iSW5GaW5hbFN0YXR1cyhqb2JJbmZvKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQXBpRXJyb3IoZXJyb3IpXG4gICAgICAgICAgICAgICAgfX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUFwaUVycm9yKGVycm9yKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVBcGlFcnJvcihlcnJvcilcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZUFwaUVycm9yKGVycm9yOiBhbnkpIHtcbiAgICBjb25zdCBwdWJsaWNNZXNzYWdlID0gZXJyb3IuZXJyb3IudXNlck1lc3NhZ2UgPz8gJ0dFTkVSSUNfRVJST1JfTUVTU0FHRSdcbiAgICBjb25zdCBkYXRhOiBSZW5kZXJEYXRhID0ge1xuICAgICAgbW9kdWxlOiAnRVJST1InLFxuICAgICAgcHVibGljRXJyb3JNZXNzYWdlOiBwdWJsaWNNZXNzYWdlXG4gICAgfVxuICAgIHRoaXMucmVuZGVyRGF0YSQubmV4dChkYXRhKVxuICAgIHRoaXMuZmluaXNoZWQubmV4dCgpXG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICAvLyBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLnRyYW5zbGF0aW9uc1NlcnZpY2UuaW5pdGlhbGl6ZSgpKVxuICAgIGlmICh0aGlzLmFjdGl2YXRlU2VydmljZVdvcmtlciAmJiAnc2VydmljZVdvcmtlcicgaW4gbmF2aWdhdG9yKSB7XG4gICAgICBjb25zdCByZWcgPSBhd2FpdCBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5nZXRSZWdpc3RyYXRpb25zKCk7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChyZWc/Lm1hcCgocjogU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbikgPT4gci51bnJlZ2lzdGVyKCkpKTtcbiAgICAgIGNvbnN0IHNlcnZpY2VXb3JrZXJVcmwgPSB0aGlzLnNlcnZpY2VXb3JrZXJVcmwgPz8gKHRoaXMucGxhdGZvcm1Mb2NhdGlvbi5nZXRCYXNlSHJlZkZyb21ET00oKSArICdlZHUtc2VydmljZS13b3JrZXIuanMnKTtcbiAgICAgIGNvbnN0IHNjb3BlID0gdGhpcy5zZXJ2aWNlV29ya2VyVXJsID8gJy8nIDogdGhpcy5wbGF0Zm9ybUxvY2F0aW9uLmdldEJhc2VIcmVmRnJvbURPTSgpO1xuICAgICAgY29uc3QgcmVnaXN0cmF0aW9uID0gYXdhaXQgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVnaXN0ZXIoc2VydmljZVdvcmtlclVybCwge1xuICAgICAgICBzY29wZTogc2NvcGVcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlZ2lzdHJhdGlvbi53YWl0aW5nKSB7XG4gICAgICAgIHJlZ2lzdHJhdGlvbi53YWl0aW5nLnBvc3RNZXNzYWdlKHt0eXBlOiAnU0tJUF9XQUlUSU5HJ30pO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXJ2aWNlV29ya2VyUmVhZHkgPSB0cnVlO1xuICAgICAgdGhpcy5sb2FkRGF0YS5uZXh0KCk7XG4gICAgICByZWdpc3RyYXRpb24ub251cGRhdGVmb3VuZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgbmV3V29ya2VyID0gcmVnaXN0cmF0aW9uLmluc3RhbGxpbmc7XG4gICAgICAgIGlmIChuZXdXb3JrZXIpIHtcbiAgICAgICAgICBuZXdXb3JrZXIub25zdGF0ZWNoYW5nZSA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChuZXdXb3JrZXIuc3RhdGUgPT09ICdpbnN0YWxsZWQnKSB7XG4gICAgICAgICAgICAgIGlmIChuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5jb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgbmV3V29ya2VyLnBvc3RNZXNzYWdlKHt0eXBlOiAnU0tJUF9XQUlUSU5HJ30pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbnRyb2xsZXJjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuaW5mbygnU2VydmljZSBXb3JrZXIgY29udHJvbGxpbmcgdGhpcyBwYWdlLicpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICgnc2VydmljZVdvcmtlcicgaW4gbmF2aWdhdG9yICYmIHRoaXMuYWN0aXZhdGVTZXJ2aWNlV29ya2VyKXtcbiAgICAgICAgY29uc29sZS53YXJuKCdTZXJ2aWNlIHdvcmtlciBBUEkgbm90IGF2YWlsYWJsZScpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG5nT25DaGFuZ2VzKF86IFNpbXBsZUNoYW5nZXMpIHtcbiAgICB0aGlzLmxvYWREYXRhLm5leHQoKTtcbiAgfVxuXG4gIGFzeW5jIGNoZWNrTW9kdWxlKCk6IFByb21pc2U8RnJvbnRlbmRNb2R1bGVDb25maWcgfCBudWxsPiB7XG4gICAgaWYgKCFhd2FpdCB0aGlzLm1vZHVsZUluZm9TZXJ2aWNlLmlzQXZhaWxhYmxlQmFja2VuZE9iamVjdCh0aGlzLm5vZGUpKSB7XG4gICAgICBpZiAodGhpcy5ub2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kdWxlSW5mb1NlcnZpY2UuZ2V0RnJvbnRlbmRNb2R1bGVTZXR0aW5nKHRoaXMubm9kZSlcbiAgICAgIH1cbiAgICAgIHJldHVybiB7bW9kdWxlOiAnZGVmYXVsdCcsIHVybE1vZHVsZUNvbmZpZzogbnVsbH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gIH1cblxuICBoYW5kbGVSZW5kZXJpbmdSZXNwb25zZVdpdGhvdXRKb2IocmVuZGVyRGF0YVJlc3BvbnNlOiBSZW5kZXJEYXRhUmVzcG9uc2UpIHtcbiAgICBjb25zdCBpdGVtcyA9IHJlbmRlckRhdGFSZXNwb25zZS5vYmplY3RMaW5rcz8ubWFwKGl0ZW0gPT4ge1xuICAgICAgY29uc3QgYXNzZXRJdGVtOiBBc3NldFN0YXRlSXRlbSA9IHtcbiAgICAgICAgbGluazogaXRlbS5saW5rLFxuICAgICAgICBwcm9ncmVzczogMTAwLFxuICAgICAgICBoZWlnaHQ6IGl0ZW0uaGVpZ2h0LFxuICAgICAgICB3aWR0aDogaXRlbS53aWR0aCxcbiAgICAgICAgYWRkaXRpb25hbERhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgc3RhdHVzOiAnRklOSVNIRUQnXG4gICAgICB9XG4gICAgICByZXR1cm4gYXNzZXRJdGVtXG4gICAgfSlcbiAgICBjb25zdCBkYXRhOiBSZW5kZXJEYXRhID0ge1xuICAgICAgbW9kdWxlOiByZW5kZXJEYXRhUmVzcG9uc2UubW9kdWxlID8/ICcnLFxuICAgICAgaXRlbXM6IGl0ZW1zXG4gICAgfVxuICAgIHJlbmRlckRhdGFSZXNwb25zZS5vYmplY3RMaW5rcyAhPT0gdW5kZWZpbmVkICYmIHRoaXMucmVuZGVyRGF0YSQubmV4dChkYXRhKTtcbiAgICB0aGlzLmZpbmlzaGVkLm5leHQoKTtcbiAgfVxuXG4gIGhhbmRsZUpvYkluZm9XaXRoU3ViSm9ic0luUHJvZ3Jlc3MocmVuZGVyRGF0YVJlc3BvbnNlOiBSZW5kZXJEYXRhUmVzcG9uc2UsIGpvYkluZm86IEpvYkluZm9SZXBseSkge1xuICAgIGNvbnN0IGl0ZW1zID0gam9iSW5mby5qb2JzLm1hcChzdWJKb2IgPT4ge1xuICAgICAgY29uc3QgYXNzZXRJdGVtOiBBc3NldFN0YXRlSXRlbSA9IHtcbiAgICAgICAgbGluazogc3ViSm9iLm9iamVjdExpbms/LmxpbmsgPz8gJycsXG4gICAgICAgIHByb2dyZXNzOiBzdWJKb2Iuc3RhdHVzICE9PSAnUVVFVUVEJyA/IHN1YkpvYi5wcm9ncmVzcyA6IC0oc3ViSm9iLnByb2dyZXNzICsgMSksXG4gICAgICAgIGhlaWdodDogc3ViSm9iLm9iamVjdExpbms/LmhlaWdodCA/PyBzdWJKb2IucXVhbGl0eSxcbiAgICAgICAgd2lkdGg6IHN1YkpvYi5vYmplY3RMaW5rPy53aWR0aCA/PyAwLFxuICAgICAgICBhZGRpdGlvbmFsRGF0YTogc3ViSm9iLmFkZGl0aW9uYWxEYXRhLFxuICAgICAgICBzdGF0dXM6IHN1YkpvYi5zdGF0dXMsXG4gICAgICB9XG4gICAgICByZXR1cm4gYXNzZXRJdGVtXG4gICAgfSlcbiAgICBjb25zdCBkYXRhOiBSZW5kZXJEYXRhID0ge1xuICAgICAgbW9kdWxlOiByZW5kZXJEYXRhUmVzcG9uc2UubW9kdWxlID8/ICcnLFxuICAgICAgaXRlbXM6IGl0ZW1zXG4gICAgfVxuICAgIHRoaXMucmVuZGVyRGF0YSQubmV4dChkYXRhKVxuICAgIHRoaXMuc29tZUJ1dE5vdEFsbEZpbmlzaGVkLm5leHQodHJ1ZSlcbiAgfVxuXG4gIGhhbmRsZUZpbmlzaGVkT3JQYXJ0aWFsSm9iSW5mbyhyZW5kZXJEYXRhUmVzcG9uc2U6IFJlbmRlckRhdGFSZXNwb25zZSwgam9iSW5mbzogSm9iSW5mb1JlcGx5KSB7XG4gICAgY29uc3QgaXRlbXMgPSBqb2JJbmZvLmpvYnMubWFwKHN1YkpvYiA9PiB7XG4gICAgICBjb25zdCBhc3NldEl0ZW06IEFzc2V0U3RhdGVJdGVtID0ge1xuICAgICAgICBsaW5rOiBzdWJKb2Iub2JqZWN0TGluaz8ubGluayA/PyAnJyxcbiAgICAgICAgcHJvZ3Jlc3M6IHN1YkpvYi5wcm9ncmVzcyxcbiAgICAgICAgaGVpZ2h0OiBzdWJKb2Iub2JqZWN0TGluaz8uaGVpZ2h0ID8/IHN1YkpvYi5xdWFsaXR5LFxuICAgICAgICB3aWR0aDogc3ViSm9iLm9iamVjdExpbms/LndpZHRoID8/IDAsXG4gICAgICAgIGFkZGl0aW9uYWxEYXRhOiBzdWJKb2IuYWRkaXRpb25hbERhdGEsXG4gICAgICAgIHB1YmxpY0Vycm9yTWVzc2FnZTogc3ViSm9iLmVycm9yPy51c2VyTWVzc2FnZSxcbiAgICAgICAgc3RhdHVzOnN1YkpvYi5zdGF0dXMsXG4gICAgICB9XG4gICAgICByZXR1cm4gYXNzZXRJdGVtXG4gICAgfSlcbiAgICBjb25zdCBkYXRhOiBSZW5kZXJEYXRhID0ge1xuICAgICAgbW9kdWxlOiByZW5kZXJEYXRhUmVzcG9uc2UubW9kdWxlID8/ICcnLFxuICAgICAgaXRlbXM6IGl0ZW1zXG4gICAgfVxuICAgIHRoaXMucmVuZGVyRGF0YSQubmV4dChkYXRhKVxuICAgIHRoaXMuZmluaXNoZWQubmV4dCgpXG4gIH1cblxuICBoYW5kbGVGYWlsZWRNYWluSm9iKGpvYkluZm86IEpvYkluZm9SZXBseSkge1xuICAgIGNvbnN0IGRhdGE6IFJlbmRlckRhdGEgPSB7XG4gICAgICBtb2R1bGU6ICdFUlJPUicsXG4gICAgICBwdWJsaWNFcnJvck1lc3NhZ2U6IGpvYkluZm8uZXJyb3JNZXNzYWdlPy51c2VyTWVzc2FnZSA/PyAnR0VORVJJQ19FUlJPUl9NRVNTQUdFJ1xuICAgIH1cbiAgICB0aGlzLnJlbmRlckRhdGEkLm5leHQoZGF0YSlcbiAgICB0aGlzLmZpbmlzaGVkLm5leHQoKVxuICB9XG5cbiAgaGFuZGxlTWFpbkpvYldpdGhOb1N1YkpvYkluRmluYWxTdGF0dXMoam9iSW5mbzogSm9iSW5mb1JlcGx5KSB7XG4gICAgbGV0IHByb2dyZXNzID0gMFxuICAgIGlmIChqb2JJbmZvLmpvYnMuc29tZShqID0+IGouc3RhdHVzID09PSAnUFJPQ0VTU0lORycpKSB7XG4gICAgICBwcm9ncmVzcyA9IE1hdGgubWF4KC4uLmpvYkluZm8uam9icy5tYXAoaiA9PiBqLnByb2dyZXNzKSlcbiAgICB9IGVsc2UgaWYgKGpvYkluZm8uam9icy5zb21lKGogPT4gai5zdGF0dXMgPT09ICdRVUVVRUQnKSkge1xuICAgICAgcHJvZ3Jlc3MgPSAtKE1hdGgubWluKC4uLmpvYkluZm8uam9icy5tYXAoaiA9PiBqLnByb2dyZXNzICsgMSkpKVxuICAgIH1cbiAgICB0aGlzLnByb2dyZXNzJC5uZXh0KHtcbiAgICAgIG1vZHVsZTogam9iSW5mby5tb2R1bGUgPz8gJycsXG4gICAgICBwcm9ncmVzczogcHJvZ3Jlc3NcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1vZHVsZSBtb2R1bGUte3socmVuZGVyRGF0YSQgfCBhc3luYyk/Lm1vZHVsZX19XCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJyZW5kZXJEYXRhJCB8IGFzeW5jIGFzIGRhdGFcIj5cbiAgICBAZGVmZXIgKHdoZW4gZGF0YT8ubW9kdWxlID09PSAnSU1BR0UnKXtcbiAgICAgIDxycy1tb2R1bGUtaW1hZ2UgW2RhdGFdPVwiZGF0YVwiIFtub2RlXT1cIm5vZGVcIj48L3JzLW1vZHVsZS1pbWFnZT5cbiAgICB9IEBsb2FkaW5nIHtcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nXCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuICAgIEBkZWZlciAod2hlbiBkYXRhPy5tb2R1bGUgPT09ICdWSURFTycpe1xuICAgICAgPHJzLW1vZHVsZS12aWRlbyBbZGF0YV09XCJkYXRhXCIgW25vZGVdPVwibm9kZVwiPjwvcnMtbW9kdWxlLXZpZGVvPlxuICAgIH0gQGxvYWRpbmcge1xuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvYWRpbmdcIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gICAgQGRlZmVyICh3aGVuIGRhdGE/Lm1vZHVsZSA9PT0gJ1BERicgfHwgZGF0YT8ubW9kdWxlID09PSAnRE9DVU1FTlQnKSB7XG4gICAgICA8cnMtbW9kdWxlLXBkZiBbZGF0YV09XCJkYXRhXCIgW25vZGVdPVwibm9kZVwiPjwvcnMtbW9kdWxlLXBkZj5cbiAgICB9IEBsb2FkaW5nIHtcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nXCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuICAgIEBkZWZlciAod2hlbiBkYXRhPy5tb2R1bGUgPT09ICdFRFVIVE1MJyB8fCBkYXRhPy5tb2R1bGUgPT09ICdINVAnIHx8IGRhdGE/Lm1vZHVsZSA9PT0gJ0pVUFlURVInIHx8IGRhdGEubW9kdWxlID09PSAnU1BSRUFEU0hFRVQnKSB7XG4gICAgICA8cnMtbW9kdWxlLWVkdS1odG1sIFtkYXRhXT1cImRhdGFcIiBbbm9kZV09XCJub2RlXCI+PC9ycy1tb2R1bGUtZWR1LWh0bWw+XG4gICAgfSBAbG9hZGluZyB7XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ1wiPjwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgICBAZGVmZXIgKHdoZW4gZGF0YT8ubW9kdWxlID09PSAnQVVESU8nKXtcbiAgICAgIDxycy1tb2R1bGUtYXVkaW8gW2RhdGFdPVwiZGF0YVwiIFtub2RlXT1cIm5vZGVcIj48L3JzLW1vZHVsZS1hdWRpbz5cbiAgICB9IEBsb2FkaW5nIHtcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nXCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuICAgIEBkZWZlciAod2hlbiBkYXRhPy5tb2R1bGUgPT09ICdCSU5ERVInKXtcbiAgICAgIDxycy1tb2R1bGUtYmluZGVyIFtkYXRhXT1cImRhdGFcIiBbbm9kZV09XCJub2RlXCI+PC9ycy1tb2R1bGUtYmluZGVyPlxuICAgIH0gQGxvYWRpbmcge1xuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvYWRpbmdcIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gICAgQGRlZmVyICh3aGVuIGRhdGE/Lm1vZHVsZSA9PT0gJ0REQicpe1xuICAgICAgPHJzLW1vZHVsZS1kZGIgW2RhdGFdPVwiZGF0YVwiIFtub2RlXT1cIm5vZGVcIj48L3JzLW1vZHVsZS1kZGI+XG4gICAgfSBAbG9hZGluZyB7XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ1wiPjwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YS5tb2R1bGUgPT09ICdkZWZhdWx0J1wiPlxuICAgICAgQGRlZmVyICh3aGVuIGRhdGEubW9kdWxlID09PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgPHJzLW1vZHVsZS1kZWZhdWx0IFtub2RlXT1cIm5vZGVcIj48L3JzLW1vZHVsZS1kZWZhdWx0PlxuICAgICAgfVxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhLm1vZHVsZSA9PT0gJ3VybCdcIj5cbiAgICAgIEBkZWZlciAod2hlbiBkYXRhLm1vZHVsZSA9PT0gJ3VybCcpIHtcbiAgICAgICAgPHJzLW1vZHVsZS11cmwgW25vZGVdPVwibm9kZVwiIFtkYXRhXT1cImRhdGFcIj48L3JzLW1vZHVsZS11cmw+XG4gICAgICB9XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGEubW9kdWxlID09PSAnRVJST1InXCI+XG4gICAgICBAZGVmZXIgKHdoZW4gZGF0YS5tb2R1bGUgPT09ICdFUlJPUicpIHtcbiAgICAgICAgPHJzLW1vZHVsZS1lcnJvciBbbm9kZV09XCJub2RlXCIgW2RhdGFdPVwiZGF0YVwiPjwvcnMtbW9kdWxlLWVycm9yPlxuICAgICAgfVxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3NcIiAqbmdJZj1cIihyZW5kZXJEYXRhJCB8IGFzeW5jKSA9PT0gbnVsbDtcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicHJvZ3Jlc3MkIHwgYXN5bmMgYXMgcHJvZ3Jlc3NcIj5cbiAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cIlsnVklERU8nLCAnQVVESU8nXS5pbmNsdWRlcyhwcm9ncmVzcy5tb2R1bGUpID8gJ2JhcicgOiAnc3Bpbm5lcidcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2JhcidcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiKHByb2dyZXNzLnByb2dyZXNzID8/IDApIDwgMFwiPlF1ZXVlIHBvc2l0aW9uOiB7ey0ocHJvZ3Jlc3MucHJvZ3Jlc3MgPz8gMCl9fTwvZGl2PlxuICAgICAgICAgIDxtYXQtcHJvZ3Jlc3MtYmFyIFt2YWx1ZV09XCIocHJvZ3Jlc3MucHJvZ3Jlc3MgPz8gMClcIiAqbmdJZj1cIihwcm9ncmVzcy5wcm9ncmVzcyA/PyAwKSA+PSAwXCI+PC9tYXQtcHJvZ3Jlc3MtYmFyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3NwaW5uZXInXCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cIihwcm9ncmVzcy5wcm9ncmVzcyA/PyAwKSA8IDBcIj5RdWV1ZSBwb3NpdGlvbjoge3stKHByb2dyZXNzLnByb2dyZXNzID8/IDApfTwvZGl2PlxuICAgICAgICAgIDxtYXQtc3Bpbm5lciBbZGlhbWV0ZXJdPVwiNTBcIiAqbmdJZj1cIihwcm9ncmVzcy5wcm9ncmVzcyA/PyAwKSA+PSAwXCI+PC9tYXQtc3Bpbm5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNsb2FkaW5nPlxuICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3NcIj5cbiAgICA8bWF0LXNwaW5uZXI+PC9tYXQtc3Bpbm5lcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -273,7 +273,7 @@ class PdfComponent {
273
273
  }
274
274
  }
275
275
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: PdfComponent, deps: [{ token: i1.AssetControllerService }, { token: RENDERING_SERVICE_LIB_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
276
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.6", type: PdfComponent, isStandalone: true, selector: "rs-module-pdf", inputs: { data: "data", node: "node" }, viewQueries: [{ propertyName: "viewerRef", first: true, predicate: ["pdfViewer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"pdf-wrapper\" [class.hide-all]=\"restrictedView\" *ngIf=\"fileData !== undefined\">\n <ng2-pdfjs-viewer\n #pdfViewer\n [pdfSrc]=\"fileData\"\n [print]=\"!restrictedView\"\n [download]=\"false\"\n [openFile]=\"false\"\n [viewBookmark]=\"false\"\n [viewerFolder]=\"configuration?.assetsUrl ? configuration.assetsUrl + '/pdfjs' : ''\"\n (onDocumentLoad)=\"onDocumentLoad()\"\n >\n </ng2-pdfjs-viewer>\n</div>\n", styles: [":host{position:relative;display:flex;align-items:center;width:100%;aspect-ratio:1/1.41}.pdf-wrapper{width:100%;height:100%}@media print{.hide-all *{display:none!important}}\n"], dependencies: [{ kind: "ngmodule", type: RenderingModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: PdfJsViewerModule }, { kind: "component", type: i3$3.PdfJsViewerComponent, selector: "ng2-pdfjs-viewer", inputs: ["viewerId", "viewerFolder", "externalWindow", "target", "showSpinner", "downloadFileName", "openFile", "download", "startDownload", "viewBookmark", "print", "startPrint", "fullScreen", "find", "zoom", "nameddest", "pagemode", "lastPage", "rotatecw", "rotateccw", "cursor", "scroll", "spread", "locale", "useOnlyCssZoom", "errorOverride", "errorAppend", "errorMessage", "diagnosticLogs", "externalWindowOptions", "page", "pdfSrc"], outputs: ["onBeforePrint", "onAfterPrint", "onDocumentLoad", "onPageChange"] }] }); }
276
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.6", type: PdfComponent, isStandalone: true, selector: "rs-module-pdf", inputs: { data: "data", node: "node" }, viewQueries: [{ propertyName: "viewerRef", first: true, predicate: ["pdfViewer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"pdf-wrapper\" [class.hide-all]=\"restrictedView\" *ngIf=\"fileData !== undefined\">\n <ng2-pdfjs-viewer\n #pdfViewer\n [pdfSrc]=\"fileData\"\n [print]=\"!restrictedView\"\n [download]=\"false\"\n [openFile]=\"false\"\n [viewBookmark]=\"false\"\n [viewerFolder]=\"configuration?.assetsUrl ? configuration.assetsUrl + '/pdfjs' : ''\"\n (onDocumentLoad)=\"onDocumentLoad()\"\n >\n </ng2-pdfjs-viewer>\n</div>\n", styles: [":host{position:relative;display:flex;align-items:center;width:100%}.pdf-wrapper{width:100%;height:100%}@media print{.hide-all *{display:none!important}}\n"], dependencies: [{ kind: "ngmodule", type: RenderingModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: PdfJsViewerModule }, { kind: "component", type: i3$3.PdfJsViewerComponent, selector: "ng2-pdfjs-viewer", inputs: ["viewerId", "viewerFolder", "externalWindow", "target", "showSpinner", "downloadFileName", "openFile", "download", "startDownload", "viewBookmark", "print", "startPrint", "fullScreen", "find", "zoom", "nameddest", "pagemode", "lastPage", "rotatecw", "rotateccw", "cursor", "scroll", "spread", "locale", "useOnlyCssZoom", "errorOverride", "errorAppend", "errorMessage", "diagnosticLogs", "externalWindowOptions", "page", "pdfSrc"], outputs: ["onBeforePrint", "onAfterPrint", "onDocumentLoad", "onPageChange"] }] }); }
277
277
  }
278
278
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: PdfComponent, decorators: [{
279
279
  type: Component,
@@ -282,7 +282,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImpor
282
282
  MatButtonModule,
283
283
  MatIconModule,
284
284
  PdfJsViewerModule
285
- ], template: "<div class=\"pdf-wrapper\" [class.hide-all]=\"restrictedView\" *ngIf=\"fileData !== undefined\">\n <ng2-pdfjs-viewer\n #pdfViewer\n [pdfSrc]=\"fileData\"\n [print]=\"!restrictedView\"\n [download]=\"false\"\n [openFile]=\"false\"\n [viewBookmark]=\"false\"\n [viewerFolder]=\"configuration?.assetsUrl ? configuration.assetsUrl + '/pdfjs' : ''\"\n (onDocumentLoad)=\"onDocumentLoad()\"\n >\n </ng2-pdfjs-viewer>\n</div>\n", styles: [":host{position:relative;display:flex;align-items:center;width:100%;aspect-ratio:1/1.41}.pdf-wrapper{width:100%;height:100%}@media print{.hide-all *{display:none!important}}\n"] }]
285
+ ], template: "<div class=\"pdf-wrapper\" [class.hide-all]=\"restrictedView\" *ngIf=\"fileData !== undefined\">\n <ng2-pdfjs-viewer\n #pdfViewer\n [pdfSrc]=\"fileData\"\n [print]=\"!restrictedView\"\n [download]=\"false\"\n [openFile]=\"false\"\n [viewBookmark]=\"false\"\n [viewerFolder]=\"configuration?.assetsUrl ? configuration.assetsUrl + '/pdfjs' : ''\"\n (onDocumentLoad)=\"onDocumentLoad()\"\n >\n </ng2-pdfjs-viewer>\n</div>\n", styles: [":host{position:relative;display:flex;align-items:center;width:100%}.pdf-wrapper{width:100%;height:100%}@media print{.hide-all *{display:none!important}}\n"] }]
286
286
  }], ctorParameters: () => [{ type: i1.AssetControllerService }, { type: RenderingServiceLibConfiguration, decorators: [{
287
287
  type: Optional
288
288
  }, {
@@ -664,6 +664,7 @@ class RenderComponent {
664
664
  this.jobInfoControllerService = jobInfoControllerService;
665
665
  this.moduleInfoService = moduleInfoService;
666
666
  this.platformLocation = platformLocation;
667
+ this.activateServiceWorker = true;
667
668
  this.serviceWorkerReady = false;
668
669
  this.loadData = new Subject();
669
670
  this.renderData$ = new BehaviorSubject(null);
@@ -740,7 +741,7 @@ class RenderComponent {
740
741
  }
741
742
  async ngOnInit() {
742
743
  // await firstValueFrom(this.translationsService.initialize())
743
- if ('serviceWorker' in navigator) {
744
+ if (this.activateServiceWorker && 'serviceWorker' in navigator) {
744
745
  const reg = await navigator.serviceWorker.getRegistrations();
745
746
  await Promise.all(reg?.map((r) => r.unregister()));
746
747
  const serviceWorkerUrl = this.serviceWorkerUrl ?? (this.platformLocation.getBaseHrefFromDOM() + 'edu-service-worker.js');
@@ -769,7 +770,7 @@ class RenderComponent {
769
770
  console.info('Service Worker controlling this page.');
770
771
  });
771
772
  }
772
- else {
773
+ else if ('serviceWorker' in navigator && this.activateServiceWorker) {
773
774
  console.warn('Service worker API not available');
774
775
  }
775
776
  }
@@ -867,7 +868,7 @@ class RenderComponent {
867
868
  });
868
869
  }
869
870
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: RenderComponent, deps: [{ token: i1.RenderControllerWrapperService }, { token: i1.JobInfoControllerService }, { token: ModuleInfoService }, { token: i3.PlatformLocation }], target: i0.ɵɵFactoryTarget.Component }); }
870
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.6", type: RenderComponent, isStandalone: true, selector: "rs-root", inputs: { request: "request", node: "node", serviceWorkerUrl: "serviceWorkerUrl" }, providers: [
871
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.6", type: RenderComponent, isStandalone: true, selector: "rs-root", inputs: { request: "request", node: "node", serviceWorkerUrl: "serviceWorkerUrl", activateServiceWorker: "activateServiceWorker" }, providers: [
871
872
  TranslateService
872
873
  ], usesOnChanges: true, ngImport: i0, template: "<div class=\"module module-{{(renderData$ | async)?.module}}\">\n <ng-container *ngIf=\"renderData$ | async as data\">\n @defer (when data?.module === 'IMAGE'){\n <rs-module-image [data]=\"data\" [node]=\"node\"></rs-module-image>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'VIDEO'){\n <rs-module-video [data]=\"data\" [node]=\"node\"></rs-module-video>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'PDF' || data?.module === 'DOCUMENT') {\n <rs-module-pdf [data]=\"data\" [node]=\"node\"></rs-module-pdf>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'EDUHTML' || data?.module === 'H5P' || data?.module === 'JUPYTER' || data.module === 'SPREADSHEET') {\n <rs-module-edu-html [data]=\"data\" [node]=\"node\"></rs-module-edu-html>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'AUDIO'){\n <rs-module-audio [data]=\"data\" [node]=\"node\"></rs-module-audio>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'BINDER'){\n <rs-module-binder [data]=\"data\" [node]=\"node\"></rs-module-binder>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'DDB'){\n <rs-module-ddb [data]=\"data\" [node]=\"node\"></rs-module-ddb>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n <ng-container *ngIf=\"data.module === 'default'\">\n @defer (when data.module === 'default') {\n <rs-module-default [node]=\"node\"></rs-module-default>\n }\n </ng-container>\n <ng-container *ngIf=\"data.module === 'url'\">\n @defer (when data.module === 'url') {\n <rs-module-url [node]=\"node\" [data]=\"data\"></rs-module-url>\n }\n </ng-container>\n <ng-container *ngIf=\"data.module === 'ERROR'\">\n @defer (when data.module === 'ERROR') {\n <rs-module-error [node]=\"node\" [data]=\"data\"></rs-module-error>\n }\n </ng-container>\n </ng-container>\n\n <div class=\"progress\" *ngIf=\"(renderData$ | async) === null;\">\n <ng-container *ngIf=\"progress$ | async as progress\">\n <ng-container [ngSwitch]=\"['VIDEO', 'AUDIO'].includes(progress.module) ? 'bar' : 'spinner'\">\n <ng-container *ngSwitchCase=\"'bar'\">\n <div *ngIf=\"(progress.progress ?? 0) < 0\">Queue position: {{-(progress.progress ?? 0)}}</div>\n <mat-progress-bar [value]=\"(progress.progress ?? 0)\" *ngIf=\"(progress.progress ?? 0) >= 0\"></mat-progress-bar>\n </ng-container>\n <ng-container *ngSwitchCase=\"'spinner'\">\n <div *ngIf=\"(progress.progress ?? 0) < 0\">Queue position: {{-(progress.progress ?? 0)}</div>\n <mat-spinner [diameter]=\"50\" *ngIf=\"(progress.progress ?? 0) >= 0\"></mat-spinner>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n</div>\n\n<ng-template #loading>\n <div class=\"progress\">\n <mat-spinner></mat-spinner>\n </div>\n</ng-template>\n", styles: [":host{display:flex;flex-direction:column;gap:20px;padding:10px 30px}.module{overflow:auto;display:flex;flex-grow:1;height:auto;border:1px solid #aaa;padding:20px}.module rs-module-image,.module rs-module-video{width:100%}.module .progress{display:flex;justify-content:center;flex-grow:1}\n"], dependencies: [{ kind: "ngmodule", type: RenderingApiModule }, { kind: "ngmodule", type: RenderingModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i4$1.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i5.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "ngmodule", type: EduSharingApiModule }, { kind: "ngmodule", type: EduSharingUiModule }], deferBlockDependencies: [() => [Promise.resolve().then(function () { return image_component; }).then(m => m.ImageComponent)], () => [Promise.resolve().then(function () { return video_component; }).then(m => m.VideoComponent)], () => [Promise.resolve().then(function () { return pdf_component; }).then(m => m.PdfComponent)], () => [Promise.resolve().then(function () { return eduHtml_component; }).then(m => m.EduHtmlComponent)], () => [import('./ngx-rendering-service-lib-audio.component-CJInS7_m.mjs').then(m => m.AudioComponent)], () => [import('./ngx-rendering-service-lib-binder.component-qTol-SZV.mjs').then(m => m.BinderComponent)], () => [import('./ngx-rendering-service-lib-ddb.component-nG3wrIO9.mjs').then(m => m.DdbComponent)], () => [import('./ngx-rendering-service-lib-default.component-DyjHM169.mjs').then(m => m.DefaultComponent)], () => [Promise.resolve().then(function () { return url_component; }).then(m => m.UrlComponent)], () => [import('./ngx-rendering-service-lib-error.component-w4_953DU.mjs').then(m => m.ErrorComponent)]] }); }
873
874
  }
@@ -899,6 +900,8 @@ i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "18.2.6", ng
899
900
  type: Input
900
901
  }], serviceWorkerUrl: [{
901
902
  type: Input
903
+ }], activateServiceWorker: [{
904
+ type: Input
902
905
  }] } }) });
903
906
 
904
907
  class RenderingServiceLibModule {
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-rendering-service-lib.mjs","sources":["../../src/lib/asset-link.pipe.ts","../../src/lib/rendering.module.ts","../../src/lib/module/image/image.component.ts","../../src/lib/module/image/image.component.html","../../src/lib/module/video/video.component.ts","../../src/lib/module/video/video.component.html","../../src/rendering-service-lib-configuration.ts","../../src/lib/module/pdf/pdf.component.ts","../../src/lib/module/pdf/pdf.component.html","../../src/lib/dto/FrontendModuleConfig.ts","../../src/lib/module/url/url.component.ts","../../src/lib/module/url/url.component.html","../../src/lib/module/eduhtml/eduHtml.component.ts","../../src/lib/module/eduhtml/eduHtml.component.html","../../src/lib/rendering-api.module.ts","../../src/module-info.service.ts","../../src/lib/render.component.ts","../../src/lib/render.component.html","../../src/rendering-service-lib.module.ts","../../src/index.ts","../../src/ngx-rendering-service-lib.ts"],"sourcesContent":["import {Injector, Pipe, PipeTransform} from '@angular/core';\nimport {RSApiConfiguration} from 'ngx-rendering-service-api';\n\n/**\n * this pipe transforms any reported asset data uri from the rendering to the uri that is currently configured for the backend\n * this is required in case the rendering service is behind a proxy, i.e. in dev mode\n */\n@Pipe({ name: 'rsAssetLink' })\nexport class AssetLinkPipe implements PipeTransform {\n constructor(\n private injector: Injector,\n ) {\n }\n\n transform(value: string | undefined) {\n if(value) {\n const str = value.split('/public');\n str[0] = this.injector.get(RSApiConfiguration).rootUrl;\n return str.join('/public');\n }\n return value;\n }\n\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {AssetLinkPipe} from './asset-link.pipe';\n\n@NgModule({\n imports: [\n CommonModule,\n ],\n declarations: [\n AssetLinkPipe,\n ],\n exports: [\n CommonModule,\n AssetLinkPipe,\n ]\n})\nexport class RenderingModule {}\n","import {AfterViewInit, Component, ElementRef, HostListener, Input, signal} from '@angular/core';\nimport {RenderingModule} from '../../rendering.module';\nimport {RenderModule} from '../RenderModule';\nimport {Node} from 'ngx-edu-sharing-api';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {RenderData, AssetStateItem} from '../../dto/RenderData';\n\n@Component({\n selector: 'rs-module-image',\n standalone: true,\n imports: [\n RenderingModule,\n MatButtonModule,\n MatIconModule,\n ],\n templateUrl: './image.component.html',\n styleUrl: './image.component.scss'\n})\nexport class ImageComponent implements RenderModule, AfterViewInit {\n @Input() data: RenderData | undefined;\n @Input() node: Node | undefined;\n activeObject = signal<AssetStateItem | undefined>(undefined);\n constructor(public element: ElementRef) { }\n ngAfterViewInit(): void {\n this.loadOptimalSize();\n }\n\n @HostListener('document:fullscreenchange')\n private loadOptimalSize() {\n const size = this.element.nativeElement.getBoundingClientRect();\n const allFinishedItems = this.data?.items?.filter(item => item.link !== '')\n const matchingItem = allFinishedItems?.sort((a, b) => {\n // sort by the image size closest to the viewport\n return Math.abs(a.width - size.width) > Math.abs(b.width - size.width) ? 1 : -1;\n })[0]\n this.activeObject.set(matchingItem);\n }\n\n toggleFullscreen() {\n if(document.fullscreenElement) {\n void document.exitFullscreen();\n } else {\n this.element.nativeElement.requestFullscreen();\n }\n }\n}\n","<div class=\"image-wrapper\"\n *ngIf=\"activeObject()\"\n>\n <img\n #image\n [src]=\"activeObject()?.link | rsAssetLink\"\n [alt]=\"node?.title || node?.name || ''\"\n >\n <button mat-icon-button (click)=\"toggleFullscreen()\"><mat-icon>fullscreen</mat-icon></button>\n</div>\n","import {AfterViewInit, Component, ElementRef, Input, signal, ViewChild} from '@angular/core';\nimport {RenderingModule} from '../../rendering.module';\nimport {RenderModule} from '../RenderModule';\nimport {Node} from 'ngx-edu-sharing-api';\nimport {MatIcon} from '@angular/material/icon';\nimport {MatIconButton} from '@angular/material/button';\nimport {FormsModule} from '@angular/forms';\nimport {RenderData, AssetStateItem} from '../../dto/RenderData';\nimport {MatMenu, MatMenuItem, MatMenuTrigger} from '@angular/material/menu';\nimport {EduSharingUiModule} from 'ngx-edu-sharing-ui';\n\n@Component({\n selector: 'rs-module-video',\n standalone: true,\n imports: [\n RenderingModule,\n MatIcon,\n MatIconButton,\n FormsModule,\n MatMenu,\n MatMenuTrigger,\n MatMenuItem,\n EduSharingUiModule\n ],\n templateUrl: './video.component.html',\n styleUrl: './video.component.scss'\n})\nexport class VideoComponent implements RenderModule, AfterViewInit{\n @Input() data: RenderData | undefined;\n @Input() node: Node | undefined;\n @ViewChild('video') videoRef: ElementRef<HTMLVideoElement> | undefined\n activeObject = signal<AssetStateItem | undefined>(undefined);\n hasMultipleResolutions: Boolean = true\n\n ngAfterViewInit(): void {\n this.hasMultipleResolutions = (this.data?.items?.length ?? 1) > 1\n const downlink: number = (navigator as any).connection?.downlink;\n let optimalResolution = 720;\n if(downlink < 2) {\n optimalResolution = 240;\n }\n if(downlink > 6) {\n optimalResolution = 1080;\n }\n const allFinishedItems = this.data?.items?.filter(item => item.link !== '')\n this.activeObject.set(allFinishedItems?.sort((a, b) => {\n // sort by the image size closest to the viewport\n return Math.abs(a.width - optimalResolution) > Math.abs(b.width - optimalResolution) ? 1 : -1;\n })[0]);\n }\n\n switchResolution(item: AssetStateItem) {\n this.activeObject.set(item)\n const currentTime = this.videoRef?.nativeElement.currentTime\n this.videoRef?.nativeElement.load()\n if (currentTime !== undefined) {\n this.videoRef!.nativeElement.currentTime = currentTime\n }\n }\n\n protected readonly JSON = JSON;\n}\n","<div class=\"video-wrapper\" *ngIf=\"activeObject()\">\n <video\n controls\n #video\n >\n <source [src]=\"activeObject()?.link | rsAssetLink\" />\n </video>\n <button *ngIf=\"hasMultipleResolutions\"\n mat-icon-button\n [matMenuTriggerFor]=\"resolutionMenu\"\n >\n <mat-icon>settings</mat-icon>\n </button>\n <mat-menu\n #resolutionMenu=\"matMenu\"\n xPosition=\"before\"\n >\n <button\n mat-menu-item\n *ngFor=\"let item of data?.items\"\n [disabled]=\"item.link === ''\"\n (click)=\"item.height !== activeObject()?.height && switchResolution(item)\"\n >\n <ng-container\n [ngTemplateOutlet]=\"item.link !== '' ? ready : loading\"\n [ngTemplateOutletContext]=\"{item:item}\"\n >\n </ng-container>\n </button>\n\n </mat-menu>\n</div>\n\n<ng-template #ready let-item='item'>\n <div style=\"display: flex; justify-content: space-between\">\n <mat-icon *ngIf=\"item.height === activeObject()?.height\">\n done\n </mat-icon>\n <div *ngIf=\"item.height !== activeObject()?.height\"></div>\n <div>\n {{item.height}}p\n </div>\n </div>\n</ng-template>\n\n<ng-template #loading let-item='item'>\n <div style=\"display: flex; justify-content: space-between\">\n <div>\n <ng-container *ngIf=\"item.status === 'PROCESSING'; else queue\">\n {{ 'RENDERING.CONVERTING' | translate }}: {{ item.progress }}%\n </ng-container>\n <ng-template #queue>\n {{ 'RENDERING.QUEUED' | translate }}: {{ item.progress }}\n </ng-template>\n </div>\n <div style=\"padding-left: .5em\">\n {{item.height}}p\n </div>\n </div>\n</ng-template>\n","import {Injectable, InjectionToken, Provider} from '@angular/core';\n\nexport const RENDERING_SERVICE_LIB_CONFIG = new InjectionToken<RenderingServiceLibConfiguration>(\n 'RENDERING_SERVICE_LIB_CONFIG',\n);\n@Injectable({\n providedIn: 'root',\n})\nexport class RenderingServiceLibConfiguration {\n /**\n * the assets url\n * this is important for modules that require to fetch external javascript, i.e. ng2-pdfjs-viewer\n */\n assetsUrl: string | null = null;\n static create(params: RenderingServiceLibConfigurationParams = {}): RenderingServiceLibConfiguration {\n return { ...new RenderingServiceLibConfiguration(), ...params };\n }\n}\n\nexport type RenderingServiceLibConfigurationParams = Partial<RenderingServiceLibConfiguration>;\n\nexport function getConfigProvider(params?: RenderingServiceLibConfigurationParams): Provider[] {\n return [\n // Provide the params given to `forRoot()`. These can be overridden by the application by\n // providing `EDU_SHARING_API_CONFIG` itself.\n {\n provide: RENDERING_SERVICE_LIB_CONFIG,\n useValue: params,\n }\n ];\n}\n","import {Component, Inject, Input, OnChanges, Optional, SimpleChanges, ViewChild} from '@angular/core';\nimport {RenderingModule} from '../../rendering.module';\nimport {RenderModule} from '../RenderModule';\nimport {Node} from 'ngx-edu-sharing-api';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {RenderData} from '../../dto/RenderData';\nimport {PdfJsViewerComponent, PdfJsViewerModule} from 'ng2-pdfjs-viewer';\nimport {AssetControllerService, GetAsset$Params} from 'ngx-rendering-service-api';\nimport {\n RENDERING_SERVICE_LIB_CONFIG,\n RenderingServiceLibConfiguration\n} from \"../../../rendering-service-lib-configuration\";\n\n\n@Component({\n selector: 'rs-module-pdf',\n standalone: true,\n imports: [\n RenderingModule,\n MatButtonModule,\n MatIconModule,\n PdfJsViewerModule\n ],\n templateUrl: './pdf.component.html',\n styleUrl: './pdf.component.scss'\n})\nexport class PdfComponent implements RenderModule, OnChanges {\n @Input() data: RenderData | undefined\n @Input() node: Node | undefined\n @ViewChild('pdfViewer') viewerRef: PdfJsViewerComponent | undefined\n restrictedView: boolean = false\n fileData: Blob | undefined\n\n constructor(\n private assetControllerService: AssetControllerService,\n @Optional() @Inject(RENDERING_SERVICE_LIB_CONFIG) public configuration: RenderingServiceLibConfiguration,\n ) {}\n\n ngOnChanges(changes: SimpleChanges) {\n this.downloadFile()\n }\n\n private downloadFile() {\n if (this.data?.items === undefined || this.data.items[0].link === '') {\n return\n }\n const url = new URL(this.data.items[0].link)\n const assetParams = url.searchParams.get('assetParams')\n if (assetParams === null) {\n return\n }\n const params: GetAsset$Params = {\n assetParams: assetParams\n }\n this.assetControllerService.getAsset$Response(params)\n .subscribe(async (response) => {\n let responseData = response.body\n if (response.headers.get('content-type') === 'application/octet-stream') {\n this.restrictedView = true\n responseData = responseData.slice(0, responseData.size, 'application/pdf')\n }\n this.fileData = responseData\n }\n )\n }\n\n onDocumentLoad() {\n const iFrameDocument = this.viewerRef?.iframe.nativeElement.contentWindow.document\n // Always hide document properties button in right dropdown menu\n iFrameDocument.getElementById('documentProperties').style.display = 'none'\n iFrameDocument.querySelector('.horizontalToolbarSeparator.spreadModeButtons').style.display = 'none'\n if (this.restrictedView) {\n const iFrameWindow = this.viewerRef?.iframe.nativeElement.contentWindow\n // Disable printing in iframe\n iFrameWindow.print = () => {alert('Nice try!')}\n // Disable selection tool and remove the corresponding button from the right dropdown menu\n iFrameDocument.querySelector('.textLayer').style.display = 'none'\n iFrameDocument.getElementById('cursorSelectTool').style.display = 'none'\n // Disable context menu in iframe\n iFrameDocument.body.addEventListener('contextmenu', (event:MouseEvent) => {event.preventDefault();});\n // Disable printing via keyboard shortcuts\n ['keyup', 'keydown'].forEach(type => {\n iFrameDocument.addEventListener(type, (event:KeyboardEvent) => {\n if ((event.key === 's' && event.ctrlKey) || event.key === 'F12') {\n event.preventDefault();\n if (event.stopImmediatePropagation) {\n event.stopImmediatePropagation();\n } else {\n event.stopPropagation();\n }\n }\n })\n })\n }\n }\n}\n","<div class=\"pdf-wrapper\" [class.hide-all]=\"restrictedView\" *ngIf=\"fileData !== undefined\">\n <ng2-pdfjs-viewer\n #pdfViewer\n [pdfSrc]=\"fileData\"\n [print]=\"!restrictedView\"\n [download]=\"false\"\n [openFile]=\"false\"\n [viewBookmark]=\"false\"\n [viewerFolder]=\"configuration?.assetsUrl ? configuration.assetsUrl + '/pdfjs' : ''\"\n (onDocumentLoad)=\"onDocumentLoad()\"\n >\n </ng2-pdfjs-viewer>\n</div>\n","\nexport type FrontendModuleConfig = {\n module: string,\n urlModuleConfig: UrlModuleConfig | null\n}\n\nexport type UrlModuleConfig = {\n embedding: UrlEmbeddings,\n externalId: string\n}\n\nexport enum UrlEmbeddings {\n YOUTUBE,\n VIMEO,\n VIDEO,\n AUDIO,\n IMAGE,\n LTI13TOOL,\n H5P,\n PREZI,\n LEARNINGAPPS\n}\n","import {Component, Input, OnInit} from '@angular/core';\nimport {RenderingModule} from '../../rendering.module';\nimport {RenderModule} from '../RenderModule';\nimport {Node} from 'ngx-edu-sharing-api';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {YouTubePlayer} from '@angular/youtube-player';\nimport {DomSanitizer, SafeResourceUrl} from '@angular/platform-browser';\nimport {NgOptimizedImage} from '@angular/common';\nimport {RenderData} from '../../dto/RenderData';\nimport {UrlEmbeddings} from '../../dto/FrontendModuleConfig';\nimport {EduSharingUiModule} from 'ngx-edu-sharing-ui';\n\n@Component({\n selector: 'rs-module-url',\n standalone: true,\n imports: [\n RenderingModule,\n MatButtonModule,\n MatIconModule,\n YouTubePlayer,\n NgOptimizedImage,\n EduSharingUiModule,\n ],\n templateUrl: './url.component.html',\n styleUrl: './url.component.scss'\n})\nexport class UrlComponent implements RenderModule, OnInit {\n @Input() data: RenderData | undefined;\n @Input() node: Node | undefined;\n gdpr: any[] | undefined = undefined\n gdprOk: boolean = true\n embedding?: UrlEmbeddings\n externalId?: string\n sanitizedUrl: SafeResourceUrl | null = null\n url: string = ''\n\n constructor(private sanitizer: DomSanitizer) {\n }\n\n ngOnInit() {\n this.embedding = this.data?.frontendModuleConfig?.urlModuleConfig?.embedding\n this.externalId = this.data?.frontendModuleConfig?.urlModuleConfig?.externalId\n this.url = this.node?.properties?.['ccm:wwwurl']?.[0] || ''\n if (this.embedding === UrlEmbeddings.VIMEO) {\n this.sanitizedUrl = this.getVimeoUri()\n } else if (this.embedding === UrlEmbeddings.PREZI) {\n this.sanitizedUrl = this.getPreziUrl()\n } else if (this.embedding === UrlEmbeddings.LEARNINGAPPS) {\n this.sanitizedUrl = this.getLearningAppsUrl()\n }\n }\n\n isProtected(): boolean {\n return this.gdpr === undefined;\n }\n\n consentToGdprWarning() {\n this.gdprOk = true\n }\n\n getVimeoUri(): SafeResourceUrl {\n let url = '//player.vimeo.com/video/' + this.externalId\n return this.sanitizer.bypassSecurityTrustResourceUrl(url)\n }\n\n getPreziUrl(): SafeResourceUrl {\n const preziUrl = this.url.slice(-1) === '/' ? this.url.substring(0, this.url.length - 1) : this.url\n return this.sanitizer.bypassSecurityTrustResourceUrl(preziUrl)\n }\n\n getLearningAppsUrl(): SafeResourceUrl {\n const learningAppsUrl = this.url.replace('https://learningapps.org/', 'https://learningapps.org/view')\n return this.sanitizer.bypassSecurityTrustResourceUrl(learningAppsUrl)\n }\n\n protected readonly UrlEmbeddings = UrlEmbeddings;\n}\n","<div class=\"url-wrapper\">\n <div *ngIf=\"gdprOk\">\n <ng-container *ngIf=\"embedding === UrlEmbeddings.YOUTUBE && externalId !== ''\">\n <youtube-player\n [videoId]=\"externalId ?? ''\"\n [disableCookies]=\"true\"\n ></youtube-player>\n </ng-container>\n <ng-container *ngIf=\"embedding === UrlEmbeddings.VIMEO && externalId !== ''\">\n <iframe class=\"vimeoFrame\" [src]=\"sanitizedUrl\"></iframe>\n </ng-container>\n <ng-container *ngIf=\"embedding === UrlEmbeddings.AUDIO && url !== ''\" >\n <div class=\"audio-wrapper\">\n <video\n controls\n style=\"max-width: 100%\"\n [src]=\"url\"\n poster=\"assets/img/audio.svg\"\n >\n </video>\n </div>\n </ng-container>\n <ng-container *ngIf=\"embedding === UrlEmbeddings.IMAGE && url !== ''\">\n <div class=\"image-wrapper\">\n <img\n [ngSrc]=\"url\"\n [alt]=\"node?.title ?? 'Edu-Sharing image'\"\n [title]=\"node?.title ?? 'Edu-Sharing image'\"\n >\n </div>\n </ng-container>\n <ng-container *ngIf=\"embedding === UrlEmbeddings.VIDEO && url !== ''\">\n <div class=\"video-wrapper\">\n <video\n controls\n [src]=\"url\"\n >\n </video>\n </div>\n </ng-container>\n <ng-container *ngIf=\"(embedding === UrlEmbeddings.PREZI || embedding === UrlEmbeddings.LEARNINGAPPS) && url !== ''\">\n <iframe class=\"eduUrlFrame\" [src]=sanitizedUrl allowfullscreen=\"\" allow=\"autoplay; fullscreen\" ></iframe>\n </ng-container>\n\n </div>\n <div *ngIf=\"!gdprOk\">\n {{ 'RENDERING.GDPR.GDPR_DIALOG' | translate }}\n <button mat-button (click)=\"consentToGdprWarning()\">{{'RENDERING.GDPR.GDPR_CONTINUE' | translate}}</button>\n </div>\n</div>\n","import {Component, Input, OnInit} from '@angular/core';\nimport {RenderingModule} from '../../rendering.module';\nimport {RenderModule} from '../RenderModule';\nimport {Node} from 'ngx-edu-sharing-api';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {RenderData} from '../../dto/RenderData';\nimport {DomSanitizer, SafeResourceUrl} from '@angular/platform-browser';\n\n@Component({\n selector: 'rs-module-edu-html',\n standalone: true,\n imports: [\n RenderingModule,\n MatButtonModule,\n MatIconModule,\n ],\n templateUrl: './eduHtml.component.html',\n styleUrl: './eduHtml.component.scss'\n})\nexport class EduHtmlComponent implements RenderModule, OnInit {\n @Input() data: RenderData | undefined\n @Input() node: Node | undefined\n sanitizedUrl: SafeResourceUrl = new class implements SafeResourceUrl {\n }\n\n constructor(private sanitizer: DomSanitizer) {\n }\n\n ngOnInit() {\n if (this.data?.items !== undefined && this.data.items[0].link) {\n this.sanitizedUrl = this.getSafeUri()\n }\n }\n\n getSafeUri() {\n if (this.data?.items !== undefined && this.data.items[0].link) {\n const uri = new URL(this.data.items[0].link)\n /**\n if (uri.hostname.includes('nip.io')) {\n uri.hostname = 'localhost'\n }\n */\n return this.sanitizer.bypassSecurityTrustResourceUrl(uri.toString())\n }\n return new class implements SafeResourceUrl {\n }\n }\n}\n","<div class=\"eduHtml-wrapper\" *ngIf=\"data?.items !== undefined\">\n <iframe class=\"frame\" [src]=\"sanitizedUrl\"></iframe>\n</div>\n","import {NgModule} from '@angular/core';\n\n@NgModule({\n imports: []\n})\nexport class RenderingApiModule {}\n","import {Injectable} from '@angular/core';\nimport {ModuleInfoControllerService} from 'ngx-rendering-service-api';\nimport {firstValueFrom} from 'rxjs';\nimport {Node, RestConstants} from 'ngx-edu-sharing-api';\nimport {FrontendModuleConfig, UrlEmbeddings, UrlModuleConfig} from './lib/dto/FrontendModuleConfig';\n\n@Injectable({providedIn: 'root'})\nexport class ModuleInfoService {\n\n private availableMediaTypes: String[] = []\n private availableMimeTypes: String[] = []\n private availableMimeTypePrefixes: String[] = []\n private availableReplicationSources: String[] = []\n private availableResourceTypes: String[] = []\n private availableRemoteRepositories: String[] = []\n\n constructor(\n private service: ModuleInfoControllerService\n ) {}\n\n async isAvailableBackendObject(node: Node| undefined): Promise<boolean> {\n if (!this.isInitialized()) {\n const result = await firstValueFrom(this.service.getModulesInfo({repoId: node?.ref.repo ?? ''}))\n result.forEach(info => {\n if (info.typeMapping.type !== undefined && info.typeMapping.type !== null) {\n this.availableMediaTypes.push(info.typeMapping.type)\n } else if (info.typeMapping.remoteRepositoryType !== undefined && info.typeMapping.remoteRepositoryType !== null) {\n this.availableRemoteRepositories.push(info.typeMapping.remoteRepositoryType)\n } else if(info.typeMapping.resourceType !== undefined && info.typeMapping.resourceType !== null) {\n this.availableResourceTypes.push(info.typeMapping.resourceType)\n } else if(info.typeMapping.replicationSource !== undefined && info.typeMapping.replicationSource !== null) {\n this.availableReplicationSources.push(info.typeMapping.replicationSource)\n } else if (info.typeMapping.mimeTypeSuffix !== undefined\n && info.typeMapping.mimeTypeSuffix !== null\n && info.typeMapping.mimeTypePrefix !== undefined\n && info.typeMapping.mimeTypePrefix !== null\n ) {\n this.availableMimeTypes.push(`${info.typeMapping.mimeTypePrefix}/${info.typeMapping.mimeTypeSuffix}`)\n } else if (info.typeMapping.mimeTypePrefix !== undefined && info.typeMapping.mimeTypePrefix !== null) {\n this.availableMimeTypePrefixes.push(info.typeMapping.mimeTypePrefix)\n }\n })\n }\n const mimeTypePrefix = (node?.mimetype ?? '').split('/', 2)[0]\n return this.availableMediaTypes.includes(node?.mediatype ?? '') ||\n this.availableRemoteRepositories.includes(node?.remote?.repository?.repositoryType ?? '') ||\n this.availableReplicationSources.includes(node?.properties?.[RestConstants.CCM_PROP_REPLICATIONSOURCE]?.[0]?? '') ||\n this.availableResourceTypes.includes(node?.properties?.[RestConstants.CCM_PROP_CCRESSOURCETYPE]?.[0]?? '') ||\n this.availableMimeTypes.includes(node?.mimetype ?? '') ||\n this.availableMimeTypePrefixes.includes(mimeTypePrefix)\n }\n\n private isInitialized(): boolean {\n return this.availableMediaTypes.length\n + this.availableMimeTypes.length\n + this.availableMimeTypePrefixes.length\n + this.availableReplicationSources.length\n + this.availableResourceTypes.length\n + this.availableRemoteRepositories.length !== 0\n }\n\n getFrontendModuleSetting(node: Node): FrontendModuleConfig {\n const urlModuleConfig = this.checkUrlModule(node)\n if (urlModuleConfig !== null) {\n return urlModuleConfig\n }\n return {\n module: 'default',\n urlModuleConfig: null\n }\n }\n\n checkUrlModule(node: Node): FrontendModuleConfig | null {\n const url = node.properties?.['ccm:wwwurl']?.[0] || ''\n const checkLearningApps = (): UrlModuleConfig | null => {\n if (node.remote?.repository?.repositoryType?.toLowerCase() === 'learningapps') {\n return {\n embedding: UrlEmbeddings.LEARNINGAPPS,\n externalId: ''\n }\n }\n return null\n }\n /**\n * Function checkYouTube\n */\n const checkYouTube = (): UrlModuleConfig | null => {\n if (node.remote?.repository?.repositoryType?.toLowerCase() === 'youtube') {\n return {\n embedding: UrlEmbeddings.YOUTUBE,\n externalId: node.remote?.id ?? ''\n }\n }\n if (url.includes('youtu.be') ) {\n const split = url.split('/')\n return {\n embedding: UrlEmbeddings.YOUTUBE,\n externalId: split[split.length - 1]\n }\n }\n if (url.includes('.youtube.com/watch?')) {\n const urlObject = new URL(url)\n return {\n embedding: UrlEmbeddings.YOUTUBE,\n externalId: urlObject.searchParams.get('v') ?? ''\n }\n }\n return null\n }\n /**\n * Function checkVimeo\n */\n const checkVimeo = (): UrlModuleConfig | null => {\n if (url.includes('vimeo.com')) {\n const split = url.split('/')\n return {\n embedding: UrlEmbeddings.VIMEO,\n externalId: split[split.length - 1]\n }\n }\n return null\n }\n const checkGenericVideo = (): UrlModuleConfig | null => {\n if (url.length > 0 && ['mp4', 'webm'].includes(url.split('.').pop() ?? '')) {\n return {\n embedding: UrlEmbeddings.VIDEO,\n externalId: ''\n }\n }\n return null\n }\n /**\n * Function checkAudio\n */\n const checkAudio = (): UrlModuleConfig | null => {\n if (url.length > 0 && node.mimetype?.startsWith('audio')) {\n return {\n embedding: UrlEmbeddings.AUDIO,\n externalId: ''\n }\n }\n return null\n }\n /**\n * Function checkLti13ToolObject\n */\n const checkLti13ToolObject = (): UrlModuleConfig | null => {\n if (node.aspects?.includes('ccm:ltitool_node')) {\n return {\n embedding: UrlEmbeddings.LTI13TOOL,\n externalId: ''\n }\n }\n return null\n }\n /**\n * Function checkImage\n */\n const checkImage = (): UrlModuleConfig | null => {\n if (node.properties?.['ccm:remoterepositorytype']?.[0] === 'DDB') {\n return null\n }\n if (node.mediatype === 'file-image') {\n return {\n embedding: UrlEmbeddings.IMAGE,\n externalId: ''\n }\n }\n const mimeTypeSplit = node.mimetype?.split('/') ?? []\n if (mimeTypeSplit.length === 2 && ['png', 'jpg', 'jpeg', 'gif'].includes(mimeTypeSplit[1])) {\n return {\n embedding: UrlEmbeddings.IMAGE,\n externalId: ''\n }\n }\n return null\n }\n /**\n * Function detectH5P\n */\n const detectH5P = (): UrlModuleConfig | null => {\n if (url.length > 0 && url.includes('h5p.org/h5p/embed')) {\n return {\n embedding: UrlEmbeddings.H5P,\n externalId: ''\n }\n }\n return null\n }\n /**\n * Function detectPrezi\n */\n const detectPrezi = (): UrlModuleConfig | null => {\n if (url.length > 0 &&\n (url.includes('prezi.com/view/') || url.includes('prezi.com/embed/') || url.includes('prezi.com/p/embed'))\n ) {\n return {\n embedding: UrlEmbeddings.PREZI,\n externalId: ''\n }\n }\n return null\n }\n\n /**\n * embedding if applicable to node\n */\n const embedding =\n checkLearningApps()\n ?? checkYouTube()\n ?? checkVimeo()\n ?? checkGenericVideo()\n ?? checkAudio()\n ?? checkImage()\n ?? checkLti13ToolObject()\n ?? detectH5P()\n ?? detectPrezi()\n\n if (embedding !== null) {\n return {\n module: 'url',\n urlModuleConfig: embedding\n }\n }\n return null\n }\n}\n","import {Component, Inject, Input, OnChanges, OnInit, Optional, SimpleChanges} from '@angular/core';\nimport {RenderingModule} from './rendering.module';\nimport {\n JobInfoControllerService,\n JobInfoReply,\n RenderControllerWrapperService,\n RenderDataRequestWithToken,\n RenderDataResponse\n} from 'ngx-rendering-service-api';\nimport {BehaviorSubject, debounceTime, firstValueFrom, interval, Subject, switchMap, takeUntil} from 'rxjs';\nimport {ImageComponent} from './module/image/image.component';\nimport {RenderingApiModule} from './rendering-api.module';\nimport {VideoComponent} from './module/video/video.component';\nimport {MatProgressSpinnerModule} from '@angular/material/progress-spinner';\nimport {EduSharingApiModule, Node} from 'ngx-edu-sharing-api';\nimport {MatProgressBarModule} from '@angular/material/progress-bar';\nimport {AssetStateItem, RenderData} from './dto/RenderData';\nimport {PdfComponent} from './module/pdf/pdf.component';\nimport {UrlComponent} from './module/url/url.component';\nimport {EduHtmlComponent} from './module/eduhtml/eduHtml.component';\nimport {ModuleInfoService} from '../module-info.service';\nimport {filter} from 'rxjs/operators';\nimport {PlatformLocation} from '@angular/common';\nimport {DefaultComponent} from './module/default/default.component';\nimport {FrontendModuleConfig} from './dto/FrontendModuleConfig';\nimport {AudioComponent} from './module/audio/audio.component';\nimport {BinderComponent} from './module/binder/binder.component';\nimport {DdbComponent} from './module/ddb/ddb.component';\nimport {TranslateService} from '@ngx-translate/core';\nimport {EduSharingUiModule} from 'ngx-edu-sharing-ui';\nimport {ErrorComponent} from './module/error/error.component';\nimport {RENDERING_SERVICE_LIB_CONFIG, RenderingServiceLibConfiguration} from \"../rendering-service-lib-configuration\";\n\n@Component({\n selector: 'rs-root',\n standalone: true,\n imports: [\n RenderingApiModule,\n RenderingModule,\n ImageComponent,\n VideoComponent,\n MatProgressSpinnerModule,\n MatProgressBarModule,\n PdfComponent,\n UrlComponent,\n EduHtmlComponent,\n DefaultComponent,\n AudioComponent,\n BinderComponent,\n DdbComponent,\n EduSharingApiModule,\n EduSharingUiModule,\n ErrorComponent,\n ],\n providers: [\n TranslateService\n ],\n templateUrl: './render.component.html',\n styleUrl: './render.component.scss'\n})\nexport class RenderComponent implements OnChanges, OnInit {\n @Input() request: RenderDataRequestWithToken | undefined;\n @Input() node: Node | undefined;\n @Input() serviceWorkerUrl: string | undefined;\n serviceWorkerReady = false;\n loadData = new Subject<void>();\n renderData$ = new BehaviorSubject<RenderData | null>(null);\n finished = new Subject<void>();\n someButNotAllFinished = new Subject<Boolean>()\n progress$ = new BehaviorSubject<{ module: string, progress?: number } | null>(null);\n\n constructor(\n private renderControllerService: RenderControllerWrapperService,\n private jobInfoControllerService: JobInfoControllerService,\n private moduleInfoService: ModuleInfoService,\n private platformLocation: PlatformLocation,\n ) {\n this.loadData.pipe(\n filter(() => this.node !== undefined && this.serviceWorkerReady),\n debounceTime(10),\n switchMap(() => {\n // subscribe error handling\n return this.checkModule()\n })\n ).subscribe({\n next: async (frontendModule) => {\n // No further calls to rs2 necessary if we have a frontend only module\n if (frontendModule !== null) {\n const data: RenderData = {\n module: frontendModule.module,\n frontendModuleConfig: frontendModule\n }\n this.renderData$.next(data)\n this.finished.next()\n } else {\n try {\n const renderResponseData = await firstValueFrom(this.renderControllerService.getRenderDataToken(this.request!!))\n // Case 1: no job returned => no polling needed\n if (renderResponseData.jobId === null) {\n this.handleRenderingResponseWithoutJob(renderResponseData)\n } else {\n this.progress$.next({module: renderResponseData.module ?? ''});\n interval(500).pipe(\n takeUntil(this.finished),\n switchMap(() => this.jobInfoControllerService.getJobInfo({jobId: renderResponseData.jobId!!}).pipe()),\n ).subscribe({\n next: async (jobInfo) => {\n // Some, but not all, jobs are in a final status (this means some are still QUEUED or PROCESSING)\n if (jobInfo.jobs.some(j => j.status === 'FINISHED') && jobInfo.status !== 'FINISHED') {\n this.handleJobInfoWithSubJobsInProgress(renderResponseData, jobInfo)\n // main job finished or partially failed\n } else if (jobInfo.status === 'FINISHED' || jobInfo.status === 'PARTIALLY_FAILED') {\n this.handleFinishedOrPartialJobInfo(renderResponseData, jobInfo)\n // Main job failed => no module but error page\n } else if (jobInfo.status === 'FAILED') {\n this.handleFailedMainJob(jobInfo)\n } else {\n // no finished jobs -> show either one progress bar with race leader (progress 0-100)\n // or queue position (progress (-inf,-1])\n this.handleMainJobWithNoSubJobInFinalStatus(jobInfo)\n }\n },\n error: error => {\n this.handleApiError(error)\n }});\n }\n } catch (error) {\n this.handleApiError(error)\n }\n }\n },\n error: (error) => {\n this.handleApiError(error)\n }\n });\n }\n\n handleApiError(error: any) {\n const publicMessage = error.error.userMessage ?? 'GENERIC_ERROR_MESSAGE'\n const data: RenderData = {\n module: 'ERROR',\n publicErrorMessage: publicMessage\n }\n this.renderData$.next(data)\n this.finished.next()\n }\n\n async ngOnInit() {\n // await firstValueFrom(this.translationsService.initialize())\n if ('serviceWorker' in navigator) {\n const reg = await navigator.serviceWorker.getRegistrations();\n await Promise.all(reg?.map((r: ServiceWorkerRegistration) => r.unregister()));\n const serviceWorkerUrl = this.serviceWorkerUrl ?? (this.platformLocation.getBaseHrefFromDOM() + 'edu-service-worker.js');\n const scope = this.serviceWorkerUrl ? '/' : this.platformLocation.getBaseHrefFromDOM();\n const registration = await navigator.serviceWorker.register(serviceWorkerUrl, {\n scope: scope\n });\n if (registration.waiting) {\n registration.waiting.postMessage({type: 'SKIP_WAITING'});\n }\n this.serviceWorkerReady = true;\n this.loadData.next();\n registration.onupdatefound = () => {\n const newWorker = registration.installing;\n if (newWorker) {\n newWorker.onstatechange = () => {\n if (newWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n newWorker.postMessage({type: 'SKIP_WAITING'});\n }\n }\n };\n }\n };\n navigator.serviceWorker.addEventListener('controllerchange', () => {\n console.info('Service Worker controlling this page.');\n });\n } else {\n console.warn('Service worker API not available');\n }\n }\n\n async ngOnChanges(_: SimpleChanges) {\n this.loadData.next();\n }\n\n async checkModule(): Promise<FrontendModuleConfig | null> {\n if (!await this.moduleInfoService.isAvailableBackendObject(this.node)) {\n if (this.node !== undefined) {\n return this.moduleInfoService.getFrontendModuleSetting(this.node)\n }\n return {module: 'default', urlModuleConfig: null}\n } else {\n return null\n }\n }\n\n handleRenderingResponseWithoutJob(renderDataResponse: RenderDataResponse) {\n const items = renderDataResponse.objectLinks?.map(item => {\n const assetItem: AssetStateItem = {\n link: item.link,\n progress: 100,\n height: item.height,\n width: item.width,\n additionalData: undefined,\n status: 'FINISHED'\n }\n return assetItem\n })\n const data: RenderData = {\n module: renderDataResponse.module ?? '',\n items: items\n }\n renderDataResponse.objectLinks !== undefined && this.renderData$.next(data);\n this.finished.next();\n }\n\n handleJobInfoWithSubJobsInProgress(renderDataResponse: RenderDataResponse, jobInfo: JobInfoReply) {\n const items = jobInfo.jobs.map(subJob => {\n const assetItem: AssetStateItem = {\n link: subJob.objectLink?.link ?? '',\n progress: subJob.status !== 'QUEUED' ? subJob.progress : -(subJob.progress + 1),\n height: subJob.objectLink?.height ?? subJob.quality,\n width: subJob.objectLink?.width ?? 0,\n additionalData: subJob.additionalData,\n status: subJob.status,\n }\n return assetItem\n })\n const data: RenderData = {\n module: renderDataResponse.module ?? '',\n items: items\n }\n this.renderData$.next(data)\n this.someButNotAllFinished.next(true)\n }\n\n handleFinishedOrPartialJobInfo(renderDataResponse: RenderDataResponse, jobInfo: JobInfoReply) {\n const items = jobInfo.jobs.map(subJob => {\n const assetItem: AssetStateItem = {\n link: subJob.objectLink?.link ?? '',\n progress: subJob.progress,\n height: subJob.objectLink?.height ?? subJob.quality,\n width: subJob.objectLink?.width ?? 0,\n additionalData: subJob.additionalData,\n publicErrorMessage: subJob.error?.userMessage,\n status:subJob.status,\n }\n return assetItem\n })\n const data: RenderData = {\n module: renderDataResponse.module ?? '',\n items: items\n }\n this.renderData$.next(data)\n this.finished.next()\n }\n\n handleFailedMainJob(jobInfo: JobInfoReply) {\n const data: RenderData = {\n module: 'ERROR',\n publicErrorMessage: jobInfo.errorMessage?.userMessage ?? 'GENERIC_ERROR_MESSAGE'\n }\n this.renderData$.next(data)\n this.finished.next()\n }\n\n handleMainJobWithNoSubJobInFinalStatus(jobInfo: JobInfoReply) {\n let progress = 0\n if (jobInfo.jobs.some(j => j.status === 'PROCESSING')) {\n progress = Math.max(...jobInfo.jobs.map(j => j.progress))\n } else if (jobInfo.jobs.some(j => j.status === 'QUEUED')) {\n progress = -(Math.min(...jobInfo.jobs.map(j => j.progress + 1)))\n }\n this.progress$.next({\n module: jobInfo.module ?? '',\n progress: progress\n });\n }\n}\n","<div class=\"module module-{{(renderData$ | async)?.module}}\">\n <ng-container *ngIf=\"renderData$ | async as data\">\n @defer (when data?.module === 'IMAGE'){\n <rs-module-image [data]=\"data\" [node]=\"node\"></rs-module-image>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'VIDEO'){\n <rs-module-video [data]=\"data\" [node]=\"node\"></rs-module-video>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'PDF' || data?.module === 'DOCUMENT') {\n <rs-module-pdf [data]=\"data\" [node]=\"node\"></rs-module-pdf>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'EDUHTML' || data?.module === 'H5P' || data?.module === 'JUPYTER' || data.module === 'SPREADSHEET') {\n <rs-module-edu-html [data]=\"data\" [node]=\"node\"></rs-module-edu-html>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'AUDIO'){\n <rs-module-audio [data]=\"data\" [node]=\"node\"></rs-module-audio>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'BINDER'){\n <rs-module-binder [data]=\"data\" [node]=\"node\"></rs-module-binder>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'DDB'){\n <rs-module-ddb [data]=\"data\" [node]=\"node\"></rs-module-ddb>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n <ng-container *ngIf=\"data.module === 'default'\">\n @defer (when data.module === 'default') {\n <rs-module-default [node]=\"node\"></rs-module-default>\n }\n </ng-container>\n <ng-container *ngIf=\"data.module === 'url'\">\n @defer (when data.module === 'url') {\n <rs-module-url [node]=\"node\" [data]=\"data\"></rs-module-url>\n }\n </ng-container>\n <ng-container *ngIf=\"data.module === 'ERROR'\">\n @defer (when data.module === 'ERROR') {\n <rs-module-error [node]=\"node\" [data]=\"data\"></rs-module-error>\n }\n </ng-container>\n </ng-container>\n\n <div class=\"progress\" *ngIf=\"(renderData$ | async) === null;\">\n <ng-container *ngIf=\"progress$ | async as progress\">\n <ng-container [ngSwitch]=\"['VIDEO', 'AUDIO'].includes(progress.module) ? 'bar' : 'spinner'\">\n <ng-container *ngSwitchCase=\"'bar'\">\n <div *ngIf=\"(progress.progress ?? 0) < 0\">Queue position: {{-(progress.progress ?? 0)}}</div>\n <mat-progress-bar [value]=\"(progress.progress ?? 0)\" *ngIf=\"(progress.progress ?? 0) >= 0\"></mat-progress-bar>\n </ng-container>\n <ng-container *ngSwitchCase=\"'spinner'\">\n <div *ngIf=\"(progress.progress ?? 0) < 0\">Queue position: {{-(progress.progress ?? 0)}</div>\n <mat-spinner [diameter]=\"50\" *ngIf=\"(progress.progress ?? 0) >= 0\"></mat-spinner>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n</div>\n\n<ng-template #loading>\n <div class=\"progress\">\n <mat-spinner></mat-spinner>\n </div>\n</ng-template>\n","import {ModuleWithProviders, NgModule} from '@angular/core';\nimport {RenderComponent} from './lib/render.component';\nimport {CommonModule} from '@angular/common';\nimport {EduSharingUiConfigurationParams} from \"ngx-edu-sharing-ui/lib/edu-sharing-ui-configuration\";\nimport {getConfigProvider, RenderingServiceLibConfigurationParams} from \"./rendering-service-lib-configuration\";\n\n@NgModule({\n declarations: [],\n imports: [\n RenderComponent,\n CommonModule,\n ],\n exports: [\n CommonModule,\n RenderComponent,\n ],\n})\nexport class RenderingServiceLibModule {\n public static forRoot(\n params: RenderingServiceLibConfigurationParams\n): ModuleWithProviders<RenderingServiceLibModule> {\n return {\n ngModule: RenderingServiceLibModule,\n providers: [getConfigProvider(params)]\n };\n }\n}\n","/*\n * Public API Surface of edu-sharing-ui\n */\n\nexport * from './lib/rendering.module';\nexport * from './lib/module/image/image.component';\nexport * from './lib/module/video/video.component';\nexport * from './lib/module/pdf/pdf.component';\nexport * from './lib/module/url/url.component';\nexport * from './lib/module/eduhtml/eduHtml.component';\nexport * from './lib/render.component';\nexport * from './lib/asset-link.pipe';\nexport * from './rendering-service-lib.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2.AssetLinkPipe","i3","i2","i4","i2.ModuleInfoService"],"mappings":"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"}
1
+ {"version":3,"file":"ngx-rendering-service-lib.mjs","sources":["../../src/lib/asset-link.pipe.ts","../../src/lib/rendering.module.ts","../../src/lib/module/image/image.component.ts","../../src/lib/module/image/image.component.html","../../src/lib/module/video/video.component.ts","../../src/lib/module/video/video.component.html","../../src/rendering-service-lib-configuration.ts","../../src/lib/module/pdf/pdf.component.ts","../../src/lib/module/pdf/pdf.component.html","../../src/lib/dto/FrontendModuleConfig.ts","../../src/lib/module/url/url.component.ts","../../src/lib/module/url/url.component.html","../../src/lib/module/eduhtml/eduHtml.component.ts","../../src/lib/module/eduhtml/eduHtml.component.html","../../src/lib/rendering-api.module.ts","../../src/module-info.service.ts","../../src/lib/render.component.ts","../../src/lib/render.component.html","../../src/rendering-service-lib.module.ts","../../src/index.ts","../../src/ngx-rendering-service-lib.ts"],"sourcesContent":["import {Injector, Pipe, PipeTransform} from '@angular/core';\nimport {RSApiConfiguration} from 'ngx-rendering-service-api';\n\n/**\n * this pipe transforms any reported asset data uri from the rendering to the uri that is currently configured for the backend\n * this is required in case the rendering service is behind a proxy, i.e. in dev mode\n */\n@Pipe({ name: 'rsAssetLink' })\nexport class AssetLinkPipe implements PipeTransform {\n constructor(\n private injector: Injector,\n ) {\n }\n\n transform(value: string | undefined) {\n if(value) {\n const str = value.split('/public');\n str[0] = this.injector.get(RSApiConfiguration).rootUrl;\n return str.join('/public');\n }\n return value;\n }\n\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {AssetLinkPipe} from './asset-link.pipe';\n\n@NgModule({\n imports: [\n CommonModule,\n ],\n declarations: [\n AssetLinkPipe,\n ],\n exports: [\n CommonModule,\n AssetLinkPipe,\n ]\n})\nexport class RenderingModule {}\n","import {AfterViewInit, Component, ElementRef, HostListener, Input, signal} from '@angular/core';\nimport {RenderingModule} from '../../rendering.module';\nimport {RenderModule} from '../RenderModule';\nimport {Node} from 'ngx-edu-sharing-api';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {RenderData, AssetStateItem} from '../../dto/RenderData';\n\n@Component({\n selector: 'rs-module-image',\n standalone: true,\n imports: [\n RenderingModule,\n MatButtonModule,\n MatIconModule,\n ],\n templateUrl: './image.component.html',\n styleUrl: './image.component.scss'\n})\nexport class ImageComponent implements RenderModule, AfterViewInit {\n @Input() data: RenderData | undefined;\n @Input() node: Node | undefined;\n activeObject = signal<AssetStateItem | undefined>(undefined);\n constructor(public element: ElementRef) { }\n ngAfterViewInit(): void {\n this.loadOptimalSize();\n }\n\n @HostListener('document:fullscreenchange')\n private loadOptimalSize() {\n const size = this.element.nativeElement.getBoundingClientRect();\n const allFinishedItems = this.data?.items?.filter(item => item.link !== '')\n const matchingItem = allFinishedItems?.sort((a, b) => {\n // sort by the image size closest to the viewport\n return Math.abs(a.width - size.width) > Math.abs(b.width - size.width) ? 1 : -1;\n })[0]\n this.activeObject.set(matchingItem);\n }\n\n toggleFullscreen() {\n if(document.fullscreenElement) {\n void document.exitFullscreen();\n } else {\n this.element.nativeElement.requestFullscreen();\n }\n }\n}\n","<div class=\"image-wrapper\"\n *ngIf=\"activeObject()\"\n>\n <img\n #image\n [src]=\"activeObject()?.link | rsAssetLink\"\n [alt]=\"node?.title || node?.name || ''\"\n >\n <button mat-icon-button (click)=\"toggleFullscreen()\"><mat-icon>fullscreen</mat-icon></button>\n</div>\n","import {AfterViewInit, Component, ElementRef, Input, signal, ViewChild} from '@angular/core';\nimport {RenderingModule} from '../../rendering.module';\nimport {RenderModule} from '../RenderModule';\nimport {Node} from 'ngx-edu-sharing-api';\nimport {MatIcon} from '@angular/material/icon';\nimport {MatIconButton} from '@angular/material/button';\nimport {FormsModule} from '@angular/forms';\nimport {RenderData, AssetStateItem} from '../../dto/RenderData';\nimport {MatMenu, MatMenuItem, MatMenuTrigger} from '@angular/material/menu';\nimport {EduSharingUiModule} from 'ngx-edu-sharing-ui';\n\n@Component({\n selector: 'rs-module-video',\n standalone: true,\n imports: [\n RenderingModule,\n MatIcon,\n MatIconButton,\n FormsModule,\n MatMenu,\n MatMenuTrigger,\n MatMenuItem,\n EduSharingUiModule\n ],\n templateUrl: './video.component.html',\n styleUrl: './video.component.scss'\n})\nexport class VideoComponent implements RenderModule, AfterViewInit{\n @Input() data: RenderData | undefined;\n @Input() node: Node | undefined;\n @ViewChild('video') videoRef: ElementRef<HTMLVideoElement> | undefined\n activeObject = signal<AssetStateItem | undefined>(undefined);\n hasMultipleResolutions: Boolean = true\n\n ngAfterViewInit(): void {\n this.hasMultipleResolutions = (this.data?.items?.length ?? 1) > 1\n const downlink: number = (navigator as any).connection?.downlink;\n let optimalResolution = 720;\n if(downlink < 2) {\n optimalResolution = 240;\n }\n if(downlink > 6) {\n optimalResolution = 1080;\n }\n const allFinishedItems = this.data?.items?.filter(item => item.link !== '')\n this.activeObject.set(allFinishedItems?.sort((a, b) => {\n // sort by the image size closest to the viewport\n return Math.abs(a.width - optimalResolution) > Math.abs(b.width - optimalResolution) ? 1 : -1;\n })[0]);\n }\n\n switchResolution(item: AssetStateItem) {\n this.activeObject.set(item)\n const currentTime = this.videoRef?.nativeElement.currentTime\n this.videoRef?.nativeElement.load()\n if (currentTime !== undefined) {\n this.videoRef!.nativeElement.currentTime = currentTime\n }\n }\n\n protected readonly JSON = JSON;\n}\n","<div class=\"video-wrapper\" *ngIf=\"activeObject()\">\n <video\n controls\n #video\n >\n <source [src]=\"activeObject()?.link | rsAssetLink\" />\n </video>\n <button *ngIf=\"hasMultipleResolutions\"\n mat-icon-button\n [matMenuTriggerFor]=\"resolutionMenu\"\n >\n <mat-icon>settings</mat-icon>\n </button>\n <mat-menu\n #resolutionMenu=\"matMenu\"\n xPosition=\"before\"\n >\n <button\n mat-menu-item\n *ngFor=\"let item of data?.items\"\n [disabled]=\"item.link === ''\"\n (click)=\"item.height !== activeObject()?.height && switchResolution(item)\"\n >\n <ng-container\n [ngTemplateOutlet]=\"item.link !== '' ? ready : loading\"\n [ngTemplateOutletContext]=\"{item:item}\"\n >\n </ng-container>\n </button>\n\n </mat-menu>\n</div>\n\n<ng-template #ready let-item='item'>\n <div style=\"display: flex; justify-content: space-between\">\n <mat-icon *ngIf=\"item.height === activeObject()?.height\">\n done\n </mat-icon>\n <div *ngIf=\"item.height !== activeObject()?.height\"></div>\n <div>\n {{item.height}}p\n </div>\n </div>\n</ng-template>\n\n<ng-template #loading let-item='item'>\n <div style=\"display: flex; justify-content: space-between\">\n <div>\n <ng-container *ngIf=\"item.status === 'PROCESSING'; else queue\">\n {{ 'RENDERING.CONVERTING' | translate }}: {{ item.progress }}%\n </ng-container>\n <ng-template #queue>\n {{ 'RENDERING.QUEUED' | translate }}: {{ item.progress }}\n </ng-template>\n </div>\n <div style=\"padding-left: .5em\">\n {{item.height}}p\n </div>\n </div>\n</ng-template>\n","import {Injectable, InjectionToken, Provider} from '@angular/core';\n\nexport const RENDERING_SERVICE_LIB_CONFIG = new InjectionToken<RenderingServiceLibConfiguration>(\n 'RENDERING_SERVICE_LIB_CONFIG',\n);\n@Injectable({\n providedIn: 'root',\n})\nexport class RenderingServiceLibConfiguration {\n /**\n * the assets url\n * this is important for modules that require to fetch external javascript, i.e. ng2-pdfjs-viewer\n */\n assetsUrl: string | null = null;\n static create(params: RenderingServiceLibConfigurationParams = {}): RenderingServiceLibConfiguration {\n return { ...new RenderingServiceLibConfiguration(), ...params };\n }\n}\n\nexport type RenderingServiceLibConfigurationParams = Partial<RenderingServiceLibConfiguration>;\n\nexport function getConfigProvider(params?: RenderingServiceLibConfigurationParams): Provider[] {\n return [\n // Provide the params given to `forRoot()`. These can be overridden by the application by\n // providing `EDU_SHARING_API_CONFIG` itself.\n {\n provide: RENDERING_SERVICE_LIB_CONFIG,\n useValue: params,\n }\n ];\n}\n","import {Component, Inject, Input, OnChanges, Optional, SimpleChanges, ViewChild} from '@angular/core';\nimport {RenderingModule} from '../../rendering.module';\nimport {RenderModule} from '../RenderModule';\nimport {Node} from 'ngx-edu-sharing-api';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {RenderData} from '../../dto/RenderData';\nimport {PdfJsViewerComponent, PdfJsViewerModule} from 'ng2-pdfjs-viewer';\nimport {AssetControllerService, GetAsset$Params} from 'ngx-rendering-service-api';\nimport {\n RENDERING_SERVICE_LIB_CONFIG,\n RenderingServiceLibConfiguration\n} from \"../../../rendering-service-lib-configuration\";\n\n\n@Component({\n selector: 'rs-module-pdf',\n standalone: true,\n imports: [\n RenderingModule,\n MatButtonModule,\n MatIconModule,\n PdfJsViewerModule\n ],\n templateUrl: './pdf.component.html',\n styleUrl: './pdf.component.scss'\n})\nexport class PdfComponent implements RenderModule, OnChanges {\n @Input() data: RenderData | undefined\n @Input() node: Node | undefined\n @ViewChild('pdfViewer') viewerRef: PdfJsViewerComponent | undefined\n restrictedView: boolean = false\n fileData: Blob | undefined\n\n constructor(\n private assetControllerService: AssetControllerService,\n @Optional() @Inject(RENDERING_SERVICE_LIB_CONFIG) public configuration: RenderingServiceLibConfiguration,\n ) {}\n\n ngOnChanges(changes: SimpleChanges) {\n this.downloadFile()\n }\n\n private downloadFile() {\n if (this.data?.items === undefined || this.data.items[0].link === '') {\n return\n }\n const url = new URL(this.data.items[0].link)\n const assetParams = url.searchParams.get('assetParams')\n if (assetParams === null) {\n return\n }\n const params: GetAsset$Params = {\n assetParams: assetParams\n }\n this.assetControllerService.getAsset$Response(params)\n .subscribe(async (response) => {\n let responseData = response.body\n if (response.headers.get('content-type') === 'application/octet-stream') {\n this.restrictedView = true\n responseData = responseData.slice(0, responseData.size, 'application/pdf')\n }\n this.fileData = responseData\n }\n )\n }\n\n onDocumentLoad() {\n const iFrameDocument = this.viewerRef?.iframe.nativeElement.contentWindow.document\n // Always hide document properties button in right dropdown menu\n iFrameDocument.getElementById('documentProperties').style.display = 'none'\n iFrameDocument.querySelector('.horizontalToolbarSeparator.spreadModeButtons').style.display = 'none'\n if (this.restrictedView) {\n const iFrameWindow = this.viewerRef?.iframe.nativeElement.contentWindow\n // Disable printing in iframe\n iFrameWindow.print = () => {alert('Nice try!')}\n // Disable selection tool and remove the corresponding button from the right dropdown menu\n iFrameDocument.querySelector('.textLayer').style.display = 'none'\n iFrameDocument.getElementById('cursorSelectTool').style.display = 'none'\n // Disable context menu in iframe\n iFrameDocument.body.addEventListener('contextmenu', (event:MouseEvent) => {event.preventDefault();});\n // Disable printing via keyboard shortcuts\n ['keyup', 'keydown'].forEach(type => {\n iFrameDocument.addEventListener(type, (event:KeyboardEvent) => {\n if ((event.key === 's' && event.ctrlKey) || event.key === 'F12') {\n event.preventDefault();\n if (event.stopImmediatePropagation) {\n event.stopImmediatePropagation();\n } else {\n event.stopPropagation();\n }\n }\n })\n })\n }\n }\n}\n","<div class=\"pdf-wrapper\" [class.hide-all]=\"restrictedView\" *ngIf=\"fileData !== undefined\">\n <ng2-pdfjs-viewer\n #pdfViewer\n [pdfSrc]=\"fileData\"\n [print]=\"!restrictedView\"\n [download]=\"false\"\n [openFile]=\"false\"\n [viewBookmark]=\"false\"\n [viewerFolder]=\"configuration?.assetsUrl ? configuration.assetsUrl + '/pdfjs' : ''\"\n (onDocumentLoad)=\"onDocumentLoad()\"\n >\n </ng2-pdfjs-viewer>\n</div>\n","\nexport type FrontendModuleConfig = {\n module: string,\n urlModuleConfig: UrlModuleConfig | null\n}\n\nexport type UrlModuleConfig = {\n embedding: UrlEmbeddings,\n externalId: string\n}\n\nexport enum UrlEmbeddings {\n YOUTUBE,\n VIMEO,\n VIDEO,\n AUDIO,\n IMAGE,\n LTI13TOOL,\n H5P,\n PREZI,\n LEARNINGAPPS\n}\n","import {Component, Input, OnInit} from '@angular/core';\nimport {RenderingModule} from '../../rendering.module';\nimport {RenderModule} from '../RenderModule';\nimport {Node} from 'ngx-edu-sharing-api';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {YouTubePlayer} from '@angular/youtube-player';\nimport {DomSanitizer, SafeResourceUrl} from '@angular/platform-browser';\nimport {NgOptimizedImage} from '@angular/common';\nimport {RenderData} from '../../dto/RenderData';\nimport {UrlEmbeddings} from '../../dto/FrontendModuleConfig';\nimport {EduSharingUiModule} from 'ngx-edu-sharing-ui';\n\n@Component({\n selector: 'rs-module-url',\n standalone: true,\n imports: [\n RenderingModule,\n MatButtonModule,\n MatIconModule,\n YouTubePlayer,\n NgOptimizedImage,\n EduSharingUiModule,\n ],\n templateUrl: './url.component.html',\n styleUrl: './url.component.scss'\n})\nexport class UrlComponent implements RenderModule, OnInit {\n @Input() data: RenderData | undefined;\n @Input() node: Node | undefined;\n gdpr: any[] | undefined = undefined\n gdprOk: boolean = true\n embedding?: UrlEmbeddings\n externalId?: string\n sanitizedUrl: SafeResourceUrl | null = null\n url: string = ''\n\n constructor(private sanitizer: DomSanitizer) {\n }\n\n ngOnInit() {\n this.embedding = this.data?.frontendModuleConfig?.urlModuleConfig?.embedding\n this.externalId = this.data?.frontendModuleConfig?.urlModuleConfig?.externalId\n this.url = this.node?.properties?.['ccm:wwwurl']?.[0] || ''\n if (this.embedding === UrlEmbeddings.VIMEO) {\n this.sanitizedUrl = this.getVimeoUri()\n } else if (this.embedding === UrlEmbeddings.PREZI) {\n this.sanitizedUrl = this.getPreziUrl()\n } else if (this.embedding === UrlEmbeddings.LEARNINGAPPS) {\n this.sanitizedUrl = this.getLearningAppsUrl()\n }\n }\n\n isProtected(): boolean {\n return this.gdpr === undefined;\n }\n\n consentToGdprWarning() {\n this.gdprOk = true\n }\n\n getVimeoUri(): SafeResourceUrl {\n let url = '//player.vimeo.com/video/' + this.externalId\n return this.sanitizer.bypassSecurityTrustResourceUrl(url)\n }\n\n getPreziUrl(): SafeResourceUrl {\n const preziUrl = this.url.slice(-1) === '/' ? this.url.substring(0, this.url.length - 1) : this.url\n return this.sanitizer.bypassSecurityTrustResourceUrl(preziUrl)\n }\n\n getLearningAppsUrl(): SafeResourceUrl {\n const learningAppsUrl = this.url.replace('https://learningapps.org/', 'https://learningapps.org/view')\n return this.sanitizer.bypassSecurityTrustResourceUrl(learningAppsUrl)\n }\n\n protected readonly UrlEmbeddings = UrlEmbeddings;\n}\n","<div class=\"url-wrapper\">\n <div *ngIf=\"gdprOk\">\n <ng-container *ngIf=\"embedding === UrlEmbeddings.YOUTUBE && externalId !== ''\">\n <youtube-player\n [videoId]=\"externalId ?? ''\"\n [disableCookies]=\"true\"\n ></youtube-player>\n </ng-container>\n <ng-container *ngIf=\"embedding === UrlEmbeddings.VIMEO && externalId !== ''\">\n <iframe class=\"vimeoFrame\" [src]=\"sanitizedUrl\"></iframe>\n </ng-container>\n <ng-container *ngIf=\"embedding === UrlEmbeddings.AUDIO && url !== ''\" >\n <div class=\"audio-wrapper\">\n <video\n controls\n style=\"max-width: 100%\"\n [src]=\"url\"\n poster=\"assets/img/audio.svg\"\n >\n </video>\n </div>\n </ng-container>\n <ng-container *ngIf=\"embedding === UrlEmbeddings.IMAGE && url !== ''\">\n <div class=\"image-wrapper\">\n <img\n [ngSrc]=\"url\"\n [alt]=\"node?.title ?? 'Edu-Sharing image'\"\n [title]=\"node?.title ?? 'Edu-Sharing image'\"\n >\n </div>\n </ng-container>\n <ng-container *ngIf=\"embedding === UrlEmbeddings.VIDEO && url !== ''\">\n <div class=\"video-wrapper\">\n <video\n controls\n [src]=\"url\"\n >\n </video>\n </div>\n </ng-container>\n <ng-container *ngIf=\"(embedding === UrlEmbeddings.PREZI || embedding === UrlEmbeddings.LEARNINGAPPS) && url !== ''\">\n <iframe class=\"eduUrlFrame\" [src]=sanitizedUrl allowfullscreen=\"\" allow=\"autoplay; fullscreen\" ></iframe>\n </ng-container>\n\n </div>\n <div *ngIf=\"!gdprOk\">\n {{ 'RENDERING.GDPR.GDPR_DIALOG' | translate }}\n <button mat-button (click)=\"consentToGdprWarning()\">{{'RENDERING.GDPR.GDPR_CONTINUE' | translate}}</button>\n </div>\n</div>\n","import {Component, Input, OnInit} from '@angular/core';\nimport {RenderingModule} from '../../rendering.module';\nimport {RenderModule} from '../RenderModule';\nimport {Node} from 'ngx-edu-sharing-api';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {RenderData} from '../../dto/RenderData';\nimport {DomSanitizer, SafeResourceUrl} from '@angular/platform-browser';\n\n@Component({\n selector: 'rs-module-edu-html',\n standalone: true,\n imports: [\n RenderingModule,\n MatButtonModule,\n MatIconModule,\n ],\n templateUrl: './eduHtml.component.html',\n styleUrl: './eduHtml.component.scss'\n})\nexport class EduHtmlComponent implements RenderModule, OnInit {\n @Input() data: RenderData | undefined\n @Input() node: Node | undefined\n sanitizedUrl: SafeResourceUrl = new class implements SafeResourceUrl {\n }\n\n constructor(private sanitizer: DomSanitizer) {\n }\n\n ngOnInit() {\n if (this.data?.items !== undefined && this.data.items[0].link) {\n this.sanitizedUrl = this.getSafeUri()\n }\n }\n\n getSafeUri() {\n if (this.data?.items !== undefined && this.data.items[0].link) {\n const uri = new URL(this.data.items[0].link)\n /**\n if (uri.hostname.includes('nip.io')) {\n uri.hostname = 'localhost'\n }\n */\n return this.sanitizer.bypassSecurityTrustResourceUrl(uri.toString())\n }\n return new class implements SafeResourceUrl {\n }\n }\n}\n","<div class=\"eduHtml-wrapper\" *ngIf=\"data?.items !== undefined\">\n <iframe class=\"frame\" [src]=\"sanitizedUrl\"></iframe>\n</div>\n","import {NgModule} from '@angular/core';\n\n@NgModule({\n imports: []\n})\nexport class RenderingApiModule {}\n","import {Injectable} from '@angular/core';\nimport {ModuleInfoControllerService} from 'ngx-rendering-service-api';\nimport {firstValueFrom} from 'rxjs';\nimport {Node, RestConstants} from 'ngx-edu-sharing-api';\nimport {FrontendModuleConfig, UrlEmbeddings, UrlModuleConfig} from './lib/dto/FrontendModuleConfig';\n\n@Injectable({providedIn: 'root'})\nexport class ModuleInfoService {\n\n private availableMediaTypes: String[] = []\n private availableMimeTypes: String[] = []\n private availableMimeTypePrefixes: String[] = []\n private availableReplicationSources: String[] = []\n private availableResourceTypes: String[] = []\n private availableRemoteRepositories: String[] = []\n\n constructor(\n private service: ModuleInfoControllerService\n ) {}\n\n async isAvailableBackendObject(node: Node| undefined): Promise<boolean> {\n if (!this.isInitialized()) {\n const result = await firstValueFrom(this.service.getModulesInfo({repoId: node?.ref.repo ?? ''}))\n result.forEach(info => {\n if (info.typeMapping.type !== undefined && info.typeMapping.type !== null) {\n this.availableMediaTypes.push(info.typeMapping.type)\n } else if (info.typeMapping.remoteRepositoryType !== undefined && info.typeMapping.remoteRepositoryType !== null) {\n this.availableRemoteRepositories.push(info.typeMapping.remoteRepositoryType)\n } else if(info.typeMapping.resourceType !== undefined && info.typeMapping.resourceType !== null) {\n this.availableResourceTypes.push(info.typeMapping.resourceType)\n } else if(info.typeMapping.replicationSource !== undefined && info.typeMapping.replicationSource !== null) {\n this.availableReplicationSources.push(info.typeMapping.replicationSource)\n } else if (info.typeMapping.mimeTypeSuffix !== undefined\n && info.typeMapping.mimeTypeSuffix !== null\n && info.typeMapping.mimeTypePrefix !== undefined\n && info.typeMapping.mimeTypePrefix !== null\n ) {\n this.availableMimeTypes.push(`${info.typeMapping.mimeTypePrefix}/${info.typeMapping.mimeTypeSuffix}`)\n } else if (info.typeMapping.mimeTypePrefix !== undefined && info.typeMapping.mimeTypePrefix !== null) {\n this.availableMimeTypePrefixes.push(info.typeMapping.mimeTypePrefix)\n }\n })\n }\n const mimeTypePrefix = (node?.mimetype ?? '').split('/', 2)[0]\n return this.availableMediaTypes.includes(node?.mediatype ?? '') ||\n this.availableRemoteRepositories.includes(node?.remote?.repository?.repositoryType ?? '') ||\n this.availableReplicationSources.includes(node?.properties?.[RestConstants.CCM_PROP_REPLICATIONSOURCE]?.[0]?? '') ||\n this.availableResourceTypes.includes(node?.properties?.[RestConstants.CCM_PROP_CCRESSOURCETYPE]?.[0]?? '') ||\n this.availableMimeTypes.includes(node?.mimetype ?? '') ||\n this.availableMimeTypePrefixes.includes(mimeTypePrefix)\n }\n\n private isInitialized(): boolean {\n return this.availableMediaTypes.length\n + this.availableMimeTypes.length\n + this.availableMimeTypePrefixes.length\n + this.availableReplicationSources.length\n + this.availableResourceTypes.length\n + this.availableRemoteRepositories.length !== 0\n }\n\n getFrontendModuleSetting(node: Node): FrontendModuleConfig {\n const urlModuleConfig = this.checkUrlModule(node)\n if (urlModuleConfig !== null) {\n return urlModuleConfig\n }\n return {\n module: 'default',\n urlModuleConfig: null\n }\n }\n\n checkUrlModule(node: Node): FrontendModuleConfig | null {\n const url = node.properties?.['ccm:wwwurl']?.[0] || ''\n const checkLearningApps = (): UrlModuleConfig | null => {\n if (node.remote?.repository?.repositoryType?.toLowerCase() === 'learningapps') {\n return {\n embedding: UrlEmbeddings.LEARNINGAPPS,\n externalId: ''\n }\n }\n return null\n }\n /**\n * Function checkYouTube\n */\n const checkYouTube = (): UrlModuleConfig | null => {\n if (node.remote?.repository?.repositoryType?.toLowerCase() === 'youtube') {\n return {\n embedding: UrlEmbeddings.YOUTUBE,\n externalId: node.remote?.id ?? ''\n }\n }\n if (url.includes('youtu.be') ) {\n const split = url.split('/')\n return {\n embedding: UrlEmbeddings.YOUTUBE,\n externalId: split[split.length - 1]\n }\n }\n if (url.includes('.youtube.com/watch?')) {\n const urlObject = new URL(url)\n return {\n embedding: UrlEmbeddings.YOUTUBE,\n externalId: urlObject.searchParams.get('v') ?? ''\n }\n }\n return null\n }\n /**\n * Function checkVimeo\n */\n const checkVimeo = (): UrlModuleConfig | null => {\n if (url.includes('vimeo.com')) {\n const split = url.split('/')\n return {\n embedding: UrlEmbeddings.VIMEO,\n externalId: split[split.length - 1]\n }\n }\n return null\n }\n const checkGenericVideo = (): UrlModuleConfig | null => {\n if (url.length > 0 && ['mp4', 'webm'].includes(url.split('.').pop() ?? '')) {\n return {\n embedding: UrlEmbeddings.VIDEO,\n externalId: ''\n }\n }\n return null\n }\n /**\n * Function checkAudio\n */\n const checkAudio = (): UrlModuleConfig | null => {\n if (url.length > 0 && node.mimetype?.startsWith('audio')) {\n return {\n embedding: UrlEmbeddings.AUDIO,\n externalId: ''\n }\n }\n return null\n }\n /**\n * Function checkLti13ToolObject\n */\n const checkLti13ToolObject = (): UrlModuleConfig | null => {\n if (node.aspects?.includes('ccm:ltitool_node')) {\n return {\n embedding: UrlEmbeddings.LTI13TOOL,\n externalId: ''\n }\n }\n return null\n }\n /**\n * Function checkImage\n */\n const checkImage = (): UrlModuleConfig | null => {\n if (node.properties?.['ccm:remoterepositorytype']?.[0] === 'DDB') {\n return null\n }\n if (node.mediatype === 'file-image') {\n return {\n embedding: UrlEmbeddings.IMAGE,\n externalId: ''\n }\n }\n const mimeTypeSplit = node.mimetype?.split('/') ?? []\n if (mimeTypeSplit.length === 2 && ['png', 'jpg', 'jpeg', 'gif'].includes(mimeTypeSplit[1])) {\n return {\n embedding: UrlEmbeddings.IMAGE,\n externalId: ''\n }\n }\n return null\n }\n /**\n * Function detectH5P\n */\n const detectH5P = (): UrlModuleConfig | null => {\n if (url.length > 0 && url.includes('h5p.org/h5p/embed')) {\n return {\n embedding: UrlEmbeddings.H5P,\n externalId: ''\n }\n }\n return null\n }\n /**\n * Function detectPrezi\n */\n const detectPrezi = (): UrlModuleConfig | null => {\n if (url.length > 0 &&\n (url.includes('prezi.com/view/') || url.includes('prezi.com/embed/') || url.includes('prezi.com/p/embed'))\n ) {\n return {\n embedding: UrlEmbeddings.PREZI,\n externalId: ''\n }\n }\n return null\n }\n\n /**\n * embedding if applicable to node\n */\n const embedding =\n checkLearningApps()\n ?? checkYouTube()\n ?? checkVimeo()\n ?? checkGenericVideo()\n ?? checkAudio()\n ?? checkImage()\n ?? checkLti13ToolObject()\n ?? detectH5P()\n ?? detectPrezi()\n\n if (embedding !== null) {\n return {\n module: 'url',\n urlModuleConfig: embedding\n }\n }\n return null\n }\n}\n","import {Component, Inject, Input, OnChanges, OnInit, Optional, SimpleChanges} from '@angular/core';\nimport {RenderingModule} from './rendering.module';\nimport {\n JobInfoControllerService,\n JobInfoReply,\n RenderControllerWrapperService,\n RenderDataRequestWithToken,\n RenderDataResponse\n} from 'ngx-rendering-service-api';\nimport {BehaviorSubject, debounceTime, firstValueFrom, interval, Subject, switchMap, takeUntil} from 'rxjs';\nimport {ImageComponent} from './module/image/image.component';\nimport {RenderingApiModule} from './rendering-api.module';\nimport {VideoComponent} from './module/video/video.component';\nimport {MatProgressSpinnerModule} from '@angular/material/progress-spinner';\nimport {EduSharingApiModule, Node} from 'ngx-edu-sharing-api';\nimport {MatProgressBarModule} from '@angular/material/progress-bar';\nimport {AssetStateItem, RenderData} from './dto/RenderData';\nimport {PdfComponent} from './module/pdf/pdf.component';\nimport {UrlComponent} from './module/url/url.component';\nimport {EduHtmlComponent} from './module/eduhtml/eduHtml.component';\nimport {ModuleInfoService} from '../module-info.service';\nimport {filter} from 'rxjs/operators';\nimport {PlatformLocation} from '@angular/common';\nimport {DefaultComponent} from './module/default/default.component';\nimport {FrontendModuleConfig} from './dto/FrontendModuleConfig';\nimport {AudioComponent} from './module/audio/audio.component';\nimport {BinderComponent} from './module/binder/binder.component';\nimport {DdbComponent} from './module/ddb/ddb.component';\nimport {TranslateService} from '@ngx-translate/core';\nimport {EduSharingUiModule} from 'ngx-edu-sharing-ui';\nimport {ErrorComponent} from './module/error/error.component';\nimport {RENDERING_SERVICE_LIB_CONFIG, RenderingServiceLibConfiguration} from \"../rendering-service-lib-configuration\";\n\n@Component({\n selector: 'rs-root',\n standalone: true,\n imports: [\n RenderingApiModule,\n RenderingModule,\n ImageComponent,\n VideoComponent,\n MatProgressSpinnerModule,\n MatProgressBarModule,\n PdfComponent,\n UrlComponent,\n EduHtmlComponent,\n DefaultComponent,\n AudioComponent,\n BinderComponent,\n DdbComponent,\n EduSharingApiModule,\n EduSharingUiModule,\n ErrorComponent,\n ],\n providers: [\n TranslateService\n ],\n templateUrl: './render.component.html',\n styleUrl: './render.component.scss'\n})\nexport class RenderComponent implements OnChanges, OnInit {\n @Input() request: RenderDataRequestWithToken | undefined;\n @Input() node: Node | undefined;\n @Input() serviceWorkerUrl: string | undefined;\n @Input() activateServiceWorker: boolean = true;\n serviceWorkerReady = false;\n loadData = new Subject<void>();\n renderData$ = new BehaviorSubject<RenderData | null>(null);\n finished = new Subject<void>();\n someButNotAllFinished = new Subject<Boolean>()\n progress$ = new BehaviorSubject<{ module: string, progress?: number } | null>(null);\n\n constructor(\n private renderControllerService: RenderControllerWrapperService,\n private jobInfoControllerService: JobInfoControllerService,\n private moduleInfoService: ModuleInfoService,\n private platformLocation: PlatformLocation,\n ) {\n this.loadData.pipe(\n filter(() => this.node !== undefined && this.serviceWorkerReady),\n debounceTime(10),\n switchMap(() => {\n // subscribe error handling\n return this.checkModule()\n })\n ).subscribe({\n next: async (frontendModule) => {\n // No further calls to rs2 necessary if we have a frontend only module\n if (frontendModule !== null) {\n const data: RenderData = {\n module: frontendModule.module,\n frontendModuleConfig: frontendModule\n }\n this.renderData$.next(data)\n this.finished.next()\n } else {\n try {\n const renderResponseData = await firstValueFrom(this.renderControllerService.getRenderDataToken(this.request!!))\n // Case 1: no job returned => no polling needed\n if (renderResponseData.jobId === null) {\n this.handleRenderingResponseWithoutJob(renderResponseData)\n } else {\n this.progress$.next({module: renderResponseData.module ?? ''});\n interval(500).pipe(\n takeUntil(this.finished),\n switchMap(() => this.jobInfoControllerService.getJobInfo({jobId: renderResponseData.jobId!!}).pipe()),\n ).subscribe({\n next: async (jobInfo) => {\n // Some, but not all, jobs are in a final status (this means some are still QUEUED or PROCESSING)\n if (jobInfo.jobs.some(j => j.status === 'FINISHED') && jobInfo.status !== 'FINISHED') {\n this.handleJobInfoWithSubJobsInProgress(renderResponseData, jobInfo)\n // main job finished or partially failed\n } else if (jobInfo.status === 'FINISHED' || jobInfo.status === 'PARTIALLY_FAILED') {\n this.handleFinishedOrPartialJobInfo(renderResponseData, jobInfo)\n // Main job failed => no module but error page\n } else if (jobInfo.status === 'FAILED') {\n this.handleFailedMainJob(jobInfo)\n } else {\n // no finished jobs -> show either one progress bar with race leader (progress 0-100)\n // or queue position (progress (-inf,-1])\n this.handleMainJobWithNoSubJobInFinalStatus(jobInfo)\n }\n },\n error: error => {\n this.handleApiError(error)\n }});\n }\n } catch (error) {\n this.handleApiError(error)\n }\n }\n },\n error: (error) => {\n this.handleApiError(error)\n }\n });\n }\n\n handleApiError(error: any) {\n const publicMessage = error.error.userMessage ?? 'GENERIC_ERROR_MESSAGE'\n const data: RenderData = {\n module: 'ERROR',\n publicErrorMessage: publicMessage\n }\n this.renderData$.next(data)\n this.finished.next()\n }\n\n async ngOnInit() {\n // await firstValueFrom(this.translationsService.initialize())\n if (this.activateServiceWorker && 'serviceWorker' in navigator) {\n const reg = await navigator.serviceWorker.getRegistrations();\n await Promise.all(reg?.map((r: ServiceWorkerRegistration) => r.unregister()));\n const serviceWorkerUrl = this.serviceWorkerUrl ?? (this.platformLocation.getBaseHrefFromDOM() + 'edu-service-worker.js');\n const scope = this.serviceWorkerUrl ? '/' : this.platformLocation.getBaseHrefFromDOM();\n const registration = await navigator.serviceWorker.register(serviceWorkerUrl, {\n scope: scope\n });\n if (registration.waiting) {\n registration.waiting.postMessage({type: 'SKIP_WAITING'});\n }\n this.serviceWorkerReady = true;\n this.loadData.next();\n registration.onupdatefound = () => {\n const newWorker = registration.installing;\n if (newWorker) {\n newWorker.onstatechange = () => {\n if (newWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n newWorker.postMessage({type: 'SKIP_WAITING'});\n }\n }\n };\n }\n };\n navigator.serviceWorker.addEventListener('controllerchange', () => {\n console.info('Service Worker controlling this page.');\n });\n } else if ('serviceWorker' in navigator && this.activateServiceWorker){\n console.warn('Service worker API not available');\n }\n }\n\n async ngOnChanges(_: SimpleChanges) {\n this.loadData.next();\n }\n\n async checkModule(): Promise<FrontendModuleConfig | null> {\n if (!await this.moduleInfoService.isAvailableBackendObject(this.node)) {\n if (this.node !== undefined) {\n return this.moduleInfoService.getFrontendModuleSetting(this.node)\n }\n return {module: 'default', urlModuleConfig: null}\n } else {\n return null\n }\n }\n\n handleRenderingResponseWithoutJob(renderDataResponse: RenderDataResponse) {\n const items = renderDataResponse.objectLinks?.map(item => {\n const assetItem: AssetStateItem = {\n link: item.link,\n progress: 100,\n height: item.height,\n width: item.width,\n additionalData: undefined,\n status: 'FINISHED'\n }\n return assetItem\n })\n const data: RenderData = {\n module: renderDataResponse.module ?? '',\n items: items\n }\n renderDataResponse.objectLinks !== undefined && this.renderData$.next(data);\n this.finished.next();\n }\n\n handleJobInfoWithSubJobsInProgress(renderDataResponse: RenderDataResponse, jobInfo: JobInfoReply) {\n const items = jobInfo.jobs.map(subJob => {\n const assetItem: AssetStateItem = {\n link: subJob.objectLink?.link ?? '',\n progress: subJob.status !== 'QUEUED' ? subJob.progress : -(subJob.progress + 1),\n height: subJob.objectLink?.height ?? subJob.quality,\n width: subJob.objectLink?.width ?? 0,\n additionalData: subJob.additionalData,\n status: subJob.status,\n }\n return assetItem\n })\n const data: RenderData = {\n module: renderDataResponse.module ?? '',\n items: items\n }\n this.renderData$.next(data)\n this.someButNotAllFinished.next(true)\n }\n\n handleFinishedOrPartialJobInfo(renderDataResponse: RenderDataResponse, jobInfo: JobInfoReply) {\n const items = jobInfo.jobs.map(subJob => {\n const assetItem: AssetStateItem = {\n link: subJob.objectLink?.link ?? '',\n progress: subJob.progress,\n height: subJob.objectLink?.height ?? subJob.quality,\n width: subJob.objectLink?.width ?? 0,\n additionalData: subJob.additionalData,\n publicErrorMessage: subJob.error?.userMessage,\n status:subJob.status,\n }\n return assetItem\n })\n const data: RenderData = {\n module: renderDataResponse.module ?? '',\n items: items\n }\n this.renderData$.next(data)\n this.finished.next()\n }\n\n handleFailedMainJob(jobInfo: JobInfoReply) {\n const data: RenderData = {\n module: 'ERROR',\n publicErrorMessage: jobInfo.errorMessage?.userMessage ?? 'GENERIC_ERROR_MESSAGE'\n }\n this.renderData$.next(data)\n this.finished.next()\n }\n\n handleMainJobWithNoSubJobInFinalStatus(jobInfo: JobInfoReply) {\n let progress = 0\n if (jobInfo.jobs.some(j => j.status === 'PROCESSING')) {\n progress = Math.max(...jobInfo.jobs.map(j => j.progress))\n } else if (jobInfo.jobs.some(j => j.status === 'QUEUED')) {\n progress = -(Math.min(...jobInfo.jobs.map(j => j.progress + 1)))\n }\n this.progress$.next({\n module: jobInfo.module ?? '',\n progress: progress\n });\n }\n}\n","<div class=\"module module-{{(renderData$ | async)?.module}}\">\n <ng-container *ngIf=\"renderData$ | async as data\">\n @defer (when data?.module === 'IMAGE'){\n <rs-module-image [data]=\"data\" [node]=\"node\"></rs-module-image>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'VIDEO'){\n <rs-module-video [data]=\"data\" [node]=\"node\"></rs-module-video>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'PDF' || data?.module === 'DOCUMENT') {\n <rs-module-pdf [data]=\"data\" [node]=\"node\"></rs-module-pdf>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'EDUHTML' || data?.module === 'H5P' || data?.module === 'JUPYTER' || data.module === 'SPREADSHEET') {\n <rs-module-edu-html [data]=\"data\" [node]=\"node\"></rs-module-edu-html>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'AUDIO'){\n <rs-module-audio [data]=\"data\" [node]=\"node\"></rs-module-audio>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'BINDER'){\n <rs-module-binder [data]=\"data\" [node]=\"node\"></rs-module-binder>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'DDB'){\n <rs-module-ddb [data]=\"data\" [node]=\"node\"></rs-module-ddb>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n <ng-container *ngIf=\"data.module === 'default'\">\n @defer (when data.module === 'default') {\n <rs-module-default [node]=\"node\"></rs-module-default>\n }\n </ng-container>\n <ng-container *ngIf=\"data.module === 'url'\">\n @defer (when data.module === 'url') {\n <rs-module-url [node]=\"node\" [data]=\"data\"></rs-module-url>\n }\n </ng-container>\n <ng-container *ngIf=\"data.module === 'ERROR'\">\n @defer (when data.module === 'ERROR') {\n <rs-module-error [node]=\"node\" [data]=\"data\"></rs-module-error>\n }\n </ng-container>\n </ng-container>\n\n <div class=\"progress\" *ngIf=\"(renderData$ | async) === null;\">\n <ng-container *ngIf=\"progress$ | async as progress\">\n <ng-container [ngSwitch]=\"['VIDEO', 'AUDIO'].includes(progress.module) ? 'bar' : 'spinner'\">\n <ng-container *ngSwitchCase=\"'bar'\">\n <div *ngIf=\"(progress.progress ?? 0) < 0\">Queue position: {{-(progress.progress ?? 0)}}</div>\n <mat-progress-bar [value]=\"(progress.progress ?? 0)\" *ngIf=\"(progress.progress ?? 0) >= 0\"></mat-progress-bar>\n </ng-container>\n <ng-container *ngSwitchCase=\"'spinner'\">\n <div *ngIf=\"(progress.progress ?? 0) < 0\">Queue position: {{-(progress.progress ?? 0)}</div>\n <mat-spinner [diameter]=\"50\" *ngIf=\"(progress.progress ?? 0) >= 0\"></mat-spinner>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n</div>\n\n<ng-template #loading>\n <div class=\"progress\">\n <mat-spinner></mat-spinner>\n </div>\n</ng-template>\n","import {ModuleWithProviders, NgModule} from '@angular/core';\nimport {RenderComponent} from './lib/render.component';\nimport {CommonModule} from '@angular/common';\nimport {EduSharingUiConfigurationParams} from \"ngx-edu-sharing-ui/lib/edu-sharing-ui-configuration\";\nimport {getConfigProvider, RenderingServiceLibConfigurationParams} from \"./rendering-service-lib-configuration\";\n\n@NgModule({\n declarations: [],\n imports: [\n RenderComponent,\n CommonModule,\n ],\n exports: [\n CommonModule,\n RenderComponent,\n ],\n})\nexport class RenderingServiceLibModule {\n public static forRoot(\n params: RenderingServiceLibConfigurationParams\n): ModuleWithProviders<RenderingServiceLibModule> {\n return {\n ngModule: RenderingServiceLibModule,\n providers: [getConfigProvider(params)]\n };\n }\n}\n","/*\n * Public API Surface of edu-sharing-ui\n */\n\nexport * from './lib/rendering.module';\nexport * from './lib/module/image/image.component';\nexport * from './lib/module/video/video.component';\nexport * from './lib/module/pdf/pdf.component';\nexport * from './lib/module/url/url.component';\nexport * from './lib/module/eduhtml/eduHtml.component';\nexport * from './lib/render.component';\nexport * from './lib/asset-link.pipe';\nexport * from './rendering-service-lib.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2.AssetLinkPipe","i3","i2","i4","i2.ModuleInfoService"],"mappings":"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"}
@@ -15,6 +15,7 @@ export declare class RenderComponent implements OnChanges, OnInit {
15
15
  request: RenderDataRequestWithToken | undefined;
16
16
  node: Node | undefined;
17
17
  serviceWorkerUrl: string | undefined;
18
+ activateServiceWorker: boolean;
18
19
  serviceWorkerReady: boolean;
19
20
  loadData: Subject<void>;
20
21
  renderData$: BehaviorSubject<RenderData | null>;
@@ -35,5 +36,5 @@ export declare class RenderComponent implements OnChanges, OnInit {
35
36
  handleFailedMainJob(jobInfo: JobInfoReply): void;
36
37
  handleMainJobWithNoSubJobInFinalStatus(jobInfo: JobInfoReply): void;
37
38
  static ɵfac: i0.ɵɵFactoryDeclaration<RenderComponent, never>;
38
- static ɵcmp: i0.ɵɵComponentDeclaration<RenderComponent, "rs-root", never, { "request": { "alias": "request"; "required": false; }; "node": { "alias": "node"; "required": false; }; "serviceWorkerUrl": { "alias": "serviceWorkerUrl"; "required": false; }; }, {}, never, never, true, never>;
39
+ static ɵcmp: i0.ɵɵComponentDeclaration<RenderComponent, "rs-root", never, { "request": { "alias": "request"; "required": false; }; "node": { "alias": "node"; "required": false; }; "serviceWorkerUrl": { "alias": "serviceWorkerUrl"; "required": false; }; "activateServiceWorker": { "alias": "activateServiceWorker"; "required": false; }; }, {}, never, never, true, never>;
39
40
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-rendering-service-lib",
3
- "version": "0.0.66859",
3
+ "version": "0.0.66860",
4
4
  "private": false,
5
5
  "dependencies": {
6
6
  "tslib": "^2.3.0"