UNPKG

@catull/igniteui-angular

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

296 lines 28.4 kB
import { __decorate, __metadata, __param } from "tslib"; import { CommonModule } from '@angular/common'; import { FormsModule } from '@angular/forms'; import { Component, Input, Output, NgModule, Optional, Inject, EventEmitter, HostBinding } from '@angular/core'; import { CurrentResourceStrings } from '../core/i18n/resources'; import { DisplayDensityToken, DisplayDensityBase, DisplayDensity } from '../core/displayDensity'; import { IgxSelectModule } from '../select/index'; import { IgxIconModule } from '../icon/index'; import { IgxButtonModule } from '../directives/button/button.directive'; import { IgxRippleModule } from '../directives/ripple/ripple.directive'; let IgxPaginatorComponent = class IgxPaginatorComponent extends DisplayDensityBase { constructor(_displayDensityOptions) { super(_displayDensityOptions); this._displayDensityOptions = _displayDensityOptions; this._page = 0; this.defaultSelectValues = [5, 10, 15, 25, 50, 100, 500]; this._perPage = 15; /** * An @Input property that sets if the pager in the paginator should be enabled. * ```html * <igx-paginator [pagerEnabled]="true"></igx-paginator> * ``` * @memberof IgxPaginatorComponent */ this.pagerEnabled = true; /** * An @Input property that sets if the pager in the paginator should be hidden. * ```html * <igx-paginator [pagerHidden]="true"></igx-paginator> * ``` * @memberof IgxPaginatorComponent */ this.pagerHidden = false; /** * An @Input property that sets if the dropdown in the paginator should be enabled. * ```html * <igx-paginator [dropdownEnabled]="true"></igx-paginator> * ``` * @memberof IgxPaginatorComponent */ this.dropdownEnabled = true; /** * An @Input property that sets if the dropdown in the paginator should be hidden. * ```html * <igx-paginator [dropdownHidden]="true"></igx-paginator> * ``` * @memberof IgxPaginatorComponent */ this.dropdownHidden = false; /** * An @Input property, sets number of label of the select. * The default is 'Items per page' localized string. * ```html * <igx-paginator label="My custom label"></igx-paginator> * ``` * @memberof IgxPaginatorComponent */ this.selectLabel = CurrentResourceStrings.PaginatorResStrings.igx_paginator_label; /** *An event that is emitted when the select in the `IgxPaginatorComponent` changes its value. */ this.perPageChange = new EventEmitter(); /** *An event that is emitted when the paginating is used. */ this.pageChange = new EventEmitter(); } /** * Sets the class of the IgxPaginatorComponent based * on the provided displayDensity. */ get classCosy() { return this.displayDensity === DisplayDensity.cosy; } get classCompact() { return this.displayDensity === DisplayDensity.compact; } get classComfortable() { return this.displayDensity === DisplayDensity.comfortable; } /** * An @Input property, sets current page of the `IgxPaginatorComponent`. * The default is 0. * ```typescript * let page = this.paginator.page; * ``` * @memberof IgxPaginatorComponent */ get page() { return this._page; } set page(value) { this._page = value; this.pageChange.emit(this._page); } /** * An @Input property, sets number of visible items per page in the `IgxPaginatorComponent`. * The default is 15. * ```typescript * let itemsPerPage = this.paginator.perPage; * ``` * @memberof IgxPaginatorComponent */ get perPage() { return this._perPage; } set perPage(value) { this._perPage = Number(value); this.perPageChange.emit(this._perPage); this._selectOptions = this.sortUniqueOptions(this.defaultSelectValues, this._perPage); this.totalPages = Math.ceil(this.totalRecords / this._perPage); } /** * An @Input property that sets the total records. * ```typescript * let totalRecords = this.paginator.totalRecords; * ``` * @memberof IgxPaginatorComponent */ get totalRecords() { return this._totalRecords; } set totalRecords(value) { this._totalRecords = value; this.totalPages = Math.ceil(this.totalRecords / this.perPage); } /** * An @Input property that sets custom options in the select of the paginator * ```typescript * let options = this.paginator.selectOptions; * ``` * @memberof IgxPaginatorComponent */ get selectOptions() { return this._selectOptions; } set selectOptions(value) { this._selectOptions = this.sortUniqueOptions(value, this._perPage); this.defaultSelectValues = [...this._selectOptions]; } /** * Returns if the current page is the last page. * ```typescript * const lastPage = this.paginator.isLastPage; * ``` */ get isLastPage() { return this.page + 1 >= this.totalPages; } /** * Returns if the current page is the first page. * ```typescript * const lastPage = this.paginator.isFirstPage; * ``` */ get isFirstPage() { return this.page === 0; } sortUniqueOptions(values, newOption) { return Array.from(new Set([...values, newOption])).sort((a, b) => a - b); } /** * Sets DisplayDensity for the <select> inside the paginator * @hidden */ paginatorSelectDisplayDensity() { if (this.displayDensity === DisplayDensity.comfortable) { return DisplayDensity.cosy; } return DisplayDensity.compact; } /** * Goes to the next page of the `IgxPaginatorComponent`, if the paginator is not already at the last page. * ```typescript * this.paginator.nextPage(); * ``` * @memberof IgxPaginatorComponent */ nextPage() { if (!this.isLastPage) { this.page += 1; } } /** * Goes to the previous page of the `IgxPaginatorComponent`, if the paginator is not already at the first page. * ```typescript * this.paginator.previousPage(); * ``` * @memberof IgxPaginatorComponent */ previousPage() { if (!this.isFirstPage) { this.page -= 1; } } /** * Goes to the desired page index. * ```typescript * this.pagiantor.paginate(1); * ``` * @param val * @memberof IgxPaginatorComponent */ paginate(val) { if (val < 0 || val > this.totalPages - 1) { return; } this.page = val; } }; IgxPaginatorComponent.ctorParameters = () => [ { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DisplayDensityToken,] }] } ]; __decorate([ HostBinding('class.igx-paginator--cosy'), __metadata("design:type", Boolean), __metadata("design:paramtypes", []) ], IgxPaginatorComponent.prototype, "classCosy", null); __decorate([ HostBinding('class.igx-paginator--compact'), __metadata("design:type", Boolean), __metadata("design:paramtypes", []) ], IgxPaginatorComponent.prototype, "classCompact", null); __decorate([ HostBinding('class.igx-paginator'), __metadata("design:type", Boolean), __metadata("design:paramtypes", []) ], IgxPaginatorComponent.prototype, "classComfortable", null); __decorate([ Input(), __metadata("design:type", Number), __metadata("design:paramtypes", [Number]) ], IgxPaginatorComponent.prototype, "page", null); __decorate([ Input(), __metadata("design:type", Number), __metadata("design:paramtypes", [Number]) ], IgxPaginatorComponent.prototype, "perPage", null); __decorate([ Input(), __metadata("design:type", Number), __metadata("design:paramtypes", [Number]) ], IgxPaginatorComponent.prototype, "totalRecords", null); __decorate([ Input(), __metadata("design:type", Array), __metadata("design:paramtypes", [Array]) ], IgxPaginatorComponent.prototype, "selectOptions", null); __decorate([ Input(), __metadata("design:type", Object) ], IgxPaginatorComponent.prototype, "pagerEnabled", void 0); __decorate([ Input(), __metadata("design:type", Object) ], IgxPaginatorComponent.prototype, "pagerHidden", void 0); __decorate([ Input(), __metadata("design:type", Object) ], IgxPaginatorComponent.prototype, "dropdownEnabled", void 0); __decorate([ Input(), __metadata("design:type", Object) ], IgxPaginatorComponent.prototype, "dropdownHidden", void 0); __decorate([ Input(), __metadata("design:type", Object) ], IgxPaginatorComponent.prototype, "selectLabel", void 0); __decorate([ Output(), __metadata("design:type", Object) ], IgxPaginatorComponent.prototype, "perPageChange", void 0); __decorate([ Output(), __metadata("design:type", Object) ], IgxPaginatorComponent.prototype, "pageChange", void 0); IgxPaginatorComponent = __decorate([ Component({ selector: 'igx-paginator', template: "<div class=\"igx-paginator__select\" [hidden]=\"dropdownHidden\">\n <label class=\"igx-paginator__label\">{{ selectLabel }}</label>\n <div class=\"igx-paginator__select-input\">\n <igx-select [(ngModel)]=\"perPage\" [displayDensity]=\"paginatorSelectDisplayDensity()\" type=\"border\"\n [disabled]=\"!dropdownEnabled\">\n <igx-select-item [value]=\"val\" *ngFor=\"let val of selectOptions\">\n {{val}}\n </igx-select-item>\n </igx-select>\n </div>\n</div>\n<div class=\"igx-paginator__pager\" [hidden]=\"pagerHidden\">\n <button [disabled]=\"isFirstPage || !pagerEnabled ? true: false\" (click)=\"paginate(0)\" igxButton=\"icon\" igxRipple igxRippleCentered=\"true\">\n <igx-icon fontSet=\"material\">first_page</igx-icon>\n </button>\n <button [disabled]=\"isFirstPage || !pagerEnabled ? true: false\" (click)=\"previousPage()\" igxButton=\"icon\" igxRipple igxRippleCentered=\"true\">\n <igx-icon fontSet=\"material\">chevron_left</igx-icon>\n </button>\n <div class='igx-paginator__pager-text'>\n <span>{{ page + 1 }}</span>\n <span>&nbsp;of&nbsp;</span>\n <span>{{ totalPages }}</span>\n </div>\n <button [disabled]=\"isLastPage || !pagerEnabled ? true: false\" (click)=\"nextPage()\" igxRipple igxRippleCentered=\"true\" igxButton=\"icon\">\n <igx-icon fontSet=\"material\">chevron_right</igx-icon>\n </button>\n <button [disabled]=\"isLastPage || !pagerEnabled ? true: false\" (click)=\"paginate(totalPages - 1)\" igxButton=\"icon\" igxRipple\n igxRippleCentered=\"true\">\n <igx-icon fontSet=\"material\">last_page</igx-icon>\n </button>\n</div>\n" }), __param(0, Optional()), __param(0, Inject(DisplayDensityToken)), __metadata("design:paramtypes", [Object]) ], IgxPaginatorComponent); export { IgxPaginatorComponent }; let IgxPaginatorModule = class IgxPaginatorModule { }; IgxPaginatorModule = __decorate([ NgModule({ declarations: [IgxPaginatorComponent], exports: [IgxPaginatorComponent], imports: [CommonModule, IgxSelectModule, FormsModule, IgxIconModule, IgxButtonModule, IgxRippleModule] }) ], IgxPaginatorModule); export { IgxPaginatorModule }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lnbml0ZXVpLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvcGFnaW5hdG9yL3BhZ2luYXRvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEgsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEUsT0FBTyxFQUEwQixtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6SCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBTXhFLElBQWEscUJBQXFCLEdBQWxDLE1BQWEscUJBQXNCLFNBQVEsa0JBQWtCO0lBb0t6RCxZQUErRCxzQkFBOEM7UUFFekcsS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFGNkIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQTlKbkcsVUFBSyxHQUFHLENBQUMsQ0FBQztRQUdaLHdCQUFtQixHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbEQs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b250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgTmdNb2R1bGUsIE9wdGlvbmFsLCBJbmplY3QsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MgfSBmcm9tICcuLi9jb3JlL2kxOG4vcmVzb3VyY2VzJztcbmltcG9ydCB7IElEaXNwbGF5RGVuc2l0eU9wdGlvbnMsIERpc3BsYXlEZW5zaXR5VG9rZW4sIERpc3BsYXlEZW5zaXR5QmFzZSwgRGlzcGxheURlbnNpdHkgfSBmcm9tICcuLi9jb3JlL2Rpc3BsYXlEZW5zaXR5JztcbmltcG9ydCB7IElneFNlbGVjdE1vZHVsZSB9IGZyb20gJy4uL3NlbGVjdC9pbmRleCc7XG5pbXBvcnQgeyBJZ3hJY29uTW9kdWxlIH0gZnJvbSAnLi4vaWNvbi9pbmRleCc7XG5pbXBvcnQgeyBJZ3hCdXR0b25Nb2R1bGUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2J1dHRvbi9idXR0b24uZGlyZWN0aXZlJztcbmltcG9ydCB7IElneFJpcHBsZU1vZHVsZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvcmlwcGxlL3JpcHBsZS5kaXJlY3RpdmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2lneC1wYWdpbmF0b3InLFxuICAgIHRlbXBsYXRlVXJsOiAncGFnaW5hdG9yLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgSWd4UGFnaW5hdG9yQ29tcG9uZW50IGV4dGVuZHMgRGlzcGxheURlbnNpdHlCYXNlIHtcblxuICAgIC8qKlxuICAgICAqIFRvdGFsIHBhZ2VzIGNhbGN1bGF0ZWQgZnJvbSB0b3RhbFJlY29yZHMgYW5kIHBlclBhZ2VcbiAgICAgKi9cbiAgICBwdWJsaWMgdG90YWxQYWdlczogbnVtYmVyO1xuICAgIHByb3RlY3RlZCBfcGFnZSA9IDA7XG4gICAgcHJvdGVjdGVkIF90b3RhbFJlY29yZHM6IG51bWJlcjtcbiAgICBwcm90ZWN0ZWQgX3NlbGVjdE9wdGlvbnM7XG4gICAgcHJpdmF0ZSBkZWZhdWx0U2VsZWN0VmFsdWVzID0gWzUsIDEwLCAxNSwgMjUsIDUwLCAxMDAsIDUwMF07XG4gICAgcHJvdGVjdGVkIF9wZXJQYWdlID0gMTU7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjbGFzcyBvZiB0aGUgSWd4UGFnaW5hdG9yQ29tcG9uZW50IGJhc2VkXG4gICAgICogb24gdGhlIHByb3ZpZGVkIGRpc3BsYXlEZW5zaXR5LlxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LXBhZ2luYXRvci0tY29zeScpXG4gICAgcHVibGljIGdldCBjbGFzc0Nvc3koKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc3BsYXlEZW5zaXR5ID09PSBEaXNwbGF5RGVuc2l0eS5jb3N5O1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LXBhZ2luYXRvci0tY29tcGFjdCcpXG4gICAgcHVibGljIGdldCBjbGFzc0NvbXBhY3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc3BsYXlEZW5zaXR5ID09PSBEaXNwbGF5RGVuc2l0eS5jb21wYWN0O1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LXBhZ2luYXRvcicpXG4gICAgcHVibGljIGdldCBjbGFzc0NvbWZvcnRhYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNwbGF5RGVuc2l0eSA9PT0gRGlzcGxheURlbnNpdHkuY29tZm9ydGFibGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSwgc2V0cyBjdXJyZW50IHBhZ2Ugb2YgdGhlIGBJZ3hQYWdpbmF0b3JDb21wb25lbnRgLlxuICAgKiBUaGUgZGVmYXVsdCBpcyAwLlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGxldCBwYWdlID0gdGhpcy5wYWdpbmF0b3IucGFnZTtcbiAgICogYGBgXG4gICAqIEBtZW1iZXJvZiBJZ3hQYWdpbmF0b3JDb21wb25lbnRcbiAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHBhZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYWdlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgcGFnZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX3BhZ2UgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQodGhpcy5fcGFnZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSwgc2V0cyBudW1iZXIgb2YgdmlzaWJsZSBpdGVtcyBwZXIgcGFnZSBpbiB0aGUgYElneFBhZ2luYXRvckNvbXBvbmVudGAuXG4gICAqIFRoZSBkZWZhdWx0IGlzIDE1LlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGxldCBpdGVtc1BlclBhZ2UgPSB0aGlzLnBhZ2luYXRvci5wZXJQYWdlO1xuICAgKiBgYGBcbiAgICogQG1lbWJlcm9mIElneFBhZ2luYXRvckNvbXBvbmVudFxuICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgcGVyUGFnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BlclBhZ2U7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBwZXJQYWdlKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fcGVyUGFnZSA9IE51bWJlcih2YWx1ZSk7XG4gICAgICAgIHRoaXMucGVyUGFnZUNoYW5nZS5lbWl0KHRoaXMuX3BlclBhZ2UpO1xuICAgICAgICB0aGlzLl9zZWxlY3RPcHRpb25zID0gdGhpcy5zb3J0VW5pcXVlT3B0aW9ucyh0aGlzLmRlZmF1bHRTZWxlY3RWYWx1ZXMsIHRoaXMuX3BlclBhZ2UpO1xuICAgICAgICB0aGlzLnRvdGFsUGFnZXMgPSBNYXRoLmNlaWwodGhpcy50b3RhbFJlY29yZHMgLyB0aGlzLl9wZXJQYWdlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IHNldHMgdGhlIHRvdGFsIHJlY29yZHMuXG4gICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgKiBsZXQgdG90YWxSZWNvcmRzID0gdGhpcy5wYWdpbmF0b3IudG90YWxSZWNvcmRzO1xuICAgICogYGBgXG4gICAgKiBAbWVtYmVyb2YgSWd4UGFnaW5hdG9yQ29tcG9uZW50XG4gICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgdG90YWxSZWNvcmRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdG90YWxSZWNvcmRzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgdG90YWxSZWNvcmRzKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fdG90YWxSZWNvcmRzID0gdmFsdWU7XG4gICAgICAgIHRoaXMudG90YWxQYWdlcyA9IE1hdGguY2VpbCh0aGlzLnRvdGFsUmVjb3JkcyAvIHRoaXMucGVyUGFnZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBzZXRzIGN1c3RvbSBvcHRpb25zIGluIHRoZSBzZWxlY3Qgb2YgdGhlIHBhZ2luYXRvclxuICAgICogYGBgdHlwZXNjcmlwdFxuICAgICogbGV0IG9wdGlvbnMgPSB0aGlzLnBhZ2luYXRvci5zZWxlY3RPcHRpb25zO1xuICAgICogYGBgXG4gICAgKiBAbWVtYmVyb2YgSWd4UGFnaW5hdG9yQ29tcG9uZW50XG4gICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgc2VsZWN0T3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdE9wdGlvbnM7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBzZWxlY3RPcHRpb25zKHZhbHVlOiBBcnJheTxudW1iZXI+KSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdE9wdGlvbnMgPSB0aGlzLnNvcnRVbmlxdWVPcHRpb25zKHZhbHVlLCB0aGlzLl9wZXJQYWdlKTtcbiAgICAgICAgdGhpcy5kZWZhdWx0U2VsZWN0VmFsdWVzID0gWy4uLnRoaXMuX3NlbGVjdE9wdGlvbnNdO1xuICAgIH1cbiAgICAvKipcbiAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IHNldHMgaWYgdGhlIHBhZ2VyIGluIHRoZSBwYWdpbmF0b3Igc2hvdWxkIGJlIGVuYWJsZWQuXG4gICAgKiBgYGBodG1sXG4gICAgKiA8aWd4LXBhZ2luYXRvciBbcGFnZXJFbmFibGVkXT1cInRydWVcIj48L2lneC1wYWdpbmF0b3I+XG4gICAgKiBgYGBcbiAgICAqIEBtZW1iZXJvZiBJZ3hQYWdpbmF0b3JDb21wb25lbnRcbiAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHBhZ2VyRW5hYmxlZCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IHNldHMgaWYgdGhlIHBhZ2VyIGluIHRoZSBwYWdpbmF0b3Igc2hvdWxkIGJlIGhpZGRlbi5cbiAgICAqIGBgYGh0bWxcbiAgICAqIDxpZ3gtcGFnaW5hdG9yIFtwYWdlckhpZGRlbl09XCJ0cnVlXCI+PC9pZ3gtcGFnaW5hdG9yPlxuICAgICogYGBgXG4gICAgKiBAbWVtYmVyb2YgSWd4UGFnaW5hdG9yQ29tcG9uZW50XG4gICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBwYWdlckhpZGRlbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBzZXRzIGlmIHRoZSBkcm9wZG93biBpbiB0aGUgcGFnaW5hdG9yIHNob3VsZCBiZSBlbmFibGVkLlxuICAgICogYGBgaHRtbFxuICAgICogPGlneC1wYWdpbmF0b3IgW2Ryb3Bkb3duRW5hYmxlZF09XCJ0cnVlXCI+PC9pZ3gtcGFnaW5hdG9yPlxuICAgICogYGBgXG4gICAgKiBAbWVtYmVyb2YgSWd4UGFnaW5hdG9yQ29tcG9uZW50XG4gICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkcm9wZG93bkVuYWJsZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBzZXRzIGlmIHRoZSBkcm9wZG93biBpbiB0aGUgcGFnaW5hdG9yIHNob3VsZCBiZSBoaWRkZW4uXG4gICAgKiBgYGBodG1sXG4gICAgKiA8aWd4LXBhZ2luYXRvciBbZHJvcGRvd25IaWRkZW5dPVwidHJ1ZVwiPjwvaWd4LXBhZ2luYXRvcj5cbiAgICAqIGBgYFxuICAgICogQG1lbWJlcm9mIElneFBhZ2luYXRvckNvbXBvbmVudFxuICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZHJvcGRvd25IaWRkZW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICogQW4gQElucHV0IHByb3BlcnR5LCBzZXRzIG51bWJlciBvZiBsYWJlbCBvZiB0aGUgc2VsZWN0LlxuICAgICogVGhlIGRlZmF1bHQgaXMgJ0l0ZW1zIHBlciBwYWdlJyBsb2NhbGl6ZWQgc3RyaW5nLlxuICAgICogYGBgaHRtbFxuICAgICogPGlneC1wYWdpbmF0b3IgbGFiZWw9XCJNeSBjdXN0b20gbGFiZWxcIj48L2lneC1wYWdpbmF0b3I+XG4gICAgKiBgYGBcbiAgICAqIEBtZW1iZXJvZiBJZ3hQYWdpbmF0b3JDb21wb25lbnRcbiAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNlbGVjdExhYmVsID0gQ3VycmVudFJlc291cmNlU3RyaW5ncy5QYWdpbmF0b3JSZXNTdHJpbmdzLmlneF9wYWdpbmF0b3JfbGFiZWw7XG5cbiAgICAvKipcbiAgICAgKkFuIGV2ZW50IHRoYXQgaXMgZW1pdHRlZCB3aGVuIHRoZSBzZWxlY3QgaW4gdGhlIGBJZ3hQYWdpbmF0b3JDb21wb25lbnRgIGNoYW5nZXMgaXRzIHZhbHVlLlxuICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHBlclBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgICAvKipcbiAgICAgKkFuIGV2ZW50IHRoYXQgaXMgZW1pdHRlZCB3aGVuIHRoZSBwYWdpbmF0aW5nIGlzIHVzZWQuXG4gICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChEaXNwbGF5RGVuc2l0eVRva2VuKSBwcm90ZWN0ZWQgX2Rpc3BsYXlEZW5zaXR5T3B0aW9uczogSURpc3BsYXlEZW5zaXR5T3B0aW9uc1xuICAgICkge1xuICAgICAgICBzdXBlcihfZGlzcGxheURlbnNpdHlPcHRpb25zKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGlmIHRoZSBjdXJyZW50IHBhZ2UgaXMgdGhlIGxhc3QgcGFnZS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgbGFzdFBhZ2UgPSB0aGlzLnBhZ2luYXRvci5pc0xhc3RQYWdlO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGdldCBpc0xhc3RQYWdlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wYWdlICsgMSA+PSB0aGlzLnRvdGFsUGFnZXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBpZiB0aGUgY3VycmVudCBwYWdlIGlzIHRoZSBmaXJzdCBwYWdlLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBsYXN0UGFnZSA9IHRoaXMucGFnaW5hdG9yLmlzRmlyc3RQYWdlO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGdldCBpc0ZpcnN0UGFnZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFnZSA9PT0gMDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNvcnRVbmlxdWVPcHRpb25zKHZhbHVlczogQXJyYXk8bnVtYmVyPiwgbmV3T3B0aW9uOiBudW1iZXIpOiBudW1iZXJbXSB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoWy4uLnZhbHVlcywgbmV3T3B0aW9uXSkpLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIERpc3BsYXlEZW5zaXR5IGZvciB0aGUgPHNlbGVjdD4gaW5zaWRlIHRoZSBwYWdpbmF0b3JcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHBhZ2luYXRvclNlbGVjdERpc3BsYXlEZW5zaXR5KCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmRpc3BsYXlEZW5zaXR5ID09PSBEaXNwbGF5RGVuc2l0eS5jb21mb3J0YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIERpc3BsYXlEZW5zaXR5LmNvc3k7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIERpc3BsYXlEZW5zaXR5LmNvbXBhY3Q7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdvZXMgdG8gdGhlIG5leHQgcGFnZSBvZiB0aGUgYElneFBhZ2luYXRvckNvbXBvbmVudGAsIGlmIHRoZSBwYWdpbmF0b3IgaXMgbm90IGFscmVhZHkgYXQgdGhlIGxhc3QgcGFnZS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5wYWdpbmF0b3IubmV4dFBhZ2UoKTtcbiAgICAgKiBgYGBcblx0ICogQG1lbWJlcm9mIElneFBhZ2luYXRvckNvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBuZXh0UGFnZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzTGFzdFBhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZSArPSAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdvZXMgdG8gdGhlIHByZXZpb3VzIHBhZ2Ugb2YgdGhlIGBJZ3hQYWdpbmF0b3JDb21wb25lbnRgLCBpZiB0aGUgcGFnaW5hdG9yIGlzIG5vdCBhbHJlYWR5IGF0IHRoZSBmaXJzdCBwYWdlLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLnBhZ2luYXRvci5wcmV2aW91c1BhZ2UoKTtcbiAgICAgKiBgYGBcblx0ICogQG1lbWJlcm9mIElneFBhZ2luYXRvckNvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBwcmV2aW91c1BhZ2UoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5pc0ZpcnN0UGFnZSkge1xuICAgICAgICAgICAgdGhpcy5wYWdlIC09IDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogR29lcyB0byB0aGUgZGVzaXJlZCBwYWdlIGluZGV4LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLnBhZ2lhbnRvci5wYWdpbmF0ZSgxKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAcGFyYW0gdmFsXG4gICAgICogQG1lbWJlcm9mIElneFBhZ2luYXRvckNvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBwYWdpbmF0ZSh2YWw6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodmFsIDwgMCB8fCB2YWwgPiB0aGlzLnRvdGFsUGFnZXMgLSAxKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wYWdlID0gdmFsO1xuICAgIH1cbn1cblxuQE5nTW9kdWxlKHtcbiAgICBkZWNsYXJhdGlvbnM6IFtJZ3hQYWdpbmF0b3JDb21wb25lbnRdLFxuICAgIGV4cG9ydHM6IFtJZ3hQYWdpbmF0b3JDb21wb25lbnRdLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIElneFNlbGVjdE1vZHVsZSwgRm9ybXNNb2R1bGUsIElneEljb25Nb2R1bGUsIElneEJ1dHRvbk1vZHVsZSwgSWd4UmlwcGxlTW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hQYWdpbmF0b3JNb2R1bGUgeyB9XG4iXX0=