angular-io-pager
Version:
264 lines (258 loc) • 24.2 kB
JavaScript
import { __spread } from 'tslib';
import { Component, Input, Output, EventEmitter, NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { BrowserModule } from '@angular/platform-browser';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var AngularIoPagerComponent = /** @class */ (function () {
function AngularIoPagerComponent() {
this.pageGap = 10;
this.id = 1;
this.noOfPages = 10;
this.pageClick = new EventEmitter();
// page view count selectors
this.from = 1;
this.to = 0;
this.pageLength = 20;
this.currentPage = 1;
this.pages = [];
this.pageNum = [];
this.showLeftNav = false;
this.showRightNav = false;
this.totalPageLength = 0;
this.leftNavString = '<<';
this.rightNavString = '>>';
this.lastPageMax = 0;
this.lastPageMin = 0;
this._total = 0;
}
Object.defineProperty(AngularIoPagerComponent.prototype, "totalRecords", {
get: /**
* @return {?}
*/
function () {
return this._total;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._total = value;
if (value > 0) {
this.pagePreparation();
}
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
AngularIoPagerComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
for (var i = 1; i <= this.pageLength; i++) {
this.pages.push(i * this.pageGap);
}
this.to = this.pages[0];
};
/**
* @return {?}
*/
AngularIoPagerComponent.prototype.pagePreparation = /**
* @return {?}
*/
function () {
var _this = this;
this.reCalculatePageNumbers();
setTimeout(function () {
_this.setSelectedPage();
}, 0);
};
/**
* @return {?}
*/
AngularIoPagerComponent.prototype.reCalculatePageNumbers = /**
* @return {?}
*/
function () {
/** @type {?} */
var divided = (this.totalRecords / this.pageGap).toString().split('.');
/** @type {?} */
var wholePageLen = parseInt(divided[0], 10);
/** @type {?} */
var partialPageLen = 0;
if (divided.length === 2) {
// has one more page with limited records
partialPageLen = 1;
}
this.totalPageLength = wholePageLen + partialPageLen;
this.pageNum.length = 0;
this.populatePages(1);
};
/**
* @param {?} start
* @return {?}
*/
AngularIoPagerComponent.prototype.populatePages = /**
* @param {?} start
* @return {?}
*/
function (start) {
/** @type {?} */
var until = 1;
this.pageNum.length = 0;
for (var i = start; i <= this.totalPageLength && until <= this.noOfPages; i++) {
this.pageNum.push(i);
until++;
}
this.currentPage = this.lastPageMin = Math.min.apply(Math, __spread(this.pageNum));
this.lastPageMax = Math.max.apply(Math, __spread(this.pageNum));
this.setPrevNextNav();
};
/**
* @return {?}
*/
AngularIoPagerComponent.prototype.pageLengthChange = /**
* @return {?}
*/
function () {
this.reCalculatePageNumbers();
this.setSelectedPage();
};
/**
* @param {?} e
* @return {?}
*/
AngularIoPagerComponent.prototype.pageChange = /**
* @param {?} e
* @return {?}
*/
function (e) {
if (e.target.classList.contains('cmdLeft')) {
this.populatePages(this.lastPageMin - this.noOfPages);
this.setSelectedPage();
}
else if (e.target.classList.contains('cmdRight')) {
this.populatePages(++this.lastPageMax);
this.setSelectedPage();
}
else {
this.setSelectedPage(e.target);
}
};
/**
* @param {?=} el
* @return {?}
*/
AngularIoPagerComponent.prototype.setSelectedPage = /**
* @param {?=} el
* @return {?}
*/
function (el) {
var _this = this;
if (el === void 0) { el = null; }
if (el != null) {
this.currentPage = parseInt(el.innerText, 10);
}
this.to = Math.min(this.currentPage * this.pageGap, this.totalRecords);
this.from = this.currentPage * this.pageGap - this.pageGap + 1;
setTimeout(function () {
el = /** @type {?} */ (((el == null
? document
.getElementById('pager' + _this.id)
.querySelector('.pageElements')
: el)));
/** @type {?} */
var closePageNum = el;
while ((closePageNum = closePageNum.parentElement) &&
!closePageNum.classList.contains('pageNumbers')) { }
Array.from(closePageNum.children).forEach(function (x) {
return x.classList.remove('selected');
});
el.classList.add('selected');
}, 0);
this.emitPageClick();
};
/**
* @return {?}
*/
AngularIoPagerComponent.prototype.setPrevNextNav = /**
* @return {?}
*/
function () {
this.showLeftNav = this.showRightNav = false;
if (this.currentPage > this.noOfPages) {
// current page is out of maximum pages can be shown, it means it is not the first set of page numbers. show left
this.showLeftNav = true;
}
/** @type {?} */
var currentPageIsInBetween = (this.currentPage / this.noOfPages).toString().split('.')
.length === 2;
/** @type {?} */
var currHighestPageShowing = parseInt((this.currentPage / this.noOfPages).toString(), 10) *
this.noOfPages +
(currentPageIsInBetween ? this.noOfPages : 0);
if (currHighestPageShowing < this.totalPageLength) {
this.showRightNav = true;
}
};
/**
* @return {?}
*/
AngularIoPagerComponent.prototype.emitPageClick = /**
* @return {?}
*/
function () {
this.pageClick.emit({ from: this.from, to: this.to });
};
AngularIoPagerComponent.decorators = [
{ type: Component, args: [{
selector: 'sr-angular-io-pager',
template: "<div class=\"pager\" [ngClass]=\"{'hidden': totalRecords <= 0}\" [id]=\"'pager' + id\">\n <div class=\"left\">\n Show\n <select [(ngModel)]=\"pageGap\" (change)=\"pageLengthChange()\"\n id=\"pageGap\">\n <option *ngFor=\"let pg of pages\" [value]=\"pg\">{{pg}}</option>\n </select>\n Showing {{from}}-{{to}} of {{totalRecords}}\n </div>\n <div class=\"right\">\n <ul class=\"pageNumbers\" id=\"pageList\">\n <li *ngIf=\"showLeftNav\" (click)=\"pageChange($event)\"\n class=\"cmdLeft\"> {{leftNavString}} </li>\n <li *ngFor=\"let pn of pageNum\" (click)=\"pageChange($event)\"\n class=\"pageElements\">{{pn}}</li>\n <li *ngIf=\"showRightNav\" (click)=\"pageChange($event)\"\n class=\"cmdRight\"> {{rightNavString}} </li>\n </ul>\n </div>\n</div>",
styles: [".pager{font:bold 13px Arial;color:#377bba}.pageNumbers{list-style:none;border:1px solid #dfdfdf;display:inline-block;padding-left:0;margin:0}.pageNumbers li{float:left;padding:8px 10px;background:#fff;border-left:1px solid #dfdfdf;border-collapse:collapse;color:#377bba;cursor:pointer;min-width:15px;text-align:center}.pageNumbers li.selected{background:#377bba;color:#fff}.pageNumbers li:first-of-type{border-left:0}.pageNumbers li:hover{background:#3a4046;color:#fff}div.left{padding:9px 0}select{color:#377bba;font-weight:700;font-size:.9em;padding:2px;border:1px solid #377bba}.left{float:left}.right{float:right}.hidden{display:none}"]
},] },
];
/** @nocollapse */
AngularIoPagerComponent.ctorParameters = function () { return []; };
AngularIoPagerComponent.propDecorators = {
pageGap: [{ type: Input }],
id: [{ type: Input }],
noOfPages: [{ type: Input }],
totalRecords: [{ type: Input }],
pageClick: [{ type: Output }]
};
return AngularIoPagerComponent;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var AngularIoPagerModule = /** @class */ (function () {
function AngularIoPagerModule() {
}
AngularIoPagerModule.decorators = [
{ type: NgModule, args: [{
imports: [
FormsModule, BrowserModule
],
declarations: [AngularIoPagerComponent],
exports: [AngularIoPagerComponent]
},] },
];
return AngularIoPagerModule;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
export { AngularIoPagerModule, AngularIoPagerComponent as ɵa };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1pby1wYWdlci5qcy5tYXAiLCJzb3VyY2VzIjpbIm5nOi8vYW5ndWxhci1pby1wYWdlci9saWIvYW5ndWxhci1pby1wYWdlci9wYWdlci5jb21wb25lbnQudHMiLCJuZzovL2FuZ3VsYXItaW8tcGFnZXIvbGliL2FuZ3VsYXItaW8tcGFnZXIubW9kdWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3ItYW5ndWxhci1pby1wYWdlcicsXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cInBhZ2VyXCIgW25nQ2xhc3NdPVwieydoaWRkZW4nOiB0b3RhbFJlY29yZHMgPD0gMH1cIiBbaWRdPVwiJ3BhZ2VyJyArIGlkXCI+XG4gIDxkaXYgY2xhc3M9XCJsZWZ0XCI+XG4gICAgICBTaG93XG4gICAgICA8c2VsZWN0IFsobmdNb2RlbCldPVwicGFnZUdhcFwiIChjaGFuZ2UpPVwicGFnZUxlbmd0aENoYW5nZSgpXCJcbiAgICAgICAgICBpZD1cInBhZ2VHYXBcIj5cbiAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBwZyBvZiBwYWdlc1wiIFt2YWx1ZV09XCJwZ1wiPnt7cGd9fTwvb3B0aW9uPlxuICAgICAgPC9zZWxlY3Q+XG4gICAgICBTaG93aW5nIHt7ZnJvbX19LXt7dG99fSBvZiB7e3RvdGFsUmVjb3Jkc319XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgIDx1bCBjbGFzcz1cInBhZ2VOdW1iZXJzXCIgaWQ9XCJwYWdlTGlzdFwiPlxuICAgICAgICAgIDxsaSAqbmdJZj1cInNob3dMZWZ0TmF2XCIgKGNsaWNrKT1cInBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY21kTGVmdFwiPiB7e2xlZnROYXZTdHJpbmd9fSA8L2xpPlxuICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgcG4gb2YgcGFnZU51bVwiIChjbGljayk9XCJwYWdlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICBjbGFzcz1cInBhZ2VFbGVtZW50c1wiPnt7cG59fTwvbGk+XG4gICAgICAgICAgPGxpICpuZ0lmPVwic2hvd1JpZ2h0TmF2XCIgKGNsaWNrKT1cInBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY21kUmlnaHRcIj4ge3tyaWdodE5hdlN0cmluZ319IDwvbGk+XG4gICAgICA8L3VsPlxuICA8L2Rpdj5cbjwvZGl2PmAsXG4gIHN0eWxlczogW2AucGFnZXJ7Zm9udDpib2xkIDEzcHggQXJpYWw7Y29sb3I6IzM3N2JiYX0ucGFnZU51bWJlcnN7bGlzdC1zdHlsZTpub25lO2JvcmRlcjoxcHggc29saWQgI2RmZGZkZjtkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nLWxlZnQ6MDttYXJnaW46MH0ucGFnZU51bWJlcnMgbGl7ZmxvYXQ6bGVmdDtwYWRkaW5nOjhweCAxMHB4O2JhY2tncm91bmQ6I2ZmZjtib3JkZXItbGVmdDoxcHggc29saWQgI2RmZGZkZjtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Y29sb3I6IzM3N2JiYTtjdXJzb3I6cG9pbnRlcjttaW4td2lkdGg6MTVweDt0ZXh0LWFsaWduOmNlbnRlcn0ucGFnZU51bWJlcnMgbGkuc2VsZWN0ZWR7YmFja2dyb3VuZDojMzc3YmJhO2NvbG9yOiNmZmZ9LnBhZ2VOdW1iZXJzIGxpOmZpcnN0LW9mLXR5cGV7Ym9yZGVyLWxlZnQ6MH0ucGFnZU51bWJlcnMgbGk6aG92ZXJ7YmFja2dyb3VuZDojM2E0MDQ2O2NvbG9yOiNmZmZ9ZGl2LmxlZnR7cGFkZGluZzo5cHggMH1zZWxlY3R7Y29sb3I6IzM3N2JiYTtmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOi45ZW07cGFkZGluZzoycHg7Ym9yZGVyOjFweCBzb2xpZCAjMzc3YmJhfS5sZWZ0e2Zsb2F0OmxlZnR9LnJpZ2h0e2Zsb2F0OnJpZ2h0fS5oaWRkZW57ZGlzcGxheTpub25lfWBdXG59KVxuZXhwb3J0IGNsYXNzIEFuZ3VsYXJJb1BhZ2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KClcbiAgcGFnZUdhcCA9IDEwO1xuICBASW5wdXQoKVxuICBpZCA9IDE7XG4gIEBJbnB1dCgpXG4gIG5vT2ZQYWdlcyA9IDEwO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHRvdGFsUmVjb3Jkcyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fdG90YWwgPSB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSA+IDApIHtcbiAgICAgIHRoaXMucGFnZVByZXBhcmF0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCB0b3RhbFJlY29yZHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fdG90YWw7XG4gIH1cblxuICBAT3V0cHV0KClcbiAgcGFnZUNsaWNrOiBFdmVudEVtaXR0ZXI8b2JqZWN0PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBwYWdlIHZpZXcgY291bnQgc2VsZWN0b3JzXG4gIGZyb20gPSAxO1xuICB0byA9IDA7XG4gIHBhZ2VMZW5ndGggPSAyMDtcbiAgY3VycmVudFBhZ2UgPSAxO1xuICBwYWdlczogbnVtYmVyW10gPSBbXTtcbiAgcGFnZU51bTogbnVtYmVyW10gPSBbXTtcbiAgc2hvd0xlZnROYXYgPSBmYWxzZTtcbiAgc2hvd1JpZ2h0TmF2ID0gZmFsc2U7XG4gIHRvdGFsUGFnZUxlbmd0aCA9IDA7XG4gIGxlZnROYXZTdHJpbmcgPSAnPDwnO1xuICByaWdodE5hdlN0cmluZyA9ICc+Pic7XG4gIGxhc3RQYWdlTWF4ID0gMDtcbiAgbGFzdFBhZ2VNaW4gPSAwO1xuICBfdG90YWwgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSB0aGlzLnBhZ2VMZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYWdlcy5wdXNoKGkgKiB0aGlzLnBhZ2VHYXApO1xuICAgIH1cblxuICAgIHRoaXMudG8gPSB0aGlzLnBhZ2VzWzBdO1xuICB9XG5cbiAgcGFnZVByZXBhcmF0aW9uKCkge1xuICAgIHRoaXMucmVDYWxjdWxhdGVQYWdlTnVtYmVycygpO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNldFNlbGVjdGVkUGFnZSgpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcmVDYWxjdWxhdGVQYWdlTnVtYmVycygpIHtcbiAgICBjb25zdCBkaXZpZGVkID0gKHRoaXMudG90YWxSZWNvcmRzIC8gdGhpcy5wYWdlR2FwKS50b1N0cmluZygpLnNwbGl0KCcuJyk7XG4gICAgY29uc3Qgd2hvbGVQYWdlTGVuID0gcGFyc2VJbnQoZGl2aWRlZFswXSwgMTApO1xuICAgIGxldCBwYXJ0aWFsUGFnZUxlbiA9IDA7XG4gICAgaWYgKGRpdmlkZWQubGVuZ3RoID09PSAyKSB7XG4gICAgICAvLyBoYXMgb25lIG1vcmUgcGFnZSB3aXRoIGxpbWl0ZWQgcmVjb3Jkc1xuICAgICAgcGFydGlhbFBhZ2VMZW4gPSAxO1xuICAgIH1cblxuICAgIHRoaXMudG90YWxQYWdlTGVuZ3RoID0gd2hvbGVQYWdlTGVuICsgcGFydGlhbFBhZ2VMZW47XG4gICAgdGhpcy5wYWdlTnVtLmxlbmd0aCA9IDA7XG4gICAgdGhpcy5wb3B1bGF0ZVBhZ2VzKDEpO1xuICB9XG5cbiAgcG9wdWxhdGVQYWdlcyhzdGFydDogbnVtYmVyKSB7XG4gICAgbGV0IHVudGlsID0gMTtcbiAgICB0aGlzLnBhZ2VOdW0ubGVuZ3RoID0gMDtcblxuICAgIGZvciAoXG4gICAgICBsZXQgaSA9IHN0YXJ0O1xuICAgICAgaSA8PSB0aGlzLnRvdGFsUGFnZUxlbmd0aCAmJiB1bnRpbCA8PSB0aGlzLm5vT2ZQYWdlcztcbiAgICAgIGkrK1xuICAgICkge1xuICAgICAgdGhpcy5wYWdlTnVtLnB1c2goaSk7XG4gICAgICB1bnRpbCsrO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLmxhc3RQYWdlTWluID0gTWF0aC5taW4oLi4udGhpcy5wYWdlTnVtKTtcbiAgICB0aGlzLmxhc3RQYWdlTWF4ID0gTWF0aC5tYXgoLi4udGhpcy5wYWdlTnVtKTtcbiAgICB0aGlzLnNldFByZXZOZXh0TmF2KCk7XG4gIH1cblxuICBwYWdlTGVuZ3RoQ2hhbmdlKCkge1xuICAgIHRoaXMucmVDYWxjdWxhdGVQYWdlTnVtYmVycygpO1xuICAgIHRoaXMuc2V0U2VsZWN0ZWRQYWdlKCk7XG4gIH1cblxuICBwYWdlQ2hhbmdlKGUpIHtcbiAgICBpZiAoZS50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdjbWRMZWZ0JykpIHtcbiAgICAgIHRoaXMucG9wdWxhdGVQYWdlcyh0aGlzLmxhc3RQYWdlTWluIC0gdGhpcy5ub09mUGFnZXMpO1xuICAgICAgdGhpcy5zZXRTZWxlY3RlZFBhZ2UoKTtcbiAgICB9IGVsc2UgaWYgKGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnY21kUmlnaHQnKSkge1xuICAgICAgdGhpcy5wb3B1bGF0ZVBhZ2VzKCsrdGhpcy5sYXN0UGFnZU1heCk7XG4gICAgICB0aGlzLnNldFNlbGVjdGVkUGFnZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFNlbGVjdGVkUGFnZShlLnRhcmdldCk7XG4gICAgfVxuICB9XG5cbiAgc2V0U2VsZWN0ZWRQYWdlKGVsOiBIVE1MRWxlbWVudCA9IG51bGwpIHtcbiAgICBpZiAoZWwgIT0gbnVsbCkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhcnNlSW50KGVsLmlubmVyVGV4dCwgMTApO1xuICAgIH1cbiAgICB0aGlzLnRvID0gTWF0aC5taW4odGhpcy5jdXJyZW50UGFnZSAqIHRoaXMucGFnZUdhcCwgdGhpcy50b3RhbFJlY29yZHMpO1xuICAgIHRoaXMuZnJvbSA9IHRoaXMuY3VycmVudFBhZ2UgKiB0aGlzLnBhZ2VHYXAgLSB0aGlzLnBhZ2VHYXAgKyAxO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBlbCA9IDxIVE1MRWxlbWVudD4oXG4gICAgICAgIChlbCA9PSBudWxsXG4gICAgICAgICAgPyBkb2N1bWVudFxuICAgICAgICAgICAgICAuZ2V0RWxlbWVudEJ5SWQoJ3BhZ2VyJyArIHRoaXMuaWQpXG4gICAgICAgICAgICAgIC5xdWVyeVNlbGVjdG9yKCcucGFnZUVsZW1lbnRzJylcbiAgICAgICAgICA6IGVsKVxuICAgICAgKTtcblxuICAgICAgbGV0IGNsb3NlUGFnZU51bSA9IGVsO1xuICAgICAgd2hpbGUgKFxuICAgICAgICAoY2xvc2VQYWdlTnVtID0gY2xvc2VQYWdlTnVtLnBhcmVudEVsZW1lbnQpICYmXG4gICAgICAgICFjbG9zZVBhZ2VOdW0uY2xhc3NMaXN0LmNvbnRhaW5zKCdwYWdlTnVtYmVycycpXG4gICAgICApIHt9XG5cbiAgICAgIEFycmF5LmZyb20oY2xvc2VQYWdlTnVtLmNoaWxkcmVuKS5mb3JFYWNoKHggPT5cbiAgICAgICAgeC5jbGFzc0xpc3QucmVtb3ZlKCdzZWxlY3RlZCcpXG4gICAgICApO1xuXG4gICAgICBlbC5jbGFzc0xpc3QuYWRkKCdzZWxlY3RlZCcpO1xuICAgIH0sIDApO1xuXG4gICAgdGhpcy5lbWl0UGFnZUNsaWNrKCk7XG4gIH1cblxuICBzZXRQcmV2TmV4dE5hdigpIHtcbiAgICB0aGlzLnNob3dMZWZ0TmF2ID0gdGhpcy5zaG93UmlnaHROYXYgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA+IHRoaXMubm9PZlBhZ2VzKSB7XG4gICAgICAvLyBjdXJyZW50IHBhZ2UgaXMgb3V0IG9mIG1heGltdW0gcGFnZXMgY2FuIGJlIHNob3duLCBpdCBtZWFucyBpdCBpcyBub3QgdGhlIGZpcnN0IHNldCBvZiBwYWdlIG51bWJlcnMuIHNob3cgbGVmdFxuICAgICAgdGhpcy5zaG93TGVmdE5hdiA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gZ2V0IHdoZXRoZXIgcGFnZSBpcyBub3QgYSBtdWx0aXBsZSBvZiBQYWdlc1RvU2hvd1xuICAgIGNvbnN0IGN1cnJlbnRQYWdlSXNJbkJldHdlZW4gPVxuICAgICAgKHRoaXMuY3VycmVudFBhZ2UgLyB0aGlzLm5vT2ZQYWdlcykudG9TdHJpbmcoKS5zcGxpdCgnLicpXG4gICAgICAgIC5sZW5ndGggPT09IDI7XG5cbiAgICAvLyBnZXQgaGlnaGVzdCBwYWdlIG51bWJlciBpbiB0aGUgY3VycmVudCBwYWdlXG4gICAgLy8gZm9ybXVsYSB1c2VkID0gY3VycmVudCBwYWdlIGRpdmlkZWQgd2l0aCBtYXhQYWdldG9TaG93LCBpZiBmb3VuZCByZW1haW5kZXIsXG4gICAgLy8gcGFnZSBtaWdodCBoYXZlIHVwY29taW5nIHBhZ2UgbGlua3MsIHNvIGZpbmRpbmcgbGFyZ2VzdCBwYWdlIG51bWJlciBpbiB0aGF0IHBhZ2UuXG4gICAgLy8gZXguIGlmIHRoZSBiYXNlIHNob3dpbmcgaXMgNDAgaW4gdGhlIGNhc2Ugb2YgMTAgYXMgdGhlIHBhZ2UgbGVuZ3RoLlxuICAgIC8vIG5vdyA0MCBpcyB0aGUgaGlnaGVzdCBwYWdlIHNob3dpbmcsIGlmIDQyIHRoZW4gNTAgaXMgdGhlIGhpZ2hlc3QgcGFnZSBzaG93aW5nLlxuXG4gICAgY29uc3QgY3VyckhpZ2hlc3RQYWdlU2hvd2luZyA9XG4gICAgICBwYXJzZUludCgodGhpcy5jdXJyZW50UGFnZSAvIHRoaXMubm9PZlBhZ2VzKS50b1N0cmluZygpLCAxMCkgKlxuICAgICAgICB0aGlzLm5vT2ZQYWdlcyArXG4gICAgICAoY3VycmVudFBhZ2VJc0luQmV0d2VlbiA/IHRoaXMubm9PZlBhZ2VzIDogMCk7XG5cbiAgICBpZiAoY3VyckhpZ2hlc3RQYWdlU2hvd2luZyA8IHRoaXMudG90YWxQYWdlTGVuZ3RoKSB7XG4gICAgICB0aGlzLnNob3dSaWdodE5hdiA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgZW1pdFBhZ2VDbGljaygpIHtcbiAgICB0aGlzLnBhZ2VDbGljay5lbWl0KHsgZnJvbTogdGhpcy5mcm9tLCB0bzogdGhpcy50byB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFuZ3VsYXJJb1BhZ2VyQ29tcG9uZW50IH0gZnJvbSAnLi9hbmd1bGFyLWlvLXBhZ2VyL3BhZ2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJyb3dzZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIEZvcm1zTW9kdWxlLCBCcm93c2VyTW9kdWxlXG4gIF0sXG4gIGRlY2xhcmF0aW9uczogW0FuZ3VsYXJJb1BhZ2VyQ29tcG9uZW50XSxcbiAgZXhwb3J0czogW0FuZ3VsYXJJb1BhZ2VyQ29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBBbmd1bGFySW9QYWdlck1vZHVsZSB7IH1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0lBaUVFO3VCQXJDVSxFQUFFO2tCQUVQLENBQUM7eUJBRU0sRUFBRTt5QkFlb0IsSUFBSSxZQUFZLEVBQUU7O29CQUc3QyxDQUFDO2tCQUNILENBQUM7MEJBQ08sRUFBRTsyQkFDRCxDQUFDO3FCQUNHLEVBQUU7dUJBQ0EsRUFBRTsyQkFDUixLQUFLOzRCQUNKLEtBQUs7K0JBQ0YsQ0FBQzs2QkFDSCxJQUFJOzhCQUNILElBQUk7MkJBQ1AsQ0FBQzsyQkFDRCxDQUFDO3NCQUNOLENBQUM7S0FFTTtJQWhDaEIsc0JBQ1csaURBQVk7Ozs7O1lBU3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQzs7Ozs7O1FBVnJCLFVBQ3dCLEtBQWE7WUFDbkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFFcEIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO2dCQUNiLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FB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