UNPKG

@microsoft/windows-admin-center-sdk

Version:

Microsoft - Windows Admin Center Shell

206 lines 28.3 kB
import { Component, ElementRef, HostListener, Renderer2 } from '@angular/core'; import { ActionItemRendererComponent } from '../action-item.component'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "../../../../directives/disabled/disabled.directive"; import * as i3 from "../../../tooltip/tooltip.directive"; function ActionButtonRendererComponent_button_1_Template(rf, ctx) { if (rf & 1) { const _r4 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "button", 4); i0.ɵɵlistener("click", function ActionButtonRendererComponent_button_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.execute()); }); i0.ɵɵelement(1, "span", 5); i0.ɵɵelementStart(2, "span", 6); i0.ɵɵtext(3); i0.ɵɵelementEnd()(); } if (rf & 2) { const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵclassProp("sme-toggled", ctx_r0.ariaChecked); i0.ɵɵproperty("smeDisabled", !ctx_r0.item.enabled || ctx_r0.item.busy || !ctx_r0.item.ready); i0.ɵɵattribute("role", ctx_r0.ariaRole)("aria-checked", ctx_r0.ariaChecked)("data-uta-id", ctx_r0.item.actionId); i0.ɵɵadvance(1); i0.ɵɵproperty("ngClass", ctx_r0.item.iconClass || ""); i0.ɵɵadvance(1); i0.ɵɵproperty("title", ctx_r0.item.text); i0.ɵɵadvance(1); i0.ɵɵtextInterpolate(ctx_r0.item.text); } } function ActionButtonRendererComponent_button_2_button_2_Template(rf, ctx) { if (rf & 1) { const _r7 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "button", 9); i0.ɵɵlistener("click", function ActionButtonRendererComponent_button_2_button_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r6 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r6.popOutWindow()); }); i0.ɵɵelement(1, "div", 10); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r5 = i0.ɵɵnextContext(2); i0.ɵɵproperty("title", ctx_r5.actionButtonStrings.OpenInANewWindow.title); i0.ɵɵattribute("aria-label", ctx_r5.actionButtonStrings.OpenInANewWindow.label); } } function ActionButtonRendererComponent_button_2_Template(rf, ctx) { if (rf & 1) { const _r9 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "button", 7); i0.ɵɵlistener("click", function ActionButtonRendererComponent_button_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r8 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r8.execute()); }); i0.ɵɵelement(1, "span", 5); i0.ɵɵtemplate(2, ActionButtonRendererComponent_button_2_button_2_Template, 2, 2, "button", 8); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵclassProp("sme-toggled", ctx_r1.ariaChecked); i0.ɵɵproperty("smeDisabled", !ctx_r1.item.enabled || ctx_r1.item.busy || !ctx_r1.item.ready)("title", ctx_r1.item.text); i0.ɵɵattribute("role", ctx_r1.ariaRole)("aria-checked", ctx_r1.ariaChecked)("data-uta-id", ctx_r1.item.actionId)("aria-label", ctx_r1.item.text); i0.ɵɵadvance(1); i0.ɵɵproperty("ngClass", ctx_r1.item.iconClass || ""); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx_r1.item.popOutEnabled); } } function ActionButtonRendererComponent_button_3_Template(rf, ctx) { if (rf & 1) { const _r11 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "button", 11); i0.ɵɵlistener("click", function ActionButtonRendererComponent_button_3_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r10 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r10.popOutWindow()); }); i0.ɵɵelement(1, "div", 10); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵproperty("title", ctx_r2.actionButtonStrings.OpenInANewWindow.title)("smeDisabled", !ctx_r2.item.enabled || ctx_r2.item.busy || !ctx_r2.item.ready); i0.ɵɵattribute("aria-label", ctx_r2.actionButtonStrings.OpenInANewWindow.label); } } export class ActionButtonRendererComponent extends ActionItemRendererComponent { /** * Constructor for ActionButtonRendererComponent. */ constructor(renderer, hostElement) { super(); this.renderer = renderer; this.hostElement = hostElement; this.actionButtonStrings = MsftSme.getStrings().MsftSmeShell.Angular.ActionButton; this.openOrigin = window.location.origin; renderer.addClass(hostElement.nativeElement, 'sme-position-stretch'); } /** * Aria role set on action button. */ get ariaRole() { return this.item && this.item.toggled ? 'menuitemcheckbox' : 'menuitem'; } /** * Aria checked flag set on action button. */ get ariaChecked() { return this.item && this.item.toggled ? true : null; } /** * Method called to register a change with the ActionButton. * @param item The ActionButton to register change for. */ itemChanged(item) { super.itemChanged(item); } /** * Callback method run after the default change-detector executes. */ ngDoCheck() { const offsetWidth = this.hostElement.nativeElement.offsetWidth; if (offsetWidth === 0) { return; } // It looks like the CSS icon isn't being included in the offsetWidth, nor the clientWidth. // Adding here for simplicity and clarity. const cssIconWidth = 14; const calculatedWidth = offsetWidth + cssIconWidth; if (this.item.width !== calculatedWidth) { this.item.width = calculatedWidth; } } /** * Method called when action button is clicked. */ execute() { if (this.item.execute) { this.item.execute.call(this.item, this.item.target); } } /** * Method called when the pop-out icon is clicked */ popOutWindow() { this.popupWindow = window.open(this.item.popOutUrl, '_blank', 'toolbar=no'); } onWindowMessage(event) { if (!this.popupWindow) { return; } if (event.origin !== this.openOrigin) { return; } if (event.data && event.data.type === 'msft-sme-shell-host.identify') { event.source.postMessage({ requestId: event.data.requestId, type: 'response' }, event.origin); } const windowConfigs = { appBar: { solution: { hide: true, hideDropdown: true }, title: { disableNavigation: true, value: this.item.popOutTitle }, rightMenu: { showAbout: false, showScripts: false, showSettings: false, showWindowControls: false, showShareLink: false } }, tools: { hide: true }, connections: { header: { hide: true } } }; if (event.data && event.data.type === 'msft-sme-shell-host.initialize') { if (this.port) { this.port.removeEventListener('message', this.portListenerHandler); this.port.close(); this.port = null; } this.port = event.ports[0]; this.port.postMessage({ requestId: event.data.requestId, type: 'response', data: windowConfigs }); } } } /** @nocollapse */ ActionButtonRendererComponent.ɵfac = function ActionButtonRendererComponent_Factory(t) { return new (t || ActionButtonRendererComponent)(i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(i0.ElementRef)); }; /** @nocollapse */ ActionButtonRendererComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: ActionButtonRendererComponent, selectors: [["sme-action-button-renderer"]], hostBindings: function ActionButtonRendererComponent_HostBindings(rf, ctx) { if (rf & 1) { i0.ɵɵlistener("message", function ActionButtonRendererComponent_message_HostBindingHandler($event) { return ctx.onWindowMessage($event); }, false, i0.ɵɵresolveWindow); } }, features: [i0.ɵɵInheritDefinitionFeature], decls: 4, vars: 3, consts: [[1, "sme-arrange-stack-h"], ["class", "sme-button-trigger sme-button-auto-width sme-button-align-left sme-position-stretch", "type", "button", 3, "sme-toggled", "smeDisabled", "click", 4, "ngIf"], ["class", "sme-button-trigger sme-button-auto-width sme-button-align-left sme-position-stretch", "type", "button", 3, "sme-toggled", "smeDisabled", "title", "click", 4, "ngIf"], ["type", "button", "class", "sme-button-trigger sme-button-auto-width sme-behavior-hover-target-show sme-layout-button-flex-end", 3, "title", "smeDisabled", "click", 4, "ngIf"], ["type", "button", 1, "sme-button-trigger", "sme-button-auto-width", "sme-button-align-left", "sme-position-stretch", 3, "smeDisabled", "click"], ["aria-hidden", "true", 3, "ngClass"], [1, "sme-arrange-ellipsis", "sme-action-button-text-span", 3, "title"], ["type", "button", 1, "sme-button-trigger", "sme-button-auto-width", "sme-button-align-left", "sme-position-stretch", 3, "smeDisabled", "title", "click"], ["type", "button", "class", "sme-button-trigger sme-height-md sme-button-auto-width sme-behavior-hover-target-show sme-layout-button-flex-end", 3, "title", "click", 4, "ngIf"], ["type", "button", 1, "sme-button-trigger", "sme-height-md", "sme-button-auto-width", "sme-behavior-hover-target-show", "sme-layout-button-flex-end", 3, "title", "click"], [1, "sme-icon", "sme-icon-openInNewWindow"], ["type", "button", 1, "sme-button-trigger", "sme-button-auto-width", "sme-behavior-hover-target-show", "sme-layout-button-flex-end", 3, "title", "smeDisabled", "click"]], template: function ActionButtonRendererComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 0); i0.ɵɵtemplate(1, ActionButtonRendererComponent_button_1_Template, 4, 9, "button", 1); i0.ɵɵtemplate(2, ActionButtonRendererComponent_button_2_Template, 3, 10, "button", 2); i0.ɵɵtemplate(3, ActionButtonRendererComponent_button_3_Template, 2, 3, "button", 3); i0.ɵɵelementEnd(); } if (rf & 2) { i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", !(ctx.item.container == null ? null : ctx.item.container.compact)); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx.item.container == null ? null : ctx.item.container.compact); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx.item.popOutEnabled); } }, dependencies: [i1.NgClass, i1.NgIf, i2.DisabledDirective, i3.TooltipDirective], encapsulation: 2 }); (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ActionButtonRendererComponent, [{ type: Component, args: [{ selector: 'sme-action-button-renderer', template: "<div class=\"sme-arrange-stack-h\">\r\n <button [attr.role]=\"ariaRole\" *ngIf=\"!item.container?.compact\"\r\n class=\"sme-button-trigger sme-button-auto-width sme-button-align-left sme-position-stretch\"\r\n [class.sme-toggled]=\"ariaChecked\" [attr.aria-checked]=\"ariaChecked\" [attr.data-uta-id]=\"item.actionId\"\r\n (click)=\"execute()\" [smeDisabled]=\"!item.enabled || item.busy || !item.ready\" type=\"button\">\r\n <span [ngClass]=\"item.iconClass || ''\" aria-hidden=\"true\"></span>\r\n <span class=\"sme-arrange-ellipsis sme-action-button-text-span\" [title]=\"item.text\">{{ item.text }}</span>\r\n </button>\r\n\r\n <button [attr.role]=\"ariaRole\" *ngIf=\"item.container?.compact\"\r\n class=\"sme-button-trigger sme-button-auto-width sme-button-align-left sme-position-stretch\"\r\n [class.sme-toggled]=\"ariaChecked\" [attr.aria-checked]=\"ariaChecked\" [attr.data-uta-id]=\"item.actionId\"\r\n (click)=\"execute()\" [smeDisabled]=\"!item.enabled || item.busy || !item.ready\" type=\"button\" [title]=\"item.text\"\r\n [attr.aria-label]=\"item.text\">\r\n <span [ngClass]=\"item.iconClass || ''\" aria-hidden=\"true\"></span>\r\n <button *ngIf=\"item.popOutEnabled\" type=\"button\" (click)=\"popOutWindow()\"\r\n [attr.aria-label]=\"actionButtonStrings.OpenInANewWindow.label\" [title]=\"actionButtonStrings.OpenInANewWindow.title\"\r\n class=\"sme-button-trigger sme-height-md sme-button-auto-width sme-behavior-hover-target-show sme-layout-button-flex-end\">\r\n <div class=\"sme-icon sme-icon-openInNewWindow\"></div>\r\n </button>\r\n </button>\r\n\r\n <button *ngIf=\"item.popOutEnabled\" type=\"button\" (click)=\"popOutWindow()\"\r\n [attr.aria-label]=\"actionButtonStrings.OpenInANewWindow.label\" [title]=\"actionButtonStrings.OpenInANewWindow.title\"\r\n class=\"sme-button-trigger sme-button-auto-width sme-behavior-hover-target-show sme-layout-button-flex-end\"\r\n [smeDisabled]=\"!item.enabled || item.busy || !item.ready\">\r\n <div class=\"sme-icon sme-icon-openInNewWindow\"></div>\r\n </button>\r\n</div>\r\n" }] }], function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }]; }, { onWindowMessage: [{ type: HostListener, args: ['window:message', ['$event']] }] }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWJ1dHRvbi1yZW5kZXJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9hY3Rpb25zL2l0ZW1zL2FjdGlvbi1idXR0b24vYWN0aW9uLWJ1dHRvbi1yZW5kZXJlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9hY3Rpb25zL2l0ZW1zL2FjdGlvbi1idXR0b24vYWN0aW9uLWJ1dHRvbi1yZW5kZXJlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFXLFVBQVUsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXhGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7O0lDRHJFLGlDQUc4RjtJQUE1Riw2S0FBUyxlQUFBLGdCQUFTLENBQUEsSUFBQztJQUNqQiwwQkFBaUU7SUFDakUsK0JBQW1GO0lBQUEsWUFBZTtJQUFBLGlCQUFPLEVBQUE7OztJQUgzRyxpREFBaUM7SUFDYiw0RkFBeUQ7SUFIdkUsdUNBQXNCLG9DQUFBLHFDQUFBO0lBSXBCLGVBQWdDO0lBQWhDLHFEQUFnQztJQUN5QixlQUFtQjtJQUFuQix3Q0FBbUI7SUFBQyxlQUFlO0lBQWYsc0NBQWU7Ozs7SUFTcEcsaUNBRTJIO0lBRjFFLHVMQUFTLGVBQUEscUJBQWMsQ0FBQSxJQUFDO0lBR3ZFLDBCQUFxRDtJQUN2RCxpQkFBUzs7O0lBSHdELHlFQUFvRDtJQUFuSCwrRUFBOEQ7Ozs7SUFQbEUsaUNBSWdDO0lBRDlCLDZLQUFTLGVBQUEsZ0JBQVMsQ0FBQSxJQUFDO0lBRW5CLDBCQUFpRTtJQUNqRSw2RkFJUztJQUNYLGlCQUFTOzs7SUFUUCxpREFBaUM7SUFDYiw0RkFBeUQs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QUFDO2dCQUNsQixTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTO2dCQUMvQixJQUFJLEVBQUUsVUFBVTtnQkFDaEIsSUFBSSxFQUFFLGFBQWE7YUFDdEIsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDOzs2SEFuSVEsNkJBQTZCOytHQUE3Qiw2QkFBNkI7b0hBQTdCLDJCQUF1Qjs7UUNUcEMsOEJBQWlDO1FBQy9CLG9GQU1TO1FBRVQscUZBV1M7UUFFVCxvRkFLUztRQUNYLGlCQUFNOztRQTNCNEIsZUFBOEI7UUFBOUIsd0ZBQThCO1FBUTlCLGVBQTZCO1FBQTdCLHFGQUE2QjtRQWFwRCxlQUF3QjtRQUF4Qiw2Q0FBd0I7O3VGRGJ0Qiw2QkFBNkI7Y0FKekMsU0FBUzsyQkFDSSw0QkFBNEI7cUZBNEUvQixlQUFlO2tCQURyQixZQUFZO21CQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBEb0NoZWNrLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdHJpbmdzIH0gZnJvbSAnLi4vLi4vLi4vLi4vZ2VuZXJhdGVkL3N0cmluZ3MnO1xyXG5pbXBvcnQgeyBBY3Rpb25JdGVtUmVuZGVyZXJDb21wb25lbnQgfSBmcm9tICcuLi9hY3Rpb24taXRlbS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBY3Rpb25CdXR0b24gfSBmcm9tICcuL2FjdGlvbi1idXR0b24nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3NtZS1hY3Rpb24tYnV0dG9uLXJlbmRlcmVyJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9hY3Rpb24tYnV0dG9uLXJlbmRlcmVyLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQWN0aW9uQnV0dG9uUmVuZGVyZXJDb21wb25lbnQgZXh0ZW5kcyBBY3Rpb25JdGVtUmVuZGVyZXJDb21wb25lbnQ8QWN0aW9uQnV0dG9uPiBpbXBsZW1lbnRzIERvQ2hlY2sge1xyXG4gICAgcHVibGljIGFjdGlvbkJ1dHRvblN0cmluZ3MgPSBNc2Z0U21lLmdldFN0cmluZ3M8U3RyaW5ncz4oKS5Nc2Z0U21lU2hlbGwuQW5ndWxhci5BY3Rpb25CdXR0b247XHJcblxyXG4gICAgcHJpdmF0ZSBwb3J0TGlzdGVuZXJIYW5kbGVyOiBNc2Z0U21lLkFjdGlvbjE8TWVzc2FnZUV2ZW50PjtcclxuICAgIHByaXZhdGUgcG9ydDogTWVzc2FnZVBvcnQ7XHJcbiAgICBwcml2YXRlIHBvcHVwV2luZG93OiBXaW5kb3c7XHJcbiAgICBwcml2YXRlIG9wZW5PcmlnaW4gPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXJpYSByb2xlIHNldCBvbiBhY3Rpb24gYnV0dG9uLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGFyaWFSb2xlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbSAmJiB0aGlzLml0ZW0udG9nZ2xlZCA/ICdtZW51aXRlbWNoZWNrYm94JyA6ICdtZW51aXRlbSc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcmlhIGNoZWNrZWQgZmxhZyBzZXQgb24gYWN0aW9uIGJ1dHRvbi5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBhcmlhQ2hlY2tlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pdGVtICYmIHRoaXMuaXRlbS50b2dnbGVkID8gdHJ1ZSA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb25zdHJ1Y3RvciBmb3IgQWN0aW9uQnV0dG9uUmVuZGVyZXJDb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBob3N0RWxlbWVudDogRWxlbWVudFJlZikge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgcmVuZGVyZXIuYWRkQ2xhc3MoaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ3NtZS1wb3NpdGlvbi1zdHJldGNoJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRob2QgY2FsbGVkIHRvIHJlZ2lzdGVyIGEgY2hhbmdlIHdpdGggdGhlIEFjdGlvbkJ1dHRvbi5cclxuICAgICAqIEBwYXJhbSBpdGVtIFRoZSBBY3Rpb25CdXR0b24gdG8gcmVnaXN0ZXIgY2hhbmdlIGZvci5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGl0ZW1DaGFuZ2VkKGl0ZW06IEFjdGlvbkJ1dHRvbikge1xyXG4gICAgICAgIHN1cGVyLml0ZW1DaGFuZ2VkKGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGJhY2sgbWV0aG9kIHJ1biBhZnRlciB0aGUgZGVmYXVsdCBjaGFuZ2UtZGV0ZWN0b3IgZXhlY3V0ZXMuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuZ0RvQ2hlY2soKSB7XHJcbiAgICAgICAgY29uc3Qgb2Zmc2V0V2lkdGggPSAoPEhUTUxFbGVtZW50PnRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCkub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgaWYgKG9mZnNldFdpZHRoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEl0IGxvb2tzIGxpa2UgdGhlIENTUyBpY29uIGlzbid0IGJlaW5nIGluY2x1ZGVkIGluIHRoZSBvZmZzZXRXaWR0aCwgbm9yIHRoZSBjbGllbnRXaWR0aC5cclxuICAgICAgICAvLyBBZGRpbmcgaGVyZSBmb3Igc2ltcGxpY2l0eSBhbmQgY2xhcml0eS5cclxuICAgICAgICBjb25zdCBjc3NJY29uV2lkdGggPSAxNDtcclxuICAgICAgICBjb25zdCBjYWxjdWxhdGVkV2lkdGggPSBvZmZzZXRXaWR0aCArIGNzc0ljb25XaWR0aDtcclxuICAgICAgICBpZiAodGhpcy5pdGVtLndpZHRoICE9PSBjYWxjdWxhdGVkV2lkdGgpIHtcclxuICAgICAgICAgICAgdGhpcy5pdGVtLndpZHRoID0gY2FsY3VsYXRlZFdpZHRoO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldGhvZCBjYWxsZWQgd2hlbiBhY3Rpb24gYnV0dG9uIGlzIGNsaWNrZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBleGVjdXRlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLml0ZW0uZXhlY3V0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLml0ZW0uZXhlY3V0ZS5jYWxsKHRoaXMuaXRlbSwgdGhpcy5pdGVtLnRhcmdldCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0aG9kIGNhbGxlZCB3aGVuIHRoZSBwb3Atb3V0IGljb24gaXMgY2xpY2tlZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcG9wT3V0V2luZG93KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucG9wdXBXaW5kb3cgPSB3aW5kb3cub3Blbih0aGlzLml0ZW0ucG9wT3V0VXJsLCAnX2JsYW5rJywgJ3Rvb2xiYXI9bm8nKTtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6bWVzc2FnZScsIFsnJGV2ZW50J10pXHJcbiAgICBwdWJsaWMgb25XaW5kb3dNZXNzYWdlKGV2ZW50OiBNZXNzYWdlRXZlbnQpIHtcclxuICAgICAgICBpZiAoIXRoaXMucG9wdXBXaW5kb3cpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGV2ZW50Lm9yaWdpbiAhPT0gdGhpcy5vcGVuT3JpZ2luKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChldmVudC5kYXRhICYmIGV2ZW50LmRhdGEudHlwZSA9PT0gJ21zZnQtc21lLXNoZWxsLWhvc3QuaWRlbnRpZnknKSB7XHJcbiAgICAgICAgICAgICg8V2luZG93PmV2ZW50LnNvdXJjZSkucG9zdE1lc3NhZ2Uoe1xyXG4gICAgICAgICAgICAgICAgcmVxdWVzdElkOiBldmVudC5kYXRhLnJlcXVlc3RJZCxcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdyZXNwb25zZSdcclxuICAgICAgICAgICAgfSwgZXZlbnQub3JpZ2luKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHdpbmRvd0NvbmZpZ3MgPSB7XHJcbiAgICAgICAgICAgIGFwcEJhcjoge1xyXG4gICAgICAgICAgICAgICAgc29sdXRpb246IHtcclxuICAgICAgICAgICAgICAgICAgICBoaWRlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGhpZGVEcm9wZG93bjogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHRpdGxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZU5hdmlnYXRpb246IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuaXRlbS5wb3BPdXRUaXRsZVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHJpZ2h0TWVudToge1xyXG4gICAgICAgICAgICAgICAgICAgIHNob3dBYm91dDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvd1NjcmlwdHM6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHNob3dTZXR0aW5nczogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvd1dpbmRvd0NvbnRyb2xzOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBzaG93U2hhcmVMaW5rOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0b29sczoge1xyXG4gICAgICAgICAgICAgICAgaGlkZTogdHJ1ZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjb25uZWN0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgaGVhZGVyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGlkZTogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKGV2ZW50LmRhdGEgJiYgZXZlbnQuZGF0YS50eXBlID09PSAnbXNmdC1zbWUtc2hlbGwtaG9zdC5pbml0aWFsaXplJykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wb3J0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvcnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMucG9ydExpc3RlbmVySGFuZGxlcik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvcnQuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucG9ydCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMucG9ydCA9IGV2ZW50LnBvcnRzWzBdO1xyXG4gICAgICAgICAgICB0aGlzLnBvcnQucG9zdE1lc3NhZ2Uoe1xyXG4gICAgICAgICAgICAgICAgcmVxdWVzdElkOiBldmVudC5kYXRhLnJlcXVlc3RJZCxcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdyZXNwb25zZScsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiB3aW5kb3dDb25maWdzXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwic21lLWFycmFuZ2Utc3RhY2staFwiPlxyXG4gIDxidXR0b24gW2F0dHIucm9sZV09XCJhcmlhUm9sZVwiICpuZ0lmPVwiIWl0ZW0uY29udGFpbmVyPy5jb21wYWN0XCJcclxuICAgIGNsYXNzPVwic21lLWJ1dHRvbi10cmlnZ2VyIHNtZS1idXR0b24tYXV0by13aWR0aCBzbWUtYnV0dG9uLWFsaWduLWxlZnQgc21lLXBvc2l0aW9uLXN0cmV0Y2hcIlxyXG4gICAgW2NsYXNzLnNtZS10b2dnbGVkXT1cImFyaWFDaGVja2VkXCIgW2F0dHIuYXJpYS1jaGVja2VkXT1cImFyaWFDaGVja2VkXCIgW2F0dHIuZGF0YS11dGEtaWRdPVwiaXRlbS5hY3Rpb25JZFwiXHJcbiAgICAoY2xpY2spPVwiZXhlY3V0ZSgpXCIgW3NtZURpc2FibGVkXT1cIiFpdGVtLmVuYWJsZWQgfHwgaXRlbS5idXN5IHx8ICFpdGVtLnJlYWR5XCIgdHlwZT1cImJ1dHRvblwiPlxyXG4gICAgICA8c3BhbiBbbmdDbGFzc109XCJpdGVtLmljb25DbGFzcyB8fCAnJ1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtYXJyYW5nZS1lbGxpcHNpcyBzbWUtYWN0aW9uLWJ1dHRvbi10ZXh0LXNwYW5cIiBbdGl0bGVdPVwiaXRlbS50ZXh0XCI+e3sgaXRlbS50ZXh0IH19PC9zcGFuPlxyXG4gIDwvYnV0dG9uPlxyXG5cclxuICA8YnV0dG9uIFthdHRyLnJvbGVdPVwiYXJpYVJvbGVcIiAqbmdJZj1cIml0ZW0uY29udGFpbmVyPy5jb21wYWN0XCJcclxuICAgIGNsYXNzPVwic21lLWJ1dHRvbi10cmlnZ2VyIHNtZS1idXR0b24tYXV0by13aWR0aCBzbWUtYnV0dG9uLWFsaWduLWxlZnQgc21lLXBvc2l0aW9uLXN0cmV0Y2hcIlxyXG4gICAgW2NsYXNzLnNtZS10b2dnbGVkXT1cImFyaWFDaGVja2VkXCIgW2F0dHIuYXJpYS1jaGVja2VkXT1cImFyaWFDaGVja2VkXCIgW2F0dHIuZGF0YS11dGEtaWRdPVwiaXRlbS5hY3Rpb25JZFwiXHJcbiAgICAoY2xpY2spPVwiZXhlY3V0ZSgpXCIgW3NtZURpc2FibGVkXT1cIiFpdGVtLmVuYWJsZWQgfHwgaXRlbS5idXN5IHx8ICFpdGVtLnJlYWR5XCIgdHlwZT1cImJ1dHRvblwiIFt0aXRsZV09XCJpdGVtLnRleHRcIlxyXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCJpdGVtLnRleHRcIj5cclxuICAgIDxzcGFuIFtuZ0NsYXNzXT1cIml0ZW0uaWNvbkNsYXNzIHx8ICcnXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxyXG4gICAgPGJ1dHRvbiAqbmdJZj1cIml0ZW0ucG9wT3V0RW5hYmxlZFwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwicG9wT3V0V2luZG93KClcIlxyXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFjdGlvbkJ1dHRvblN0cmluZ3MuT3BlbkluQU5ld1dpbmRvdy5sYWJlbFwiIFt0aXRsZV09XCJhY3Rpb25CdXR0b25TdHJpbmdzLk9wZW5JbkFOZXdXaW5kb3cudGl0bGVcIlxyXG4gICAgICBjbGFzcz1cInNtZS1idXR0b24tdHJpZ2dlciBzbWUtaGVpZ2h0LW1kIHNtZS1idXR0b24tYXV0by13aWR0aCBzbWUtYmVoYXZpb3ItaG92ZXItdGFyZ2V0LXNob3cgc21lLWxheW91dC1idXR0b24tZmxleC1lbmRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInNtZS1pY29uIHNtZS1pY29uLW9wZW5Jbk5ld1dpbmRvd1wiPjwvZGl2PlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9idXR0b24+XHJcblxyXG4gIDxidXR0b24gKm5nSWY9XCJpdGVtLnBvcE91dEVuYWJsZWRcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInBvcE91dFdpbmRvdygpXCJcclxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYWN0aW9uQnV0dG9uU3RyaW5ncy5PcGVuSW5BTmV3V2luZG93LmxhYmVsXCIgW3RpdGxlXT1cImFjdGlvbkJ1dHRvblN0cmluZ3MuT3BlbkluQU5ld1dpbmRvdy50aXRsZVwiXHJcbiAgICBjbGFzcz1cInNtZS1idXR0b24tdHJpZ2dlciBzbWUtYnV0dG9uLWF1dG8td2lkdGggc21lLWJlaGF2aW9yLWhvdmVyLXRhcmdldC1zaG93IHNtZS1sYXlvdXQtYnV0dG9uLWZsZXgtZW5kXCJcclxuICAgIFtzbWVEaXNhYmxlZF09XCIhaXRlbS5lbmFibGVkIHx8IGl0ZW0uYnVzeSB8fCAhaXRlbS5yZWFkeVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInNtZS1pY29uIHNtZS1pY29uLW9wZW5Jbk5ld1dpbmRvd1wiPjwvZGl2PlxyXG4gIDwvYnV0dG9uPlxyXG48L2Rpdj5cclxuIl19