UNPKG

@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)

231 lines 22.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ 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'; export class LengthAwarePaginatorComponent { /** * @param {?} router * @param {?} activeRoute */ constructor(router, activeRoute) { 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((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 {?} */ ngOnInit() { if (!_.isUndefined(this.activeRoute.snapshot.queryParams[this.name])) { // tslint:disable-next-line:radix this.current_page = parseInt(this.activeRoute.snapshot.queryParams[this.name]); } } /** * @return {?} */ ngOnDestroy() { this.navigationSubscription.unsubscribe(); } /** * @param {?} changes * @return {?} */ ngOnChanges(changes) { if (!_.isUndefined(this.paginator)) { /** @type {?} */ const pages = []; /** @type {?} */ const length = this.paginator.getTotalPages(); for (let k = 1; k <= length; k++) { pages.push(k); } this.pages = pages; /** @type {?} */ let newPagesInBetween = []; if (length - 2 > this.numberPageInBetween) { if (this.isHideLeftShowMore(this.current_page)) { for (let k = 2; k <= this.numberPageInBetween + 1; k++) { newPagesInBetween.push(k); } } else if (this.isHideRightShowMore(this.current_page)) { for (let k = length - this.numberPageInBetween; k <= length - 1; k++) { newPagesInBetween.push(k); } } else { if (this.pagesInBetween.indexOf(this.current_page) > -1) { newPagesInBetween = this.pagesInBetween; } else { for (let k = this.current_page; k <= this.current_page + this.numberPageInBetween - 1; k++) { newPagesInBetween.push(k); } } } } else { for (let k = 2; k <= length - 1; k++) { newPagesInBetween.push(k); } } this.pagesInBetween = newPagesInBetween; } } /** * @param {?} page * @param {?=} action * @return {?} */ resolveParams(page, action) { if (!_.isUndefined(action)) { if (action === 'prev') { /** @type {?} */ const prevPage = page - 1; return _.assign({}, this.activeRoute.snapshot.queryParams, { [this.name]: prevPage }); } else if (action === 'next') { /** @type {?} */ const nextPage = page + 1; return _.assign({}, this.activeRoute.snapshot.queryParams, { [this.name]: nextPage }); } else { throw new Exception('only \'prev\' or \'next\' action are allowed'); } } else { return _.assign({}, this.activeRoute.snapshot.queryParams, { [this.name]: page }); } } /** * @return {?} */ getCurrentPage() { return this.current_page; } /** * @param {?} page * @return {?} */ isCurrentPage(page) { return page === this.current_page; } /** * @return {?} */ shouldActivePrev() { return this.current_page > 1; } /** * @return {?} */ shouldActiveNext() { return this.current_page < this.paginator.getTotalPages(); } /** * @return {?} */ getCurrentUrl() { /** @type {?} */ let segments = ['/']; this.activeRoute.snapshot.pathFromRoot.forEach(item => { if (Array.isArray(item.url) && item.url.length > 0) { segments = [...segments, ...item.url.map(i => i.path)]; } }); return segments; } /** * @param {?} page * @return {?} */ isHideLeftShowMore(page) { if (this.pages.length - 2 < this.numberPageInBetween || page <= this.numberPageInBetween + 1) { return true; } else { return false; } } /** * @param {?} page * @return {?} */ isHideRightShowMore(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 = () => [ { type: Router }, { type: ActivatedRoute } ]; LengthAwarePaginatorComponent.propDecorators = { alwaysDisplay: [{ type: Input }], paginator: [{ type: Input }], name: [{ type: Input }] }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVuZ3RoLWF3YXJlLXBhZ2luYXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Admljb2RlcnMvYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9kaXJlY3RpdmVzL2xlbmd0aC1hd2FyZS1wYWdpbmF0b3IvbGVuZ3RoLWF3YXJlLXBhZ2luYXRvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUF1QyxNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RSxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFdkQsT0FBTyxvQkFBb0IsTUFBTSxtQ0FBbUMsQ0FBQztBQVFyRSxNQUFNOzs7OztJQWNKLFlBQVksTUFBYyxFQUFFLFdBQTJCO1FBTnZELFNBQUksR0FBUSxNQUFNLENBQUM7UUFFWixpQkFBWSxHQUFHLENBQUMsQ0FBQztRQUNqQixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1gsd0JBQW1CLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLG1CQUFjLEdBQUcsRUFBRSxDQUFDO1FBRXpCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtZQUNwRSxJQUFJLENBQUMsWUFBWSxhQUFhLEVBQUU7Z0JBQzlCLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFD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QU0sR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7Z0JBQzNHLE9BQU8sSUFBSSxDQUFDO2FBQ2I7aUJBQU07Z0JBQ0wsT0FBTyxLQUFLLENBQUM7YUFDZDtTQUNGO2FBQU07WUFDTCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLEVBQUU7Z0JBQzNGLE9BQU8sSUFBSSxDQUFDO2FBQ2I7aUJBQU07Z0JBQ0wsT0FBTyxLQUFLLENBQUM7YUFDZDtTQUNGO0lBQ0gsQ0FBQzs7O1lBOUlGLFNBQVMsU0FBQzs7Z0JBRVQsUUFBUSxFQUFFLHdCQUF3QjtnQkFDbEMsaTREQUFzRDs7YUFFdkQ7OztZQVh3QixNQUFNO1lBQXRCLGNBQWM7Ozs0QkFlcEIsS0FBSzt3QkFFTCxLQUFLO21CQUVMLEtBQUs7Ozs7SUFOTiwrREFBcUM7O0lBQ3JDLCtDQUFlOztJQUNmLHNEQUN3Qjs7SUFDeEIsa0RBQ2dDOztJQUNoQyw2Q0FDbUI7O0lBQ25CLG9EQUE0Qjs7SUFDNUIscURBQXdCOztJQUN4Qiw4Q0FBa0I7O0lBQ2xCLDREQUErQjs7SUFDL0IsdURBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciwgTmF2aWdhdGlvbkVuZCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBFeGNlcHRpb24gfSBmcm9tICcuLi8uLi9leGNlcHRpb25zL2V4Y2VwdGlvbic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCBMZW5ndGhBd2FyZVBhZ2luYXRvciBmcm9tICcuLi8uLi9tb2RlbHMvTGVuZ3RoQXdhcmVQYWdpbmF0b3InO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xlbmd0aC1hd2FyZS1wYWdpbmF0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vbGVuZ3RoLWF3YXJlLXBhZ2luYXRvci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2xlbmd0aC1hd2FyZS1wYWdpbmF0b3IuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBMZW5ndGhBd2FyZVBhZ2luYXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBuYXZpZ2F0aW9uU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHJvdXRlcjogUm91dGVyO1xuICBASW5wdXQoKVxuICBhbHdheXNEaXNwbGF5PzogQm9vbGVhbjtcbiAgQElucHV0KClcbiAgcGFnaW5hdG9yOiBMZW5ndGhBd2FyZVBhZ2luYXRvcjtcbiAgQElucHV0KClcbiAgbmFtZTogYW55ID0gJ3BhZ2UnO1xuICBhY3RpdmVSb3V0ZTogQWN0aXZhdGVkUm91dGU7XG4gIHB1YmxpYyBjdXJyZW50X3BhZ2UgPSAxO1xuICBwdWJsaWMgcGFnZXMgPSBbXTtcbiAgcHVibGljIG51bWJlclBhZ2VJbkJldHdlZW4gPSA1O1xuICBwdWJsaWMgcGFnZXNJbkJldHdlZW4gPSBbXTtcbiAgY29uc3RydWN0b3Iocm91dGVyOiBSb3V0ZXIsIGFjdGl2ZVJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSkge1xuICAgIHRoaXMucm91dGVyID0gcm91dGVyO1xuICAgIHRoaXMuYWN0aXZlUm91dGUgPSBhY3RpdmVSb3V0ZTtcbiAgICB0aGlzLm5hdmlnYXRpb25TdWJzY3JpcHRpb24gPSB0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKChlOiBhbnkpID0+IHtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkge1xuICAgICAgICBpZiAoIV8uaXNVbmRlZmluZWQodGhpcy5hY3RpdmVSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcy5wYWdlKSkge1xuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpyYWRpeFxuICAgICAgICAgIHRoaXMuY3VycmVudF9wYWdlID0gcGFyc2VJbnQodGhpcy5hY3RpdmVSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcy5wYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIG5nT25Jbml0KCkge1xuICAgIGlmICghXy5pc1VuZGVmaW5lZCh0aGlzLmFjdGl2ZVJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zW3RoaXMubmFtZV0pKSB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6cmFkaXhcbiAgICAgIHRoaXMuY3VycmVudF9wYWdlID0gcGFyc2VJbnQodGhpcy5hY3RpdmVSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1t0aGlzLm5hbWVdKTtcbiAgICB9XG4gIH1cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5uYXZpZ2F0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmICghXy5pc1VuZGVmaW5lZCh0aGlzLnBhZ2luYXRvcikpIHtcbiAgICAgIGNvbnN0IHBhZ2VzID0gW107XG4gICAgICBjb25zdCBsZW5ndGggPSB0aGlzLnBhZ2luYXRvci5nZXRUb3RhbFBhZ2VzKCk7XG4gICAgICBmb3IgKGxldCBrID0gMTsgayA8PSBsZW5ndGg7IGsrKykge1xuICAgICAgICBwYWdlcy5wdXNoKGspO1xuICAgICAgfVxuICAgICAgdGhpcy5wYWdlcyA9IHBhZ2VzO1xuICAgICAgbGV0IG5ld1BhZ2VzSW5CZXR3ZWVuID0gW107XG4gICAgICBpZiAobGVuZ3RoIC0gMiA+IHRoaXMubnVtYmVyUGFnZUluQmV0d2Vlbikge1xuICAgICAgICBpZiAodGhpcy5pc0hpZGVMZWZ0U2hvd01vcmUodGhpcy5jdXJyZW50X3BhZ2UpKSB7XG4gICAgICAgICAgZm9yIChsZXQgayA9IDI7IGsgPD0gdGhpcy5udW1iZXJQYWdlSW5CZXR3ZWVuICsgMTsgaysrKSB7XG4gICAgICAgICAgICBuZXdQYWdlc0luQmV0d2Vlbi5wdXNoKGspO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzSGlkZVJpZ2h0U2hvd01vcmUodGhpcy5jdXJyZW50X3BhZ2UpKSB7XG4gICAgICAgICAgZm9yIChsZXQgayA9IGxlbmd0aCAtIHRoaXMubnVtYmVyUGFnZUluQmV0d2VlbjsgayA8PSBsZW5ndGggLSAxOyBrKyspIHtcbiAgICAgICAgICAgIG5ld1BhZ2VzSW5CZXR3ZWVuLnB1c2goayk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLnBhZ2VzSW5CZXR3ZWVuLmluZGV4T2YodGhpcy5jdXJyZW50X3BhZ2UpID4gLTEpIHtcbiAgICAgICAgICAgIG5ld1BhZ2VzSW5CZXR3ZWVuID0gdGhpcy5wYWdlc0luQmV0d2VlbjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgayA9IHRoaXMuY3VycmVudF9wYWdlOyBrIDw9IHRoaXMuY3VycmVudF9wYWdlICsgdGhpcy5udW1iZXJQYWdlSW5CZXR3ZWVuIC0gMTsgaysrKSB7XG4gICAgICAgICAgICAgIG5ld1BhZ2VzSW5CZXR3ZWVuLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGxldCBrID0gMjsgayA8PSBsZW5ndGggLSAxOyBrKyspIHtcbiAgICAgICAgICBuZXdQYWdlc0luQmV0d2Vlbi5wdXNoKGspO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnBhZ2VzSW5CZXR3ZWVuID0gbmV3UGFnZXNJbkJldHdlZW47XG4gICAgfVxuICB9XG5cbiAgcmVzb2x2ZVBhcmFtcyhwYWdlLCBhY3Rpb24/KSB7XG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKGFjdGlvbikpIHtcbiAgICAgIGlmIChhY3Rpb24gPT09ICdwcmV2Jykge1xuICAgICAgICBjb25zdCBwcmV2UGFnZSA9IHBhZ2UgLSAxO1xuICAgICAgICByZXR1cm4gXy5hc3NpZ24oe30sIHRoaXMuYWN0aXZlUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMsIHsgW3RoaXMubmFtZV06IHByZXZQYWdlIH0pO1xuICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICduZXh0Jykge1xuICAgICAgICBjb25zdCBuZXh0UGFnZSA9IHBhZ2UgKyAxO1xuICAgICAgICByZXR1cm4gXy5hc3NpZ24oe30sIHRoaXMuYWN0aXZlUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMsIHsgW3RoaXMubmFtZV06IG5leHRQYWdlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignb25seSBcXCdwcmV2XFwnIG9yIFxcJ25leHRcXCcgYWN0aW9uIGFyZSBhbGxvd2VkJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBfLmFzc2lnbih7fSwgdGhpcy5hY3RpdmVSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcywgeyBbdGhpcy5uYW1lXTogcGFnZSB9KTtcbiAgICB9XG4gIH1cblxuICBnZXRDdXJyZW50UGFnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50X3BhZ2U7XG4gIH1cblxuICBpc0N1cnJlbnRQYWdlKHBhZ2UpIHtcbiAgICByZXR1cm4gcGFnZSA9PT0gdGhpcy5jdXJyZW50X3BhZ2U7XG4gIH1cblxuICBzaG91bGRBY3RpdmVQcmV2KCkge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRfcGFnZSA+IDE7XG4gIH1cblxuICBzaG91bGRBY3RpdmVOZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRfcGFnZSA8IHRoaXMucGFnaW5hdG9yLmdldFRvdGFsUGFnZXMoKTtcbiAgfVxuXG4gIGdldEN1cnJlbnRVcmwoKSB7XG4gICAgbGV0IHNlZ21lbnRzID0gWycvJ107XG4gICAgdGhpcy5hY3RpdmVSb3V0ZS5zbmFwc2hvdC5wYXRoRnJvbVJvb3QuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW0udXJsKSAmJiBpdGVtLnVybC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHNlZ21lbnRzID0gWy4uLnNlZ21lbnRzLCAuLi5pdGVtLnVybC5tYXAoaSA9PiBpLnBhdGgpXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gc2VnbWVudHM7XG4gIH1cblxuICBpc0hpZGVMZWZ0U2hvd01vcmUocGFnZSkge1xuICAgIGlmICh0aGlzLnBhZ2VzLmxlbmd0aCAtIDIgPCB0aGlzLm51bWJlclBhZ2VJbkJldHdlZW4gfHwgcGFnZSA8PSB0aGlzLm51bWJlclBhZ2VJbkJldHdlZW4gKyAxKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlzSGlkZVJpZ2h0U2hvd01vcmUocGFnZSkge1xuICAgIC8vIGlmIGxlZnQgaGlkZSBtZWFucyB3ZSBrbm93IHRoYXQgdGhlIGxlZnQgb3ZlciBwYWdlcyBpcyBub3QgbW9yZSB0aGFuIHRoaXMubnVtYmVyUGFnZUluQmV0d2VlblxuICAgIGlmICghdGhpcy5pc0hpZGVMZWZ0U2hvd01vcmUocGFnZSkpIHtcbiAgICAgIGlmICh0aGlzLnBhZ2VzLmxlbmd0aCAtIDIgPCB0aGlzLm51bWJlclBhZ2VJbkJldHdlZW4gfHwgcGFnZSA+IHRoaXMucGFnZXMubGVuZ3RoIC0gdGhpcy5udW1iZXJQYWdlSW5CZXR3ZWVuKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5wYWdlcy5sZW5ndGggLSAyIDwgdGhpcy5udW1iZXJQYWdlSW5CZXR3ZWVuIHx8IHBhZ2UgPiB0aGlzLm51bWJlclBhZ2VJbkJldHdlZW4gKyAxKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19