UNPKG

ng-zorro-antd

Version:

An enterprise-class UI components based on Ant Design and Angular

281 lines 23.8 kB
/** * @fileoverview added by tsickle * Generated from: pagination-default.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { __read, __spread } from "tslib"; /** * @license * Copyright Alibaba.com All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE */ import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, Output, Renderer2, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core'; var NzPaginationDefaultComponent = /** @class */ (function () { function NzPaginationDefaultComponent(renderer, elementRef) { this.nzSize = 'default'; this.showTotal = null; this.disabled = false; this.locale = {}; this.showSizeChanger = false; this.showQuickJumper = false; this.total = 0; this.pageIndex = 1; this.pageSize = 10; this.pageSizeOptions = [10, 20, 30, 40]; this.pageIndexChange = new EventEmitter(); this.pageSizeChange = new EventEmitter(); this.ranges = [0, 0]; this.listOfPageItem = []; renderer.removeChild(renderer.parentNode(elementRef.nativeElement), elementRef.nativeElement); } /** * @param {?} index * @return {?} */ NzPaginationDefaultComponent.prototype.jumpPage = /** * @param {?} index * @return {?} */ function (index) { this.onPageIndexChange(index); }; /** * @param {?} diff * @return {?} */ NzPaginationDefaultComponent.prototype.jumpDiff = /** * @param {?} diff * @return {?} */ function (diff) { this.jumpPage(this.pageIndex + diff); }; /** * @param {?} _ * @param {?} value * @return {?} */ NzPaginationDefaultComponent.prototype.trackByPageItem = /** * @param {?} _ * @param {?} value * @return {?} */ function (_, value) { return value.type + "-" + value.index; }; /** * @param {?} index * @return {?} */ NzPaginationDefaultComponent.prototype.onPageIndexChange = /** * @param {?} index * @return {?} */ function (index) { this.pageIndexChange.next(index); }; /** * @param {?} size * @return {?} */ NzPaginationDefaultComponent.prototype.onPageSizeChange = /** * @param {?} size * @return {?} */ function (size) { this.pageSizeChange.next(size); }; /** * @param {?} total * @param {?} pageSize * @return {?} */ NzPaginationDefaultComponent.prototype.getLastIndex = /** * @param {?} total * @param {?} pageSize * @return {?} */ function (total, pageSize) { return Math.ceil(total / pageSize); }; /** * @return {?} */ NzPaginationDefaultComponent.prototype.buildIndexes = /** * @return {?} */ function () { /** @type {?} */ var lastIndex = this.getLastIndex(this.total, this.pageSize); this.listOfPageItem = this.getListOfPageItem(this.pageIndex, lastIndex); }; /** * @param {?} pageIndex * @param {?} lastIndex * @return {?} */ NzPaginationDefaultComponent.prototype.getListOfPageItem = /** * @param {?} pageIndex * @param {?} lastIndex * @return {?} */ function (pageIndex, lastIndex) { /** @type {?} */ var concatWithPrevNext = (/** * @param {?} listOfPage * @return {?} */ function (listOfPage) { /** @type {?} */ var prevItem = { type: 'prev', disabled: pageIndex === 1 }; /** @type {?} */ var nextItem = { type: 'next', disabled: pageIndex === lastIndex }; return __spread([prevItem], listOfPage, [nextItem]); }); /** @type {?} */ var generatePage = (/** * @param {?} start * @param {?} end * @return {?} */ function (start, end) { /** @type {?} */ var list = []; for (var i = start; i <= end; i++) { list.push({ index: i, type: 'page' }); } return list; }); if (lastIndex <= 9) { return concatWithPrevNext(generatePage(1, lastIndex)); } else { /** @type {?} */ var generateRangeItem = (/** * @param {?} selected * @param {?} last * @return {?} */ function (selected, last) { /** @type {?} */ var listOfRange = []; /** @type {?} */ var prevFiveItem = { type: 'prev_5' }; /** @type {?} */ var nextFiveItem = { type: 'next_5' }; /** @type {?} */ var firstPageItem = generatePage(1, 1); /** @type {?} */ var lastPageItem = generatePage(lastIndex, lastIndex); if (selected < 4) { listOfRange = __spread(generatePage(2, 5), [nextFiveItem]); } else if (selected < last - 3) { listOfRange = __spread([prevFiveItem], generatePage(selected - 2, selected + 2), [nextFiveItem]); } else { listOfRange = __spread([prevFiveItem], generatePage(last - 4, last - 1)); } return __spread(firstPageItem, listOfRange, lastPageItem); }); return concatWithPrevNext(generateRangeItem(pageIndex, lastIndex)); } }; /** * @param {?} changes * @return {?} */ NzPaginationDefaultComponent.prototype.ngOnChanges = /** * @param {?} changes * @return {?} */ function (changes) { var pageIndex = changes.pageIndex, pageSize = changes.pageSize, total = changes.total; if (pageIndex || pageSize || total) { this.ranges = [(this.pageIndex - 1) * this.pageSize + 1, Math.min(this.pageIndex * this.pageSize, this.total)]; this.buildIndexes(); } }; NzPaginationDefaultComponent.decorators = [ { type: Component, args: [{ selector: 'nz-pagination-default', preserveWhitespaces: false, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "\n <ng-template #containerTemplate>\n <li class=\"ant-pagination-total-text\" *ngIf=\"showTotal\">\n <ng-template [ngTemplateOutlet]=\"showTotal\" [ngTemplateOutletContext]=\"{ $implicit: total, range: ranges }\"></ng-template>\n </li>\n <li\n *ngFor=\"let page of listOfPageItem; trackBy: trackByPageItem\"\n nz-pagination-item\n [locale]=\"locale\"\n [type]=\"page.type\"\n [index]=\"page.index\"\n [disabled]=\"page.disabled\"\n [itemRender]=\"itemRender\"\n [active]=\"pageIndex === page.index\"\n (gotoIndex)=\"jumpPage($event)\"\n (diffIndex)=\"jumpDiff($event)\"\n ></li>\n <div\n nz-pagination-options\n *ngIf=\"showQuickJumper || showSizeChanger\"\n [total]=\"total\"\n [locale]=\"locale\"\n [disabled]=\"disabled\"\n [nzSize]=\"nzSize\"\n [showSizeChanger]=\"showSizeChanger\"\n [showQuickJumper]=\"showQuickJumper\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (pageIndexChange)=\"onPageIndexChange($event)\"\n (pageSizeChange)=\"onPageSizeChange($event)\"\n ></div>\n </ng-template>\n " }] } ]; /** @nocollapse */ NzPaginationDefaultComponent.ctorParameters = function () { return [ { type: Renderer2 }, { type: ElementRef } ]; }; NzPaginationDefaultComponent.propDecorators = { template: [{ type: ViewChild, args: ['containerTemplate', { static: true },] }], nzSize: [{ type: Input }], itemRender: [{ type: Input }], showTotal: [{ type: Input }], disabled: [{ type: Input }], locale: [{ type: Input }], showSizeChanger: [{ type: Input }], showQuickJumper: [{ type: Input }], total: [{ type: Input }], pageIndex: [{ type: Input }], pageSize: [{ type: Input }], pageSizeOptions: [{ type: Input }], pageIndexChange: [{ type: Output }], pageSizeChange: [{ type: Output }] }; return NzPaginationDefaultComponent; }()); export { NzPaginationDefaultComponent }; if (false) { /** @type {?} */ NzPaginationDefaultComponent.prototype.template; /** @type {?} */ NzPaginationDefaultComponent.prototype.nzSize; /** @type {?} */ NzPaginationDefaultComponent.prototype.itemRender; /** @type {?} */ NzPaginationDefaultComponent.prototype.showTotal; /** @type {?} */ NzPaginationDefaultComponent.prototype.disabled; /** @type {?} */ NzPaginationDefaultComponent.prototype.locale; /** @type {?} */ NzPaginationDefaultComponent.prototype.showSizeChanger; /** @type {?} */ NzPaginationDefaultComponent.prototype.showQuickJumper; /** @type {?} */ NzPaginationDefaultComponent.prototype.total; /** @type {?} */ NzPaginationDefaultComponent.prototype.pageIndex; /** @type {?} */ NzPaginationDefaultComponent.prototype.pageSize; /** @type {?} */ NzPaginationDefaultComponent.prototype.pageSizeOptions; /** @type {?} */ NzPaginationDefaultComponent.prototype.pageIndexChange; /** @type {?} */ NzPaginationDefaultComponent.prototype.pageSizeChange; /** @type {?} */ NzPaginationDefaultComponent.prototype.ranges; /** @type {?} */ NzPaginationDefaultComponent.prototype.listOfPageItem; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi1kZWZhdWx0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXpvcnJvLWFudGQvcGFnaW5hdGlvbi8iLCJzb3VyY2VzIjpbInBhZ2luYXRpb24tZGVmYXVsdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQVFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBRVQsV0FBVyxFQUNYLFNBQVMsRUFDVCxpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFLdkI7SUEwREUsc0NBQVksUUFBbUIsRUFBRSxVQUFzQjtRQWhCOUMsV0FBTSxHQUF3QixTQUFTLENBQUM7UUFFeEMsY0FBUyxHQUF1RSxJQUFJLENBQUM7UUFDckYsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixXQUFNLEdBQWMsRUFBRSxDQUFDO1FBQ3ZCLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLFVBQUssR0FBRyxDQUFDLENBQUM7UUFDVixjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNkLG9CQUFlLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN6QixvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDN0MsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQy9ELFdBQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoQixtQkFBYyxHQUE4QyxFQUFFLENBQUM7UUFHN0QsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsRUFBRSxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7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USxFQUFFLHV1Q0FpQ1Q7aUJBQ0Y7Ozs7Z0JBakRDLFNBQVM7Z0JBTFQsVUFBVTs7OzJCQXdEVCxTQUFTLFNBQUMsbUJBQW1CLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO3lCQUMvQyxLQUFLOzZCQUNMLEtBQUs7NEJBQ0wsS0FBSzsyQkFDTCxLQUFLO3lCQUNMLEtBQUs7a0NBQ0wsS0FBSztrQ0FDTCxLQUFLO3dCQUNMLEtBQUs7NEJBQ0wsS0FBSzsyQkFDTCxLQUFLO2tDQUNMLEtBQUs7a0NBQ0wsTUFBTTtpQ0FDTixNQUFNOztJQTRGVCxtQ0FBQztDQUFBLEFBbEpELElBa0pDO1NBMUdZLDRCQUE0Qjs7O0lBQ3ZDLGdEQUFtRjs7SUFDbkYsOENBQWlEOztJQUNqRCxrREFBOEQ7O0lBQzlELGlEQUE4Rjs7SUFDOUYsZ0RBQTBCOztJQUMxQiw4Q0FBZ0M7O0lBQ2hDLHVEQUFpQzs7SUFDakMsdURBQWlDOztJQUNqQyw2Q0FBbUI7O0lBQ25CLGlEQUF1Qjs7SUFDdkIsZ0RBQXVCOztJQUN2Qix1REFBNEM7O0lBQzVDLHVEQUFnRTs7SUFDaEUsc0RBQStEOztJQUMvRCw4Q0FBZ0I7O0lBQ2hCLHNEQUErRCIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBBbGliYWJhLmNvbSBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9ORy1aT1JSTy9uZy16b3Jyby1hbnRkL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgUmVuZGVyZXIyLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE56U2FmZUFueSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS90eXBlcyc7XG5pbXBvcnQgeyBOelBhZ2luYXRpb25JdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9wYWdpbmF0aW9uLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IFBhZ2luYXRpb25JdGVtUmVuZGVyQ29udGV4dCB9IGZyb20gJy4vcGFnaW5hdGlvbi50eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ256LXBhZ2luYXRpb24tZGVmYXVsdCcsXG4gIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bmctdGVtcGxhdGUgI2NvbnRhaW5lclRlbXBsYXRlPlxuICAgICAgPGxpIGNsYXNzPVwiYW50LXBhZ2luYXRpb24tdG90YWwtdGV4dFwiICpuZ0lmPVwic2hvd1RvdGFsXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJzaG93VG90YWxcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHRvdGFsLCByYW5nZTogcmFuZ2VzIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgPC9saT5cbiAgICAgIDxsaVxuICAgICAgICAqbmdGb3I9XCJsZXQgcGFnZSBvZiBsaXN0T2ZQYWdlSXRlbTsgdHJhY2tCeTogdHJhY2tCeVBhZ2VJdGVtXCJcbiAgICAgICAgbnotcGFnaW5hdGlvbi1pdGVtXG4gICAgICAgIFtsb2NhbGVdPVwibG9jYWxlXCJcbiAgICAgICAgW3R5cGVdPVwicGFnZS50eXBlXCJcbiAgICAgICAgW2luZGV4XT1cInBhZ2UuaW5kZXhcIlxuICAgICAgICBbZGlzYWJsZWRdPVwicGFnZS5kaXNhYmxlZFwiXG4gICAgICAgIFtpdGVtUmVuZGVyXT1cIml0ZW1SZW5kZXJcIlxuICAgICAgICBbYWN0aXZlXT1cInBhZ2VJbmRleCA9PT0gcGFnZS5pbmRleFwiXG4gICAgICAgIChnb3RvSW5kZXgpPVwianVtcFBhZ2UoJGV2ZW50KVwiXG4gICAgICAgIChkaWZmSW5kZXgpPVwianVtcERpZmYoJGV2ZW50KVwiXG4gICAgICA+PC9saT5cbiAgICAgIDxkaXZcbiAgICAgICAgbnotcGFnaW5hdGlvbi1vcHRpb25zXG4gICAgICAgICpuZ0lmPVwic2hvd1F1aWNrSnVtcGVyIHx8IHNob3dTaXplQ2hhbmdlclwiXG4gICAgICAgIFt0b3RhbF09XCJ0b3RhbFwiXG4gICAgICAgIFtsb2NhbGVdPVwibG9jYWxlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW256U2l6ZV09XCJuelNpemVcIlxuICAgICAgICBbc2hvd1NpemVDaGFuZ2VyXT1cInNob3dTaXplQ2hhbmdlclwiXG4gICAgICAgIFtzaG93UXVpY2tKdW1wZXJdPVwic2hvd1F1aWNrSnVtcGVyXCJcbiAgICAgICAgW3BhZ2VJbmRleF09XCJwYWdlSW5kZXhcIlxuICAgICAgICBbcGFnZVNpemVdPVwicGFnZVNpemVcIlxuICAgICAgICBbcGFnZVNpemVPcHRpb25zXT1cInBhZ2VTaXplT3B0aW9uc1wiXG4gICAgICAgIChwYWdlSW5kZXhDaGFuZ2UpPVwib25QYWdlSW5kZXhDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChwYWdlU2l6ZUNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIlxuICAgICAgPjwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIGBcbn0pXG5leHBvcnQgY2xhc3MgTnpQYWdpbmF0aW9uRGVmYXVsdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lclRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSkgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPE56U2FmZUFueT47XG4gIEBJbnB1dCgpIG56U2l6ZTogJ2RlZmF1bHQnIHwgJ3NtYWxsJyA9ICdkZWZhdWx0JztcbiAgQElucHV0KCkgaXRlbVJlbmRlcjogVGVtcGxhdGVSZWY8UGFnaW5hdGlvbkl0ZW1SZW5kZXJDb250ZXh0PjtcbiAgQElucHV0KCkgc2hvd1RvdGFsOiBUZW1wbGF0ZVJlZjx7ICRpbXBsaWNpdDogbnVtYmVyOyByYW5nZTogW251bWJlciwgbnVtYmVyXSB9PiB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBsb2NhbGU6IE56U2FmZUFueSA9IHt9O1xuICBASW5wdXQoKSBzaG93U2l6ZUNoYW5nZXIgPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd1F1aWNrSnVtcGVyID0gZmFsc2U7XG4gIEBJbnB1dCgpIHRvdGFsID0gMDtcbiAgQElucHV0KCkgcGFnZUluZGV4ID0gMTtcbiAgQElucHV0KCkgcGFnZVNpemUgPSAxMDtcbiAgQElucHV0KCkgcGFnZVNpemVPcHRpb25zID0gWzEwLCAyMCwgMzAsIDQwXTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHBhZ2VJbmRleENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgcGFnZVNpemVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgcmFuZ2VzID0gWzAsIDBdO1xuICBsaXN0T2ZQYWdlSXRlbTogQXJyYXk8UGFydGlhbDxOelBhZ2luYXRpb25JdGVtQ29tcG9uZW50Pj4gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihyZW5kZXJlcjogUmVuZGVyZXIyLCBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7XG4gICAgcmVuZGVyZXIucmVtb3ZlQ2hpbGQocmVuZGVyZXIucGFyZW50Tm9kZShlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLCBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAganVtcFBhZ2UoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMub25QYWdlSW5kZXhDaGFuZ2UoaW5kZXgpO1xuICB9XG5cbiAganVtcERpZmYoZGlmZjogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5qdW1wUGFnZSh0aGlzLnBhZ2VJbmRleCArIGRpZmYpO1xuICB9XG5cbiAgdHJhY2tCeVBhZ2VJdGVtKF86IG51bWJlciwgdmFsdWU6IFBhcnRpYWw8TnpQYWdpbmF0aW9uSXRlbUNvbXBvbmVudD4pOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt2YWx1ZS50eXBlfS0ke3ZhbHVlLmluZGV4fWA7XG4gIH1cblxuICBvblBhZ2VJbmRleENoYW5nZShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5wYWdlSW5kZXhDaGFuZ2UubmV4dChpbmRleCk7XG4gIH1cblxuICBvblBhZ2VTaXplQ2hhbmdlKHNpemU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucGFnZVNpemVDaGFuZ2UubmV4dChzaXplKTtcbiAgfVxuXG4gIGdldExhc3RJbmRleCh0b3RhbDogbnVtYmVyLCBwYWdlU2l6ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5jZWlsKHRvdGFsIC8gcGFnZVNpemUpO1xuICB9XG5cbiAgYnVpbGRJbmRleGVzKCk6IHZvaWQge1xuICAgIGNvbnN0IGxhc3RJbmRleCA9IHRoaXMuZ2V0TGFzdEluZGV4KHRoaXMudG90YWwsIHRoaXMucGFnZVNpemUpO1xuICAgIHRoaXMubGlzdE9mUGFnZUl0ZW0gPSB0aGlzLmdldExpc3RPZlBhZ2VJdGVtKHRoaXMucGFnZUluZGV4LCBsYXN0SW5kZXgpO1xuICB9XG5cbiAgZ2V0TGlzdE9mUGFnZUl0ZW0ocGFnZUluZGV4OiBudW1iZXIsIGxhc3RJbmRleDogbnVtYmVyKTogQXJyYXk8UGFydGlhbDxOelBhZ2luYXRpb25JdGVtQ29tcG9uZW50Pj4ge1xuICAgIGNvbnN0IGNvbmNhdFdpdGhQcmV2TmV4dCA9IChsaXN0T2ZQYWdlOiBBcnJheTxQYXJ0aWFsPE56UGFnaW5hdGlvbkl0ZW1Db21wb25lbnQ+PikgPT4ge1xuICAgICAgY29uc3QgcHJldkl0ZW0gPSB7XG4gICAgICAgIHR5cGU6ICdwcmV2JyxcbiAgICAgICAgZGlzYWJsZWQ6IHBhZ2VJbmRleCA9PT0gMVxuICAgICAgfTtcbiAgICAgIGNvbnN0IG5leHRJdGVtID0ge1xuICAgICAgICB0eXBlOiAnbmV4dCcsXG4gICAgICAgIGRpc2FibGVkOiBwYWdlSW5kZXggPT09IGxhc3RJbmRleFxuICAgICAgfTtcbiAgICAgIHJldHVybiBbcHJldkl0ZW0sIC4uLmxpc3RPZlBhZ2UsIG5leHRJdGVtXTtcbiAgICB9O1xuICAgIGNvbnN0IGdlbmVyYXRlUGFnZSA9IChzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IEFycmF5PFBhcnRpYWw8TnpQYWdpbmF0aW9uSXRlbUNvbXBvbmVudD4+ID0+IHtcbiAgICAgIGNvbnN0IGxpc3QgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8PSBlbmQ7IGkrKykge1xuICAgICAgICBsaXN0LnB1c2goe1xuICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgIHR5cGU6ICdwYWdlJ1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0O1xuICAgIH07XG4gICAgaWYgKGxhc3RJbmRleCA8PSA5KSB7XG4gICAgICByZXR1cm4gY29uY2F0V2l0aFByZXZOZXh0KGdlbmVyYXRlUGFnZSgxLCBsYXN0SW5kZXgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZ2VuZXJhdGVSYW5nZUl0ZW0gPSAoc2VsZWN0ZWQ6IG51bWJlciwgbGFzdDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGxldCBsaXN0T2ZSYW5nZSA9IFtdO1xuICAgICAgICBjb25zdCBwcmV2Rml2ZUl0ZW0gPSB7XG4gICAgICAgICAgdHlwZTogJ3ByZXZfNSdcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbmV4dEZpdmVJdGVtID0ge1xuICAgICAgICAgIHR5cGU6ICduZXh0XzUnXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGZpcnN0UGFnZUl0ZW0gPSBnZW5lcmF0ZVBhZ2UoMSwgMSk7XG4gICAgICAgIGNvbnN0IGxhc3RQYWdlSXRlbSA9IGdlbmVyYXRlUGFnZShsYXN0SW5kZXgsIGxhc3RJbmRleCk7XG4gICAgICAgIGlmIChzZWxlY3RlZCA8IDQpIHtcbiAgICAgICAgICBsaXN0T2ZSYW5nZSA9IFsuLi5nZW5lcmF0ZVBhZ2UoMiwgNSksIG5leHRGaXZlSXRlbV07XG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWQgPCBsYXN0IC0gMykge1xuICAgICAgICAgIGxpc3RPZlJhbmdlID0gW3ByZXZGaXZlSXRlbSwgLi4uZ2VuZXJhdGVQYWdlKHNlbGVjdGVkIC0gMiwgc2VsZWN0ZWQgKyAyKSwgbmV4dEZpdmVJdGVtXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsaXN0T2ZSYW5nZSA9IFtwcmV2Rml2ZUl0ZW0sIC4uLmdlbmVyYXRlUGFnZShsYXN0IC0gNCwgbGFzdCAtIDEpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gWy4uLmZpcnN0UGFnZUl0ZW0sIC4uLmxpc3RPZlJhbmdlLCAuLi5sYXN0UGFnZUl0ZW1dO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBjb25jYXRXaXRoUHJldk5leHQoZ2VuZXJhdGVSYW5nZUl0ZW0ocGFnZUluZGV4LCBsYXN0SW5kZXgpKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgY29uc3QgeyBwYWdlSW5kZXgsIHBhZ2VTaXplLCB0b3RhbCB9ID0gY2hhbmdlcztcbiAgICBpZiAocGFnZUluZGV4IHx8IHBhZ2VTaXplIHx8IHRvdGFsKSB7XG4gICAgICB0aGlzLnJhbmdlcyA9IFsodGhpcy5wYWdlSW5kZXggLSAxKSAqIHRoaXMucGFnZVNpemUgKyAxLCBNYXRoLm1pbih0aGlzLnBhZ2VJbmRleCAqIHRoaXMucGFnZVNpemUsIHRoaXMudG90YWwpXTtcbiAgICAgIHRoaXMuYnVpbGRJbmRleGVzKCk7XG4gICAgfVxuICB9XG59XG4iXX0=