@true-directive/grid
Version:
Angular Data Grid from Yopsilon.
166 lines • 20 kB
JavaScript
import * as tslib_1 from "tslib";
/**
* Copyright (c) 2018-2019 Aleksey Melnikov, True Directive Company.
* @link https://truedirective.com/
* @license MIT
*/
import { Component, Input, Output, ElementRef, ViewChild, EventEmitter, Inject } from '@angular/core';
import { BaseComponent } from './base.component';
import { GridStateService } from './grid-state.service';
import { SortType } from '@true-directive/base';
import { Column } from '@true-directive/base';
var GridHeaderCellComponent = /** @class */ (function (_super) {
tslib_1.__extends(GridHeaderCellComponent, _super);
function GridHeaderCellComponent(state, elementRef) {
var _this = _super.call(this) || this;
_this.state = state;
_this.elementRef = elementRef;
_this.toggleCheckColumn = new EventEmitter();
_this.captionMouseDown = new EventEmitter();
_this.captionMouseUp = new EventEmitter();
_this.captionTouchStart = new EventEmitter();
return _this;
}
// Иконка фильтра
// Если фильтр включен, то иконка кнопки показывается всегда и подсвечивается
GridHeaderCellComponent.prototype.isFiltered = function () {
return this.state.dataSource.getFilter(this.column) != null;
};
GridHeaderCellComponent.prototype.setState = function (s) {
if (s === 'btn-visible')
this.caption.nativeElement.classList.toggle('true-grid-btn-visible', true);
};
GridHeaderCellComponent.prototype.removeState = function (s) {
if (s === 'btn-visible')
this.caption.nativeElement.classList.toggle('true-grid-btn-visible', false);
};
GridHeaderCellComponent.prototype.btnIconClass = function () {
var classes = '';
if (this.isFiltered()) {
classes += this.state.sta.filterBtnIconClass_active;
}
else {
classes += this.state.sta.filterBtnIconClass;
}
return classes;
};
// Отсортирована ли колонка
GridHeaderCellComponent.prototype.isSorted = function (col) {
return this.sorted !== null;
};
Object.defineProperty(GridHeaderCellComponent.prototype, "sorted", {
get: function () {
var res = this.state.dataSource.sortedByField(this.column.fieldName);
return !res ? null : res.sortType;
},
enumerable: true,
configurable: true
});
Object.defineProperty(GridHeaderCellComponent.prototype, "sortedUp", {
get: function () {
return this.sorted === SortType.ASC;
},
enumerable: true,
configurable: true
});
Object.defineProperty(GridHeaderCellComponent.prototype, "sortedDown", {
get: function () {
return this.sorted === SortType.DESC;
},
enumerable: true,
configurable: true
});
// Если отсортирован, то как?..
GridHeaderCellComponent.prototype.sortIndicatorClass = function () {
if (this.sortedUp) {
return this.state.sta.sortedUpIconClass;
}
if (this.sortedDown) {
return this.state.sta.sortedDownIconClass;
}
return '';
};
GridHeaderCellComponent.prototype.toggleCheck = function (e) {
this.toggleCheckColumn.emit(e);
e.preventDefault();
};
GridHeaderCellComponent.prototype.headerMouseDown = function (e) {
e.stopPropagation();
};
GridHeaderCellComponent.prototype.mouseDown = function (e) {
this.captionMouseDown.emit(e);
};
GridHeaderCellComponent.prototype.mouseUp = function (e) {
this.captionMouseUp.emit(e);
};
GridHeaderCellComponent.prototype.touchStart = function (e) {
this.captionTouchStart.emit(e);
};
GridHeaderCellComponent.prototype.contextMenu = function (e) {
this.state.headerContextMenu(e, this.column);
};
// Клик по кнопке фильтра
GridHeaderCellComponent.prototype.btnTouch = function (e) {
this.state.showFilter(e, this.column);
e.stopPropagation();
if (e.cancelable) {
e.preventDefault();
}
};
// Клик по кнопке фильтра
GridHeaderCellComponent.prototype.btnClick = function (e) {
this.state.showFilter(e, this.column);
};
// Прерываем MouseDown, чтобы не произошло сортировки
GridHeaderCellComponent.prototype.btnMouseDown = function (e) {
e.stopPropagation();
e.preventDefault();
};
GridHeaderCellComponent.prototype.ngAfterContentInit = function () {
this.addTouchListeners(this.caption.nativeElement);
};
tslib_1.__decorate([
Input('column'),
tslib_1.__metadata("design:type", Column)
], GridHeaderCellComponent.prototype, "column", void 0);
tslib_1.__decorate([
Output('toggleCheckColumn'),
tslib_1.__metadata("design:type", Object)
], GridHeaderCellComponent.prototype, "toggleCheckColumn", void 0);
tslib_1.__decorate([
Output('captionMouseDown'),
tslib_1.__metadata("design:type", Object)
], GridHeaderCellComponent.prototype, "captionMouseDown", void 0);
tslib_1.__decorate([
Output('captionMouseUp'),
tslib_1.__metadata("design:type", Object)
], GridHeaderCellComponent.prototype, "captionMouseUp", void 0);
tslib_1.__decorate([
Output('captionTouchStart'),
tslib_1.__metadata("design:type", Object)
], GridHeaderCellComponent.prototype, "captionTouchStart", void 0);
tslib_1.__decorate([
ViewChild('caption', { static: true }),
tslib_1.__metadata("design:type", Object)
], GridHeaderCellComponent.prototype, "caption", void 0);
tslib_1.__decorate([
ViewChild('btn', { static: true }),
tslib_1.__metadata("design:type", Object)
], GridHeaderCellComponent.prototype, "btn", void 0);
GridHeaderCellComponent = tslib_1.__decorate([
Component({
selector: 'true-grid-header-cell',
template: "<div #caption\r\n class=\"true-header-cell__caption\"\r\n [class.true-header-cell__checkbox]=\"column.isCheckbox\"\r\n [class.true-header-cell__filtered]=\"isFiltered()\"\r\n (contextmenu)=\"contextMenu($event)\"\r\n (touchstart)=\"touchStart($event)\"\r\n (mousedown)=\"mouseDown($event)\"\r\n (mouseup)=\"mouseUp($event)\">\r\n\r\n <div *ngIf=\"column.isCheckbox\"\r\n [ngClass]=\"state.settings.headerCheckboxClass(column.isChecked)\"\r\n (click)=\"toggleCheck($event)\"></div>\r\n <div *ngIf=\"isSorted(column)\"\r\n class=\"true-header-cell__sort-indicator\" [ngClass]=\"sortIndicatorClass()\"></div>\r\n <div *ngIf=\"!column.isCheckbox\"\r\n [class.true-header-cell__txt_nowrap]=\"!state.settings.headerWordWrap\"\r\n class=\"true-header-cell__txt\">\r\n {{column.caption | trueTranslate}}\r\n </div>\r\n\r\n <div #btn *ngIf=\"!column.isCheckbox && state.settings.allowFilter && (column.allowFilter || isFiltered())\"\r\n class=\"true-grid-btn\"\r\n (click)=\"btnClick($event)\"\r\n (touchstart)=\"btnTouch($event)\"\r\n (mousedown)=\"btnMouseDown($event)\">\r\n <span [ngClass]=\"btnIconClass()\"></span>\r\n </div>\r\n</div>\r\n",
host: {
'class': 'true-header-cell'
},
styles: [":host{cursor:default;display:block;height:100%}.true-header-cell__caption{height:100%;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;-webkit-box-pack:center;justify-content:center;-webkit-box-align:stretch;align-items:stretch;overflow-x:hidden}.true-header-cell__caption.true-header-cell__checkbox{-webkit-box-align:center;align-items:center;justify-content:space-around}.true-header-cell__caption .true-header-cell__sort-indicator{text-align:center;-ms-grid-row-align:center;align-self:center}.true-header-cell__caption .true-header-cell__txt{-ms-grid-row-align:center;align-self:center;overflow-x:hidden;-webkit-box-flex:1;flex-grow:1;overflow-y:hidden}.true-header-cell__caption .true-header-cell__txt_nowrap{white-space:nowrap;text-overflow:ellipsis}.true-grid-btn-visible .true-grid-btn,.true-header-cell__caption:hover .true-grid-btn{opacity:.2;visibility:visible}.true-header-cell__filtered .true-grid-btn{visibility:visible!important;opacity:1!important}"]
}),
tslib_1.__param(0, Inject('gridState')),
tslib_1.__metadata("design:paramtypes", [GridStateService,
ElementRef])
], GridHeaderCellComponent);
return GridHeaderCellComponent;
}(BaseComponent));
export { GridHeaderCellComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1oZWFkZXItY2VsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdHJ1ZS1kaXJlY3RpdmUvZ3JpZC8iLCJzb3VyY2VzIjpbInNyYy9ncmlkLWhlYWRlci1jZWxsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7RUFJRTtBQUNGLE9BQU8sRUFBWSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUN6RCxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXJELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBVTlDO0lBQTZDLG1EQUFhO0lBa0l4RCxpQ0FDOEIsS0FBdUIsRUFDNUMsVUFBc0I7UUFGL0IsWUFHSSxpQkFBTyxTQUNSO1FBSDJCLFdBQUssR0FBTCxLQUFLLENBQWtCO1FBQzVDLGdCQUFVLEdBQVYsVUFBVSxDQUFZO1FBOUgvQix1QkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRzVDLHNCQUFnQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFHM0Msb0JBQWMsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBR3pDLHVCQUFpQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7O0lBdUgxQyxDQUFDO0lBL0dILGlCQUFpQjtJQUNqQiw2RUFBNkU7SUFDN0UsNENBQVUsR0FBVjtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDOUQsQ0FBQztJQUVNLDBDQUFRLEdBQWYs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Q3hCO0lBckJFLHVCQUF1QjtRQVJuQyxTQUFTLENBQUM7WUFDVCxRQUFRLEVBQUUsdUJBQXVCO1lBQ2pDLDRyQ0FBZ0Q7WUFDaEQsSUFBSSxFQUFFO2dCQUNKLE9BQU8sRUFBRSxrQkFBa0I7YUFDNUI7O1NBRUYsQ0FBQztRQW9JRyxtQkFBQSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUE7aURBQWUsZ0JBQWdCO1lBQ2hDLFVBQVU7T0FwSXBCLHVCQUF1QixDQXVJbkM7SUFBRCw4QkFBQztDQUFBLEFBdklELENBQTZDLGFBQWEsR0F1SXpEO1NBdklZLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSBBbGVrc2V5IE1lbG5pa292LCBUcnVlIERpcmVjdGl2ZSBDb21wYW55LlxyXG4gKiBAbGluayBodHRwczovL3RydWVkaXJlY3RpdmUuY29tL1xyXG4gKiBAbGljZW5zZSBNSVRcclxuKi9cclxuaW1wb3J0IHsgTmdNb2R1bGUsIENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRWxlbWVudFJlZiwgVmlld0NoaWxkLFxyXG4gICAgICAgICBFdmVudEVtaXR0ZXIsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCB9IGZyb20gJy4vYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBHcmlkU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi9ncmlkLXN0YXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb2x1bW5UeXBlLCBHcmlkUGFydCB9IGZyb20gJ0B0cnVlLWRpcmVjdGl2ZS9iYXNlJztcclxuaW1wb3J0IHsgU29ydFR5cGUgfSBmcm9tICdAdHJ1ZS1kaXJlY3RpdmUvYmFzZSc7XHJcbmltcG9ydCB7IENvbHVtbiB9IGZyb20gJ0B0cnVlLWRpcmVjdGl2ZS9iYXNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndHJ1ZS1ncmlkLWhlYWRlci1jZWxsJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZ3JpZC1oZWFkZXItY2VsbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgaG9zdDoge1xyXG4gICAgJ2NsYXNzJzogJ3RydWUtaGVhZGVyLWNlbGwnXHJcbiAgfSxcclxuICBzdHlsZVVybHM6IFsnLi9zdHlsZXMvZ3JpZC1oZWFkZXItY2VsbC5iZWhhdmlvci5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEdyaWRIZWFkZXJDZWxsQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XHJcblxyXG4gIEBJbnB1dCgnY29sdW1uJylcclxuICBwdWJsaWMgY29sdW1uOiBDb2x1bW47XHJcblxyXG4gIEBPdXRwdXQoJ3RvZ2dsZUNoZWNrQ29sdW1uJylcclxuICB0b2dnbGVDaGVja0NvbHVtbiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAT3V0cHV0KCdjYXB0aW9uTW91c2VEb3duJylcclxuICBjYXB0aW9uTW91c2VEb3duID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBPdXRwdXQoJ2NhcHRpb25Nb3VzZVVwJylcclxuICBjYXB0aW9uTW91c2VVcCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAT3V0cHV0KCdjYXB0aW9uVG91Y2hTdGFydCcpXHJcbiAgY2FwdGlvblRvdWNoU3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnY2FwdGlvbicsIHtzdGF0aWM6IHRydWV9KVxyXG4gIGNhcHRpb246IGFueTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnYnRuJywge3N0YXRpYzogdHJ1ZX0pXHJcbiAgYnRuOiBhbnk7XHJcblxyXG4gIC8vINCY0LrQvtC90LrQsCDRhNC40LvRjNGC0YDQsFxyXG4gIC8vINCV0YHQu9C4INGE0LjQu9GM0YLRgCDQstC60LvRjtGH0LXQvSwg0YLQviDQuNC60L7QvdC60LAg0LrQvdC+0L/QutC4INC/0L7QutCw0LfRi9Cy0LDQtdGC0YHRjyDQstGB0LXQs9C00LAg0Lgg0L/QvtC00YHQstC10YfQuNCy0LDQtdGC0YHRj1xyXG4gIGlzRmlsdGVyZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5kYXRhU291cmNlLmdldEZpbHRlcih0aGlzLmNvbHVtbikgIT0gbnVsbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRTdGF0ZShzOiBzdHJpbmcpIHtcclxuICAgIGlmIChzID09PSAnYnRuLXZpc2libGUnKVxyXG4gICAgICB0aGlzLmNhcHRpb24ubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKCd0cnVlLWdyaWQtYnRuLXZpc2libGUnLCB0cnVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVTdGF0ZShzOiBzdHJpbmcpIHtcclxuICAgIGlmIChzID09PSAnYnRuLXZpc2libGUnKVxyXG4gICAgICB0aGlzLmNhcHRpb24ubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKCd0cnVlLWdyaWQtYnRuLXZpc2libGUnLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBidG5JY29uQ2xhc3MoKSB7XHJcbiAgICBsZXQgY2xhc3NlcyA9ICcnO1xyXG4gICAgaWYgKHRoaXMuaXNGaWx0ZXJlZCgpKSB7XHJcbiAgICAgIGNsYXNzZXMgKz0gdGhpcy5zdGF0ZS5zdGEuZmlsdGVyQnRuSWNvbkNsYXNzX2FjdGl2ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNsYXNzZXMgKz0gdGhpcy5zdGF0ZS5zdGEuZmlsdGVyQnRuSWNvbkNsYXNzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNsYXNzZXM7XHJcbiAgfVxyXG5cclxuICAvLyDQntGC0YHQvtGA0YLQuNGA0L7QstCw0L3QsCDQu9C4INC60L7Qu9C+0L3QutCwXHJcbiAgcHVibGljIGlzU29ydGVkKGNvbDogQ29sdW1uKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zb3J0ZWQgIT09IG51bGw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHNvcnRlZCgpOiBTb3J0VHlwZSB7XHJcbiAgICBjb25zdCByZXMgPSB0aGlzLnN0YXRlLmRhdGFTb3VyY2Uuc29ydGVkQnlGaWVsZCh0aGlzLmNvbHVtbi5maWVsZE5hbWUpO1xyXG4gICAgcmV0dXJuICFyZXMgPyBudWxsIDogcmVzLnNvcnRUeXBlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBzb3J0ZWRVcCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnNvcnRlZCA9PT0gU29ydFR5cGUuQVNDO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBzb3J0ZWREb3duKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc29ydGVkID09PSBTb3J0VHlwZS5ERVNDO1xyXG4gIH1cclxuXHJcbiAgLy8g0JXRgdC70Lgg0L7RgtGB0L7RgNGC0LjRgNC+0LLQsNC9LCDRgtC+INC60LDQuj8uLlxyXG4gIHNvcnRJbmRpY2F0b3JDbGFzcygpIHtcclxuXHJcbiAgICBpZiAodGhpcy5zb3J0ZWRVcCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zdGF0ZS5zdGEuc29ydGVkVXBJY29uQ2xhc3M7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc29ydGVkRG93bikge1xyXG4gICAgICByZXR1cm4gdGhpcy5zdGF0ZS5zdGEuc29ydGVkRG93bkljb25DbGFzcztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVDaGVjayhlOiBhbnkpIHtcclxuICAgIHRoaXMudG9nZ2xlQ2hlY2tDb2x1bW4uZW1pdChlKTtcclxuICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcblxyXG4gIGhlYWRlck1vdXNlRG93bihlOiBhbnkpIHtcclxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBtb3VzZURvd24oZTogYW55KSB7XHJcbiAgICB0aGlzLmNhcHRpb25Nb3VzZURvd24uZW1pdChlKTtcclxuICB9XHJcblxyXG4gIG1vdXNlVXAoZTogYW55KSB7XHJcbiAgICB0aGlzLmNhcHRpb25Nb3VzZVVwLmVtaXQoZSk7XHJcbiAgfVxyXG5cclxuICB0b3VjaFN0YXJ0KGU6IGFueSkge1xyXG4gICAgdGhpcy5jYXB0aW9uVG91Y2hTdGFydC5lbWl0KGUpO1xyXG4gIH1cclxuXHJcbiAgY29udGV4dE1lbnUoZTogYW55KSB7XHJcbiAgICB0aGlzLnN0YXRlLmhlYWRlckNvbnRleHRNZW51KGUsIHRoaXMuY29sdW1uKTtcclxuICB9XHJcblxyXG4gIC8vINCa0LvQuNC6INC/0L4g0LrQvdC+0L/QutC1INGE0LjQu9GM0YLRgNCwXHJcbiAgYnRuVG91Y2goZTogYW55KSB7XHJcbiAgICB0aGlzLnN0YXRlLnNob3dGaWx0ZXIoZSwgdGhpcy5jb2x1bW4pO1xyXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGlmIChlLmNhbmNlbGFibGUpIHtcclxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g0JrQu9C40Log0L/QviDQutC90L7Qv9C60LUg0YTQuNC70YzRgtGA0LBcclxuICBidG5DbGljayhlOiBhbnkpIHtcclxuICAgIHRoaXMuc3RhdGUuc2hvd0ZpbHRlcihlLCB0aGlzLmNvbHVtbik7XHJcbiAgfVxyXG5cclxuICAvLyDQn9GA0LXRgNGL0LLQsNC10LwgTW91c2VEb3duLCDRh9GC0L7QsdGLINC90LUg0L/RgNC+0LjQt9C+0YjQu9C+INGB0L7RgNGC0LjRgNC+0LLQutC4XHJcbiAgYnRuTW91c2VEb3duKGU6IGFueSkge1xyXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcclxuICAgIHRoaXMuYWRkVG91Y2hMaXN0ZW5lcnModGhpcy5jYXB0aW9uLm5hdGl2ZUVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KCdncmlkU3RhdGUnKSBwdWJsaWMgc3RhdGU6IEdyaWRTdGF0ZVNlcnZpY2UsXHJcbiAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xyXG4gICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==