tnx-shared 5.3.344 → 5.3.345
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/bundles/tnx-shared.umd.js +27 -12
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +1 -1
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/components/file-explorer/file-viewer/file-viewer.component.d.ts +3 -0
- package/components/file-explorer/file-viewer/file-viewer.component.d.ts.map +1 -1
- package/esm2015/components/file-explorer/file-viewer/file-viewer.component.js +11 -4
- package/fesm2015/tnx-shared.js +10 -3
- package/fesm2015/tnx-shared.js.map +1 -1
- package/package.json +2 -2
- package/tnx-shared.metadata.json +1 -1
|
@@ -36,6 +36,9 @@ export declare class FileViewerComponent extends ComponentBase implements OnInit
|
|
|
36
36
|
showPrint: boolean;
|
|
37
37
|
showDownload: boolean;
|
|
38
38
|
showDelete: boolean;
|
|
39
|
+
fullScreen: boolean;
|
|
40
|
+
showModal: boolean;
|
|
41
|
+
styleClass: string;
|
|
39
42
|
onClose: EventEmitter<any>;
|
|
40
43
|
onRename: EventEmitter<any>;
|
|
41
44
|
onDelete: EventEmitter<any>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-viewer.component.d.ts","sourceRoot":"","sources":["../../../../../projects/tnx-shared/src/lib/components/file-explorer/file-viewer/file-viewer.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAS,MAAM,EAAqB,MAAM,eAAe,CAAC;AAEhH,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAGpD,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAOrE,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAEtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAK3D,qBAMa,mBAAoB,SAAQ,aAAc,YAAW,MAAM;
|
|
1
|
+
{"version":3,"file":"file-viewer.component.d.ts","sourceRoot":"","sources":["../../../../../projects/tnx-shared/src/lib/components/file-explorer/file-viewer/file-viewer.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAS,MAAM,EAAqB,MAAM,eAAe,CAAC;AAEhH,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAGpD,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAOrE,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAEtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAK3D,qBAMa,mBAAoB,SAAQ,aAAc,YAAW,MAAM;IAwBhE,OAAO,CAAC,oBAAoB;IAC5B,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,oBAAoB;IAC5B,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,mBAAmB;IAC3B,OAAO,CAAC,oBAAoB;IACrB,sBAAsB,EAAE,qBAAqB;IACpD,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,oBAAoB;IAC5B,OAAO,CAAC,cAAc;IACtB,SAAS,CAAC,SAAS,EAAE,QAAQ;IArCX,OAAO,EAAE,OAAO,CAAC;IAC9B,KAAK,EAAE,GAAG,CAEjB;IACO,QAAQ,UAAS;IACjB,SAAS,UAAQ;IACjB,YAAY,UAAQ;IACpB,UAAU,UAAQ;IAClB,UAAU,UAAQ;IAClB,SAAS,UAAQ;IACjB,UAAU,SAAM;IACf,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC,CAA2B;IACrD,QAAQ,EAAE,YAAY,CAAC,GAAG,CAAC,CAA2B;IACtD,QAAQ,EAAE,YAAY,CAAC,GAAG,CAAC,CAA2B;IAEhE,OAAO,CAAC,aAAa,CAAe;IACpC,IAAI,EAAE,GAAG,CAAM;IACf,IAAI,UAAS;IACb,UAAU,UAAS;IACnB,SAAS;;;;;;;;;MAAc;IACvB,cAAc,EAAE,GAAG,CAAC;IACpB,OAAO,CAAC,iBAAiB,CAAmB;gBAEhC,oBAAoB,EAAE,mBAAmB,EACzC,WAAW,EAAE,UAAU,EACvB,cAAc,EAAE,aAAa,EAC7B,oBAAoB,EAAE,mBAAmB,EACzC,eAAe,EAAE,cAAc,EAC/B,gBAAgB,EAAE,eAAe,EACjC,eAAe,EAAE,mBAAmB,EACpC,gBAAgB,EAAE,eAAe,EACjC,mBAAmB,EAAE,kBAAkB,EACvC,oBAAoB,EAAE,mBAAmB,EAC1C,sBAAsB,EAAE,qBAAqB,EAC5C,kBAAkB,EAAE,iBAAiB,EACrC,oBAAoB,EAAE,mBAAmB,EACzC,cAAc,EAAE,aAAa,EAC3B,SAAS,EAAE,QAAQ;IAOjC,QAAQ;IAIF,IAAI;IAMJ,SAAS;IA4Bf,QAAQ;IAyCR,4BAA4B;IAQ5B,mBAAmB;IAmBnB,gBAAgB,CAAC,GAAG,EAAE,MAAM;IAI5B,mBAAmB,CAAC,GAAG,EAAE,MAAM;IAI/B,cAAc,CAAC,GAAG,EAAE,MAAM;IAI1B,yBAAyB,CAAC,GAAG,EAAE,MAAM;IAIrC,kBAAkB,CAAC,aAAa,KAAA,EAAE,QAAQ,KAAA,EAAE,OAAO,KAAA;IA+BnD,QAAQ;IAYF,cAAc,CAAC,QAAQ,KAAA,EAAE,QAAQ,KAAA;IA+CjC,SAAS,CAAC,IAAI,KAAA,EAAE,WAAW,KAAA;IAqBjC,gBAAgB,CAAC,SAAS,KAAA,EAAE,cAAc,KAAA,EAAE,QAAQ,KAAA;IAyCpD,iBAAiB,CAAC,KAAK,KAAA;IAKvB,YAAY,CAAC,KAAK,MAAO;IASzB,KAAK;IAWL,QAAQ;IAKR,UAAU;IAoBV,UAAU;IASJ,iBAAiB;IAQvB,kBAAkB;IAIlB,QAAQ;IA0CR,kBAAkB;IAIlB,SAAS;IAIT,UAAU,CAAC,IAAI,KAAA;IAGf,2BAA2B,CAAC,OAAO,KAAA;CAOtC"}
|
|
@@ -47,6 +47,9 @@ export class FileViewerComponent extends ComponentBase {
|
|
|
47
47
|
this.showPrint = true;
|
|
48
48
|
this.showDownload = true;
|
|
49
49
|
this.showDelete = true;
|
|
50
|
+
this.fullScreen = true;
|
|
51
|
+
this.showModal = true;
|
|
52
|
+
this.styleClass = "";
|
|
50
53
|
this.onClose = new EventEmitter();
|
|
51
54
|
this.onRename = new EventEmitter();
|
|
52
55
|
this.onDelete = new EventEmitter();
|
|
@@ -421,16 +424,17 @@ export class FileViewerComponent extends ComponentBase {
|
|
|
421
424
|
return this.data.fileType == type;
|
|
422
425
|
}
|
|
423
426
|
getStyleClassByDocumentType(docType) {
|
|
427
|
+
let styleClass = this.styleClass;
|
|
424
428
|
if (docType === FILE_TYPES.PDF) {
|
|
425
|
-
return 'pdf-container';
|
|
429
|
+
return styleClass + ' ' + 'pdf-container';
|
|
426
430
|
}
|
|
427
|
-
return
|
|
431
|
+
return styleClass;
|
|
428
432
|
}
|
|
429
433
|
}
|
|
430
434
|
FileViewerComponent.decorators = [
|
|
431
435
|
{ type: Component, args: [{
|
|
432
436
|
selector: 'file-viewer',
|
|
433
|
-
template: "<p-sidebar #sidebar [showCloseIcon]=\"false\" [fullScreen]=\"true\" [appendTo]=\"'body'\"\n [styleClass]=\"getStyleClassByDocumentType(data.fileType)\" [(visible)]=\"show\">\n <ng-container *ngIf=\"data.fileType == fileTypes.PDF\">\n <div id=\"fileViewerHolder\" class=\"file-viewer-holder\">\n <div #headerdialogmaterial class=\"header-dialog-material\">\n <div class=\"flex-item\" style=\"margin: 0px auto;\">\n <a *ngIf=\"isDesktop()\" (click)=\"!isReadonly && renameFile()\" style=\"color: white;\"\n class=\"btn btn-secondary\">\n <i class=\"fas fa-file-alt\"></i><span class=\"cursor-pointer\">\n {{ data.name }}\n </span>\n </a>\n </div>\n <div class=\"flex-item\">\n <!-- UD-2450 - TuDN -->\n <!-- <a *ngIf=\"_deviceDetectorService.isDesktop() && showPrint\" pTooltip=\"In t\u00E0i li\u1EC7u\"\n tooltipPosition=\"bottom\" placeholder=\"Bottom\" style=\"color: white;\" (click)=\"print()\"\n class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-print\"></i></a> -->\n <a *ngIf=\"showDownload\" pTooltip=\"T\u1EA3i xu\u1ED1ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\"\n style=\"color: white;\" (click)=\"download()\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-download\"></i></a>\n <!-- End UD-2450 - TuDN -->\n <a *ngIf=\"!_deviceDetectorService.isDesktop() && !readonly\" pTooltip=\"\u0110\u1ED5i t\u00EAn\"\n tooltipPosition=\"bottom\" (click)=\"renameFile()\"\n class=\"cursor-pointer button-link btn btn-secondary\" style=\"color: white;\"><i\n class=\"fas fa-eraser\"></i></a>\n <a *ngIf=\"showDelete && !readonly\" pTooltip=\"X\u00F3a t\u1EC7p tin\" tooltipPosition=\"bottom\"\n (click)=\"deleteFile()\" class=\"cursor-pointer button-link btn btn-secondary\"\n style=\"color: white;\"><i class=\"far fa-trash-alt\"></i></a>\n <a (click)=\"onTopbarItemClick($event)\" role=\"menuitem\" style=\"color: white;\"\n *ngIf=\"!readonly && _deviceDetectorService.isDesktop()\"\n class=\"cursor-pointer button-link btn btn-secondary submenu\"> <i class=\"fas fa-ellipsis-v\"></i>\n <ul class=\"layout-menu fadeInDown\" *ngIf=\"model.activeTopbarItem\">\n <li *ngIf=\"_deviceDetectorService.isDesktop()\" role=\"menuitem\" class=\"cursor-pointer\">\n <a (click)=\"editFile()\" class=\"file-row-action\"><i class=\"fas fa-pen-square\"></i>S\u1EEDa\n file\n tr\u1EF1c\n tuy\u1EBFn</a>\n </li>\n <li *ngIf=\"!isReadonly\" role=\"menuitem\" class=\"cursor-pointer\">\n <a (click)=\"renameFile()\" class=\"file-row-action\"><i class=\"fas fa-eraser\"></i>\u0110\u1ED5i\n t\u00EAn</a>\n </li>\n <li *ngIf=\"!isReadonly\" role=\"menuitem\" class=\"cursor-pointer\">\n <a (click)=\"deleteFile()\" class=\"file-row-action\"><i class=\"far fa-trash-alt\"></i>X\u00F3a\n t\u1EC7p\n tin</a>\n </li>\n </ul>\n </a>\n <a pTooltip=\"\u0110\u00F3ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\" style=\"color: white;\"\n (click)=\"closeSidebar(null)\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-times\"></i></a>\n </div>\n </div>\n </div>\n <ngx-extended-pdf-viewer [src]=\"model.fileUrl\" useBrowserLocale=\"true\" height=\"calc(100vh - 50px)\"\n [enablePinchOnMobile]=\"true\" [filenameForDownload]=\"data.fileName\" [language]=\"'vi-VN'\"\n [showBookmarkButton]=\"false\" [showHandToolButton]=\"false\" [showOpenFileButton]=\"false\"\n [showUnverifiedSignatures]=\"true\">\n </ngx-extended-pdf-viewer>\n </ng-container>\n\n <ng-container\n *ngIf=\"data.fileType != fileTypes.IMAGE && data.fileType != fileTypes.VIDEO && data.fileType != fileTypes.AUDIO && data.fileType != fileTypes.PDF\">\n <div id=\"fileViewerHolder\" class=\"file-viewer-holder\">\n <div #headerdialogmaterial class=\"header-dialog-material\">\n <div class=\"flex-item\">\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"isDesktop()\" (click)=\"!isReadonly && renameFile()\" style=\"color: white;\"\n class=\"btn btn-secondary\">\n <i class=\"fas fa-file-alt\"></i><span class=\"cursor-pointer\">\n {{ data.name }}\n </span>\n </a>\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"isDesktop() && showPrint\" pTooltip=\"In t\u00E0i li\u1EC7u\" tooltipPosition=\"bottom\"\n placeholder=\"Bottom\" style=\"color: white;\" (click)=\"print()\"\n class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-print\"></i></a>\n <a *ngIf=\"showDownload\" pTooltip=\"T\u1EA3i xu\u1ED1ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\"\n style=\"color: white;\" (click)=\"download()\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-download\"></i></a>\n <a *ngIf=\"!readonly && showDelete && isDesktop()\" pTooltip=\"X\u00F3a t\u1EC7p tin\" tooltipPosition=\"bottom\"\n (click)=\"deleteFile()\" class=\"cursor-pointer button-link btn btn-secondary\"\n style=\"color: white;\"><i class=\"pi pi-trash\"></i></a>\n <a *ngIf=\"!readonly && isDesktop()\" pTooltip=\"S\u1EEDa file tr\u1EF1c tuy\u1EBFn\" (click)=\"editFile()\"\n placeholder=\"Bottom\" class=\"cursor-pointer button-link btn btn-secondary\" style=\"color: white;\">\n <i class=\"fas fa-pen-square\"></i></a>\n\n <a (click)=\"onTopbarItemClick($event)\" role=\"menuitem\" style=\"color: white;\" *ngIf=\"!isDesktop()\"\n class=\"cursor-pointer button-link btn btn-secondary submenu\">\n <i class=\"fas fa-ellipsis-v\"></i>\n <ul class=\"layout-menu fadeInDown\" *ngIf=\"model.activeTopbarItem\">\n <li *ngIf=\"!isReadonly\" role=\"menuitem\" class=\"cursor-pointer\">\n <a (click)=\"editFile()\" class=\"file-row-action\">\n <i class=\"fas fa-pen-square\"></i>S\u1EEDa file tr\u1EF1c tuy\u1EBFn</a>\n </li>\n <li *ngIf=\"!isReadonly\" role=\"menuitem\" class=\"cursor-pointer\">\n <a (click)=\"renameFile()\" class=\"file-row-action\"><i class=\"fas fa-eraser\"></i>\u0110\u1ED5i\n t\u00EAn</a>\n </li>\n <li *ngIf=\"!isReadonly && showDelete\" role=\"menuitem\" class=\"cursor-pointer\">\n <a (click)=\"deleteFile()\" class=\"file-row-action\"><i class=\"pi pi-trash\"></i>X\u00F3a\n t\u1EC7p tin</a>\n </li>\n </ul>\n </a>\n <a pTooltip=\"\u0110\u00F3ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\" style=\"color: white;\"\n (click)=\"closeSidebar(null)\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-times\"></i></a>\n </div>\n </div>\n\n <div class=\"dialog-material\" [class.view-file]=\"true\" [class.mobile]=\"!isDesktop()\"\n [class.view-file-text]=\"isFileType(fileTypes.TEXT)\"\n [class.view-file-spreadsheet]=\"isFileType(fileTypes.SPREADSHEET)\"\n [class.view-file-presentation]=\"isFileType(fileTypes.PRESENTATION)\">\n <div id=\"file-viewer\"></div>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"data.fileType == fileTypes.IMAGE && model.images.length > 0\">\n <div class=\"image-container\">\n <div #headerdialogmaterial class=\"header-dialog-material\">\n <div class=\"flex-item\">\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"isDesktop()\" (click)=\"!isReadonly && renameFile()\" style=\"color: white;\"\n class=\"btn btn-secondary\">\n <i class=\"fas fa-file-alt\"></i><span class=\"cursor-pointer\">\n {{ data.name }}\n </span>\n </a>\n </div>\n <div class=\"flex-item\">\n <a pTooltip=\"\u0110\u00F3ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\" style=\"color: white;\"\n (click)=\"closeSidebar(null)\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-times\"></i></a>\n </div>\n </div>\n\n <img *ngIf=\"model.images && model.images.length\" src=\"{{model.images[0]}}\" alt=\"Ch\u01B0a c\u00F3 \u1EA3nh\">\n </div>\n <!-- <app-image-viewer [showPDFOnlyLabel]=\"false\" [showPDFOnlyOption]=\"false\" [fullscreen]=\"false\"\n [images]=\"model.images\" [primaryColor]=\"'#3192e1'\" [idContainer]=\"'image-view-list'\"\n (mousedown)=\"closeSidebar($event)\" id=\"fileViewerHolder\" [loadOnInit]=\"true\">\n </app-image-viewer>\n <a style=\"color: white;\" (click)=\"closeSidebar(null)\" class=\"mobile-image-viewer-close\">\n <i class=\"far fa-times-circle\"></i></a> -->\n </ng-container>\n\n <ng-container *ngIf=\"data.fileType == fileTypes.VIDEO\">\n <div id=\"fileViewerHolder\" class=\"file-viewer-holder\" style=\"height: 100%;\">\n <div #headerdialogmaterial class=\"header-dialog-material\">\n <div class=\"flex-item\">\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"isDesktop()\" (click)=\"!isReadonly && renameFile()\" style=\"color: white;\"\n class=\"btn btn-secondary\">\n <i class=\"fas fa-file-alt\"></i><span class=\"cursor-pointer\">\n {{ data.name }}\n </span>\n </a>\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"showDownload\" pTooltip=\"T\u1EA3i xu\u1ED1ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\"\n style=\"color: white;\" (click)=\"download()\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-download\"></i>\n </a>\n <a *ngIf=\"!isReadonly && !isDesktop()\" (click)=\"renameFile()\" style=\"color: white;\"\n class=\"btn btn-secondary\">\n <i class=\"fas fa-file-alt\"></i><span class=\"cursor-pointer\">\n {{ data.name }}\n </span>\n </a>\n <a *ngIf=\"!readonly && showDelete\" pTooltip=\"X\u00F3a t\u1EC7p tin\" tooltipPosition=\"bottom\"\n (click)=\"deleteFile()\" class=\"cursor-pointer button-link btn btn-secondary\"\n style=\"color: white;\"><i class=\"pi pi-trash\"></i></a>\n <a pTooltip=\"\u0110\u00F3ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\" style=\"color: white;\"\n (click)=\"closeSidebar(null)\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-times\"></i></a>\n </div>\n </div>\n\n <div class=\"dialog-material\" [class.view-file]=\"true\" [class.mobile]=\"!isDesktop()\"\n style=\"width: 80%; margin: auto; height: 100%; border-radius: 0px;\">\n <video width=\"100%\" height=\"100%\" style=\"margin-top: 50px;\" autoplay controls src=\"{{model.fileUrl}}\">\n Tr\u00ECnh duy\u1EC7t kh\u00F4ng h\u1ED7 tr\u1EE3 m\u1EDF video.\n </video>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"data.fileType == fileTypes.AUDIO\">\n <div id=\"fileViewerHolder\" class=\"file-viewer-holder\" (mousedown)=\"closeSidebar($event)\" style=\"height: 100%;\">\n <div #headerdialogmaterial class=\"header-dialog-material\">\n <div class=\"flex-item\">\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"isDesktop()\" (click)=\"!isReadonly && renameFile()\" style=\"color: white;\"\n class=\"btn btn-secondary\">\n <i class=\"fas fa-file-alt\"></i><span class=\"cursor-pointer\">\n {{ data.name }}\n </span>\n </a>\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"showDownload\" pTooltip=\"T\u1EA3i xu\u1ED1ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\"\n style=\"color: white;\" (click)=\"download()\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-download\"></i></a>\n <a *ngIf=\"!isReadonly && showDelete\" pTooltip=\"X\u00F3a t\u1EC7p tin\" tooltipPosition=\"bottom\"\n (click)=\"deleteFile()\" class=\"cursor-pointer button-link btn btn-secondary\"\n style=\"color: white;\"><i class=\"pi pi-trash\"></i></a>\n <a pTooltip=\"\u0110\u00F3ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\" style=\"color: white;\"\n (click)=\"closeSidebar(null)\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-times\"></i></a>\n </div>\n </div>\n <audio controls autoplay src=\"{{model.fileUrl}}\"\n style=\"margin: auto;position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);\">\n Tr\u00ECnh duy\u1EC7t kh\u00F4ng h\u1ED7 tr\u1EE3 ph\u00E1t audio. </audio>\n </div>\n </ng-container>\n\n</p-sidebar>\n\n<tn-dialog *ngIf=\"renameFileForm.show\" #dialog [styleClass]=\"'address-form'\"\n [header]=\"renameFileForm.header | translate\" [popupSize]=\"renameFileForm.popupSize\" (onHide)=\"onCancelRenameFile()\">\n <file-form #formBase [parentModel]=\"model\" [parentContext]=\"context\" [model]=\"renameFileForm.formData\"\n (onSaved)=\"onSavedRenameFile()\" (onCancel)=\"onCancelRenameFile()\">\n </file-form>\n</tn-dialog>",
|
|
437
|
+
template: "<p-sidebar #sidebar [showCloseIcon]=\"false\" [fullScreen]=\"fullScreen\" [appendTo]=\"'body'\" [modal]=\"showModal\"\n [styleClass]=\"getStyleClassByDocumentType(data.fileType)\" [(visible)]=\"show\">\n <ng-container *ngIf=\"data.fileType == fileTypes.PDF\">\n <div id=\"fileViewerHolder\" class=\"file-viewer-holder\">\n <div #headerdialogmaterial class=\"header-dialog-material\">\n <div class=\"flex-item\" style=\"margin: 0px auto;\">\n <a *ngIf=\"isDesktop()\" (click)=\"!isReadonly && renameFile()\" style=\"color: white;\"\n class=\"btn btn-secondary\">\n <i class=\"fas fa-file-alt\"></i><span class=\"cursor-pointer\">\n {{ data.name }}\n </span>\n </a>\n </div>\n <div class=\"flex-item\">\n <!-- UD-2450 - TuDN -->\n <!-- <a *ngIf=\"_deviceDetectorService.isDesktop() && showPrint\" pTooltip=\"In t\u00E0i li\u1EC7u\"\n tooltipPosition=\"bottom\" placeholder=\"Bottom\" style=\"color: white;\" (click)=\"print()\"\n class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-print\"></i></a> -->\n <a *ngIf=\"showDownload\" pTooltip=\"T\u1EA3i xu\u1ED1ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\"\n style=\"color: white;\" (click)=\"download()\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-download\"></i></a>\n <!-- End UD-2450 - TuDN -->\n <a *ngIf=\"!_deviceDetectorService.isDesktop() && !readonly\" pTooltip=\"\u0110\u1ED5i t\u00EAn\"\n tooltipPosition=\"bottom\" (click)=\"renameFile()\"\n class=\"cursor-pointer button-link btn btn-secondary\" style=\"color: white;\"><i\n class=\"fas fa-eraser\"></i></a>\n <a *ngIf=\"showDelete && !readonly\" pTooltip=\"X\u00F3a t\u1EC7p tin\" tooltipPosition=\"bottom\"\n (click)=\"deleteFile()\" class=\"cursor-pointer button-link btn btn-secondary\"\n style=\"color: white;\"><i class=\"far fa-trash-alt\"></i></a>\n <a (click)=\"onTopbarItemClick($event)\" role=\"menuitem\" style=\"color: white;\"\n *ngIf=\"!readonly && _deviceDetectorService.isDesktop()\"\n class=\"cursor-pointer button-link btn btn-secondary submenu\"> <i class=\"fas fa-ellipsis-v\"></i>\n <ul class=\"layout-menu fadeInDown\" *ngIf=\"model.activeTopbarItem\">\n <li *ngIf=\"_deviceDetectorService.isDesktop()\" role=\"menuitem\" class=\"cursor-pointer\">\n <a (click)=\"editFile()\" class=\"file-row-action\"><i class=\"fas fa-pen-square\"></i>S\u1EEDa\n file\n tr\u1EF1c\n tuy\u1EBFn</a>\n </li>\n <li *ngIf=\"!isReadonly\" role=\"menuitem\" class=\"cursor-pointer\">\n <a (click)=\"renameFile()\" class=\"file-row-action\"><i class=\"fas fa-eraser\"></i>\u0110\u1ED5i\n t\u00EAn</a>\n </li>\n <li *ngIf=\"!isReadonly\" role=\"menuitem\" class=\"cursor-pointer\">\n <a (click)=\"deleteFile()\" class=\"file-row-action\"><i class=\"far fa-trash-alt\"></i>X\u00F3a\n t\u1EC7p\n tin</a>\n </li>\n </ul>\n </a>\n <a pTooltip=\"\u0110\u00F3ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\" style=\"color: white;\"\n (click)=\"closeSidebar(null)\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-times\"></i></a>\n </div>\n </div>\n </div>\n <ngx-extended-pdf-viewer [src]=\"model.fileUrl\" useBrowserLocale=\"true\" height=\"calc(100vh - 50px)\"\n [enablePinchOnMobile]=\"true\" [filenameForDownload]=\"data.fileName\" [language]=\"'vi-VN'\"\n [showBookmarkButton]=\"false\" [showHandToolButton]=\"false\" [showOpenFileButton]=\"false\"\n [showUnverifiedSignatures]=\"true\">\n </ngx-extended-pdf-viewer>\n </ng-container>\n\n <ng-container\n *ngIf=\"data.fileType != fileTypes.IMAGE && data.fileType != fileTypes.VIDEO && data.fileType != fileTypes.AUDIO && data.fileType != fileTypes.PDF\">\n <div id=\"fileViewerHolder\" class=\"file-viewer-holder\">\n <div #headerdialogmaterial class=\"header-dialog-material\">\n <div class=\"flex-item\">\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"isDesktop()\" (click)=\"!isReadonly && renameFile()\" style=\"color: white;\"\n class=\"btn btn-secondary\">\n <i class=\"fas fa-file-alt\"></i><span class=\"cursor-pointer\">\n {{ data.name }}\n </span>\n </a>\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"isDesktop() && showPrint\" pTooltip=\"In t\u00E0i li\u1EC7u\" tooltipPosition=\"bottom\"\n placeholder=\"Bottom\" style=\"color: white;\" (click)=\"print()\"\n class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-print\"></i></a>\n <a *ngIf=\"showDownload\" pTooltip=\"T\u1EA3i xu\u1ED1ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\"\n style=\"color: white;\" (click)=\"download()\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-download\"></i></a>\n <a *ngIf=\"!readonly && showDelete && isDesktop()\" pTooltip=\"X\u00F3a t\u1EC7p tin\" tooltipPosition=\"bottom\"\n (click)=\"deleteFile()\" class=\"cursor-pointer button-link btn btn-secondary\"\n style=\"color: white;\"><i class=\"pi pi-trash\"></i></a>\n <a *ngIf=\"!readonly && isDesktop()\" pTooltip=\"S\u1EEDa file tr\u1EF1c tuy\u1EBFn\" (click)=\"editFile()\"\n placeholder=\"Bottom\" class=\"cursor-pointer button-link btn btn-secondary\" style=\"color: white;\">\n <i class=\"fas fa-pen-square\"></i></a>\n\n <a (click)=\"onTopbarItemClick($event)\" role=\"menuitem\" style=\"color: white;\" *ngIf=\"!isDesktop()\"\n class=\"cursor-pointer button-link btn btn-secondary submenu\">\n <i class=\"fas fa-ellipsis-v\"></i>\n <ul class=\"layout-menu fadeInDown\" *ngIf=\"model.activeTopbarItem\">\n <li *ngIf=\"!isReadonly\" role=\"menuitem\" class=\"cursor-pointer\">\n <a (click)=\"editFile()\" class=\"file-row-action\">\n <i class=\"fas fa-pen-square\"></i>S\u1EEDa file tr\u1EF1c tuy\u1EBFn</a>\n </li>\n <li *ngIf=\"!isReadonly\" role=\"menuitem\" class=\"cursor-pointer\">\n <a (click)=\"renameFile()\" class=\"file-row-action\"><i class=\"fas fa-eraser\"></i>\u0110\u1ED5i\n t\u00EAn</a>\n </li>\n <li *ngIf=\"!isReadonly && showDelete\" role=\"menuitem\" class=\"cursor-pointer\">\n <a (click)=\"deleteFile()\" class=\"file-row-action\"><i class=\"pi pi-trash\"></i>X\u00F3a\n t\u1EC7p tin</a>\n </li>\n </ul>\n </a>\n <a pTooltip=\"\u0110\u00F3ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\" style=\"color: white;\"\n (click)=\"closeSidebar(null)\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-times\"></i></a>\n </div>\n </div>\n\n <div class=\"dialog-material\" [class.view-file]=\"true\" [class.mobile]=\"!isDesktop()\"\n [class.view-file-text]=\"isFileType(fileTypes.TEXT)\"\n [class.view-file-spreadsheet]=\"isFileType(fileTypes.SPREADSHEET)\"\n [class.view-file-presentation]=\"isFileType(fileTypes.PRESENTATION)\">\n <div id=\"file-viewer\"></div>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"data.fileType == fileTypes.IMAGE && model.images.length > 0\">\n <div class=\"image-container\">\n <div #headerdialogmaterial class=\"header-dialog-material\">\n <div class=\"flex-item\">\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"isDesktop()\" (click)=\"!isReadonly && renameFile()\" style=\"color: white;\"\n class=\"btn btn-secondary\">\n <i class=\"fas fa-file-alt\"></i><span class=\"cursor-pointer\">\n {{ data.name }}\n </span>\n </a>\n </div>\n <div class=\"flex-item\">\n <a pTooltip=\"\u0110\u00F3ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\" style=\"color: white;\"\n (click)=\"closeSidebar(null)\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-times\"></i></a>\n </div>\n </div>\n\n <img *ngIf=\"model.images && model.images.length\" src=\"{{model.images[0]}}\" alt=\"Ch\u01B0a c\u00F3 \u1EA3nh\">\n </div>\n <!-- <app-image-viewer [showPDFOnlyLabel]=\"false\" [showPDFOnlyOption]=\"false\" [fullscreen]=\"false\"\n [images]=\"model.images\" [primaryColor]=\"'#3192e1'\" [idContainer]=\"'image-view-list'\"\n (mousedown)=\"closeSidebar($event)\" id=\"fileViewerHolder\" [loadOnInit]=\"true\">\n </app-image-viewer>\n <a style=\"color: white;\" (click)=\"closeSidebar(null)\" class=\"mobile-image-viewer-close\">\n <i class=\"far fa-times-circle\"></i></a> -->\n </ng-container>\n\n <ng-container *ngIf=\"data.fileType == fileTypes.VIDEO\">\n <div id=\"fileViewerHolder\" class=\"file-viewer-holder\" style=\"height: 100%;\">\n <div #headerdialogmaterial class=\"header-dialog-material\">\n <div class=\"flex-item\">\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"isDesktop()\" (click)=\"!isReadonly && renameFile()\" style=\"color: white;\"\n class=\"btn btn-secondary\">\n <i class=\"fas fa-file-alt\"></i><span class=\"cursor-pointer\">\n {{ data.name }}\n </span>\n </a>\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"showDownload\" pTooltip=\"T\u1EA3i xu\u1ED1ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\"\n style=\"color: white;\" (click)=\"download()\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-download\"></i>\n </a>\n <a *ngIf=\"!isReadonly && !isDesktop()\" (click)=\"renameFile()\" style=\"color: white;\"\n class=\"btn btn-secondary\">\n <i class=\"fas fa-file-alt\"></i><span class=\"cursor-pointer\">\n {{ data.name }}\n </span>\n </a>\n <a *ngIf=\"!readonly && showDelete\" pTooltip=\"X\u00F3a t\u1EC7p tin\" tooltipPosition=\"bottom\"\n (click)=\"deleteFile()\" class=\"cursor-pointer button-link btn btn-secondary\"\n style=\"color: white;\"><i class=\"pi pi-trash\"></i></a>\n <a pTooltip=\"\u0110\u00F3ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\" style=\"color: white;\"\n (click)=\"closeSidebar(null)\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-times\"></i></a>\n </div>\n </div>\n\n <div class=\"dialog-material\" [class.view-file]=\"true\" [class.mobile]=\"!isDesktop()\"\n style=\"width: 80%; margin: auto; height: 100%; border-radius: 0px;\">\n <video width=\"100%\" height=\"100%\" style=\"margin-top: 50px;\" autoplay controls src=\"{{model.fileUrl}}\">\n Tr\u00ECnh duy\u1EC7t kh\u00F4ng h\u1ED7 tr\u1EE3 m\u1EDF video.\n </video>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"data.fileType == fileTypes.AUDIO\">\n <div id=\"fileViewerHolder\" class=\"file-viewer-holder\" (mousedown)=\"closeSidebar($event)\" style=\"height: 100%;\">\n <div #headerdialogmaterial class=\"header-dialog-material\">\n <div class=\"flex-item\">\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"isDesktop()\" (click)=\"!isReadonly && renameFile()\" style=\"color: white;\"\n class=\"btn btn-secondary\">\n <i class=\"fas fa-file-alt\"></i><span class=\"cursor-pointer\">\n {{ data.name }}\n </span>\n </a>\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"showDownload\" pTooltip=\"T\u1EA3i xu\u1ED1ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\"\n style=\"color: white;\" (click)=\"download()\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-download\"></i></a>\n <a *ngIf=\"!isReadonly && showDelete\" pTooltip=\"X\u00F3a t\u1EC7p tin\" tooltipPosition=\"bottom\"\n (click)=\"deleteFile()\" class=\"cursor-pointer button-link btn btn-secondary\"\n style=\"color: white;\"><i class=\"pi pi-trash\"></i></a>\n <a pTooltip=\"\u0110\u00F3ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\" style=\"color: white;\"\n (click)=\"closeSidebar(null)\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-times\"></i></a>\n </div>\n </div>\n <audio controls autoplay src=\"{{model.fileUrl}}\"\n style=\"margin: auto;position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);\">\n Tr\u00ECnh duy\u1EC7t kh\u00F4ng h\u1ED7 tr\u1EE3 ph\u00E1t audio. </audio>\n </div>\n </ng-container>\n\n</p-sidebar>\n\n<tn-dialog *ngIf=\"renameFileForm.show\" #dialog [styleClass]=\"'address-form'\"\n [header]=\"renameFileForm.header | translate\" [popupSize]=\"renameFileForm.popupSize\" (onHide)=\"onCancelRenameFile()\">\n <file-form #formBase [parentModel]=\"model\" [parentContext]=\"context\" [model]=\"renameFileForm.formData\"\n (onSaved)=\"onSavedRenameFile()\" (onCancel)=\"onCancelRenameFile()\">\n </file-form>\n</tn-dialog>",
|
|
434
438
|
providers: [ComponentContextService],
|
|
435
439
|
styles: ["::ng-deep .pdf-container ngx-extended-pdf-viewer #outerContainer{top:51px}.view-file{height:92vh}.dialog-material{display:block;border-radius:4px;box-sizing:border-box;overflow:hidden;outline:0;min-height:inherit;max-height:inherit;width:50vw;width:100%}.dialog-material.view-file-text{width:85%;margin:0 auto}.dialog-material.view-file-text.mobile{width:100%;margin:0 auto}.header-dialog-material{display:flex;flex-direction:row;justify-content:space-between;padding:5px 15px;box-sizing:border-box;outline:0;height:50px;line-height:50px;background:#3192e1;position:absolute;pointer-events:auto;left:0;right:0;top:0;width:auto}.header-dialog-material .flex-item{line-height:40px}.header-dialog-material .flex-item .cursor-pointer{cursor:pointer;display:inline-block;padding:0 15px}.header-dialog-material .flex-item .cursor-pointer.submenu{position:relative}.header-dialog-material .flex-item .cursor-pointer.submenu ul{display:flex;position:absolute;top:25px;right:0;align-content:flex-end;flex-direction:column;width:230px;border-radius:2px;padding:5px 0;background:#fff;box-shadow:0 6px 12px rgba(0,0,0,.175);z-index:1}.header-dialog-material .flex-item .cursor-pointer.submenu ul li{padding:0}.header-dialog-material .flex-item .cursor-pointer.submenu ul li a{padding:0 0 0 5px;line-height:40px}.header-dialog-material .flex-item .cursor-pointer.submenu ul li a:hover{background:#f5f5f5}.header-dialog-material ul:before{top:-8px;right:8px;left:auto;width:0;height:0;border-left:8px solid transparent;border-right:8px solid transparent;border-bottom:10px solid #fff;content:\" \";position:absolute}.mat-dialog-content{display:block;margin:0;padding:0;max-height:100vh;max-width:50vw;overflow:auto;-webkit-overflow-scrolling:touch}::ng-deep .cdk-overlay-container{position:fixed;z-index:1000;background:rgba(0,0,0,.7)!important}::ng-deep .cdk-overlay-backdrop{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:rgba(0,0,0,0);transition:opacity .4s cubic-bezier(.25,.8,.25,1);opacity:0}::ng-deep .mat-dialog-container{display:block;padding:0!important}::ng-deep .cdk-overlay-pane{max-height:100%}.button-link:hover{transition:background-color .1s,opacity .1s;background-image:none;background-color:hsla(0,0%,100%,.25)}.file-row-action i{margin-right:5px;width:40px;text-align:center}.file-row-action{line-height:34px;width:100%;display:block;color:#212529}.layout-menu li a{border:none;text-align:left}.layout-menu li a i:first-child{color:#666;font-size:1em}.footer-page{position:absolute;left:50%;margin-right:-50%;transform:translate(-50%);border-radius:3px;bottom:12px;z-index:3;overflow:hidden}.footer-page-label{border-right:1px solid hsla(0,0%,100%,.2);display:inline-block;font-size:13px;line-height:44px;height:44px;vertical-align:middle;background:#000}.footer-page-label-page{display:inline-block;margin-left:12px;vertical-align:middle;background:rgba(0,0,0,.75);color:#fff}.footer-page-label-numberpage{display:inline-block;text-align:center;vertical-align:middle;width:48px;color:#fff}.footer-page-label-space{display:inline-block;margin-left:12px;vertical-align:middle;color:#fff}.footer-page-label-totalpage{display:inline-block;text-align:center;vertical-align:middle;width:48px;color:#fff}::ng-deep p-table .ui-table-tbody>tr>td{overflow:unset}::ng-deep .ui-sidebar-left.ui-sidebar-active{padding-top:55px;background:rgba(0,0,0,.4);border:0}::ng-deep .layout-wrapper .layout-menu-container{border-radius:unset}::ng-deep .p-sidebar{padding:0!important;background-color:#000}@media print{::ng-deep body *{visibility:visible!important}}::ng-deep .image-container{display:flex;justify-content:center;background-color:#000}::ng-deep .image-container .image-container-toolbar{display:flex;justify-content:flex-end}::ng-deep .image-container>img{height:calc(100ch - 50px)!important;max-height:100%!important;margin-top:50px}"]
|
|
436
440
|
},] }
|
|
@@ -459,8 +463,11 @@ FileViewerComponent.propDecorators = {
|
|
|
459
463
|
showPrint: [{ type: Input }],
|
|
460
464
|
showDownload: [{ type: Input }],
|
|
461
465
|
showDelete: [{ type: Input }],
|
|
466
|
+
fullScreen: [{ type: Input }],
|
|
467
|
+
showModal: [{ type: Input }],
|
|
468
|
+
styleClass: [{ type: Input }],
|
|
462
469
|
onClose: [{ type: Output }],
|
|
463
470
|
onRename: [{ type: Output }],
|
|
464
471
|
onDelete: [{ type: Output }]
|
|
465
472
|
};
|
|
466
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS12aWV3ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1leHBsb3Jlci9maWxlLXZpZXdlci9maWxlLXZpZXdlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRXZFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FB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ZW5CLGVBQWU7WUFNZixrQkFBa0I7WUFUbEIsbUJBQW1CO1lBYm5CLHFCQUFxQjtZQXFCckIsaUJBQWlCO1lBRmpCLG1CQUFtQjtZQUluQixhQUFhO1lBekJ3QixRQUFROzs7c0JBcUNqRCxTQUFTLFNBQUMsU0FBUztvQkFDbkIsS0FBSzt1QkFHTCxLQUFLO3dCQUNMLEtBQUs7MkJBQ0wsS0FBSzt5QkFDTCxLQUFLO3NCQUNMLE1BQU07dUJBQ04sTUFBTTt1QkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEluamVjdG9yLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlIH0gZnJvbSAnbmd4LWRldmljZS1kZXRlY3Rvcic7XG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlLCBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBTaWRlYmFyIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvc2lkZWJhcic7XG5cbmltcG9ydCB7IENvbXBvbmVudENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vYXBwLWNvbnRleHQvY29tcG9uZW50LWNvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9iYXNlL2NvbXBvbmVudC1iYXNlJztcbmltcG9ydCB7IENvbW1vbkVycm9yQ29kZSB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvY29tbW9uLWVycm9yLWNvZGUnO1xuaW1wb3J0IHsgRklMRV9UWVBFUyB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvY29uc3RhbnRzJztcbmltcG9ydCB7IENydWRGb3JtRGF0YSwgUG9wdXBTaXplIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9mb3JtLXNjaGVtYSc7XG5pbXBvcnQgeyBNb2R1bGVDb25maWcgfSBmcm9tICcuLi8uLi8uLi9jb25maWdzL21vZHVsZS1jb25maWcnO1xuaW1wb3J0IHsgRWRpdEZpbGVDb21tYW5kIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2VkaXQtZmlsZS1jb21tYW5kJztcbmltcG9ydCB7IENvbW1hbmRUeXBlLCBUbkNsaWVudENvbW1hbmQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvdG4tY2xpZW50LWNvbW1hbmQnO1xuaW1wb3J0IHsgQXV0aGVuU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGhlbi5zZXJ2aWNlJztcbmltcG9ydCB7IEN1c3RvbVJvdXRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jdXN0b20tcm91dGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21vZHVsZS1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9ub3RpZmllci5zZXJ2aWNlJztcbmltcG9ydCB7IFRuQ2xpZW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RuLWNsaWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbGVWZXJzaW9uRFRPIH0gZnJvbSAnLi4vbW9kZWxzL2ZpbGUtdmVyc2lvbi1kdG8nO1xuaW1wb3J0IHsgR2VuZXJhdGVMaW5rRG93bmxvYWREVE8gfSBmcm9tICcuLi9tb2RlbHMvZ2VuZXJhdGUtbGluay1kb3dubG9hZC1kdG8nO1xuaW1wb3J0IHsgRG93bmxvYWRMaW5rU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Rvd25sb2FkLWxpbmsuc2VydmljZSc7XG5pbXBvcnQgeyBGaWxlRXhwbG9yZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZmlsZS1leHBsb3Jlci5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbGVPYmplY3RTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZmlsZS1vYmplY3Quc2VydmljZSc7XG5pbXBvcnQgeyBGaWxlVmVyc2lvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9maWxlLXZlcnNpb24uc2VydmljZSc7XG5pbXBvcnQgeyBGb2xkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZm9sZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tQ3R4Q29uc3RhbnRzIH0gZnJvbSAnLi8uLi8uLi8uLi9jb25maWdzL2NvbXBvbmVudC1jb250ZXh0LmNvbnN0YW50JztcblxuZGVjbGFyZSBsZXQgRG9jc0FQSTogYW55O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZpbGUtdmlld2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2ZpbGUtdmlld2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnZmlsZS12aWV3ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtDb21wb25lbnRDb250ZXh0U2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgRmlsZVZpZXdlckNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBWaWV3Q2hpbGQoJ3NpZGViYXInKSBzaWRlYmFyOiBTaWRlYmFyO1xuICAgIEBJbnB1dCgpIG1vZGVsOiBhbnkgPSB7XG4gICAgICAgIGRhdGE6IHt9XG4gICAgfTtcbiAgICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHNob3dQcmludCA9IHRydWU7XG4gICAgQElucHV0KCkgc2hvd0Rvd25sb2FkID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBzaG93RGVsZXRlID0gdHJ1ZTtcbiAgICBAT3V0cHV0KCkgb25DbG9zZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25SZW5hbWU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uRGVsZXRlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgcHJpdmF0ZSBfbW9kdWxlQ29uZmlnOiBNb2R1bGVDb25maWc7XG4gICAgZGF0YTogYW55ID0ge307XG4gICAgc2hvdyA9IGZhbHNlO1xuICAgIGlzUmVhZG9ubHkgPSBmYWxzZTtcbiAgICBmaWxlVHlwZXMgPSBGSUxFX1RZUEVTO1xuICAgIHJlbmFtZUZpbGVGb3JtOiBhbnk7XG4gICAgcHJpdmF0ZSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZTtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfbW9kdWxlQ29uZmlnU2VydmljZTogTW9kdWxlQ29uZmlnU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBfYXV0aGVuU2VydmljZTogQXV0aGVuU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfZmlsZUV4cGxvcmVyU2VydmljZTogRmlsZUV4cGxvcmVyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9ub3RpZmllclNlcnZpY2U6IE5vdGlmaWVyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfY29uZmlybVNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX3RuQ2xpZW50U2VydmljZTogVG5DbGllbnRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9maWxlVmVyc2lvblNlcnZpY2U6IEZpbGVWZXJzaW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfY3VzdG9tUm91dGVyU2VydmljZTogQ3VzdG9tUm91dGVyU2VydmljZSxcbiAgICAgICAgcHVibGljIF9kZXZpY2VEZXRlY3RvclNlcnZpY2U6IERldmljZURldGVjdG9yU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfZmlsZU9iamVjdFNlcnZpY2U6IEZpbGVPYmplY3RTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9kb3dubG9hZExpbmtTZXJ2aWNlOiBEb3dubG9hZExpbmtTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9mb2xkZXJTZXJ2aWNlOiBGb2xkZXJTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgX2luamVjdG9yOiBJbmplY3RvclxuICAgICkge1xuICAgICAgICBzdXBlcihfaW5qZWN0b3IpO1xuICAgICAgICB0aGlzLl9tb2R1bGVDb25maWcgPSB0aGlzLl9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpO1xuICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlID0gX2luamVjdG9yLmdldChUcmFuc2xhdGVTZXJ2aWNlKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgfVxuXG4gICAgYXN5bmMgaW5pdCgpIHtcbiAgICAgICAgdGhpcy5pbml0Rm9ybSgpO1xuICAgICAgICBhd2FpdCB0aGlzLmdldERldGFpbCgpO1xuICAgICAgICB0aGlzLnNob3dGaWxlKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0RGV0YWlsKCkge1xuICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLm1vZGVsLmRhdGE7XG4gICAgICAgIGlmICghdGhpcy5kYXRhLmZpbGVJZCAmJiAhdGhpcy5kYXRhLmZpbGVWZXJzaW9uSWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGEuZmlsZVVybCAhPSBudWxsICYmIHRoaXMuZGF0YS5maWxlVXJsICE9PSAnJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5leHRlbnNpb24gPSB0aGlzLl9maWxlT2JqZWN0U2VydmljZS5nZXRGaWxlRXh0ZW5zaW9uKHRoaXMuZGF0YS5uYW1lKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuZmlsZVR5cGUgPSB0aGlzLl9maWxlT2JqZWN0U2VydmljZS5nZXRGaWxlVHlwZSh0aGlzLmRhdGEuZXh0ZW5zaW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBkYXRhOiBhbnkgPSBudWxsO1xuICAgICAgICBpZiAodGhpcy5kYXRhLmZpbGVWZXJzaW9uSWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVWZXJzaW9uID0gKGF3YWl0IHRoaXMuX2ZpbGVWZXJzaW9uU2VydmljZS5nZXREZXRhaWwodGhpcy5kYXRhLmZpbGVWZXJzaW9uSWQpKS5kYXRhIHx8IHt9O1xuICAgICAgICAgICAgY29uc3QgZmlsZU9iamVjdCA9IChhd2FpdCB0aGlzLl9maWxlT2JqZWN0U2VydmljZS5nZXREZXRhaWwoZmlsZVZlcnNpb24uZmlsZUlkKSkuZGF0YSB8fCB7fTtcbiAgICAgICAgICAgIGRhdGEgPSBmaWxlT2JqZWN0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGF0YSA9IChhd2FpdCB0aGlzLl9maWxlT2JqZWN0U2VydmljZS5nZXREZXRhaWwodGhpcy5kYXRhLmZpbGVJZCkpLmRhdGEgfHwge307XG4gICAgICAgIH1cblxuICAgICAgICBkYXRhLmV4dGVuc2lvbiA9IHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmdldEZpbGVFeHRlbnNpb24oZGF0YS5uYW1lKTtcbiAgICAgICAgZGF0YS5maWxlVHlwZSA9IHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmdldEZpbGVUeXBlKGRhdGEuZXh0ZW5zaW9uKTtcbiAgICAgICAgZGF0YS5maWxlSWQgPSB0aGlzLmRhdGEuZmlsZUlkO1xuICAgICAgICBkYXRhLmZpbGVWZXJzaW9uSWQgPSB0aGlzLmRhdGEuZmlsZVZlcnNpb25JZDtcblxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIH1cblxuICAgIHNob3dGaWxlKCkge1xuICAgICAgICB0aGlzLm1vZGVsLmltYWdlcyA9IFtdO1xuICAgICAgICB0aGlzLm1vZGVsLmlzSW1hZ2UgPSB0cnVlO1xuICAgICAgICB0aGlzLnNob3cgPSB0cnVlO1xuICAgICAgICB0aGlzLmNvbnRleHQucm9vdC5zdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuS0VZX0RPV05fRVNDLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlU2lkZWJhcihudWxsKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBmb3JjZVVzaW5nSW50ZXJuYWwgPSBmYWxzZTtcbiAgICAgICAgbGV0IHByb2Nlc3NGdW5jOiAodXJsOiBzdHJpbmcpID0+IHZvaWQ7XG4gICAgICAgIHN3aXRjaCAodGhpcy5kYXRhLmZpbGVUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIEZJTEVfVFlQRVMuSU1BR0U6XG4gICAgICAgICAgICAgICAgcHJvY2Vzc0Z1bmMgPSB0aGlzLnByb2Nlc3NTaG93SW1hZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRklMRV9UWVBFUy5WSURFTzpcbiAgICAgICAgICAgIGNhc2UgRklMRV9UWVBFUy5BVURJTzpcbiAgICAgICAgICAgICAgICBwcm9jZXNzRnVuYyA9IHRoaXMucHJvY2Vzc1ZpZGVvT3JBdWRpby5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBGSUxFX1RZUEVTLlBERjpcbiAgICAgICAgICAgICAgICBwcm9jZXNzRnVuYyA9IHRoaXMucHJvY2Vzc0ZpbGVQZGYuYmluZCh0aGlzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5pc0ltYWdlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZm9yY2VVc2luZ0ludGVybmFsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBwcm9jZXNzRnVuYyA9IHRoaXMucHJvY2Vzc090aGVyRmlsZUV4dGVuc2lvbi5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmRhdGEuZmlsZVVybCB8fCB0aGlzLmRhdGEuZmlsZVVybCA9PT0gJycpIHtcbiAgICAgICAgICAgIGNvbnN0IG1vZGVsID0gdGhpcy5nZXRHZW5lcmF0ZURvd25sb2FkTGlua01vZGVsKCk7XG4gICAgICAgICAgICB0aGlzLl9kb3dubG9hZExpbmtTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmdlbmVyYXRlRG93bmxvYWRMaW5rKG1vZGVsKVxuICAgICAgICAgICAgICAgIC50aGVuKHJzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsID0gdGhpcy5fZG93bmxvYWRMaW5rU2VydmljZS5nZXRBbm9ueW1vdXNEb3dubG9hZFVybEZvclZpZXdlcihycy5kYXRhLCBmb3JjZVVzaW5nSW50ZXJuYWwpO1xuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzRnVuYyh1cmwpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcHJvY2Vzc0Z1bmModGhpcy5kYXRhLmZpbGVVcmwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0R2VuZXJhdGVEb3dubG9hZExpbmtNb2RlbCgpIHtcbiAgICAgICAgcmV0dXJuIDxHZW5lcmF0ZUxpbmtEb3dubG9hZERUTz57XG4gICAgICAgICAgICBmaWxlSWQ6IHRoaXMuZGF0YS5maWxlSWQsXG4gICAgICAgICAgICBmaWxlVmVyc2lvbklkOiB0aGlzLmRhdGEuZmlsZVZlcnNpb25JZFxuICAgICAgICB9O1xuICAgIH1cblxuXG4gICAgc2hvd0ltYWdlV2hlbkxvYWRlZCgpIHtcbiAgICAgICAgbGV0IGRvbmUgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltYWdlLXZpZXctbGlzdCcpO1xuICAgICAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICAgICAgICBjb25zdCBsb2FkaW5nOiBhbnkgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignLml2LWxvYWRlcicpO1xuICAgICAgICAgICAgaWYgKGxvYWRpbmcgJiYgbG9hZGluZy5zdHlsZS5kaXNwbGF5ID09ICdub25lJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGltZyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdpbWcuaXYtaW1hZ2UuaXYtbGFyZ2UtaW1hZ2UnKTtcbiAgICAgICAgICAgICAgICBpZiAoaW1nKSB7XG4gICAgICAgICAgICAgICAgICAgIGltZy5jbGFzc0xpc3QuYWRkKCdzaG93Jyk7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZG9uZSkge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNob3dJbWFnZVdoZW5Mb2FkZWQoKSwgNTApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvY2Vzc1Nob3dJbWFnZSh1cmw6IHN0cmluZykge1xuICAgICAgICB0aGlzLm1vZGVsLmltYWdlcyA9IFt1cmxdO1xuICAgIH1cblxuICAgIHByb2Nlc3NWaWRlb09yQXVkaW8odXJsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5maWxlVXJsID0gdXJsO1xuICAgIH1cblxuICAgIHByb2Nlc3NGaWxlUGRmKHVybDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMubW9kZWwuZmlsZVVybCA9IHVybDtcbiAgICB9XG5cbiAgICBwcm9jZXNzT3RoZXJGaWxlRXh0ZW5zaW9uKHVybDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuaW5pdERvY3VtZW50Vmlld2VyKHRoaXMuZGF0YS5leHRlbnNpb24sIHRoaXMuZGF0YS5maWxlVHlwZSwgdXJsKTtcbiAgICB9XG5cbiAgICBpbml0RG9jdW1lbnRWaWV3ZXIoZmlsZUV4dGVuc2lvbiwgZmlsZVR5cGUsIGZpbGVVcmwpIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgdHlwZTogdGhpcy5fZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLmlzRGVza3RvcCgpID8gJ2Rlc2t0b3AnIDogJ21vYmlsZScsXG4gICAgICAgICAgICBkb2N1bWVudFR5cGU6IGAke2ZpbGVUeXBlfWAsXG4gICAgICAgICAgICBlZGl0b3JDb25maWc6IHtcbiAgICAgICAgICAgICAgICBtb2RlOiAndmlldycsXG4gICAgICAgICAgICAgICAgY3VzdG9taXphdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICBjaGF0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgYWJvdXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBjb21tZW50czogdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkb2N1bWVudDoge1xuICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbW1lbnQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBkb3dubG9hZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZWRpdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHByaW50OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICByZXZpZXc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBmaWxsRm9ybXM6IGZhbHNlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBmaWxlVHlwZTogYCR7ZmlsZUV4dGVuc2lvbn1gLFxuICAgICAgICAgICAgICAgIHRpdGxlOiBgJHt0aGlzLm1vZGVsLmRhdGEubmFtZX1gLFxuICAgICAgICAgICAgICAgIHVybDogYCR7ZmlsZVVybH1gXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubW9kZWwuZG9jRWRpdG9yID0gbmV3IERvY3NBUEkuRG9jRWRpdG9yKCdmaWxlLXZpZXdlcicsIGNvbmZpZyk7XG4gICAgfVxuXG4gICAgaW5pdEZvcm0oKSB7XG4gICAgICAgIHRoaXMucmVuYW1lRmlsZUZvcm0gPSB7XG4gICAgICAgICAgICBoZWFkZXI6ICfEkOG7lWkgdMOqbiB04buHcCcsXG4gICAgICAgICAgICBzaG93OiBmYWxzZSxcbiAgICAgICAgICAgIGZvcm1EYXRhOiBuZXcgQ3J1ZEZvcm1EYXRhKCksXG4gICAgICAgICAgICBwb3B1cFNpemU6IG5ldyBQb3B1cFNpemUoe1xuICAgICAgICAgICAgICAgIHdpZHRoOiA0MDAsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAyMDBcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0T3JpZW50YXRpb24oaW1hZ2VVcmwsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGltYWdlVXJsKTtcbiAgICAgICAgY29uc3QgYmxvYiA9IGF3YWl0IHJlcy5ibG9iKCk7XG5cbiAgICAgICAgcmVhZGVyLm9ubG9hZCA9IChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2aWV3ID0gbmV3IERhdGFWaWV3KGV2ZW50LnRhcmdldC5yZXN1bHQpO1xuXG4gICAgICAgICAgICBpZiAodmlldy5nZXRVaW50MTYoMCwgZmFsc2UpICE9IDB4RkZEOCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhibG9iLCAtMik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IHZpZXcuYnl0ZUxlbmd0aDtcbiAgICAgICAgICAgIGxldCBvZmZzZXQgPSAyO1xuXG4gICAgICAgICAgICB3aGlsZSAob2Zmc2V0IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWFya2VyID0gdmlldy5nZXRVaW50MTYob2Zmc2V0LCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDI7XG5cbiAgICAgICAgICAgICAgICBpZiAobWFya2VyID09IDB4RkZFMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmlldy5nZXRVaW50MzIob2Zmc2V0ICs9IDIsIGZhbHNlKSAhPSAweDQ1Nzg2OTY2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soYmxvYiwgLTEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpdHRsZSA9IHZpZXcuZ2V0VWludDE2KG9mZnNldCArPSA2LCBmYWxzZSkgPT0gMHg0OTQ5O1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gdmlldy5nZXRVaW50MzIob2Zmc2V0ICsgNCwgbGl0dGxlKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFncyA9IHZpZXcuZ2V0VWludDE2KG9mZnNldCwgbGl0dGxlKTtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDI7XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWdzOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2aWV3LmdldFVpbnQxNihvZmZzZXQgKyAoaSAqIDEyKSwgbGl0dGxlKSA9PSAweDAxMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soYmxvYiwgdmlldy5nZXRVaW50MTYob2Zmc2V0ICsgKGkgKiAxMikgKyA4LCBsaXR0bGUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICgobWFya2VyICYgMHhGRjAwKSAhPSAweEZGMDApIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gdmlldy5nZXRVaW50MTYob2Zmc2V0LCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGJsb2IsIC0xKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYik7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0QmFzZTY0KGJsb2IsIG9yaWVudGF0aW9uKSB7XG4gICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cbiAgICAgICAgLy8gY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goaW1hZ2VVcmwpO1xuICAgICAgICAvLyBjb25zdCBibG9iID0gYXdhaXQgcmVzLmJsb2IoKTtcblxuICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChibG9iKTtcbiAgICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJhc2U2NCA9IHJlYWRlci5yZXN1bHQ7XG4gICAgICAgICAgICB0aGlzLnJlc2V0T3JpZW50YXRpb24oYmFzZTY0LCBvcmllbnRhdGlvbiwgKHJlc2V0QmFzZTY0SW1hZ2UpID0+IHtcblxuICAgICAgICAgICAgICAgIHRoaXMuc2hvdyA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc3QgaW1hZ2VXaXRob3V0QmFzZTY0UHJlZml4ID0gcmVzZXRCYXNlNjRJbWFnZS5zcGxpdCgnYmFzZTY0LCcpWzFdO1xuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuaW1hZ2VzID0gW2ltYWdlV2l0aG91dEJhc2U2NFByZWZpeF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvcjogJywgZXJyb3IpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJlc2V0T3JpZW50YXRpb24oc3JjQmFzZTY0LCBzcmNPcmllbnRhdGlvbiwgY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XG5cbiAgICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gaW1nLndpZHRoLFxuICAgICAgICAgICAgICAgIGhlaWdodCA9IGltZy5oZWlnaHQsXG4gICAgICAgICAgICAgICAgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyksXG4gICAgICAgICAgICAgICAgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICAgICAgICAgIC8vIHNldCBwcm9wZXIgY2FudmFzIGRpbWVuc2lvbnMgYmVmb3JlIHRyYW5zZm9ybSAmIGV4cG9ydFxuICAgICAgICAgICAgaWYgKDQgPCBzcmNPcmllbnRhdGlvbiAmJiBzcmNPcmllbnRhdGlvbiA8IDkpIHtcbiAgICAgICAgICAgICAgICBjYW52YXMud2lkdGggPSBoZWlnaHQ7XG4gICAgICAgICAgICAgICAgY2FudmFzLmhlaWdodCA9IHdpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FudmFzLndpZHRoID0gd2lkdGg7XG4gICAgICAgICAgICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdHJhbnNmb3JtIGNvbnRleHQgYmVmb3JlIGRyYXdpbmcgaW1hZ2VcbiAgICAgICAgICAgIHN3aXRjaCAoc3JjT3JpZW50YXRpb24pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDI6IGN0eC50cmFuc2Zvcm0oLTEsIDAsIDAsIDEsIHdpZHRoLCAwKTsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAzOiBjdHgudHJhbnNmb3JtKC0xLCAwLCAwLCAtMSwgd2lkdGgsIGhlaWdodCk7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogY3R4LnRyYW5zZm9ybSgxLCAwLCAwLCAtMSwgMCwgaGVpZ2h0KTsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBjdHgudHJhbnNmb3JtKDAsIDEsIDEsIDAsIDAsIDApOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDY6IGN0eC50cmFuc2Zvcm0oMCwgMSwgLTEsIDAsIGhlaWdodCwgMCk7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogY3R4LnRyYW5zZm9ybSgwLCAtMSwgLTEsIDAsIGhlaWdodCwgd2lkdGgpOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDg6IGN0eC50cmFuc2Zvcm0oMCwgLTEsIDEsIDAsIDAsIHdpZHRoKTsgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDogYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGRyYXcgaW1hZ2VcbiAgICAgICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwKTtcblxuICAgICAgICAgICAgLy8gZXhwb3J0IGJhc2U2NFxuICAgICAgICAgICAgY2FsbGJhY2soY2FudmFzLnRvRGF0YVVSTCgpKTtcbiAgICAgICAgfTtcblxuICAgICAgICBpbWcuc3JjID0gc3JjQmFzZTY0O1xuICAgIH1cblxuICAgIG9uVG9wYmFySXRlbUNsaWNrKGV2ZW50KSB7XG4gICAgICAgIHRoaXMubW9kZWwuYWN0aXZlVG9wYmFySXRlbSA9ICF0aGlzLm1vZGVsLmFjdGl2ZVRvcGJhckl0ZW07XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgY2xvc2VTaWRlYmFyKGV2ZW50ID0gbnVsbCkge1xuICAgICAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LnRhcmdldC5pZCA9PSAnZmlsZVZpZXdlckhvbGRlcicgfHwgZXZlbnQudGFyZ2V0LmlkID09ICdpbWFnZS12aWV3LWxpc3QnIHx8IGV2ZW50LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2ltYWdlLWNvbnRhaW5lcicpXG4gICAgICAgICAgICB8fCBldmVudC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdpdi1pbWFnZS12aWV3JykpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuYWN0aXZlVG9wYmFySXRlbSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zaG93ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLm9uQ2xvc2UubmV4dCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpbnQoKSB7XG4gICAgICAgIHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2UuY29udmVydFRvUGRmKHRoaXMuZGF0YS5uYW1lLCB0aGlzLmRhdGEuZmlsZUlkLCB0aGlzLmRhdGEuZmlsZVZlcnNpb25JZClcbiAgICAgICAgICAgIC50aGVuKHJzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXJzLnN1Y2Nlc3MgfHwgIXJzLmRhdGEgfHwgIXJzLmRhdGEuY29udGVudEJhc2U2NCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5wcmludChycy5kYXRhLmNvbnRlbnRCYXNlNjQpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZG93bmxvYWQoKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsID0gdGhpcy5nZXRHZW5lcmF0ZURvd25sb2FkTGlua01vZGVsKCk7XG4gICAgICAgIHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2UuZG93bmxvYWRMaW5rKG1vZGVsKTtcbiAgICB9XG5cbiAgICBkZWxldGVGaWxlKCkge1xuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0RlbGV0ZUNvbmZpcm0oKVxuICAgICAgICAgICAgLnRoZW4ocnMgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9mb2xkZXJTZXJ2aWNlLmRlbGV0ZU11bHRpcGxlKFt0aGlzLmRhdGFdKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlRGF0YVN1Y2Nlc3MoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlU2lkZWJhcihudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2xvc2UubmV4dCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZ0J5UmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlbmFtZUZpbGUoKSB7XG4gICAgICAgIHRoaXMucmVuYW1lRmlsZUZvcm0uaGVhZGVyID0gJ8SQ4buVaSB0w6puIHRoxrAgbeG7pWMnO1xuICAgICAgICB0aGlzLnJlbmFtZUZpbGVGb3JtLmZvcm1EYXRhLmRhdGEgPSB7XG4gICAgICAgICAgICBpZDogdGhpcy5kYXRhLmlkXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5yZW5hbWVGaWxlRm9ybS5zaG93ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBhc3luYyBvblNhdmVkUmVuYW1lRmlsZSgpIHtcbiAgICAgICAgdGhpcy5yZW5hbWVGaWxlRm9ybS5zaG93ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGZpbGUgPSAoYXdhaXQgdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0RGV0YWlsKHRoaXMuZGF0YS5pZCkpLmRhdGE7XG4gICAgICAgIGlmIChmaWxlKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEubmFtZSA9IGZpbGUubmFtZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ2FuY2VsUmVuYW1lRmlsZSgpIHtcbiAgICAgICAgdGhpcy5yZW5hbWVGaWxlRm9ybS5zaG93ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgZWRpdEZpbGUoKSB7XG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnxJBhbmcga+G6v3QgbuG7kWkgbeG7nyDhu6luZyBk4bulbmcnKTtcblxuICAgICAgICB0aGlzLl9maWxlVmVyc2lvblNlcnZpY2UuY3JlYXRlTmV3TWlub3JWZXJzaW9uKHRoaXMuZGF0YS5maWxlSWQsICcnLCBmYWxzZSlcbiAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlVmVyc2lvbiA9IDxGaWxlVmVyc2lvbkRUTz5yZXNwb25zZS5kYXRhO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZVVybCA9IHRoaXMuX2ZpbGVWZXJzaW9uU2VydmljZS5nZXRGaWxlVmVyc2lvbkRvd25sb2FkVXJsKGZpbGVWZXJzaW9uLmlkKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgVG5DbGllbnRDb21tYW5kKCk7XG4gICAgICAgICAgICAgICAgY29tbWFuZC5jb21tYW5kVHlwZSA9IENvbW1hbmRUeXBlLkVkaXRGaWxlO1xuICAgICAgICAgICAgICAgIGNvbW1hbmQua2V5ID0gdGhpcy5fbW9kdWxlQ29uZmlnLmVudmlyb25tZW50LnNpZ25hbHIuY2xpZW50S2V5O1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZWRpdEZpbGVDb21tYW5kID0gbmV3IEVkaXRGaWxlQ29tbWFuZCgpO1xuICAgICAgICAgICAgICAgIGVkaXRGaWxlQ29tbWFuZC5maWxlU2VydmljZUVuZHBvaW50ID0gdGhpcy5fbW9kdWxlQ29uZmlnLmVudmlyb25tZW50LmFwaURvbWFpbi5maWxlRW5kcG9pbnQ7XG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLnVwbG9hZEZpbGVBcGkgPSB0aGlzLl9maWxlVmVyc2lvblNlcnZpY2UuZ2V0VXBsb2FkRmlsZVZlcnNpb25BcGlVcmwoKTtcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQucmVtb3ZlRmlsZUFwaSA9IHRoaXMuX2ZpbGVWZXJzaW9uU2VydmljZS5nZXRSZW1vdmVGaWxlVmVyc2lvbkFwaVVybCgpO1xuICAgICAgICAgICAgICAgIGVkaXRGaWxlQ29tbWFuZC5maWxlVXJsID0gZmlsZVVybDtcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQuaXNEcmFmdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLmdyb3VwRmlsZU5hbWUgPSB0aGlzLmRhdGEubmFtZTtcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQuZmlsZU5hbWUgPSB0aGlzLmRhdGEubmFtZTtcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQudmVyc2lvbiA9IGZpbGVWZXJzaW9uLnZlcnNpb25OYW1lO1xuICAgICAgICAgICAgICAgIGVkaXRGaWxlQ29tbWFuZC5maWxlVmVyc2lvbklkID0gZmlsZVZlcnNpb24uaWQ7XG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLmFjY2Vzc1Rva2VuID0gdGhpcy5fYXV0aGVuU2VydmljZS5nZXRBY2Nlc3NUb2tlbigpO1xuICAgICAgICAgICAgICAgIGNvbW1hbmQuZGF0YSA9IGVkaXRGaWxlQ29tbWFuZDtcblxuICAgICAgICAgICAgICAgIHRoaXMuX3RuQ2xpZW50U2VydmljZS5zZW5kQ29tbWFuZChjb21tYW5kKTtcbiAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoQ29tbW9uRXJyb3JDb2RlLkVSUk9SX1NFUlZJQ0VfTk9UX1JVTiA9PT0gZXJyb3Iuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93UmVzcG9uc2VFcnJvcigwLCBudWxsLCAnRmlsZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeTogdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdGSUxFX0VYUExPUkVSLk1FU1NBR0VfRVJST1JfSEVBREVSJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnRklMRV9FWFBMT1JFUi5NRVNTQUdFX0VSUk9SX0RFVEFJTCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlmZTogNTAwMFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0cnlDb25uZWN0VG9DbGllbnQoKSB7XG5cbiAgICB9XG5cbiAgICBpc0Rlc2t0b3AoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNEZXNrdG9wKCk7XG4gICAgfVxuXG4gICAgaXNGaWxlVHlwZSh0eXBlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZmlsZVR5cGUgPT0gdHlwZTtcbiAgICB9XG4gICAgZ2V0U3R5bGVDbGFzc0J5RG9jdW1lbnRUeXBlKGRvY1R5cGUpIHtcbiAgICAgICAgaWYgKGRvY1R5cGUgPT09IEZJTEVfVFlQRVMuUERGKSB7XG4gICAgICAgICAgICByZXR1cm4gJ3BkZi1jb250YWluZXInO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cbiJdfQ==
|
|
473
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS12aWV3ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1leHBsb3Jlci9maWxlLXZpZXdlci9maWxlLXZpZXdlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRXZFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FB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Q3ZCLGdxZkFBeUM7Z0JBRXpDLFNBQVMsRUFBRSxDQUFDLHVCQUF1QixDQUFDOzthQUN2Qzs7O1lBbkJRLG1CQUFtQjtZQWhCUixVQUFVO1lBY3JCLGFBQWE7WUFRYixtQkFBbUI7WUFuQkUsY0FBYztZQWNuQyxlQUFlO1lBZGYsbUJBQW1CO1lBZW5CLGVBQWU7WUFNZixrQkFBa0I7WUFUbEIsbUJBQW1CO1lBYm5CLHFCQUFxQjtZQXFCckIsaUJBQWlCO1lBRmpCLG1CQUFtQjtZQUluQixhQUFhO1lBekJ3QixRQUFROzs7c0JBcUNqRCxTQUFTLFNBQUMsU0FBUztvQkFDbkIsS0FBSzt1QkFHTCxLQUFLO3dCQUNMLEtBQUs7MkJBQ0wsS0FBSzt5QkFDTCxLQUFLO3lCQUNMLEtBQUs7d0JBQ0wsS0FBSzt5QkFDTCxLQUFLO3NCQUNMLE1BQU07dUJBQ04sTUFBTTt1QkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEluamVjdG9yLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlIH0gZnJvbSAnbmd4LWRldmljZS1kZXRlY3Rvcic7XG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlLCBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBTaWRlYmFyIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvc2lkZWJhcic7XG5cbmltcG9ydCB7IENvbXBvbmVudENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vYXBwLWNvbnRleHQvY29tcG9uZW50LWNvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9iYXNlL2NvbXBvbmVudC1iYXNlJztcbmltcG9ydCB7IENvbW1vbkVycm9yQ29kZSB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvY29tbW9uLWVycm9yLWNvZGUnO1xuaW1wb3J0IHsgRklMRV9UWVBFUyB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvY29uc3RhbnRzJztcbmltcG9ydCB7IENydWRGb3JtRGF0YSwgUG9wdXBTaXplIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9mb3JtLXNjaGVtYSc7XG5pbXBvcnQgeyBNb2R1bGVDb25maWcgfSBmcm9tICcuLi8uLi8uLi9jb25maWdzL21vZHVsZS1jb25maWcnO1xuaW1wb3J0IHsgRWRpdEZpbGVDb21tYW5kIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2VkaXQtZmlsZS1jb21tYW5kJztcbmltcG9ydCB7IENvbW1hbmRUeXBlLCBUbkNsaWVudENvbW1hbmQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvdG4tY2xpZW50LWNvbW1hbmQnO1xuaW1wb3J0IHsgQXV0aGVuU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGhlbi5zZXJ2aWNlJztcbmltcG9ydCB7IEN1c3RvbVJvdXRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jdXN0b20tcm91dGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21vZHVsZS1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9ub3RpZmllci5zZXJ2aWNlJztcbmltcG9ydCB7IFRuQ2xpZW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RuLWNsaWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbGVWZXJzaW9uRFRPIH0gZnJvbSAnLi4vbW9kZWxzL2ZpbGUtdmVyc2lvbi1kdG8nO1xuaW1wb3J0IHsgR2VuZXJhdGVMaW5rRG93bmxvYWREVE8gfSBmcm9tICcuLi9tb2RlbHMvZ2VuZXJhdGUtbGluay1kb3dubG9hZC1kdG8nO1xuaW1wb3J0IHsgRG93bmxvYWRMaW5rU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Rvd25sb2FkLWxpbmsuc2VydmljZSc7XG5pbXBvcnQgeyBGaWxlRXhwbG9yZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZmlsZS1leHBsb3Jlci5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbGVPYmplY3RTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZmlsZS1vYmplY3Quc2VydmljZSc7XG5pbXBvcnQgeyBGaWxlVmVyc2lvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9maWxlLXZlcnNpb24uc2VydmljZSc7XG5pbXBvcnQgeyBGb2xkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZm9sZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tQ3R4Q29uc3RhbnRzIH0gZnJvbSAnLi8uLi8uLi8uLi9jb25maWdzL2NvbXBvbmVudC1jb250ZXh0LmNvbnN0YW50JztcblxuZGVjbGFyZSBsZXQgRG9jc0FQSTogYW55O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZpbGUtdmlld2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2ZpbGUtdmlld2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnZmlsZS12aWV3ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtDb21wb25lbnRDb250ZXh0U2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgRmlsZVZpZXdlckNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBWaWV3Q2hpbGQoJ3NpZGViYXInKSBzaWRlYmFyOiBTaWRlYmFyO1xuICAgIEBJbnB1dCgpIG1vZGVsOiBhbnkgPSB7XG4gICAgICAgIGRhdGE6IHt9XG4gICAgfTtcbiAgICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHNob3dQcmludCA9IHRydWU7XG4gICAgQElucHV0KCkgc2hvd0Rvd25sb2FkID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBzaG93RGVsZXRlID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBmdWxsU2NyZWVuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBzaG93TW9kYWwgPSB0cnVlO1xuICAgIEBJbnB1dCgpIHN0eWxlQ2xhc3MgPSBcIlwiO1xuICAgIEBPdXRwdXQoKSBvbkNsb3NlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvblJlbmFtZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25EZWxldGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBwcml2YXRlIF9tb2R1bGVDb25maWc6IE1vZHVsZUNvbmZpZztcbiAgICBkYXRhOiBhbnkgPSB7fTtcbiAgICBzaG93ID0gZmFsc2U7XG4gICAgaXNSZWFkb25seSA9IGZhbHNlO1xuICAgIGZpbGVUeXBlcyA9IEZJTEVfVFlQRVM7XG4gICAgcmVuYW1lRmlsZUZvcm06IGFueTtcbiAgICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlO1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9tb2R1bGVDb25maWdTZXJ2aWNlOiBNb2R1bGVDb25maWdTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIF9hdXRoZW5TZXJ2aWNlOiBBdXRoZW5TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9maWxlRXhwbG9yZXJTZXJ2aWNlOiBGaWxlRXhwbG9yZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9tZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX25vdGlmaWVyU2VydmljZTogTm90aWZpZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9jb25maXJtU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfdG5DbGllbnRTZXJ2aWNlOiBUbkNsaWVudFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2ZpbGVWZXJzaW9uU2VydmljZTogRmlsZVZlcnNpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9jdXN0b21Sb3V0ZXJTZXJ2aWNlOiBDdXN0b21Sb3V0ZXJTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgX2RldmljZURldGVjdG9yU2VydmljZTogRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9maWxlT2JqZWN0U2VydmljZTogRmlsZU9iamVjdFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2Rvd25sb2FkTGlua1NlcnZpY2U6IERvd25sb2FkTGlua1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2ZvbGRlclNlcnZpY2U6IEZvbGRlclNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBfaW5qZWN0b3I6IEluamVjdG9yXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKF9pbmplY3Rvcik7XG4gICAgICAgIHRoaXMuX21vZHVsZUNvbmZpZyA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCk7XG4gICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UgPSBfaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICB9XG5cbiAgICBhc3luYyBpbml0KCkge1xuICAgICAgICB0aGlzLmluaXRGb3JtKCk7XG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0RGV0YWlsKCk7XG4gICAgICAgIHRoaXMuc2hvd0ZpbGUoKTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXREZXRhaWwoKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IHRoaXMubW9kZWwuZGF0YTtcbiAgICAgICAgaWYgKCF0aGlzLmRhdGEuZmlsZUlkICYmICF0aGlzLmRhdGEuZmlsZVZlcnNpb25JZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5maWxlVXJsICE9IG51bGwgJiYgdGhpcy5kYXRhLmZpbGVVcmwgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLmV4dGVuc2lvbiA9IHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmdldEZpbGVFeHRlbnNpb24odGhpcy5kYXRhLm5hbWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5maWxlVHlwZSA9IHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmdldEZpbGVUeXBlKHRoaXMuZGF0YS5leHRlbnNpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGRhdGE6IGFueSA9IG51bGw7XG4gICAgICAgIGlmICh0aGlzLmRhdGEuZmlsZVZlcnNpb25JZCkge1xuICAgICAgICAgICAgY29uc3QgZmlsZVZlcnNpb24gPSAoYXdhaXQgdGhpcy5fZmlsZVZlcnNpb25TZXJ2aWNlLmdldERldGFpbCh0aGlzLmRhdGEuZmlsZVZlcnNpb25JZCkpLmRhdGEgfHwge307XG4gICAgICAgICAgICBjb25zdCBmaWxlT2JqZWN0ID0gKGF3YWl0IHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmdldERldGFpbChmaWxlVmVyc2lvbi5maWxlSWQpKS5kYXRhIHx8IHt9O1xuICAgICAgICAgICAgZGF0YSA9IGZpbGVPYmplY3Q7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkYXRhID0gKGF3YWl0IHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmdldERldGFpbCh0aGlzLmRhdGEuZmlsZUlkKSkuZGF0YSB8fCB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGEuZXh0ZW5zaW9uID0gdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0RmlsZUV4dGVuc2lvbihkYXRhLm5hbWUpO1xuICAgICAgICBkYXRhLmZpbGVUeXBlID0gdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0RmlsZVR5cGUoZGF0YS5leHRlbnNpb24pO1xuICAgICAgICBkYXRhLmZpbGVJZCA9IHRoaXMuZGF0YS5maWxlSWQ7XG4gICAgICAgIGRhdGEuZmlsZVZlcnNpb25JZCA9IHRoaXMuZGF0YS5maWxlVmVyc2lvbklkO1xuXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgfVxuXG4gICAgc2hvd0ZpbGUoKSB7XG4gICAgICAgIHRoaXMubW9kZWwuaW1hZ2VzID0gW107XG4gICAgICAgIHRoaXMubW9kZWwuaXNJbWFnZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc2hvdyA9IHRydWU7XG4gICAgICAgIHRoaXMuY29udGV4dC5yb290LnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5LRVlfRE9XTl9FU0MsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VTaWRlYmFyKG51bGwpO1xuICAgICAgICB9KTtcbiAgICAgICAgbGV0IGZvcmNlVXNpbmdJbnRlcm5hbCA9IGZhbHNlO1xuICAgICAgICBsZXQgcHJvY2Vzc0Z1bmM6ICh1cmw6IHN0cmluZykgPT4gdm9pZDtcbiAgICAgICAgc3dpdGNoICh0aGlzLmRhdGEuZmlsZVR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgRklMRV9UWVBFUy5JTUFHRTpcbiAgICAgICAgICAgICAgICBwcm9jZXNzRnVuYyA9IHRoaXMucHJvY2Vzc1Nob3dJbWFnZS5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBGSUxFX1RZUEVTLlZJREVPOlxuICAgICAgICAgICAgY2FzZSBGSUxFX1RZUEVTLkFVRElPOlxuICAgICAgICAgICAgICAgIHByb2Nlc3NGdW5jID0gdGhpcy5wcm9jZXNzVmlkZW9PckF1ZGlvLmJpbmQodGhpcyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEZJTEVfVFlQRVMuUERGOlxuICAgICAgICAgICAgICAgIHByb2Nlc3NGdW5jID0gdGhpcy5wcm9jZXNzRmlsZVBkZi5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmlzSW1hZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBmb3JjZVVzaW5nSW50ZXJuYWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHByb2Nlc3NGdW5jID0gdGhpcy5wcm9jZXNzT3RoZXJGaWxlRXh0ZW5zaW9uLmJpbmQodGhpcyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuZGF0YS5maWxlVXJsIHx8IHRoaXMuZGF0YS5maWxlVXJsID09PSAnJykge1xuICAgICAgICAgICAgY29uc3QgbW9kZWwgPSB0aGlzLmdldEdlbmVyYXRlRG93bmxvYWRMaW5rTW9kZWwoKTtcbiAgICAgICAgICAgIHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2VcbiAgICAgICAgICAgICAgICAuZ2VuZXJhdGVEb3dubG9hZExpbmsobW9kZWwpXG4gICAgICAgICAgICAgICAgLnRoZW4ocnMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLl9kb3dubG9hZExpbmtTZXJ2aWNlLmdldEFub255bW91c0Rvd25sb2FkVXJsRm9yVmlld2VyKHJzLmRhdGEsIGZvcmNlVXNpbmdJbnRlcm5hbCk7XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NGdW5jKHVybCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwcm9jZXNzRnVuYyh0aGlzLmRhdGEuZmlsZVVybCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRHZW5lcmF0ZURvd25sb2FkTGlua01vZGVsKCkge1xuICAgICAgICByZXR1cm4gPEdlbmVyYXRlTGlua0Rvd25sb2FkRFRPPntcbiAgICAgICAgICAgIGZpbGVJZDogdGhpcy5kYXRhLmZpbGVJZCxcbiAgICAgICAgICAgIGZpbGVWZXJzaW9uSWQ6IHRoaXMuZGF0YS5maWxlVmVyc2lvbklkXG4gICAgICAgIH07XG4gICAgfVxuXG5cbiAgICBzaG93SW1hZ2VXaGVuTG9hZGVkKCkge1xuICAgICAgICBsZXQgZG9uZSA9IGZhbHNlO1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1hZ2Utdmlldy1saXN0Jyk7XG4gICAgICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvYWRpbmc6IGFueSA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcuaXYtbG9hZGVyJyk7XG4gICAgICAgICAgICBpZiAobG9hZGluZyAmJiBsb2FkaW5nLnN0eWxlLmRpc3BsYXkgPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW1nID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ2ltZy5pdi1pbWFnZS5pdi1sYXJnZS1pbWFnZScpO1xuICAgICAgICAgICAgICAgIGlmIChpbWcpIHtcbiAgICAgICAgICAgICAgICAgICAgaW1nLmNsYXNzTGlzdC5hZGQoJ3Nob3cnKTtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2hvd0ltYWdlV2hlbkxvYWRlZCgpLCA1MCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm9jZXNzU2hvd0ltYWdlKHVybDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMubW9kZWwuaW1hZ2VzID0gW3VybF07XG4gICAgfVxuXG4gICAgcHJvY2Vzc1ZpZGVvT3JBdWRpbyh1cmw6IHN0cmluZykge1xuICAgICAgICB0aGlzLm1vZGVsLmZpbGVVcmwgPSB1cmw7XG4gICAgfVxuXG4gICAgcHJvY2Vzc0ZpbGVQZGYodXJsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5maWxlVXJsID0gdXJsO1xuICAgIH1cblxuICAgIHByb2Nlc3NPdGhlckZpbGVFeHRlbnNpb24odXJsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5pbml0RG9jdW1lbnRWaWV3ZXIodGhpcy5kYXRhLmV4dGVuc2lvbiwgdGhpcy5kYXRhLmZpbGVUeXBlLCB1cmwpO1xuICAgIH1cblxuICAgIGluaXREb2N1bWVudFZpZXdlcihmaWxlRXh0ZW5zaW9uLCBmaWxlVHlwZSwgZmlsZVVybCkge1xuICAgICAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICB0eXBlOiB0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNEZXNrdG9wKCkgPyAnZGVza3RvcCcgOiAnbW9iaWxlJyxcbiAgICAgICAgICAgIGRvY3VtZW50VHlwZTogYCR7ZmlsZVR5cGV9YCxcbiAgICAgICAgICAgIGVkaXRvckNvbmZpZzoge1xuICAgICAgICAgICAgICAgIG1vZGU6ICd2aWV3JyxcbiAgICAgICAgICAgICAgICBjdXN0b21pemF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBhYm91dDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGNvbW1lbnRzOiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRvY3VtZW50OiB7XG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgY29tbWVudDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGRvd25sb2FkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBlZGl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgcHJpbnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHJldmlldzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGZpbGxGb3JtczogZmFsc2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGZpbGVUeXBlOiBgJHtmaWxlRXh0ZW5zaW9ufWAsXG4gICAgICAgICAgICAgICAgdGl0bGU6IGAke3RoaXMubW9kZWwuZGF0YS5uYW1lfWAsXG4gICAgICAgICAgICAgICAgdXJsOiBgJHtmaWxlVXJsfWBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5tb2RlbC5kb2NFZGl0b3IgPSBuZXcgRG9jc0FQSS5Eb2NFZGl0b3IoJ2ZpbGUtdmlld2VyJywgY29uZmlnKTtcbiAgICB9XG5cbiAgICBpbml0Rm9ybSgpIHtcbiAgICAgICAgdGhpcy5yZW5hbWVGaWxlRm9ybSA9IHtcbiAgICAgICAgICAgIGhlYWRlcjogJ8SQ4buVaSB0w6puIHThu4dwJyxcbiAgICAgICAgICAgIHNob3c6IGZhbHNlLFxuICAgICAgICAgICAgZm9ybURhdGE6IG5ldyBDcnVkRm9ybURhdGEoKSxcbiAgICAgICAgICAgIHBvcHVwU2l6ZTogbmV3IFBvcHVwU2l6ZSh7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDQwMCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDIwMFxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRPcmllbnRhdGlvbihpbWFnZVVybCwgY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goaW1hZ2VVcmwpO1xuICAgICAgICBjb25zdCBibG9iID0gYXdhaXQgcmVzLmJsb2IoKTtcblxuICAgICAgICByZWFkZXIub25sb2FkID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXcgPSBuZXcgRGF0YVZpZXcoZXZlbnQudGFyZ2V0LnJlc3VsdCk7XG5cbiAgICAgICAgICAgIGlmICh2aWV3LmdldFVpbnQxNigwLCBmYWxzZSkgIT0gMHhGRkQ4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGJsb2IsIC0yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gdmlldy5ieXRlTGVuZ3RoO1xuICAgICAgICAgICAgbGV0IG9mZnNldCA9IDI7XG5cbiAgICAgICAgICAgIHdoaWxlIChvZmZzZXQgPCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXJrZXIgPSB2aWV3LmdldFVpbnQxNihvZmZzZXQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMjtcblxuICAgICAgICAgICAgICAgIGlmIChtYXJrZXIgPT0gMHhGRkUxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2aWV3LmdldFVpbnQzMihvZmZzZXQgKz0gMiwgZmFsc2UpICE9IDB4NDU3ODY5NjYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhibG9iLCAtMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGl0dGxlID0gdmlldy5nZXRVaW50MTYob2Zmc2V0ICs9IDYsIGZhbHNlKSA9PSAweDQ5NDk7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSB2aWV3LmdldFVpbnQzMihvZmZzZXQgKyA0LCBsaXR0bGUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWdzID0gdmlldy5nZXRVaW50MTYob2Zmc2V0LCBsaXR0bGUpO1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMjtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhZ3M7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZpZXcuZ2V0VWludDE2KG9mZnNldCArIChpICogMTIpLCBsaXR0bGUpID09IDB4MDExMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhibG9iLCB2aWV3LmdldFVpbnQxNihvZmZzZXQgKyAoaSAqIDEyKSArIDgsIGxpdHRsZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKChtYXJrZXIgJiAweEZGMDApICE9IDB4RkYwMCkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSB2aWV3LmdldFVpbnQxNihvZmZzZXQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soYmxvYiwgLTEpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iKTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRCYXNlNjQoYmxvYiwgb3JpZW50YXRpb24pIHtcbiAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcblxuICAgICAgICAvLyBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChpbWFnZVVybCk7XG4gICAgICAgIC8vIGNvbnN0IGJsb2IgPSBhd2FpdCByZXMuYmxvYigpO1xuXG4gICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGJsb2IpO1xuICAgICAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYmFzZTY0ID0gcmVhZGVyLnJlc3VsdDtcbiAgICAgICAgICAgIHRoaXMucmVzZXRPcmllbnRhdGlvbihiYXNlNjQsIG9yaWVudGF0aW9uLCAocmVzZXRCYXNlNjRJbWFnZSkgPT4ge1xuXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbWFnZVdpdGhvdXRCYXNlNjRQcmVmaXggPSByZXNldEJhc2U2NEltYWdlLnNwbGl0KCdiYXNlNjQsJylbMV07XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5pbWFnZXMgPSBbaW1hZ2VXaXRob3V0QmFzZTY0UHJlZml4XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICByZWFkZXIub25lcnJvciA9IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yOiAnLCBlcnJvcik7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmVzZXRPcmllbnRhdGlvbihzcmNCYXNlNjQsIHNyY09yaWVudGF0aW9uLCBjYWxsYmFjaykge1xuICAgICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcblxuICAgICAgICBpbWcub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBpbWcud2lkdGgsXG4gICAgICAgICAgICAgICAgaGVpZ2h0ID0gaW1nLmhlaWdodCxcbiAgICAgICAgICAgICAgICBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKSxcbiAgICAgICAgICAgICAgICBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuICAgICAgICAgICAgLy8gc2V0IHByb3BlciBjYW52YXMgZGltZW5zaW9ucyBiZWZvcmUgdHJhbnNmb3JtICYgZXhwb3J0XG4gICAgICAgICAgICBpZiAoNCA8IHNyY09yaWVudGF0aW9uICYmIHNyY09yaWVudGF0aW9uIDwgOSkge1xuICAgICAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IGhlaWdodDtcbiAgICAgICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gd2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyB0cmFuc2Zvcm0gY29udGV4dCBiZWZvcmUgZHJhd2luZyBpbWFnZVxuICAgICAgICAgICAgc3dpdGNoIChzcmNPcmllbnRhdGlvbikge1xuICAgICAgICAgICAgICAgIGNhc2UgMjogY3R4LnRyYW5zZm9ybSgtMSwgMCwgMCwgMSwgd2lkdGgsIDApOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDM6IGN0eC50cmFuc2Zvcm0oLTEsIDAsIDAsIC0xLCB3aWR0aCwgaGVpZ2h0KTsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBjdHgudHJhbnNmb3JtKDEsIDAsIDAsIC0xLCAwLCBoZWlnaHQpOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDU6IGN0eC50cmFuc2Zvcm0oMCwgMSwgMSwgMCwgMCwgMCk7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNjogY3R4LnRyYW5zZm9ybSgwLCAxLCAtMSwgMCwgaGVpZ2h0LCAwKTsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBjdHgudHJhbnNmb3JtKDAsIC0xLCAtMSwgMCwgaGVpZ2h0LCB3aWR0aCk7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgODogY3R4LnRyYW5zZm9ybSgwLCAtMSwgMSwgMCwgMCwgd2lkdGgpOyBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZHJhdyBpbWFnZVxuICAgICAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIDAsIDApO1xuXG4gICAgICAgICAgICAvLyBleHBvcnQgYmFzZTY0XG4gICAgICAgICAgICBjYWxsYmFjayhjYW52YXMudG9EYXRhVVJMKCkpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGltZy5zcmMgPSBzcmNCYXNlNjQ7XG4gICAgfVxuXG4gICAgb25Ub3BiYXJJdGVtQ2xpY2soZXZlbnQpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5hY3RpdmVUb3BiYXJJdGVtID0gIXRoaXMubW9kZWwuYWN0aXZlVG9wYmFySXRlbTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBjbG9zZVNpZGViYXIoZXZlbnQgPSBudWxsKSB7XG4gICAgICAgIGlmICghZXZlbnQgfHwgZXZlbnQudGFyZ2V0LmlkID09ICdmaWxlVmlld2VySG9sZGVyJyB8fCBldmVudC50YXJnZXQuaWQgPT0gJ2ltYWdlLXZpZXctbGlzdCcgfHwgZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnaW1hZ2UtY29udGFpbmVyJylcbiAgICAgICAgICAgIHx8IGV2ZW50LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2l2LWltYWdlLXZpZXcnKSkge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5hY3RpdmVUb3BiYXJJdGVtID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNob3cgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMub25DbG9zZS5uZXh0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcmludCgpIHtcbiAgICAgICAgdGhpcy5fZG93bmxvYWRMaW5rU2VydmljZS5jb252ZXJ0VG9QZGYodGhpcy5kYXRhLm5hbWUsIHRoaXMuZGF0YS5maWxlSWQsIHRoaXMuZGF0YS5maWxlVmVyc2lvbklkKVxuICAgICAgICAgICAgLnRoZW4ocnMgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcnMuc3VjY2VzcyB8fCAhcnMuZGF0YSB8fCAhcnMuZGF0YS5jb250ZW50QmFzZTY0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLnByaW50KHJzLmRhdGEuY29udGVudEJhc2U2NCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBkb3dubG9hZCgpIHtcbiAgICAgICAgY29uc3QgbW9kZWwgPSB0aGlzLmdldEdlbmVyYXRlRG93bmxvYWRMaW5rTW9kZWwoKTtcbiAgICAgICAgdGhpcy5fZG93bmxvYWRMaW5rU2VydmljZS5kb3dubG9hZExpbmsobW9kZWwpO1xuICAgIH1cblxuICAgIGRlbGV0ZUZpbGUoKSB7XG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlQ29uZmlybSgpXG4gICAgICAgICAgICAudGhlbihycyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFycykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbGRlclNlcnZpY2UuZGVsZXRlTXVsdGlwbGUoW3RoaXMuZGF0YV0pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dEZWxldGVEYXRhU3VjY2VzcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VTaWRlYmFyKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25DbG9zZS5uZXh0KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nQnlSZXNwb25zZShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVuYW1lRmlsZSgpIHtcbiAgICAgICAgdGhpcy5yZW5hbWVGaWxlRm9ybS5oZWFkZXIgPSAnxJDhu5VpIHTDqm4gdGjGsCBt4bulYyc7XG4gICAgICAgIHRoaXMucmVuYW1lRmlsZUZvcm0uZm9ybURhdGEuZGF0YSA9IHtcbiAgICAgICAgICAgIGlkOiB0aGlzLmRhdGEuaWRcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnJlbmFtZUZpbGVGb3JtLnNob3cgPSB0cnVlO1xuICAgIH1cblxuICAgIGFzeW5jIG9uU2F2ZWRSZW5hbWVGaWxlKCkge1xuICAgICAgICB0aGlzLnJlbmFtZUZpbGVGb3JtLnNob3cgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZmlsZSA9IChhd2FpdCB0aGlzLl9maWxlT2JqZWN0U2VydmljZS5nZXREZXRhaWwodGhpcy5kYXRhLmlkKSkuZGF0YTtcbiAgICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5uYW1lID0gZmlsZS5uYW1lO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25DYW5jZWxSZW5hbWVGaWxlKCkge1xuICAgICAgICB0aGlzLnJlbmFtZUZpbGVGb3JtLnNob3cgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBlZGl0RmlsZSgpIHtcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKCfEkGFuZyBr4bq/dCBu4buRaSBt4bufIOG7qW5nIGThu6VuZycpO1xuXG4gICAgICAgIHRoaXMuX2ZpbGVWZXJzaW9uU2VydmljZS5jcmVhdGVOZXdNaW5vclZlcnNpb24odGhpcy5kYXRhLmZpbGVJZCwgJycsIGZhbHNlKVxuICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVWZXJzaW9uID0gPEZpbGVWZXJzaW9uRFRPPnJlc3BvbnNlLmRhdGE7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlVXJsID0gdGhpcy5fZmlsZVZlcnNpb25TZXJ2aWNlLmdldEZpbGVWZXJzaW9uRG93bmxvYWRVcmwoZmlsZVZlcnNpb24uaWQpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgY29tbWFuZCA9IG5ldyBUbkNsaWVudENvbW1hbmQoKTtcbiAgICAgICAgICAgICAgICBjb21tYW5kLmNvbW1hbmRUeXBlID0gQ29tbWFuZFR5cGUuRWRpdEZpbGU7XG4gICAgICAgICAgICAgICAgY29tbWFuZC5rZXkgPSB0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQuc2lnbmFsci5jbGllbnRLZXk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBlZGl0RmlsZUNvbW1hbmQgPSBuZXcgRWRpdEZpbGVDb21tYW5kKCk7XG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLmZpbGVTZXJ2aWNlRW5kcG9pbnQgPSB0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQuYXBpRG9tYWluLmZpbGVFbmRwb2ludDtcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQudXBsb2FkRmlsZUFwaSA9IHRoaXMuX2ZpbGVWZXJzaW9uU2VydmljZS5nZXRVcGxvYWRGaWxlVmVyc2lvbkFwaVVybCgpO1xuICAgICAgICAgICAgICAgIGVkaXRGaWxlQ29tbWFuZC5yZW1vdmVGaWxlQXBpID0gdGhpcy5fZmlsZVZlcnNpb25TZXJ2aWNlLmdldFJlbW92ZUZpbGVWZXJzaW9uQXBpVXJsKCk7XG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLmZpbGVVcmwgPSBmaWxlVXJsO1xuICAgICAgICAgICAgICAgIGVkaXRGaWxlQ29tbWFuZC5pc0RyYWZ0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQuZ3JvdXBGaWxlTmFtZSA9IHRoaXMuZGF0YS5uYW1lO1xuICAgICAgICAgICAgICAgIGVkaXRGaWxlQ29tbWFuZC5maWxlTmFtZSA9IHRoaXMuZGF0YS5uYW1lO1xuICAgICAgICAgICAgICAgIGVkaXRGaWxlQ29tbWFuZC52ZXJzaW9uID0gZmlsZVZlcnNpb24udmVyc2lvbk5hbWU7XG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLmZpbGVWZXJzaW9uSWQgPSBmaWxlVmVyc2lvbi5pZDtcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQuYWNjZXNzVG9rZW4gPSB0aGlzLl9hdXRoZW5TZXJ2aWNlLmdldEFjY2Vzc1Rva2VuKCk7XG4gICAgICAgICAgICAgICAgY29tbWFuZC5kYXRhID0gZWRpdEZpbGVDb21tYW5kO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fdG5DbGllbnRTZXJ2aWNlLnNlbmRDb21tYW5kKGNvbW1hbmQpO1xuICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChDb21tb25FcnJvckNvZGUuRVJST1JfU0VSVklDRV9OT1RfUlVOID09PSBlcnJvci5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dSZXNwb25zZUVycm9yKDAsIG51bGwsICdGaWxlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5OiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0ZJTEVfRVhQTE9SRVIuTUVTU0FHRV9FUlJPUl9IRUFERVInKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDogdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdGSUxFX0VYUExPUkVSLk1FU1NBR0VfRVJST1JfREVUQUlMJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBsaWZlOiA1MDAwXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRyeUNvbm5lY3RUb0NsaWVudCgpIHtcblxuICAgIH1cblxuICAgIGlzRGVza3RvcCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RldmljZURldGVjdG9yU2VydmljZS5pc0Rlc2t0b3AoKTtcbiAgICB9XG5cbiAgICBpc0ZpbGVUeXBlKHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5maWxlVHlwZSA9PSB0eXBlO1xuICAgIH1cbiAgICBnZXRTdHlsZUNsYXNzQnlEb2N1bWVudFR5cGUoZG9jVHlwZSkge1xuICAgICAgICBsZXQgc3R5bGVDbGFzcyA9IHRoaXMuc3R5bGVDbGFzcztcbiAgICAgICAgaWYgKGRvY1R5cGUgPT09IEZJTEVfVFlQRVMuUERGKSB7XG4gICAgICAgICAgICByZXR1cm4gc3R5bGVDbGFzcyArICcgJyArICdwZGYtY29udGFpbmVyJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3R5bGVDbGFzcztcbiAgICB9XG59XG4iXX0=
|
package/fesm2015/tnx-shared.js
CHANGED
|
@@ -33149,6 +33149,9 @@ class FileViewerComponent extends ComponentBase {
|
|
|
33149
33149
|
this.showPrint = true;
|
|
33150
33150
|
this.showDownload = true;
|
|
33151
33151
|
this.showDelete = true;
|
|
33152
|
+
this.fullScreen = true;
|
|
33153
|
+
this.showModal = true;
|
|
33154
|
+
this.styleClass = "";
|
|
33152
33155
|
this.onClose = new EventEmitter();
|
|
33153
33156
|
this.onRename = new EventEmitter();
|
|
33154
33157
|
this.onDelete = new EventEmitter();
|
|
@@ -33523,16 +33526,17 @@ class FileViewerComponent extends ComponentBase {
|
|
|
33523
33526
|
return this.data.fileType == type;
|
|
33524
33527
|
}
|
|
33525
33528
|
getStyleClassByDocumentType(docType) {
|
|
33529
|
+
let styleClass = this.styleClass;
|
|
33526
33530
|
if (docType === FILE_TYPES.PDF) {
|
|
33527
|
-
return 'pdf-container';
|
|
33531
|
+
return styleClass + ' ' + 'pdf-container';
|
|
33528
33532
|
}
|
|
33529
|
-
return
|
|
33533
|
+
return styleClass;
|
|
33530
33534
|
}
|
|
33531
33535
|
}
|
|
33532
33536
|
FileViewerComponent.decorators = [
|
|
33533
33537
|
{ type: Component, args: [{
|
|
33534
33538
|
selector: 'file-viewer',
|
|
33535
|
-
template: "<p-sidebar #sidebar [showCloseIcon]=\"false\" [fullScreen]=\"true\" [appendTo]=\"'body'\"\n [styleClass]=\"getStyleClassByDocumentType(data.fileType)\" [(visible)]=\"show\">\n <ng-container *ngIf=\"data.fileType == fileTypes.PDF\">\n <div id=\"fileViewerHolder\" class=\"file-viewer-holder\">\n <div #headerdialogmaterial class=\"header-dialog-material\">\n <div class=\"flex-item\" style=\"margin: 0px auto;\">\n <a *ngIf=\"isDesktop()\" (click)=\"!isReadonly && renameFile()\" style=\"color: white;\"\n class=\"btn btn-secondary\">\n <i class=\"fas fa-file-alt\"></i><span class=\"cursor-pointer\">\n {{ data.name }}\n </span>\n </a>\n </div>\n <div class=\"flex-item\">\n <!-- UD-2450 - TuDN -->\n <!-- <a *ngIf=\"_deviceDetectorService.isDesktop() && showPrint\" pTooltip=\"In t\u00E0i li\u1EC7u\"\n tooltipPosition=\"bottom\" placeholder=\"Bottom\" style=\"color: white;\" (click)=\"print()\"\n class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-print\"></i></a> -->\n <a *ngIf=\"showDownload\" pTooltip=\"T\u1EA3i xu\u1ED1ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\"\n style=\"color: white;\" (click)=\"download()\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-download\"></i></a>\n <!-- End UD-2450 - TuDN -->\n <a *ngIf=\"!_deviceDetectorService.isDesktop() && !readonly\" pTooltip=\"\u0110\u1ED5i t\u00EAn\"\n tooltipPosition=\"bottom\" (click)=\"renameFile()\"\n class=\"cursor-pointer button-link btn btn-secondary\" style=\"color: white;\"><i\n class=\"fas fa-eraser\"></i></a>\n <a *ngIf=\"showDelete && !readonly\" pTooltip=\"X\u00F3a t\u1EC7p tin\" tooltipPosition=\"bottom\"\n (click)=\"deleteFile()\" class=\"cursor-pointer button-link btn btn-secondary\"\n style=\"color: white;\"><i class=\"far fa-trash-alt\"></i></a>\n <a (click)=\"onTopbarItemClick($event)\" role=\"menuitem\" style=\"color: white;\"\n *ngIf=\"!readonly && _deviceDetectorService.isDesktop()\"\n class=\"cursor-pointer button-link btn btn-secondary submenu\"> <i class=\"fas fa-ellipsis-v\"></i>\n <ul class=\"layout-menu fadeInDown\" *ngIf=\"model.activeTopbarItem\">\n <li *ngIf=\"_deviceDetectorService.isDesktop()\" role=\"menuitem\" class=\"cursor-pointer\">\n <a (click)=\"editFile()\" class=\"file-row-action\"><i class=\"fas fa-pen-square\"></i>S\u1EEDa\n file\n tr\u1EF1c\n tuy\u1EBFn</a>\n </li>\n <li *ngIf=\"!isReadonly\" role=\"menuitem\" class=\"cursor-pointer\">\n <a (click)=\"renameFile()\" class=\"file-row-action\"><i class=\"fas fa-eraser\"></i>\u0110\u1ED5i\n t\u00EAn</a>\n </li>\n <li *ngIf=\"!isReadonly\" role=\"menuitem\" class=\"cursor-pointer\">\n <a (click)=\"deleteFile()\" class=\"file-row-action\"><i class=\"far fa-trash-alt\"></i>X\u00F3a\n t\u1EC7p\n tin</a>\n </li>\n </ul>\n </a>\n <a pTooltip=\"\u0110\u00F3ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\" style=\"color: white;\"\n (click)=\"closeSidebar(null)\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-times\"></i></a>\n </div>\n </div>\n </div>\n <ngx-extended-pdf-viewer [src]=\"model.fileUrl\" useBrowserLocale=\"true\" height=\"calc(100vh - 50px)\"\n [enablePinchOnMobile]=\"true\" [filenameForDownload]=\"data.fileName\" [language]=\"'vi-VN'\"\n [showBookmarkButton]=\"false\" [showHandToolButton]=\"false\" [showOpenFileButton]=\"false\"\n [showUnverifiedSignatures]=\"true\">\n </ngx-extended-pdf-viewer>\n </ng-container>\n\n <ng-container\n *ngIf=\"data.fileType != fileTypes.IMAGE && data.fileType != fileTypes.VIDEO && data.fileType != fileTypes.AUDIO && data.fileType != fileTypes.PDF\">\n <div id=\"fileViewerHolder\" class=\"file-viewer-holder\">\n <div #headerdialogmaterial class=\"header-dialog-material\">\n <div class=\"flex-item\">\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"isDesktop()\" (click)=\"!isReadonly && renameFile()\" style=\"color: white;\"\n class=\"btn btn-secondary\">\n <i class=\"fas fa-file-alt\"></i><span class=\"cursor-pointer\">\n {{ data.name }}\n </span>\n </a>\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"isDesktop() && showPrint\" pTooltip=\"In t\u00E0i li\u1EC7u\" tooltipPosition=\"bottom\"\n placeholder=\"Bottom\" style=\"color: white;\" (click)=\"print()\"\n class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-print\"></i></a>\n <a *ngIf=\"showDownload\" pTooltip=\"T\u1EA3i xu\u1ED1ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\"\n style=\"color: white;\" (click)=\"download()\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-download\"></i></a>\n <a *ngIf=\"!readonly && showDelete && isDesktop()\" pTooltip=\"X\u00F3a t\u1EC7p tin\" tooltipPosition=\"bottom\"\n (click)=\"deleteFile()\" class=\"cursor-pointer button-link btn btn-secondary\"\n style=\"color: white;\"><i class=\"pi pi-trash\"></i></a>\n <a *ngIf=\"!readonly && isDesktop()\" pTooltip=\"S\u1EEDa file tr\u1EF1c tuy\u1EBFn\" (click)=\"editFile()\"\n placeholder=\"Bottom\" class=\"cursor-pointer button-link btn btn-secondary\" style=\"color: white;\">\n <i class=\"fas fa-pen-square\"></i></a>\n\n <a (click)=\"onTopbarItemClick($event)\" role=\"menuitem\" style=\"color: white;\" *ngIf=\"!isDesktop()\"\n class=\"cursor-pointer button-link btn btn-secondary submenu\">\n <i class=\"fas fa-ellipsis-v\"></i>\n <ul class=\"layout-menu fadeInDown\" *ngIf=\"model.activeTopbarItem\">\n <li *ngIf=\"!isReadonly\" role=\"menuitem\" class=\"cursor-pointer\">\n <a (click)=\"editFile()\" class=\"file-row-action\">\n <i class=\"fas fa-pen-square\"></i>S\u1EEDa file tr\u1EF1c tuy\u1EBFn</a>\n </li>\n <li *ngIf=\"!isReadonly\" role=\"menuitem\" class=\"cursor-pointer\">\n <a (click)=\"renameFile()\" class=\"file-row-action\"><i class=\"fas fa-eraser\"></i>\u0110\u1ED5i\n t\u00EAn</a>\n </li>\n <li *ngIf=\"!isReadonly && showDelete\" role=\"menuitem\" class=\"cursor-pointer\">\n <a (click)=\"deleteFile()\" class=\"file-row-action\"><i class=\"pi pi-trash\"></i>X\u00F3a\n t\u1EC7p tin</a>\n </li>\n </ul>\n </a>\n <a pTooltip=\"\u0110\u00F3ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\" style=\"color: white;\"\n (click)=\"closeSidebar(null)\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-times\"></i></a>\n </div>\n </div>\n\n <div class=\"dialog-material\" [class.view-file]=\"true\" [class.mobile]=\"!isDesktop()\"\n [class.view-file-text]=\"isFileType(fileTypes.TEXT)\"\n [class.view-file-spreadsheet]=\"isFileType(fileTypes.SPREADSHEET)\"\n [class.view-file-presentation]=\"isFileType(fileTypes.PRESENTATION)\">\n <div id=\"file-viewer\"></div>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"data.fileType == fileTypes.IMAGE && model.images.length > 0\">\n <div class=\"image-container\">\n <div #headerdialogmaterial class=\"header-dialog-material\">\n <div class=\"flex-item\">\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"isDesktop()\" (click)=\"!isReadonly && renameFile()\" style=\"color: white;\"\n class=\"btn btn-secondary\">\n <i class=\"fas fa-file-alt\"></i><span class=\"cursor-pointer\">\n {{ data.name }}\n </span>\n </a>\n </div>\n <div class=\"flex-item\">\n <a pTooltip=\"\u0110\u00F3ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\" style=\"color: white;\"\n (click)=\"closeSidebar(null)\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-times\"></i></a>\n </div>\n </div>\n\n <img *ngIf=\"model.images && model.images.length\" src=\"{{model.images[0]}}\" alt=\"Ch\u01B0a c\u00F3 \u1EA3nh\">\n </div>\n <!-- <app-image-viewer [showPDFOnlyLabel]=\"false\" [showPDFOnlyOption]=\"false\" [fullscreen]=\"false\"\n [images]=\"model.images\" [primaryColor]=\"'#3192e1'\" [idContainer]=\"'image-view-list'\"\n (mousedown)=\"closeSidebar($event)\" id=\"fileViewerHolder\" [loadOnInit]=\"true\">\n </app-image-viewer>\n <a style=\"color: white;\" (click)=\"closeSidebar(null)\" class=\"mobile-image-viewer-close\">\n <i class=\"far fa-times-circle\"></i></a> -->\n </ng-container>\n\n <ng-container *ngIf=\"data.fileType == fileTypes.VIDEO\">\n <div id=\"fileViewerHolder\" class=\"file-viewer-holder\" style=\"height: 100%;\">\n <div #headerdialogmaterial class=\"header-dialog-material\">\n <div class=\"flex-item\">\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"isDesktop()\" (click)=\"!isReadonly && renameFile()\" style=\"color: white;\"\n class=\"btn btn-secondary\">\n <i class=\"fas fa-file-alt\"></i><span class=\"cursor-pointer\">\n {{ data.name }}\n </span>\n </a>\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"showDownload\" pTooltip=\"T\u1EA3i xu\u1ED1ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\"\n style=\"color: white;\" (click)=\"download()\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-download\"></i>\n </a>\n <a *ngIf=\"!isReadonly && !isDesktop()\" (click)=\"renameFile()\" style=\"color: white;\"\n class=\"btn btn-secondary\">\n <i class=\"fas fa-file-alt\"></i><span class=\"cursor-pointer\">\n {{ data.name }}\n </span>\n </a>\n <a *ngIf=\"!readonly && showDelete\" pTooltip=\"X\u00F3a t\u1EC7p tin\" tooltipPosition=\"bottom\"\n (click)=\"deleteFile()\" class=\"cursor-pointer button-link btn btn-secondary\"\n style=\"color: white;\"><i class=\"pi pi-trash\"></i></a>\n <a pTooltip=\"\u0110\u00F3ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\" style=\"color: white;\"\n (click)=\"closeSidebar(null)\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-times\"></i></a>\n </div>\n </div>\n\n <div class=\"dialog-material\" [class.view-file]=\"true\" [class.mobile]=\"!isDesktop()\"\n style=\"width: 80%; margin: auto; height: 100%; border-radius: 0px;\">\n <video width=\"100%\" height=\"100%\" style=\"margin-top: 50px;\" autoplay controls src=\"{{model.fileUrl}}\">\n Tr\u00ECnh duy\u1EC7t kh\u00F4ng h\u1ED7 tr\u1EE3 m\u1EDF video.\n </video>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"data.fileType == fileTypes.AUDIO\">\n <div id=\"fileViewerHolder\" class=\"file-viewer-holder\" (mousedown)=\"closeSidebar($event)\" style=\"height: 100%;\">\n <div #headerdialogmaterial class=\"header-dialog-material\">\n <div class=\"flex-item\">\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"isDesktop()\" (click)=\"!isReadonly && renameFile()\" style=\"color: white;\"\n class=\"btn btn-secondary\">\n <i class=\"fas fa-file-alt\"></i><span class=\"cursor-pointer\">\n {{ data.name }}\n </span>\n </a>\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"showDownload\" pTooltip=\"T\u1EA3i xu\u1ED1ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\"\n style=\"color: white;\" (click)=\"download()\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-download\"></i></a>\n <a *ngIf=\"!isReadonly && showDelete\" pTooltip=\"X\u00F3a t\u1EC7p tin\" tooltipPosition=\"bottom\"\n (click)=\"deleteFile()\" class=\"cursor-pointer button-link btn btn-secondary\"\n style=\"color: white;\"><i class=\"pi pi-trash\"></i></a>\n <a pTooltip=\"\u0110\u00F3ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\" style=\"color: white;\"\n (click)=\"closeSidebar(null)\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-times\"></i></a>\n </div>\n </div>\n <audio controls autoplay src=\"{{model.fileUrl}}\"\n style=\"margin: auto;position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);\">\n Tr\u00ECnh duy\u1EC7t kh\u00F4ng h\u1ED7 tr\u1EE3 ph\u00E1t audio. </audio>\n </div>\n </ng-container>\n\n</p-sidebar>\n\n<tn-dialog *ngIf=\"renameFileForm.show\" #dialog [styleClass]=\"'address-form'\"\n [header]=\"renameFileForm.header | translate\" [popupSize]=\"renameFileForm.popupSize\" (onHide)=\"onCancelRenameFile()\">\n <file-form #formBase [parentModel]=\"model\" [parentContext]=\"context\" [model]=\"renameFileForm.formData\"\n (onSaved)=\"onSavedRenameFile()\" (onCancel)=\"onCancelRenameFile()\">\n </file-form>\n</tn-dialog>",
|
|
33539
|
+
template: "<p-sidebar #sidebar [showCloseIcon]=\"false\" [fullScreen]=\"fullScreen\" [appendTo]=\"'body'\" [modal]=\"showModal\"\n [styleClass]=\"getStyleClassByDocumentType(data.fileType)\" [(visible)]=\"show\">\n <ng-container *ngIf=\"data.fileType == fileTypes.PDF\">\n <div id=\"fileViewerHolder\" class=\"file-viewer-holder\">\n <div #headerdialogmaterial class=\"header-dialog-material\">\n <div class=\"flex-item\" style=\"margin: 0px auto;\">\n <a *ngIf=\"isDesktop()\" (click)=\"!isReadonly && renameFile()\" style=\"color: white;\"\n class=\"btn btn-secondary\">\n <i class=\"fas fa-file-alt\"></i><span class=\"cursor-pointer\">\n {{ data.name }}\n </span>\n </a>\n </div>\n <div class=\"flex-item\">\n <!-- UD-2450 - TuDN -->\n <!-- <a *ngIf=\"_deviceDetectorService.isDesktop() && showPrint\" pTooltip=\"In t\u00E0i li\u1EC7u\"\n tooltipPosition=\"bottom\" placeholder=\"Bottom\" style=\"color: white;\" (click)=\"print()\"\n class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-print\"></i></a> -->\n <a *ngIf=\"showDownload\" pTooltip=\"T\u1EA3i xu\u1ED1ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\"\n style=\"color: white;\" (click)=\"download()\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-download\"></i></a>\n <!-- End UD-2450 - TuDN -->\n <a *ngIf=\"!_deviceDetectorService.isDesktop() && !readonly\" pTooltip=\"\u0110\u1ED5i t\u00EAn\"\n tooltipPosition=\"bottom\" (click)=\"renameFile()\"\n class=\"cursor-pointer button-link btn btn-secondary\" style=\"color: white;\"><i\n class=\"fas fa-eraser\"></i></a>\n <a *ngIf=\"showDelete && !readonly\" pTooltip=\"X\u00F3a t\u1EC7p tin\" tooltipPosition=\"bottom\"\n (click)=\"deleteFile()\" class=\"cursor-pointer button-link btn btn-secondary\"\n style=\"color: white;\"><i class=\"far fa-trash-alt\"></i></a>\n <a (click)=\"onTopbarItemClick($event)\" role=\"menuitem\" style=\"color: white;\"\n *ngIf=\"!readonly && _deviceDetectorService.isDesktop()\"\n class=\"cursor-pointer button-link btn btn-secondary submenu\"> <i class=\"fas fa-ellipsis-v\"></i>\n <ul class=\"layout-menu fadeInDown\" *ngIf=\"model.activeTopbarItem\">\n <li *ngIf=\"_deviceDetectorService.isDesktop()\" role=\"menuitem\" class=\"cursor-pointer\">\n <a (click)=\"editFile()\" class=\"file-row-action\"><i class=\"fas fa-pen-square\"></i>S\u1EEDa\n file\n tr\u1EF1c\n tuy\u1EBFn</a>\n </li>\n <li *ngIf=\"!isReadonly\" role=\"menuitem\" class=\"cursor-pointer\">\n <a (click)=\"renameFile()\" class=\"file-row-action\"><i class=\"fas fa-eraser\"></i>\u0110\u1ED5i\n t\u00EAn</a>\n </li>\n <li *ngIf=\"!isReadonly\" role=\"menuitem\" class=\"cursor-pointer\">\n <a (click)=\"deleteFile()\" class=\"file-row-action\"><i class=\"far fa-trash-alt\"></i>X\u00F3a\n t\u1EC7p\n tin</a>\n </li>\n </ul>\n </a>\n <a pTooltip=\"\u0110\u00F3ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\" style=\"color: white;\"\n (click)=\"closeSidebar(null)\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-times\"></i></a>\n </div>\n </div>\n </div>\n <ngx-extended-pdf-viewer [src]=\"model.fileUrl\" useBrowserLocale=\"true\" height=\"calc(100vh - 50px)\"\n [enablePinchOnMobile]=\"true\" [filenameForDownload]=\"data.fileName\" [language]=\"'vi-VN'\"\n [showBookmarkButton]=\"false\" [showHandToolButton]=\"false\" [showOpenFileButton]=\"false\"\n [showUnverifiedSignatures]=\"true\">\n </ngx-extended-pdf-viewer>\n </ng-container>\n\n <ng-container\n *ngIf=\"data.fileType != fileTypes.IMAGE && data.fileType != fileTypes.VIDEO && data.fileType != fileTypes.AUDIO && data.fileType != fileTypes.PDF\">\n <div id=\"fileViewerHolder\" class=\"file-viewer-holder\">\n <div #headerdialogmaterial class=\"header-dialog-material\">\n <div class=\"flex-item\">\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"isDesktop()\" (click)=\"!isReadonly && renameFile()\" style=\"color: white;\"\n class=\"btn btn-secondary\">\n <i class=\"fas fa-file-alt\"></i><span class=\"cursor-pointer\">\n {{ data.name }}\n </span>\n </a>\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"isDesktop() && showPrint\" pTooltip=\"In t\u00E0i li\u1EC7u\" tooltipPosition=\"bottom\"\n placeholder=\"Bottom\" style=\"color: white;\" (click)=\"print()\"\n class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-print\"></i></a>\n <a *ngIf=\"showDownload\" pTooltip=\"T\u1EA3i xu\u1ED1ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\"\n style=\"color: white;\" (click)=\"download()\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-download\"></i></a>\n <a *ngIf=\"!readonly && showDelete && isDesktop()\" pTooltip=\"X\u00F3a t\u1EC7p tin\" tooltipPosition=\"bottom\"\n (click)=\"deleteFile()\" class=\"cursor-pointer button-link btn btn-secondary\"\n style=\"color: white;\"><i class=\"pi pi-trash\"></i></a>\n <a *ngIf=\"!readonly && isDesktop()\" pTooltip=\"S\u1EEDa file tr\u1EF1c tuy\u1EBFn\" (click)=\"editFile()\"\n placeholder=\"Bottom\" class=\"cursor-pointer button-link btn btn-secondary\" style=\"color: white;\">\n <i class=\"fas fa-pen-square\"></i></a>\n\n <a (click)=\"onTopbarItemClick($event)\" role=\"menuitem\" style=\"color: white;\" *ngIf=\"!isDesktop()\"\n class=\"cursor-pointer button-link btn btn-secondary submenu\">\n <i class=\"fas fa-ellipsis-v\"></i>\n <ul class=\"layout-menu fadeInDown\" *ngIf=\"model.activeTopbarItem\">\n <li *ngIf=\"!isReadonly\" role=\"menuitem\" class=\"cursor-pointer\">\n <a (click)=\"editFile()\" class=\"file-row-action\">\n <i class=\"fas fa-pen-square\"></i>S\u1EEDa file tr\u1EF1c tuy\u1EBFn</a>\n </li>\n <li *ngIf=\"!isReadonly\" role=\"menuitem\" class=\"cursor-pointer\">\n <a (click)=\"renameFile()\" class=\"file-row-action\"><i class=\"fas fa-eraser\"></i>\u0110\u1ED5i\n t\u00EAn</a>\n </li>\n <li *ngIf=\"!isReadonly && showDelete\" role=\"menuitem\" class=\"cursor-pointer\">\n <a (click)=\"deleteFile()\" class=\"file-row-action\"><i class=\"pi pi-trash\"></i>X\u00F3a\n t\u1EC7p tin</a>\n </li>\n </ul>\n </a>\n <a pTooltip=\"\u0110\u00F3ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\" style=\"color: white;\"\n (click)=\"closeSidebar(null)\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-times\"></i></a>\n </div>\n </div>\n\n <div class=\"dialog-material\" [class.view-file]=\"true\" [class.mobile]=\"!isDesktop()\"\n [class.view-file-text]=\"isFileType(fileTypes.TEXT)\"\n [class.view-file-spreadsheet]=\"isFileType(fileTypes.SPREADSHEET)\"\n [class.view-file-presentation]=\"isFileType(fileTypes.PRESENTATION)\">\n <div id=\"file-viewer\"></div>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"data.fileType == fileTypes.IMAGE && model.images.length > 0\">\n <div class=\"image-container\">\n <div #headerdialogmaterial class=\"header-dialog-material\">\n <div class=\"flex-item\">\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"isDesktop()\" (click)=\"!isReadonly && renameFile()\" style=\"color: white;\"\n class=\"btn btn-secondary\">\n <i class=\"fas fa-file-alt\"></i><span class=\"cursor-pointer\">\n {{ data.name }}\n </span>\n </a>\n </div>\n <div class=\"flex-item\">\n <a pTooltip=\"\u0110\u00F3ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\" style=\"color: white;\"\n (click)=\"closeSidebar(null)\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-times\"></i></a>\n </div>\n </div>\n\n <img *ngIf=\"model.images && model.images.length\" src=\"{{model.images[0]}}\" alt=\"Ch\u01B0a c\u00F3 \u1EA3nh\">\n </div>\n <!-- <app-image-viewer [showPDFOnlyLabel]=\"false\" [showPDFOnlyOption]=\"false\" [fullscreen]=\"false\"\n [images]=\"model.images\" [primaryColor]=\"'#3192e1'\" [idContainer]=\"'image-view-list'\"\n (mousedown)=\"closeSidebar($event)\" id=\"fileViewerHolder\" [loadOnInit]=\"true\">\n </app-image-viewer>\n <a style=\"color: white;\" (click)=\"closeSidebar(null)\" class=\"mobile-image-viewer-close\">\n <i class=\"far fa-times-circle\"></i></a> -->\n </ng-container>\n\n <ng-container *ngIf=\"data.fileType == fileTypes.VIDEO\">\n <div id=\"fileViewerHolder\" class=\"file-viewer-holder\" style=\"height: 100%;\">\n <div #headerdialogmaterial class=\"header-dialog-material\">\n <div class=\"flex-item\">\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"isDesktop()\" (click)=\"!isReadonly && renameFile()\" style=\"color: white;\"\n class=\"btn btn-secondary\">\n <i class=\"fas fa-file-alt\"></i><span class=\"cursor-pointer\">\n {{ data.name }}\n </span>\n </a>\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"showDownload\" pTooltip=\"T\u1EA3i xu\u1ED1ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\"\n style=\"color: white;\" (click)=\"download()\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-download\"></i>\n </a>\n <a *ngIf=\"!isReadonly && !isDesktop()\" (click)=\"renameFile()\" style=\"color: white;\"\n class=\"btn btn-secondary\">\n <i class=\"fas fa-file-alt\"></i><span class=\"cursor-pointer\">\n {{ data.name }}\n </span>\n </a>\n <a *ngIf=\"!readonly && showDelete\" pTooltip=\"X\u00F3a t\u1EC7p tin\" tooltipPosition=\"bottom\"\n (click)=\"deleteFile()\" class=\"cursor-pointer button-link btn btn-secondary\"\n style=\"color: white;\"><i class=\"pi pi-trash\"></i></a>\n <a pTooltip=\"\u0110\u00F3ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\" style=\"color: white;\"\n (click)=\"closeSidebar(null)\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-times\"></i></a>\n </div>\n </div>\n\n <div class=\"dialog-material\" [class.view-file]=\"true\" [class.mobile]=\"!isDesktop()\"\n style=\"width: 80%; margin: auto; height: 100%; border-radius: 0px;\">\n <video width=\"100%\" height=\"100%\" style=\"margin-top: 50px;\" autoplay controls src=\"{{model.fileUrl}}\">\n Tr\u00ECnh duy\u1EC7t kh\u00F4ng h\u1ED7 tr\u1EE3 m\u1EDF video.\n </video>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"data.fileType == fileTypes.AUDIO\">\n <div id=\"fileViewerHolder\" class=\"file-viewer-holder\" (mousedown)=\"closeSidebar($event)\" style=\"height: 100%;\">\n <div #headerdialogmaterial class=\"header-dialog-material\">\n <div class=\"flex-item\">\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"isDesktop()\" (click)=\"!isReadonly && renameFile()\" style=\"color: white;\"\n class=\"btn btn-secondary\">\n <i class=\"fas fa-file-alt\"></i><span class=\"cursor-pointer\">\n {{ data.name }}\n </span>\n </a>\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"showDownload\" pTooltip=\"T\u1EA3i xu\u1ED1ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\"\n style=\"color: white;\" (click)=\"download()\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-download\"></i></a>\n <a *ngIf=\"!isReadonly && showDelete\" pTooltip=\"X\u00F3a t\u1EC7p tin\" tooltipPosition=\"bottom\"\n (click)=\"deleteFile()\" class=\"cursor-pointer button-link btn btn-secondary\"\n style=\"color: white;\"><i class=\"pi pi-trash\"></i></a>\n <a pTooltip=\"\u0110\u00F3ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\" style=\"color: white;\"\n (click)=\"closeSidebar(null)\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-times\"></i></a>\n </div>\n </div>\n <audio controls autoplay src=\"{{model.fileUrl}}\"\n style=\"margin: auto;position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);\">\n Tr\u00ECnh duy\u1EC7t kh\u00F4ng h\u1ED7 tr\u1EE3 ph\u00E1t audio. </audio>\n </div>\n </ng-container>\n\n</p-sidebar>\n\n<tn-dialog *ngIf=\"renameFileForm.show\" #dialog [styleClass]=\"'address-form'\"\n [header]=\"renameFileForm.header | translate\" [popupSize]=\"renameFileForm.popupSize\" (onHide)=\"onCancelRenameFile()\">\n <file-form #formBase [parentModel]=\"model\" [parentContext]=\"context\" [model]=\"renameFileForm.formData\"\n (onSaved)=\"onSavedRenameFile()\" (onCancel)=\"onCancelRenameFile()\">\n </file-form>\n</tn-dialog>",
|
|
33536
33540
|
providers: [ComponentContextService],
|
|
33537
33541
|
styles: ["::ng-deep .pdf-container ngx-extended-pdf-viewer #outerContainer{top:51px}.view-file{height:92vh}.dialog-material{display:block;border-radius:4px;box-sizing:border-box;overflow:hidden;outline:0;min-height:inherit;max-height:inherit;width:50vw;width:100%}.dialog-material.view-file-text{width:85%;margin:0 auto}.dialog-material.view-file-text.mobile{width:100%;margin:0 auto}.header-dialog-material{display:flex;flex-direction:row;justify-content:space-between;padding:5px 15px;box-sizing:border-box;outline:0;height:50px;line-height:50px;background:#3192e1;position:absolute;pointer-events:auto;left:0;right:0;top:0;width:auto}.header-dialog-material .flex-item{line-height:40px}.header-dialog-material .flex-item .cursor-pointer{cursor:pointer;display:inline-block;padding:0 15px}.header-dialog-material .flex-item .cursor-pointer.submenu{position:relative}.header-dialog-material .flex-item .cursor-pointer.submenu ul{display:flex;position:absolute;top:25px;right:0;align-content:flex-end;flex-direction:column;width:230px;border-radius:2px;padding:5px 0;background:#fff;box-shadow:0 6px 12px rgba(0,0,0,.175);z-index:1}.header-dialog-material .flex-item .cursor-pointer.submenu ul li{padding:0}.header-dialog-material .flex-item .cursor-pointer.submenu ul li a{padding:0 0 0 5px;line-height:40px}.header-dialog-material .flex-item .cursor-pointer.submenu ul li a:hover{background:#f5f5f5}.header-dialog-material ul:before{top:-8px;right:8px;left:auto;width:0;height:0;border-left:8px solid transparent;border-right:8px solid transparent;border-bottom:10px solid #fff;content:\" \";position:absolute}.mat-dialog-content{display:block;margin:0;padding:0;max-height:100vh;max-width:50vw;overflow:auto;-webkit-overflow-scrolling:touch}::ng-deep .cdk-overlay-container{position:fixed;z-index:1000;background:rgba(0,0,0,.7)!important}::ng-deep .cdk-overlay-backdrop{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:rgba(0,0,0,0);transition:opacity .4s cubic-bezier(.25,.8,.25,1);opacity:0}::ng-deep .mat-dialog-container{display:block;padding:0!important}::ng-deep .cdk-overlay-pane{max-height:100%}.button-link:hover{transition:background-color .1s,opacity .1s;background-image:none;background-color:hsla(0,0%,100%,.25)}.file-row-action i{margin-right:5px;width:40px;text-align:center}.file-row-action{line-height:34px;width:100%;display:block;color:#212529}.layout-menu li a{border:none;text-align:left}.layout-menu li a i:first-child{color:#666;font-size:1em}.footer-page{position:absolute;left:50%;margin-right:-50%;transform:translate(-50%);border-radius:3px;bottom:12px;z-index:3;overflow:hidden}.footer-page-label{border-right:1px solid hsla(0,0%,100%,.2);display:inline-block;font-size:13px;line-height:44px;height:44px;vertical-align:middle;background:#000}.footer-page-label-page{display:inline-block;margin-left:12px;vertical-align:middle;background:rgba(0,0,0,.75);color:#fff}.footer-page-label-numberpage{display:inline-block;text-align:center;vertical-align:middle;width:48px;color:#fff}.footer-page-label-space{display:inline-block;margin-left:12px;vertical-align:middle;color:#fff}.footer-page-label-totalpage{display:inline-block;text-align:center;vertical-align:middle;width:48px;color:#fff}::ng-deep p-table .ui-table-tbody>tr>td{overflow:unset}::ng-deep .ui-sidebar-left.ui-sidebar-active{padding-top:55px;background:rgba(0,0,0,.4);border:0}::ng-deep .layout-wrapper .layout-menu-container{border-radius:unset}::ng-deep .p-sidebar{padding:0!important;background-color:#000}@media print{::ng-deep body *{visibility:visible!important}}::ng-deep .image-container{display:flex;justify-content:center;background-color:#000}::ng-deep .image-container .image-container-toolbar{display:flex;justify-content:flex-end}::ng-deep .image-container>img{height:calc(100ch - 50px)!important;max-height:100%!important;margin-top:50px}"]
|
|
33538
33542
|
},] }
|
|
@@ -33561,6 +33565,9 @@ FileViewerComponent.propDecorators = {
|
|
|
33561
33565
|
showPrint: [{ type: Input }],
|
|
33562
33566
|
showDownload: [{ type: Input }],
|
|
33563
33567
|
showDelete: [{ type: Input }],
|
|
33568
|
+
fullScreen: [{ type: Input }],
|
|
33569
|
+
showModal: [{ type: Input }],
|
|
33570
|
+
styleClass: [{ type: Input }],
|
|
33564
33571
|
onClose: [{ type: Output }],
|
|
33565
33572
|
onRename: [{ type: Output }],
|
|
33566
33573
|
onDelete: [{ type: Output }]
|