truly-ui
Version:
Web Components for Desktop Applications.
96 lines (94 loc) • 22.3 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, ViewChild, Output, EventEmitter, Input } from '@angular/core';
import { DatatableHelpersService } from '../../services/datatable-helpers.service';
import { TlDatatabaleColumnFilter } from '../column-filter/datatable-column-filter';
import { Subscription } from 'rxjs';
import * as i0 from "@angular/core";
import * as i1 from "../../services/datatable-helpers.service";
import * as i2 from "@angular/common";
import * as i3 from "../../directives/colgroup.directive";
import * as i4 from "../column-filter/datatable-column-filter";
import * as i5 from "../../directives/resizer.directive";
export class TlDatatableHeader {
constructor(helperService) {
this.helperService = helperService;
this.keydownFilter = new EventEmitter();
this.filterEvent = new EventEmitter();
this.sortEvent = new EventEmitter();
this.keydownFilterEvent = new EventEmitter();
this.subscription = new Subscription();
this.filderOrder = 1;
}
ngAfterViewInit() {
if (this.columnsFilter !== undefined) {
this.subscription.add(this.columnsFilter.filterEvent.subscribe((value) => {
this.filterEvent.emit(value);
}));
}
this.subscription.add(this.dt.getScrollingHorizontal().subscribe((leftValue) => {
this.datatableHeader.nativeElement.firstElementChild.scrollLeft = leftValue;
}));
}
onClick(column) {
if ((column.sortable === false) || (this.dt.allowSortColumn === false)) {
return;
}
this.filderOrder = this.filderOrder * -1;
if (this.sortField !== column.field) {
this.sortField = column.field;
this.filderOrder = 1;
}
this.sortEvent.emit({ sorts: { column: column.field, sortBy: this.filderOrder } });
}
getSortOrder(column) {
let order = 0;
if (this.sortField === column.field) {
order = this.filderOrder;
}
return order;
}
ngOnDestroy() {
this.subscription.unsubscribe();
}
}
/** @nocollapse */ TlDatatableHeader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TlDatatableHeader, deps: [{ token: i1.DatatableHelpersService }], target: i0.ɵɵFactoryTarget.Component });
/** @nocollapse */ TlDatatableHeader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TlDatatableHeader, selector: "tl-datatable-header", inputs: { dt: "dt" }, outputs: { keydownFilter: "keydownFilter", filterEvent: "filterEvent", sortEvent: "sortEvent", keydownFilterEvent: "keydownFilterEvent" }, providers: [DatatableHelpersService], viewQueries: [{ propertyName: "columnsFilter", first: true, predicate: TlDatatabaleColumnFilter, descendants: true }, { propertyName: "datatableHeader", first: true, predicate: ["datatableHeader"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"ui-datatable-header\" #datatableHeader [resizer]=\"dt.allowResize\" [datatable]=\"dt\" >\n <div class=\"ui-datatable-header-wrap\">\n\n <div class=\"ui-datatable-column-separator\"></div>\n\n <table #table class=\"ui-datatable-table\" [colgroup]=\"dt.columns\">\n <thead class=\"ui-datatable-table-head\">\n\n <tr class=\"ui-row ui-row-title\">\n <th *ngFor=\"let column of dt.columns;\"\n (click)=\"onClick(column)\"\n [class]=\"'ui-cel ' + helperService.getClassAlignment(column.alignment)\">\n\n <span>{{column.title}}</span>\n <div *ngIf=\"dt.allowSortColumn\" class=\"ui-sort-indicator -push-{{column.alignment}}\">\n <span\n [ngClass]=\"{\n 'ion ion-ios-arrow-round-up': getSortOrder(column) == 1,\n 'ion ion-ios-arrow-round-down': getSortOrder(column) == -1\n }\"\n >\n </span>\n </div>\n </th>\n </tr>\n <tr *ngIf=\"dt.allowFilterColumn\" class=\"ui-row ui-row-filter\"\n [tlColumnFilter]=\"dt.columns\"\n (keydownFilterEvent)=\"keydownFilterEvent.emit($event)\">\n ></tr>\n </thead>\n </table>\n </div>\n</div>\n", styles: [".ui-datatable-header{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;padding:0 17px 0 0;position:relative}.ui-datatable-header-wrap{overflow:hidden}.ui-datatable-column-separator{position:absolute;top:0;height:100%;left:0;width:4px;cursor:col-resize;z-index:9999}.ui-datatable-column-separator:hover{cursor:col-resize}.ui-datatable-table-head{font-size:1em}.ui-datatable-table-head>.ui-row{height:25px;margin:0}.ui-datatable-table-head>.ui-row-filter{height:32px}.ui-datatable-table-head>.ui-row .ui-sort-indicator{font-size:15px;width:5.65px;height:17px;font-weight:600;content:\" \"}.ui-datatable-table-head>.ui-row .ui-sort-indicator.-push-left{float:right}.ui-datatable-table-head>.ui-row .ui-sort-indicator.-push-center{float:right}.ui-datatable-table-head>.ui-row .ui-sort-indicator.-push-right{float:left}.ui-datatable-table-head>.ui-row .ui-cel{box-sizing:border-box;padding-left:5px;padding-right:5px;align-items:center;overflow:hidden;cursor:pointer}.ui-datatable-table-head>.ui-row .ui-cel.-textleft{text-align:left}.ui-datatable-table-head>.ui-row .ui-cel.-textright{text-align:right}.ui-datatable-table-head>.ui-row .ui-cel.-textcenter{text-align:center}.ui-datatable-table-head>.ui-row .ui-cel:last-child{border-right:none}.ui-datatable-table-head>.ui-row .ui-cel.ui-filter-cel{padding:5px}\n", ".tl-datatable-box{width:100%;box-sizing:border-box}.ui-datatable-table{font-family:RobotoRegular,Helvetica,Arial,sans-serif;text-align:center;width:100%;table-layout:fixed;border-spacing:0;border-collapse:collapse}.hidden{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: i3.TlColgroupDirective, selector: "[colgroup]", inputs: ["colgroup"] }, { kind: "component", type: i4.TlDatatabaleColumnFilter, selector: "[tlColumnFilter]", inputs: ["tlColumnFilter"], outputs: ["filterEvent", "keydownFilterEvent"] }, { kind: "directive", type: i5.TlResizerDirective, selector: "[resizer][datatable]", inputs: ["resizer", "datatable"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TlDatatableHeader, decorators: [{
type: Component,
args: [{ selector: 'tl-datatable-header', providers: [DatatableHelpersService], template: "<div class=\"ui-datatable-header\" #datatableHeader [resizer]=\"dt.allowResize\" [datatable]=\"dt\" >\n <div class=\"ui-datatable-header-wrap\">\n\n <div class=\"ui-datatable-column-separator\"></div>\n\n <table #table class=\"ui-datatable-table\" [colgroup]=\"dt.columns\">\n <thead class=\"ui-datatable-table-head\">\n\n <tr class=\"ui-row ui-row-title\">\n <th *ngFor=\"let column of dt.columns;\"\n (click)=\"onClick(column)\"\n [class]=\"'ui-cel ' + helperService.getClassAlignment(column.alignment)\">\n\n <span>{{column.title}}</span>\n <div *ngIf=\"dt.allowSortColumn\" class=\"ui-sort-indicator -push-{{column.alignment}}\">\n <span\n [ngClass]=\"{\n 'ion ion-ios-arrow-round-up': getSortOrder(column) == 1,\n 'ion ion-ios-arrow-round-down': getSortOrder(column) == -1\n }\"\n >\n </span>\n </div>\n </th>\n </tr>\n <tr *ngIf=\"dt.allowFilterColumn\" class=\"ui-row ui-row-filter\"\n [tlColumnFilter]=\"dt.columns\"\n (keydownFilterEvent)=\"keydownFilterEvent.emit($event)\">\n ></tr>\n </thead>\n </table>\n </div>\n</div>\n", styles: [".ui-datatable-header{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;padding:0 17px 0 0;position:relative}.ui-datatable-header-wrap{overflow:hidden}.ui-datatable-column-separator{position:absolute;top:0;height:100%;left:0;width:4px;cursor:col-resize;z-index:9999}.ui-datatable-column-separator:hover{cursor:col-resize}.ui-datatable-table-head{font-size:1em}.ui-datatable-table-head>.ui-row{height:25px;margin:0}.ui-datatable-table-head>.ui-row-filter{height:32px}.ui-datatable-table-head>.ui-row .ui-sort-indicator{font-size:15px;width:5.65px;height:17px;font-weight:600;content:\" \"}.ui-datatable-table-head>.ui-row .ui-sort-indicator.-push-left{float:right}.ui-datatable-table-head>.ui-row .ui-sort-indicator.-push-center{float:right}.ui-datatable-table-head>.ui-row .ui-sort-indicator.-push-right{float:left}.ui-datatable-table-head>.ui-row .ui-cel{box-sizing:border-box;padding-left:5px;padding-right:5px;align-items:center;overflow:hidden;cursor:pointer}.ui-datatable-table-head>.ui-row .ui-cel.-textleft{text-align:left}.ui-datatable-table-head>.ui-row .ui-cel.-textright{text-align:right}.ui-datatable-table-head>.ui-row .ui-cel.-textcenter{text-align:center}.ui-datatable-table-head>.ui-row .ui-cel:last-child{border-right:none}.ui-datatable-table-head>.ui-row .ui-cel.ui-filter-cel{padding:5px}\n", ".tl-datatable-box{width:100%;box-sizing:border-box}.ui-datatable-table{font-family:RobotoRegular,Helvetica,Arial,sans-serif;text-align:center;width:100%;table-layout:fixed;border-spacing:0;border-collapse:collapse}.hidden{display:none}\n"] }]
}], ctorParameters: function () { return [{ type: i1.DatatableHelpersService }]; }, propDecorators: { dt: [{
type: Input
}], columnsFilter: [{
type: ViewChild,
args: [TlDatatabaleColumnFilter, { static: false }]
}], datatableHeader: [{
type: ViewChild,
args: ['datatableHeader', { static: true }]
}], keydownFilter: [{
type: Output
}], filterEvent: [{
type: Output
}], sortEvent: [{
type: Output
}], keydownFilterEvent: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLWhlYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydWx5LXVpL3NyYy9jb21wb25lbnRzL2RhdGF0YWJsZS9wYXJ0cy9oZWFkZXIvZGF0YXRhYmxlLWhlYWRlci50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydWx5LXVpL3NyYy9jb21wb25lbnRzL2RhdGF0YWJsZS9wYXJ0cy9oZWFkZXIvZGF0YXRhYmxlLWhlYWRlci5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW9CRTtBQUVGLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFNBQVMsRUFBeUIsTUFBTSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDbkYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFcEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7OztBQVFwQyxNQUFNLE9BQU8saUJBQWlCO0lBdUIxQixZQUFvQixhQUFzQztRQUF0QyxrQkFBYSxHQUFiLGFBQWEsQ0FBeUI7UUFmaEQsa0JBQWEsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUUzRCxnQkFBVyxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBRXpELGNBQVMsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUV2RCx1QkFBa0IsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUVsRSxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFbEMsZ0JBQVcsR0FBRyxDQUFDLENBQUM7SUFLc0MsQ0FBQztJQUUvRCxlQUFlO1FBQ1gsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLFNBQVMsRUFBRTtZQUNwQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FDbkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFFLENBQUUsS0FBSyxFQUFHLEVBQUU7Z0JBQ3BELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9CLENBQUMsQ0FBQyxDQUNILENBQUM7U0FDSDtRQUVELElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUMzRSxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO1FBQzlFLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDO0lBRUQsT0FBTyxDQUFDLE1BQXlCO1FBQy9CLElBQUksQ0FBRSxNQUFNLENBQUMsUUFBUSxLQUFLLEtBQUssQ0FBRSxJQUFLLENBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEtBQUssS0FBSyxDQUFDLEVBQUU7WUFDMUUsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBTSxNQUFNLENBQUMsS0FBSyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztTQUN0QjtRQUVELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUMsS0FBSyxFQUFFLEVBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUMsRUFBQyxDQUFFLENBQUE7SUFDakYsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFNO1FBQ2pCLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNkLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFO1lBQ25DLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1NBQzFCO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbEMsQ0FBQzs7a0lBL0RRLGlCQUFpQjtzSEFBakIsaUJBQWlCLCtNQUZmLENBQUUsdUJBQXVCLENBQUUseUVBTTNCLHdCQUF3QixtS0N2Q3ZDLDJnREFpQ0E7NEZERWEsaUJBQWlCO2tCQU43QixTQUFTOytCQUNJLHFCQUFxQixhQUdwQixDQUFFLHVCQUF1QixDQUFFOzhHQUk3QixFQUFFO3NCQUFWLEtBQUs7Z0JBRWlELGFBQWE7c0JBQW5FLFNBQVM7dUJBQUMsd0JBQXdCLEVBQUUsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDO2dCQUVMLGVBQWU7c0JBQTdELFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDO2dCQUVsQyxhQUFhO3NCQUF0QixNQUFNO2dCQUVHLFdBQVc7c0JBQXBCLE1BQU07Z0JBRUcsU0FBUztzQkFBbEIsTUFBTTtnQkFFRyxrQkFBa0I7c0JBQTNCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICAgIE1JVCBMaWNlbnNlXG5cbiAgICBDb3B5cmlnaHQgKGMpIDIwMTkgVGVtYWluZm8gU29mdHdhcmVcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAgICBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gICAgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICAgIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAgICBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAgICBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuICAgIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICAgIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICAgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICAgIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICAgIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gICAgU09GVFdBUkUuXG4qL1xuXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgT25EZXN0cm95LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgVGxEYXRhdGFibGUgfSBmcm9tICcuLi8uLi9kYXRhdGFibGUnO1xuaW1wb3J0IHsgRGF0YXRhYmxlSGVscGVyc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhdGFibGUtaGVscGVycy5zZXJ2aWNlJztcbmltcG9ydCB7IFRsRGF0YXRhYmFsZUNvbHVtbkZpbHRlciB9IGZyb20gJy4uL2NvbHVtbi1maWx0ZXIvZGF0YXRhYmxlLWNvbHVtbi1maWx0ZXInO1xuaW1wb3J0IHsgVGxEYXRhdGFibGVDb2x1bW4gfSBmcm9tICcuLi9jb2x1bW4vZGF0YXRhYmxlLWNvbHVtbic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCgge1xuICAgIHNlbGVjdG9yOiAndGwtZGF0YXRhYmxlLWhlYWRlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RhdGF0YWJsZS1oZWFkZXIuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbICcuL2RhdGF0YWJsZS1oZWFkZXIuc2NzcycsICcuLi8uLi9kYXRhdGFibGUuc2NzcycgXSxcbiAgICBwcm92aWRlcnM6IFsgRGF0YXRhYmxlSGVscGVyc1NlcnZpY2UgXVxufSApXG5leHBvcnQgY2xhc3MgVGxEYXRhdGFibGVIZWFkZXIgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgQElucHV0KCkgZHQ6IFRsRGF0YXRhYmxlO1xuXG4gICAgQFZpZXdDaGlsZChUbERhdGF0YWJhbGVDb2x1bW5GaWx0ZXIsIHtzdGF0aWM6IGZhbHNlfSApIGNvbHVtbnNGaWx0ZXI7XG5cbiAgICBAVmlld0NoaWxkKCdkYXRhdGFibGVIZWFkZXInLCB7c3RhdGljOiB0cnVlfSApIGRhdGF0YWJsZUhlYWRlcjogRWxlbWVudFJlZjtcblxuICAgIEBPdXRwdXQoKSBrZXlkb3duRmlsdGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgQE91dHB1dCgpIGZpbHRlckV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgQE91dHB1dCgpIHNvcnRFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIEBPdXRwdXQoKSBrZXlkb3duRmlsdGVyRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIHByaXZhdGUgZmlsZGVyT3JkZXIgPSAxO1xuXG4gICAgcHJpdmF0ZSBzb3J0RmllbGQ7XG5cblxuICAgIGNvbnN0cnVjdG9yKCBwdWJsaWMgaGVscGVyU2VydmljZTogRGF0YXRhYmxlSGVscGVyc1NlcnZpY2UgKSB7fVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW5zRmlsdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgICAgICB0aGlzLmNvbHVtbnNGaWx0ZXIuZmlsdGVyRXZlbnQuc3Vic2NyaWJlKCAoIHZhbHVlICkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmZpbHRlckV2ZW50LmVtaXQodmFsdWUpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKHRoaXMuZHQuZ2V0U2Nyb2xsaW5nSG9yaXpvbnRhbCgpLnN1YnNjcmliZSgobGVmdFZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRhdGF0YWJsZUhlYWRlci5uYXRpdmVFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkLnNjcm9sbExlZnQgPSBsZWZ0VmFsdWU7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBvbkNsaWNrKGNvbHVtbjogVGxEYXRhdGFibGVDb2x1bW4pIHtcbiAgICAgIGlmICgoIGNvbHVtbi5zb3J0YWJsZSA9PT0gZmFsc2UgKSAgfHwgKCB0aGlzLmR0LmFsbG93U29ydENvbHVtbiA9PT0gZmFsc2UpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmlsZGVyT3JkZXIgPSB0aGlzLmZpbGRlck9yZGVyICogLTE7XG4gICAgICBpZiAodGhpcy5zb3J0RmllbGQgIT09ICBjb2x1bW4uZmllbGQpIHtcbiAgICAgICAgdGhpcy5zb3J0RmllbGQgPSBjb2x1bW4uZmllbGQ7XG4gICAgICAgIHRoaXMuZmlsZGVyT3JkZXIgPSAxO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNvcnRFdmVudC5lbWl0KHtzb3J0czoge2NvbHVtbjogY29sdW1uLmZpZWxkLCBzb3J0Qnk6IHRoaXMuZmlsZGVyT3JkZXJ9fSApXG4gICAgfVxuXG4gICAgZ2V0U29ydE9yZGVyKGNvbHVtbikge1xuICAgICAgbGV0IG9yZGVyID0gMDtcbiAgICAgIGlmICh0aGlzLnNvcnRGaWVsZCA9PT0gY29sdW1uLmZpZWxkKSB7XG4gICAgICAgIG9yZGVyID0gdGhpcy5maWxkZXJPcmRlcjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvcmRlcjtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwidWktZGF0YXRhYmxlLWhlYWRlclwiICNkYXRhdGFibGVIZWFkZXIgW3Jlc2l6ZXJdPVwiZHQuYWxsb3dSZXNpemVcIiBbZGF0YXRhYmxlXT1cImR0XCIgPlxuICAgIDxkaXYgY2xhc3M9XCJ1aS1kYXRhdGFibGUtaGVhZGVyLXdyYXBcIj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwidWktZGF0YXRhYmxlLWNvbHVtbi1zZXBhcmF0b3JcIj48L2Rpdj5cblxuICAgICAgICA8dGFibGUgI3RhYmxlIGNsYXNzPVwidWktZGF0YXRhYmxlLXRhYmxlXCIgW2NvbGdyb3VwXT1cImR0LmNvbHVtbnNcIj5cbiAgICAgICAgICAgIDx0aGVhZCBjbGFzcz1cInVpLWRhdGF0YWJsZS10YWJsZS1oZWFkXCI+XG5cbiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJ1aS1yb3cgdWktcm93LXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGR0LmNvbHVtbnM7XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrKGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIid1aS1jZWwgJyArIGhlbHBlclNlcnZpY2UuZ2V0Q2xhc3NBbGlnbm1lbnQoY29sdW1uLmFsaWdubWVudClcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tjb2x1bW4udGl0bGV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJkdC5hbGxvd1NvcnRDb2x1bW5cIiBjbGFzcz1cInVpLXNvcnQtaW5kaWNhdG9yIC1wdXNoLXt7Y29sdW1uLmFsaWdubWVudH19XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lvbiBpb24taW9zLWFycm93LXJvdW5kLXVwJzogZ2V0U29ydE9yZGVyKGNvbHVtbikgPT0gMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lvbiBpb24taW9zLWFycm93LXJvdW5kLWRvd24nOiBnZXRTb3J0T3JkZXIoY29sdW1uKSA9PSAtMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDx0ciAqbmdJZj1cImR0LmFsbG93RmlsdGVyQ29sdW1uXCIgY2xhc3M9XCJ1aS1yb3cgdWktcm93LWZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgIFt0bENvbHVtbkZpbHRlcl09XCJkdC5jb2x1bW5zXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd25GaWx0ZXJFdmVudCk9XCJrZXlkb3duRmlsdGVyRXZlbnQuZW1pdCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPjwvdHI+XG4gICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8L3RhYmxlPlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=