ng-zorro-antd-mobile
Version:
An enterprise-class mobile UI components based on Ant Design and Angular
317 lines • 26.8 kB
JavaScript
/**
* @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=