@deeksha2309/sunbird-collection-editor 8.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/esm2022/lib/collection-editor-cursor.service.mjs +3 -0
- package/esm2022/lib/collection-editor-library.component.mjs +16 -0
- package/esm2022/lib/collection-editor-library.module.mjs +137 -0
- package/esm2022/lib/components/answer/answer.component.mjs +43 -0
- package/esm2022/lib/components/asset-browser/asset-browser.component.mjs +325 -0
- package/esm2022/lib/components/asset-browser/asset-browser.data.mjs +53 -0
- package/esm2022/lib/components/assign-page-number/assign-page-number.component.mjs +191 -0
- package/esm2022/lib/components/ckeditor-tool/ckeditor-tool.component.mjs +895 -0
- package/esm2022/lib/components/collection-icon/collection-icon.component.mjs +43 -0
- package/esm2022/lib/components/contentplayer-page/contentplayer-page.component.mjs +351 -0
- package/esm2022/lib/components/csv-upload/csv-upload.component.mjs +178 -0
- package/esm2022/lib/components/dialcode/dialcode.component.mjs +182 -0
- package/esm2022/lib/components/editor/editor.component.mjs +1125 -0
- package/esm2022/lib/components/fancy-tree/fancy-tree.component.mjs +529 -0
- package/esm2022/lib/components/header/header.component.mjs +123 -0
- package/esm2022/lib/components/library/library.component.mjs +242 -0
- package/esm2022/lib/components/library-filter/library-filter.component.mjs +149 -0
- package/esm2022/lib/components/library-list/library-list.component.mjs +92 -0
- package/esm2022/lib/components/library-player/library-player.component.mjs +62 -0
- package/esm2022/lib/components/manage-collaborator/manage-collaborator.component.mjs +256 -0
- package/esm2022/lib/components/meta-form/meta-form.component.mjs +377 -0
- package/esm2022/lib/components/options/options.component.mjs +144 -0
- package/esm2022/lib/components/plain-tree/plain-tree.component.mjs +125 -0
- package/esm2022/lib/components/progress-status/progress-status.component.mjs +46 -0
- package/esm2022/lib/components/publish-checklist/publish-checklist.component.mjs +67 -0
- package/esm2022/lib/components/quality-params-modal/quality-params-modal.component.mjs +52 -0
- package/esm2022/lib/components/question/question.component.mjs +1360 -0
- package/esm2022/lib/components/quml-player/quml-player.component.mjs +73 -0
- package/esm2022/lib/components/qumlplayer-page/qumlplayer-page.component.mjs +84 -0
- package/esm2022/lib/components/resource-reorder/resource-reorder.component.mjs +143 -0
- package/esm2022/lib/components/skeleton-loader/skeleton-loader.component.mjs +26 -0
- package/esm2022/lib/components/template/template.component.mjs +42 -0
- package/esm2022/lib/components/term-and-condition/term-and-condition.component.mjs +68 -0
- package/esm2022/lib/directives/telemetry-interact/telemetry-interact.directive.mjs +33 -0
- package/esm2022/lib/interfaces/McqForm.mjs +29 -0
- package/esm2022/lib/interfaces/editor.mjs +2 -0
- package/esm2022/lib/interfaces/framework.mjs +2 -0
- package/esm2022/lib/interfaces/httpOptions.mjs +2 -0
- package/esm2022/lib/interfaces/requestParam.mjs +2 -0
- package/esm2022/lib/interfaces/serverResponse.mjs +2 -0
- package/esm2022/lib/pipes/sanitize-html.pipe.mjs +20 -0
- package/esm2022/lib/services/config/category.config.json +8 -0
- package/esm2022/lib/services/config/config.service.mjs +27 -0
- package/esm2022/lib/services/config/editor.config.json +31 -0
- package/esm2022/lib/services/config/label.config.json +314 -0
- package/esm2022/lib/services/config/player.config.json +96 -0
- package/esm2022/lib/services/config/url.config.json +69 -0
- package/esm2022/lib/services/data/data.service.mjs +192 -0
- package/esm2022/lib/services/dialcode/dialcode.service.mjs +309 -0
- package/esm2022/lib/services/editor/editor.service.mjs +682 -0
- package/esm2022/lib/services/framework/framework.service.mjs +106 -0
- package/esm2022/lib/services/helper/helper.service.mjs +160 -0
- package/esm2022/lib/services/player/player.service.mjs +99 -0
- package/esm2022/lib/services/public-data/public-data.service.mjs +21 -0
- package/esm2022/lib/services/question/question.service.mjs +167 -0
- package/esm2022/lib/services/telemetry/telemetry.service.mjs +120 -0
- package/esm2022/lib/services/toaster/toaster.service.mjs +105 -0
- package/esm2022/lib/services/tree/tree.service.mjs +284 -0
- package/esm2022/project-sunbird-sunbird-collection-editor.mjs +5 -0
- package/esm2022/public-api.mjs +4 -0
- package/fesm2022/project-sunbird-sunbird-collection-editor.mjs +10138 -0
- package/fesm2022/project-sunbird-sunbird-collection-editor.mjs.map +1 -0
- package/index.d.ts +6 -0
- package/lib/assets/.gitkeep +0 -0
- package/lib/assets/images/MCQ.png +0 -0
- package/lib/assets/images/Spin.gif +0 -0
- package/lib/assets/images/bulkuploadfile.png +0 -0
- package/lib/assets/images/cancel-sign copy.png +0 -0
- package/lib/assets/images/cancel-sign.png +0 -0
- package/lib/assets/images/emptyResult.svg +1 -0
- package/lib/assets/images/icons-rtl.gif +0 -0
- package/lib/assets/images/icons.gif +0 -0
- package/lib/assets/images/imageicon.svg +16 -0
- package/lib/assets/images/imageicon_blue.svg +16 -0
- package/lib/assets/images/layoutoneicon.svg +16 -0
- package/lib/assets/images/layoutoneicon_blue.svg +16 -0
- package/lib/assets/images/layoutthreeicon.svg +18 -0
- package/lib/assets/images/layoutthreeicon_blue.svg +18 -0
- package/lib/assets/images/layouttwoicon.svg +18 -0
- package/lib/assets/images/layouttwoicon_blue.svg +18 -0
- package/lib/assets/images/leftalignicon.svg +17 -0
- package/lib/assets/images/leftalignicon_blue.svg +17 -0
- package/lib/assets/images/loader.gif +0 -0
- package/lib/assets/images/loader.svg +1 -0
- package/lib/assets/images/loading.gif +0 -0
- package/lib/assets/images/middlealignicon.svg +17 -0
- package/lib/assets/images/middlealignicon_blue.svg +17 -0
- package/lib/assets/images/question_collection.svg +18 -0
- package/lib/assets/images/rightalignicon.svg +17 -0
- package/lib/assets/images/rightalignicon_blue.svg +17 -0
- package/lib/assets/images/vline-rtl.gif +0 -0
- package/lib/assets/images/vline.gif +0 -0
- package/lib/assets/images/writing.png +0 -0
- package/lib/collection-editor-cursor.service.d.ts +5 -0
- package/lib/collection-editor-cursor.service.d.ts.map +1 -0
- package/lib/collection-editor-library.component.d.ts +9 -0
- package/lib/collection-editor-library.component.d.ts.map +1 -0
- package/lib/collection-editor-library.module.d.ts +50 -0
- package/lib/collection-editor-library.module.d.ts.map +1 -0
- package/lib/components/answer/answer.component.d.ts +24 -0
- package/lib/components/answer/answer.component.d.ts.map +1 -0
- package/lib/components/asset-browser/asset-browser.component.d.ts +81 -0
- package/lib/components/asset-browser/asset-browser.component.d.ts.map +1 -0
- package/lib/components/asset-browser/asset-browser.data.d.ts +52 -0
- package/lib/components/asset-browser/asset-browser.data.d.ts.map +1 -0
- package/lib/components/assign-page-number/assign-page-number.component.d.ts +38 -0
- package/lib/components/assign-page-number/assign-page-number.component.d.ts.map +1 -0
- package/lib/components/ckeditor-tool/ckeditor-tool.component.d.ts +161 -0
- package/lib/components/ckeditor-tool/ckeditor-tool.component.d.ts.map +1 -0
- package/lib/components/collection-icon/collection-icon.component.d.ts +18 -0
- package/lib/components/collection-icon/collection-icon.component.d.ts.map +1 -0
- package/lib/components/contentplayer-page/contentplayer-page.component.d.ts +54 -0
- package/lib/components/contentplayer-page/contentplayer-page.component.d.ts.map +1 -0
- package/lib/components/csv-upload/csv-upload.component.d.ts +42 -0
- package/lib/components/csv-upload/csv-upload.component.d.ts.map +1 -0
- package/lib/components/dialcode/dialcode.component.d.ts +48 -0
- package/lib/components/dialcode/dialcode.component.d.ts.map +1 -0
- package/lib/components/editor/editor.component.d.ts +146 -0
- package/lib/components/editor/editor.component.d.ts.map +1 -0
- package/lib/components/fancy-tree/fancy-tree.component.d.ts +77 -0
- package/lib/components/fancy-tree/fancy-tree.component.d.ts.map +1 -0
- package/lib/components/header/header.component.d.ts +46 -0
- package/lib/components/header/header.component.d.ts.map +1 -0
- package/lib/components/library/library.component.d.ts +69 -0
- package/lib/components/library/library.component.d.ts.map +1 -0
- package/lib/components/library-filter/library-filter.component.d.ts +47 -0
- package/lib/components/library-filter/library-filter.component.d.ts.map +1 -0
- package/lib/components/library-list/library-list.component.d.ts +32 -0
- package/lib/components/library-list/library-list.component.d.ts.map +1 -0
- package/lib/components/library-player/library-player.component.d.ts +24 -0
- package/lib/components/library-player/library-player.component.d.ts.map +1 -0
- package/lib/components/manage-collaborator/manage-collaborator.component.d.ts +75 -0
- package/lib/components/manage-collaborator/manage-collaborator.component.d.ts.map +1 -0
- package/lib/components/meta-form/meta-form.component.d.ts +51 -0
- package/lib/components/meta-form/meta-form.component.d.ts.map +1 -0
- package/lib/components/options/options.component.d.ts +53 -0
- package/lib/components/options/options.component.d.ts.map +1 -0
- package/lib/components/plain-tree/plain-tree.component.d.ts +20 -0
- package/lib/components/plain-tree/plain-tree.component.d.ts.map +1 -0
- package/lib/components/progress-status/progress-status.component.d.ts +25 -0
- package/lib/components/progress-status/progress-status.component.d.ts.map +1 -0
- package/lib/components/publish-checklist/publish-checklist.component.d.ts +23 -0
- package/lib/components/publish-checklist/publish-checklist.component.d.ts.map +1 -0
- package/lib/components/quality-params-modal/quality-params-modal.component.d.ts +24 -0
- package/lib/components/quality-params-modal/quality-params-modal.component.d.ts.map +1 -0
- package/lib/components/question/question.component.d.ts +215 -0
- package/lib/components/question/question.component.d.ts.map +1 -0
- package/lib/components/quml-player/quml-player.component.d.ts +26 -0
- package/lib/components/quml-player/quml-player.component.d.ts.map +1 -0
- package/lib/components/qumlplayer-page/qumlplayer-page.component.d.ts +31 -0
- package/lib/components/qumlplayer-page/qumlplayer-page.component.d.ts.map +1 -0
- package/lib/components/resource-reorder/resource-reorder.component.d.ts +45 -0
- package/lib/components/resource-reorder/resource-reorder.component.d.ts.map +1 -0
- package/lib/components/skeleton-loader/skeleton-loader.component.d.ts +13 -0
- package/lib/components/skeleton-loader/skeleton-loader.component.d.ts.map +1 -0
- package/lib/components/template/template.component.d.ts +21 -0
- package/lib/components/template/template.component.d.ts.map +1 -0
- package/lib/components/term-and-condition/term-and-condition.component.d.ts +26 -0
- package/lib/components/term-and-condition/term-and-condition.component.d.ts.map +1 -0
- package/lib/directives/telemetry-interact/telemetry-interact.directive.d.ts +27 -0
- package/lib/directives/telemetry-interact/telemetry-interact.directive.d.ts.map +1 -0
- package/lib/interfaces/McqForm.d.ts +32 -0
- package/lib/interfaces/McqForm.d.ts.map +1 -0
- package/lib/interfaces/editor.d.ts +78 -0
- package/lib/interfaces/editor.d.ts.map +1 -0
- package/lib/interfaces/framework.d.ts +46 -0
- package/lib/interfaces/framework.d.ts.map +1 -0
- package/lib/interfaces/httpOptions.d.ts +35 -0
- package/lib/interfaces/httpOptions.d.ts.map +1 -0
- package/lib/interfaces/requestParam.d.ts +24 -0
- package/lib/interfaces/requestParam.d.ts.map +1 -0
- package/lib/interfaces/serverResponse.d.ts +38 -0
- package/lib/interfaces/serverResponse.d.ts.map +1 -0
- package/lib/pipes/sanitize-html.pipe.d.ts +11 -0
- package/lib/pipes/sanitize-html.pipe.d.ts.map +1 -0
- package/lib/services/config/config.service.d.ts +13 -0
- package/lib/services/config/config.service.d.ts.map +1 -0
- package/lib/services/data/data.service.d.ts +85 -0
- package/lib/services/data/data.service.d.ts.map +1 -0
- package/lib/services/dialcode/dialcode.service.d.ts +36 -0
- package/lib/services/dialcode/dialcode.service.d.ts.map +1 -0
- package/lib/services/editor/editor.service.d.ts +150 -0
- package/lib/services/editor/editor.service.d.ts.map +1 -0
- package/lib/services/framework/framework.service.d.ts +35 -0
- package/lib/services/framework/framework.service.d.ts.map +1 -0
- package/lib/services/helper/helper.service.d.ts +41 -0
- package/lib/services/helper/helper.service.d.ts.map +1 -0
- package/lib/services/player/player.service.d.ts +33 -0
- package/lib/services/player/player.service.d.ts.map +1 -0
- package/lib/services/public-data/public-data.service.d.ts +15 -0
- package/lib/services/public-data/public-data.service.d.ts.map +1 -0
- package/lib/services/question/question.service.d.ts +30 -0
- package/lib/services/question/question.service.d.ts.map +1 -0
- package/lib/services/telemetry/telemetry.service.d.ts +45 -0
- package/lib/services/telemetry/telemetry.service.d.ts.map +1 -0
- package/lib/services/toaster/toaster.service.d.ts +50 -0
- package/lib/services/toaster/toaster.service.d.ts.map +1 -0
- package/lib/services/tree/tree.service.d.ts +51 -0
- package/lib/services/tree/tree.service.d.ts.map +1 -0
- package/package.json +32 -0
- package/project-sunbird-sunbird-collection-editor.d.ts.map +1 -0
- package/public-api.d.ts +4 -0
- package/public-api.d.ts.map +1 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "../../services/config/config.service";
|
|
4
|
+
import * as i2 from "@angular/common";
|
|
5
|
+
import * as i3 from "../asset-browser/asset-browser.component";
|
|
6
|
+
export class CollectionIconComponent {
|
|
7
|
+
constructor(configService) {
|
|
8
|
+
this.configService = configService;
|
|
9
|
+
this.iconEmitter = new EventEmitter();
|
|
10
|
+
this.showImagePicker = false;
|
|
11
|
+
}
|
|
12
|
+
ngOnInit() {
|
|
13
|
+
}
|
|
14
|
+
initializeImagePicker() {
|
|
15
|
+
if (this.appIconConfig.isAppIconEditable) {
|
|
16
|
+
this.showImagePicker = true;
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
this.showImagePicker = false;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
collectionIconHandler(event) {
|
|
23
|
+
this.iconEmitter.emit(event);
|
|
24
|
+
this.appIcon = event.url;
|
|
25
|
+
this.showImagePicker = false;
|
|
26
|
+
}
|
|
27
|
+
handleModalDismiss(event) {
|
|
28
|
+
this.showImagePicker = false;
|
|
29
|
+
}
|
|
30
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CollectionIconComponent, deps: [{ token: i1.ConfigService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
31
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CollectionIconComponent, selector: "lib-collection-icon", inputs: { appIcon: "appIcon", appIconConfig: "appIconConfig" }, outputs: { iconEmitter: "iconEmitter" }, ngImport: i0, template: "<ng-container>\n <div (click)=\"initializeImagePicker()\" class=\"mb-20 w-15\">\n <div class=\"app-icon-label\" [attr.data-title]=\"appIconConfig?.description ? appIconConfig?.description : null\">{{appIconConfig?.label}}</div>\n <div *ngIf='!appIcon' class=\"sb-centericon\">\n <div>\n <i id=\"icon_appIcon\" name=\"icon_appIcon\" class=\"icon image outline\" ></i>\n </div>\n <div class=\"addImageText\">{{configService.labelConfig?.lbl?.addAnImage}}</div>\n </div>\n <img *ngIf=\"appIcon\" \n class=\"ui image sb-appicon\" \n src=\"{{appIcon}}\"/>\n </div>\n <lib-asset-browser *ngIf=\"showImagePicker\" [showImagePicker]=\"showImagePicker\" (assetBrowserEmitter)=\"collectionIconHandler($event)\" (modalDismissEmitter)=\"handleModalDismiss($event)\"></lib-asset-browser>\n</ng-container>", styles: [".sb-appicon{height:110px;width:120px;border:solid 1px #ccc;padding:5px}.sb-centericon{height:110px;width:120px;border:solid 1px #ccc;padding:10px;display:flex;justify-content:center;align-items:center;flex-direction:column}.addImageText{font-size:.8rem!important}.w-15{width:15%;max-width:15%}.app-icon-label{font-size:12px!important;margin-bottom:.5rem!important;color:#121213e0;font-weight:600}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.AssetBrowserComponent, selector: "lib-asset-browser", inputs: ["showImagePicker"], outputs: ["assetBrowserEmitter", "modalDismissEmitter"] }] }); }
|
|
32
|
+
}
|
|
33
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CollectionIconComponent, decorators: [{
|
|
34
|
+
type: Component,
|
|
35
|
+
args: [{ selector: 'lib-collection-icon', template: "<ng-container>\n <div (click)=\"initializeImagePicker()\" class=\"mb-20 w-15\">\n <div class=\"app-icon-label\" [attr.data-title]=\"appIconConfig?.description ? appIconConfig?.description : null\">{{appIconConfig?.label}}</div>\n <div *ngIf='!appIcon' class=\"sb-centericon\">\n <div>\n <i id=\"icon_appIcon\" name=\"icon_appIcon\" class=\"icon image outline\" ></i>\n </div>\n <div class=\"addImageText\">{{configService.labelConfig?.lbl?.addAnImage}}</div>\n </div>\n <img *ngIf=\"appIcon\" \n class=\"ui image sb-appicon\" \n src=\"{{appIcon}}\"/>\n </div>\n <lib-asset-browser *ngIf=\"showImagePicker\" [showImagePicker]=\"showImagePicker\" (assetBrowserEmitter)=\"collectionIconHandler($event)\" (modalDismissEmitter)=\"handleModalDismiss($event)\"></lib-asset-browser>\n</ng-container>", styles: [".sb-appicon{height:110px;width:120px;border:solid 1px #ccc;padding:5px}.sb-centericon{height:110px;width:120px;border:solid 1px #ccc;padding:10px;display:flex;justify-content:center;align-items:center;flex-direction:column}.addImageText{font-size:.8rem!important}.w-15{width:15%;max-width:15%}.app-icon-label{font-size:12px!important;margin-bottom:.5rem!important;color:#121213e0;font-weight:600}\n"] }]
|
|
36
|
+
}], ctorParameters: function () { return [{ type: i1.ConfigService }]; }, propDecorators: { appIcon: [{
|
|
37
|
+
type: Input
|
|
38
|
+
}], appIconConfig: [{
|
|
39
|
+
type: Input
|
|
40
|
+
}], iconEmitter: [{
|
|
41
|
+
type: Output
|
|
42
|
+
}] } });
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi1pY29uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbGxlY3Rpb24tZWRpdG9yLWxpYnJhcnkvc3JjL2xpYi9jb21wb25lbnRzL2NvbGxlY3Rpb24taWNvbi9jb2xsZWN0aW9uLWljb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29sbGVjdGlvbi1lZGl0b3ItbGlicmFyeS9zcmMvbGliL2NvbXBvbmVudHMvY29sbGVjdGlvbi1pY29uL2NvbGxlY3Rpb24taWNvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7OztBQVEvRSxNQUFNLE9BQU8sdUJBQXVCO0lBTWxDLFlBQW1CLGFBQTRCO1FBQTVCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBSHJDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUN6QyxvQkFBZSxHQUFHLEtBQUssQ0FBQztJQUVvQixDQUFDO0lBRXBELFFBQVE7SUFDUixDQUFDO0lBRUQscUJBQXFCO1FBQ25CLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsRUFBRTtZQUN4QyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztTQUM3QjthQUFNO1lBQ0wsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7U0FDOUI7SUFDSCxDQUFDO0lBRUQscUJBQXFCLENBQUMsS0FBSztRQUMxQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFDekIsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFDOUIsQ0FBQztJQUVELGtCQUFrQixDQUFDLEtBQUs7UUFDdEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFDL0IsQ0FBQzsrR0EzQlUsdUJBQXVCO21HQUF2Qix1QkFBdUIsb0tDUnBDLDQzQkFjZTs7NEZETkYsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLHFCQUFxQjtvR0FLdEIsT0FBTztzQkFBZixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb25maWcvY29uZmlnLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItY29sbGVjdGlvbi1pY29uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbGxlY3Rpb24taWNvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbGxlY3Rpb24taWNvbi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25JY29uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgYXBwSWNvbjtcbiAgQElucHV0KCkgYXBwSWNvbkNvbmZpZztcbiAgQE91dHB1dCgpIGljb25FbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIHB1YmxpYyBzaG93SW1hZ2VQaWNrZXIgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gIH1cblxuICBpbml0aWFsaXplSW1hZ2VQaWNrZXIoKSB7XG4gICAgaWYgKHRoaXMuYXBwSWNvbkNvbmZpZy5pc0FwcEljb25FZGl0YWJsZSkge1xuICAgICAgdGhpcy5zaG93SW1hZ2VQaWNrZXIgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3dJbWFnZVBpY2tlciA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGNvbGxlY3Rpb25JY29uSGFuZGxlcihldmVudCkge1xuICAgdGhpcy5pY29uRW1pdHRlci5lbWl0KGV2ZW50KTtcbiAgIHRoaXMuYXBwSWNvbiA9IGV2ZW50LnVybDtcbiAgIHRoaXMuc2hvd0ltYWdlUGlja2VyID0gZmFsc2U7XG4gIH1cblxuICBoYW5kbGVNb2RhbERpc21pc3MoZXZlbnQpIHtcbiAgICB0aGlzLnNob3dJbWFnZVBpY2tlciA9IGZhbHNlO1xuICB9XG5cbn1cbiIsIjxuZy1jb250YWluZXI+XG4gICAgPGRpdiAoY2xpY2spPVwiaW5pdGlhbGl6ZUltYWdlUGlja2VyKClcIiBjbGFzcz1cIm1iLTIwIHctMTVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1pY29uLWxhYmVsXCIgW2F0dHIuZGF0YS10aXRsZV09XCJhcHBJY29uQ29uZmlnPy5kZXNjcmlwdGlvbiA/IGFwcEljb25Db25maWc/LmRlc2NyaXB0aW9uIDogbnVsbFwiPnt7YXBwSWNvbkNvbmZpZz8ubGFiZWx9fTwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPSchYXBwSWNvbicgY2xhc3M9XCJzYi1jZW50ZXJpY29uXCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxpIGlkPVwiaWNvbl9hcHBJY29uXCIgbmFtZT1cImljb25fYXBwSWNvblwiIGNsYXNzPVwiaWNvbiBpbWFnZSBvdXRsaW5lXCIgPjwvaT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZEltYWdlVGV4dFwiPnt7Y29uZmlnU2VydmljZS5sYWJlbENvbmZpZz8ubGJsPy5hZGRBbkltYWdlfX08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxpbWcgKm5nSWY9XCJhcHBJY29uXCIgXG4gICAgICAgIGNsYXNzPVwidWkgaW1hZ2Ugc2ItYXBwaWNvblwiIFxuICAgICAgICBzcmM9XCJ7e2FwcEljb259fVwiLz5cbiAgICA8L2Rpdj5cbiAgICA8bGliLWFzc2V0LWJyb3dzZXIgKm5nSWY9XCJzaG93SW1hZ2VQaWNrZXJcIiBbc2hvd0ltYWdlUGlja2VyXT1cInNob3dJbWFnZVBpY2tlclwiIChhc3NldEJyb3dzZXJFbWl0dGVyKT1cImNvbGxlY3Rpb25JY29uSGFuZGxlcigkZXZlbnQpXCIgKG1vZGFsRGlzbWlzc0VtaXR0ZXIpPVwiaGFuZGxlTW9kYWxEaXNtaXNzKCRldmVudClcIj48L2xpYi1hc3NldC1icm93c2VyPlxuPC9uZy1jb250YWluZXI+Il19
|
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
import { Component, Input, ViewChild, ViewEncapsulation } from '@angular/core';
|
|
2
|
+
import * as _ from 'lodash-es';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../../services/editor/editor.service";
|
|
5
|
+
import * as i2 from "../../services/player/player.service";
|
|
6
|
+
import * as i3 from "../../services/config/config.service";
|
|
7
|
+
import * as i4 from "../../services/framework/framework.service";
|
|
8
|
+
import * as i5 from "@angular/common";
|
|
9
|
+
export class ContentplayerPageComponent {
|
|
10
|
+
static { this.PLAYER_INITIALIZATION_TIMEOUT = 200; }
|
|
11
|
+
static { this.CUSTOM_ELEMENT_CHECK_INTERVAL = 100; }
|
|
12
|
+
static { this.CUSTOM_ELEMENT_MAX_ATTEMPTS = 100; }
|
|
13
|
+
constructor(editorService, playerService, configService, frameworkService) {
|
|
14
|
+
this.editorService = editorService;
|
|
15
|
+
this.playerService = playerService;
|
|
16
|
+
this.configService = configService;
|
|
17
|
+
this.frameworkService = frameworkService;
|
|
18
|
+
this.contentInfoArray = [];
|
|
19
|
+
this.playerNeedsInitialization = false;
|
|
20
|
+
this.viewInitialized = false;
|
|
21
|
+
}
|
|
22
|
+
ngOnInit() { }
|
|
23
|
+
ngAfterViewInit() {
|
|
24
|
+
this.viewInitialized = true;
|
|
25
|
+
if (this.playerNeedsInitialization) {
|
|
26
|
+
this.initializeAndLoadPlayer();
|
|
27
|
+
this.playerNeedsInitialization = false;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
ngAfterViewChecked() {
|
|
31
|
+
// Check if player elements become available after template changes
|
|
32
|
+
if (this.playerNeedsInitialization && this.viewInitialized) {
|
|
33
|
+
this.checkAndInitializePlayer();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
ngOnChanges() {
|
|
37
|
+
this.contentMetadata = _.get(this.contentMetadata, 'data.metadata') || this.contentMetadata;
|
|
38
|
+
if (this.contentId !== this.contentMetadata.identifier) {
|
|
39
|
+
this.contentId = this.contentMetadata.identifier;
|
|
40
|
+
this.getContentDetails();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
getContentDetails() {
|
|
44
|
+
this.playerType = 'default-player';
|
|
45
|
+
this.editorService.fetchContentDetails(this.contentId).subscribe(res => {
|
|
46
|
+
this.contentDetails = {
|
|
47
|
+
contentId: this.contentId,
|
|
48
|
+
contentData: _.get(res, 'result.content')
|
|
49
|
+
};
|
|
50
|
+
const baseContentInfo = {
|
|
51
|
+
name: _.get(this.contentDetails, 'contentData.name'),
|
|
52
|
+
author: _.get(this.contentDetails, 'contentData.author'),
|
|
53
|
+
license: _.get(this.contentDetails, 'contentData.license'),
|
|
54
|
+
copyright: _.get(this.contentDetails, 'contentData.copyright')
|
|
55
|
+
};
|
|
56
|
+
const frameworkId = this.frameworkService.organisationFramework;
|
|
57
|
+
const frameworkData = this.frameworkService.frameworkData;
|
|
58
|
+
if (frameworkData?.[frameworkId]?.categories) {
|
|
59
|
+
const categories = frameworkData[frameworkId].categories;
|
|
60
|
+
const frameworkCodes = categories.map(category => category.code);
|
|
61
|
+
const matchedFields = frameworkCodes.reduce((acc, code) => {
|
|
62
|
+
if (_.has(this.contentDetails.contentData, code)) {
|
|
63
|
+
acc[code] = _.get(this.contentDetails.contentData, code);
|
|
64
|
+
}
|
|
65
|
+
return acc;
|
|
66
|
+
}, {});
|
|
67
|
+
this.contentInfo = { ...baseContentInfo, ...matchedFields };
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
this.contentInfo = baseContentInfo;
|
|
71
|
+
}
|
|
72
|
+
this.prepareContentInfoArray();
|
|
73
|
+
if (this.viewInitialized) {
|
|
74
|
+
this.initializeAndLoadPlayer();
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
this.playerNeedsInitialization = true;
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
initializeAndLoadPlayer() {
|
|
82
|
+
this.playerConfig = this.playerService.getPlayerConfig(this.contentDetails);
|
|
83
|
+
this.setPlayerType();
|
|
84
|
+
if (this.playerType === 'default-player') {
|
|
85
|
+
this.loadDefaultPlayer();
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
this.playerConfig.config = {
|
|
89
|
+
'traceId': 'afhjgh',
|
|
90
|
+
'sideMenu': {
|
|
91
|
+
'showDownload': true,
|
|
92
|
+
'showExit': true,
|
|
93
|
+
'showPrint': true,
|
|
94
|
+
'showReplay': true,
|
|
95
|
+
'showShare': true
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
this.loadPlayer();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
checkAndInitializePlayer() {
|
|
102
|
+
const playerElement = this.getPlayerElement();
|
|
103
|
+
if (playerElement && this.playerNeedsInitialization) {
|
|
104
|
+
this.initializeAndLoadPlayer();
|
|
105
|
+
this.playerNeedsInitialization = false;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
getPlayerElement() {
|
|
109
|
+
switch (this.playerType) {
|
|
110
|
+
case 'pdf-player':
|
|
111
|
+
return this.pdfPlayer;
|
|
112
|
+
case 'epub-player':
|
|
113
|
+
return this.epubPlayer;
|
|
114
|
+
case 'video-player':
|
|
115
|
+
return this.videoPlayer;
|
|
116
|
+
default:
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
prepareContentInfoArray() {
|
|
121
|
+
this.contentInfoArray = [];
|
|
122
|
+
let validIndex = 0;
|
|
123
|
+
Object.keys(this.contentInfo).forEach((key) => {
|
|
124
|
+
if (this.contentInfo[key] !== undefined && this.contentInfo[key] !== null && this.contentInfo[key] !== '') {
|
|
125
|
+
let displayValue = this.contentInfo[key];
|
|
126
|
+
if (Array.isArray(displayValue)) {
|
|
127
|
+
displayValue = displayValue.join(', ');
|
|
128
|
+
}
|
|
129
|
+
this.contentInfoArray.push({
|
|
130
|
+
key,
|
|
131
|
+
label: this.capitalizeFirstLetter(key),
|
|
132
|
+
value: displayValue,
|
|
133
|
+
columnClass: this.getColumnClass(validIndex)
|
|
134
|
+
});
|
|
135
|
+
validIndex++;
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
capitalizeFirstLetter(str) {
|
|
140
|
+
if (!str)
|
|
141
|
+
return str;
|
|
142
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
143
|
+
}
|
|
144
|
+
getColumnClass(index) {
|
|
145
|
+
const columnClasses = ['six wide column', 'four wide column', 'two wide column'];
|
|
146
|
+
return columnClasses[index % columnClasses.length];
|
|
147
|
+
}
|
|
148
|
+
setPlayerType() {
|
|
149
|
+
const playerType = _.get(this.configService.playerConfig, 'playerType');
|
|
150
|
+
_.forIn(playerType, (value, key) => {
|
|
151
|
+
if (value.length) {
|
|
152
|
+
if (_.includes(value, _.get(this.contentDetails, 'contentData.mimeType'))) {
|
|
153
|
+
this.playerType = key;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
loadDefaultPlayer() {
|
|
159
|
+
// const iFrameSrc = this.configService.appConfig.PLAYER_CONFIG.baseURL + '&build_number=' + this.buildNumber;
|
|
160
|
+
const iFrameSrc = `/content/preview/preview.html?webview=true&build_number=2.8.0.e552fcd`;
|
|
161
|
+
setTimeout(() => {
|
|
162
|
+
const playerElement = this.contentIframe.nativeElement;
|
|
163
|
+
playerElement.src = iFrameSrc;
|
|
164
|
+
playerElement.onload = (event) => {
|
|
165
|
+
try {
|
|
166
|
+
this.adjustPlayerHeight();
|
|
167
|
+
// this.playerLoaded = true;
|
|
168
|
+
playerElement.contentWindow.initializePreview(this.playerConfig);
|
|
169
|
+
// playerElement.addEventListener('renderer:telemetry:event', telemetryEvent => this.generateContentReadEvent(telemetryEvent));
|
|
170
|
+
// window.frames['contentPlayer'].addEventListener('message', accessEvent => this.generateScoreSubmitEvent(accessEvent), false);
|
|
171
|
+
}
|
|
172
|
+
catch (err) {
|
|
173
|
+
console.log('loading default player failed', err);
|
|
174
|
+
// const prevUrls = this.navigationHelperService.history;
|
|
175
|
+
// if (this.isCdnWorking.toLowerCase() === 'yes' && prevUrls[prevUrls.length - 2]) {
|
|
176
|
+
// history.back();
|
|
177
|
+
// }
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
}, 0);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Adjust player height after load
|
|
184
|
+
*/
|
|
185
|
+
adjustPlayerHeight() {
|
|
186
|
+
const playerWidth = $('#contentPlayer').width();
|
|
187
|
+
if (playerWidth) {
|
|
188
|
+
const height = playerWidth * (9 / 16);
|
|
189
|
+
$('#contentPlayer').css('height', height + 'px');
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
eventHandler(e) { }
|
|
193
|
+
generateContentReadEvent(e, state) { }
|
|
194
|
+
setPlayerProperties(playerElement) {
|
|
195
|
+
playerElement.setAttribute('player-config', JSON.stringify(this.playerConfig));
|
|
196
|
+
playerElement.addEventListener('playerEvent', this.eventHandler);
|
|
197
|
+
playerElement.addEventListener('telemetryEvent', this.generateContentReadEvent);
|
|
198
|
+
}
|
|
199
|
+
loadPlayer() {
|
|
200
|
+
// Add initial safety check for ViewChild elements
|
|
201
|
+
const playerElement = this.getPlayerElement();
|
|
202
|
+
if (!playerElement?.nativeElement) {
|
|
203
|
+
console.warn('ViewChild elements not ready, scheduling player initialization...');
|
|
204
|
+
this.playerNeedsInitialization = true;
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
const checkCustomElement = (tagName) => {
|
|
208
|
+
return customElements.get(tagName) !== undefined;
|
|
209
|
+
};
|
|
210
|
+
const loadPlayerScript = (scriptSrc) => {
|
|
211
|
+
return new Promise((resolve, reject) => {
|
|
212
|
+
if (document.querySelector(`script[src*="${scriptSrc}"]`)) {
|
|
213
|
+
resolve();
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
const script = document.createElement('script');
|
|
217
|
+
script.src = scriptSrc;
|
|
218
|
+
script.onload = () => resolve();
|
|
219
|
+
script.onerror = () => reject(new Error(`Failed to load script: ${scriptSrc}`));
|
|
220
|
+
document.head.appendChild(script);
|
|
221
|
+
});
|
|
222
|
+
};
|
|
223
|
+
const ensurePlayerScriptLoaded = async (playerType) => {
|
|
224
|
+
const scriptMap = {
|
|
225
|
+
'pdf-player': '/assets/sunbird-pdf-player.js',
|
|
226
|
+
'epub-player': '/assets/sunbird-epub-player.js',
|
|
227
|
+
'video-player': '/assets/sunbird-video-player.js'
|
|
228
|
+
};
|
|
229
|
+
const scriptSrc = scriptMap[playerType];
|
|
230
|
+
if (scriptSrc) {
|
|
231
|
+
try {
|
|
232
|
+
await loadPlayerScript(scriptSrc);
|
|
233
|
+
}
|
|
234
|
+
catch (error) {
|
|
235
|
+
console.warn(`Failed to load ${playerType} script dynamically. Make sure the script is included in angular.json or loaded by the consuming application.`, error);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
};
|
|
239
|
+
const waitForCustomElement = async (tagName, playerType) => {
|
|
240
|
+
// First try to ensure the script is loaded
|
|
241
|
+
await ensurePlayerScriptLoaded(playerType);
|
|
242
|
+
return new Promise((resolve) => {
|
|
243
|
+
if (checkCustomElement(tagName)) {
|
|
244
|
+
resolve();
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
let attempts = 0;
|
|
248
|
+
const maxAttempts = ContentplayerPageComponent.CUSTOM_ELEMENT_MAX_ATTEMPTS;
|
|
249
|
+
const interval = setInterval(() => {
|
|
250
|
+
attempts++;
|
|
251
|
+
if (checkCustomElement(tagName)) {
|
|
252
|
+
clearInterval(interval);
|
|
253
|
+
resolve();
|
|
254
|
+
}
|
|
255
|
+
else if (attempts >= maxAttempts) {
|
|
256
|
+
clearInterval(interval);
|
|
257
|
+
resolve();
|
|
258
|
+
}
|
|
259
|
+
}, ContentplayerPageComponent.CUSTOM_ELEMENT_CHECK_INTERVAL);
|
|
260
|
+
}
|
|
261
|
+
});
|
|
262
|
+
};
|
|
263
|
+
const initializePlayer = (element) => {
|
|
264
|
+
setTimeout(() => {
|
|
265
|
+
try {
|
|
266
|
+
if (element.playerConfig !== this.playerConfig) {
|
|
267
|
+
element.playerConfig = this.playerConfig;
|
|
268
|
+
}
|
|
269
|
+
element.dispatchEvent(new CustomEvent('playerConfigUpdated', {
|
|
270
|
+
detail: this.playerConfig
|
|
271
|
+
}));
|
|
272
|
+
if (typeof element.ngOnInit === 'function') {
|
|
273
|
+
element.ngOnInit();
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
catch (error) {
|
|
277
|
+
console.error('Error initializing player:', error);
|
|
278
|
+
}
|
|
279
|
+
}, ContentplayerPageComponent.PLAYER_INITIALIZATION_TIMEOUT);
|
|
280
|
+
};
|
|
281
|
+
if (this.playerType === "pdf-player") {
|
|
282
|
+
waitForCustomElement('sunbird-pdf-player', 'pdf-player').then(() => {
|
|
283
|
+
if (checkCustomElement('sunbird-pdf-player') && this.pdfPlayer?.nativeElement) {
|
|
284
|
+
const pdfElement = document.createElement('sunbird-pdf-player');
|
|
285
|
+
this.setPlayerProperties(pdfElement);
|
|
286
|
+
this.pdfPlayer.nativeElement.innerHTML = ''; // Clear any existing content
|
|
287
|
+
this.pdfPlayer.nativeElement.appendChild(pdfElement);
|
|
288
|
+
initializePlayer(pdfElement);
|
|
289
|
+
}
|
|
290
|
+
else {
|
|
291
|
+
console.error('PDF player web component not available or ViewChild not ready. Falling back to default player.');
|
|
292
|
+
this.playerType = 'default-player';
|
|
293
|
+
this.loadDefaultPlayer();
|
|
294
|
+
}
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
else if (this.playerType === "epub-player") {
|
|
298
|
+
waitForCustomElement('sunbird-epub-player', 'epub-player').then(() => {
|
|
299
|
+
if (checkCustomElement('sunbird-epub-player') && this.epubPlayer?.nativeElement) {
|
|
300
|
+
const epubElement = document.createElement('sunbird-epub-player');
|
|
301
|
+
this.setPlayerProperties(epubElement);
|
|
302
|
+
this.epubPlayer.nativeElement.innerHTML = ''; // Clear any existing content
|
|
303
|
+
this.epubPlayer.nativeElement.appendChild(epubElement);
|
|
304
|
+
initializePlayer(epubElement);
|
|
305
|
+
}
|
|
306
|
+
else {
|
|
307
|
+
console.error('EPUB player web component not available or ViewChild not ready. Falling back to default player.');
|
|
308
|
+
this.playerType = 'default-player';
|
|
309
|
+
this.loadDefaultPlayer();
|
|
310
|
+
}
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
else if (this.playerType === "video-player") {
|
|
314
|
+
waitForCustomElement('sunbird-video-player', 'video-player').then(() => {
|
|
315
|
+
if (checkCustomElement('sunbird-video-player') && this.videoPlayer?.nativeElement) {
|
|
316
|
+
const videoElement = document.createElement('sunbird-video-player');
|
|
317
|
+
this.setPlayerProperties(videoElement);
|
|
318
|
+
this.videoPlayer.nativeElement.innerHTML = ''; // Clear any existing content
|
|
319
|
+
this.videoPlayer.nativeElement.appendChild(videoElement);
|
|
320
|
+
initializePlayer(videoElement);
|
|
321
|
+
}
|
|
322
|
+
else {
|
|
323
|
+
console.error('Video player web component not available or ViewChild not ready. Falling back to default player.');
|
|
324
|
+
this.playerType = 'default-player';
|
|
325
|
+
this.loadDefaultPlayer();
|
|
326
|
+
}
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContentplayerPageComponent, deps: [{ token: i1.EditorService }, { token: i2.PlayerService }, { token: i3.ConfigService }, { token: i4.FrameworkService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
331
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ContentplayerPageComponent, selector: "lib-contentplayer-page", inputs: { contentMetadata: "contentMetadata" }, viewQueries: [{ propertyName: "contentIframe", first: true, predicate: ["contentIframe"], descendants: true }, { propertyName: "pdfPlayer", first: true, predicate: ["pdfPlayer"], descendants: true }, { propertyName: "epubPlayer", first: true, predicate: ["epubPlayer"], descendants: true }, { propertyName: "videoPlayer", first: true, predicate: ["videoPlayer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"aspectratio\" data-ratio=\"16:9\" #aspectRatio>\n <iframe #contentIframe id=\"contentPlayer\" *ngIf=\"playerType === 'default-player'\" class=\"contentViewerIframeShadow\"\n name=\"contentPlayer\"></iframe>\n <ng-container *ngIf=\"playerType === 'epub-player'\">\n <div #epubPlayer></div>\n </ng-container>\n <ng-container *ngIf=\"playerType === 'pdf-player'\">\n <div #pdfPlayer></div>\n </ng-container>\n <ng-container *ngIf=\"playerType === 'video-player'\">\n <div #videoPlayer></div>\n </ng-container>\n</div>\n<div class=\"ui grid text-font pt-15 bg-white mx-0 mb-10\">\n <div *ngFor=\"let item of contentInfoArray\" [class]=\"item.columnClass\">\n <div class=\"sb-field-group\">\n <label class=\"sb-color-gray-100\">{{configService.labelConfig?.lbl?.[item.key] || item.label}}</label>\n <div class=\"fs-0-92\">{{item.value}}</div>\n </div>\n </div>\n</div>", styles: ["lib-contentplayer-page{height:380px}.aspectratio lib-contentplayer-page{display:block}.aspectratio{position:relative;height:0;width:100%}.aspectratio[data-ratio=\"16:9\"]{padding-top:56.25%}.aspectratio [data-ratio=\"4:3\"]{padding-top:75%}.aspectratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.aspectratio>* video,.aspectratio>* iframe{width:100%;height:100%!important}.aspectratio.player-fullscreen{width:100%;height:calc(100vh - 4rem)!important;position:fixed;top:calculateRem(0px);left:0;bottom:0;right:0;border:none;margin:0;padding:0;z-index:9999}.aspectratio.player-fullscreen iframe,.aspectratio.player-fullscreen video{width:100%;height:calc(100vh - 4rem)!important;background:var(--white)}.bg-white .fs-0-92{word-break:break-all}lib-contentplayer-page .contentViewerIframeShadow{width:100%;top:0!important}sunbird-pdf-player{display:block;height:550px}.video-js{width:100%!important;height:100%!important;padding-top:0!important}.video-js .vjs-tech{width:100%;height:100%}.text-font label,.text-font .fs-0-92{font-size:.8rem!important}.content-video__player__details{min-height:calculateRem(64px);padding:calculateRem(8px)}.content-video__player__title{font-weight:700;color:var(--primary-400);font-size:16px}.content-video__player__title__subtitle{display:flex;color:var(--gray-800)}.content-video__player__title__subtitle i{color:var(--yellow)}.content-video__player__screenpart{padding-left:calculateRem(16px)}.content-video__player__screenpart .separator{border-left:calculateRem(.5px) solid var(--gray-400);height:calculateRem(40px);width:.5rem}.content-video__content{overflow-y:auto;padding-right:calculateRem(8px);margin-right:calculateRem(-8px);padding-bottom:calculateRem(8px)}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
332
|
+
}
|
|
333
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContentplayerPageComponent, decorators: [{
|
|
334
|
+
type: Component,
|
|
335
|
+
args: [{ selector: 'lib-contentplayer-page', encapsulation: ViewEncapsulation.None, template: "<div class=\"aspectratio\" data-ratio=\"16:9\" #aspectRatio>\n <iframe #contentIframe id=\"contentPlayer\" *ngIf=\"playerType === 'default-player'\" class=\"contentViewerIframeShadow\"\n name=\"contentPlayer\"></iframe>\n <ng-container *ngIf=\"playerType === 'epub-player'\">\n <div #epubPlayer></div>\n </ng-container>\n <ng-container *ngIf=\"playerType === 'pdf-player'\">\n <div #pdfPlayer></div>\n </ng-container>\n <ng-container *ngIf=\"playerType === 'video-player'\">\n <div #videoPlayer></div>\n </ng-container>\n</div>\n<div class=\"ui grid text-font pt-15 bg-white mx-0 mb-10\">\n <div *ngFor=\"let item of contentInfoArray\" [class]=\"item.columnClass\">\n <div class=\"sb-field-group\">\n <label class=\"sb-color-gray-100\">{{configService.labelConfig?.lbl?.[item.key] || item.label}}</label>\n <div class=\"fs-0-92\">{{item.value}}</div>\n </div>\n </div>\n</div>", styles: ["lib-contentplayer-page{height:380px}.aspectratio lib-contentplayer-page{display:block}.aspectratio{position:relative;height:0;width:100%}.aspectratio[data-ratio=\"16:9\"]{padding-top:56.25%}.aspectratio [data-ratio=\"4:3\"]{padding-top:75%}.aspectratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.aspectratio>* video,.aspectratio>* iframe{width:100%;height:100%!important}.aspectratio.player-fullscreen{width:100%;height:calc(100vh - 4rem)!important;position:fixed;top:calculateRem(0px);left:0;bottom:0;right:0;border:none;margin:0;padding:0;z-index:9999}.aspectratio.player-fullscreen iframe,.aspectratio.player-fullscreen video{width:100%;height:calc(100vh - 4rem)!important;background:var(--white)}.bg-white .fs-0-92{word-break:break-all}lib-contentplayer-page .contentViewerIframeShadow{width:100%;top:0!important}sunbird-pdf-player{display:block;height:550px}.video-js{width:100%!important;height:100%!important;padding-top:0!important}.video-js .vjs-tech{width:100%;height:100%}.text-font label,.text-font .fs-0-92{font-size:.8rem!important}.content-video__player__details{min-height:calculateRem(64px);padding:calculateRem(8px)}.content-video__player__title{font-weight:700;color:var(--primary-400);font-size:16px}.content-video__player__title__subtitle{display:flex;color:var(--gray-800)}.content-video__player__title__subtitle i{color:var(--yellow)}.content-video__player__screenpart{padding-left:calculateRem(16px)}.content-video__player__screenpart .separator{border-left:calculateRem(.5px) solid var(--gray-400);height:calculateRem(40px);width:.5rem}.content-video__content{overflow-y:auto;padding-right:calculateRem(8px);margin-right:calculateRem(-8px);padding-bottom:calculateRem(8px)}\n"] }]
|
|
336
|
+
}], ctorParameters: function () { return [{ type: i1.EditorService }, { type: i2.PlayerService }, { type: i3.ConfigService }, { type: i4.FrameworkService }]; }, propDecorators: { contentIframe: [{
|
|
337
|
+
type: ViewChild,
|
|
338
|
+
args: ['contentIframe']
|
|
339
|
+
}], pdfPlayer: [{
|
|
340
|
+
type: ViewChild,
|
|
341
|
+
args: ["pdfPlayer", { static: false }]
|
|
342
|
+
}], epubPlayer: [{
|
|
343
|
+
type: ViewChild,
|
|
344
|
+
args: ["epubPlayer", { static: false }]
|
|
345
|
+
}], videoPlayer: [{
|
|
346
|
+
type: ViewChild,
|
|
347
|
+
args: ["videoPlayer", { static: false }]
|
|
348
|
+
}], contentMetadata: [{
|
|
349
|
+
type: Input
|
|
350
|
+
}] } });
|
|
351
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudHBsYXllci1wYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbGxlY3Rpb24tZWRpdG9yLWxpYnJhcnkvc3JjL2xpYi9jb21wb25lbnRzL2NvbnRlbnRwbGF5ZXItcGFnZS9jb250ZW50cGxheWVyLXBhZ2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29sbGVjdGlvbi1lZGl0b3ItbGlicmFyeS9zcmMvbGliL2NvbXBvbmVudHMvY29udGVudHBsYXllci1wYWdlL2NvbnRlbnRwbGF5ZXItcGFnZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBVSxTQUFTLEVBQWEsaUJBQWlCLEVBQW1DLE1BQU0sZUFBZSxDQUFDO0FBQy9JLE9BQU8sS0FBSyxDQUFDLE1BQU0sV0FBVyxDQUFDOzs7Ozs7O0FBYS9CLE1BQU0sT0FBTywwQkFBMEI7YUFDYixrQ0FBNkIsR0FBRyxHQUFHLENBQUM7YUFDcEMsa0NBQTZCLEdBQUcsR0FBRyxDQUFDO2FBQ3BDLGdDQUEyQixHQUFHLEdBQUcsQ0FBQztJQWUxRCxZQUFvQixhQUE0QixFQUFVLGFBQTRCLEVBQzdFLGFBQTRCLEVBQVUsZ0JBQWtDO1FBRDdELGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQVUsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDN0Usa0JBQWEsR0FBYixhQUFhLENBQWU7UUFBVSxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBTjFFLHFCQUFnQixHQUFVLEVBQUUsQ0FBQztRQUc1Qiw4QkFBeUIsR0FBRyxLQUFLLENBQUM7UUFDbEMsb0JBQWUsR0FBRyxLQUFLLENBQUM7SUFFcUQsQ0FBQztJQUV0RixRQUFRLEtBQUssQ0FBQztJQUVkLGVBQWU7UUFDYixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FB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O3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ0csV0FBVztzQkFBdkQsU0FBUzt1QkFBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNsQyxlQUFlO3NCQUF2QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQsIE9uQ2hhbmdlcywgVmlld0VuY2Fwc3VsYXRpb24sIEFmdGVyVmlld0luaXQsIEFmdGVyVmlld0NoZWNrZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEVkaXRvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lZGl0b3IvZWRpdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGxheWVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BsYXllci9wbGF5ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29uZmlnL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IEZyYW1ld29ya1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mcmFtZXdvcmsvZnJhbWV3b3JrLnNlcnZpY2UnO1xuZGVjbGFyZSB2YXIgJDogYW55O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItY29udGVudHBsYXllci1wYWdlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbnRlbnRwbGF5ZXItcGFnZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbnRlbnRwbGF5ZXItcGFnZS5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBDb250ZW50cGxheWVyUGFnZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBBZnRlclZpZXdDaGVja2VkIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgUExBWUVSX0lOSVRJQUxJWkFUSU9OX1RJTUVPVVQgPSAyMDA7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IENVU1RPTV9FTEVNRU5UX0NIRUNLX0lOVEVSVkFMID0gMTAwO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBDVVNUT01fRUxFTUVOVF9NQVhfQVRURU1QVFMgPSAxMDA7XG4gIEBWaWV3Q2hpbGQoJ2NvbnRlbnRJZnJhbWUnKSBjb250ZW50SWZyYW1lOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKFwicGRmUGxheWVyXCIsIHsgc3RhdGljOiBmYWxzZSB9KSBwZGZQbGF5ZXI6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoXCJlcHViUGxheWVyXCIsIHsgc3RhdGljOiBmYWxzZSB9KSBlcHViUGxheWVyOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKFwidmlkZW9QbGF5ZXJcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIHZpZGVvUGxheWVyOiBFbGVtZW50UmVmO1xuICBASW5wdXQoKSBjb250ZW50TWV0YWRhdGE6IGFueTtcbiAgcHVibGljIGNvbnRlbnREZXRhaWxzOiBhbnk7XG4gIHB1YmxpYyBwbGF5ZXJDb25maWc6IGFueTtcbiAgcHVibGljIGNvbnRlbnQ6IGFueTtcbiAgcHVibGljIGNvbnRlbnRJbmZvOiBhbnk7XG4gIHB1YmxpYyBjb250ZW50SW5mb0FycmF5OiBhbnlbXSA9IFtdO1xuICBwdWJsaWMgcGxheWVyVHlwZTogc3RyaW5nO1xuICBwdWJsaWMgY29udGVudElkOiBzdHJpbmc7XG4gIHByaXZhdGUgcGxheWVyTmVlZHNJbml0aWFsaXphdGlvbiA9IGZhbHNlO1xuICBwcml2YXRlIHZpZXdJbml0aWFsaXplZCA9IGZhbHNlO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVkaXRvclNlcnZpY2U6IEVkaXRvclNlcnZpY2UsIHByaXZhdGUgcGxheWVyU2VydmljZTogUGxheWVyU2VydmljZSxcbiAgICBwdWJsaWMgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSwgcHJpdmF0ZSBmcmFtZXdvcmtTZXJ2aWNlOiBGcmFtZXdvcmtTZXJ2aWNlKSB7IH1cblxuICBuZ09uSW5pdCgpIHsgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnZpZXdJbml0aWFsaXplZCA9IHRydWU7XG4gICAgaWYgKHRoaXMucGxheWVyTmVlZHNJbml0aWFsaXphdGlvbikge1xuICAgICAgdGhpcy5pbml0aWFsaXplQW5kTG9hZFBsYXllcigpO1xuICAgICAgdGhpcy5wbGF5ZXJOZWVkc0luaXRpYWxpemF0aW9uID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgIC8vIENoZWNrIGlmIHBsYXllciBlbGVtZW50cyBiZWNvbWUgYXZhaWxhYmxlIGFmdGVyIHRlbXBsYXRlIGNoYW5nZXNcbiAgICBpZiAodGhpcy5wbGF5ZXJOZWVkc0luaXRpYWxpemF0aW9uICYmIHRoaXMudmlld0luaXRpYWxpemVkKSB7XG4gICAgICB0aGlzLmNoZWNrQW5kSW5pdGlhbGl6ZVBsYXllcigpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCkge1xuICAgIHRoaXMuY29udGVudE1ldGFkYXRhID0gXy5nZXQodGhpcy5jb250ZW50TWV0YWRhdGEsICdkYXRhLm1ldGFkYXRhJykgfHwgdGhpcy5jb250ZW50TWV0YWRhdGE7XG4gICAgaWYgKHRoaXMuY29udGVudElkICE9PSB0aGlzLmNvbnRlbnRNZXRhZGF0YS5pZGVudGlmaWVyKSB7XG4gICAgICB0aGlzLmNvbnRlbnRJZCA9IHRoaXMuY29udGVudE1ldGFkYXRhLmlkZW50aWZpZXI7XG4gICAgICB0aGlzLmdldENvbnRlbnREZXRhaWxzKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q29udGVudERldGFpbHMoKSB7XG4gICAgdGhpcy5wbGF5ZXJUeXBlID0gJ2RlZmF1bHQtcGxheWVyJztcbiAgICB0aGlzLmVkaXRvclNlcnZpY2UuZmV0Y2hDb250ZW50RGV0YWlscyh0aGlzLmNvbnRlbnRJZCkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICB0aGlzLmNvbnRlbnREZXRhaWxzID0ge1xuICAgICAgICBjb250ZW50SWQ6IHRoaXMuY29udGVudElkLFxuICAgICAgICBjb250ZW50RGF0YTogXy5nZXQocmVzLCAncmVzdWx0LmNvbnRlbnQnKVxuICAgICAgfTtcblxuICAgICAgY29uc3QgYmFzZUNvbnRlbnRJbmZvID0ge1xuICAgICAgICBuYW1lOiBfLmdldCh0aGlzLmNvbnRlbnREZXRhaWxzLCAnY29udGVudERhdGEubmFtZScpLFxuICAgICAgICBhdXRob3I6IF8uZ2V0KHRoaXMuY29udGVudERldGFpbHMsICdjb250ZW50RGF0YS5hdXRob3InKSxcbiAgICAgICAgbGljZW5zZTogXy5nZXQodGhpcy5jb250ZW50RGV0YWlscywgJ2NvbnRlbnREYXRhLmxpY2Vuc2UnKSxcbiAgICAgICAgY29weXJpZ2h0OiBfLmdldCh0aGlzLmNvbnRlbnREZXRhaWxzLCAnY29udGVudERhdGEuY29weXJpZ2h0JylcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGZyYW1ld29ya0lkID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLm9yZ2FuaXNhdGlvbkZyYW1ld29yaztcbiAgICAgIGNvbnN0IGZyYW1ld29ya0RhdGEgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZnJhbWV3b3JrRGF0YTtcbiAgICAgIFxuICAgICAgaWYgKGZyYW1ld29ya0RhdGE/LltmcmFtZXdvcmtJZF0/LmNhdGVnb3JpZXMpIHtcbiAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IGZyYW1ld29ya0RhdGFbZnJhbWV3b3JrSWRdLmNhdGVnb3JpZXM7XG4gICAgICAgIGNvbnN0IGZyYW1ld29ya0NvZGVzID0gY2F0ZWdvcmllcy5tYXAoY2F0ZWdvcnkgPT4gY2F0ZWdvcnkuY29kZSk7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBtYXRjaGVkRmllbGRzID0gZnJhbWV3b3JrQ29kZXMucmVkdWNlKChhY2MsIGNvZGUpID0+IHtcbiAgICAgICAgICBpZiAoXy5oYXModGhpcy5jb250ZW50RGV0YWlscy5jb250ZW50RGF0YSwgY29kZSkpIHtcbiAgICAgICAgICAgIGFjY1tjb2RlXSA9IF8uZ2V0KHRoaXMuY29udGVudERldGFpbHMuY29udGVudERhdGEsIGNvZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCB7fSk7XG5cbiAgICAgICAgdGhpcy5jb250ZW50SW5mbyA9IHsgLi4uYmFzZUNvbnRlbnRJbmZvLCAuLi5tYXRjaGVkRmllbGRzIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbnRlbnRJbmZvID0gYmFzZUNvbnRlbnRJbmZvO1xuICAgICAgfVxuICAgICAgdGhpcy5wcmVwYXJlQ29udGVudEluZm9BcnJheSgpO1xuICAgICAgaWYgKHRoaXMudmlld0luaXRpYWxpemVkKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZUFuZExvYWRQbGF5ZXIoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGxheWVyTmVlZHNJbml0aWFsaXphdGlvbiA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpbml0aWFsaXplQW5kTG9hZFBsYXllcigpIHtcbiAgICB0aGlzLnBsYXllckNvbmZpZyA9IHRoaXMucGxheWVyU2VydmljZS5nZXRQbGF5ZXJDb25maWcodGhpcy5jb250ZW50RGV0YWlscyk7XG4gICAgdGhpcy5zZXRQbGF5ZXJUeXBlKCk7XG4gICAgaWYgKHRoaXMucGxheWVyVHlwZSA9PT0gJ2RlZmF1bHQtcGxheWVyJykge1xuICAgICAgdGhpcy5sb2FkRGVmYXVsdFBsYXllcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBsYXllckNvbmZpZy5jb25maWcgPSB7XG4gICAgICAgICd0cmFjZUlkJzogJ2FmaGpnaCcsXG4gICAgICAgICdzaWRlTWVudSc6IHtcbiAgICAgICAgICAnc2hvd0Rvd25sb2FkJzogdHJ1ZSxcbiAgICAgICAgICAnc2hvd0V4aXQnOiB0cnVlLFxuICAgICAgICAgICdzaG93UHJpbnQnOiB0cnVlLFxuICAgICAgICAgICdzaG93UmVwbGF5JzogdHJ1ZSxcbiAgICAgICAgICAnc2hvd1NoYXJlJzogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdGhpcy5sb2FkUGxheWVyKCk7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tBbmRJbml0aWFsaXplUGxheWVyKCkge1xuICAgIGNvbnN0IHBsYXllckVsZW1lbnQgPSB0aGlzLmdldFBsYXllckVsZW1lbnQoKTtcbiAgICBpZiAocGxheWVyRWxlbWVudCAmJiB0aGlzLnBsYXllck5lZWRzSW5pdGlhbGl6YXRpb24pIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUFuZExvYWRQbGF5ZXIoKTtcbiAgICAgIHRoaXMucGxheWVyTmVlZHNJbml0aWFsaXphdGlvbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGdldFBsYXllckVsZW1lbnQoKTogRWxlbWVudFJlZiB8IG51bGwge1xuICAgIHN3aXRjaCAodGhpcy5wbGF5ZXJUeXBlKSB7XG4gICAgICBjYXNlICdwZGYtcGxheWVyJzpcbiAgICAgICAgcmV0dXJuIHRoaXMucGRmUGxheWVyO1xuICAgICAgY2FzZSAnZXB1Yi1wbGF5ZXInOlxuICAgICAgICByZXR1cm4gdGhpcy5lcHViUGxheWVyO1xuICAgICAgY2FzZSAndmlkZW8tcGxheWVyJzpcbiAgICAgICAgcmV0dXJuIHRoaXMudmlkZW9QbGF5ZXI7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcmVwYXJlQ29udGVudEluZm9BcnJheSgpIHtcbiAgICB0aGlzLmNvbnRlbnRJbmZvQXJyYXkgPSBbXTtcbiAgICBsZXQgdmFsaWRJbmRleCA9IDA7XG5cbiAgICBPYmplY3Qua2V5cyh0aGlzLmNvbnRlbnRJbmZvKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGlmICh0aGlzLmNvbnRlbnRJbmZvW2tleV0gIT09IHVuZGVmaW5lZCAmJiB0aGlzLmNvbnRlbnRJbmZvW2tleV0gIT09IG51bGwgJiYgdGhpcy5jb250ZW50SW5mb1trZXldICE9PSAnJykge1xuICAgICAgICBsZXQgZGlzcGxheVZhbHVlID0gdGhpcy5jb250ZW50SW5mb1trZXldO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkaXNwbGF5VmFsdWUpKSB7XG4gICAgICAgICAgZGlzcGxheVZhbHVlID0gZGlzcGxheVZhbHVlLmpvaW4oJywgJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbnRlbnRJbmZvQXJyYXkucHVzaCh7XG4gICAgICAgICAga2V5LFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmNhcGl0YWxpemVGaXJzdExldHRlcihrZXkpLFxuICAgICAgICAgIHZhbHVlOiBkaXNwbGF5VmFsdWUsXG4gICAgICAgICAgY29sdW1uQ2xhc3M6IHRoaXMuZ2V0Q29sdW1uQ2xhc3ModmFsaWRJbmRleClcbiAgICAgICAgfSk7XG4gICAgICAgIHZhbGlkSW5kZXgrKztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNhcGl0YWxpemVGaXJzdExldHRlcihzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFzdHIpIHJldHVybiBzdHI7XG4gICAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKTtcbiAgfVxuXG4gIGdldENvbHVtbkNsYXNzKGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvbHVtbkNsYXNzZXMgPSBbJ3NpeCB3aWRlIGNvbHVtbicsICdmb3VyIHdpZGUgY29sdW1uJywgJ3R3byB3aWRlIGNvbHVtbiddO1xuICAgIHJldHVybiBjb2x1bW5DbGFzc2VzW2luZGV4ICUgY29sdW1uQ2xhc3Nlcy5sZW5ndGhdO1xuICB9XG5cbiAgc2V0UGxheWVyVHlwZSgpIHtcbiAgICBjb25zdCBwbGF5ZXJUeXBlID0gXy5nZXQodGhpcy5jb25maWdTZXJ2aWNlLnBsYXllckNvbmZpZywgJ3BsYXllclR5cGUnKTtcbiAgICBfLmZvckluKHBsYXllclR5cGUsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICBpZiAodmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIGlmIChfLmluY2x1ZGVzKHZhbHVlLCBfLmdldCh0aGlzLmNvbnRlbnREZXRhaWxzLCAnY29udGVudERhdGEubWltZVR5cGUnKSkpIHtcbiAgICAgICAgICB0aGlzLnBsYXllclR5cGUgPSBrZXk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGxvYWREZWZhdWx0UGxheWVyKCkge1xuICAgIC8vIGNvbnN0IGlGcmFtZVNyYyA9IHRoaXMuY29uZmlnU2VydmljZS5hcHBDb25maWcuUExBWUVSX0NPTkZJRy5iYXNlVVJMICsgJyZidWlsZF9udW1iZXI9JyArIHRoaXMuYnVpbGROdW1iZXI7XG4gICAgY29uc3QgaUZyYW1lU3JjID0gYC9jb250ZW50L3ByZXZpZXcvcHJldmlldy5odG1sP3dlYnZpZXc9dHJ1ZSZidWlsZF9udW1iZXI9Mi44LjAuZTU1MmZjZGA7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBwbGF5ZXJFbGVtZW50ID0gdGhpcy5jb250ZW50SWZyYW1lLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBwbGF5ZXJFbGVtZW50LnNyYyA9IGlGcmFtZVNyYztcbiAgICAgIHBsYXllckVsZW1lbnQub25sb2FkID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5hZGp1c3RQbGF5ZXJIZWlnaHQoKTtcbiAgICAgICAgICAvLyB0aGlzLnBsYXllckxvYWRlZCA9IHRydWU7XG4gICAgICAgICAgcGxheWVyRWxlbWVudC5jb250ZW50V2luZG93LmluaXRpYWxpemVQcmV2aWV3KHRoaXMucGxheWVyQ29uZmlnKTtcbiAgICAgICAgICAvLyBwbGF5ZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3JlbmRlcmVyOnRlbGVtZXRyeTpldmVudCcsIHRlbGVtZXRyeUV2ZW50ID0+IHRoaXMuZ2VuZXJhdGVDb250ZW50UmVhZEV2ZW50KHRlbGVtZXRyeUV2ZW50KSk7XG4gICAgICAgICAgLy8gd2luZG93LmZyYW1lc1snY29udGVudFBsYXllciddLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBhY2Nlc3NFdmVudCA9PiB0aGlzLmdlbmVyYXRlU2NvcmVTdWJtaXRFdmVudChhY2Nlc3NFdmVudCksIGZhbHNlKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ2xvYWRpbmcgZGVmYXVsdCBwbGF5ZXIgZmFpbGVkJywgZXJyKTtcbiAgICAgICAgICAvLyBjb25zdCBwcmV2VXJscyA9IHRoaXMubmF2aWdhdGlvbkhlbHBlclNlcnZpY2UuaGlzdG9yeTtcbiAgICAgICAgICAvLyBpZiAodGhpcy5pc0NkbldvcmtpbmcudG9Mb3dlckNhc2UoKSA9PT0gJ3llcycgJiYgcHJldlVybHNbcHJldlVybHMubGVuZ3RoIC0gMl0pIHtcbiAgICAgICAgICAvLyAgIGhpc3RvcnkuYmFjaygpO1xuICAgICAgICAgIC8vIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGp1c3QgcGxheWVyIGhlaWdodCBhZnRlciBsb2FkXG4gICAqL1xuICBhZGp1c3RQbGF5ZXJIZWlnaHQoKSB7XG4gICAgY29uc3QgcGxheWVyV2lkdGggPSAkKCcjY29udGVudFBsYXllcicpLndpZHRoKCk7XG4gICAgaWYgKHBsYXllcldpZHRoKSB7XG4gICAgICBjb25zdCBoZWlnaHQgPSBwbGF5ZXJXaWR0aCAqICg5IC8gMTYpO1xuICAgICAgJCgnI2NvbnRlbnRQbGF5ZXInKS5jc3MoJ2hlaWdodCcsIGhlaWdodCArICdweCcpO1xuICAgIH1cbiAgfVxuXG4gIGV2ZW50SGFuZGxlcihlKSB7IH1cblxuICBnZW5lcmF0ZUNvbnRlbnRSZWFkRXZlbnQoZSwgc3RhdGU/KSB7IH1cblxuICBzZXRQbGF5ZXJQcm9wZXJ0aWVzKHBsYXllckVsZW1lbnQ6IGFueSkge1xuICAgIHBsYXllckVsZW1lbnQuc2V0QXR0cmlidXRlKCdwbGF5ZXItY29uZmlnJywgSlNPTi5zdHJpbmdpZnkodGhpcy5wbGF5ZXJDb25maWcpKTtcbiAgICBwbGF5ZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXllckV2ZW50JywgdGhpcy5ldmVudEhhbmRsZXIpO1xuICAgIHBsYXllckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndGVsZW1ldHJ5RXZlbnQnLCB0aGlzLmdlbmVyYXRlQ29udGVudFJlYWRFdmVudCk7XG4gIH1cblxuICBsb2FkUGxheWVyKCkge1xuICAgIC8vIEFkZCBpbml0aWFsIHNhZmV0eSBjaGVjayBmb3IgVmlld0NoaWxkIGVsZW1lbnRzXG4gICAgY29uc3QgcGxheWVyRWxlbWVudCA9IHRoaXMuZ2V0UGxheWVyRWxlbWVudCgpO1xuICAgIGlmICghcGxheWVyRWxlbWVudD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgY29uc29sZS53YXJuKCdWaWV3Q2hpbGQgZWxlbWVudHMgbm90IHJlYWR5LCBzY2hlZHVsaW5nIHBsYXllciBpbml0aWFsaXphdGlvbi4uLicpO1xuICAgICAgdGhpcy5wbGF5ZXJOZWVkc0luaXRpYWxpemF0aW9uID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjaGVja0N1c3RvbUVsZW1lbnQgPSAodGFnTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gY3VzdG9tRWxlbWVudHMuZ2V0KHRhZ05hbWUpICE9PSB1bmRlZmluZWQ7XG4gICAgfTtcblxuICAgIGNvbnN0IGxvYWRQbGF5ZXJTY3JpcHQgPSAoc2NyaXB0U3JjOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBzY3JpcHRbc3JjKj1cIiR7c2NyaXB0U3JjfVwiXWApKSB7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICAgIHNjcmlwdC5zcmMgPSBzY3JpcHRTcmM7XG4gICAgICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKCk7XG4gICAgICAgIHNjcmlwdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvYWQgc2NyaXB0OiAke3NjcmlwdFNyY31gKSk7XG4gICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBlbnN1cmVQbGF5ZXJTY3JpcHRMb2FkZWQgPSBhc3luYyAocGxheWVyVHlwZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBjb25zdCBzY3JpcHRNYXAgPSB7XG4gICAgICAgICdwZGYtcGxheWVyJzogJy9hc3NldHMvc3VuYmlyZC1wZGYtcGxheWVyLmpzJyxcbiAgICAgICAgJ2VwdWItcGxheWVyJzogJy9hc3NldHMvc3VuYmlyZC1lcHViLXBsYXllci5qcycsXG4gICAgICAgICd2aWRlby1wbGF5ZXInOiAnL2Fzc2V0cy9zdW5iaXJkLXZpZGVvLXBsYXllci5qcydcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHNjcmlwdFNyYyA9IHNjcmlwdE1hcFtwbGF5ZXJUeXBlXTtcbiAgICAgIGlmIChzY3JpcHRTcmMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBsb2FkUGxheWVyU2NyaXB0KHNjcmlwdFNyYyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKGBGYWlsZWQgdG8gbG9hZCAke3BsYXllclR5cGV9IHNjcmlwdCBkeW5hbWljYWxseS4gTWFrZSBzdXJlIHRoZSBzY3JpcHQgaXMgaW5jbHVkZWQgaW4gYW5ndWxhci5qc29uIG9yIGxvYWRlZCBieSB0aGUgY29uc3VtaW5nIGFwcGxpY2F0aW9uLmAsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCB3YWl0Rm9yQ3VzdG9tRWxlbWVudCA9IGFzeW5jICh0YWdOYW1lOiBzdHJpbmcsIHBsYXllclR5cGU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgLy8gRmlyc3QgdHJ5IHRvIGVuc3VyZSB0aGUgc2NyaXB0IGlzIGxvYWRlZFxuICAgICAgYXdhaXQgZW5zdXJlUGxheWVyU2NyaXB0TG9hZGVkKHBsYXllclR5cGUpO1xuICAgICAgXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgaWYgKGNoZWNrQ3VzdG9tRWxlbWVudCh0YWdOYW1lKSkge1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgYXR0ZW1wdHMgPSAwO1xuICAgICAgICAgIGNvbnN0IG1heEF0dGVtcHRzID0gQ29udGVudHBsYXllclBhZ2VDb21wb25lbnQuQ1VTVE9NX0VMRU1FTlRfTUFYX0FUVEVNUFRTO1xuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgYXR0ZW1wdHMrKztcbiAgICAgICAgICAgIGlmIChjaGVja0N1c3RvbUVsZW1lbnQodGFnTmFtZSkpIHtcbiAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYXR0ZW1wdHMgPj0gbWF4QXR0ZW1wdHMpIHtcbiAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBDb250ZW50cGxheWVyUGFnZUNvbXBvbmVudC5DVVNUT01fRUxFTUVOVF9DSEVDS19JTlRFUlZBTCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBpbml0aWFsaXplUGxheWVyID0gKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKGVsZW1lbnQucGxheWVyQ29uZmlnICE9PSB0aGlzLnBsYXllckNvbmZpZykge1xuICAgICAgICAgICAgZWxlbWVudC5wbGF5ZXJDb25maWcgPSB0aGlzLnBsYXllckNvbmZpZztcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgncGxheWVyQ29uZmlnVXBkYXRlZCcsIHtcbiAgICAgICAgICAgIGRldGFpbDogdGhpcy5wbGF5ZXJDb25maWdcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKHR5cGVvZiBlbGVtZW50Lm5nT25Jbml0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBlbGVtZW50Lm5nT25Jbml0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluaXRpYWxpemluZyBwbGF5ZXI6JywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9LCBDb250ZW50cGxheWVyUGFnZUNvbXBvbmVudC5QTEFZRVJfSU5JVElBTElaQVRJT05fVElNRU9VVCk7XG4gICAgfTtcblxuICAgIGlmICh0aGlzLnBsYXllclR5cGUgPT09IFwicGRmLXBsYXllclwiKSB7XG4gICAgICB3YWl0Rm9yQ3VzdG9tRWxlbWVudCgnc3VuYmlyZC1wZGYtcGxheWVyJywgJ3BkZi1wbGF5ZXInKS50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKGNoZWNrQ3VzdG9tRWxlbWVudCgnc3VuYmlyZC1wZGYtcGxheWVyJykgJiYgdGhpcy5wZGZQbGF5ZXI/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICBjb25zdCBwZGZFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3VuYmlyZC1wZGYtcGxheWVyJykgYXMgYW55O1xuICAgICAgICAgIHRoaXMuc2V0UGxheWVyUHJvcGVydGllcyhwZGZFbGVtZW50KTtcbiAgICAgICAgICB0aGlzLnBkZlBsYXllci5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICcnOyAvLyBDbGVhciBhbnkgZXhpc3RpbmcgY29udGVudFxuICAgICAgICAgIHRoaXMucGRmUGxheWVyLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQocGRmRWxlbWVudCk7XG4gICAgICAgICAgaW5pdGlhbGl6ZVBsYXllcihwZGZFbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdQREYgcGxheWVyIHdlYiBjb21wb25lbnQgbm90IGF2YWlsYWJsZSBvciBWaWV3Q2hpbGQgbm90IHJlYWR5LiBGYWxsaW5nIGJhY2sgdG8gZGVmYXVsdCBwbGF5ZXIuJyk7XG4gICAgICAgICAgdGhpcy5wbGF5ZXJUeXBlID0gJ2RlZmF1bHQtcGxheWVyJztcbiAgICAgICAgICB0aGlzLmxvYWREZWZhdWx0UGxheWVyKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wbGF5ZXJUeXBlID09PSBcImVwdWItcGxheWVyXCIpIHtcbiAgICAgIHdhaXRGb3JDdXN0b21FbGVtZW50KCdzdW5iaXJkLWVwdWItcGxheWVyJywgJ2VwdWItcGxheWVyJykudGhlbigoKSA9PiB7XG4gICAgICAgIGlmIChjaGVja0N1c3RvbUVsZW1lbnQoJ3N1bmJpcmQtZXB1Yi1wbGF5ZXInKSAmJiB0aGlzLmVwdWJQbGF5ZXI/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICBjb25zdCBlcHViRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N1bmJpcmQtZXB1Yi1wbGF5ZXInKSBhcyBhbnk7XG4gICAgICAgICAgdGhpcy5zZXRQbGF5ZXJQcm9wZXJ0aWVzKGVwdWJFbGVtZW50KTtcbiAgICAgICAgICB0aGlzLmVwdWJQbGF5ZXIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnJzsgLy8gQ2xlYXIgYW55IGV4aXN0aW5nIGNvbnRlbnRcbiAgICAgICAgICB0aGlzLmVwdWJQbGF5ZXIubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZChlcHViRWxlbWVudCk7XG4gICAgICAgICAgaW5pdGlhbGl6ZVBsYXllcihlcHViRWxlbWVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRVBVQiBwbGF5ZXIgd2ViIGNvbXBvbmVudCBub3QgYXZhaWxhYmxlIG9yIFZpZXdDaGlsZCBub3QgcmVhZHkuIEZhbGxpbmcgYmFjayB0byBkZWZhdWx0IHBsYXllci4nKTtcbiAgICAgICAgICB0aGlzLnBsYXllclR5cGUgPSAnZGVmYXVsdC1wbGF5ZXInO1xuICAgICAgICAgIHRoaXMubG9hZERlZmF1bHRQbGF5ZXIoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnBsYXllclR5cGUgPT09IFwidmlkZW8tcGxheWVyXCIpIHtcbiAgICAgIHdhaXRGb3JDdXN0b21FbGVtZW50KCdzdW5iaXJkLXZpZGVvLXBsYXllcicsICd2aWRlby1wbGF5ZXInKS50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKGNoZWNrQ3VzdG9tRWxlbWVudCgnc3VuYmlyZC12aWRlby1wbGF5ZXInKSAmJiB0aGlzLnZpZGVvUGxheWVyPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgY29uc3QgdmlkZW9FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3VuYmlyZC12aWRlby1wbGF5ZXInKSBhcyBhbnk7XG4gICAgICAgICAgdGhpcy5zZXRQbGF5ZXJQcm9wZXJ0aWVzKHZpZGVvRWxlbWVudCk7XG4gICAgICAgICAgdGhpcy52aWRlb1BsYXllci5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICcnOyAvLyBDbGVhciBhbnkgZXhpc3RpbmcgY29udGVudFxuICAgICAgICAgIHRoaXMudmlkZW9QbGF5ZXIubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZCh2aWRlb0VsZW1lbnQpO1xuICAgICAgICAgIGluaXRpYWxpemVQbGF5ZXIodmlkZW9FbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdWaWRlbyBwbGF5ZXIgd2ViIGNvbXBvbmVudCBub3QgYXZhaWxhYmxlIG9yIFZpZXdDaGlsZCBub3QgcmVhZHkuIEZhbGxpbmcgYmFjayB0byBkZWZhdWx0IHBsYXllci4nKTtcbiAgICAgICAgICB0aGlzLnBsYXllclR5cGUgPSAnZGVmYXVsdC1wbGF5ZXInO1xuICAgICAgICAgIHRoaXMubG9hZERlZmF1bHRQbGF5ZXIoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYXNwZWN0cmF0aW9cIiBkYXRhLXJhdGlvPVwiMTY6OVwiICNhc3BlY3RSYXRpbz5cbiAgICA8aWZyYW1lICNjb250ZW50SWZyYW1lIGlkPVwiY29udGVudFBsYXllclwiICpuZ0lmPVwicGxheWVyVHlwZSA9PT0gJ2RlZmF1bHQtcGxheWVyJ1wiIGNsYXNzPVwiY29udGVudFZpZXdlcklmcmFtZVNoYWRvd1wiXG4gICAgICAgIG5hbWU9XCJjb250ZW50UGxheWVyXCI+PC9pZnJhbWU+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBsYXllclR5cGUgPT09ICdlcHViLXBsYXllcidcIj5cbiAgICAgICAgPGRpdiAjZXB1YlBsYXllcj48L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGxheWVyVHlwZSA9PT0gJ3BkZi1wbGF5ZXInXCI+XG4gICAgICAgIDxkaXYgI3BkZlBsYXllcj48L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGxheWVyVHlwZSA9PT0gJ3ZpZGVvLXBsYXllcidcIj5cbiAgICAgICAgPGRpdiAjdmlkZW9QbGF5ZXI+PC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJ1aSBncmlkIHRleHQtZm9udCBwdC0xNSBiZy13aGl0ZSBteC0wIG1iLTEwXCI+XG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjb250ZW50SW5mb0FycmF5XCIgW2NsYXNzXT1cIml0ZW0uY29sdW1uQ2xhc3NcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiLWZpZWxkLWdyb3VwXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzYi1jb2xvci1ncmF5LTEwMFwiPnt7Y29uZmlnU2VydmljZS5sYWJlbENvbmZpZz8ubGJsPy5baXRlbS5rZXldIHx8IGl0ZW0ubGFiZWx9fTwvbGFiZWw+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtMC05MlwiPnt7aXRlbS52YWx1ZX19PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
|