ngx-pluto
Version:
335 lines • 30.6 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, ViewEncapsulation, Input, Output, EventEmitter } from "@angular/core";
/**
* @ignore
*/
var NpPaginator = /** @class */ (function () {
function NpPaginator() {
this.pageCounts = [10, 20, 50, 100];
this.size = 20; // Default is 20 rows per page
// Default is 20 rows per page
this.firstBtnText = '首页';
this.preBtnText = '上一页';
this.nextBtnText = '下一页';
this.lastBtnText = '尾页';
this.totalText = '共';
this.itemsPerPageText = '条,每页显示条数';
this.onPageChanged = new EventEmitter();
this.onPageSizeChanged = new EventEmitter();
this.pagerLength = 5;
this.pageNumber = 1;
this.pageCountsDropdownsettings = { single: true, isShowSearchBox: false, isRequired: true, width: 60, placeHolder: '' };
this.bindingPagerList = [];
this.bindingPageCounts = [];
}
/**
* @return {?}
*/
NpPaginator.prototype.ngOnInit = /**
* @return {?}
*/
function () {
this.refreshPaginatorInfo();
};
/**
* @return {?}
*/
NpPaginator.prototype.refreshPaginatorInfo = /**
* @return {?}
*/
function () {
if (this.total <= 0) {
this.pageNumber = 1;
this.totalPagerLength = 0;
return;
}
this.bindingRowsPerPage = { id: this.size, label: this.size + '' };
this.calculatePagerLength(this.size);
this.initBindingData();
this.buildBindingPagerList();
};
/**
* @return {?}
*/
NpPaginator.prototype.initBindingData = /**
* @return {?}
*/
function () {
this.bindingPagerList = Array(this.pagerLength).fill(null).map((/**
* @param {?} x
* @param {?} i
* @return {?}
*/
function (x, i) { return (i + 1); }));
this.bindingPageCounts = this.pageCounts.map((/**
* @param {?} m
* @return {?}
*/
function (m) { return (/** @type {?} */ ({ id: m, label: m + '' })); }));
};
// We already pass in the input params 'pagerLength', but we still
// need to calculate the real pagerLength according to 'total' and 'size',
// since if the total counts is smaller enough we do not need those more pager length
// We already pass in the input params 'pagerLength', but we still
// need to calculate the real pagerLength according to 'total' and 'size',
// since if the total counts is smaller enough we do not need those more pager length
/**
* @param {?} size
* @return {?}
*/
NpPaginator.prototype.calculatePagerLength =
// We already pass in the input params 'pagerLength', but we still
// need to calculate the real pagerLength according to 'total' and 'size',
// since if the total counts is smaller enough we do not need those more pager length
/**
* @param {?} size
* @return {?}
*/
function (size) {
this.totalPagerLength = this.total % size === 0 ? this.total / size : Math.floor(this.total / size) + 1;
};
/**
* @param {?} changes
* @return {?}
*/
NpPaginator.prototype.ngOnChanges = /**
* @param {?} changes
* @return {?}
*/
function (changes) {
if (changes) {
if (changes.size && changes.size.currentValue) {
this.bindingRowsPerPage = { id: changes.size.currentValue, label: changes.size.currentValue };
}
if (changes.total && changes.total.currentValue && !changes.total.firstChange) {
this.refreshPaginatorInfo();
}
if (changes.pageNumber && !changes.pageNumber.firstChange && changes.pageNumber.currentValue) {
// this.onNumberPagerClicked(+changes.pageNumber.currentValue);
this.pageNumber = +changes.pageNumber.currentValue;
this.buildBindingPagerList();
}
}
};
/**
* @param {?} selectedItem
* @return {?}
*/
NpPaginator.prototype.onPageCountsDropdownSelect = /**
* @param {?} selectedItem
* @return {?}
*/
function (selectedItem) {
this.pageNumber = 1;
this.size = +selectedItem.id;
this.calculatePagerLength(+selectedItem.id);
this.buildBindingPagerList();
this.onPageSizeChanged.next(selectedItem.id);
};
// Build the pager list ,
// eg: 1, 2, 3, 4, 5 2, 3, 4, 5, 6
// Build the pager list ,
// eg: 1, 2, 3, 4, 5 2, 3, 4, 5, 6
/**
* @return {?}
*/
NpPaginator.prototype.buildBindingPagerList =
// Build the pager list ,
// eg: 1, 2, 3, 4, 5 2, 3, 4, 5, 6
/**
* @return {?}
*/
function () {
var _this = this;
/** @type {?} */
var middleLen = Math.floor(this.pagerLength / 2);
/** @type {?} */
var leftListIdx = this.pagerLength % 2 === 0 ? (this.pagerLength / 2 - 1) : middleLen;
/** @type {?} */
var rightListIdx = this.pagerLength % 2 === 0 ? (this.pagerLength / 2) : middleLen;
this.bindingPagerList = [];
for (var i = this.pageNumber - leftListIdx; i < this.pageNumber + rightListIdx + 1; i++) {
this.bindingPagerList.push(i);
}
// #region Fill in the invalid data for bindingPagerList
/** @type {?} */
var leftInvalidIdx = this.bindingPagerList.filter((/**
* @param {?} f
* @return {?}
*/
function (f) { return f <= 0; })).length;
/** @type {?} */
var rightInvalidIdx = this.bindingPagerList.filter((/**
* @param {?} f
* @return {?}
*/
function (f) { return f > _this.totalPagerLength; })).length;
this.bindingPagerList = this.bindingPagerList.filter((/**
* @param {?} f
* @return {?}
*/
function (f) { return f > 0 && f <= _this.totalPagerLength; }));
if (leftInvalidIdx > 0) {
/** @type {?} */
var start = this.bindingPagerList[this.bindingPagerList.length - 1] + 1;
/** @type {?} */
var end = start + leftInvalidIdx;
for (var i = start; i < end; i++) {
if (i <= this.totalPagerLength) {
this.bindingPagerList.push(i);
}
}
}
if (rightInvalidIdx > 0) {
/** @type {?} */
var start = this.bindingPagerList[0] - 1;
/** @type {?} */
var end = start - rightInvalidIdx;
for (var i = start; i > end; i--) {
if (i >= 1) {
this.bindingPagerList.unshift(i);
}
}
}
// #endregion
};
/**
* @param {?} pageIndex
* @return {?}
*/
NpPaginator.prototype.onNumberPagerClicked = /**
* @param {?} pageIndex
* @return {?}
*/
function (pageIndex) {
this.pageNumber = pageIndex;
this.onPageChanged.next(this.pageNumber);
this.buildBindingPagerList();
};
/**
* @return {?}
*/
NpPaginator.prototype.onFirstBtnClicked = /**
* @return {?}
*/
function () {
if (this.pageNumber === 1) {
return;
}
this.pageNumber = 1;
this.onPageChanged.next(this.pageNumber);
this.buildBindingPagerList();
};
/**
* @return {?}
*/
NpPaginator.prototype.onPreBtnClicked = /**
* @return {?}
*/
function () {
if (this.pageNumber === 1) {
return;
}
this.pageNumber--;
this.onPageChanged.next(this.pageNumber);
this.buildBindingPagerList();
};
/**
* @return {?}
*/
NpPaginator.prototype.onNextBtnClicked = /**
* @return {?}
*/
function () {
if (this.pageNumber === this.totalPagerLength) {
return;
}
this.pageNumber++;
this.onPageChanged.next(this.pageNumber);
this.buildBindingPagerList();
};
/**
* @return {?}
*/
NpPaginator.prototype.onLastBtnClicked = /**
* @return {?}
*/
function () {
if (this.pageNumber === this.totalPagerLength) {
return;
}
this.pageNumber = this.totalPagerLength;
this.onPageChanged.next(this.pageNumber);
this.buildBindingPagerList();
};
NpPaginator.decorators = [
{ type: Component, args: [{
selector: "np-paginator",
template: "<div class=\"np-paginator-wrapper flex-wrap row-flex\">\r\n <span>{{ totalText + ' ' + total + ' ' + itemsPerPageText }} </span>\r\n <span>\r\n <np-dropdown [(ngModel)]=\"bindingRowsPerPage\" [items]=\"bindingPageCounts\" [settings]=\"pageCountsDropdownsettings\"\r\n (onSelected)=\"onPageCountsDropdownSelect($event)\">\r\n </np-dropdown>\r\n </span>\r\n <span class=\"pager-btn first-btn\" [ngClass]=\"{ 'disabled-btn' : pageNumber === 1 }\"\r\n (click)=\"onFirstBtnClicked()\">{{ firstBtnText }}</span>\r\n <span class=\"pager-btn pre-btn\" [ngClass]=\"{ 'disabled-btn' : pageNumber === 1 }\"\r\n (click)=\"onPreBtnClicked()\">{{ preBtnText }}</span>\r\n\r\n <span *ngFor=\"let pageIndex of bindingPagerList\" class=\"number-pager\"\r\n [ngClass]=\"{ 'selected-btn' : pageIndex === pageNumber }\" (click)=\"onNumberPagerClicked(pageIndex)\">\r\n {{ pageIndex }}\r\n </span>\r\n\r\n <span class=\"pager-btn next-btn\" [ngClass]=\"{ 'disabled-btn' : pageNumber === totalPagerLength }\"\r\n (click)=\"onNextBtnClicked()\">{{ nextBtnText }}</span>\r\n <span class=\"pager-btn last-btn\" [ngClass]=\"{ 'disabled-btn' : pageNumber === totalPagerLength }\"\r\n (click)=\"onLastBtnClicked()\">{{ lastBtnText }}</span>\r\n</div>\r\n",
encapsulation: ViewEncapsulation.None,
styles: [".backdrop-transparent{opacity:0}.flex-wrap{display:flex}.wrap{flex-wrap:wrap}.col-flex{flex-direction:column}.row-flex{flex-direction:row}.middle-flex{justify-content:center;align-items:center}.space-between{justify-content:space-between;align-items:center}.align-center{align-items:center}.np-row{display:flex;flex-direction:row;flex-wrap:wrap;width:100%}.np-column{display:flex;flex-direction:column;flex-basis:100%;flex:1}.np-paginator-wrapper{height:27px;line-height:27px}.np-paginator-wrapper>span{display:inline-block}.np-paginator-wrapper>span:nth-child(2){width:60px;margin:0 10px}.np-paginator-wrapper>span:nth-child(2) np-dropdown .selected-item-wrapper{width:60px!important;min-width:60px!important;padding:0!important}.np-paginator-wrapper>span:nth-child(2) np-dropdown .selected-item-wrapper>span{padding:8px}.np-paginator-wrapper>span:nth-child(2) np-dropdown .selected-item-wrapper .fas.fa-caret-down,.np-paginator-wrapper>span:nth-child(2) np-dropdown .selected-item-wrapper .fas.fa-caret-up{line-height:28px!important}.np-paginator-wrapper .pager-btn{text-align:center;vertical-align:middle;line-height:25px;cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.np-paginator-wrapper .number-pager{min-width:27px;text-align:center;vertical-align:middle;line-height:25px;cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.np-paginator-wrapper .first-btn{border-top-left-radius:4px;border-bottom-left-radius:4px;width:48px}.np-paginator-wrapper .last-btn{width:48px;border-top-right-radius:4px;border-bottom-right-radius:4px}.np-paginator-wrapper .next-btn,.np-paginator-wrapper .pre-btn{width:68px}.np-paginator-wrapper .disabled-btn{cursor:not-allowed}"]
}] }
];
/** @nocollapse */
NpPaginator.ctorParameters = function () { return []; };
NpPaginator.propDecorators = {
total: [{ type: Input }],
pageCounts: [{ type: Input }],
size: [{ type: Input }],
firstBtnText: [{ type: Input }],
preBtnText: [{ type: Input }],
nextBtnText: [{ type: Input }],
lastBtnText: [{ type: Input }],
totalText: [{ type: Input }],
itemsPerPageText: [{ type: Input }],
onPageChanged: [{ type: Output }],
onPageSizeChanged: [{ type: Output }],
pageNumber: [{ type: Input }]
};
return NpPaginator;
}());
export { NpPaginator };
if (false) {
/** @type {?} */
NpPaginator.prototype.selectedItem;
/** @type {?} */
NpPaginator.prototype.total;
/** @type {?} */
NpPaginator.prototype.pageCounts;
/** @type {?} */
NpPaginator.prototype.size;
/** @type {?} */
NpPaginator.prototype.firstBtnText;
/** @type {?} */
NpPaginator.prototype.preBtnText;
/** @type {?} */
NpPaginator.prototype.nextBtnText;
/** @type {?} */
NpPaginator.prototype.lastBtnText;
/** @type {?} */
NpPaginator.prototype.totalText;
/** @type {?} */
NpPaginator.prototype.itemsPerPageText;
/** @type {?} */
NpPaginator.prototype.onPageChanged;
/** @type {?} */
NpPaginator.prototype.onPageSizeChanged;
/** @type {?} */
NpPaginator.prototype.pagerLength;
/** @type {?} */
NpPaginator.prototype.pageNumber;
/** @type {?} */
NpPaginator.prototype.totalPagerLength;
/** @type {?} */
NpPaginator.prototype.pageCountsDropdownsettings;
/** @type {?} */
NpPaginator.prototype.bindingRowsPerPage;
/** @type {?} */
NpPaginator.prototype.bindingPagerList;
/** @type {?} */
NpPaginator.prototype.bindingPageCounts;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1wbHV0by8iLCJzb3VyY2VzIjpbImxpYi9wYWdpbmF0b3IvcGFnaW5hdG9yLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBcUIsS0FBSyxFQUFpQixNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBTTVIO0lBb0NFO1FBdEJTLGVBQVUsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLFNBQUksR0FBRyxFQUFFLENBQUMsQ0FBSSw4QkFBOEI7O1FBQzVDLGlCQUFZLEdBQVcsSUFBSSxDQUFDO1FBQzVCLGVBQVUsR0FBVyxLQUFLLENBQUM7UUFDM0IsZ0JBQVcsR0FBVyxLQUFLLENBQUM7UUFDNUIsZ0JBQVcsR0FBVyxJQUFJLENBQUM7UUFDM0IsY0FBUyxHQUFXLEdBQUcsQ0FBQztRQUN4QixxQkFBZ0IsR0FBVyxVQUFVLENBQUM7UUFFckMsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ25DLHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFakQsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFFUCxlQUFVLEdBQVcsQ0FBQyxDQUFDO1FBRWhDLCtCQUEwQixHQUF1QixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBR3hJLHFCQUFnQixHQUFrQixFQUFFLENBQUM7UUFDckMsc0JBQWlCLEdBQXFCLEVBQUUsQ0FBQztJQUV6QixDQUFDOzs7O0lBRWpCLDhCQUFROzs7SUFBUjtRQUNFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lB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QixFQUFFO1lBQzdDLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQ3hDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUMvQixDQUFDOztnQkFsTEYsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxjQUFjO29CQUN4Qixpd0NBQTZCO29CQUU3QixhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTs7aUJBQ3RDOzs7Ozt3QkFRRSxLQUFLOzZCQUNMLEtBQUs7dUJBQ0wsS0FBSzsrQkFDTCxLQUFLOzZCQUNMLEtBQUs7OEJBQ0wsS0FBSzs4QkFDTCxLQUFLOzRCQUNMLEtBQUs7bUNBQ0wsS0FBSztnQ0FFTCxNQUFNO29DQUNOLE1BQU07NkJBSU4sS0FBSzs7SUF1SlIsa0JBQUM7Q0FBQSxBQW5MRCxJQW1MQztTQTVLWSxXQUFXOzs7SUFHdEIsbUNBQTZCOztJQUc3Qiw0QkFBdUI7O0lBQ3ZCLGlDQUF3Qzs7SUFDeEMsMkJBQW1COztJQUNuQixtQ0FBcUM7O0lBQ3JDLGlDQUFvQzs7SUFDcEMsa0NBQXFDOztJQUNyQyxrQ0FBb0M7O0lBQ3BDLGdDQUFpQzs7SUFDakMsdUNBQStDOztJQUUvQyxvQ0FBNkM7O0lBQzdDLHdDQUFpRDs7SUFFakQsa0NBQWdCOztJQUVoQixpQ0FBZ0M7O0lBQ2hDLHVDQUF5Qjs7SUFDekIsaURBQXdJOztJQUV4SSx5Q0FBbUM7O0lBQ25DLHVDQUFxQzs7SUFDckMsd0NBQXlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3RW5jYXBzdWxhdGlvbiwgT25Jbml0LCBPbkNoYW5nZXMsIElucHV0LCBTaW1wbGVDaGFuZ2VzLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IE5wRHJvcGRvd25JdGVtLCBOcERyb3Bkb3duU2V0dGluZ3MgfSBmcm9tIFwiLi4vZHJvcGRvd24vaW5kZXhcIjtcclxuXHJcbi8qKlxyXG4gKiBAaWdub3JlXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogYG5wLXBhZ2luYXRvcmAsXHJcbiAgdGVtcGxhdGVVcmw6ICdwYWdpbmF0b3IuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJ3BhZ2luYXRvci5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIE5wUGFnaW5hdG9yIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG5cclxuXHJcbiAgc2VsZWN0ZWRJdGVtOiBOcERyb3Bkb3duSXRlbTtcclxuXHJcblxyXG4gIEBJbnB1dCgpIHRvdGFsOiBudW1iZXI7XHJcbiAgQElucHV0KCkgcGFnZUNvdW50cyA9IFsxMCwgMjAsIDUwLCAxMDBdO1xyXG4gIEBJbnB1dCgpIHNpemUgPSAyMDsgICAgLy8gRGVmYXVsdCBpcyAyMCByb3dzIHBlciBwYWdlXHJcbiAgQElucHV0KCkgZmlyc3RCdG5UZXh0OiBzdHJpbmcgPSAn6aaW6aG1JztcclxuICBASW5wdXQoKSBwcmVCdG5UZXh0OiBzdHJpbmcgPSAn5LiK5LiA6aG1JztcclxuICBASW5wdXQoKSBuZXh0QnRuVGV4dDogc3RyaW5nID0gJ+S4i+S4gOmhtSc7XHJcbiAgQElucHV0KCkgbGFzdEJ0blRleHQ6IHN0cmluZyA9ICflsL7pobUnO1xyXG4gIEBJbnB1dCgpIHRvdGFsVGV4dDogc3RyaW5nID0gJ+WFsSc7XHJcbiAgQElucHV0KCkgaXRlbXNQZXJQYWdlVGV4dDogc3RyaW5nID0gJ+adoe+8jOavj+mhteaYvuekuuadoeaVsCc7XHJcblxyXG4gIEBPdXRwdXQoKSBvblBhZ2VDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvblBhZ2VTaXplQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgcGFnZXJMZW5ndGggPSA1O1xyXG5cclxuICBASW5wdXQoKSBwYWdlTnVtYmVyOiBudW1iZXIgPSAxO1xyXG4gIHRvdGFsUGFnZXJMZW5ndGg6IG51bWJlcjtcclxuICBwYWdlQ291bnRzRHJvcGRvd25zZXR0aW5nczogTnBEcm9wZG93blNldHRpbmdzID0geyBzaW5nbGU6IHRydWUsIGlzU2hvd1NlYXJjaEJveDogZmFsc2UsIGlzUmVxdWlyZWQ6IHRydWUsIHdpZHRoOiA2MCwgcGxhY2VIb2xkZXI6ICcnIH07XHJcblxyXG4gIGJpbmRpbmdSb3dzUGVyUGFnZTogTnBEcm9wZG93bkl0ZW07XHJcbiAgYmluZGluZ1BhZ2VyTGlzdDogQXJyYXk8bnVtYmVyPiA9IFtdO1xyXG4gIGJpbmRpbmdQYWdlQ291bnRzOiBOcERyb3Bkb3duSXRlbVtdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5yZWZyZXNoUGFnaW5hdG9ySW5mbygpO1xyXG4gIH1cclxuXHJcbiAgcmVmcmVzaFBhZ2luYXRvckluZm8oKSB7XHJcbiAgICBpZiAodGhpcy50b3RhbCA8PSAwKSB7XHJcbiAgICAgIHRoaXMucGFnZU51bWJlciA9IDE7XHJcbiAgICAgIHRoaXMudG90YWxQYWdlckxlbmd0aCA9IDA7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJpbmRpbmdSb3dzUGVyUGFnZSA9IHsgaWQ6IHRoaXMuc2l6ZSwgbGFiZWw6IHRoaXMuc2l6ZSArICcnIH07XHJcbiAgICB0aGlzLmNhbGN1bGF0ZVBhZ2VyTGVuZ3RoKHRoaXMuc2l6ZSk7XHJcbiAgICB0aGlzLmluaXRCaW5kaW5nRGF0YSgpO1xyXG4gICAgdGhpcy5idWlsZEJpbmRpbmdQYWdlckxpc3QoKTtcclxuICB9XHJcblxyXG4gIGluaXRCaW5kaW5nRGF0YSgpIHtcclxuICAgIHRoaXMuYmluZGluZ1BhZ2VyTGlzdCA9IEFycmF5KHRoaXMucGFnZXJMZW5ndGgpLmZpbGwobnVsbCkubWFwKCh4LCBpKSA9PiAoaSArIDEpKTtcclxuICAgIHRoaXMuYmluZGluZ1BhZ2VDb3VudHMgPSB0aGlzLnBhZ2VDb3VudHMubWFwKG0gPT4geyByZXR1cm4geyBpZDogbSwgbGFiZWw6IG0gKyAnJyB9IGFzIE5wRHJvcGRvd25JdGVtOyB9KTtcclxuICB9XHJcblxyXG4gIC8vIFdlIGFscmVhZHkgcGFzcyBpbiB0aGUgaW5wdXQgcGFyYW1zICdwYWdlckxlbmd0aCcsIGJ1dCB3ZSBzdGlsbFxyXG4gIC8vIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSByZWFsIHBhZ2VyTGVuZ3RoIGFjY29yZGluZyB0byAndG90YWwnIGFuZCAnc2l6ZScsXHJcbiAgLy8gc2luY2UgaWYgdGhlIHRvdGFsIGNvdW50cyBpcyBzbWFsbGVyIGVub3VnaCB3ZSBkbyBub3QgbmVlZCB0aG9zZSBtb3JlIHBhZ2VyIGxlbmd0aFxyXG4gIGNhbGN1bGF0ZVBhZ2VyTGVuZ3RoKHNpemU6IG51bWJlcikge1xyXG4gICAgdGhpcy50b3RhbFBhZ2VyTGVuZ3RoID0gdGhpcy50b3RhbCAlIHNpemUgPT09IDAgPyB0aGlzLnRvdGFsIC8gc2l6ZSA6IE1hdGguZmxvb3IodGhpcy50b3RhbCAvIHNpemUpICsgMTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzKSB7XHJcbiAgICAgIGlmIChjaGFuZ2VzLnNpemUgJiYgY2hhbmdlcy5zaXplLmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICAgIHRoaXMuYmluZGluZ1Jvd3NQZXJQYWdlID0geyBpZDogY2hhbmdlcy5zaXplLmN1cnJlbnRWYWx1ZSwgbGFiZWw6IGNoYW5nZXMuc2l6ZS5jdXJyZW50VmFsdWUgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNoYW5nZXMudG90YWwgJiYgY2hhbmdlcy50b3RhbC5jdXJyZW50VmFsdWUgJiYgIWNoYW5nZXMudG90YWwuZmlyc3RDaGFuZ2UpIHtcclxuICAgICAgICB0aGlzLnJlZnJlc2hQYWdpbmF0b3JJbmZvKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjaGFuZ2VzLnBhZ2VOdW1iZXIgJiYgIWNoYW5nZXMucGFnZU51bWJlci5maXJzdENoYW5nZSAmJiBjaGFuZ2VzLnBhZ2VOdW1iZXIuY3VycmVudFZhbHVlKSB7XHJcbiAgICAgICAgLy8gdGhpcy5vbk51bWJlclBhZ2VyQ2xpY2tlZCgrY2hhbmdlcy5wYWdlTnVtYmVyLmN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgICAgdGhpcy5wYWdlTnVtYmVyID0gK2NoYW5nZXMucGFnZU51bWJlci5jdXJyZW50VmFsdWU7XHJcbiAgICAgICAgdGhpcy5idWlsZEJpbmRpbmdQYWdlckxpc3QoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25QYWdlQ291bnRzRHJvcGRvd25TZWxlY3Qoc2VsZWN0ZWRJdGVtOiBOcERyb3Bkb3duSXRlbSkge1xyXG4gICAgdGhpcy5wYWdlTnVtYmVyID0gMTtcclxuICAgIHRoaXMuc2l6ZSA9ICtzZWxlY3RlZEl0ZW0uaWQ7XHJcbiAgICB0aGlzLmNhbGN1bGF0ZVBhZ2VyTGVuZ3RoKCtzZWxlY3RlZEl0ZW0uaWQpO1xyXG4gICAgdGhpcy5idWlsZEJpbmRpbmdQYWdlckxpc3QoKTtcclxuXHJcbiAgICB0aGlzLm9uUGFnZVNpemVDaGFuZ2VkLm5leHQoc2VsZWN0ZWRJdGVtLmlkKTtcclxuICB9XHJcblxyXG4gIC8vIEJ1aWxkIHRoZSBwYWdlciBsaXN0ICxcclxuICAvLyBlZzogMSwgMiwgMywgNCwgNSAgIDIsIDMsIDQsIDUsIDZcclxuICBidWlsZEJpbmRpbmdQYWdlckxpc3QoKSB7XHJcbiAgICBsZXQgbWlkZGxlTGVuID0gTWF0aC5mbG9vcih0aGlzLnBhZ2VyTGVuZ3RoIC8gMik7XHJcbiAgICBsZXQgbGVmdExpc3RJZHggPSB0aGlzLnBhZ2VyTGVuZ3RoICUgMiA9PT0gMCA/ICh0aGlzLnBhZ2VyTGVuZ3RoIC8gMiAtIDEpIDogbWlkZGxlTGVuO1xyXG4gICAgbGV0IHJpZ2h0TGlzdElkeCA9IHRoaXMucGFnZXJMZW5ndGggJSAyID09PSAwID8gKHRoaXMucGFnZXJMZW5ndGggLyAyKSA6IG1pZGRsZUxlbjtcclxuICAgIHRoaXMuYmluZGluZ1BhZ2VyTGlzdCA9IFtdO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSB0aGlzLnBhZ2VOdW1iZXIgLSBsZWZ0TGlzdElkeDsgaSA8IHRoaXMucGFnZU51bWJlciArIHJpZ2h0TGlzdElkeCArIDE7IGkrKykge1xyXG4gICAgICB0aGlzLmJpbmRpbmdQYWdlckxpc3QucHVzaChpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAjcmVnaW9uIEZpbGwgaW4gdGhlIGludmFsaWQgZGF0YSBmb3IgYmluZGluZ1BhZ2VyTGlzdFxyXG4gICAgbGV0IGxlZnRJbnZhbGlkSWR4ID0gdGhpcy5iaW5kaW5nUGFnZXJMaXN0LmZpbHRlcihmID0+IGYgPD0gMCkubGVuZ3RoO1xyXG4gICAgbGV0IHJpZ2h0SW52YWxpZElkeCA9IHRoaXMuYmluZGluZ1BhZ2VyTGlzdC5maWx0ZXIoZiA9PiBmID4gdGhpcy50b3RhbFBhZ2VyTGVuZ3RoKS5sZW5ndGg7XHJcblxyXG4gICAgdGhpcy5iaW5kaW5nUGFnZXJMaXN0ID0gdGhpcy5iaW5kaW5nUGFnZXJMaXN0LmZpbHRlcihmID0+IGYgPiAwICYmIGYgPD0gdGhpcy50b3RhbFBhZ2VyTGVuZ3RoKTtcclxuICAgIGlmIChsZWZ0SW52YWxpZElkeCA+IDApIHtcclxuICAgICAgbGV0IHN0YXJ0ID0gdGhpcy5iaW5kaW5nUGFnZXJMaXN0W3RoaXMuYmluZGluZ1BhZ2VyTGlzdC5sZW5ndGggLSAxXSArIDE7XHJcbiAgICAgIGxldCBlbmQgPSBzdGFydCArIGxlZnRJbnZhbGlkSWR4O1xyXG4gICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xyXG4gICAgICAgIGlmIChpIDw9IHRoaXMudG90YWxQYWdlckxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5iaW5kaW5nUGFnZXJMaXN0LnB1c2goaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJpZ2h0SW52YWxpZElkeCA+IDApIHtcclxuICAgICAgbGV0IHN0YXJ0ID0gdGhpcy5iaW5kaW5nUGFnZXJMaXN0WzBdIC0gMTtcclxuICAgICAgbGV0IGVuZCA9IHN0YXJ0IC0gcmlnaHRJbnZhbGlkSWR4O1xyXG4gICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPiBlbmQ7IGktLSkge1xyXG4gICAgICAgIGlmIChpID49IDEpIHtcclxuICAgICAgICAgIHRoaXMuYmluZGluZ1BhZ2VyTGlzdC51bnNoaWZ0KGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vICNlbmRyZWdpb25cclxuICB9XHJcblxyXG4gIG9uTnVtYmVyUGFnZXJDbGlja2VkKHBhZ2VJbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnBhZ2VOdW1iZXIgPSBwYWdlSW5kZXg7XHJcbiAgICB0aGlzLm9uUGFnZUNoYW5nZWQubmV4dCh0aGlzLnBhZ2VOdW1iZXIpO1xyXG4gICAgdGhpcy5idWlsZEJpbmRpbmdQYWdlckxpc3QoKTtcclxuICB9XHJcblxyXG4gIG9uRmlyc3RCdG5DbGlja2VkKCkge1xyXG4gICAgaWYgKHRoaXMucGFnZU51bWJlciA9PT0gMSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wYWdlTnVtYmVyID0gMTtcclxuICAgIHRoaXMub25QYWdlQ2hhbmdlZC5uZXh0KHRoaXMucGFnZU51bWJlcik7XHJcbiAgICB0aGlzLmJ1aWxkQmluZGluZ1BhZ2VyTGlzdCgpO1xyXG4gIH1cclxuXHJcbiAgb25QcmVCdG5DbGlja2VkKCkge1xyXG4gICAgaWYgKHRoaXMucGFnZU51bWJlciA9PT0gMSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wYWdlTnVtYmVyLS07XHJcbiAgICB0aGlzLm9uUGFnZUNoYW5nZWQubmV4dCh0aGlzLnBhZ2VOdW1iZXIpO1xyXG4gICAgdGhpcy5idWlsZEJpbmRpbmdQYWdlckxpc3QoKTtcclxuICB9XHJcblxyXG4gIG9uTmV4dEJ0bkNsaWNrZWQoKSB7XHJcbiAgICBpZiAodGhpcy5wYWdlTnVtYmVyID09PSB0aGlzLnRvdGFsUGFnZXJMZW5ndGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucGFnZU51bWJlcisrO1xyXG4gICAgdGhpcy5vblBhZ2VDaGFuZ2VkLm5leHQodGhpcy5wYWdlTnVtYmVyKTtcclxuICAgIHRoaXMuYnVpbGRCaW5kaW5nUGFnZXJMaXN0KCk7XHJcbiAgfVxyXG5cclxuICBvbkxhc3RCdG5DbGlja2VkKCkge1xyXG4gICAgaWYgKHRoaXMucGFnZU51bWJlciA9PT0gdGhpcy50b3RhbFBhZ2VyTGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnBhZ2VOdW1iZXIgPSB0aGlzLnRvdGFsUGFnZXJMZW5ndGg7XHJcbiAgICB0aGlzLm9uUGFnZUNoYW5nZWQubmV4dCh0aGlzLnBhZ2VOdW1iZXIpO1xyXG4gICAgdGhpcy5idWlsZEJpbmRpbmdQYWdlckxpc3QoKTtcclxuICB9XHJcbn0iXX0=