UNPKG

@nakedobjects/gemini

Version:

Single Page Application client for a Naked Objects application.

107 lines 25.2 kB
import { Component } from '@angular/core'; import { Pane } from '@nakedobjects/services'; import { safeUnsubscribe } from '../helpers-components'; import * as i0 from "@angular/core"; import * as i1 from "@nakedobjects/services"; import * as i2 from "@angular/common"; import * as i3 from "@nakedobjects/view-models"; import * as i4 from "@angular/cdk/drag-drop"; import * as i5 from "../click.directive"; export class FooterComponent { urlManager; context; clickHandler; error; repLoader; location; configService; dragAndDrop; constructor(urlManager, context, clickHandler, error, repLoader, location, configService, dragAndDrop) { this.urlManager = urlManager; this.context = context; this.clickHandler = clickHandler; this.error = error; this.repLoader = repLoader; this.location = location; this.configService = configService; this.dragAndDrop = dragAndDrop; } warnSub; messageSub; cvmSub; lcSub; ddSub; loading; userName = ''; warnings = []; messages = []; copyViewModel; dropZones = []; goHome = (right) => { const newPane = this.clickHandler.pane(Pane.Pane1, right); if (this.configService.config.leftClickHomeAlwaysGoesToSinglePane && newPane === Pane.Pane1) { this.urlManager.setHomeSinglePane(); } else { this.urlManager.setHome(newPane); } }; goBack = () => { this.location.back(); }; goForward = () => { this.location.forward(); }; swapPanes = () => { if (!this.swapDisabled()) { this.context.swapCurrentObjects(); this.urlManager.swapPanes(); } }; swapDisabled = () => { return this.urlManager.isMultiLineDialog() ? true : null; }; singlePane = (right) => { this.urlManager.singlePane(this.clickHandler.pane(Pane.Pane1, right)); }; logOff = () => this.urlManager.logoff(); applicationProperties = () => this.urlManager.applicationProperties(); recent = (right) => { this.urlManager.setRecent(this.clickHandler.pane(Pane.Pane1, right)); }; cicero = () => { this.urlManager.singlePane(this.clickHandler.pane(Pane.Pane1)); this.urlManager.cicero(); }; get currentCopyColor() { return this.copyViewModel?.color; } get currentCopyTitle() { return this.copyViewModel?.draggableTitle(); } setDropZones(ids) { setTimeout(() => this.dropZones = ids); } ngOnInit() { this.context.getUser().then(user => this.userName = user.userName()).catch((reject) => this.error.handleError(reject)); this.lcSub = this.repLoader.loadingCount$.subscribe(count => this.loading = count > 0); this.warnSub = this.context.warning$.subscribe(ws => this.warnings = ws); this.messageSub = this.context.messages$.subscribe(ms => this.messages = ms); this.cvmSub = this.dragAndDrop.copiedViewModel$.subscribe(cvm => this.copyViewModel = cvm); this.ddSub = this.dragAndDrop.dropZoneIds$.subscribe(ids => this.setDropZones(ids || [])); } ngOnDestroy() { safeUnsubscribe(this.warnSub); safeUnsubscribe(this.messageSub); safeUnsubscribe(this.cvmSub); safeUnsubscribe(this.lcSub); safeUnsubscribe(this.ddSub); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: FooterComponent, deps: [{ token: i1.UrlManagerService }, { token: i1.ContextService }, { token: i1.ClickHandlerService }, { token: i1.ErrorService }, { token: i1.RepLoaderService }, { token: i2.Location }, { token: i1.ConfigService }, { token: i3.DragAndDropService }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: FooterComponent, selector: "nof-footer", ngImport: i0, template: "<div class=\"footer\">\n\t<div class=\"icon home\" title=\"Home (Alt-h)\" tabindex=\"0\" nofClick (leftClick)=\"goHome()\" (rightClick)=\"goHome(true)\" accesskey=\"h\"></div>\n\t<div class=\"icon back\" title=\"Back (Alt-b)\" tabindex=\"0\" (click)=\"goBack()\" accesskey=\"b\"></div>\n\t<div class=\"icon forward\" title=\"Forward (Alt-f)\" tabindex=\"0\" (click)=\"goForward()\" accesskey=\"f\"></div>\n\t<div class=\"icon full\" title=\"Expand pane (Alt-e)\" tabindex=\"0\" nofClick (leftClick)=\"singlePane()\" (rightClick)=\"singlePane(true)\"\n\t\taccesskey=\"e\"></div>\n\t<div class=\"icon swap\" [attr.disabled]=\"swapDisabled()\" title=\"Swap panes (Alt-s)\" tabindex=\"0\" (click)=\"swapPanes()\" accesskey=\"s\"></div>\n\t<div class=\"icon recent\" title=\"Recent objects (Alt-r)\" tabindex=\"0\" nofClick (leftClick)=\"recent()\" (rightClick)=\"recent(true)\" accesskey=\"r\"></div>\n\t<div class=\"icon speech\" title=\"Cicero - Speech Interface (Alt-c)\" (click)=\"cicero()\" tabindex=\"0\" accesskey=\"c\"></div>\n\t<div class=\"icon properties\" title=\"Application Properties (Alt-p)\" (click)=\"applicationProperties()\" tabindex=\"0\" accesskey=\"p\"></div>\n\t<div class=\"icon logoff\" title=\"Log off (Alt-l)\" (click)=\"logOff()\" tabindex=\"0\" accesskey=\"l\"></div>\n\t<span *ngIf=\"loading\" class=\"loading\">Loading...</span>\n\n\t<div class=\"warnings\" *ngFor=\"let warning of warnings\">\n\t\t<div>{{warning}}</div>\n\t</div>\n\t<div class=\"messages\" *ngFor=\"let message of messages\">\n\t\t<div>{{message}}</div>\n\t</div>\n\t<div *ngIf=\"copyViewModel\" class=\"currentcopy\">\n <span>Copying...</span>\n <div cdkDropList [cdkDropListConnectedTo]=\"dropZones\">\n <div class=\"reference\" [ngClass]=\"currentCopyColor\" cdkDrag [cdkDragData]=\"copyViewModel\">{{currentCopyTitle}}</div>\n </div>\n </div>\n</div>", styles: [".icon{color:var(--default-outline-color);font-size:var(--footer-icon-size);padding:var(--space-3);margin-left:var(--space-4)}.icon.disabled{display:none}.icon:hover,.icon:focus{outline-style:solid;outline-width:1px;outline-color:var(--default-outline-color)}.icon:active{outline-style:solid;outline-width:2px;outline-color:var(--default-outline-color)}.icon,.currentcopy{float:left}.currentcopy{display:inline-block;margin-left:var(--space-5)}.messages,.warnings,.loading{font-size:var(--font-size-2)}.messages,.loading{color:var(--default-text-color)}.warnings{color:var(--warning-color)}.icon{font-family:iconFont;font-weight:var(--font-weight-1);font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;display:inline-block;width:auto;height:auto;line-height:normal;vertical-align:baseline;background-image:none;background-position:0% 0%;background-repeat:repeat;margin-top:0;position:relative;cursor:pointer}.home:before{content:\"\\e000\"}.back:before{content:\"\\e09f\"}.forward:before{content:\"\\e09d\"}.swap:before{content:\"\\e0a4\"}.full:before{content:\"\\e08e\"}.recent:before{content:\"\\e06b\"}.speech:before{content:\"\\e036\"}.properties:before{content:\"\\e048\"}.logoff:before{content:\"\\e03b\"}.speech{display:none}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i4.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i5.ClickDirective, selector: "[nofClick]", outputs: ["leftClick", "rightClick"] }] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: FooterComponent, decorators: [{ type: Component, args: [{ selector: 'nof-footer', template: "<div class=\"footer\">\n\t<div class=\"icon home\" title=\"Home (Alt-h)\" tabindex=\"0\" nofClick (leftClick)=\"goHome()\" (rightClick)=\"goHome(true)\" accesskey=\"h\"></div>\n\t<div class=\"icon back\" title=\"Back (Alt-b)\" tabindex=\"0\" (click)=\"goBack()\" accesskey=\"b\"></div>\n\t<div class=\"icon forward\" title=\"Forward (Alt-f)\" tabindex=\"0\" (click)=\"goForward()\" accesskey=\"f\"></div>\n\t<div class=\"icon full\" title=\"Expand pane (Alt-e)\" tabindex=\"0\" nofClick (leftClick)=\"singlePane()\" (rightClick)=\"singlePane(true)\"\n\t\taccesskey=\"e\"></div>\n\t<div class=\"icon swap\" [attr.disabled]=\"swapDisabled()\" title=\"Swap panes (Alt-s)\" tabindex=\"0\" (click)=\"swapPanes()\" accesskey=\"s\"></div>\n\t<div class=\"icon recent\" title=\"Recent objects (Alt-r)\" tabindex=\"0\" nofClick (leftClick)=\"recent()\" (rightClick)=\"recent(true)\" accesskey=\"r\"></div>\n\t<div class=\"icon speech\" title=\"Cicero - Speech Interface (Alt-c)\" (click)=\"cicero()\" tabindex=\"0\" accesskey=\"c\"></div>\n\t<div class=\"icon properties\" title=\"Application Properties (Alt-p)\" (click)=\"applicationProperties()\" tabindex=\"0\" accesskey=\"p\"></div>\n\t<div class=\"icon logoff\" title=\"Log off (Alt-l)\" (click)=\"logOff()\" tabindex=\"0\" accesskey=\"l\"></div>\n\t<span *ngIf=\"loading\" class=\"loading\">Loading...</span>\n\n\t<div class=\"warnings\" *ngFor=\"let warning of warnings\">\n\t\t<div>{{warning}}</div>\n\t</div>\n\t<div class=\"messages\" *ngFor=\"let message of messages\">\n\t\t<div>{{message}}</div>\n\t</div>\n\t<div *ngIf=\"copyViewModel\" class=\"currentcopy\">\n <span>Copying...</span>\n <div cdkDropList [cdkDropListConnectedTo]=\"dropZones\">\n <div class=\"reference\" [ngClass]=\"currentCopyColor\" cdkDrag [cdkDragData]=\"copyViewModel\">{{currentCopyTitle}}</div>\n </div>\n </div>\n</div>", styles: [".icon{color:var(--default-outline-color);font-size:var(--footer-icon-size);padding:var(--space-3);margin-left:var(--space-4)}.icon.disabled{display:none}.icon:hover,.icon:focus{outline-style:solid;outline-width:1px;outline-color:var(--default-outline-color)}.icon:active{outline-style:solid;outline-width:2px;outline-color:var(--default-outline-color)}.icon,.currentcopy{float:left}.currentcopy{display:inline-block;margin-left:var(--space-5)}.messages,.warnings,.loading{font-size:var(--font-size-2)}.messages,.loading{color:var(--default-text-color)}.warnings{color:var(--warning-color)}.icon{font-family:iconFont;font-weight:var(--font-weight-1);font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;display:inline-block;width:auto;height:auto;line-height:normal;vertical-align:baseline;background-image:none;background-position:0% 0%;background-repeat:repeat;margin-top:0;position:relative;cursor:pointer}.home:before{content:\"\\e000\"}.back:before{content:\"\\e09f\"}.forward:before{content:\"\\e09d\"}.swap:before{content:\"\\e0a4\"}.full:before{content:\"\\e08e\"}.recent:before{content:\"\\e06b\"}.speech:before{content:\"\\e036\"}.properties:before{content:\"\\e048\"}.logoff:before{content:\"\\e03b\"}.speech{display:none}\n"] }] }], ctorParameters: () => [{ type: i1.UrlManagerService }, { type: i1.ContextService }, { type: i1.ClickHandlerService }, { type: i1.ErrorService }, { type: i1.RepLoaderService }, { type: i2.Location }, { type: i1.ConfigService }, { type: i3.DragAndDropService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9vdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2dlbWluaS9zcmMvZm9vdGVyL2Zvb3Rlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9nZW1pbmkvc3JjL2Zvb3Rlci9mb290ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQU1ILElBQUksRUFHUCxNQUFNLHdCQUF3QixDQUFDO0FBR2hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7OztBQU94RCxNQUFNLE9BQU8sZUFBZTtJQUdIO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFSckIsWUFDcUIsVUFBNkIsRUFDN0IsT0FBdUIsRUFDdkIsWUFBaUMsRUFDakMsS0FBbUIsRUFDbkIsU0FBMkIsRUFDM0IsUUFBa0IsRUFDbEIsYUFBNEIsRUFDNUIsV0FBK0I7UUFQL0IsZUFBVSxHQUFWLFVBQVUsQ0FBbUI7UUFDN0IsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDdkIsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBQ2pDLFVBQUssR0FBTCxLQUFLLENBQWM7UUFDbkIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7SUFDaEQsQ0FBQztJQUVHLE9BQU8sQ0FBaUI7SUFDeEIsVUFBVSxDQUFpQjtJQUMzQixNQUFNLENBQWlCO0lBQ3ZCLEtBQUssQ0FBaUI7SUFDdEIsS0FBSyxDQUFpQjtJQUU5QixPQUFPLENBQVc7SUFDbEIsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNkLFFBQVEsR0FBYSxFQUFFLENBQUM7SUFDeEIsUUFBUSxHQUFhLEVBQUUsQ0FBQztJ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LENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0IsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7dUdBcEdRLGVBQWU7MkZBQWYsZUFBZSxrRENyQjVCLGcyREF5Qk07OzJGREpPLGVBQWU7a0JBTDNCLFNBQVM7K0JBQ0ksWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQ2xpY2tIYW5kbGVyU2VydmljZSxcbiAgICBDb25maWdTZXJ2aWNlLFxuICAgIENvbnRleHRTZXJ2aWNlLFxuICAgIEVycm9yU2VydmljZSxcbiAgICBFcnJvcldyYXBwZXIsXG4gICAgUGFuZSxcbiAgICBSZXBMb2FkZXJTZXJ2aWNlLFxuICAgIFVybE1hbmFnZXJTZXJ2aWNlXG59IGZyb20gJ0BuYWtlZG9iamVjdHMvc2VydmljZXMnO1xuaW1wb3J0IHsgRHJhZ0FuZERyb3BTZXJ2aWNlLCBJRHJhZ2dhYmxlVmlld01vZGVsIH0gZnJvbSAnQG5ha2Vkb2JqZWN0cy92aWV3LW1vZGVscyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb25MaWtlIGFzIElTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHNhZmVVbnN1YnNjcmliZSB9IGZyb20gJy4uL2hlbHBlcnMtY29tcG9uZW50cyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbm9mLWZvb3RlcicsXG4gICAgdGVtcGxhdGVVcmw6ICdmb290ZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWydmb290ZXIuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIEZvb3RlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHVybE1hbmFnZXI6IFVybE1hbmFnZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnRleHQ6IENvbnRleHRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNsaWNrSGFuZGxlcjogQ2xpY2tIYW5kbGVyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBlcnJvcjogRXJyb3JTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHJlcExvYWRlcjogUmVwTG9hZGVyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBsb2NhdGlvbjogTG9jYXRpb24sXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkcmFnQW5kRHJvcDogRHJhZ0FuZERyb3BTZXJ2aWNlXG4gICAgKSB7IH1cblxuICAgIHByaXZhdGUgd2FyblN1Yj86IElTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBtZXNzYWdlU3ViPzogSVN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIGN2bVN1Yj86IElTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBsY1N1Yj86IElTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBkZFN1Yj86IElTdWJzY3JpcHRpb247XG5cbiAgICBsb2FkaW5nPzogYm9vbGVhbjtcbiAgICB1c2VyTmFtZSA9ICcnO1xuICAgIHdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuICAgIG1lc3NhZ2VzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvcHlWaWV3TW9kZWw/OiBJRHJhZ2dhYmxlVmlld01vZGVsO1xuICAgIGRyb3Bab25lczogc3RyaW5nW10gPSBbXTtcblxuICAgIGdvSG9tZSA9IChyaWdodD86IGJvb2xlYW4pID0+IHtcbiAgICAgICAgY29uc3QgbmV3UGFuZSA9IHRoaXMuY2xpY2tIYW5kbGVyLnBhbmUoUGFuZS5QYW5lMSwgcmlnaHQpO1xuXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnLmxlZnRDbGlja0hvbWVBbHdheXNHb2VzVG9TaW5nbGVQYW5lICYmIG5ld1BhbmUgPT09IFBhbmUuUGFuZTEpIHtcbiAgICAgICAgICAgIHRoaXMudXJsTWFuYWdlci5zZXRIb21lU2luZ2xlUGFuZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy51cmxNYW5hZ2VyLnNldEhvbWUobmV3UGFuZSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZ29CYWNrID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmxvY2F0aW9uLmJhY2soKTtcbiAgICB9O1xuXG4gICAgZ29Gb3J3YXJkID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmxvY2F0aW9uLmZvcndhcmQoKTtcbiAgICB9O1xuXG4gICAgc3dhcFBhbmVzID0gKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuc3dhcERpc2FibGVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zd2FwQ3VycmVudE9iamVjdHMoKTtcbiAgICAgICAgICAgIHRoaXMudXJsTWFuYWdlci5zd2FwUGFuZXMoKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBzd2FwRGlzYWJsZWQgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnVybE1hbmFnZXIuaXNNdWx0aUxpbmVEaWFsb2coKSA/IHRydWUgOiBudWxsO1xuICAgIH07XG5cbiAgICBzaW5nbGVQYW5lID0gKHJpZ2h0PzogYm9vbGVhbikgPT4ge1xuICAgICAgICB0aGlzLnVybE1hbmFnZXIuc2luZ2xlUGFuZSh0aGlzLmNsaWNrSGFuZGxlci5wYW5lKFBhbmUuUGFuZTEsIHJpZ2h0KSk7XG4gICAgfTtcblxuICAgIGxvZ09mZiA9ICgpID0+IHRoaXMudXJsTWFuYWdlci5sb2dvZmYoKTtcblxuICAgIGFwcGxpY2F0aW9uUHJvcGVydGllcyA9ICgpID0+IHRoaXMudXJsTWFuYWdlci5hcHBsaWNhdGlvblByb3BlcnRpZXMoKTtcblxuICAgIHJlY2VudCA9IChyaWdodD86IGJvb2xlYW4pID0+IHtcbiAgICAgICAgdGhpcy51cmxNYW5hZ2VyLnNldFJlY2VudCh0aGlzLmNsaWNrSGFuZGxlci5wYW5lKFBhbmUuUGFuZTEsIHJpZ2h0KSk7XG4gICAgfTtcblxuICAgIGNpY2VybyA9ICgpID0+IHtcbiAgICAgICAgdGhpcy51cmxNYW5hZ2VyLnNpbmdsZVBhbmUodGhpcy5jbGlja0hhbmRsZXIucGFuZShQYW5lLlBhbmUxKSk7XG4gICAgICAgIHRoaXMudXJsTWFuYWdlci5jaWNlcm8oKTtcbiAgICB9O1xuXG4gICAgZ2V0IGN1cnJlbnRDb3B5Q29sb3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvcHlWaWV3TW9kZWw/LmNvbG9yO1xuICAgIH1cblxuICAgIGdldCBjdXJyZW50Q29weVRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb3B5Vmlld01vZGVsPy5kcmFnZ2FibGVUaXRsZSgpO1xuICAgIH1cblxuICAgIHNldERyb3Bab25lcyhpZHM6IHN0cmluZ1tdKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5kcm9wWm9uZXMgPSBpZHMpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmNvbnRleHQuZ2V0VXNlcigpLnRoZW4odXNlciA9PiB0aGlzLnVzZXJOYW1lID0gdXNlci51c2VyTmFtZSgpKS5jYXRjaCgocmVqZWN0OiBFcnJvcldyYXBwZXIpID0+IHRoaXMuZXJyb3IuaGFuZGxlRXJyb3IocmVqZWN0KSk7XG5cbiAgICAgICAgdGhpcy5sY1N1YiA9IHRoaXMucmVwTG9hZGVyLmxvYWRpbmdDb3VudCQuc3Vic2NyaWJlKGNvdW50ID0+IHRoaXMubG9hZGluZyA9IGNvdW50ID4gMCk7XG4gICAgICAgIHRoaXMud2FyblN1YiA9IHRoaXMuY29udGV4dC53YXJuaW5nJC5zdWJzY3JpYmUod3MgPT4gdGhpcy53YXJuaW5ncyA9IHdzKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlU3ViID0gdGhpcy5jb250ZXh0Lm1lc3NhZ2VzJC5zdWJzY3JpYmUobXMgPT4gdGhpcy5tZXNzYWdlcyA9IG1zKTtcbiAgICAgICAgdGhpcy5jdm1TdWIgPSB0aGlzLmRyYWdBbmREcm9wLmNvcGllZFZpZXdNb2RlbCQuc3Vic2NyaWJlKGN2bSA9PiB0aGlzLmNvcHlWaWV3TW9kZWwgPSBjdm0pO1xuICAgICAgICB0aGlzLmRkU3ViID0gdGhpcy5kcmFnQW5kRHJvcC5kcm9wWm9uZUlkcyQuc3Vic2NyaWJlKGlkcyA9PiB0aGlzLnNldERyb3Bab25lcyhpZHMgfHwgW10pKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgc2FmZVVuc3Vic2NyaWJlKHRoaXMud2FyblN1Yik7XG4gICAgICAgIHNhZmVVbnN1YnNjcmliZSh0aGlzLm1lc3NhZ2VTdWIpO1xuICAgICAgICBzYWZlVW5zdWJzY3JpYmUodGhpcy5jdm1TdWIpO1xuICAgICAgICBzYWZlVW5zdWJzY3JpYmUodGhpcy5sY1N1Yik7XG4gICAgICAgIHNhZmVVbnN1YnNjcmliZSh0aGlzLmRkU3ViKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZm9vdGVyXCI+XG5cdDxkaXYgY2xhc3M9XCJpY29uIGhvbWVcIiB0aXRsZT1cIkhvbWUgKEFsdC1oKVwiIHRhYmluZGV4PVwiMFwiIG5vZkNsaWNrIChsZWZ0Q2xpY2spPVwiZ29Ib21lKClcIiAocmlnaHRDbGljayk9XCJnb0hvbWUodHJ1ZSlcIiBhY2Nlc3NrZXk9XCJoXCI+PC9kaXY+XG5cdDxkaXYgY2xhc3M9XCJpY29uIGJhY2tcIiB0aXRsZT1cIkJhY2sgKEFsdC1iKVwiIHRhYmluZGV4PVwiMFwiIChjbGljayk9XCJnb0JhY2soKVwiIGFjY2Vzc2tleT1cImJcIj48L2Rpdj5cblx0PGRpdiBjbGFzcz1cImljb24gZm9yd2FyZFwiIHRpdGxlPVwiRm9yd2FyZCAoQWx0LWYpXCIgdGFiaW5kZXg9XCIwXCIgKGNsaWNrKT1cImdvRm9yd2FyZCgpXCIgYWNjZXNza2V5PVwiZlwiPjwvZGl2PlxuXHQ8ZGl2IGNsYXNzPVwiaWNvbiBmdWxsXCIgdGl0bGU9XCJFeHBhbmQgcGFuZSAoQWx0LWUpXCIgdGFiaW5kZXg9XCIwXCIgbm9mQ2xpY2sgKGxlZnRDbGljayk9XCJzaW5nbGVQYW5lKClcIiAocmlnaHRDbGljayk9XCJzaW5nbGVQYW5lKHRydWUpXCJcblx0XHRhY2Nlc3NrZXk9XCJlXCI+PC9kaXY+XG5cdDxkaXYgY2xhc3M9XCJpY29uIHN3YXBcIiBbYXR0ci5kaXNhYmxlZF09XCJzd2FwRGlzYWJsZWQoKVwiIHRpdGxlPVwiU3dhcCBwYW5lcyAoQWx0LXMpXCIgdGFiaW5kZXg9XCIwXCIgKGNsaWNrKT1cInN3YXBQYW5lcygpXCIgYWNjZXNza2V5PVwic1wiPjwvZGl2PlxuXHQ8ZGl2IGNsYXNzPVwiaWNvbiByZWNlbnRcIiB0aXRsZT1cIlJlY2VudCBvYmplY3RzIChBbHQtcilcIiB0YWJpbmRleD1cIjBcIiBub2ZDbGljayAobGVmdENsaWNrKT1cInJlY2VudCgpXCIgKHJpZ2h0Q2xpY2spPVwicmVjZW50KHRydWUpXCIgYWNjZXNza2V5PVwiclwiPjwvZGl2PlxuXHQ8ZGl2IGNsYXNzPVwiaWNvbiBzcGVlY2hcIiB0aXRsZT1cIkNpY2VybyAtIFNwZWVjaCBJbnRlcmZhY2UgKEFsdC1jKVwiIChjbGljayk9XCJjaWNlcm8oKVwiIHRhYmluZGV4PVwiMFwiIGFjY2Vzc2tleT1cImNcIj48L2Rpdj5cblx0PGRpdiBjbGFzcz1cImljb24gcHJvcGVydGllc1wiIHRpdGxlPVwiQXBwbGljYXRpb24gUHJvcGVydGllcyAoQWx0LXApXCIgKGNsaWNrKT1cImFwcGxpY2F0aW9uUHJvcGVydGllcygpXCIgdGFiaW5kZXg9XCIwXCIgYWNjZXNza2V5PVwicFwiPjwvZGl2PlxuXHQ8ZGl2IGNsYXNzPVwiaWNvbiBsb2dvZmZcIiB0aXRsZT1cIkxvZyBvZmYgKEFsdC1sKVwiIChjbGljayk9XCJsb2dPZmYoKVwiIHRhYmluZGV4PVwiMFwiIGFjY2Vzc2tleT1cImxcIj48L2Rpdj5cblx0PHNwYW4gKm5nSWY9XCJsb2FkaW5nXCIgY2xhc3M9XCJsb2FkaW5nXCI+TG9hZGluZy4uLjwvc3Bhbj5cblxuXHQ8ZGl2IGNsYXNzPVwid2FybmluZ3NcIiAqbmdGb3I9XCJsZXQgd2FybmluZyBvZiB3YXJuaW5nc1wiPlxuXHRcdDxkaXY+e3t3YXJuaW5nfX08L2Rpdj5cblx0PC9kaXY+XG5cdDxkaXYgY2xhc3M9XCJtZXNzYWdlc1wiICpuZ0Zvcj1cImxldCBtZXNzYWdlIG9mIG1lc3NhZ2VzXCI+XG5cdFx0PGRpdj57e21lc3NhZ2V9fTwvZGl2PlxuXHQ8L2Rpdj5cblx0PGRpdiAqbmdJZj1cImNvcHlWaWV3TW9kZWxcIiBjbGFzcz1cImN1cnJlbnRjb3B5XCI+XG4gICAgICAgIDxzcGFuPkNvcHlpbmcuLi48L3NwYW4+XG4gICAgICAgIDxkaXYgY2RrRHJvcExpc3QgW2Nka0Ryb3BMaXN0Q29ubmVjdGVkVG9dPVwiZHJvcFpvbmVzXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVmZXJlbmNlXCIgW25nQ2xhc3NdPVwiY3VycmVudENvcHlDb2xvclwiIGNka0RyYWcgW2Nka0RyYWdEYXRhXT1cImNvcHlWaWV3TW9kZWxcIj57e2N1cnJlbnRDb3B5VGl0bGV9fTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==