UNPKG

cfc-ds

Version:

Design System do Conselho Federal de Contabilidade baseado no govbr-ds

140 lines 29.7 kB
import { Component, EventEmitter, Input, Output } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "@angular/forms"; import * as i2 from "../select/select.component"; export class PaginationComponent { cdr; data = []; itemsPerPageOptions = [ { value: 10, label: '10', selected: true }, { value: 20, label: '20', selected: false }, { value: 30, label: '30', selected: false }, ]; allPages = 1; itemsPerPage = 10; allItems = 0; pageChange = new EventEmitter(); itemsPerPageChange = new EventEmitter(); default = false; currentPage = 1; displayedData = []; pagesArray = [{ value: 1, selected: true }]; constructor(cdr) { this.cdr = cdr; } ngOnInit() { this.updateAllItems(); this.updatePagination(); this.updateDisplayedData(); } ngOnChanges(changes) { if (changes['data'] || changes['allItems']) { this.updateAllItems(); } if (changes['data'] || changes['allPages'] || changes['itemsPerPage'] || changes['allItems']) { this.itemsPerPage = Number(this.itemsPerPage) || 10; this.initializeDefaults(); this.updatePagination(); this.updateDisplayedData(); this.cdr.detectChanges(); } } prevPage() { if (this.currentPage > 1) { this.currentPage--; this.updatePageSelection(); } } nextPage() { if (this.currentPage < this.allPages) { this.currentPage++; this.updatePageSelection(); } } goToPage(page) { if (typeof page === 'number' && page >= 1 && page <= this.allPages) { this.currentPage = page; this.pageChange.emit(page); } else if (typeof page.detail[0] === 'number') { this.currentPage = +page.detail[0]; this.pageChange.emit(+page.detail[0]); } this.updatePageSelection(); } updatePageSelection() { this.pageChange.emit(this.currentPage); this.pagesArray.forEach(page => { page.selected = page.value === this.currentPage; }); this.updateDisplayedData(); } initializeDefaults() { if (this.allItems <= 0 && this.data && this.data.length > 0) { this.allItems = this.data.length; this.default = true; } if (this.allItems > 0) { this.allPages = Math.ceil(this.allItems / this.itemsPerPage); } } updateAllItems() { if (this.allItems <= 0 && this.data && this.data.length > 0) { this.allItems = this.data.length; } if (this.allItems < 0) { this.allItems = 0; } } changeItemsPerPage(event) { this.itemsPerPage = Number(event.detail[0].value); this.itemsPerPageChange.emit(this.itemsPerPage); this.currentPage = 1; this.allPages = Math.ceil(this.allItems / this.itemsPerPage); this.updatePagination(); this.updateDisplayedData(); this.cdr.detectChanges(); } updatePagination() { this.pagesArray = []; if (this.allItems <= 0 && this.data && this.data.length > 0) { this.allItems = this.data.length; } this.allPages = Math.ceil(this.allItems / this.itemsPerPage) || 1; for (let i = 1; i <= this.allPages; i++) { this.pagesArray.push({ value: i, selected: i === this.currentPage }); } } updateDisplayedData() { const startIndex = (this.currentPage - 1) * this.itemsPerPage; const endIndex = startIndex + this.itemsPerPage; if (this.default) { this.displayedData = this.data.slice(startIndex, endIndex); } else { this.displayedData = [...this.data]; } this.cdr.detectChanges(); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PaginationComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PaginationComponent, selector: "cfc-pagination", inputs: { data: "data", itemsPerPageOptions: "itemsPerPageOptions", allPages: "allPages", itemsPerPage: "itemsPerPage", allItems: "allItems" }, outputs: { pageChange: "pageChange", itemsPerPageChange: "itemsPerPageChange" }, usesOnChanges: true, ngImport: i0, template: "<span class=\"br-divider sm-block\"></span>\r\n\r\n<nav class=\"br-pagination sm-block\" aria-label=\"pagina\u00E7\u00E3o\" [attr.data-total]=\"allItems\"\r\n [attr.data-current]=\"currentPage\" [attr.data-per-page]=\"itemsPerPage\">\r\n\r\n <div class=\"part\">\r\n <div class=\"pagination-per-page\">\r\n <p class=\"mx-3 mb-0 d-flex align-items-center\" style=\"font-size: 14px; font-weight: 400;\">\r\n Exibir\r\n </p>\r\n <cfc-select id=\"pagination-per-page\" style=\"min-width: 100px; width: min-content;\" [options]=\"itemsPerPageOptions\"\r\n [(ngModel)]=\"itemsPerPageOptions\" (onChange)=\"changeItemsPerPage($event)\">\r\n </cfc-select>\r\n </div>\r\n\r\n <span class=\"br-divider d-none d-sm-block mx-3\"></span>\r\n\r\n <div class=\"pagination-information d-sm-flex\">\r\n P\u00E1gina {{ currentPage }} de {{ allPages }} ({{ allItems }} itens)\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"part\">\r\n <div class=\"pagination-per-page\">\r\n <p class=\"mr-3 mb-0 d-flex align-items-center\" style=\"font-size: 14px; font-weight: 400;\">\r\n P\u00E1gina\r\n </p>\r\n <cfc-select style=\"min-width: 100px; width: min-content;\" ariaLabel=\"Exibir P\u00E1gina\" id=\"go-to-selection\"\r\n [disabled]=\"allPages === 1\" [value]=\"currentPage\" [options]=\"pagesArray\" (onChange)=\"goToPage($event)\">\r\n </cfc-select>\r\n <!-- <div class=\"br-select\" [class.disabled]=\"allPages === 1\">\r\n <div class=\"br-input\">\r\n <label for=\"go-to-selection\">P\u00E1gina</label>\r\n <input\r\n id=\"go-to-selection\"\r\n type=\"text\"\r\n [value]=\"currentPage\"\r\n [placeholder]=\"currentPage\"\r\n readonly\r\n />\r\n <button\r\n class=\"br-button\"\r\n type=\"button\"\r\n aria-label=\"Exibir lista\"\r\n tabindex=\"-2\"\r\n data-trigger=\"data-trigger\"\r\n >\r\n <i class=\"fas fa-angle-down\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n <div class=\"br-list\" tabindex=\"-2\">\r\n <div\r\n class=\"br-item\"\r\n tabindex=\"-2\"\r\n *ngFor=\"let page of pagesArray\"\r\n (click)=\"goToPage(page.value)\"\r\n >\r\n <div class=\"br-radio\">\r\n <input\r\n [id]=\"'go-to-' + page.value\"\r\n type=\"radio\"\r\n name=\"go-to\"\r\n [value]=\"page.value\"\r\n [checked]=\"page.selected\"\r\n />\r\n <label [for]=\"'go-to-' + page.value\">{{ page.value }}</label>\r\n </div>\r\n </div>\r\n </div>\r\n </div> -->\r\n </div>\r\n\r\n <span class=\"br-divider d-none d-sm-block mx-3\"></span>\r\n\r\n <div class=\"pagination-arrows ml-auto ml-sm-0 mr-1\">\r\n <button class=\"br-button circle\" type=\"button\" aria-label=\"Voltar p\u00E1gina\" (click)=\"prevPage()\">\r\n <i class=\"fas fa-angle-left\" aria-hidden=\"true\"></i>\r\n </button>\r\n <button class=\"br-button circle\" type=\"button\" aria-label=\"P\u00E1gina seguinte\" (click)=\"nextPage()\">\r\n <i class=\"fas fa-angle-right\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n</nav>", styles: [".br-pagination{display:flex;justify-content:space-between;width:100%}.part{display:flex;align-items:center;padding:10px 20px}\n"], dependencies: [{ kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.SelectComponent, selector: "cfc-select", inputs: ["options", "id", "label", "value", "placeholder", "labelInline"], outputs: ["onChange"] }] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PaginationComponent, decorators: [{ type: Component, args: [{ selector: 'cfc-pagination', template: "<span class=\"br-divider sm-block\"></span>\r\n\r\n<nav class=\"br-pagination sm-block\" aria-label=\"pagina\u00E7\u00E3o\" [attr.data-total]=\"allItems\"\r\n [attr.data-current]=\"currentPage\" [attr.data-per-page]=\"itemsPerPage\">\r\n\r\n <div class=\"part\">\r\n <div class=\"pagination-per-page\">\r\n <p class=\"mx-3 mb-0 d-flex align-items-center\" style=\"font-size: 14px; font-weight: 400;\">\r\n Exibir\r\n </p>\r\n <cfc-select id=\"pagination-per-page\" style=\"min-width: 100px; width: min-content;\" [options]=\"itemsPerPageOptions\"\r\n [(ngModel)]=\"itemsPerPageOptions\" (onChange)=\"changeItemsPerPage($event)\">\r\n </cfc-select>\r\n </div>\r\n\r\n <span class=\"br-divider d-none d-sm-block mx-3\"></span>\r\n\r\n <div class=\"pagination-information d-sm-flex\">\r\n P\u00E1gina {{ currentPage }} de {{ allPages }} ({{ allItems }} itens)\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"part\">\r\n <div class=\"pagination-per-page\">\r\n <p class=\"mr-3 mb-0 d-flex align-items-center\" style=\"font-size: 14px; font-weight: 400;\">\r\n P\u00E1gina\r\n </p>\r\n <cfc-select style=\"min-width: 100px; width: min-content;\" ariaLabel=\"Exibir P\u00E1gina\" id=\"go-to-selection\"\r\n [disabled]=\"allPages === 1\" [value]=\"currentPage\" [options]=\"pagesArray\" (onChange)=\"goToPage($event)\">\r\n </cfc-select>\r\n <!-- <div class=\"br-select\" [class.disabled]=\"allPages === 1\">\r\n <div class=\"br-input\">\r\n <label for=\"go-to-selection\">P\u00E1gina</label>\r\n <input\r\n id=\"go-to-selection\"\r\n type=\"text\"\r\n [value]=\"currentPage\"\r\n [placeholder]=\"currentPage\"\r\n readonly\r\n />\r\n <button\r\n class=\"br-button\"\r\n type=\"button\"\r\n aria-label=\"Exibir lista\"\r\n tabindex=\"-2\"\r\n data-trigger=\"data-trigger\"\r\n >\r\n <i class=\"fas fa-angle-down\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n <div class=\"br-list\" tabindex=\"-2\">\r\n <div\r\n class=\"br-item\"\r\n tabindex=\"-2\"\r\n *ngFor=\"let page of pagesArray\"\r\n (click)=\"goToPage(page.value)\"\r\n >\r\n <div class=\"br-radio\">\r\n <input\r\n [id]=\"'go-to-' + page.value\"\r\n type=\"radio\"\r\n name=\"go-to\"\r\n [value]=\"page.value\"\r\n [checked]=\"page.selected\"\r\n />\r\n <label [for]=\"'go-to-' + page.value\">{{ page.value }}</label>\r\n </div>\r\n </div>\r\n </div>\r\n </div> -->\r\n </div>\r\n\r\n <span class=\"br-divider d-none d-sm-block mx-3\"></span>\r\n\r\n <div class=\"pagination-arrows ml-auto ml-sm-0 mr-1\">\r\n <button class=\"br-button circle\" type=\"button\" aria-label=\"Voltar p\u00E1gina\" (click)=\"prevPage()\">\r\n <i class=\"fas fa-angle-left\" aria-hidden=\"true\"></i>\r\n </button>\r\n <button class=\"br-button circle\" type=\"button\" aria-label=\"P\u00E1gina seguinte\" (click)=\"nextPage()\">\r\n <i class=\"fas fa-angle-right\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n</nav>", styles: [".br-pagination{display:flex;justify-content:space-between;width:100%}.part{display:flex;align-items:center;padding:10px 20px}\n"] }] }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { data: [{ type: Input }], itemsPerPageOptions: [{ type: Input }], allPages: [{ type: Input }], itemsPerPage: [{ type: Input }], allItems: [{ type: Input }], pageChange: [{ type: Output }], itemsPerPageChange: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZmMtZHMvc3JjL2xpYi9jb21wb25lbnRzL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZmMtZHMvc3JjL2xpYi9jb21wb25lbnRzL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDOzs7O0FBTzVILE1BQU0sT0FBTyxtQkFBbUI7SUFzQnBCO0lBbkJELElBQUksR0FBVSxFQUFFLENBQUM7SUFDakIsbUJBQW1CLEdBQUc7UUFDN0IsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtRQUMxQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFO1FBQzNDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUU7S0FDNUMsQ0FBQztJQUNPLFFBQVEsR0FBVyxDQUFDLENBQUM7SUFDckIsWUFBWSxHQUFXLEVBQUUsQ0FBQztJQUMxQixRQUFRLEdBQVcsQ0FBQyxDQUFDO0lBRXBCLFVBQVUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0lBQ3hDLGtCQUFrQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7SUFFMUQsT0FBTyxHQUFZLEtBQUssQ0FBQztJQUN6QixXQUFXLEdBQUcsQ0FBQyxDQUFDO0lBQ2hCLGFBQWEsR0FBVSxFQUFFLENBQUM7SUFDMUIsVUFBVSxHQUFHLENB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QUFDO1FBRTdELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLENBQUM7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7d0dBeklVLG1CQUFtQjs0RkFBbkIsbUJBQW1CLDRTQ1BoQyxveUdBb0ZNOzs0RkQ3RU8sbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGdCQUFnQjtzRkFPakIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFLRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFFSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY2ZjLXBhZ2luYXRpb24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wYWdpbmF0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vcGFnaW5hdGlvbi5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFBhZ2luYXRpb25Db21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuXHJcbiAgQElucHV0KCkgZGF0YTogYW55W10gPSBbXTtcclxuICBASW5wdXQoKSBpdGVtc1BlclBhZ2VPcHRpb25zID0gW1xyXG4gICAgeyB2YWx1ZTogMTAsIGxhYmVsOiAnMTAnLCBzZWxlY3RlZDogdHJ1ZSB9LFxyXG4gICAgeyB2YWx1ZTogMjAsIGxhYmVsOiAnMjAnLCBzZWxlY3RlZDogZmFsc2UgfSxcclxuICAgIHsgdmFsdWU6IDMwLCBsYWJlbDogJzMwJywgc2VsZWN0ZWQ6IGZhbHNlIH0sXHJcbiAgXTtcclxuICBASW5wdXQoKSBhbGxQYWdlczogbnVtYmVyID0gMTtcclxuICBASW5wdXQoKSBpdGVtc1BlclBhZ2U6IG51bWJlciA9IDEwO1xyXG4gIEBJbnB1dCgpIGFsbEl0ZW1zOiBudW1iZXIgPSAwO1xyXG5cclxuICBAT3V0cHV0KCkgcGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xyXG4gIEBPdXRwdXQoKSBpdGVtc1BlclBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcclxuXHJcbiAgZGVmYXVsdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGN1cnJlbnRQYWdlID0gMTtcclxuICBkaXNwbGF5ZWREYXRhOiBhbnlbXSA9IFtdO1xyXG4gIHBhZ2VzQXJyYXkgPSBbeyB2YWx1ZTogMSwgc2VsZWN0ZWQ6IHRydWUgfV07XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVBbGxJdGVtcygpO1xyXG4gICAgdGhpcy51cGRhdGVQYWdpbmF0aW9uKCk7XHJcbiAgICB0aGlzLnVwZGF0ZURpc3BsYXllZERhdGEoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydkYXRhJ10gfHwgY2hhbmdlc1snYWxsSXRlbXMnXSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZUFsbEl0ZW1zKCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmIChjaGFuZ2VzWydkYXRhJ10gfHwgY2hhbmdlc1snYWxsUGFnZXMnXSB8fCBjaGFuZ2VzWydpdGVtc1BlclBhZ2UnXSB8fCBjaGFuZ2VzWydhbGxJdGVtcyddKSB7XHJcbiAgICAgIHRoaXMuaXRlbXNQZXJQYWdlID0gTnVtYmVyKHRoaXMuaXRlbXNQZXJQYWdlKSB8fCAxMDtcclxuICAgICAgXHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZURlZmF1bHRzKCk7XHJcbiAgICAgIHRoaXMudXBkYXRlUGFnaW5hdGlvbigpO1xyXG4gICAgICB0aGlzLnVwZGF0ZURpc3BsYXllZERhdGEoKTtcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJldlBhZ2UoKSB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA+IDEpIHtcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZS0tO1xyXG4gICAgICB0aGlzLnVwZGF0ZVBhZ2VTZWxlY3Rpb24oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHRQYWdlKCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPCB0aGlzLmFsbFBhZ2VzKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UrKztcclxuICAgICAgdGhpcy51cGRhdGVQYWdlU2VsZWN0aW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnb1RvUGFnZShwYWdlOiBhbnkpIHtcclxuICAgIGlmICh0eXBlb2YgcGFnZSA9PT0gJ251bWJlcicgJiYgcGFnZSA+PSAxICYmIHBhZ2UgPD0gdGhpcy5hbGxQYWdlcykge1xyXG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZTtcclxuICAgICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQocGFnZSk7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBwYWdlLmRldGFpbFswXSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9ICtwYWdlLmRldGFpbFswXTtcclxuICAgICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQoK3BhZ2UuZGV0YWlsWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVwZGF0ZVBhZ2VTZWxlY3Rpb24oKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVBhZ2VTZWxlY3Rpb24oKSB7XHJcbiAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdCh0aGlzLmN1cnJlbnRQYWdlKTtcclxuICAgIHRoaXMucGFnZXNBcnJheS5mb3JFYWNoKHBhZ2UgPT4ge1xyXG4gICAgICBwYWdlLnNlbGVjdGVkID0gcGFnZS52YWx1ZSA9PT0gdGhpcy5jdXJyZW50UGFnZTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy51cGRhdGVEaXNwbGF5ZWREYXRhKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRpYWxpemVEZWZhdWx0cygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmFsbEl0ZW1zIDw9IDAgJiYgdGhpcy5kYXRhICYmIHRoaXMuZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuYWxsSXRlbXMgPSB0aGlzLmRhdGEubGVuZ3RoO1xyXG4gICAgICB0aGlzLmRlZmF1bHQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBpZiAodGhpcy5hbGxJdGVtcyA+IDApIHtcclxuICAgICAgdGhpcy5hbGxQYWdlcyA9IE1hdGguY2VpbCh0aGlzLmFsbEl0ZW1zIC8gdGhpcy5pdGVtc1BlclBhZ2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVBbGxJdGVtcygpIHtcclxuICAgIGlmICh0aGlzLmFsbEl0ZW1zIDw9IDAgJiYgdGhpcy5kYXRhICYmIHRoaXMuZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuYWxsSXRlbXMgPSB0aGlzLmRhdGEubGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBpZiAodGhpcy5hbGxJdGVtcyA8IDApIHtcclxuICAgICAgdGhpcy5hbGxJdGVtcyA9IDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VJdGVtc1BlclBhZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5pdGVtc1BlclBhZ2UgPSBOdW1iZXIoZXZlbnQuZGV0YWlsWzBdLnZhbHVlKTtcclxuICAgIHRoaXMuaXRlbXNQZXJQYWdlQ2hhbmdlLmVtaXQodGhpcy5pdGVtc1BlclBhZ2UpO1xyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICBcclxuICAgIHRoaXMuYWxsUGFnZXMgPSBNYXRoLmNlaWwodGhpcy5hbGxJdGVtcyAvIHRoaXMuaXRlbXNQZXJQYWdlKTtcclxuICAgIFxyXG4gICAgdGhpcy51cGRhdGVQYWdpbmF0aW9uKCk7XHJcbiAgICB0aGlzLnVwZGF0ZURpc3BsYXllZERhdGEoKTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlUGFnaW5hdGlvbigpIHtcclxuICAgIHRoaXMucGFnZXNBcnJheSA9IFtdO1xyXG4gICAgXHJcbiAgICBpZiAodGhpcy5hbGxJdGVtcyA8PSAwICYmIHRoaXMuZGF0YSAmJiB0aGlzLmRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmFsbEl0ZW1zID0gdGhpcy5kYXRhLmxlbmd0aDtcclxuICAgIH1cclxuICAgIFxyXG4gICAgdGhpcy5hbGxQYWdlcyA9IE1hdGguY2VpbCh0aGlzLmFsbEl0ZW1zIC8gdGhpcy5pdGVtc1BlclBhZ2UpIHx8IDE7XHJcbiAgICBcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHRoaXMuYWxsUGFnZXM7IGkrKykge1xyXG4gICAgICB0aGlzLnBhZ2VzQXJyYXkucHVzaCh7IHZhbHVlOiBpLCBzZWxlY3RlZDogaSA9PT0gdGhpcy5jdXJyZW50UGFnZSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlRGlzcGxheWVkRGF0YSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHN0YXJ0SW5kZXggPSAodGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5pdGVtc1BlclBhZ2U7XHJcbiAgICBjb25zdCBlbmRJbmRleCA9IHN0YXJ0SW5kZXggKyB0aGlzLml0ZW1zUGVyUGFnZTtcclxuICAgIGlmICh0aGlzLmRlZmF1bHQpIHtcclxuICAgICAgdGhpcy5kaXNwbGF5ZWREYXRhID0gdGhpcy5kYXRhLnNsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRpc3BsYXllZERhdGEgPSBbLi4udGhpcy5kYXRhXTtcclxuICAgIH1cclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxzcGFuIGNsYXNzPVwiYnItZGl2aWRlciBzbS1ibG9ja1wiPjwvc3Bhbj5cclxuXHJcbjxuYXYgY2xhc3M9XCJici1wYWdpbmF0aW9uIHNtLWJsb2NrXCIgYXJpYS1sYWJlbD1cInBhZ2luYcOnw6NvXCIgW2F0dHIuZGF0YS10b3RhbF09XCJhbGxJdGVtc1wiXHJcbiAgW2F0dHIuZGF0YS1jdXJyZW50XT1cImN1cnJlbnRQYWdlXCIgW2F0dHIuZGF0YS1wZXItcGFnZV09XCJpdGVtc1BlclBhZ2VcIj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cInBhcnRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJwYWdpbmF0aW9uLXBlci1wYWdlXCI+XHJcbiAgICAgIDxwIGNsYXNzPVwibXgtMyBtYi0wIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDQwMDtcIj5cclxuICAgICAgICBFeGliaXJcclxuICAgICAgPC9wPlxyXG4gICAgICA8Y2ZjLXNlbGVjdCBpZD1cInBhZ2luYXRpb24tcGVyLXBhZ2VcIiBzdHlsZT1cIm1pbi13aWR0aDogMTAwcHg7IHdpZHRoOiBtaW4tY29udGVudDtcIiBbb3B0aW9uc109XCJpdGVtc1BlclBhZ2VPcHRpb25zXCJcclxuICAgICAgICBbKG5nTW9kZWwpXT1cIml0ZW1zUGVyUGFnZU9wdGlvbnNcIiAob25DaGFuZ2UpPVwiY2hhbmdlSXRlbXNQZXJQYWdlKCRldmVudClcIj5cclxuICAgICAgPC9jZmMtc2VsZWN0PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPHNwYW4gY2xhc3M9XCJici1kaXZpZGVyIGQtbm9uZSBkLXNtLWJsb2NrIG14LTNcIj48L3NwYW4+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInBhZ2luYXRpb24taW5mb3JtYXRpb24gZC1zbS1mbGV4XCI+XHJcbiAgICAgIFDDoWdpbmEge3sgY3VycmVudFBhZ2UgfX0gZGUge3sgYWxsUGFnZXMgfX0gKHt7IGFsbEl0ZW1zIH19IGl0ZW5zKVxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG5cclxuICA8ZGl2IGNsYXNzPVwicGFydFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInBhZ2luYXRpb24tcGVyLXBhZ2VcIj5cclxuICAgICAgPHAgY2xhc3M9XCJtci0zIG1iLTAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNDAwO1wiPlxyXG4gICAgICAgIFDDoWdpbmFcclxuICAgICAgPC9wPlxyXG4gICAgICA8Y2ZjLXNlbGVjdCBzdHlsZT1cIm1pbi13aWR0aDogMTAwcHg7IHdpZHRoOiBtaW4tY29udGVudDtcIiBhcmlhTGFiZWw9XCJFeGliaXIgUMOhZ2luYVwiIGlkPVwiZ28tdG8tc2VsZWN0aW9uXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiYWxsUGFnZXMgPT09IDFcIiBbdmFsdWVdPVwiY3VycmVudFBhZ2VcIiBbb3B0aW9uc109XCJwYWdlc0FycmF5XCIgKG9uQ2hhbmdlKT1cImdvVG9QYWdlKCRldmVudClcIj5cclxuICAgICAgPC9jZmMtc2VsZWN0PlxyXG4gICAgICA8IS0tIDxkaXYgY2xhc3M9XCJici1zZWxlY3RcIiBbY2xhc3MuZGlzYWJsZWRdPVwiYWxsUGFnZXMgPT09IDFcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImJyLWlucHV0XCI+XHJcbiAgICAgICAgPGxhYmVsIGZvcj1cImdvLXRvLXNlbGVjdGlvblwiPlDDoWdpbmE8L2xhYmVsPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgaWQ9XCJnby10by1zZWxlY3Rpb25cIlxyXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgW3ZhbHVlXT1cImN1cnJlbnRQYWdlXCJcclxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjdXJyZW50UGFnZVwiXHJcbiAgICAgICAgICByZWFkb25seVxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgY2xhc3M9XCJici1idXR0b25cIlxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiRXhpYmlyIGxpc3RhXCJcclxuICAgICAgICAgIHRhYmluZGV4PVwiLTJcIlxyXG4gICAgICAgICAgZGF0YS10cmlnZ2VyPVwiZGF0YS10cmlnZ2VyXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1hbmdsZS1kb3duXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImJyLWxpc3RcIiB0YWJpbmRleD1cIi0yXCI+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJici1pdGVtXCJcclxuICAgICAgICAgIHRhYmluZGV4PVwiLTJcIlxyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHBhZ2Ugb2YgcGFnZXNBcnJheVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiZ29Ub1BhZ2UocGFnZS52YWx1ZSlcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJici1yYWRpb1wiPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICBbaWRdPVwiJ2dvLXRvLScgKyBwYWdlLnZhbHVlXCJcclxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxyXG4gICAgICAgICAgICAgIG5hbWU9XCJnby10b1wiXHJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cInBhZ2UudmFsdWVcIlxyXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cInBhZ2Uuc2VsZWN0ZWRcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8bGFiZWwgW2Zvcl09XCInZ28tdG8tJyArIHBhZ2UudmFsdWVcIj57eyBwYWdlLnZhbHVlIH19PC9sYWJlbD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PiAtLT5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxzcGFuIGNsYXNzPVwiYnItZGl2aWRlciBkLW5vbmUgZC1zbS1ibG9jayBteC0zXCI+PC9zcGFuPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJwYWdpbmF0aW9uLWFycm93cyBtbC1hdXRvIG1sLXNtLTAgbXItMVwiPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnItYnV0dG9uIGNpcmNsZVwiIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiVm9sdGFyIHDDoWdpbmFcIiAoY2xpY2spPVwicHJldlBhZ2UoKVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWFuZ2xlLWxlZnRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnItYnV0dG9uIGNpcmNsZVwiIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiUMOhZ2luYSBzZWd1aW50ZVwiIChjbGljayk9XCJuZXh0UGFnZSgpXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtYW5nbGUtcmlnaHRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmF2PiJdfQ==