UNPKG

truly-ui

Version:

Web Components for Desktop Applications.

131 lines (129 loc) 22.3 kB
/* MIT License Copyright (c) 2019 Temainfo Software Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ import { Component, Input, Inject, Optional, ViewChild } from '@angular/core'; import { OverlayAnimation } from '../core/directives/overlay-animation'; import { ElementBase } from '../input/core/element-base'; import { MakeProvider } from '../core/base/value-accessor-provider'; import { NG_ASYNC_VALIDATORS, NG_VALIDATORS, NgModel } from '@angular/forms'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "../overlaylist/overlay-list"; import * as i3 from "@angular/cdk/overlay"; import * as i4 from "@angular/forms"; export class TlDropdownIcon extends ElementBase { constructor(validators, asyncValidators, change) { super(validators, asyncValidators); this.change = change; this.data = []; this.disabled = null; this.defaultIcon = 'ion ion-ios-search'; this.color = 'basic'; this.heightIcon = '23px'; this.widthIcon = '35px'; this.heightItems = '30px'; this.widthItems = '120px'; this.keyIcon = 'icon'; this.defaultOptionText = 'Select...'; this.hasDefaultOption = true; this.keyText = 'text'; this.keyValue = 'value'; this.typeOfData = 'complex'; } ngOnInit() { } ngAfterViewInit() { const key = Object.keys(this.data)[0]; if (typeof this.data[key] === 'string') { this.typeOfData = 'simple'; } if (!this.keyIcon) { throw new Error('The property [keyIcon] must be declared'); } } onBackdropClick() { this.isOpen = false; this.change.detectChanges(); } onSelectOption($event) { this.optionSelected = $event; this.value = this.optionSelected.option.item[this.keyValue]; this.isOpen = false; } onDefaultOption() { this.optionSelected = null; this.value = ''; this.isOpen = false; } getIcon() { if (this.optionSelected) { return this.optionSelected.option.item.icon; } return this.defaultIcon; } } /** @nocollapse */ TlDropdownIcon.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TlDropdownIcon, deps: [{ token: NG_VALIDATORS, optional: true }, { token: NG_ASYNC_VALIDATORS, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); /** @nocollapse */ TlDropdownIcon.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TlDropdownIcon, selector: "tl-dropdown-icon", inputs: { data: "data", disabled: "disabled", defaultIcon: "defaultIcon", color: "color", heightIcon: "heightIcon", widthIcon: "widthIcon", heightItems: "heightItems", widthItems: "widthItems", keyIcon: "keyIcon", defaultOptionText: "defaultOptionText", hasDefaultOption: "hasDefaultOption", keyText: "keyText", keyValue: "keyValue" }, providers: [ [MakeProvider(TlDropdownIcon)] ], viewQueries: [{ propertyName: "model", first: true, predicate: NgModel, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"ui-wrapper-dropdownicon\">\n <button tabindex=\"0\"\n #button\n (keydown.enter)=\"$event.preventDefault()\"\n (click)=\"isOpen = !isOpen\"\n cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\"\n [ngClass]=\"{'disabled': disabled}\"\n [ngStyle]=\"{ 'height': heightIcon, 'width': widthIcon }\"\n [class]=\"'ui-button-icon ripple '+ color\"\n [disabled]=\"disabled ? true : null\">\n <div [style.line-height]=\"heightIcon\" [class]=\"'ui-icon ' + getIcon()\"></div>\n </button>\n <input class=\"ui-hidden-input\" [(ngModel)]=\"value\">\n <ng-template cdkConnectedOverlay\n (backdropClick)=\"onBackdropClick()\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayBackdropClass]=\"'cdk-overlay-transparent-backdrop'\"\n [cdkConnectedOverlayOpen]=\"isOpen\">\n <tl-overlay-list\n @overlay\n (selectOption)=\"onSelectOption($event)\"\n (defaultOption)=\"onDefaultOption()\"\n [typeOfData]=\"typeOfData\"\n [defaultOptionText]=\"defaultOptionText\"\n [hasDefaultOption]=\"hasDefaultOption\"\n [defaultIcon]=\"defaultIcon\"\n [optionSelected]=\"optionSelected\"\n [datasource]=\"data\"\n [itemHeight]=\"heightItems\"\n [width]=\"widthItems\"\n [icon]=\"keyIcon\"\n [keyText]=\"keyText\">\n </tl-overlay-list>\n </ng-template>\n</div>\n", styles: [".ui-button-icon{font-family:Segoe UI,Lato,\"sans-serif\",Arial;font-size:.9em;padding:0;margin:0;outline:none;display:inline-block;cursor:pointer;box-sizing:border-box;border-radius:3px}.ui-button-icon>.ui-icon{height:100%;width:100%;vertical-align:middle}.ui-hidden-input{visibility:hidden;position:absolute;width:1px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.TlOverlayList, selector: "tl-overlay-list", inputs: ["datasource", "searchOnList", "itemHeight", "inputModelIndex", "optionSelected", "typeOfData", "keyText", "groupBy", "keyIcon", "icon", "defaultIcon", "defaultOptionText", "width", "maxHeight", "customInput", "customFocus", "hasDefaultOption"], outputs: ["selectOption", "defaultOption", "search", "findByLetter", "close"] }, { kind: "directive", type: i3.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i3.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], animations: [OverlayAnimation] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TlDropdownIcon, decorators: [{ type: Component, args: [{ selector: 'tl-dropdown-icon', animations: [OverlayAnimation], providers: [ [MakeProvider(TlDropdownIcon)] ], template: "<div class=\"ui-wrapper-dropdownicon\">\n <button tabindex=\"0\"\n #button\n (keydown.enter)=\"$event.preventDefault()\"\n (click)=\"isOpen = !isOpen\"\n cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\"\n [ngClass]=\"{'disabled': disabled}\"\n [ngStyle]=\"{ 'height': heightIcon, 'width': widthIcon }\"\n [class]=\"'ui-button-icon ripple '+ color\"\n [disabled]=\"disabled ? true : null\">\n <div [style.line-height]=\"heightIcon\" [class]=\"'ui-icon ' + getIcon()\"></div>\n </button>\n <input class=\"ui-hidden-input\" [(ngModel)]=\"value\">\n <ng-template cdkConnectedOverlay\n (backdropClick)=\"onBackdropClick()\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayBackdropClass]=\"'cdk-overlay-transparent-backdrop'\"\n [cdkConnectedOverlayOpen]=\"isOpen\">\n <tl-overlay-list\n @overlay\n (selectOption)=\"onSelectOption($event)\"\n (defaultOption)=\"onDefaultOption()\"\n [typeOfData]=\"typeOfData\"\n [defaultOptionText]=\"defaultOptionText\"\n [hasDefaultOption]=\"hasDefaultOption\"\n [defaultIcon]=\"defaultIcon\"\n [optionSelected]=\"optionSelected\"\n [datasource]=\"data\"\n [itemHeight]=\"heightItems\"\n [width]=\"widthItems\"\n [icon]=\"keyIcon\"\n [keyText]=\"keyText\">\n </tl-overlay-list>\n </ng-template>\n</div>\n", styles: [".ui-button-icon{font-family:Segoe UI,Lato,\"sans-serif\",Arial;font-size:.9em;padding:0;margin:0;outline:none;display:inline-block;cursor:pointer;box-sizing:border-box;border-radius:3px}.ui-button-icon>.ui-icon{height:100%;width:100%;vertical-align:middle}.ui-hidden-input{visibility:hidden;position:absolute;width:1px}\n"] }] }], ctorParameters: function () { return [{ type: Array, decorators: [{ type: Optional }, { type: Inject, args: [NG_VALIDATORS] }] }, { type: Array, decorators: [{ type: Optional }, { type: Inject, args: [NG_ASYNC_VALIDATORS] }] }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { data: [{ type: Input }], disabled: [{ type: Input }], defaultIcon: [{ type: Input }], color: [{ type: Input }], heightIcon: [{ type: Input }], widthIcon: [{ type: Input }], heightItems: [{ type: Input }], widthItems: [{ type: Input }], keyIcon: [{ type: Input }], defaultOptionText: [{ type: Input }], hasDefaultOption: [{ type: Input }], keyText: [{ type: Input }], keyValue: [{ type: Input }], model: [{ type: ViewChild, args: [NgModel, { static: true }] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd25pY29uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJ1bHktdWkvc3JjL2NvbXBvbmVudHMvZHJvcGRvd25pY29uL2Ryb3Bkb3duaWNvbi50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RydWx5LXVpL3NyYy9jb21wb25lbnRzL2Ryb3Bkb3duaWNvbi9kcm9wZG93bmljb24uaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxPQUFPLEVBQ0wsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQ3hCLFFBQVEsRUFBeUIsU0FBUyxFQUMzQyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7OztBQVc3RSxNQUFNLE9BQU8sY0FBZSxTQUFRLFdBQW1CO0lBb0NyRCxZQUFrRCxVQUFzQixFQUN0RSxlQUEyQixFQUFVLE1BQXlCO1FBQzlELEtBQUssQ0FBRSxVQUFVLEVBQUUsZUFBZSxDQUFFLENBQUM7UUFEQSxXQUFNLEdBQU4sTUFBTSxDQUFtQjtRQW5DdkQsU0FBSSxHQUFHLEVBQUUsQ0FBQztRQUVWLGFBQVEsR0FBRyxJQUFJLENBQUM7UUFFaEIsZ0JBQVcsR0FBRyxvQkFBb0IsQ0FBQztRQUVuQyxVQUFLLEdBQUcsT0FBTyxDQUFDO1FBRWhCLGVBQVUsR0FBRyxNQUFNLENBQUM7UUFFcEIsY0FBUyxHQUFHLE1BQU0sQ0FBQztRQUVuQixnQkFBVyxHQUFHLE1BQU0sQ0FBQztRQUVyQixlQUFVLEdBQUcs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KSAyMDE5IFRlbWFpbmZvIFNvZnR3YXJlXG5cbiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuIFNPRlRXQVJFLlxuICovXG5pbXBvcnQge1xuICBDb21wb25lbnQsIElucHV0LCBJbmplY3QsXG4gIE9wdGlvbmFsLCBPbkluaXQsIEFmdGVyVmlld0luaXQsIFZpZXdDaGlsZCwgQ2hhbmdlRGV0ZWN0b3JSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPdmVybGF5QW5pbWF0aW9uIH0gZnJvbSAnLi4vY29yZS9kaXJlY3RpdmVzL292ZXJsYXktYW5pbWF0aW9uJztcbmltcG9ydCB7IEVsZW1lbnRCYXNlIH0gZnJvbSAnLi4vaW5wdXQvY29yZS9lbGVtZW50LWJhc2UnO1xuaW1wb3J0IHsgTWFrZVByb3ZpZGVyIH0gZnJvbSAnLi4vY29yZS9iYXNlL3ZhbHVlLWFjY2Vzc29yLXByb3ZpZGVyJztcbmltcG9ydCB7IE5HX0FTWU5DX1ZBTElEQVRPUlMsIE5HX1ZBTElEQVRPUlMsIE5nTW9kZWwgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBDb21wb25lbnQoIHtcbiAgc2VsZWN0b3I6ICd0bC1kcm9wZG93bi1pY29uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Ryb3Bkb3duaWNvbi5odG1sJyxcbiAgc3R5bGVVcmxzOiBbICcuL2Ryb3Bkb3duaWNvbi5zY3NzJyBdLFxuICBhbmltYXRpb25zOiBbIE92ZXJsYXlBbmltYXRpb24gXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgWyBNYWtlUHJvdmlkZXIoIFRsRHJvcGRvd25JY29uICkgXVxuICBdXG59IClcbmV4cG9ydCBjbGFzcyBUbERyb3Bkb3duSWNvbiBleHRlbmRzIEVsZW1lbnRCYXNlPHN0cmluZz4gaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuXG4gIEBJbnB1dCgpIGRhdGEgPSBbXTtcblxuICBASW5wdXQoKSBkaXNhYmxlZCA9IG51bGw7XG5cbiAgQElucHV0KCkgZGVmYXVsdEljb24gPSAnaW9uIGlvbi1pb3Mtc2VhcmNoJztcblxuICBASW5wdXQoKSBjb2xvciA9ICdiYXNpYyc7XG5cbiAgQElucHV0KCkgaGVpZ2h0SWNvbiA9ICcyM3B4JztcblxuICBASW5wdXQoKSB3aWR0aEljb24gPSAnMzVweCc7XG5cbiAgQElucHV0KCkgaGVpZ2h0SXRlbXMgPSAnMzBweCc7XG5cbiAgQElucHV0KCkgd2lkdGhJdGVtcyA9ICcxMjBweCc7XG5cbiAgQElucHV0KCkga2V5SWNvbiA9ICdpY29uJztcblxuICBASW5wdXQoKSBkZWZhdWx0T3B0aW9uVGV4dCA9ICdTZWxlY3QuLi4nO1xuXG4gIEBJbnB1dCgpIGhhc0RlZmF1bHRPcHRpb24gPSB0cnVlO1xuXG4gIEBJbnB1dCgpIGtleVRleHQgPSAndGV4dCc7XG5cbiAgQElucHV0KCkga2V5VmFsdWUgPSAndmFsdWUnO1xuXG4gIEBWaWV3Q2hpbGQoIE5nTW9kZWwsIHtzdGF0aWM6IHRydWV9ICApIG1vZGVsOiBOZ01vZGVsO1xuXG4gIHB1YmxpYyBvcHRpb25TZWxlY3RlZDtcblxuICBwdWJsaWMgdHlwZU9mRGF0YSA9ICdjb21wbGV4JztcblxuICBwdWJsaWMgaXNPcGVuOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKCBAT3B0aW9uYWwoKSBASW5qZWN0KCBOR19WQUxJREFUT1JTICkgdmFsaWRhdG9yczogQXJyYXk8YW55PiwgQE9wdGlvbmFsKCkgQEluamVjdCggTkdfQVNZTkNfVkFMSURBVE9SUyApXG4gICAgYXN5bmNWYWxpZGF0b3JzOiBBcnJheTxhbnk+LCBwcml2YXRlIGNoYW5nZTogQ2hhbmdlRGV0ZWN0b3JSZWYgKSB7XG4gICAgc3VwZXIoIHZhbGlkYXRvcnMsIGFzeW5jVmFsaWRhdG9ycyApO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7fVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBjb25zdCBrZXkgPSBPYmplY3Qua2V5cyh0aGlzLmRhdGEpWzBdO1xuICAgIGlmICh0eXBlb2YgdGhpcy5kYXRhW2tleV0gPT09ICdzdHJpbmcnICkge1xuICAgICAgdGhpcy50eXBlT2ZEYXRhID0gJ3NpbXBsZSc7XG4gICAgfVxuICAgIGlmICghdGhpcy5rZXlJY29uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBwcm9wZXJ0eSBba2V5SWNvbl0gbXVzdCBiZSBkZWNsYXJlZCcpO1xuICAgIH1cbiAgfVxuXG4gIG9uQmFja2Ryb3BDbGljaygpIHtcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuY2hhbmdlLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG9uU2VsZWN0T3B0aW9uKCAkZXZlbnQgKSB7XG4gICAgdGhpcy5vcHRpb25TZWxlY3RlZCA9ICRldmVudDtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5vcHRpb25TZWxlY3RlZC5vcHRpb24uaXRlbVt0aGlzLmtleVZhbHVlXTtcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICB9XG5cbiAgb25EZWZhdWx0T3B0aW9uKCkge1xuICAgIHRoaXMub3B0aW9uU2VsZWN0ZWQgPSBudWxsO1xuICAgIHRoaXMudmFsdWUgPSAnJztcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICB9XG5cbiAgZ2V0SWNvbigpIHtcbiAgICBpZiAodGhpcy5vcHRpb25TZWxlY3RlZCkge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9uU2VsZWN0ZWQub3B0aW9uLml0ZW0uaWNvbjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdEljb247XG4gIH1cblxufVxuXG4iLCI8ZGl2IGNsYXNzPVwidWktd3JhcHBlci1kcm9wZG93bmljb25cIj5cbiAgPGJ1dHRvbiB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICNidXR0b25cbiAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgKGNsaWNrKT1cImlzT3BlbiA9ICFpc09wZW5cIlxuICAgICAgICAgIGNka092ZXJsYXlPcmlnaW4gI3RyaWdnZXI9XCJjZGtPdmVybGF5T3JpZ2luXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJzogZGlzYWJsZWR9XCJcbiAgICAgICAgICBbbmdTdHlsZV09XCJ7ICdoZWlnaHQnOiBoZWlnaHRJY29uLCAnd2lkdGgnOiB3aWR0aEljb24gfVwiXG4gICAgICAgICAgW2NsYXNzXT1cIid1aS1idXR0b24taWNvbiByaXBwbGUgJysgY29sb3JcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCA/IHRydWUgOiBudWxsXCI+XG4gICAgPGRpdiBbc3R5bGUubGluZS1oZWlnaHRdPVwiaGVpZ2h0SWNvblwiIFtjbGFzc109XCIndWktaWNvbiAnICsgZ2V0SWNvbigpXCI+PC9kaXY+XG4gIDwvYnV0dG9uPlxuICA8aW5wdXQgY2xhc3M9XCJ1aS1oaWRkZW4taW5wdXRcIiBbKG5nTW9kZWwpXT1cInZhbHVlXCI+XG4gIDxuZy10ZW1wbGF0ZSBjZGtDb25uZWN0ZWRPdmVybGF5XG4gICAgICAgICAgICAgICAoYmFja2Ryb3BDbGljayk9XCJvbkJhY2tkcm9wQ2xpY2soKVwiXG4gICAgICAgICAgICAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheUhhc0JhY2tkcm9wXT1cInRydWVcIlxuICAgICAgICAgICAgICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW5dPVwidHJpZ2dlclwiXG4gICAgICAgICAgICAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheUJhY2tkcm9wQ2xhc3NdPVwiJ2Nkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wJ1wiXG4gICAgICAgICAgICAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW5dPVwiaXNPcGVuXCI+XG4gICAgPHRsLW92ZXJsYXktbGlzdFxuICAgICAgQG92ZXJsYXlcbiAgICAgIChzZWxlY3RPcHRpb24pPVwib25TZWxlY3RPcHRpb24oJGV2ZW50KVwiXG4gICAgICAoZGVmYXVsdE9wdGlvbik9XCJvbkRlZmF1bHRPcHRpb24oKVwiXG4gICAgICBbdHlwZU9mRGF0YV09XCJ0eXBlT2ZEYXRhXCJcbiAgICAgIFtkZWZhdWx0T3B0aW9uVGV4dF09XCJkZWZhdWx0T3B0aW9uVGV4dFwiXG4gICAgICBbaGFzRGVmYXVsdE9wdGlvbl09XCJoYXNEZWZhdWx0T3B0aW9uXCJcbiAgICAgIFtkZWZhdWx0SWNvbl09XCJkZWZhdWx0SWNvblwiXG4gICAgICBbb3B0aW9uU2VsZWN0ZWRdPVwib3B0aW9uU2VsZWN0ZWRcIlxuICAgICAgW2RhdGFzb3VyY2VdPVwiZGF0YVwiXG4gICAgICBbaXRlbUhlaWdodF09XCJoZWlnaHRJdGVtc1wiXG4gICAgICBbd2lkdGhdPVwid2lkdGhJdGVtc1wiXG4gICAgICBbaWNvbl09XCJrZXlJY29uXCJcbiAgICAgIFtrZXlUZXh0XT1cImtleVRleHRcIj5cbiAgICA8L3RsLW92ZXJsYXktbGlzdD5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuIl19