@vicoders/angular
Version:
- [Vicoders Angular Common Module](#vicoders-angular-common-module) - [Install](#install) - [How to use](#how-to-use) - [Pipes](#pipes) - [hasItem](#hasitem) - [isArray](#isarray) - [length](#length) - [orderBy](#orderby)
271 lines • 24.4 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, Input } from '@angular/core';
import { ActivatedRoute, Router, NavigationEnd } from '@angular/router';
import * as _ from 'lodash';
import { Exception } from '../../exceptions/exception';
import LengthAwarePaginator from '../../models/LengthAwarePaginator';
var LengthAwarePaginatorComponent = /** @class */ (function () {
function LengthAwarePaginatorComponent(router, activeRoute) {
var _this = this;
this.name = 'page';
this.current_page = 1;
this.pages = [];
this.numberPageInBetween = 5;
this.pagesInBetween = [];
this.router = router;
this.activeRoute = activeRoute;
this.navigationSubscription = this.router.events.subscribe(function (e) {
if (e instanceof NavigationEnd) {
if (!_.isUndefined(_this.activeRoute.snapshot.queryParams.page)) {
// tslint:disable-next-line:radix
_this.current_page = parseInt(_this.activeRoute.snapshot.queryParams.page);
}
}
});
}
/**
* @return {?}
*/
LengthAwarePaginatorComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
if (!_.isUndefined(this.activeRoute.snapshot.queryParams[this.name])) {
// tslint:disable-next-line:radix
this.current_page = parseInt(this.activeRoute.snapshot.queryParams[this.name]);
}
};
/**
* @return {?}
*/
LengthAwarePaginatorComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
this.navigationSubscription.unsubscribe();
};
/**
* @param {?} changes
* @return {?}
*/
LengthAwarePaginatorComponent.prototype.ngOnChanges = /**
* @param {?} changes
* @return {?}
*/
function (changes) {
if (!_.isUndefined(this.paginator)) {
/** @type {?} */
var pages = [];
/** @type {?} */
var length_1 = this.paginator.getTotalPages();
for (var k = 1; k <= length_1; k++) {
pages.push(k);
}
this.pages = pages;
/** @type {?} */
var newPagesInBetween = [];
if (length_1 - 2 > this.numberPageInBetween) {
if (this.isHideLeftShowMore(this.current_page)) {
for (var k = 2; k <= this.numberPageInBetween + 1; k++) {
newPagesInBetween.push(k);
}
}
else if (this.isHideRightShowMore(this.current_page)) {
for (var k = length_1 - this.numberPageInBetween; k <= length_1 - 1; k++) {
newPagesInBetween.push(k);
}
}
else {
if (this.pagesInBetween.indexOf(this.current_page) > -1) {
newPagesInBetween = this.pagesInBetween;
}
else {
for (var k = this.current_page; k <= this.current_page + this.numberPageInBetween - 1; k++) {
newPagesInBetween.push(k);
}
}
}
}
else {
for (var k = 2; k <= length_1 - 1; k++) {
newPagesInBetween.push(k);
}
}
this.pagesInBetween = newPagesInBetween;
}
};
/**
* @param {?} page
* @param {?=} action
* @return {?}
*/
LengthAwarePaginatorComponent.prototype.resolveParams = /**
* @param {?} page
* @param {?=} action
* @return {?}
*/
function (page, action) {
var _a, _b, _c;
if (!_.isUndefined(action)) {
if (action === 'prev') {
/** @type {?} */
var prevPage = page - 1;
return _.assign({}, this.activeRoute.snapshot.queryParams, (_a = {}, _a[this.name] = prevPage, _a));
}
else if (action === 'next') {
/** @type {?} */
var nextPage = page + 1;
return _.assign({}, this.activeRoute.snapshot.queryParams, (_b = {}, _b[this.name] = nextPage, _b));
}
else {
throw new Exception('only \'prev\' or \'next\' action are allowed');
}
}
else {
return _.assign({}, this.activeRoute.snapshot.queryParams, (_c = {}, _c[this.name] = page, _c));
}
};
/**
* @return {?}
*/
LengthAwarePaginatorComponent.prototype.getCurrentPage = /**
* @return {?}
*/
function () {
return this.current_page;
};
/**
* @param {?} page
* @return {?}
*/
LengthAwarePaginatorComponent.prototype.isCurrentPage = /**
* @param {?} page
* @return {?}
*/
function (page) {
return page === this.current_page;
};
/**
* @return {?}
*/
LengthAwarePaginatorComponent.prototype.shouldActivePrev = /**
* @return {?}
*/
function () {
return this.current_page > 1;
};
/**
* @return {?}
*/
LengthAwarePaginatorComponent.prototype.shouldActiveNext = /**
* @return {?}
*/
function () {
return this.current_page < this.paginator.getTotalPages();
};
/**
* @return {?}
*/
LengthAwarePaginatorComponent.prototype.getCurrentUrl = /**
* @return {?}
*/
function () {
/** @type {?} */
var segments = ['/'];
this.activeRoute.snapshot.pathFromRoot.forEach(function (item) {
if (Array.isArray(item.url) && item.url.length > 0) {
segments = tslib_1.__spread(segments, item.url.map(function (i) { return i.path; }));
}
});
return segments;
};
/**
* @param {?} page
* @return {?}
*/
LengthAwarePaginatorComponent.prototype.isHideLeftShowMore = /**
* @param {?} page
* @return {?}
*/
function (page) {
if (this.pages.length - 2 < this.numberPageInBetween || page <= this.numberPageInBetween + 1) {
return true;
}
else {
return false;
}
};
/**
* @param {?} page
* @return {?}
*/
LengthAwarePaginatorComponent.prototype.isHideRightShowMore = /**
* @param {?} page
* @return {?}
*/
function (page) {
// if left hide means we know that the left over pages is not more than this.numberPageInBetween
if (!this.isHideLeftShowMore(page)) {
if (this.pages.length - 2 < this.numberPageInBetween || page > this.pages.length - this.numberPageInBetween) {
return true;
}
else {
return false;
}
}
else {
if (this.pages.length - 2 < this.numberPageInBetween || page > this.numberPageInBetween + 1) {
return true;
}
else {
return false;
}
}
};
LengthAwarePaginatorComponent.decorators = [
{ type: Component, args: [{
// tslint:disable-next-line:component-selector
selector: 'length-aware-paginator',
template: "<div class=\"row\" *ngIf=\"paginator !== undefined && (alwaysDisplay === true || this.paginator.getTotalPages() > 1)\">\n <div class=\"col-md-12 col-sm-12 col-xs-12\">\n <ul class=\"pagination animated fadeIn\">\n <li class=\"page-item\" *ngIf=\"shouldActivePrev()\">\n <a class=\"page-link\" [routerLink]=\"getCurrentUrl()\" [queryParams]=\"this.resolveParams(getCurrentPage(), 'prev')\">Prev</a>\n </li>\n <li class=\"page-item\" [ngClass]=\"{'active': isCurrentPage(1)}\">\n <a class=\"page-link\" [routerLink]=\"getCurrentUrl()\" [queryParams]=\"this.resolveParams(1)\">1</a>\n </li>\n <li class=\"page-item left-show-more\" *ngIf=\"!isHideLeftShowMore(getCurrentPage())\">\n <a class=\"page-link\" [routerLink]=\"getCurrentUrl()\" [queryParams]=\"this.resolveParams(pagesInBetween[0] - numberPageInBetween )\">...</a>\n </li>\n <li class=\"page-item\" [ngClass]=\"{'active': isCurrentPage(page)}\" *ngFor=\"let page of pagesInBetween\">\n <a class=\"page-link\" [routerLink]=\"getCurrentUrl()\" [queryParams]=\"this.resolveParams(page)\">{{ page }}</a>\n </li>\n <li class=\"page-item right-show-more\" *ngIf=\"!isHideRightShowMore(getCurrentPage())\">\n <a class=\"page-link\" [routerLink]=\"getCurrentUrl()\" [queryParams]=\"this.resolveParams(pagesInBetween[pagesInBetween.length - 1] + 1)\">...</a>\n </li>\n <li class=\"page-item\" [ngClass]=\"{'active': isCurrentPage(pages.length)}\" *ngIf=\"pages.length > 1\">\n <a class=\"page-link\" [routerLink]=\"getCurrentUrl()\" [queryParams]=\"this.resolveParams(pages.length)\">{{ pages.length }}</a>\n </li>\n <li class=\"page-item\" *ngIf=\"shouldActiveNext()\">\n <a class=\"page-link\" [routerLink]=\"getCurrentUrl()\" [queryParams]=\"this.resolveParams(getCurrentPage(), 'next')\">Next</a>\n </li>\n </ul>\n </div>\n</div>",
styles: [""]
}] }
];
LengthAwarePaginatorComponent.ctorParameters = function () { return [
{ type: Router },
{ type: ActivatedRoute }
]; };
LengthAwarePaginatorComponent.propDecorators = {
alwaysDisplay: [{ type: Input }],
paginator: [{ type: Input }],
name: [{ type: Input }]
};
return LengthAwarePaginatorComponent;
}());
export { LengthAwarePaginatorComponent };
if (false) {
/** @type {?} */
LengthAwarePaginatorComponent.prototype.navigationSubscription;
/** @type {?} */
LengthAwarePaginatorComponent.prototype.router;
/** @type {?} */
LengthAwarePaginatorComponent.prototype.alwaysDisplay;
/** @type {?} */
LengthAwarePaginatorComponent.prototype.paginator;
/** @type {?} */
LengthAwarePaginatorComponent.prototype.name;
/** @type {?} */
LengthAwarePaginatorComponent.prototype.activeRoute;
/** @type {?} */
LengthAwarePaginatorComponent.prototype.current_page;
/** @type {?} */
LengthAwarePaginatorComponent.prototype.pages;
/** @type {?} */
LengthAwarePaginatorComponent.prototype.numberPageInBetween;
/** @type {?} */
LengthAwarePaginatorComponent.prototype.pagesInBetween;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVuZ3RoLWF3YXJlLXBhZ2luYXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Admljb2RlcnMvYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9kaXJlY3RpdmVzL2xlbmd0aC1hd2FyZS1wYWdpbmF0b3IvbGVuZ3RoLWF3YXJlLXBhZ2luYXRvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBdUMsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEUsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXZELE9BQU8sb0JBQW9CLE1BQU0sbUNBQW1DLENBQUM7QUFFckU7SUFvQkUsdUNBQVksTUFBYyxFQUFFLFdBQTJCO1FBQXZELGlCQVdDO1FBakJELFNBQUksR0FBUSxNQUFNLENBQUM7UUFFWixpQkFBWSxHQUFHLENBQUMsQ0FBQztRQUNqQixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1gsd0JBQW1CLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLG1CQUFjLEdBQUcsRUFBRSxDQUFDO1FBRXpCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBQyxDQUFNO1lBQ2hFLElBQUksQ0FBQyxZQUFZLGFBQWEsRUFBRTtnQkFDOUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUM5RCxp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QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7Z0JBQzNHLE9BQU8sSUFBSSxDQUFDO2FBQ2I7aUJBQU07Z0JBQ0wsT0FBTyxLQUFLLENBQUM7YUFDZDtTQUNGO2FBQU07WUFDTCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLEVBQUU7Z0JBQzNGLE9BQU8sSUFBSSxDQUFDO2FBQ2I7aUJBQU07Z0JBQ0wsT0FBTyxLQUFLLENBQUM7YUFDZDtTQUNGO0lBQ0gsQ0FBQzs7Z0JBOUlGLFNBQVMsU0FBQzs7b0JBRVQsUUFBUSxFQUFFLHdCQUF3QjtvQkFDbEMsaTREQUFzRDs7aUJBRXZEOzs7Z0JBWHdCLE1BQU07Z0JBQXRCLGNBQWM7OztnQ0FlcEIsS0FBSzs0QkFFTCxLQUFLO3VCQUVMLEtBQUs7O0lBa0lSLG9DQUFDO0NBQUEsQUEvSUQsSUErSUM7U0F6SVksNkJBQTZCOzs7SUFDeEMsK0RBQXFDOztJQUNyQywrQ0FBZTs7SUFDZixzREFDd0I7O0lBQ3hCLGtEQUNnQzs7SUFDaEMsNkNBQ21COztJQUNuQixvREFBNEI7O0lBQzVCLHFEQUF3Qjs7SUFDeEIsOENBQWtCOztJQUNsQiw0REFBK0I7O0lBQy9CLHVEQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIsIE5hdmlnYXRpb25FbmQgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgRXhjZXB0aW9uIH0gZnJvbSAnLi4vLi4vZXhjZXB0aW9ucy9leGNlcHRpb24nO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgTGVuZ3RoQXdhcmVQYWdpbmF0b3IgZnJvbSAnLi4vLi4vbW9kZWxzL0xlbmd0aEF3YXJlUGFnaW5hdG9yJztcblxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsZW5ndGgtYXdhcmUtcGFnaW5hdG9yJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xlbmd0aC1hd2FyZS1wYWdpbmF0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9sZW5ndGgtYXdhcmUtcGFnaW5hdG9yLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTGVuZ3RoQXdhcmVQYWdpbmF0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgbmF2aWdhdGlvblN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICByb3V0ZXI6IFJvdXRlcjtcbiAgQElucHV0KClcbiAgYWx3YXlzRGlzcGxheT86IEJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIHBhZ2luYXRvcjogTGVuZ3RoQXdhcmVQYWdpbmF0b3I7XG4gIEBJbnB1dCgpXG4gIG5hbWU6IGFueSA9ICdwYWdlJztcbiAgYWN0aXZlUm91dGU6IEFjdGl2YXRlZFJvdXRlO1xuICBwdWJsaWMgY3VycmVudF9wYWdlID0gMTtcbiAgcHVibGljIHBhZ2VzID0gW107XG4gIHB1YmxpYyBudW1iZXJQYWdlSW5CZXR3ZWVuID0gNTtcbiAgcHVibGljIHBhZ2VzSW5CZXR3ZWVuID0gW107XG4gIGNvbnN0cnVjdG9yKHJvdXRlcjogUm91dGVyLCBhY3RpdmVSb3V0ZTogQWN0aXZhdGVkUm91dGUpIHtcbiAgICB0aGlzLnJvdXRlciA9IHJvdXRlcjtcbiAgICB0aGlzLmFjdGl2ZVJvdXRlID0gYWN0aXZlUm91dGU7XG4gICAgdGhpcy5uYXZpZ2F0aW9uU3Vic2NyaXB0aW9uID0gdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZSgoZTogYW55KSA9PiB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcbiAgICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHRoaXMuYWN0aXZlUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMucGFnZSkpIHtcbiAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6cmFkaXhcbiAgICAgICAgICB0aGlzLmN1cnJlbnRfcGFnZSA9IHBhcnNlSW50KHRoaXMuYWN0aXZlUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMucGFnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAoIV8uaXNVbmRlZmluZWQodGhpcy5hY3RpdmVSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1t0aGlzLm5hbWVdKSkge1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnJhZGl4XG4gICAgICB0aGlzLmN1cnJlbnRfcGFnZSA9IHBhcnNlSW50KHRoaXMuYWN0aXZlUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbdGhpcy5uYW1lXSk7XG4gICAgfVxuICB9XG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMubmF2aWdhdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoIV8uaXNVbmRlZmluZWQodGhpcy5wYWdpbmF0b3IpKSB7XG4gICAgICBjb25zdCBwYWdlcyA9IFtdO1xuICAgICAgY29uc3QgbGVuZ3RoID0gdGhpcy5wYWdpbmF0b3IuZ2V0VG90YWxQYWdlcygpO1xuICAgICAgZm9yIChsZXQgayA9IDE7IGsgPD0gbGVuZ3RoOyBrKyspIHtcbiAgICAgICAgcGFnZXMucHVzaChrKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGFnZXMgPSBwYWdlcztcbiAgICAgIGxldCBuZXdQYWdlc0luQmV0d2VlbiA9IFtdO1xuICAgICAgaWYgKGxlbmd0aCAtIDIgPiB0aGlzLm51bWJlclBhZ2VJbkJldHdlZW4pIHtcbiAgICAgICAgaWYgKHRoaXMuaXNIaWRlTGVmdFNob3dNb3JlKHRoaXMuY3VycmVudF9wYWdlKSkge1xuICAgICAgICAgIGZvciAobGV0IGsgPSAyOyBrIDw9IHRoaXMubnVtYmVyUGFnZUluQmV0d2VlbiArIDE7IGsrKykge1xuICAgICAgICAgICAgbmV3UGFnZXNJbkJldHdlZW4ucHVzaChrKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0hpZGVSaWdodFNob3dNb3JlKHRoaXMuY3VycmVudF9wYWdlKSkge1xuICAgICAgICAgIGZvciAobGV0IGsgPSBsZW5ndGggLSB0aGlzLm51bWJlclBhZ2VJbkJldHdlZW47IGsgPD0gbGVuZ3RoIC0gMTsgaysrKSB7XG4gICAgICAgICAgICBuZXdQYWdlc0luQmV0d2Vlbi5wdXNoKGspO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5wYWdlc0luQmV0d2Vlbi5pbmRleE9mKHRoaXMuY3VycmVudF9wYWdlKSA+IC0xKSB7XG4gICAgICAgICAgICBuZXdQYWdlc0luQmV0d2VlbiA9IHRoaXMucGFnZXNJbkJldHdlZW47XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGsgPSB0aGlzLmN1cnJlbnRfcGFnZTsgayA8PSB0aGlzLmN1cnJlbnRfcGFnZSArIHRoaXMubnVtYmVyUGFnZUluQmV0d2VlbiAtIDE7IGsrKykge1xuICAgICAgICAgICAgICBuZXdQYWdlc0luQmV0d2Vlbi5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChsZXQgayA9IDI7IGsgPD0gbGVuZ3RoIC0gMTsgaysrKSB7XG4gICAgICAgICAgbmV3UGFnZXNJbkJldHdlZW4ucHVzaChrKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5wYWdlc0luQmV0d2VlbiA9IG5ld1BhZ2VzSW5CZXR3ZWVuO1xuICAgIH1cbiAgfVxuXG4gIHJlc29sdmVQYXJhbXMocGFnZSwgYWN0aW9uPykge1xuICAgIGlmICghXy5pc1VuZGVmaW5lZChhY3Rpb24pKSB7XG4gICAgICBpZiAoYWN0aW9uID09PSAncHJldicpIHtcbiAgICAgICAgY29uc3QgcHJldlBhZ2UgPSBwYWdlIC0gMTtcbiAgICAgICAgcmV0dXJuIF8uYXNzaWduKHt9LCB0aGlzLmFjdGl2ZVJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLCB7IFt0aGlzLm5hbWVdOiBwcmV2UGFnZSB9KTtcbiAgICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAnbmV4dCcpIHtcbiAgICAgICAgY29uc3QgbmV4dFBhZ2UgPSBwYWdlICsgMTtcbiAgICAgICAgcmV0dXJuIF8uYXNzaWduKHt9LCB0aGlzLmFjdGl2ZVJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLCB7IFt0aGlzLm5hbWVdOiBuZXh0UGFnZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ29ubHkgXFwncHJldlxcJyBvciBcXCduZXh0XFwnIGFjdGlvbiBhcmUgYWxsb3dlZCcpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXy5hc3NpZ24oe30sIHRoaXMuYWN0aXZlUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMsIHsgW3RoaXMubmFtZV06IHBhZ2UgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q3VycmVudFBhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudF9wYWdlO1xuICB9XG5cbiAgaXNDdXJyZW50UGFnZShwYWdlKSB7XG4gICAgcmV0dXJuIHBhZ2UgPT09IHRoaXMuY3VycmVudF9wYWdlO1xuICB9XG5cbiAgc2hvdWxkQWN0aXZlUHJldigpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50X3BhZ2UgPiAxO1xuICB9XG5cbiAgc2hvdWxkQWN0aXZlTmV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50X3BhZ2UgPCB0aGlzLnBhZ2luYXRvci5nZXRUb3RhbFBhZ2VzKCk7XG4gIH1cblxuICBnZXRDdXJyZW50VXJsKCkge1xuICAgIGxldCBzZWdtZW50cyA9IFsnLyddO1xuICAgIHRoaXMuYWN0aXZlUm91dGUuc25hcHNob3QucGF0aEZyb21Sb290LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtLnVybCkgJiYgaXRlbS51cmwubGVuZ3RoID4gMCkge1xuICAgICAgICBzZWdtZW50cyA9IFsuLi5zZWdtZW50cywgLi4uaXRlbS51cmwubWFwKGkgPT4gaS5wYXRoKV07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHNlZ21lbnRzO1xuICB9XG5cbiAgaXNIaWRlTGVmdFNob3dNb3JlKHBhZ2UpIHtcbiAgICBpZiAodGhpcy5wYWdlcy5sZW5ndGggLSAyIDwgdGhpcy5udW1iZXJQYWdlSW5CZXR3ZWVuIHx8IHBhZ2UgPD0gdGhpcy5udW1iZXJQYWdlSW5CZXR3ZWVuICsgMSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpc0hpZGVSaWdodFNob3dNb3JlKHBhZ2UpIHtcbiAgICAvLyBpZiBsZWZ0IGhpZGUgbWVhbnMgd2Uga25vdyB0aGF0IHRoZSBsZWZ0IG92ZXIgcGFnZXMgaXMgbm90IG1vcmUgdGhhbiB0aGlzLm51bWJlclBhZ2VJbkJldHdlZW5cbiAgICBpZiAoIXRoaXMuaXNIaWRlTGVmdFNob3dNb3JlKHBhZ2UpKSB7XG4gICAgICBpZiAodGhpcy5wYWdlcy5sZW5ndGggLSAyIDwgdGhpcy5udW1iZXJQYWdlSW5CZXR3ZWVuIHx8IHBhZ2UgPiB0aGlzLnBhZ2VzLmxlbmd0aCAtIHRoaXMubnVtYmVyUGFnZUluQmV0d2Vlbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMucGFnZXMubGVuZ3RoIC0gMiA8IHRoaXMubnVtYmVyUGFnZUluQmV0d2VlbiB8fCBwYWdlID4gdGhpcy5udW1iZXJQYWdlSW5CZXR3ZWVuICsgMSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==