UNPKG

@indice/ng-components

Version:

Indice common components for Angular v12

130 lines 22 kB
import { Component, EventEmitter, Input, Output } from '@angular/core'; import { Icons } from '../../icons'; import { MenuOption } from '../../types'; import * as i0 from "@angular/core"; import * as i1 from "@angular/router"; import * as i2 from "@angular/common"; import * as i3 from "../drop-down-menu/drop-down-menu.component"; export class PagerComponent { constructor(router) { this.router = router; // BUSY STATE this.busy = false; // PAGING this.count = null; this.page = 1; // tslint:disable-next-line:no-input-rename this.pageSize = 20; // tslint:disable-next-line:no-input-rename this.pageSizeOptions = [ new MenuOption('10', 10), new MenuOption('20', 20), new MenuOption('30', 30), new MenuOption('50', 50), new MenuOption('100', 100) ]; this.pages = []; this.pageChanged = new EventEmitter(); this.pageSizeChanged = new EventEmitter(); this.canPreviousPage = false; this.canNextPage = false; // SORTING // tslint:disable-next-line:no-input-rename this.sortOptions = []; // tslint:disable-next-line:no-input-rename this.sort = null; // tslint:disable-next-line:no-input-rename this.sortdir = 'desc'; this.sortChanged = new EventEmitter(); this.sortdirChanged = new EventEmitter(); this.sortdirIcon = Icons.SortDesc; } ngOnChanges(changes) { this.calcPages(); } ngOnInit() { } calcPages() { this.pages = []; if (this.count && this.count > 0) { const pageCount = this.count / this.pageSize; for (let i = 0; i < pageCount; i++) { this.pages.push(new MenuOption(i + 1 + '', i + 1)); } } this.canPreviousPage = this.page > 1; this.canNextPage = this.page < this.pages.length; } nextPage() { const next = this.page + 1; this.gotoPage(next); } previousPage() { const previous = this.page - 1; this.gotoPage(previous); } gotoPage(page) { this.page = page; this.pageChanged.emit(page); this.calcPages(); } pageSizeOptionChanged(pageSize) { this.pageSizeChanged.emit(pageSize); this.calcPages(); } pageOptionChanged(page) { this.pageChanged.emit(page); this.calcPages(); } sortOptionChanged(sort) { this.sortChanged.emit(sort); } toggleSortdir() { let sortdir = 'desc'; if (this.sortdir === 'desc') { sortdir = 'asc'; this.sortdirIcon = Icons.SortAsc; } else { sortdir = 'desc'; this.sortdirIcon = Icons.SortDesc; } this.sortdirChanged.emit(sortdir); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: PagerComponent, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.6", type: PagerComponent, selector: "lib-pager", inputs: { busy: "busy", count: "count", page: "page", pageSize: ["page-size", "pageSize"], pageSizeOptions: ["page-size-options", "pageSizeOptions"], sortOptions: ["sort-options", "sortOptions"], sort: "sort", sortdir: ["sort-dir", "sortdir"] }, outputs: { pageChanged: "pageChanged", pageSizeChanged: "pageSizeChanged", sortChanged: "sortChanged", sortdirChanged: "sortdirChanged" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"pager-container\">\r\n <div class=\"pager-container-near\">\r\n <ng-content select=\"[pager-near-content]\"></ng-content>\r\n </div>\r\n <div class=\"pager-container-far\">\r\n <div class=\"inline-flex\" *ngIf=\"sortOptions && sortOptions.length > 0\">\r\n <lib-drop-down-menu [options]=\"sortOptions\" [selected]=\"sort\" (selectedChanged)=\"sortOptionChanged($event)\"></lib-drop-down-menu>\r\n <button (click)=\"toggleSortdir()\" [disabled]=\"!sort || busy\" class=\"pager-icon-button\">\r\n <span class=\"sr-only\">sort direction</span>\r\n <span class=\"inline-block relative\">\r\n <i [class]=\"sortdirIcon\"></i>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"pager-pages-container\">\r\n <lib-drop-down-menu [options]=\"pageSizeOptions\" [selected]=\"pageSize\" (selectedChanged)=\"pageSizeOptionChanged($event)\"></lib-drop-down-menu>\r\n <div class=\"mx-1\">\r\n <button [disabled]=\"!canPreviousPage || busy\" (click)=\"previousPage()\"\r\n class=\"pager-arrow-button-left\">\r\n <span class=\"sr-only\">Previous</span>\r\n <svg class=\"h-5 w-5\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\r\n <path fill-rule=\"evenodd\" d=\"M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z\" clip-rule=\"evenodd\" />\r\n </svg>\r\n </button>\r\n <button type=\"button\"\r\n [disabled]=\"!canNextPage || busy\" (click)=\"nextPage()\"\r\n class=\"pager-arrow-button-right\">\r\n <span class=\"sr-only\">Next</span>\r\n <svg class=\"h-5 w-5\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\r\n <path fill-rule=\"evenodd\" d=\"M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z\" clip-rule=\"evenodd\" />\r\n </svg>\r\n </button>\r\n </div>\r\n <lib-drop-down-menu *ngIf=\"false && (pages && pages.length > 0)\" [options]=\"pages\" [selected]=\"page\" (selectedChanged)=\"pageOptionChanged($event)\"></lib-drop-down-menu>\r\n </div>\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.DropDownMenuComponent, selector: "lib-drop-down-menu", inputs: ["options", "selected", "multiple", "placeholder", "show-icons"], outputs: ["selectedChange", "selectedChanged"] }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: PagerComponent, decorators: [{ type: Component, args: [{ selector: 'lib-pager', template: "<div class=\"pager-container\">\r\n <div class=\"pager-container-near\">\r\n <ng-content select=\"[pager-near-content]\"></ng-content>\r\n </div>\r\n <div class=\"pager-container-far\">\r\n <div class=\"inline-flex\" *ngIf=\"sortOptions && sortOptions.length > 0\">\r\n <lib-drop-down-menu [options]=\"sortOptions\" [selected]=\"sort\" (selectedChanged)=\"sortOptionChanged($event)\"></lib-drop-down-menu>\r\n <button (click)=\"toggleSortdir()\" [disabled]=\"!sort || busy\" class=\"pager-icon-button\">\r\n <span class=\"sr-only\">sort direction</span>\r\n <span class=\"inline-block relative\">\r\n <i [class]=\"sortdirIcon\"></i>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"pager-pages-container\">\r\n <lib-drop-down-menu [options]=\"pageSizeOptions\" [selected]=\"pageSize\" (selectedChanged)=\"pageSizeOptionChanged($event)\"></lib-drop-down-menu>\r\n <div class=\"mx-1\">\r\n <button [disabled]=\"!canPreviousPage || busy\" (click)=\"previousPage()\"\r\n class=\"pager-arrow-button-left\">\r\n <span class=\"sr-only\">Previous</span>\r\n <svg class=\"h-5 w-5\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\r\n <path fill-rule=\"evenodd\" d=\"M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z\" clip-rule=\"evenodd\" />\r\n </svg>\r\n </button>\r\n <button type=\"button\"\r\n [disabled]=\"!canNextPage || busy\" (click)=\"nextPage()\"\r\n class=\"pager-arrow-button-right\">\r\n <span class=\"sr-only\">Next</span>\r\n <svg class=\"h-5 w-5\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\r\n <path fill-rule=\"evenodd\" d=\"M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z\" clip-rule=\"evenodd\" />\r\n </svg>\r\n </button>\r\n </div>\r\n <lib-drop-down-menu *ngIf=\"false && (pages && pages.length > 0)\" [options]=\"pages\" [selected]=\"page\" (selectedChanged)=\"pageOptionChanged($event)\"></lib-drop-down-menu>\r\n </div>\r\n </div>\r\n</div>\r\n" }] }], ctorParameters: () => [{ type: i1.Router }], propDecorators: { busy: [{ type: Input }], count: [{ type: Input }], page: [{ type: Input }], pageSize: [{ type: Input, args: ['page-size'] }], pageSizeOptions: [{ type: Input, args: ['page-size-options'] }], pageChanged: [{ type: Output }], pageSizeChanged: [{ type: Output }], sortOptions: [{ type: Input, args: ['sort-options'] }], sort: [{ type: Input, args: ['sort'] }], sortdir: [{ type: Input, args: ['sort-dir'] }], sortChanged: [{ type: Output }], sortdirChanged: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL3BhZ2VyL3BhZ2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9wYWdlci9wYWdlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFekcsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDOzs7OztBQU16QyxNQUFNLE9BQU8sY0FBYztJQWlDekIsWUFBb0IsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7UUFoQ2xDLGFBQWE7UUFDSixTQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLFNBQVM7UUFDQSxVQUFLLEdBQWtCLElBQUksQ0FBQztRQUM1QixTQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLDJDQUEyQztRQUN2QixhQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2xDLDJDQUEyQztRQUNmLG9CQUFlLEdBQWlCO1lBQzFELElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7WUFDeEIsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUN4QixJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3hCLElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7WUFDeEIsSUFBSSxVQUFVLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQztTQUMzQixDQUFDO1FBQ0ssVUFBSyxHQUFpQixFQUFFLENBQUM7UUFDdEIsZ0JBQVcsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUMvRCxvQkFBZSxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ3RFLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBRTNCLFVBQVU7UUFDViwyQ0FBMkM7UUFDcEIsZ0JBQVcsR0FBaUIsRUFBRSxDQUFDO1FBQ3RELDJDQUEyQztRQUM1QixTQUFJLEdBQWtCLElBQUksQ0FBQztRQUMxQywyQ0FBMkM7UUFDeEIsWUFBTyxHQUFrQixNQUFNLENBQUM7UUFDekMsZ0JBQVcsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUMvRCxtQkFBYyxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ3JFLGdCQUFXLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUVFLENBQUM7SUFFdkMsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsUUFBUTtJQUNSLENBQUM7SUFFTyxTQUFTO1FBQ2YsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDakMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzdDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckQsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUNuRCxDQUFDO0lBRU0sUUFBUTtRQUNiLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVNLFlBQVk7UUFDakIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRU0sUUFBUSxDQUFDLElBQVk7UUFDMUIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFTSxxQkFBcUIsQ0FBQyxRQUFnQjtRQUMzQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVNLGlCQUFpQixDQUFDLElBQVk7UUFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxJQUFZO1FBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFTSxhQUFhO1FBQ2xCLElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDNUIsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNoQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDbkMsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLEdBQUcsTUFBTSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUNwQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEMsQ0FBQzs4R0E5RlUsY0FBYztrR0FBZCxjQUFjLHVjQ1QzQixpekVBcUNBOzsyRkQ1QmEsY0FBYztrQkFKMUIsU0FBUzsrQkFDRSxXQUFXOzJFQUtaLElBQUk7c0JBQVosS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUVjLFFBQVE7c0JBQTNCLEtBQUs7dUJBQUMsV0FBVztnQkFFVSxlQUFlO3NCQUExQyxLQUFLO3VCQUFDLG1CQUFtQjtnQkFRaEIsV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQU1nQixXQUFXO3NCQUFqQyxLQUFLO3VCQUFDLGNBQWM7Z0JBRU4sSUFBSTtzQkFBbEIsS0FBSzt1QkFBQyxNQUFNO2dCQUVNLE9BQU87c0JBQXpCLEtBQUs7dUJBQUMsVUFBVTtnQkFDUCxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgSWNvbnMgfSBmcm9tICcuLi8uLi9pY29ucyc7XHJcbmltcG9ydCB7IE1lbnVPcHRpb24gfSBmcm9tICcuLi8uLi90eXBlcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1wYWdlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3BhZ2VyLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUGFnZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgLy8gQlVTWSBTVEFURVxyXG4gIEBJbnB1dCgpIGJ1c3kgPSBmYWxzZTtcclxuICAvLyBQQUdJTkdcclxuICBASW5wdXQoKSBjb3VudDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgQElucHV0KCkgcGFnZSA9IDE7XHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWlucHV0LXJlbmFtZVxyXG4gIEBJbnB1dCgncGFnZS1zaXplJykgcGFnZVNpemUgPSAyMDtcclxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8taW5wdXQtcmVuYW1lXHJcbiAgQElucHV0KCdwYWdlLXNpemUtb3B0aW9ucycpIHBhZ2VTaXplT3B0aW9uczogTWVudU9wdGlvbltdID0gW1xyXG4gICAgbmV3IE1lbnVPcHRpb24oJzEwJywgMTApLFxyXG4gICAgbmV3IE1lbnVPcHRpb24oJzIwJywgMjApLFxyXG4gICAgbmV3IE1lbnVPcHRpb24oJzMwJywgMzApLFxyXG4gICAgbmV3IE1lbnVPcHRpb24oJzUwJywgNTApLFxyXG4gICAgbmV3IE1lbnVPcHRpb24oJzEwMCcsIDEwMClcclxuICBdO1xyXG4gIHB1YmxpYyBwYWdlczogTWVudU9wdGlvbltdID0gW107XHJcbiAgQE91dHB1dCgpIHBhZ2VDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xyXG4gIEBPdXRwdXQoKSBwYWdlU2l6ZUNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcbiAgcHVibGljIGNhblByZXZpb3VzUGFnZSA9IGZhbHNlO1xyXG4gIHB1YmxpYyBjYW5OZXh0UGFnZSA9IGZhbHNlO1xyXG5cclxuICAvLyBTT1JUSU5HXHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWlucHV0LXJlbmFtZVxyXG4gIEBJbnB1dCgnc29ydC1vcHRpb25zJykgc29ydE9wdGlvbnM6IE1lbnVPcHRpb25bXSA9IFtdO1xyXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1pbnB1dC1yZW5hbWVcclxuICBASW5wdXQoJ3NvcnQnKSBzb3J0OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8taW5wdXQtcmVuYW1lXHJcbiAgQElucHV0KCdzb3J0LWRpcicpIHNvcnRkaXI6IHN0cmluZyB8IG51bGwgPSAnZGVzYyc7XHJcbiAgQE91dHB1dCgpIHNvcnRDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBPdXRwdXQoKSBzb3J0ZGlyQ2hhbmdlZDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBwdWJsaWMgc29ydGRpckljb24gPSBJY29ucy5Tb3J0RGVzYztcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikgeyB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIHRoaXMuY2FsY1BhZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FsY1BhZ2VzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5wYWdlcyA9IFtdO1xyXG4gICAgaWYgKHRoaXMuY291bnQgJiYgdGhpcy5jb3VudCA+IDApIHtcclxuICAgICAgY29uc3QgcGFnZUNvdW50ID0gdGhpcy5jb3VudCAvIHRoaXMucGFnZVNpemU7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFnZUNvdW50OyBpKyspIHtcclxuICAgICAgICB0aGlzLnBhZ2VzLnB1c2gobmV3IE1lbnVPcHRpb24oaSArIDEgKyAnJywgaSArIDEpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5jYW5QcmV2aW91c1BhZ2UgPSB0aGlzLnBhZ2UgPiAxO1xyXG4gICAgdGhpcy5jYW5OZXh0UGFnZSA9IHRoaXMucGFnZSA8IHRoaXMucGFnZXMubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5leHRQYWdlKCk6IHZvaWQge1xyXG4gICAgY29uc3QgbmV4dCA9IHRoaXMucGFnZSArIDE7XHJcbiAgICB0aGlzLmdvdG9QYWdlKG5leHQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHByZXZpb3VzUGFnZSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5wYWdlIC0gMTtcclxuICAgIHRoaXMuZ290b1BhZ2UocHJldmlvdXMpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdvdG9QYWdlKHBhZ2U6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5wYWdlID0gcGFnZTtcclxuICAgIHRoaXMucGFnZUNoYW5nZWQuZW1pdChwYWdlKTtcclxuICAgIHRoaXMuY2FsY1BhZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcGFnZVNpemVPcHRpb25DaGFuZ2VkKHBhZ2VTaXplOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMucGFnZVNpemVDaGFuZ2VkLmVtaXQocGFnZVNpemUpO1xyXG4gICAgdGhpcy5jYWxjUGFnZXMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBwYWdlT3B0aW9uQ2hhbmdlZChwYWdlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMucGFnZUNoYW5nZWQuZW1pdChwYWdlKTtcclxuICAgIHRoaXMuY2FsY1BhZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc29ydE9wdGlvbkNoYW5nZWQoc29ydDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnNvcnRDaGFuZ2VkLmVtaXQoc29ydCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG9nZ2xlU29ydGRpcigpOiB2b2lkIHtcclxuICAgIGxldCBzb3J0ZGlyID0gJ2Rlc2MnO1xyXG4gICAgaWYgKHRoaXMuc29ydGRpciA9PT0gJ2Rlc2MnKSB7XHJcbiAgICAgIHNvcnRkaXIgPSAnYXNjJztcclxuICAgICAgdGhpcy5zb3J0ZGlySWNvbiA9IEljb25zLlNvcnRBc2M7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzb3J0ZGlyID0gJ2Rlc2MnO1xyXG4gICAgICB0aGlzLnNvcnRkaXJJY29uID0gSWNvbnMuU29ydERlc2M7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNvcnRkaXJDaGFuZ2VkLmVtaXQoc29ydGRpcik7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwicGFnZXItY29udGFpbmVyXCI+XHJcbiAgPGRpdiBjbGFzcz1cInBhZ2VyLWNvbnRhaW5lci1uZWFyXCI+XHJcbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltwYWdlci1uZWFyLWNvbnRlbnRdXCI+PC9uZy1jb250ZW50PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJwYWdlci1jb250YWluZXItZmFyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaW5saW5lLWZsZXhcIiAqbmdJZj1cInNvcnRPcHRpb25zICYmIHNvcnRPcHRpb25zLmxlbmd0aCA+IDBcIj5cclxuICAgICAgPGxpYi1kcm9wLWRvd24tbWVudSBbb3B0aW9uc109XCJzb3J0T3B0aW9uc1wiIFtzZWxlY3RlZF09XCJzb3J0XCIgKHNlbGVjdGVkQ2hhbmdlZCk9XCJzb3J0T3B0aW9uQ2hhbmdlZCgkZXZlbnQpXCI+PC9saWItZHJvcC1kb3duLW1lbnU+XHJcbiAgICAgIDxidXR0b24gKGNsaWNrKT1cInRvZ2dsZVNvcnRkaXIoKVwiIFtkaXNhYmxlZF09XCIhc29ydCB8fCBidXN5XCIgY2xhc3M9XCJwYWdlci1pY29uLWJ1dHRvblwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPnNvcnQgZGlyZWN0aW9uPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaW5saW5lLWJsb2NrIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICA8aSBbY2xhc3NdPVwic29ydGRpckljb25cIj48L2k+XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInBhZ2VyLXBhZ2VzLWNvbnRhaW5lclwiPlxyXG4gICAgICA8bGliLWRyb3AtZG93bi1tZW51IFtvcHRpb25zXT1cInBhZ2VTaXplT3B0aW9uc1wiIFtzZWxlY3RlZF09XCJwYWdlU2l6ZVwiIChzZWxlY3RlZENoYW5nZWQpPVwicGFnZVNpemVPcHRpb25DaGFuZ2VkKCRldmVudClcIj48L2xpYi1kcm9wLWRvd24tbWVudT5cclxuICAgICAgPGRpdiBjbGFzcz1cIm14LTFcIj5cclxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCIhY2FuUHJldmlvdXNQYWdlIHx8IGJ1c3lcIiAgKGNsaWNrKT1cInByZXZpb3VzUGFnZSgpXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwicGFnZXItYXJyb3ctYnV0dG9uLWxlZnRcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPlByZXZpb3VzPC9zcGFuPlxyXG4gICAgICAgICAgPHN2ZyBjbGFzcz1cImgtNSB3LTVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNMTIuNzA3IDUuMjkzYTEgMSAwIDAxMCAxLjQxNEw5LjQxNCAxMGwzLjI5MyAzLjI5M2ExIDEgMCAwMS0xLjQxNCAxLjQxNGwtNC00YTEgMSAwIDAxMC0xLjQxNGw0LTRhMSAxIDAgMDExLjQxNCAwelwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIiAvPlxyXG4gICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuTmV4dFBhZ2UgfHwgYnVzeVwiICAoY2xpY2spPVwibmV4dFBhZ2UoKVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInBhZ2VyLWFycm93LWJ1dHRvbi1yaWdodFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+TmV4dDwvc3Bhbj5cclxuICAgICAgICAgIDxzdmcgY2xhc3M9XCJoLTUgdy01XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTcuMjkzIDE0LjcwN2ExIDEgMCAwMTAtMS40MTRMMTAuNTg2IDEwIDcuMjkzIDYuNzA3YTEgMSAwIDAxMS40MTQtMS40MTRsNCA0YTEgMSAwIDAxMCAxLjQxNGwtNCA0YTEgMSAwIDAxLTEuNDE0IDB6XCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiIC8+XHJcbiAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxsaWItZHJvcC1kb3duLW1lbnUgKm5nSWY9XCJmYWxzZSAmJiAocGFnZXMgJiYgcGFnZXMubGVuZ3RoID4gMClcIiBbb3B0aW9uc109XCJwYWdlc1wiIFtzZWxlY3RlZF09XCJwYWdlXCIgKHNlbGVjdGVkQ2hhbmdlZCk9XCJwYWdlT3B0aW9uQ2hhbmdlZCgkZXZlbnQpXCI+PC9saWItZHJvcC1kb3duLW1lbnU+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==