UNPKG

dynamic-mat-table

Version:

dynamic-mat-table is an Angular component for presenting large and complex data with a lightning fast performance (at least 10x faster) and excellent level of control over the presentation.

113 lines 19.8 kB
import { Component, EventEmitter, Input, Output } from '@angular/core'; import { PageEvent } from '@angular/material/paginator'; export class PaginationComponent { constructor() { this.pageChange = new EventEmitter(); this.id = new Date().getTime(); this.pageIndex = 1; this.previousPageIndex = null; this.dir = 'rtl'; this.pageSize = 10; this.previousLabel = 'Previous'; this.nextLabel = 'Next'; this.firstLabel = 'Go first'; this.lastLabel = 'Go Last'; this.length = 0; this.pageSizeOptions = [5, 10, 50, 100]; } ngOnChanges(changes) { if (changes.pageIndex) { this.pageIndex = changes.pageIndex.currentValue + 1; } if (changes.pageSizeOptions && !changes.pageSizeOptions.currentValue.includes(this.pageSize) && changes.pageSizeOptions.currentValue.length > 0) { this.pageSize = changes.pageSizeOptions.currentValue[0]; } if (changes.pageIndex && this.pageCount < changes.pageIndex.currentValue) { this.pageIndex = this.pageCount; } } get pageCount() { var _a; if (this.pageSize === 0) { return 1; } return Math.ceil(((_a = this.length) !== null && _a !== void 0 ? _a : 1) / this.pageSize); } ngOnInit() { } goFirst() { this.pageIndex = 1; this.emit(); } goLast() { this.pageIndex = this.pageCount; this.emit(); } next() { if (this.pageIndex < this.pageCount) { this.pageIndex++; this.emit(); } } previous() { if (this.pageIndex > 1) { this.pageIndex--; this.emit(); } } goToPage(event) { if (event.target.value > 0 && event.target.value <= this.pageCount) { this.pageIndex = event.target.value; } else if (event.target.value > this.pageCount) { this.pageIndex = this.pageCount; } else if (event.target.value < 1) { this.pageIndex = 1; } this.emit(); } reset(event) { this.pageIndex = 1; this.emit(); } emit() { const data = new PageEvent(); data.pageIndex = (+this.pageIndex) - 1; data.length = +this.length; data.pageSize = +this.pageSize; data.previousPageIndex = +this.previousPageIndex; this.pageChange.emit(data); } } /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ PaginationComponent.decorators = [ { type: Component, args: [{ selector: 'pagination', template: "<div [dir]=\"dir\" class=\"paginator-root\">\r\n <div class=\"total-items\">\r\n <div class=\"total-items-box\">\r\n Total items:&nbsp;\r\n <span>\r\n {{length??0}}\r\n </span>\r\n </div>\r\n </div>\r\n &nbsp;\r\n &nbsp;\r\n <div class=\"paginator-root-arrowBox\">\r\n <div [matTooltip]=\"firstLabel\">\r\n <button (click)=\"goFirst()\" [class.disable]=\"pageIndex<=1\" [dir]=\"dir\"\r\n [disabled]=\"pageIndex===1\"\r\n class=\"paginator-root-goFirst\">\r\n </button>\r\n </div>\r\n\r\n <div [matTooltip]=\"previousLabel\">\r\n <button (click)=\"previous()\" [class.disable]=\"pageIndex<=1\" [dir]=\"dir\" [disabled]=\"pageIndex===1\"\r\n class=\"paginator-root-previous\">\r\n </button>\r\n </div>\r\n\r\n <div class=\"paginator-root-activePage\">\r\n <input (change)=\"goToPage($event)\" [max]=\"pageCount\" [ngModel]=\"pageIndex\" min=\"1\" type=\"number\">\r\n &nbsp;&nbsp;<span>/</span>&nbsp;&nbsp;\r\n <span>{{pageCount}}</span>\r\n </div>\r\n <div [matTooltip]=\"nextLabel\">\r\n <button (click)=\"next()\" [class.disable]=\"pageIndex>=pageCount\" [dir]=\"dir\" [disabled]=\"pageIndex===pageCount\"\r\n class=\"paginator-root-next\">\r\n </button>\r\n </div>\r\n <div [matTooltip]=\"lastLabel\">\r\n <button (click)=\"goLast()\" [class.disable]=\"pageIndex>=pageCount\" [dir]=\"dir\" [disabled]=\"pageIndex===pageCount\"\r\n class=\"paginator-root-goLast\">\r\n </button>\r\n </div>\r\n\r\n </div>\r\n <div *ngIf=\"pageSizeOptions.length>0\" [dir]=\"dir\" class=\"paginator-root-pageSize\">\r\n <select [(ngModel)]=\"pageSize\" (ngModelChange)=\"reset($event)\">\r\n <ng-container *ngFor=\"let item of pageSizeOptions\">\r\n <option [value]=\"item\">{{item}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n</div>\r\n", styles: [".paginator-root{display:flex;flex-direction:row;align-items:center;justify-content:center;flex-wrap:wrap;padding:0 10px}.paginator-root-arrowBox{display:flex;align-items:center;justify-content:center;flex-wrap:nowrap}@media only screen and (max-width: 500px){.paginator-root-arrowBox{width:100%}}@media only screen and (max-width: 300px){.paginator-root-arrowBox{flex-wrap:wrap}}.paginator-root-goFirst{cursor:pointer;background:transparent;border-color:transparent;display:flex;flex-direction:row;align-items:center;justify-content:center;width:1.8rem;height:1.8rem;padding:.2rem}@media only screen and (max-width: 300px){.paginator-root-goFirst{order:2}}.paginator-root-goFirst[dir=rtl]{transform:rotate(180deg)}.paginator-root-goFirst:after{content:\"\";position:absolute;border-bottom:.2rem solid rgba(0,0,0,.54);border-left:.2rem solid rgba(0,0,0,.54);width:8px;height:8px;transform:rotate(225deg);border-radius:.2rem;margin-right:14px;transform:rotate(45deg)}.paginator-root-goFirst:after:hover:before{border-color:#1890ff}.paginator-root-goFirst:after:hover:after{border-color:#1890ff}.paginator-root-goFirst:before{content:\"\";position:absolute;border-bottom:.2rem solid rgba(0,0,0,.54);border-left:.2rem solid rgba(0,0,0,.54);width:8px;height:8px;transform:rotate(225deg);border-radius:.2rem;transform:rotate(45deg)}.paginator-root-goFirst:before:hover:before{border-color:#1890ff}.paginator-root-goFirst:before:hover:after{border-color:#1890ff}.paginator-root-goFirst:hover:before{border-color:#1890ff}.paginator-root-goFirst:hover:after{border-color:#1890ff}.paginator-root-previous{cursor:pointer;background:transparent;border-color:transparent;display:flex;flex-direction:row;align-items:center;justify-content:center;width:1.8rem;height:1.8rem;padding:.2rem;margin-left:.5rem}@media only screen and (max-width: 300px){.paginator-root-previous{order:2}}.paginator-root-previous:after{content:\"\";position:absolute;border-bottom:.2rem solid rgba(0,0,0,.54);border-left:.2rem solid rgba(0,0,0,.54);width:8px;height:8px;transform:rotate(225deg);border-radius:.2rem;transform:rotate(45deg)}.paginator-root-previous:after:hover:before{border-color:#1890ff}.paginator-root-previous:after:hover:after{border-color:#1890ff}.paginator-root-previous:hover:after{border-color:#1890ff}.paginator-root-previous[dir=rtl]{transform:rotate(180deg)}.paginator-root-activePage{display:flex;flex-direction:row;align-items:center;justify-content:center;height:2rem;margin-left:1.5rem;margin-right:1.5rem;outline:1px solid transparent}.paginator-root-activePage input::-webkit-outer-spin-button,.paginator-root-activePage input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.paginator-root-activePage input[type=number]{-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield;text-align:center;height:26px;padding:0!important;box-sizing:border-box}.paginator-root-activePage input[type=number]:hover{border-color:#1890ff;border-radius:.2rem}.paginator-root-activePage input[type=number]:focus{outline:1px solid #1890ff;border-color:#1890ff;border-radius:.2rem}@media only screen and (max-width: 300px){.paginator-root-activePage{order:1;width:100%;margin:0}}.paginator-root-next{cursor:pointer;background:transparent;border-color:transparent;display:flex;flex-direction:row;align-items:center;justify-content:center;width:1.8rem;height:1.8rem;padding:.2rem;margin-right:.5rem}@media only screen and (max-width: 300px){.paginator-root-next{order:2}}.paginator-root-next:after{content:\"\";position:absolute;border-bottom:.2rem solid rgba(0,0,0,.54);border-left:.2rem solid rgba(0,0,0,.54);width:8px;height:8px;transform:rotate(225deg);border-radius:.2rem}.paginator-root-next:after:hover:before{border-color:#1890ff}.paginator-root-next:after:hover:after{border-color:#1890ff}.paginator-root-next:hover:after{border-color:#1890ff}.paginator-root-next[dir=rtl]{transform:rotate(180deg)}.paginator-root-goLast{cursor:pointer;background:transparent;border-color:transparent;display:flex;flex-direction:row;align-items:center;justify-content:center;width:1.8rem;height:1.8rem;padding:.2rem}.paginator-root-goLast:after{content:\"\";position:absolute;border-bottom:.2rem solid rgba(0,0,0,.54);border-left:.2rem solid rgba(0,0,0,.54);width:8px;height:8px;transform:rotate(225deg);border-radius:.2rem;margin-right:14px}.paginator-root-goLast:after:hover:before{border-color:#1890ff}.paginator-root-goLast:after:hover:after{border-color:#1890ff}.paginator-root-goLast:before{content:\"\";position:absolute;border-bottom:.2rem solid rgba(0,0,0,.54);border-left:.2rem solid rgba(0,0,0,.54);width:8px;height:8px;transform:rotate(225deg);border-radius:.2rem}.paginator-root-goLast:before:hover:before{border-color:#1890ff}.paginator-root-goLast:before:hover:after{border-color:#1890ff}@media only screen and (max-width: 300px){.paginator-root-goLast{order:2}}.paginator-root-goLast[dir=rtl]{transform:rotate(180deg)}.paginator-root-goLast:hover:before{border-color:#1890ff}.paginator-root-goLast:hover:after{border-color:#1890ff}.paginator-root-pageSize{display:flex;align-items:center;height:2rem}.paginator-root-pageSize[dir=rtl]{margin-right:1.5rem}@media only screen and (max-width: 500px){.paginator-root-pageSize[dir=rtl]{margin-right:0}}.paginator-root-pageSize[dir=ltr]{margin-left:1.5rem}@media only screen and (max-width: 500px){.paginator-root-pageSize[dir=ltr]{margin-left:0}}.paginator-root-pageSize select{padding-right:10px;padding-left:10px;border-radius:.2rem;height:26px}.paginator-root-pageSize select:hover{outline:1px solid #1890ff;border:1px solid #1890ff;border-radius:.2rem}.paginator-root-pageSize select:focus{outline:1px solid #1890ff;border:1px solid #1890ff;border-radius:.2rem}@media only screen and (max-width: 500px){.paginator-root-pageSize{margin-top:10px;order:3}.paginator-root-pageSize select{padding-right:2.4rem;padding-left:2.4rem}}@media only screen and (max-width: 300px){.paginator-root-pageSize select{width:100%}}.total-items{display:flex;justify-content:center;align-items:center;font-size:14px}@media only screen and (max-width: 900px){.total-items{width:100%;margin-top:10px}}.total-items-box{background:white;border:1px solid #767676FF;border-radius:2px;padding:2px 5px}.total-items-box span{font-weight:450}.disable{cursor:not-allowed}.disable *{border-color:#0000008a!important}\n"] },] } ]; /** * @type {function(): !Array<(null|{ * type: ?, * decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>), * })>} * @nocollapse */ PaginationComponent.ctorParameters = () => []; /** @type {!Object<string, !Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ PaginationComponent.propDecorators = { pageChange: [{ type: Output, args: ['page',] }], pageIndex: [{ type: Input }], previousPageIndex: [{ type: Input }], dir: [{ type: Input }], pageSize: [{ type: Input }], previousLabel: [{ type: Input }], nextLabel: [{ type: Input }], firstLabel: [{ type: Input }], lastLabel: [{ type: Input }], length: [{ type: Input }], pageSizeOptions: [{ type: Input }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9keW5hbWljLW1hdC10YWJsZS9zcmMvbGliL21vZHVsZXMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFFdkcsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBT3RELE1BQU0sT0FBTyxtQkFBbUI7SUFJOUI7UUFIZ0IsZUFBVSxHQUE0QixJQUFJLFlBQVksRUFBYSxDQUFDO1FBQ3BGLE9BQUUsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBbUJqQixjQUFTLEdBQVcsQ0FBQyxDQUFDO1FBQ3RCLHNCQUFpQixHQUFrQixJQUFJLENBQUM7UUFDeEMsUUFBRyxHQUFrQixLQUFLLENBQUM7UUFDM0IsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNkLGtCQUFhLEdBQUcsVUFBVSxDQUFDO1FBQzNCLGNBQVMsR0FBRyxNQUFNLENBQUM7UUFDbkIsZUFBVSxHQUFHLFVBQVUsQ0FBQztRQUN4QixjQUFTLEdBQUcsU0FBUyxDQUFDO1FBQ3RCLFdBQU0sR0FBRyxDQUFDLENBQUM7UUFDWCxvQkFBZSxHQUFhLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7SUF6QnRELENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO1NBQ3JEO1FBQ0QsSUFBSSxPQUFPLENBQUMsZUFBZSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQzFGLElBQUksT0FBTyxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNwRCxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3pEO1FBQ0QsSUFBSSxPQUFPLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUU7WUFDeEUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQztJQWVELElBQUksU0FBUzs7UUFDWCxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssQ0FBQyxFQUFFO1lBQ3ZCLE9BQU8sQ0FBQyxDQUFDO1NBQ1Y7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFBLElBQUksQ0FBQyxNQUFNLG1DQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBRTtJQUN4RCxDQUFDO0lBRUQsUUFBUTtJQUNSLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDaEMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQUk7UUFDRixJQUFJLElBQUksQ0FBQyxTQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNwQyxJQUFJLENBQUMsU0FBVSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ2I7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLFNBQVUsR0FBRyxDQUFDLEVBQUU7WUFDdkIsSUFBSSxDQUFDLFNBQVUsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNiO0lBQ0gsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFVO1FBQ2pCLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEUsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztTQUNyQzthQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUM5QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7U0FDakM7YUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRTtZQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztTQUNwQjtRQUNELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBVTtRQUNkLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFHRCxJQUFJO1FBQ0YsTUFBTSxJQUFJLEdBQWMsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQy9CLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUNqRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDOzs7O1lBaEdGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsWUFBWTtnQkFDdEIsbTZEQUEwQzs7YUFFM0M7Ozs7Ozs7Ozs7Ozt5QkFFRSxNQUFNLFNBQUMsTUFBTTt3QkFvQmIsS0FBSztnQ0FDTCxLQUFLO2tCQUNMLEtBQUs7dUJBQ0wsS0FBSzs0QkFDTCxLQUFLO3dCQUNMLEtBQUs7eUJBQ0wsS0FBSzt3QkFDTCxLQUFLO3FCQUNMLEtBQUs7OEJBQ0wsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtQYWdlQ29uZmlnTW9kZWx9IGZyb20gJy4vcGFnZS1jb25maWcubW9kZWwnO1xyXG5pbXBvcnQge1BhZ2VFdmVudH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncGFnaW5hdGlvbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3BhZ2luYXRpb24uY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGFnaW5hdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICBAT3V0cHV0KCdwYWdlJykgcGFnZUNoYW5nZTogRXZlbnRFbWl0dGVyPFBhZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFBhZ2VFdmVudD4oKTtcclxuICBpZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzLnBhZ2VJbmRleCkge1xyXG4gICAgICB0aGlzLnBhZ2VJbmRleCA9IGNoYW5nZXMucGFnZUluZGV4LmN1cnJlbnRWYWx1ZSArIDE7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlcy5wYWdlU2l6ZU9wdGlvbnMgJiYgIWNoYW5nZXMucGFnZVNpemVPcHRpb25zLmN1cnJlbnRWYWx1ZS5pbmNsdWRlcyh0aGlzLnBhZ2VTaXplXHJcbiAgICApICYmIGNoYW5nZXMucGFnZVNpemVPcHRpb25zLmN1cnJlbnRWYWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMucGFnZVNpemUgPSBjaGFuZ2VzLnBhZ2VTaXplT3B0aW9ucy5jdXJyZW50VmFsdWVbMF07XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlcy5wYWdlSW5kZXggJiYgdGhpcy5wYWdlQ291bnQgPCBjaGFuZ2VzLnBhZ2VJbmRleC5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgdGhpcy5wYWdlSW5kZXggPSB0aGlzLnBhZ2VDb3VudDtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBASW5wdXQoKSBwYWdlSW5kZXg6IG51bWJlciA9IDE7XHJcbiAgQElucHV0KCkgcHJldmlvdXNQYWdlSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIEBJbnB1dCgpIGRpcjogJ3J0bCcgfCAnbHRyJyA9ICdydGwnO1xyXG4gIEBJbnB1dCgpIHBhZ2VTaXplID0gMTA7XHJcbiAgQElucHV0KCkgcHJldmlvdXNMYWJlbCA9ICdQcmV2aW91cyc7XHJcbiAgQElucHV0KCkgbmV4dExhYmVsID0gJ05leHQnO1xyXG4gIEBJbnB1dCgpIGZpcnN0TGFiZWwgPSAnR28gZmlyc3QnO1xyXG4gIEBJbnB1dCgpIGxhc3RMYWJlbCA9ICdHbyBMYXN0JztcclxuICBASW5wdXQoKSBsZW5ndGggPSAwO1xyXG4gIEBJbnB1dCgpIHBhZ2VTaXplT3B0aW9uczogbnVtYmVyW10gPSBbNSwgMTAsIDUwLCAxMDBdO1xyXG5cclxuXHJcbiAgZ2V0IHBhZ2VDb3VudCgpIHtcclxuICAgIGlmICh0aGlzLnBhZ2VTaXplID09PSAwKSB7XHJcbiAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIE1hdGguY2VpbCgodGhpcy5sZW5ndGggPz8gMSkgLyB0aGlzLnBhZ2VTaXplKSA7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIGdvRmlyc3QoKSB7XHJcbiAgICB0aGlzLnBhZ2VJbmRleCA9IDE7XHJcbiAgICB0aGlzLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIGdvTGFzdCgpIHtcclxuICAgIHRoaXMucGFnZUluZGV4ID0gdGhpcy5wYWdlQ291bnQ7XHJcbiAgICB0aGlzLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIG5leHQoKSB7XHJcbiAgICBpZiAodGhpcy5wYWdlSW5kZXghIDwgdGhpcy5wYWdlQ291bnQpIHtcclxuICAgICAgdGhpcy5wYWdlSW5kZXghKys7XHJcbiAgICAgIHRoaXMuZW1pdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJldmlvdXMoKSB7XHJcbiAgICBpZiAodGhpcy5wYWdlSW5kZXghID4gMSkge1xyXG4gICAgICB0aGlzLnBhZ2VJbmRleCEtLTtcclxuICAgICAgdGhpcy5lbWl0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnb1RvUGFnZShldmVudDogYW55KSB7XHJcbiAgICBpZiAoZXZlbnQudGFyZ2V0LnZhbHVlID4gMCAmJiBldmVudC50YXJnZXQudmFsdWUgPD0gdGhpcy5wYWdlQ291bnQpIHtcclxuICAgICAgdGhpcy5wYWdlSW5kZXggPSBldmVudC50YXJnZXQudmFsdWU7XHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50LnRhcmdldC52YWx1ZSA+IHRoaXMucGFnZUNvdW50KSB7XHJcbiAgICAgIHRoaXMucGFnZUluZGV4ID0gdGhpcy5wYWdlQ291bnQ7XHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50LnRhcmdldC52YWx1ZSA8IDEpIHtcclxuICAgICAgdGhpcy5wYWdlSW5kZXggPSAxO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICByZXNldChldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnBhZ2VJbmRleCA9IDE7XHJcbiAgICB0aGlzLmVtaXQoKTtcclxuICB9XHJcblxyXG5cclxuICBlbWl0KCkge1xyXG4gICAgY29uc3QgZGF0YTogUGFnZUV2ZW50ID0gbmV3IFBhZ2VFdmVudCgpO1xyXG4gICAgZGF0YS5wYWdlSW5kZXggPSAoK3RoaXMucGFnZUluZGV4KSAtIDE7XHJcbiAgICBkYXRhLmxlbmd0aCA9ICt0aGlzLmxlbmd0aDtcclxuICAgIGRhdGEucGFnZVNpemUgPSArdGhpcy5wYWdlU2l6ZTtcclxuICAgIGRhdGEucHJldmlvdXNQYWdlSW5kZXggPSArdGhpcy5wcmV2aW91c1BhZ2VJbmRleDtcclxuICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KGRhdGEpO1xyXG4gIH1cclxufVxyXG4iXX0=