UNPKG

ng-zorro-antd-mobile

Version:

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

275 lines (274 loc) 25 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,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'; 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 = {}; 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(() => { 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(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(dataItem => subValue.indexOf(dataItem.value) !== -1).map(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(_ => { this.locale = 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}}\"\n [ngStyle]=\"heightStyle\"\n [direction]=\"'column'\"\n [align]=\"'stretch'\"\n>\n <Flex class=\"{{menuSelectContanerPrefixCls}}\" [align]=\"'start'\">\n <FlexItem *ngIf=\"level == 2\">\n <List role=\"tablist\">\n <ListItem 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 [subMenuPrefixCls]=\"subMenuPrefixCls\"\n [radioPrefixCls]=\"radioPrefixCls\"\n [subMenuData]=\"subMenuData\"\n [selItem]=\"subSelInitItem\"\n [showSelect]=\"showSelect\"\n [multiSelect]=\"multiSelect\"\n (onSel)=\"onClickSubMenuItem($event)\">\n </SubMenu>\n </FlexItem>\n </Flex>\n\n <div *ngIf=\"multiSelect\" class=\"{{multiSelectMenuBtnsCls}}\">\n <a Button\n [className]=\"'am-multi-select-btns-btn'\"\n [inline]=\"true\"\n (onClick)=\"onMenuCancel()\"\n >\n {{locale.cancelText}}\n </a>\n <a Button\n [className]=\"'am-multi-select-btns-btn'\"\n [inline]=\"true\" [type]=\"'primary'\"\n (onClick)=\"onMenuOk()\"\n >\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 {?} */ MenuComponent.prototype._data; /** @type {?} */ 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 {?} */ MenuComponent.prototype._localeProviderService; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS8iLCJzb3VyY2VzIjpbIm1lbnUvbWVudS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDN0csT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNuRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFPM0MsTUFBTTs7OztJQXVDSixZQUFvQixzQkFBNkM7UUFBN0MsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF1Qjt5QkF0QzdDLFNBQVM7Z0NBQ0YsYUFBYTs4QkFDZixVQUFVO3NDQUNGLHNCQUFzQjsyQ0FDakIsMEJBQTBCO3NCQU0vQyxFQUFFO3FCQUVTLEVBQUU7NkJBQ1MsSUFBSSxPQUFPLEVBQVE7cUJBVzFDLENBQUM7cUJBRUcsRUFBRTtzQkFFTCxRQUFRLENBQUMsZUFBZSxDQUFDLFlBQVksR0FBRyxDQUFDOzJCQUVuQyxLQUFLO3dCQUVFLElBQUksWUFBWSxFQUFPO29CQUUzQixJQUFJLFlBQVksRUFBTzt3QkFFbkIsSUFBSSxZQUFZLEVBQU87S0FFZ0I7Ozs7SUF2QnJFLElBQ0ksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztLQUNuQjs7Ozs7SUFDRCxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQ1IsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7S0FDakI7Ozs7SUFrQkQsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMs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RUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2FBQ3RDOzs7O1lBUFEscUJBQXFCOzs7bUJBd0IzQixLQUFLO29CQVFMLEtBQUs7b0JBRUwsS0FBSztxQkFFTCxLQUFLOzBCQUVMLEtBQUs7dUJBRUwsTUFBTTttQkFFTixNQUFNO3VCQUVOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0VuY2Fwc3VsYXRpb24sIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBMb2NhbGVQcm92aWRlclNlcnZpY2UgfSBmcm9tICcuLi9sb2NhbGUtcHJvdmlkZXIvbG9jYWxlLXByb3ZpZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdNZW51LCBuem0tbWVudScsXG4gIHRlbXBsYXRlVXJsOiAnLi9tZW51LmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBNZW51Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcmVmaXhDbHM6IHN0cmluZyA9ICdhbS1tZW51JztcbiAgc3ViTWVudVByZWZpeENsczogc3RyaW5nID0gJ2FtLXN1Yi1tZW51JztcbiAgcmFkaW9QcmVmaXhDbHM6IHN0cmluZyA9ICdhbS1yYWRpbyc7XG4gIG11bHRpU2VsZWN0TWVudUJ0bnNDbHM6IHN0cmluZyA9ICdhbS1tdWx0aS1zZWxlY3QtYnRucyc7XG4gIG1lbnVTZWxlY3RDb250YW5lclByZWZpeENsczogc3RyaW5nID0gJ2FtLW1lbnUtc2VsZWN0LWNvbnRhaW5lcic7XG4gIGZpcnN0TGV2ZWxTZWxlY3RWYWx1ZTogbnVtYmVyIHwgc3RyaW5nO1xuICBoZWlnaHRTdHlsZTogb2JqZWN0O1xuICBzdWJNZW51RGF0YTogQXJyYXk8YW55PjtcbiAgc2hvd1NlbGVjdDogYm9vbGVhbjtcbiAgc3ViU2VsSW5pdEl0ZW06IG9iamVjdDtcbiAgbG9jYWxlOiBvYmplY3QgPSB7fTtcblxuICBwcml2YXRlIF9kYXRhOiBBcnJheTxhbnk+ID0gW107XG4gIHByaXZhdGUgX3Vuc3Vic2NyaWJlJDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgQElucHV0KClcbiAgZ2V0IGRhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gIH1cbiAgc2V0IGRhdGEodikge1xuICAgIHRoaXMuX2RhdGEgPSB2O1xuICAgIHRoaXMuaW5pdERhdGEoKTtcbiAgfVxuICBASW5wdXQoKVxuICBsZXZlbDogbnVtYmVyID0gMjtcbiAgQElucHV0KClcbiAgdmFsdWU6IEFycmF5PGFueT4gPSBbXTtcbiAgQElucHV0KClcbiAgaGVpZ2h0OiBudW1iZXIgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0IC8gMjtcbiAgQElucHV0KClcbiAgbXVsdGlTZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQE91dHB1dCgpXG4gIG9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KClcbiAgb25PazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpXG4gIG9uQ2FuY2VsOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2xvY2FsZVByb3ZpZGVyU2VydmljZTogTG9jYWxlUHJvdmlkZXJTZXJ2aWNlKSB7fVxuXG4gIG9uTWVudU9rKCkge1xuICAgIHRoaXMub25Pay5lbWl0KHRoaXMudmFsdWUpO1xuICB9XG5cbiAgb25NZW51Q2FuY2VsKCkge1xuICAgIHRoaXMub25DYW5jZWwuZW1pdCgpO1xuICB9XG5cbiAgZ2V0TmV3RnN2KCkge1xuICAgIGxldCBmaXJzdFZhbHVlID0gJyc7XG4gICAgaWYgKHRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZS5sZW5ndGgpIHtcbiAgICAgIGZpcnN0VmFsdWUgPSB0aGlzLnZhbHVlWzBdIGFzIHN0cmluZztcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2RhdGEgJiYgdGhpcy5fZGF0YS5sZW5ndGggJiYgIXRoaXMuX2RhdGFbMF0uaXNMZWFmKSB7XG4gICAgICBmaXJzdFZhbHVlID0gdGhpcy5fZGF0YVswXS52YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZpcnN0VmFsdWU7XG4gIH1cblxuICBvbkNsaWNrRmlyc3RMZXZlbEl0ZW0oZGF0YUl0ZW0pIHtcbiAgICB0aGlzLmZpcnN0TGV2ZWxTZWxlY3RWYWx1ZSA9IGRhdGFJdGVtLnZhbHVlO1xuICAgIGlmIChkYXRhSXRlbS5pc0xlYWYgJiYgdGhpcy5vbkNoYW5nZSkge1xuICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KFtkYXRhSXRlbS52YWx1ZV0pO1xuICAgIH1cbiAgICB0aGlzLmluaXREYXRhKCk7XG4gIH1cblxuICBvbkNsaWNrU3ViTWVudUl0ZW0oZGF0YUl0ZW0pIHtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5nZXRTZWxlY3RWYWx1ZShkYXRhSXRlbSk7XG4gICAgdGhpcy5pbml0RGF0YSgpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICAgIH0sIDMwMCk7XG4gIH1cblxuICBnZXRTZWxlY3RWYWx1ZShkYXRhSXRlbSkge1xuICAgIGlmICh0aGlzLm11bHRpU2VsZWN0KSB7XG4gICAgICBpZiAodGhpcy52YWx1ZSAmJiB0aGlzLnZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKHRoaXMubGV2ZWwgPT09IDIgJiYgdGhpcy52YWx1ZVswXSAhPT0gdGhpcy5maXJzdExldmVsU2VsZWN0VmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gW3RoaXMuZmlyc3RMZXZlbFNlbGVjdFZhbHVlLCBbZGF0YUl0ZW0udmFsdWVdXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5sZXZlbCA9PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBjaG9zZW5WYWx1ZXMgPSBBcnJheS5mcm9tKHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgY29uc3QgZXhpc3RJbmRleCA9IGNob3NlblZhbHVlcy5pbmRleE9mKGRhdGFJdGVtLnZhbHVlKTtcbiAgICAgICAgICAgIGlmIChleGlzdEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICBjaG9zZW5WYWx1ZXMucHVzaChkYXRhSXRlbS52YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjaG9zZW5WYWx1ZXMuc3BsaWNlKGV4aXN0SW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNob3NlblZhbHVlcztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY2hvc2VuVmFsdWVzID0gQXJyYXkuZnJvbSh0aGlzLnZhbHVlWzFdKTtcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0SW5kZXggPSBjaG9zZW5WYWx1ZXMuaW5kZXhPZihkYXRhSXRlbS52YWx1ZSk7XG4gICAgICAgICAgICBpZiAoZXhpc3RJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgY2hvc2VuVmFsdWVzLnB1c2goZGF0YUl0ZW0udmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY2hvc2VuVmFsdWVzLnNwbGljZShleGlzdEluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbdGhpcy5maXJzdExldmVsU2VsZWN0VmFsdWUsIGNob3NlblZhbHVlc107XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5sZXZlbCA9PT0gMiA/IFt0aGlzLmZpcnN0TGV2ZWxTZWxlY3RWYWx1ZSwgW2RhdGFJdGVtLnZhbHVlXV0gOiBbZGF0YUl0ZW0udmFsdWVdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5sZXZlbCA9PT0gMiA/IFt0aGlzLmZpcnN0TGV2ZWxTZWxlY3RWYWx1ZSwgZGF0YUl0ZW0udmFsdWVdIDogW2RhdGFJdGVtLnZhbHVlXTtcbiAgfVxuXG4gIGluaXREYXRhKCkge1xuICAgIHRoaXMuc3ViTWVudURhdGEgPSB0aGlzLl9kYXRhO1xuICAgIGlmICh0aGlzLmxldmVsID09PSAyKSB7XG4gICAgICBsZXQgcGFyZW50ID0gdGhpcy5fZGF0YTtcbiAgICAgIGlmICh0aGlzLmZpcnN0TGV2ZWxTZWxlY3RWYWx1ZSAmJiB0aGlzLmZpcnN0TGV2ZWxTZWxlY3RWYWx1ZSAhPT0gJycpIHtcbiAgICAgICAgcGFyZW50ID0gdGhpcy5fZGF0YS5maWx0ZXIoZGF0YUl0ZW0gPT4gZGF0YUl0ZW0udmFsdWUgPT09IHRoaXMuZmlyc3RMZXZlbFNlbGVjdFZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChwYXJlbnRbMF0gJiYgcGFyZW50WzBdLmNoaWxkcmVuICYmIHBhcmVudFswXS5pc0xlYWYgIT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5zdWJNZW51RGF0YSA9IHBhcmVudFswXS5jaGlsZHJlbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3ViTWVudURhdGEgPSBbXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgc3ViVmFsdWUgPSAodGhpcy52YWx1ZSAmJiB0aGlzLnZhbHVlLmxlbmd0aCA+IDAgJiYgWy4uLnRoaXMudmFsdWVdKSB8fCBbXTtcbiAgICBpZiAodGhpcy5sZXZlbCA9PT0gMiAmJiBzdWJWYWx1ZS5sZW5ndGggPiAxKSB7XG4gICAgICBzdWJWYWx1ZS5zaGlmdCgpO1xuICAgICAgaWYgKHRoaXMubXVsdGlTZWxlY3QpIHtcbiAgICAgICAgc3ViVmFsdWUgPSBzdWJWYWx1ZVswXSBhcyBzdHJpbmdbXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN1YlNlbEluaXRJdGVtID0gdGhpcy5zdWJNZW51RGF0YS5maWx0ZXIoZGF0YUl0ZW0gPT4gc3ViVmFsdWUuaW5kZXhPZihkYXRhSXRlbS52YWx1ZSkgIT09IC0xKS5tYXAoaXRlbSA9PiB7XG4gICAgICByZXR1cm4gaXRlbS52YWx1ZTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHBhcmVudFZhbHVlID0gdGhpcy52YWx1ZSAmJiB0aGlzLnZhbHVlLmxlbmd0aCA+IDEgJiYgdGhpcy5sZXZlbCA9PT0gMiA/IHRoaXMudmFsdWVbMF0gOiBudWxsO1xuXG4gICAgdGhpcy5zaG93U2VsZWN0ID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5sZXZlbCA9PT0gMiAmJiBwYXJlbnRWYWx1ZSAhPT0gdGhpcy5maXJzdExldmVsU2VsZWN0VmFsdWUpIHtcbiAgICAgIHRoaXMuc2hvd1NlbGVjdCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGdldENsYXNzKGRhdGFJdGVtKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YUl0ZW1TZWxlY3RlZChkYXRhSXRlbSkgPyB0aGlzLnByZWZpeENscyArICctc2VsZWN0ZWQnIDogJyc7XG4gIH1cblxuICBkYXRhSXRlbVNlbGVjdGVkKGRhdGFJdGVtKSB7XG4gICAgcmV0dXJuIGRhdGFJdGVtLnZhbHVlID09PSB0aGlzLmZpcnN0TGV2ZWxTZWxlY3RWYWx1ZTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuX2xvY2FsZVByb3ZpZGVyU2VydmljZS5sb2NhbGVDaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKF8gPT4ge1xuICAgICAgdGhpcy5sb2NhbGUgPSB0aGlzLl9sb2NhbGVQcm92aWRlclNlcnZpY2UuZ2V0TG9jYWxlU3ViT2JqKCdNZW51Jyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmZpcnN0TGV2ZWxTZWxlY3RWYWx1ZSA9IHRoaXMuZ2V0TmV3RnN2KCk7XG5cbiAgICB0aGlzLmhlaWdodFN0eWxlID0ge1xuICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCArICdweCdcbiAgICB9O1xuICAgIHRoaXMuaW5pdERhdGEoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3Vuc3Vic2NyaWJlJC5uZXh0KCk7XG4gICAgdGhpcy5fdW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiJdfQ==