UNPKG

@dotglitch/ngx-common

Version:

Angular components and utilities that are commonly used.

165 lines 26.3 kB
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core'; import { MatIconModule } from '@angular/material/icon'; import { MatButtonModule } from '@angular/material/button'; import { GtkIconButtonComponent } from './icon-button/icon-button.component'; import { GtkBreadcrumbComponent } from './breadcrumb/breadcrumb.component'; import { uploadFile } from '../helpers'; import { MenuDirective } from '../../../public-api'; import * as i0 from "@angular/core"; import * as i1 from "../filemanager.component"; import * as i2 from "../../../public-api"; import * as i3 from "@angular/material/icon"; import * as i4 from "@angular/material/button"; export class ToolbarComponent { constructor(fileManager, dialog, fetch) { this.fileManager = fileManager; this.dialog = dialog; this.fetch = fetch; this.onBreadcrumbClick = new EventEmitter(); this.currentTab = {}; this.showHiddenFilesChange = new EventEmitter(); this.showSidebarChange = new EventEmitter(); this.drawerMode = false; this.showBareMinimum = false; this.fileOptions = [ { label: "New Folder", action: (folder) => { this.dialog.open("folder-rename", "@dotglitch/ngx-web-components", { inputs: { path: this.currentTab.path, name: '', config: this.config } }); } }, { label: "Upload file", icon: "file_upload", action: (evt) => uploadFile(this.fetch, this.config, this.fileManager.currentTab.path, null, this.fileManager.contextTags).then(res => { // Tell the current tab to reload it's data. const tab = this.fileManager.currentTab; const grid = this.fileManager.fileGrids.find(t => t.tab.id == tab.id); grid.loadFolder(); }) }, // { // label: "Add to Bookmarks (WIP)", // action: (folder) => { // // // } // }, // "separator", // { // label: "Paste", // action: (folder) => { // // // } // }, // { // label: "Select All", // action: (folder) => { // // // } // }, // "separator", // { // label: "Properties", // action: (folder) => { // // // } // }, ]; this.sortOptions = [ { label: "Sort", separator: true }, { label: "A-Z", action: () => this.setSorter('a-z') }, { label: "Z-A", action: () => this.setSorter('z-a') }, { label: "Last Modified", action: () => this.setSorter('lastmod') }, { label: "First Modified", action: () => this.setSorter('firstmod') }, { label: "Size", action: () => this.setSorter('size') }, { label: "Type", action: () => this.setSorter('type') }, "separator", { label: "Refresh", action: () => this.fileManager.currentFileGrid.loadFolder() } ]; } historyBack(tab) { console.log("history ->", tab); tab.historyIndex--; tab.path = tab.history[tab.historyIndex - 1]; } historyForward(tab) { console.log("history <-", tab); tab.historyIndex++; tab.path = tab.history[tab.historyIndex - 1]; } toggleDrawer() { if ([...this.fileManager.drawer._drawers][0].opened) this.fileManager.drawer.close(); else this.fileManager.drawer.open(); } setSorter(mode) { this.fileManager.currentTab.sortOrder = mode; this.fileManager.refreshSorting(); } onRefresh() { // console.log(this.fileManager); this.fileManager.fileGrids.forEach(g => g.loadFolder()); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ToolbarComponent, deps: [{ token: i1.FilemanagerComponent }, { token: i2.DialogService }, { token: i2.Fetch }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: ToolbarComponent, isStandalone: true, selector: "app-toolbar", inputs: { config: "config", currentTab: "currentTab", showHiddenFiles: "showHiddenFiles", showSidebar: "showSidebar", drawerMode: "drawerMode", showBareMinimum: "showBareMinimum" }, outputs: { onBreadcrumbClick: "onBreadcrumbClick", showHiddenFilesChange: "showHiddenFilesChange", showSidebarChange: "showSidebarChange" }, viewQueries: [{ propertyName: "zoomTemplate", first: true, predicate: ["zoomTemplate"], descendants: true }, { propertyName: "actionTemplate", first: true, predicate: ["actionTemplate"], descendants: true }], ngImport: i0, template: "@if (fileManager.sidebarOverlay && !drawerMode) {\n <button\n mat-icon-button\n (click)=\"toggleDrawer()\"\n >\n <mat-icon>list</mat-icon>\n </button>\n}\n\n@if (!showBareMinimum) {\n <div class=\"buttongroup\">\n <gtk-icon-button\n fontIcon=\"arrow_back_ios_new\"\n (click)=\"historyBack(currentTab)\"\n [disabled]=\"currentTab.history?.length <= 1\"\n />\n <gtk-icon-button\n fontIcon=\"arrow_forward_ios\"\n (click)=\"historyForward(currentTab)\"\n [disabled]=\"currentTab.historyIndex >= (currentTab.history?.length-1)\"\n />\n </div>\n\n @if (!drawerMode) {\n <div style=\"width: 40px\"></div>\n }\n <gtk-icon-button\n fontIcon=\"sync\"\n (click)=\"onRefresh()\"\n />\n}\n\n@if (currentTab) {\n <app-breadcrumb\n style=\"flex: 1\"\n [crumbs]=\"currentTab.breadcrumb\"\n (crumbClick)=\"onBreadcrumbClick.next($event)\"\n [config]=\"config\"\n />\n}\n\n@if (!drawerMode) {\n <!-- <div style=\"flex: 1\"></div> -->\n\n <gtk-icon-button\n fontIcon=\"more_vert\"\n [ngx-menu]=\"fileOptions\"\n [ngx-menu-config]=\"{position: 'bottom'}\"\n />\n\n <div style=\"width: 8px\"></div>\n\n <!-- <gtk-icon-button\n fontIcon=\"search\"\n /> -->\n\n @if (fileManager.width > 800) {\n <div style=\"width: 100px\"></div>\n }\n\n <gtk-icon-button\n [fontIcon]=\"currentTab.viewMode == 'list' ? 'view_list' : 'grid_view'\"\n (click)=\"currentTab.viewMode = currentTab.viewMode == 'list' ? 'grid' : 'list'; fileManager.onResize()\"\n />\n\n <gtk-icon-button\n fontIcon=\"sort\"\n [ngx-menu]=\"sortOptions\"\n [ngx-menu-config]=\"{position: 'bottom'}\"\n />\n\n}\n", styles: [":host{display:flex}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: GtkIconButtonComponent, selector: "gtk-icon-button", inputs: ["fontIcon", "disabled"], outputs: ["click"] }, { kind: "component", type: GtkBreadcrumbComponent, selector: "app-breadcrumb", inputs: ["crumbs", "config"], outputs: ["crumbClick"] }, { kind: "directive", type: MenuDirective, selector: "[ngx-contextmenu],[ngx-menu]", inputs: ["ngx-menu-context", "ngx-contextmenu", "ngx-menu", "ngx-menu-config"] }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ToolbarComponent, decorators: [{ type: Component, args: [{ selector: 'app-toolbar', imports: [ MatIconModule, MatButtonModule, GtkIconButtonComponent, GtkBreadcrumbComponent, MenuDirective ], standalone: true, template: "@if (fileManager.sidebarOverlay && !drawerMode) {\n <button\n mat-icon-button\n (click)=\"toggleDrawer()\"\n >\n <mat-icon>list</mat-icon>\n </button>\n}\n\n@if (!showBareMinimum) {\n <div class=\"buttongroup\">\n <gtk-icon-button\n fontIcon=\"arrow_back_ios_new\"\n (click)=\"historyBack(currentTab)\"\n [disabled]=\"currentTab.history?.length <= 1\"\n />\n <gtk-icon-button\n fontIcon=\"arrow_forward_ios\"\n (click)=\"historyForward(currentTab)\"\n [disabled]=\"currentTab.historyIndex >= (currentTab.history?.length-1)\"\n />\n </div>\n\n @if (!drawerMode) {\n <div style=\"width: 40px\"></div>\n }\n <gtk-icon-button\n fontIcon=\"sync\"\n (click)=\"onRefresh()\"\n />\n}\n\n@if (currentTab) {\n <app-breadcrumb\n style=\"flex: 1\"\n [crumbs]=\"currentTab.breadcrumb\"\n (crumbClick)=\"onBreadcrumbClick.next($event)\"\n [config]=\"config\"\n />\n}\n\n@if (!drawerMode) {\n <!-- <div style=\"flex: 1\"></div> -->\n\n <gtk-icon-button\n fontIcon=\"more_vert\"\n [ngx-menu]=\"fileOptions\"\n [ngx-menu-config]=\"{position: 'bottom'}\"\n />\n\n <div style=\"width: 8px\"></div>\n\n <!-- <gtk-icon-button\n fontIcon=\"search\"\n /> -->\n\n @if (fileManager.width > 800) {\n <div style=\"width: 100px\"></div>\n }\n\n <gtk-icon-button\n [fontIcon]=\"currentTab.viewMode == 'list' ? 'view_list' : 'grid_view'\"\n (click)=\"currentTab.viewMode = currentTab.viewMode == 'list' ? 'grid' : 'list'; fileManager.onResize()\"\n />\n\n <gtk-icon-button\n fontIcon=\"sort\"\n [ngx-menu]=\"sortOptions\"\n [ngx-menu-config]=\"{position: 'bottom'}\"\n />\n\n}\n", styles: [":host{display:flex}\n"] }] }], ctorParameters: () => [{ type: i1.FilemanagerComponent }, { type: i2.DialogService }, { type: i2.Fetch }], propDecorators: { zoomTemplate: [{ type: ViewChild, args: ['zoomTemplate'] }], actionTemplate: [{ type: ViewChild, args: ['actionTemplate'] }], config: [{ type: Input }], onBreadcrumbClick: [{ type: Output }], currentTab: [{ type: Input }], showHiddenFiles: [{ type: Input }], showHiddenFilesChange: [{ type: Output }], showSidebar: [{ type: Input }], showSidebarChange: [{ type: Output }], drawerMode: [{ type: Input }], showBareMinimum: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbGJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2NvbXBvbmVudHMvZmlsZW1hbmFnZXIvdG9vbGJhci90b29sYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvY29tcG9uZW50cy9maWxlbWFuYWdlci90b29sYmFyL3Rvb2xiYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBZSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0YsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUczRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3hDLE9BQU8sRUFBd0IsYUFBYSxFQUFZLE1BQU0scUJBQXFCLENBQUM7Ozs7OztBQWVwRixNQUFNLE9BQU8sZ0JBQWdCO0lBbUJ6QixZQUNXLFdBQWlDLEVBQ2hDLE1BQXFCLEVBQ3JCLEtBQVk7UUFGYixnQkFBVyxHQUFYLFdBQVcsQ0FBc0I7UUFDaEMsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNyQixVQUFLLEdBQUwsS0FBSyxDQUFPO1FBZmQsc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUV4QyxlQUFVLEdBQWdCLEVBQVMsQ0FBQztRQUduQywwQkFBcUIsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRXBELHNCQUFpQixHQUFHLElBQUksWUFBWSxF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T0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDNUQsQ0FBQzs4R0F2SVEsZ0JBQWdCO2tHQUFoQixnQkFBZ0IsMmxCQ3hCN0IsNnpEQXdFQSw4RUR4RFEsYUFBYSxtTEFDYixlQUFlLDRJQUNmLHNCQUFzQixrSEFDdEIsc0JBQXNCLGtIQUN0QixhQUFhOzsyRkFJUixnQkFBZ0I7a0JBYjVCLFNBQVM7K0JBQ0ksYUFBYSxXQUdkO3dCQUNMLGFBQWE7d0JBQ2IsZUFBZTt3QkFDZixzQkFBc0I7d0JBQ3RCLHNCQUFzQjt3QkFDdEIsYUFBYTtxQkFDaEIsY0FDVyxJQUFJO3lJQUdXLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYztnQkFDSSxjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFFbEIsTUFBTTtzQkFBZCxLQUFLO2dCQUdJLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFFRSxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0kscUJBQXFCO3NCQUE5QixNQUFNO2dCQUNFLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0ksaUJBQWlCO3NCQUExQixNQUFNO2dCQUVFLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBHdGtJY29uQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi9pY29uLWJ1dHRvbi9pY29uLWJ1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgR3RrQnJlYWRjcnVtYkNvbXBvbmVudCB9IGZyb20gJy4vYnJlYWRjcnVtYi9icmVhZGNydW1iLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGaWxlbWFuYWdlckNvbXBvbmVudCwgRmlsZVZpZXdUYWIsIEZTRGVzY3JpcHRvciwgTmd4RmlsZU1hbmFnZXJDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vZmlsZW1hbmFnZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEZpbGVTb3J0aW5nIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgdXBsb2FkRmlsZSB9IGZyb20gJy4uL2hlbHBlcnMnO1xuaW1wb3J0IHsgRGlhbG9nU2VydmljZSwgRmV0Y2gsIE1lbnVEaXJlY3RpdmUsIE1lbnVJdGVtIH0gZnJvbSAnLi4vLi4vLi4vcHVibGljLWFwaSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLXRvb2xiYXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90b29sYmFyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi90b29sYmFyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgaW1wb3J0czogW1xuICAgICAgICBNYXRJY29uTW9kdWxlLFxuICAgICAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgICAgIEd0a0ljb25CdXR0b25Db21wb25lbnQsXG4gICAgICAgIEd0a0JyZWFkY3J1bWJDb21wb25lbnQsXG4gICAgICAgIE1lbnVEaXJlY3RpdmVcbiAgICBdLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgVG9vbGJhckNvbXBvbmVudCB7XG4gICAgQFZpZXdDaGlsZCgnem9vbVRlbXBsYXRlJykgem9vbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBWaWV3Q2hpbGQoJ2FjdGlvblRlbXBsYXRlJykgYWN0aW9uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBASW5wdXQoKSBjb25maWc6IE5neEZpbGVNYW5hZ2VyQ29uZmlndXJhdGlvbjtcblxuXG4gICAgQE91dHB1dCgpIG9uQnJlYWRjcnVtYkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQElucHV0KCkgY3VycmVudFRhYjogRmlsZVZpZXdUYWIgPSB7fSBhcyBhbnk7XG5cbiAgICBASW5wdXQoKSBzaG93SGlkZGVuRmlsZXM6IGJvb2xlYW47XG4gICAgQE91dHB1dCgpIHNob3dIaWRkZW5GaWxlc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgICBASW5wdXQoKSBzaG93U2lkZWJhcjogYm9vbGVhbjtcbiAgICBAT3V0cHV0KCkgc2hvd1NpZGViYXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICBASW5wdXQoKSBkcmF3ZXJNb2RlID0gZmFsc2U7XG4gICAgQElucHV0KCkgc2hvd0JhcmVNaW5pbXVtID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGZpbGVNYW5hZ2VyOiBGaWxlbWFuYWdlckNvbXBvbmVudCxcbiAgICAgICAgcHJpdmF0ZSBkaWFsb2c6IERpYWxvZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZmV0Y2g6IEZldGNoXG4gICAgKSB7XG5cbiAgICB9XG5cbiAgICBmaWxlT3B0aW9uczogTWVudUl0ZW08RlNEZXNjcmlwdG9yPltdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgICBsYWJlbDogXCJOZXcgRm9sZGVyXCIsXG4gICAgICAgICAgICBhY3Rpb246IChmb2xkZXIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZy5vcGVuKFwiZm9sZGVyLXJlbmFtZVwiLCBcIkBkb3RnbGl0Y2gvbmd4LXdlYi1jb21wb25lbnRzXCIsIHsgaW5wdXRzOiB7IHBhdGg6IHRoaXMuY3VycmVudFRhYi5wYXRoLCBuYW1lOiAnJywgY29uZmlnOiB0aGlzLmNvbmZpZyB9IH0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiBcIlVwbG9hZCBmaWxlXCIsXG4gICAgICAgICAgICBpY29uOiBcImZpbGVfdXBsb2FkXCIsXG4gICAgICAgICAgICBhY3Rpb246IChldnQpID0+IHVwbG9hZEZpbGUodGhpcy5mZXRjaCwgdGhpcy5jb25maWcsIHRoaXMuZmlsZU1hbmFnZXIuY3VycmVudFRhYi5wYXRoLCBudWxsLCB0aGlzLmZpbGVNYW5hZ2VyLmNvbnRleHRUYWdzKS50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgLy8gVGVsbCB0aGUgY3VycmVudCB0YWIgdG8gcmVsb2FkIGl0J3MgZGF0YS5cbiAgICAgICAgICAgICAgICBjb25zdCB0YWIgPSAgdGhpcy5maWxlTWFuYWdlci5jdXJyZW50VGFiO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmZpbGVNYW5hZ2VyLmZpbGVHcmlkcy5maW5kKHQgPT4gdC50YWIuaWQgPT0gdGFiLmlkKTtcbiAgICAgICAgICAgICAgICBncmlkLmxvYWRGb2xkZXIoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHtcbiAgICAgICAgLy8gICAgIGxhYmVsOiBcIkFkZCB0byBCb29rbWFya3MgKFdJUClcIixcbiAgICAgICAgLy8gICAgIGFjdGlvbjogKGZvbGRlcikgPT4ge1xuICAgICAgICAvLyAgICAgICAgIC8vXG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH0sXG4gICAgICAgIC8vIFwic2VwYXJhdG9yXCIsXG4gICAgICAgIC8vIHtcbiAgICAgICAgLy8gICAgIGxhYmVsOiBcIlBhc3RlXCIsXG4gICAgICAgIC8vICAgICBhY3Rpb246IChmb2xkZXIpID0+IHtcbiAgICAgICAgLy8gICAgICAgICAvL1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyB9LFxuICAgICAgICAvLyB7XG4gICAgICAgIC8vICAgICBsYWJlbDogXCJTZWxlY3QgQWxsXCIsXG4gICAgICAgIC8vICAgICBhY3Rpb246IChmb2xkZXIpID0+IHtcbiAgICAgICAgLy8gICAgICAgICAvL1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyB9LFxuICAgICAgICAvLyBcInNlcGFyYXRvclwiLFxuICAgICAgICAvLyB7XG4gICAgICAgIC8vICAgICBsYWJlbDogXCJQcm9wZXJ0aWVzXCIsXG4gICAgICAgIC8vICAgICBhY3Rpb246IChmb2xkZXIpID0+IHtcbiAgICAgICAgLy8gICAgICAgICAvL1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyB9LFxuICAgIF1cblxuICAgIHNvcnRPcHRpb25zOiBNZW51SXRlbTxGU0Rlc2NyaXB0b3I+W10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiBcIlNvcnRcIixcbiAgICAgICAgICAgIHNlcGFyYXRvcjogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBsYWJlbDogXCJBLVpcIixcbiAgICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5zZXRTb3J0ZXIoJ2EteicpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiBcIlotQVwiLFxuICAgICAgICAgICAgYWN0aW9uOiAoKSA9PiB0aGlzLnNldFNvcnRlcignei1hJylcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbGFiZWw6IFwiTGFzdCBNb2RpZmllZFwiLFxuICAgICAgICAgICAgYWN0aW9uOiAoKSA9PiB0aGlzLnNldFNvcnRlcignbGFzdG1vZCcpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiBcIkZpcnN0IE1vZGlmaWVkXCIsXG4gICAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuc2V0U29ydGVyKCdmaXJzdG1vZCcpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiBcIlNpemVcIixcbiAgICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5zZXRTb3J0ZXIoJ3NpemUnKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBsYWJlbDogXCJUeXBlXCIsXG4gICAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuc2V0U29ydGVyKCd0eXBlJylcbiAgICAgICAgfSxcbiAgICAgICAgXCJzZXBhcmF0b3JcIixcbiAgICAgICAge1xuICAgICAgICAgICAgbGFiZWw6IFwiUmVmcmVzaFwiLFxuICAgICAgICAgICAgYWN0aW9uOiAoKSA9PiB0aGlzLmZpbGVNYW5hZ2VyLmN1cnJlbnRGaWxlR3JpZC5sb2FkRm9sZGVyKClcbiAgICAgICAgfVxuICAgIF07XG5cbiAgICBoaXN0b3J5QmFjayh0YWI6IEZpbGVWaWV3VGFiKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiaGlzdG9yeSAtPlwiLCB0YWIpXG4gICAgICAgIHRhYi5oaXN0b3J5SW5kZXgtLTtcbiAgICAgICAgdGFiLnBhdGggPSB0YWIuaGlzdG9yeVt0YWIuaGlzdG9yeUluZGV4IC0gMV07XG4gICAgfVxuXG4gICAgaGlzdG9yeUZvcndhcmQodGFiOiBGaWxlVmlld1RhYikge1xuICAgICAgICBjb25zb2xlLmxvZyhcImhpc3RvcnkgPC1cIiwgdGFiKVxuICAgICAgICB0YWIuaGlzdG9yeUluZGV4Kys7XG4gICAgICAgIHRhYi5wYXRoID0gdGFiLmhpc3RvcnlbdGFiLmhpc3RvcnlJbmRleCAtIDFdO1xuICAgIH1cblxuICAgIHRvZ2dsZURyYXdlcigpIHtcbiAgICAgICAgaWYgKFsuLi50aGlzLmZpbGVNYW5hZ2VyLmRyYXdlci5fZHJhd2Vyc11bMF0ub3BlbmVkKVxuICAgICAgICAgICAgdGhpcy5maWxlTWFuYWdlci5kcmF3ZXIuY2xvc2UoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5maWxlTWFuYWdlci5kcmF3ZXIub3BlbigpO1xuICAgIH1cblxuICAgIHNldFNvcnRlcihtb2RlOiBGaWxlU29ydGluZykge1xuICAgICAgICB0aGlzLmZpbGVNYW5hZ2VyLmN1cnJlbnRUYWIuc29ydE9yZGVyID0gbW9kZTtcbiAgICAgICAgdGhpcy5maWxlTWFuYWdlci5yZWZyZXNoU29ydGluZygpO1xuICAgIH1cblxuICAgIG9uUmVmcmVzaCgpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5maWxlTWFuYWdlcik7XG4gICAgICAgIHRoaXMuZmlsZU1hbmFnZXIuZmlsZUdyaWRzLmZvckVhY2goZyA9PiBnLmxvYWRGb2xkZXIoKSk7XG4gICAgfVxufVxuIiwiQGlmIChmaWxlTWFuYWdlci5zaWRlYmFyT3ZlcmxheSAmJiAhZHJhd2VyTW9kZSkge1xuICAgIDxidXR0b25cbiAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVEcmF3ZXIoKVwiXG4gICAgPlxuICAgICAgICA8bWF0LWljb24+bGlzdDwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG59XG5cbkBpZiAoIXNob3dCYXJlTWluaW11bSkge1xuICAgIDxkaXYgY2xhc3M9XCJidXR0b25ncm91cFwiPlxuICAgICAgICA8Z3RrLWljb24tYnV0dG9uXG4gICAgICAgICAgICBmb250SWNvbj1cImFycm93X2JhY2tfaW9zX25ld1wiXG4gICAgICAgICAgICAoY2xpY2spPVwiaGlzdG9yeUJhY2soY3VycmVudFRhYilcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImN1cnJlbnRUYWIuaGlzdG9yeT8ubGVuZ3RoIDw9IDFcIlxuICAgICAgICAvPlxuICAgICAgICA8Z3RrLWljb24tYnV0dG9uXG4gICAgICAgICAgICBmb250SWNvbj1cImFycm93X2ZvcndhcmRfaW9zXCJcbiAgICAgICAgICAgIChjbGljayk9XCJoaXN0b3J5Rm9yd2FyZChjdXJyZW50VGFiKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiY3VycmVudFRhYi5oaXN0b3J5SW5kZXggPj0gKGN1cnJlbnRUYWIuaGlzdG9yeT8ubGVuZ3RoLTEpXCJcbiAgICAgICAgLz5cbiAgICA8L2Rpdj5cblxuICAgIEBpZiAoIWRyYXdlck1vZGUpIHtcbiAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOiA0MHB4XCI+PC9kaXY+XG4gICAgfVxuICAgIDxndGstaWNvbi1idXR0b25cbiAgICAgICAgZm9udEljb249XCJzeW5jXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uUmVmcmVzaCgpXCJcbiAgICAvPlxufVxuXG5AaWYgKGN1cnJlbnRUYWIpIHtcbiAgICA8YXBwLWJyZWFkY3J1bWJcbiAgICAgICAgc3R5bGU9XCJmbGV4OiAxXCJcbiAgICAgICAgW2NydW1ic109XCJjdXJyZW50VGFiLmJyZWFkY3J1bWJcIlxuICAgICAgICAoY3J1bWJDbGljayk9XCJvbkJyZWFkY3J1bWJDbGljay5uZXh0KCRldmVudClcIlxuICAgICAgICBbY29uZmlnXT1cImNvbmZpZ1wiXG4gICAgLz5cbn1cblxuQGlmICghZHJhd2VyTW9kZSkge1xuICAgIDwhLS0gPGRpdiBzdHlsZT1cImZsZXg6IDFcIj48L2Rpdj4gLS0+XG5cbiAgICA8Z3RrLWljb24tYnV0dG9uXG4gICAgICAgIGZvbnRJY29uPVwibW9yZV92ZXJ0XCJcbiAgICAgICAgW25neC1tZW51XT1cImZpbGVPcHRpb25zXCJcbiAgICAgICAgW25neC1tZW51LWNvbmZpZ109XCJ7cG9zaXRpb246ICdib3R0b20nfVwiXG4gICAgLz5cblxuICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogOHB4XCI+PC9kaXY+XG5cbiAgICA8IS0tIDxndGstaWNvbi1idXR0b25cbiAgICAgICAgZm9udEljb249XCJzZWFyY2hcIlxuICAgIC8+IC0tPlxuXG4gICAgQGlmIChmaWxlTWFuYWdlci53aWR0aCA+IDgwMCkge1xuICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDEwMHB4XCI+PC9kaXY+XG4gICAgfVxuXG4gICAgPGd0ay1pY29uLWJ1dHRvblxuICAgICAgICBbZm9udEljb25dPVwiY3VycmVudFRhYi52aWV3TW9kZSA9PSAnbGlzdCcgPyAndmlld19saXN0JyA6ICdncmlkX3ZpZXcnXCJcbiAgICAgICAgKGNsaWNrKT1cImN1cnJlbnRUYWIudmlld01vZGUgPSBjdXJyZW50VGFiLnZpZXdNb2RlID09ICdsaXN0JyA/ICdncmlkJyA6ICdsaXN0JzsgZmlsZU1hbmFnZXIub25SZXNpemUoKVwiXG4gICAgLz5cblxuICAgIDxndGstaWNvbi1idXR0b25cbiAgICAgICAgZm9udEljb249XCJzb3J0XCJcbiAgICAgICAgW25neC1tZW51XT1cInNvcnRPcHRpb25zXCJcbiAgICAgICAgW25neC1tZW51LWNvbmZpZ109XCJ7cG9zaXRpb246ICdib3R0b20nfVwiXG4gICAgLz5cblxufVxuIl19