UNPKG

ng-zorro-antd-mobile

Version:

An enterprise-class mobile UI components based on Ant Design and Angular

317 lines 26.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, ViewEncapsulation, Input, Output, EventEmitter } from '@angular/core'; import { Subject } from 'rxjs'; import { LocaleProviderService } from '../locale-provider/locale-provider.service'; import { takeUntil } from 'rxjs/operators'; /** * @record */ function LocaleValue() { } if (false) { /** @type {?} */ LocaleValue.prototype.okText; /** @type {?} */ LocaleValue.prototype.cancelText; } export class MenuComponent { /** * @param {?} _localeProviderService */ constructor(_localeProviderService) { this._localeProviderService = _localeProviderService; this.prefixCls = 'am-menu'; this.subMenuPrefixCls = 'am-sub-menu'; this.radioPrefixCls = 'am-radio'; this.multiSelectMenuBtnsCls = 'am-multi-select-btns'; this.menuSelectContanerPrefixCls = 'am-menu-select-container'; this.locale = { okText: '', cancelText: '' }; this._data = []; this._unsubscribe$ = new Subject(); this.level = 2; this.value = []; this.height = document.documentElement.clientHeight / 2; this.multiSelect = false; this.onChange = new EventEmitter(); this.onOk = new EventEmitter(); this.onCancel = new EventEmitter(); } /** * @return {?} */ get data() { return this._data; } /** * @param {?} v * @return {?} */ set data(v) { this._data = v; this.initData(); } /** * @return {?} */ onMenuOk() { this.onOk.emit(this.value); } /** * @return {?} */ onMenuCancel() { this.onCancel.emit(); } /** * @return {?} */ getNewFsv() { /** @type {?} */ let firstValue = ''; if (this.value && this.value.length) { firstValue = (/** @type {?} */ (this.value[0])); } else if (this._data && this._data.length && !this._data[0].isLeaf) { firstValue = this._data[0].value; } return firstValue; } /** * @param {?} dataItem * @return {?} */ onClickFirstLevelItem(dataItem) { this.firstLevelSelectValue = dataItem.value; if (dataItem.isLeaf && this.onChange) { this.onChange.emit([dataItem.value]); } this.initData(); } /** * @param {?} dataItem * @return {?} */ onClickSubMenuItem(dataItem) { this.value = this.getSelectValue(dataItem); this.initData(); setTimeout((/** * @return {?} */ () => { this.onChange.emit(this.value); }), 300); } /** * @param {?} dataItem * @return {?} */ getSelectValue(dataItem) { if (this.multiSelect) { if (this.value && this.value.length > 0) { if (this.level === 2 && this.value[0] !== this.firstLevelSelectValue) { return [this.firstLevelSelectValue, [dataItem.value]]; } else { if (this.level == 1) { /** @type {?} */ const chosenValues = Array.from(this.value); /** @type {?} */ const existIndex = chosenValues.indexOf(dataItem.value); if (existIndex === -1) { chosenValues.push(dataItem.value); } else { chosenValues.splice(existIndex, 1); } return chosenValues; } else { /** @type {?} */ const chosenValues = Array.from(this.value[1]); /** @type {?} */ const existIndex = chosenValues.indexOf(dataItem.value); if (existIndex === -1) { chosenValues.push(dataItem.value); } else { chosenValues.splice(existIndex, 1); } return [this.firstLevelSelectValue, chosenValues]; } } } else { return this.level === 2 ? [this.firstLevelSelectValue, [dataItem.value]] : [dataItem.value]; } } return this.level === 2 ? [this.firstLevelSelectValue, dataItem.value] : [dataItem.value]; } /** * @return {?} */ initData() { this.subMenuData = this._data; if (this.level === 2) { /** @type {?} */ let parent = this._data; if (this.firstLevelSelectValue && this.firstLevelSelectValue !== '') { parent = this._data.filter((/** * @param {?} dataItem * @return {?} */ dataItem => dataItem.value === this.firstLevelSelectValue)); } if (parent[0] && parent[0].children && parent[0].isLeaf !== true) { this.subMenuData = parent[0].children; } else { this.subMenuData = []; } } /** @type {?} */ let subValue = (this.value && this.value.length > 0 && [...this.value]) || []; if (this.level === 2 && subValue.length > 1) { subValue.shift(); if (this.multiSelect) { subValue = (/** @type {?} */ (subValue[0])); } } this.subSelInitItem = this.subMenuData .filter((/** * @param {?} dataItem * @return {?} */ dataItem => subValue.indexOf(dataItem.value) !== -1)) .map((/** * @param {?} item * @return {?} */ item => { return item.value; })); /** @type {?} */ const parentValue = this.value && this.value.length > 1 && this.level === 2 ? this.value[0] : null; this.showSelect = true; if (this.level === 2 && parentValue !== this.firstLevelSelectValue) { this.showSelect = false; } } /** * @param {?} dataItem * @return {?} */ getClass(dataItem) { return this.dataItemSelected(dataItem) ? this.prefixCls + '-selected' : ''; } /** * @param {?} dataItem * @return {?} */ dataItemSelected(dataItem) { return dataItem.value === this.firstLevelSelectValue; } /** * @return {?} */ ngOnInit() { this._localeProviderService.localeChange.pipe(takeUntil(this._unsubscribe$)).subscribe((/** * @param {?} _ * @return {?} */ _ => { this.locale = (/** @type {?} */ (this._localeProviderService.getLocaleSubObj('Menu'))); })); this.firstLevelSelectValue = this.getNewFsv(); this.heightStyle = { height: this.height + 'px' }; this.initData(); } /** * @return {?} */ ngOnDestroy() { this._unsubscribe$.next(); this._unsubscribe$.complete(); } } MenuComponent.decorators = [ { type: Component, args: [{ selector: 'Menu, nzm-menu', template: "<Flex class=\"{{ prefixCls }}\" [ngStyle]=\"heightStyle\" [direction]=\"'column'\" [align]=\"'stretch'\">\n <Flex class=\"{{ menuSelectContanerPrefixCls }}\" [align]=\"'start'\">\n <FlexItem *ngIf=\"level == 2\">\n <List role=\"tablist\">\n <ListItem\n role=\"tab\"\n *ngFor=\"let dataItem of data; let i = index\"\n [className]=\"getClass(dataItem)\"\n (click)=\"onClickFirstLevelItem(dataItem)\"\n >\n {{ dataItem.label }}\n </ListItem>\n </List>\n </FlexItem>\n\n <FlexItem role=\"tabpanel\" aria-hidden=\"false\" class=\"{{ menuSelectContanerPrefixCls }}-submenu\">\n <SubMenu\n [subMenuPrefixCls]=\"subMenuPrefixCls\"\n [radioPrefixCls]=\"radioPrefixCls\"\n [subMenuData]=\"subMenuData\"\n [selItem]=\"subSelInitItem\"\n [showSelect]=\"showSelect\"\n [multiSelect]=\"multiSelect\"\n (onSel)=\"onClickSubMenuItem($event)\"\n >\n </SubMenu>\n </FlexItem>\n </Flex>\n\n <div *ngIf=\"multiSelect\" class=\"{{ multiSelectMenuBtnsCls }}\">\n <a Button [className]=\"'am-multi-select-btns-btn'\" [inline]=\"true\" (onClick)=\"onMenuCancel()\">\n {{ locale.cancelText }}\n </a>\n <a Button [className]=\"'am-multi-select-btns-btn'\" [inline]=\"true\" [type]=\"'primary'\" (onClick)=\"onMenuOk()\">\n {{ locale.okText }}\n </a>\n </div>\n</Flex>\n", encapsulation: ViewEncapsulation.None }] } ]; /** @nocollapse */ MenuComponent.ctorParameters = () => [ { type: LocaleProviderService } ]; MenuComponent.propDecorators = { data: [{ type: Input }], level: [{ type: Input }], value: [{ type: Input }], height: [{ type: Input }], multiSelect: [{ type: Input }], onChange: [{ type: Output }], onOk: [{ type: Output }], onCancel: [{ type: Output }] }; if (false) { /** @type {?} */ MenuComponent.prototype.prefixCls; /** @type {?} */ MenuComponent.prototype.subMenuPrefixCls; /** @type {?} */ MenuComponent.prototype.radioPrefixCls; /** @type {?} */ MenuComponent.prototype.multiSelectMenuBtnsCls; /** @type {?} */ MenuComponent.prototype.menuSelectContanerPrefixCls; /** @type {?} */ MenuComponent.prototype.firstLevelSelectValue; /** @type {?} */ MenuComponent.prototype.heightStyle; /** @type {?} */ MenuComponent.prototype.subMenuData; /** @type {?} */ MenuComponent.prototype.showSelect; /** @type {?} */ MenuComponent.prototype.subSelInitItem; /** @type {?} */ MenuComponent.prototype.locale; /** * @type {?} * @private */ MenuComponent.prototype._data; /** * @type {?} * @private */ MenuComponent.prototype._unsubscribe$; /** @type {?} */ MenuComponent.prototype.level; /** @type {?} */ MenuComponent.prototype.value; /** @type {?} */ MenuComponent.prototype.height; /** @type {?} */ MenuComponent.prototype.multiSelect; /** @type {?} */ MenuComponent.prototype.onChange; /** @type {?} */ MenuComponent.prototype.onOk; /** @type {?} */ MenuComponent.prototype.onCancel; /** * @type {?} * @private */ MenuComponent.prototype._localeProviderService; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS8iLCJzb3VyY2VzIjpbIm1lbnUvbWVudS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDN0csT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNuRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFFM0MsMEJBR0M7OztJQUZDLDZCQUFlOztJQUNmLGlDQUFtQjs7QUFRckIsTUFBTSxPQUFPLGFBQWE7Ozs7SUEwQ3hCLFlBQW9CLHNCQUE2QztRQUE3QywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXVCO1FBekNqRSxjQUFTLEdBQVcsU0FBUyxDQUFDO1FBQzlCLHFCQUFnQixHQUFXLGFBQWEsQ0FBQztRQUN6QyxtQkFBYyxHQUFXLFVBQVUsQ0FBQztRQUNwQywyQkFBc0IsR0FBVyxzQkFBc0IsQ0FBQztRQUN4RCxnQ0FBMkIsR0FBVywwQkFBMEIsQ0FBQztRQU1qRSxXQUFNLEdBQWdCO1lBQ3BCLE1BQU0sRUFBRSxFQUFFO1lBQ1YsVUFBVSxFQUFFLEVBQUU7U0FDZixDQUFDO1FBRU0sVUFBSyxHQUFlLEVBQUUsQ0FBQztRQUN2QixrQkFBYSxHQUFrQixJQUFJLE9BQU8sRUFBUSxDQUFDO1FBVzNELFVBQUssR0FBVyxDQUFDLENBQUM7UUFFbEIsVUFBSyxHQUFlLEVBQUUsQ0FBQztRQUV2QixXQUFNLEdBQVcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO1FBRTNELGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBRTdCLGFBQVEsR0FBc0Is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O1FBQ2pGLENBQUMsRUFBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUU5QyxJQUFJLENBQUMsV0FBVyxHQUFHO1lBQ2pCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUk7U0FDM0IsQ0FBQztRQUNGLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDOzs7O0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNoQyxDQUFDOzs7WUFoTEYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxnQkFBZ0I7Z0JBQzFCLHk1Q0FBb0M7Z0JBQ3BDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2FBQ3RDOzs7O1lBWlEscUJBQXFCOzs7bUJBZ0MzQixLQUFLO29CQVFMLEtBQUs7b0JBRUwsS0FBSztxQkFFTCxLQUFLOzBCQUVMLEtBQUs7dUJBRUwsTUFBTTttQkFFTixNQUFNO3VCQUVOLE1BQU07Ozs7SUF0Q1Asa0NBQThCOztJQUM5Qix5Q0FBeUM7O0lBQ3pDLHVDQUFvQzs7SUFDcEMsK0NBQXdEOztJQUN4RCxvREFBaUU7O0lBQ2pFLDhDQUF1Qzs7SUFDdkMsb0NBQW9COztJQUNwQixvQ0FBd0I7O0lBQ3hCLG1DQUFvQjs7SUFDcEIsdUNBQXVCOztJQUN2QiwrQkFHRTs7Ozs7SUFFRiw4QkFBK0I7Ozs7O0lBQy9CLHNDQUEyRDs7SUFVM0QsOEJBQ2tCOztJQUNsQiw4QkFDdUI7O0lBQ3ZCLCtCQUMyRDs7SUFDM0Qsb0NBQzZCOztJQUM3QixpQ0FDc0Q7O0lBQ3RELDZCQUNrRDs7SUFDbEQsaUNBQ3NEOzs7OztJQUUxQywrQ0FBcUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0VuY2Fwc3VsYXRpb24sIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBMb2NhbGVQcm92aWRlclNlcnZpY2UgfSBmcm9tICcuLi9sb2NhbGUtcHJvdmlkZXIvbG9jYWxlLXByb3ZpZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbnRlcmZhY2UgTG9jYWxlVmFsdWUge1xuICBva1RleHQ6IHN0cmluZztcbiAgY2FuY2VsVGV4dDogc3RyaW5nO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdNZW51LCBuem0tbWVudScsXG4gIHRlbXBsYXRlVXJsOiAnLi9tZW51LmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBNZW51Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcmVmaXhDbHM6IHN0cmluZyA9ICdhbS1tZW51JztcbiAgc3ViTWVudVByZWZpeENsczogc3RyaW5nID0gJ2FtLXN1Yi1tZW51JztcbiAgcmFkaW9QcmVmaXhDbHM6IHN0cmluZyA9ICdhbS1yYWRpbyc7XG4gIG11bHRpU2VsZWN0TWVudUJ0bnNDbHM6IHN0cmluZyA9ICdhbS1tdWx0aS1zZWxlY3QtYnRucyc7XG4gIG1lbnVTZWxlY3RDb250YW5lclByZWZpeENsczogc3RyaW5nID0gJ2FtLW1lbnUtc2VsZWN0LWNvbnRhaW5lcic7XG4gIGZpcnN0TGV2ZWxTZWxlY3RWYWx1ZTogbnVtYmVyIHwgc3RyaW5nO1xuICBoZWlnaHRTdHlsZTogb2JqZWN0O1xuICBzdWJNZW51RGF0YTogQXJyYXk8YW55PjtcbiAgc2hvd1NlbGVjdDogYm9vbGVhbjtcbiAgc3ViU2VsSW5pdEl0ZW06IG9iamVjdDtcbiAgbG9jYWxlOiBMb2NhbGVWYWx1ZSA9IHtcbiAgICBva1RleHQ6ICcnLFxuICAgIGNhbmNlbFRleHQ6ICcnXG4gIH07XG5cbiAgcHJpdmF0ZSBfZGF0YTogQXJyYXk8YW55PiA9IFtdO1xuICBwcml2YXRlIF91bnN1YnNjcmliZSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBkYXRhKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICB9XG4gIHNldCBkYXRhKHYpIHtcbiAgICB0aGlzLl9kYXRhID0gdjtcbiAgICB0aGlzLmluaXREYXRhKCk7XG4gIH1cbiAgQElucHV0KClcbiAgbGV2ZWw6IG51bWJlciA9IDI7XG4gIEBJbnB1dCgpXG4gIHZhbHVlOiBBcnJheTxhbnk+ID0gW107XG4gIEBJbnB1dCgpXG4gIGhlaWdodDogbnVtYmVyID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCAvIDI7XG4gIEBJbnB1dCgpXG4gIG11bHRpU2VsZWN0OiBib29sZWFuID0gZmFsc2U7XG4gIEBPdXRwdXQoKVxuICBvbkNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpXG4gIG9uT2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKVxuICBvbkNhbmNlbDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9sb2NhbGVQcm92aWRlclNlcnZpY2U6IExvY2FsZVByb3ZpZGVyU2VydmljZSkge31cblxuICBvbk1lbnVPaygpIHtcbiAgICB0aGlzLm9uT2suZW1pdCh0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIG9uTWVudUNhbmNlbCgpIHtcbiAgICB0aGlzLm9uQ2FuY2VsLmVtaXQoKTtcbiAgfVxuXG4gIGdldE5ld0ZzdigpIHtcbiAgICBsZXQgZmlyc3RWYWx1ZSA9ICcnO1xuICAgIGlmICh0aGlzLnZhbHVlICYmIHRoaXMudmFsdWUubGVuZ3RoKSB7XG4gICAgICBmaXJzdFZhbHVlID0gdGhpcy52YWx1ZVswXSBhcyBzdHJpbmc7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9kYXRhICYmIHRoaXMuX2RhdGEubGVuZ3RoICYmICF0aGlzLl9kYXRhWzBdLmlzTGVhZikge1xuICAgICAgZmlyc3RWYWx1ZSA9IHRoaXMuX2RhdGFbMF0udmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBmaXJzdFZhbHVlO1xuICB9XG5cbiAgb25DbGlja0ZpcnN0TGV2ZWxJdGVtKGRhdGFJdGVtKSB7XG4gICAgdGhpcy5maXJzdExldmVsU2VsZWN0VmFsdWUgPSBkYXRhSXRlbS52YWx1ZTtcbiAgICBpZiAoZGF0YUl0ZW0uaXNMZWFmICYmIHRoaXMub25DaGFuZ2UpIHtcbiAgICAgIHRoaXMub25DaGFuZ2UuZW1pdChbZGF0YUl0ZW0udmFsdWVdKTtcbiAgICB9XG4gICAgdGhpcy5pbml0RGF0YSgpO1xuICB9XG5cbiAgb25DbGlja1N1Yk1lbnVJdGVtKGRhdGFJdGVtKSB7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0U2VsZWN0VmFsdWUoZGF0YUl0ZW0pO1xuICAgIHRoaXMuaW5pdERhdGEoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICB9LCAzMDApO1xuICB9XG5cbiAgZ2V0U2VsZWN0VmFsdWUoZGF0YUl0ZW0pIHtcbiAgICBpZiAodGhpcy5tdWx0aVNlbGVjdCkge1xuICAgICAgaWYgKHRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmICh0aGlzLmxldmVsID09PSAyICYmIHRoaXMudmFsdWVbMF0gIT09IHRoaXMuZmlyc3RMZXZlbFNlbGVjdFZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIFt0aGlzLmZpcnN0TGV2ZWxTZWxlY3RWYWx1ZSwgW2RhdGFJdGVtLnZhbHVlXV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMubGV2ZWwgPT0gMSkge1xuICAgICAgICAgICAgY29uc3QgY2hvc2VuVmFsdWVzID0gQXJyYXkuZnJvbSh0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0SW5kZXggPSBjaG9zZW5WYWx1ZXMuaW5kZXhPZihkYXRhSXRlbS52YWx1ZSk7XG4gICAgICAgICAgICBpZiAoZXhpc3RJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgY2hvc2VuVmFsdWVzLnB1c2goZGF0YUl0ZW0udmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY2hvc2VuVmFsdWVzLnNwbGljZShleGlzdEluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjaG9zZW5WYWx1ZXM7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGNob3NlblZhbHVlcyA9IEFycmF5LmZyb20odGhpcy52YWx1ZVsxXSk7XG4gICAgICAgICAgICBjb25zdCBleGlzdEluZGV4ID0gY2hvc2VuVmFsdWVzLmluZGV4T2YoZGF0YUl0ZW0udmFsdWUpO1xuICAgICAgICAgICAgaWYgKGV4aXN0SW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgIGNob3NlblZhbHVlcy5wdXNoKGRhdGFJdGVtLnZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNob3NlblZhbHVlcy5zcGxpY2UoZXhpc3RJbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW3RoaXMuZmlyc3RMZXZlbFNlbGVjdFZhbHVlLCBjaG9zZW5WYWx1ZXNdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGV2ZWwgPT09IDIgPyBbdGhpcy5maXJzdExldmVsU2VsZWN0VmFsdWUsIFtkYXRhSXRlbS52YWx1ZV1dIDogW2RhdGFJdGVtLnZhbHVlXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubGV2ZWwgPT09IDIgPyBbdGhpcy5maXJzdExldmVsU2VsZWN0VmFsdWUsIGRhdGFJdGVtLnZhbHVlXSA6IFtkYXRhSXRlbS52YWx1ZV07XG4gIH1cblxuICBpbml0RGF0YSgpIHtcbiAgICB0aGlzLnN1Yk1lbnVEYXRhID0gdGhpcy5fZGF0YTtcbiAgICBpZiAodGhpcy5sZXZlbCA9PT0gMikge1xuICAgICAgbGV0IHBhcmVudCA9IHRoaXMuX2RhdGE7XG4gICAgICBpZiAodGhpcy5maXJzdExldmVsU2VsZWN0VmFsdWUgJiYgdGhpcy5maXJzdExldmVsU2VsZWN0VmFsdWUgIT09ICcnKSB7XG4gICAgICAgIHBhcmVudCA9IHRoaXMuX2RhdGEuZmlsdGVyKGRhdGFJdGVtID0+IGRhdGFJdGVtLnZhbHVlID09PSB0aGlzLmZpcnN0TGV2ZWxTZWxlY3RWYWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAocGFyZW50WzBdICYmIHBhcmVudFswXS5jaGlsZHJlbiAmJiBwYXJlbnRbMF0uaXNMZWFmICE9PSB0cnVlKSB7XG4gICAgICAgIHRoaXMuc3ViTWVudURhdGEgPSBwYXJlbnRbMF0uY2hpbGRyZW47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN1Yk1lbnVEYXRhID0gW107XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHN1YlZhbHVlID0gKHRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiAwICYmIFsuLi50aGlzLnZhbHVlXSkgfHwgW107XG4gICAgaWYgKHRoaXMubGV2ZWwgPT09IDIgJiYgc3ViVmFsdWUubGVuZ3RoID4gMSkge1xuICAgICAgc3ViVmFsdWUuc2hpZnQoKTtcbiAgICAgIGlmICh0aGlzLm11bHRpU2VsZWN0KSB7XG4gICAgICAgIHN1YlZhbHVlID0gc3ViVmFsdWVbMF0gYXMgc3RyaW5nW107XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zdWJTZWxJbml0SXRlbSA9IHRoaXMuc3ViTWVudURhdGFcbiAgICAgIC5maWx0ZXIoZGF0YUl0ZW0gPT4gc3ViVmFsdWUuaW5kZXhPZihkYXRhSXRlbS52YWx1ZSkgIT09IC0xKVxuICAgICAgLm1hcChpdGVtID0+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW0udmFsdWU7XG4gICAgICB9KTtcblxuICAgIGNvbnN0IHBhcmVudFZhbHVlID0gdGhpcy52YWx1ZSAmJiB0aGlzLnZhbHVlLmxlbmd0aCA+IDEgJiYgdGhpcy5sZXZlbCA9PT0gMiA/IHRoaXMudmFsdWVbMF0gOiBudWxsO1xuXG4gICAgdGhpcy5zaG93U2VsZWN0ID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5sZXZlbCA9PT0gMiAmJiBwYXJlbnRWYWx1ZSAhPT0gdGhpcy5maXJzdExldmVsU2VsZWN0VmFsdWUpIHtcbiAgICAgIHRoaXMuc2hvd1NlbGVjdCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGdldENsYXNzKGRhdGFJdGVtKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YUl0ZW1TZWxlY3RlZChkYXRhSXRlbSkgPyB0aGlzLnByZWZpeENscyArICctc2VsZWN0ZWQnIDogJyc7XG4gIH1cblxuICBkYXRhSXRlbVNlbGVjdGVkKGRhdGFJdGVtKSB7XG4gICAgcmV0dXJuIGRhdGFJdGVtLnZhbHVlID09PSB0aGlzLmZpcnN0TGV2ZWxTZWxlY3RWYWx1ZTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuX2xvY2FsZVByb3ZpZGVyU2VydmljZS5sb2NhbGVDaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKF8gPT4ge1xuICAgICAgdGhpcy5sb2NhbGUgPSA8TG9jYWxlVmFsdWU+dGhpcy5fbG9jYWxlUHJvdmlkZXJTZXJ2aWNlLmdldExvY2FsZVN1Yk9iaignTWVudScpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5maXJzdExldmVsU2VsZWN0VmFsdWUgPSB0aGlzLmdldE5ld0ZzdigpO1xuXG4gICAgdGhpcy5oZWlnaHRTdHlsZSA9IHtcbiAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQgKyAncHgnXG4gICAgfTtcbiAgICB0aGlzLmluaXREYXRhKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl91bnN1YnNjcmliZSQubmV4dCgpO1xuICAgIHRoaXMuX3Vuc3Vic2NyaWJlJC5jb21wbGV0ZSgpO1xuICB9XG59XG4iXX0=