truly-ui
Version:
Web Components for Desktop Applications.
106 lines (104 loc) • 17.8 kB
JavaScript
/*
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, EventEmitter, Input, Output, ChangeDetectionStrategy } from '@angular/core';
import { NavigatorManagerService } from './services/navigator-manager.service';
import * as i0 from "@angular/core";
import * as i1 from "./services/navigator-manager.service";
import * as i2 from "@angular/common";
import * as i3 from "../icons/icons";
export class TlNavigator {
constructor(navigatorManager, change) {
this.navigatorManager = navigatorManager;
this.change = change;
this.width = '125px';
this.height = '32px';
this.type = 'monthyear';
this.date = new Date();
this.range = 11;
this.withBorder = true;
this.color = 'basic';
this.clickPrevious = new EventEmitter();
this.clickNext = new EventEmitter();
this.clickNavigator = new EventEmitter();
this.description = '';
}
ngOnInit() {
this.navigatorManager.setType(this.type);
this.navigatorManager.setRange(this.range);
this.navigatorManager.setDate(this.date);
this.setDescription();
}
ngOnChanges(change) {
this.navigatorManager.setType(this.type);
this.navigatorManager.setRange(this.range);
this.navigatorManager.setDate(this.date);
this.setDescription();
}
onClickPrevious() {
this.navigatorManager.previous();
this.setDescription();
this.clickPrevious.emit(this.navigatorManager.getDataObject());
}
onClickNext() {
this.navigatorManager.next();
this.setDescription();
this.clickNext.emit(this.navigatorManager.getDataObject());
}
onClickNavigator() {
this.clickNavigator.emit(this.navigatorManager.getDataObject());
}
setDescription() {
this.description = this.navigatorManager.getDescription();
this.change.detectChanges();
}
}
/** @nocollapse */ TlNavigator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TlNavigator, deps: [{ token: i1.NavigatorManagerService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
/** @nocollapse */ TlNavigator.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TlNavigator, selector: "tl-navigator", inputs: { width: "width", height: "height", type: "type", date: "date", range: "range", withBorder: "withBorder", color: "color" }, outputs: { clickPrevious: "clickPrevious", clickNext: "clickNext", clickNavigator: "clickNavigator" }, providers: [NavigatorManagerService], usesOnChanges: true, ngImport: i0, template: "<div [class]=\"'tl-navigator '+ color\">\n <div tabindex=\"-1\"\n (click)=\"onClickPrevious()\"\n [ngClass]=\"{'ui-button': true, 'ui-with-border': withBorder}\"\n [ngStyle]=\"{height:height, lineHeight: height}\">\n <tl-icon [lib]=\"'fa'\" [style]=\"'fas'\" [icon]=\"'chevron-left'\"></tl-icon>\n </div>\n <div tabindex=\"-1\"\n [ngClass]=\"{'ui-navigator': true,'ui-with-border': withBorder}\"\n (click)=\"onClickNavigator()\"\n [ngStyle]=\"{'max-width':width, height:height, lineHeight: height, width: width}\">\n {{description}}\n </div>\n <div tabindex=\"-1\"\n (click)=\"onClickNext()\"\n [ngClass]=\"{'ui-button': true, 'ui-with-border': withBorder}\"\n [ngStyle]=\"{height:height, lineHeight: height}\">\n <tl-icon [lib]=\"'fa'\" [style]=\"'fas'\" [icon]=\"'chevron-right'\"></tl-icon>\n </div>\n</div>\n", styles: [".tl-navigator{display:inline-flex}.tl-navigator>.ui-navigator{text-align:center;cursor:pointer;font-weight:500;font-size:1em;font-family:Segoe UI,Lato,\"sans-serif\",Arial;transition:background-color .1s linear;-webkit-user-select:none;user-select:none}.tl-navigator>.ui-navigator.ui-with-border:hover,.tl-navigator>.ui-navigator.ui-with-border:focus{border-radius:0}.tl-navigator>.ui-navigator:hover,.tl-navigator>.ui-navigator:focus{border-radius:3px;outline:none}.tl-navigator>.ui-button{width:30px;text-align:center;cursor:pointer;transition:background-color .1s linear;-webkit-user-select:none;user-select:none}.tl-navigator>.ui-button:hover,.tl-navigator>.ui-button:focus{outline:none}.tl-navigator>.ui-button.ui-with-border:first-child{border-top-left-radius:3px;border-bottom-left-radius:3px}.tl-navigator>.ui-button.ui-with-border:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i3.TlIcons, selector: "tl-icon", inputs: ["icon", "lib", "style", "size", "animation", "color", "align"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TlNavigator, decorators: [{
type: Component,
args: [{ selector: 'tl-navigator', changeDetection: ChangeDetectionStrategy.OnPush, providers: [NavigatorManagerService], template: "<div [class]=\"'tl-navigator '+ color\">\n <div tabindex=\"-1\"\n (click)=\"onClickPrevious()\"\n [ngClass]=\"{'ui-button': true, 'ui-with-border': withBorder}\"\n [ngStyle]=\"{height:height, lineHeight: height}\">\n <tl-icon [lib]=\"'fa'\" [style]=\"'fas'\" [icon]=\"'chevron-left'\"></tl-icon>\n </div>\n <div tabindex=\"-1\"\n [ngClass]=\"{'ui-navigator': true,'ui-with-border': withBorder}\"\n (click)=\"onClickNavigator()\"\n [ngStyle]=\"{'max-width':width, height:height, lineHeight: height, width: width}\">\n {{description}}\n </div>\n <div tabindex=\"-1\"\n (click)=\"onClickNext()\"\n [ngClass]=\"{'ui-button': true, 'ui-with-border': withBorder}\"\n [ngStyle]=\"{height:height, lineHeight: height}\">\n <tl-icon [lib]=\"'fa'\" [style]=\"'fas'\" [icon]=\"'chevron-right'\"></tl-icon>\n </div>\n</div>\n", styles: [".tl-navigator{display:inline-flex}.tl-navigator>.ui-navigator{text-align:center;cursor:pointer;font-weight:500;font-size:1em;font-family:Segoe UI,Lato,\"sans-serif\",Arial;transition:background-color .1s linear;-webkit-user-select:none;user-select:none}.tl-navigator>.ui-navigator.ui-with-border:hover,.tl-navigator>.ui-navigator.ui-with-border:focus{border-radius:0}.tl-navigator>.ui-navigator:hover,.tl-navigator>.ui-navigator:focus{border-radius:3px;outline:none}.tl-navigator>.ui-button{width:30px;text-align:center;cursor:pointer;transition:background-color .1s linear;-webkit-user-select:none;user-select:none}.tl-navigator>.ui-button:hover,.tl-navigator>.ui-button:focus{outline:none}.tl-navigator>.ui-button.ui-with-border:first-child{border-top-left-radius:3px;border-bottom-left-radius:3px}.tl-navigator>.ui-button.ui-with-border:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}\n"] }]
}], ctorParameters: function () { return [{ type: i1.NavigatorManagerService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { width: [{
type: Input,
args: ['width']
}], height: [{
type: Input,
args: ['height']
}], type: [{
type: Input,
args: ['type']
}], date: [{
type: Input,
args: ['date']
}], range: [{
type: Input,
args: ['range']
}], withBorder: [{
type: Input,
args: ['withBorder']
}], color: [{
type: Input
}], clickPrevious: [{
type: Output
}], clickNext: [{
type: Output
}], clickNavigator: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJ1bHktdWkvc3JjL2NvbXBvbmVudHMvbmF2aWdhdG9yL25hdmlnYXRvci50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RydWx5LXVpL3NyYy9jb21wb25lbnRzL25hdmlnYXRvci9uYXZpZ2F0b3IuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFFSCxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLHVCQUF1QixFQUt4QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7Ozs7QUFTL0UsTUFBTSxPQUFPLFdBQVc7SUF3QnRCLFlBQ1MsZ0JBQXlDLEVBQ3pDLE1BQXlCO1FBRHpCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBeUI7UUFDekMsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUF4QmxCLFVBQUssR0FBRyxPQUFPLENBQUM7UUFFZixXQUFNLEdBQUcsTUFBTSxDQUFDO1FBRWxCLFNBQUksR0FBNkQsV0FBVyxDQUFDO1FBRTdFLFNBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBRWpCLFVBQUssR0FBRyxFQUFFLENBQUM7UUFFTixlQUFVLEdBQUcsSUFBSSxDQUFDO1FBRTlCLFVBQUssR0FBRyxPQUFPLENBQUM7UUFFZixrQkFBYSxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBRTNELGNBQVMsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUV2RCxtQkFBYyxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBRS9ELGdCQUFXLEdBQUcsRUFBRSxDQUFDO0lBS3JCLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxXQUFXLENBQUMsTUFBcUI7UUFDL0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLENBQUUsQ0FBQztJQUNuRSxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFTyxjQUFjO1FBQ3BCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzFELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDOUIsQ0FBQzs7NEhBOURVLFdBQVc7Z0hBQVgsV0FBVyxrUkFGVCxDQUFDLHVCQUF1QixDQUFDLCtDQ3hDeEMsbTNCQW9CQTs0RkRzQmEsV0FBVztrQkFQdkIsU0FBUzsrQkFDSSxjQUFjLG1CQUdQLHVCQUF1QixDQUFDLE1BQU0sYUFDcEMsQ0FBQyx1QkFBdUIsQ0FBQzs4SUFJdEIsS0FBSztzQkFBcEIsS0FBSzt1QkFBQyxPQUFPO2dCQUVHLE1BQU07c0JBQXRCLEtBQUs7dUJBQUMsUUFBUTtnQkFFQSxJQUFJO3NCQUFsQixLQUFLO3VCQUFDLE1BQU07Z0JBRUUsSUFBSTtzQkFBbEIsS0FBSzt1QkFBQyxNQUFNO2dCQUVHLEtBQUs7c0JBQXBCLEtBQUs7dUJBQUMsT0FBTztnQkFFTyxVQUFVO3NCQUE5QixLQUFLO3VCQUFDLFlBQVk7Z0JBRVYsS0FBSztzQkFBYixLQUFLO2dCQUVJLGFBQWE7c0JBQXRCLE1BQU07Z0JBRUcsU0FBUztzQkFBbEIsTUFBTTtnQkFFRyxjQUFjO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiBNSVQgTGljZW5zZVxuXG4gQ29weXJpZ2h0IChjKSAyMDE5IFRlbWFpbmZvIFNvZnR3YXJlXG5cbiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgT25Jbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgT25DaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2aWdhdG9yTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL25hdmlnYXRvci1tYW5hZ2VyLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KCB7XG4gICAgc2VsZWN0b3I6ICd0bC1uYXZpZ2F0b3InLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9uYXZpZ2F0b3IuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbICcuL25hdmlnYXRvci5zY3NzJyBdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW05hdmlnYXRvck1hbmFnZXJTZXJ2aWNlXVxufSApXG5leHBvcnQgY2xhc3MgVGxOYXZpZ2F0b3IgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG5cbiAgQElucHV0KCd3aWR0aCcpIHdpZHRoID0gJzEyNXB4JztcblxuICBASW5wdXQoJ2hlaWdodCcpIGhlaWdodCA9ICczMnB4JztcblxuICBASW5wdXQoJ3R5cGUnKSB0eXBlOiAncmFuZ2V3ZWVrJyB8ICdtb250aHllYXInIHwgJ3llYXInIHwgJ3JhbmdleWVhcicgfCAnZGF5JyA9ICdtb250aHllYXInO1xuXG4gIEBJbnB1dCgnZGF0ZScpIGRhdGUgPSBuZXcgRGF0ZSgpO1xuXG4gIEBJbnB1dCgncmFuZ2UnKSByYW5nZSA9IDExO1xuXG4gIEBJbnB1dCgnd2l0aEJvcmRlcicpIHdpdGhCb3JkZXIgPSB0cnVlO1xuXG4gIEBJbnB1dCgpIGNvbG9yID0gJ2Jhc2ljJztcblxuICBAT3V0cHV0KCkgY2xpY2tQcmV2aW91czogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgY2xpY2tOZXh0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKSBjbGlja05hdmlnYXRvcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBwdWJsaWMgZGVzY3JpcHRpb24gPSAnJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbmF2aWdhdG9yTWFuYWdlcjogTmF2aWdhdG9yTWFuYWdlclNlcnZpY2UsXG4gICAgcHVibGljIGNoYW5nZTogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMubmF2aWdhdG9yTWFuYWdlci5zZXRUeXBlKHRoaXMudHlwZSk7XG4gICAgdGhpcy5uYXZpZ2F0b3JNYW5hZ2VyLnNldFJhbmdlKHRoaXMucmFuZ2UpO1xuICAgIHRoaXMubmF2aWdhdG9yTWFuYWdlci5zZXREYXRlKHRoaXMuZGF0ZSk7XG4gICAgdGhpcy5zZXREZXNjcmlwdGlvbigpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgdGhpcy5uYXZpZ2F0b3JNYW5hZ2VyLnNldFR5cGUodGhpcy50eXBlKTtcbiAgICB0aGlzLm5hdmlnYXRvck1hbmFnZXIuc2V0UmFuZ2UodGhpcy5yYW5nZSk7XG4gICAgdGhpcy5uYXZpZ2F0b3JNYW5hZ2VyLnNldERhdGUodGhpcy5kYXRlKTtcbiAgICB0aGlzLnNldERlc2NyaXB0aW9uKCk7XG4gIH1cblxuICBvbkNsaWNrUHJldmlvdXMoKSB7XG4gICAgdGhpcy5uYXZpZ2F0b3JNYW5hZ2VyLnByZXZpb3VzKCk7XG4gICAgdGhpcy5zZXREZXNjcmlwdGlvbigpO1xuICAgIHRoaXMuY2xpY2tQcmV2aW91cy5lbWl0KCB0aGlzLm5hdmlnYXRvck1hbmFnZXIuZ2V0RGF0YU9iamVjdCgpICk7XG4gIH1cblxuICBvbkNsaWNrTmV4dCgpIHtcbiAgICB0aGlzLm5hdmlnYXRvck1hbmFnZXIubmV4dCgpO1xuICAgIHRoaXMuc2V0RGVzY3JpcHRpb24oKTtcbiAgICB0aGlzLmNsaWNrTmV4dC5lbWl0KHRoaXMubmF2aWdhdG9yTWFuYWdlci5nZXREYXRhT2JqZWN0KCkpO1xuICB9XG5cbiAgb25DbGlja05hdmlnYXRvcigpIHtcbiAgICB0aGlzLmNsaWNrTmF2aWdhdG9yLmVtaXQodGhpcy5uYXZpZ2F0b3JNYW5hZ2VyLmdldERhdGFPYmplY3QoKSk7XG4gIH1cblxuICBwcml2YXRlIHNldERlc2NyaXB0aW9uKCkge1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSB0aGlzLm5hdmlnYXRvck1hbmFnZXIuZ2V0RGVzY3JpcHRpb24oKTtcbiAgICB0aGlzLmNoYW5nZS5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbn1cblxuIiwiPGRpdiBbY2xhc3NdPVwiJ3RsLW5hdmlnYXRvciAnKyBjb2xvclwiPlxuICA8ZGl2IHRhYmluZGV4PVwiLTFcIlxuICAgICAgIChjbGljayk9XCJvbkNsaWNrUHJldmlvdXMoKVwiXG4gICAgICAgW25nQ2xhc3NdPVwieyd1aS1idXR0b24nOiB0cnVlLCAndWktd2l0aC1ib3JkZXInOiB3aXRoQm9yZGVyfVwiXG4gICAgICAgW25nU3R5bGVdPVwie2hlaWdodDpoZWlnaHQsIGxpbmVIZWlnaHQ6IGhlaWdodH1cIj5cbiAgICA8dGwtaWNvbiBbbGliXT1cIidmYSdcIiBbc3R5bGVdPVwiJ2ZhcydcIiBbaWNvbl09XCInY2hldnJvbi1sZWZ0J1wiPjwvdGwtaWNvbj5cbiAgPC9kaXY+XG4gIDxkaXYgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgW25nQ2xhc3NdPVwieyd1aS1uYXZpZ2F0b3InOiB0cnVlLCd1aS13aXRoLWJvcmRlcic6IHdpdGhCb3JkZXJ9XCJcbiAgICAgICAoY2xpY2spPVwib25DbGlja05hdmlnYXRvcigpXCJcbiAgICAgICBbbmdTdHlsZV09XCJ7J21heC13aWR0aCc6d2lkdGgsIGhlaWdodDpoZWlnaHQsIGxpbmVIZWlnaHQ6IGhlaWdodCwgd2lkdGg6IHdpZHRofVwiPlxuICAgIHt7ZGVzY3JpcHRpb259fVxuICA8L2Rpdj5cbiAgPGRpdiB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAoY2xpY2spPVwib25DbGlja05leHQoKVwiXG4gICAgICAgW25nQ2xhc3NdPVwieyd1aS1idXR0b24nOiB0cnVlLCAndWktd2l0aC1ib3JkZXInOiB3aXRoQm9yZGVyfVwiXG4gICAgICAgW25nU3R5bGVdPVwie2hlaWdodDpoZWlnaHQsIGxpbmVIZWlnaHQ6IGhlaWdodH1cIj5cbiAgICA8dGwtaWNvbiBbbGliXT1cIidmYSdcIiBbc3R5bGVdPVwiJ2ZhcydcIiBbaWNvbl09XCInY2hldnJvbi1yaWdodCdcIj48L3RsLWljb24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=