ng-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
277 lines • 22.4 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: pagination-default.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @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';
export class NzPaginationDefaultComponent {
/**
* @param {?} renderer
* @param {?} elementRef
*/
constructor(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 {?}
*/
jumpPage(index) {
this.onPageIndexChange(index);
}
/**
* @param {?} diff
* @return {?}
*/
jumpDiff(diff) {
this.jumpPage(this.pageIndex + diff);
}
/**
* @param {?} _
* @param {?} value
* @return {?}
*/
trackByPageItem(_, value) {
return `${value.type}-${value.index}`;
}
/**
* @param {?} index
* @return {?}
*/
onPageIndexChange(index) {
this.pageIndexChange.next(index);
}
/**
* @param {?} size
* @return {?}
*/
onPageSizeChange(size) {
this.pageSizeChange.next(size);
}
/**
* @param {?} total
* @param {?} pageSize
* @return {?}
*/
getLastIndex(total, pageSize) {
return Math.ceil(total / pageSize);
}
/**
* @return {?}
*/
buildIndexes() {
/** @type {?} */
const lastIndex = this.getLastIndex(this.total, this.pageSize);
this.listOfPageItem = this.getListOfPageItem(this.pageIndex, lastIndex);
}
/**
* @param {?} pageIndex
* @param {?} lastIndex
* @return {?}
*/
getListOfPageItem(pageIndex, lastIndex) {
/** @type {?} */
const concatWithPrevNext = (/**
* @param {?} listOfPage
* @return {?}
*/
(listOfPage) => {
/** @type {?} */
const prevItem = {
type: 'prev',
disabled: pageIndex === 1
};
/** @type {?} */
const nextItem = {
type: 'next',
disabled: pageIndex === lastIndex
};
return [prevItem, ...listOfPage, nextItem];
});
/** @type {?} */
const generatePage = (/**
* @param {?} start
* @param {?} end
* @return {?}
*/
(start, end) => {
/** @type {?} */
const list = [];
for (let i = start; i <= end; i++) {
list.push({
index: i,
type: 'page'
});
}
return list;
});
if (lastIndex <= 9) {
return concatWithPrevNext(generatePage(1, lastIndex));
}
else {
/** @type {?} */
const generateRangeItem = (/**
* @param {?} selected
* @param {?} last
* @return {?}
*/
(selected, last) => {
/** @type {?} */
let listOfRange = [];
/** @type {?} */
const prevFiveItem = {
type: 'prev_5'
};
/** @type {?} */
const nextFiveItem = {
type: 'next_5'
};
/** @type {?} */
const firstPageItem = generatePage(1, 1);
/** @type {?} */
const lastPageItem = generatePage(lastIndex, lastIndex);
if (selected < 4) {
listOfRange = [...generatePage(2, 5), nextFiveItem];
}
else if (selected < last - 3) {
listOfRange = [prevFiveItem, ...generatePage(selected - 2, selected + 2), nextFiveItem];
}
else {
listOfRange = [prevFiveItem, ...generatePage(last - 4, last - 1)];
}
return [...firstPageItem, ...listOfRange, ...lastPageItem];
});
return concatWithPrevNext(generateRangeItem(pageIndex, lastIndex));
}
}
/**
* @param {?} changes
* @return {?}
*/
ngOnChanges(changes) {
const { pageIndex, pageSize, total } = changes;
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: `
<ng-template #containerTemplate>
<li class="ant-pagination-total-text" *ngIf="showTotal">
<ng-template [ngTemplateOutlet]="showTotal" [ngTemplateOutletContext]="{ $implicit: total, range: ranges }"></ng-template>
</li>
<li
*ngFor="let page of listOfPageItem; trackBy: trackByPageItem"
nz-pagination-item
[locale]="locale"
[type]="page.type"
[index]="page.index"
[disabled]="page.disabled"
[itemRender]="itemRender"
[active]="pageIndex === page.index"
(gotoIndex)="jumpPage($event)"
(diffIndex)="jumpDiff($event)"
></li>
<div
nz-pagination-options
*ngIf="showQuickJumper || showSizeChanger"
[total]="total"
[locale]="locale"
[disabled]="disabled"
[nzSize]="nzSize"
[showSizeChanger]="showSizeChanger"
[showQuickJumper]="showQuickJumper"
[pageIndex]="pageIndex"
[pageSize]="pageSize"
[pageSizeOptions]="pageSizeOptions"
(pageIndexChange)="onPageIndexChange($event)"
(pageSizeChange)="onPageSizeChange($event)"
></div>
</ng-template>
`
}] }
];
/** @nocollapse */
NzPaginationDefaultComponent.ctorParameters = () => [
{ 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 }]
};
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi1kZWZhdWx0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXpvcnJvLWFudGQvcGFnaW5hdGlvbi8iLCJzb3VyY2VzIjpbInBhZ2luYXRpb24tZGVmYXVsdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBUUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFFVCxXQUFXLEVBQ1gsU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQTZDdkIsTUFBTSxPQUFPLDRCQUE0Qjs7Ozs7SUFrQnZDLFlBQVksUUFBbUIsRUFBRSxVQUFzQjtRQWhCOUMsV0FBTSxHQUF3QixTQUFTLENBQUM7UUFFeEMsY0FBUyxHQUF1RSxJQUFJLENBQUM7UUFDckYsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixXQUFNLEdBQWMsRUFBRSxDQUFDO1FBQ3ZCLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLFVBQUssR0FBRyxDQUFDLENBQUM7UUFDVixjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNkLG9CQUFlLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN6QixvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDN0MsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQy9ELFdBQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoQixtQkFBYyxHQUE4QyxFQUFFLENBQUM7UUFHN0QsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsRUFBRSxVQUFV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LENBQUMsSUFBSTtnQkFDckMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07Z0JBQy9DLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUNUO2FBQ0Y7Ozs7WUFqREMsU0FBUztZQUxULFVBQVU7Ozt1QkF3RFQsU0FBUyxTQUFDLG1CQUFtQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtxQkFDL0MsS0FBSzt5QkFDTCxLQUFLO3dCQUNMLEtBQUs7dUJBQ0wsS0FBSztxQkFDTCxLQUFLOzhCQUNMLEtBQUs7OEJBQ0wsS0FBSztvQkFDTCxLQUFLO3dCQUNMLEtBQUs7dUJBQ0wsS0FBSzs4QkFDTCxLQUFLOzhCQUNMLE1BQU07NkJBQ04sTUFBTTs7OztJQWJQLGdEQUFtRjs7SUFDbkYsOENBQWlEOztJQUNqRCxrREFBOEQ7O0lBQzlELGlEQUE4Rjs7SUFDOUYsZ0RBQTBCOztJQUMxQiw4Q0FBZ0M7O0lBQ2hDLHVEQUFpQzs7SUFDakMsdURBQWlDOztJQUNqQyw2Q0FBbUI7O0lBQ25CLGlEQUF1Qjs7SUFDdkIsZ0RBQXVCOztJQUN2Qix1REFBNEM7O0lBQzVDLHVEQUFnRTs7SUFDaEUsc0RBQStEOztJQUMvRCw4Q0FBZ0I7O0lBQ2hCLHNEQUErRCIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBBbGliYWJhLmNvbSBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9ORy1aT1JSTy9uZy16b3Jyby1hbnRkL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgUmVuZGVyZXIyLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE56U2FmZUFueSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS90eXBlcyc7XG5pbXBvcnQgeyBOelBhZ2luYXRpb25JdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9wYWdpbmF0aW9uLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IFBhZ2luYXRpb25JdGVtUmVuZGVyQ29udGV4dCB9IGZyb20gJy4vcGFnaW5hdGlvbi50eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ256LXBhZ2luYXRpb24tZGVmYXVsdCcsXG4gIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bmctdGVtcGxhdGUgI2NvbnRhaW5lclRlbXBsYXRlPlxuICAgICAgPGxpIGNsYXNzPVwiYW50LXBhZ2luYXRpb24tdG90YWwtdGV4dFwiICpuZ0lmPVwic2hvd1RvdGFsXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJzaG93VG90YWxcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHRvdGFsLCByYW5nZTogcmFuZ2VzIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgPC9saT5cbiAgICAgIDxsaVxuICAgICAgICAqbmdGb3I9XCJsZXQgcGFnZSBvZiBsaXN0T2ZQYWdlSXRlbTsgdHJhY2tCeTogdHJhY2tCeVBhZ2VJdGVtXCJcbiAgICAgICAgbnotcGFnaW5hdGlvbi1pdGVtXG4gICAgICAgIFtsb2NhbGVdPVwibG9jYWxlXCJcbiAgICAgICAgW3R5cGVdPVwicGFnZS50eXBlXCJcbiAgICAgICAgW2luZGV4XT1cInBhZ2UuaW5kZXhcIlxuICAgICAgICBbZGlzYWJsZWRdPVwicGFnZS5kaXNhYmxlZFwiXG4gICAgICAgIFtpdGVtUmVuZGVyXT1cIml0ZW1SZW5kZXJcIlxuICAgICAgICBbYWN0aXZlXT1cInBhZ2VJbmRleCA9PT0gcGFnZS5pbmRleFwiXG4gICAgICAgIChnb3RvSW5kZXgpPVwianVtcFBhZ2UoJGV2ZW50KVwiXG4gICAgICAgIChkaWZmSW5kZXgpPVwianVtcERpZmYoJGV2ZW50KVwiXG4gICAgICA+PC9saT5cbiAgICAgIDxkaXZcbiAgICAgICAgbnotcGFnaW5hdGlvbi1vcHRpb25zXG4gICAgICAgICpuZ0lmPVwic2hvd1F1aWNrSnVtcGVyIHx8IHNob3dTaXplQ2hhbmdlclwiXG4gICAgICAgIFt0b3RhbF09XCJ0b3RhbFwiXG4gICAgICAgIFtsb2NhbGVdPVwibG9jYWxlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW256U2l6ZV09XCJuelNpemVcIlxuICAgICAgICBbc2hvd1NpemVDaGFuZ2VyXT1cInNob3dTaXplQ2hhbmdlclwiXG4gICAgICAgIFtzaG93UXVpY2tKdW1wZXJdPVwic2hvd1F1aWNrSnVtcGVyXCJcbiAgICAgICAgW3BhZ2VJbmRleF09XCJwYWdlSW5kZXhcIlxuICAgICAgICBbcGFnZVNpemVdPVwicGFnZVNpemVcIlxuICAgICAgICBbcGFnZVNpemVPcHRpb25zXT1cInBhZ2VTaXplT3B0aW9uc1wiXG4gICAgICAgIChwYWdlSW5kZXhDaGFuZ2UpPVwib25QYWdlSW5kZXhDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChwYWdlU2l6ZUNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIlxuICAgICAgPjwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIGBcbn0pXG5leHBvcnQgY2xhc3MgTnpQYWdpbmF0aW9uRGVmYXVsdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lclRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSkgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPE56U2FmZUFueT47XG4gIEBJbnB1dCgpIG56U2l6ZTogJ2RlZmF1bHQnIHwgJ3NtYWxsJyA9ICdkZWZhdWx0JztcbiAgQElucHV0KCkgaXRlbVJlbmRlcjogVGVtcGxhdGVSZWY8UGFnaW5hdGlvbkl0ZW1SZW5kZXJDb250ZXh0PjtcbiAgQElucHV0KCkgc2hvd1RvdGFsOiBUZW1wbGF0ZVJlZjx7ICRpbXBsaWNpdDogbnVtYmVyOyByYW5nZTogW251bWJlciwgbnVtYmVyXSB9PiB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBsb2NhbGU6IE56U2FmZUFueSA9IHt9O1xuICBASW5wdXQoKSBzaG93U2l6ZUNoYW5nZXIgPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd1F1aWNrSnVtcGVyID0gZmFsc2U7XG4gIEBJbnB1dCgpIHRvdGFsID0gMDtcbiAgQElucHV0KCkgcGFnZUluZGV4ID0gMTtcbiAgQElucHV0KCkgcGFnZVNpemUgPSAxMDtcbiAgQElucHV0KCkgcGFnZVNpemVPcHRpb25zID0gWzEwLCAyMCwgMzAsIDQwXTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHBhZ2VJbmRleENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgcGFnZVNpemVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgcmFuZ2VzID0gWzAsIDBdO1xuICBsaXN0T2ZQYWdlSXRlbTogQXJyYXk8UGFydGlhbDxOelBhZ2luYXRpb25JdGVtQ29tcG9uZW50Pj4gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihyZW5kZXJlcjogUmVuZGVyZXIyLCBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7XG4gICAgcmVuZGVyZXIucmVtb3ZlQ2hpbGQocmVuZGVyZXIucGFyZW50Tm9kZShlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLCBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAganVtcFBhZ2UoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMub25QYWdlSW5kZXhDaGFuZ2UoaW5kZXgpO1xuICB9XG5cbiAganVtcERpZmYoZGlmZjogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5qdW1wUGFnZSh0aGlzLnBhZ2VJbmRleCArIGRpZmYpO1xuICB9XG5cbiAgdHJhY2tCeVBhZ2VJdGVtKF86IG51bWJlciwgdmFsdWU6IFBhcnRpYWw8TnpQYWdpbmF0aW9uSXRlbUNvbXBvbmVudD4pOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt2YWx1ZS50eXBlfS0ke3ZhbHVlLmluZGV4fWA7XG4gIH1cblxuICBvblBhZ2VJbmRleENoYW5nZShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5wYWdlSW5kZXhDaGFuZ2UubmV4dChpbmRleCk7XG4gIH1cblxuICBvblBhZ2VTaXplQ2hhbmdlKHNpemU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucGFnZVNpemVDaGFuZ2UubmV4dChzaXplKTtcbiAgfVxuXG4gIGdldExhc3RJbmRleCh0b3RhbDogbnVtYmVyLCBwYWdlU2l6ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5jZWlsKHRvdGFsIC8gcGFnZVNpemUpO1xuICB9XG5cbiAgYnVpbGRJbmRleGVzKCk6IHZvaWQge1xuICAgIGNvbnN0IGxhc3RJbmRleCA9IHRoaXMuZ2V0TGFzdEluZGV4KHRoaXMudG90YWwsIHRoaXMucGFnZVNpemUpO1xuICAgIHRoaXMubGlzdE9mUGFnZUl0ZW0gPSB0aGlzLmdldExpc3RPZlBhZ2VJdGVtKHRoaXMucGFnZUluZGV4LCBsYXN0SW5kZXgpO1xuICB9XG5cbiAgZ2V0TGlzdE9mUGFnZUl0ZW0ocGFnZUluZGV4OiBudW1iZXIsIGxhc3RJbmRleDogbnVtYmVyKTogQXJyYXk8UGFydGlhbDxOelBhZ2luYXRpb25JdGVtQ29tcG9uZW50Pj4ge1xuICAgIGNvbnN0IGNvbmNhdFdpdGhQcmV2TmV4dCA9IChsaXN0T2ZQYWdlOiBBcnJheTxQYXJ0aWFsPE56UGFnaW5hdGlvbkl0ZW1Db21wb25lbnQ+PikgPT4ge1xuICAgICAgY29uc3QgcHJldkl0ZW0gPSB7XG4gICAgICAgIHR5cGU6ICdwcmV2JyxcbiAgICAgICAgZGlzYWJsZWQ6IHBhZ2VJbmRleCA9PT0gMVxuICAgICAgfTtcbiAgICAgIGNvbnN0IG5leHRJdGVtID0ge1xuICAgICAgICB0eXBlOiAnbmV4dCcsXG4gICAgICAgIGRpc2FibGVkOiBwYWdlSW5kZXggPT09IGxhc3RJbmRleFxuICAgICAgfTtcbiAgICAgIHJldHVybiBbcHJldkl0ZW0sIC4uLmxpc3RPZlBhZ2UsIG5leHRJdGVtXTtcbiAgICB9O1xuICAgIGNvbnN0IGdlbmVyYXRlUGFnZSA9IChzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IEFycmF5PFBhcnRpYWw8TnpQYWdpbmF0aW9uSXRlbUNvbXBvbmVudD4+ID0+IHtcbiAgICAgIGNvbnN0IGxpc3QgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8PSBlbmQ7IGkrKykge1xuICAgICAgICBsaXN0LnB1c2goe1xuICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgIHR5cGU6ICdwYWdlJ1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0O1xuICAgIH07XG4gICAgaWYgKGxhc3RJbmRleCA8PSA5KSB7XG4gICAgICByZXR1cm4gY29uY2F0V2l0aFByZXZOZXh0KGdlbmVyYXRlUGFnZSgxLCBsYXN0SW5kZXgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZ2VuZXJhdGVSYW5nZUl0ZW0gPSAoc2VsZWN0ZWQ6IG51bWJlciwgbGFzdDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGxldCBsaXN0T2ZSYW5nZSA9IFtdO1xuICAgICAgICBjb25zdCBwcmV2Rml2ZUl0ZW0gPSB7XG4gICAgICAgICAgdHlwZTogJ3ByZXZfNSdcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbmV4dEZpdmVJdGVtID0ge1xuICAgICAgICAgIHR5cGU6ICduZXh0XzUnXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGZpcnN0UGFnZUl0ZW0gPSBnZW5lcmF0ZVBhZ2UoMSwgMSk7XG4gICAgICAgIGNvbnN0IGxhc3RQYWdlSXRlbSA9IGdlbmVyYXRlUGFnZShsYXN0SW5kZXgsIGxhc3RJbmRleCk7XG4gICAgICAgIGlmIChzZWxlY3RlZCA8IDQpIHtcbiAgICAgICAgICBsaXN0T2ZSYW5nZSA9IFsuLi5nZW5lcmF0ZVBhZ2UoMiwgNSksIG5leHRGaXZlSXRlbV07XG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWQgPCBsYXN0IC0gMykge1xuICAgICAgICAgIGxpc3RPZlJhbmdlID0gW3ByZXZGaXZlSXRlbSwgLi4uZ2VuZXJhdGVQYWdlKHNlbGVjdGVkIC0gMiwgc2VsZWN0ZWQgKyAyKSwgbmV4dEZpdmVJdGVtXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsaXN0T2ZSYW5nZSA9IFtwcmV2Rml2ZUl0ZW0sIC4uLmdlbmVyYXRlUGFnZShsYXN0IC0gNCwgbGFzdCAtIDEpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gWy4uLmZpcnN0UGFnZUl0ZW0sIC4uLmxpc3RPZlJhbmdlLCAuLi5sYXN0UGFnZUl0ZW1dO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBjb25jYXRXaXRoUHJldk5leHQoZ2VuZXJhdGVSYW5nZUl0ZW0ocGFnZUluZGV4LCBsYXN0SW5kZXgpKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgY29uc3QgeyBwYWdlSW5kZXgsIHBhZ2VTaXplLCB0b3RhbCB9ID0gY2hhbmdlcztcbiAgICBpZiAocGFnZUluZGV4IHx8IHBhZ2VTaXplIHx8IHRvdGFsKSB7XG4gICAgICB0aGlzLnJhbmdlcyA9IFsodGhpcy5wYWdlSW5kZXggLSAxKSAqIHRoaXMucGFnZVNpemUgKyAxLCBNYXRoLm1pbih0aGlzLnBhZ2VJbmRleCAqIHRoaXMucGFnZVNpemUsIHRoaXMudG90YWwpXTtcbiAgICAgIHRoaXMuYnVpbGRJbmRleGVzKCk7XG4gICAgfVxuICB9XG59XG4iXX0=