ng-zorro-antd-mobile
Version:
An enterprise-class mobile UI components based on Ant Design and Angular
77 lines • 28.2 kB
JavaScript
import { Component, ElementRef, TemplateRef, ViewEncapsulation } from '@angular/core';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { LocaleProviderService } from 'ng-zorro-antd-mobile/locale-provider';
import { ActionSheetRef } from './action-sheet-ref.class';
import * as i0 from "@angular/core";
import * as i1 from "ng-zorro-antd-mobile/locale-provider";
import * as i2 from "@angular/common";
import * as i3 from "ng-zorro-antd-mobile/core";
import * as i4 from "ng-zorro-antd-mobile/pipes";
export class ActionSheetComponent extends ActionSheetRef {
constructor(localeProviderService, elementRef) {
super();
this.localeProviderService = localeProviderService;
this.elementRef = elementRef;
this.unsubscribe$ = new Subject();
}
ngOnInit() {
this.localeProvider();
}
localeProvider() {
const self = this;
if (self.option.locale || self.option.locale !== undefined) {
self.localeProviderService.setLocale(self.option.locale);
}
self.localeProviderService.localeChange.pipe(takeUntil(self.unsubscribe$)).subscribe(_ => {
if (self.option.cancelButtonText) {
self.option.cancelButtonText = self.localeProviderService.getLocaleSubObj('ActionSheet')['dismissText'];
}
});
}
onPress(index, rowIndex = 0, event) { }
showShare(option) {
const cls = { [`${option.prefixCls}-share`]: option.flag === 'SHARE' };
return cls;
}
setActiveClassName(option, suffix) {
return [`${option.prefixCls}-${suffix}-active`];
}
isNoTitle(value) {
return value === '' || value === null || value === undefined;
}
isTemplateRef(value) {
return value instanceof TemplateRef;
}
isArray(options, value) {
if (options.length > 0 && value) {
return value instanceof Array;
}
return false;
}
getInstance() {
return this;
}
getElement() {
return this.elementRef && this.elementRef.nativeElement;
}
close() {
if (this.option.close) {
this.option.close();
}
}
destroy() {
this.close();
}
ngOnDestroy() {
this.unsubscribe$.next();
this.unsubscribe$.complete();
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: ActionSheetComponent, deps: [{ token: i1.LocaleProviderService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.8", type: ActionSheetComponent, selector: "ActionSheet", usesInheritance: true, ngImport: i0, template: "<div class=\"{{ option.prefixCls }}-mask {{ option.maskTransitionName }}\"></div>\n<div\n role=\"dialog\"\n class=\"{{ option.prefixCls }}-wrap {{ option.transitionName }}\"\n (click)=\"option.maskClose(-1, 0, $event)\"\n>\n <div role=\"document\" class=\"{{ option.prefixCls }}\" [ngClass]=\"showShare(option)\">\n <div class=\"{{ option.prefixCls }}-content\">\n <button aria-label=\"Close\" class=\"{{ option.prefixCls }}-close\">\n <span class=\"{{ option.prefixCls }}-close-x\"></span>\n </button>\n <div class=\"{{ option.prefixCls }}-body\">\n <div>\n <ng-container *ngIf=\"!isNoTitle(option.title)\">\n <ng-template *ngIf=\"isTemplateRef(option.title)\" [ngTemplateOutlet]=\"option.title\"></ng-template>\n <h3 *ngIf=\"!isTemplateRef(option.title)\" class=\"{{ option.prefixCls }}-title\">{{ option.title }}</h3>\n </ng-container>\n <ng-container *ngIf=\"!isNoTitle(option.message)\">\n <ng-template *ngIf=\"isTemplateRef(option.message)\" [ngTemplateOutlet]=\"option.message\"></ng-template>\n <div *ngIf=\"!isTemplateRef(option.message)\" class=\"{{ option.prefixCls }}-message\">\n {{ option.message }}\n </div>\n </ng-container>\n <ng-container [ngSwitch]=\"option.flag\">\n <div *ngSwitchCase=\"'NORMAL'\" class=\"{{ option.prefixCls }}-button-list\" role=\"group\">\n <ng-container *ngFor=\"let item of option.options; let i = index\">\n <div\n TouchFeedbackDirective\n class=\"{{ option.prefixCls }}-button-list-item\"\n [className]=\"setActiveClassName(option, 'button-list-item')\"\n >\n <div\n *ngIf=\"option.destructiveButtonIndex !== i && option.cancelButtonIndex !== i\"\n class=\"{{ option.prefixCls }}-button-list-item\"\n (click)=\"option.onPress(i, 0, $event)\"\n >\n {{ item }}\n </div>\n <div\n *ngIf=\"option.destructiveButtonIndex === i\"\n class=\"{{ option.prefixCls }}-button-list-item {{ option.prefixCls }}-destructive-button\"\n (click)=\"option.onPress(i, 0, $event)\"\n >\n {{ item }}\n </div>\n <div\n *ngIf=\"option.cancelButtonIndex === i\"\n class=\"{{ option.prefixCls }}-button-list-item {{ option.prefixCls }}-cancel-button\"\n (click)=\"option.onPress(i, 0, $event)\"\n >\n {{ item }}\n <span class=\"{{ option.prefixCls }}-cancel-button-mask\"></span>\n </div>\n </div>\n </ng-container>\n </div>\n <div *ngSwitchCase=\"'SHARE'\" class=\"{{ option.prefixCls }}-share {{ option.prefixCls }}-share-content\">\n <div *ngIf=\"!isArray(option.options, option.options[0])\" class=\"{{ option.prefixCls }}-share-list\">\n <ng-container *ngFor=\"let item of option.options; let i = index\">\n <div class=\"{{ option.prefixCls }}-share-list-item\" (click)=\"option.onPress(i, 0, $event)\">\n <div class=\"{{ option.prefixCls }}-share-list-item-icon\">\n <ng-template *ngIf=\"isTemplateRef(item.icon)\" [ngTemplateOutlet]=\"item.icon\"></ng-template>\n <div *ngIf=\"!isTemplateRef(item.icon)\" [innerHTML]=\"item.icon | safeHTML\"></div>\n </div>\n <div class=\"{{ option.prefixCls }}-share-list-item-title\">{{ item.title }}</div>\n </div>\n </ng-container>\n </div>\n <ng-container *ngIf=\"isArray(option.options, option.options[0])\">\n <div\n *ngFor=\"let items of option.options; let rowIndex = index\"\n class=\"{{ option.prefixCls }}-share-list\"\n >\n <ng-container *ngFor=\"let item of items; let i = index\">\n <div class=\"{{ option.prefixCls }}-share-list-item\" (click)=\"option.onPress(i, rowIndex, $event)\">\n <div class=\"{{ option.prefixCls }}-share-list-item-icon\">\n <ng-template *ngIf=\"isTemplateRef(item.icon)\" [ngTemplateOutlet]=\"item.icon\"></ng-template>\n <div *ngIf=\"!isTemplateRef(item.icon)\" [innerHTML]=\"item.icon | safeHTML\"></div>\n </div>\n <div class=\"{{ option.prefixCls }}-share-list-item-title\">{{ item.title }}</div>\n </div>\n </ng-container>\n </div>\n </ng-container>\n <div\n TouchFeedbackDirective\n [className]=\"setActiveClassName(option, 'share-cancel-button')\"\n class=\"{{ option.prefixCls }}-share-cancel-button\"\n >\n {{ option.cancelButtonText }}\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.TouchFeedbackDirective, selector: "[TouchFeedbackDirective]", inputs: ["className", "activeStyle"], outputs: ["clickStart", "clickEnd"] }, { kind: "pipe", type: i4.SafeHTMLPipe, name: "safeHTML" }], encapsulation: i0.ViewEncapsulation.None }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: ActionSheetComponent, decorators: [{
type: Component,
args: [{ selector: 'ActionSheet', encapsulation: ViewEncapsulation.None, template: "<div class=\"{{ option.prefixCls }}-mask {{ option.maskTransitionName }}\"></div>\n<div\n role=\"dialog\"\n class=\"{{ option.prefixCls }}-wrap {{ option.transitionName }}\"\n (click)=\"option.maskClose(-1, 0, $event)\"\n>\n <div role=\"document\" class=\"{{ option.prefixCls }}\" [ngClass]=\"showShare(option)\">\n <div class=\"{{ option.prefixCls }}-content\">\n <button aria-label=\"Close\" class=\"{{ option.prefixCls }}-close\">\n <span class=\"{{ option.prefixCls }}-close-x\"></span>\n </button>\n <div class=\"{{ option.prefixCls }}-body\">\n <div>\n <ng-container *ngIf=\"!isNoTitle(option.title)\">\n <ng-template *ngIf=\"isTemplateRef(option.title)\" [ngTemplateOutlet]=\"option.title\"></ng-template>\n <h3 *ngIf=\"!isTemplateRef(option.title)\" class=\"{{ option.prefixCls }}-title\">{{ option.title }}</h3>\n </ng-container>\n <ng-container *ngIf=\"!isNoTitle(option.message)\">\n <ng-template *ngIf=\"isTemplateRef(option.message)\" [ngTemplateOutlet]=\"option.message\"></ng-template>\n <div *ngIf=\"!isTemplateRef(option.message)\" class=\"{{ option.prefixCls }}-message\">\n {{ option.message }}\n </div>\n </ng-container>\n <ng-container [ngSwitch]=\"option.flag\">\n <div *ngSwitchCase=\"'NORMAL'\" class=\"{{ option.prefixCls }}-button-list\" role=\"group\">\n <ng-container *ngFor=\"let item of option.options; let i = index\">\n <div\n TouchFeedbackDirective\n class=\"{{ option.prefixCls }}-button-list-item\"\n [className]=\"setActiveClassName(option, 'button-list-item')\"\n >\n <div\n *ngIf=\"option.destructiveButtonIndex !== i && option.cancelButtonIndex !== i\"\n class=\"{{ option.prefixCls }}-button-list-item\"\n (click)=\"option.onPress(i, 0, $event)\"\n >\n {{ item }}\n </div>\n <div\n *ngIf=\"option.destructiveButtonIndex === i\"\n class=\"{{ option.prefixCls }}-button-list-item {{ option.prefixCls }}-destructive-button\"\n (click)=\"option.onPress(i, 0, $event)\"\n >\n {{ item }}\n </div>\n <div\n *ngIf=\"option.cancelButtonIndex === i\"\n class=\"{{ option.prefixCls }}-button-list-item {{ option.prefixCls }}-cancel-button\"\n (click)=\"option.onPress(i, 0, $event)\"\n >\n {{ item }}\n <span class=\"{{ option.prefixCls }}-cancel-button-mask\"></span>\n </div>\n </div>\n </ng-container>\n </div>\n <div *ngSwitchCase=\"'SHARE'\" class=\"{{ option.prefixCls }}-share {{ option.prefixCls }}-share-content\">\n <div *ngIf=\"!isArray(option.options, option.options[0])\" class=\"{{ option.prefixCls }}-share-list\">\n <ng-container *ngFor=\"let item of option.options; let i = index\">\n <div class=\"{{ option.prefixCls }}-share-list-item\" (click)=\"option.onPress(i, 0, $event)\">\n <div class=\"{{ option.prefixCls }}-share-list-item-icon\">\n <ng-template *ngIf=\"isTemplateRef(item.icon)\" [ngTemplateOutlet]=\"item.icon\"></ng-template>\n <div *ngIf=\"!isTemplateRef(item.icon)\" [innerHTML]=\"item.icon | safeHTML\"></div>\n </div>\n <div class=\"{{ option.prefixCls }}-share-list-item-title\">{{ item.title }}</div>\n </div>\n </ng-container>\n </div>\n <ng-container *ngIf=\"isArray(option.options, option.options[0])\">\n <div\n *ngFor=\"let items of option.options; let rowIndex = index\"\n class=\"{{ option.prefixCls }}-share-list\"\n >\n <ng-container *ngFor=\"let item of items; let i = index\">\n <div class=\"{{ option.prefixCls }}-share-list-item\" (click)=\"option.onPress(i, rowIndex, $event)\">\n <div class=\"{{ option.prefixCls }}-share-list-item-icon\">\n <ng-template *ngIf=\"isTemplateRef(item.icon)\" [ngTemplateOutlet]=\"item.icon\"></ng-template>\n <div *ngIf=\"!isTemplateRef(item.icon)\" [innerHTML]=\"item.icon | safeHTML\"></div>\n </div>\n <div class=\"{{ option.prefixCls }}-share-list-item-title\">{{ item.title }}</div>\n </div>\n </ng-container>\n </div>\n </ng-container>\n <div\n TouchFeedbackDirective\n [className]=\"setActiveClassName(option, 'share-cancel-button')\"\n class=\"{{ option.prefixCls }}-share-cancel-button\"\n >\n {{ option.cancelButtonText }}\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
}], ctorParameters: () => [{ type: i1.LocaleProviderService }, { type: i0.ElementRef }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLXNoZWV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvbXBvbmVudHMvYWN0aW9uLXNoZWV0L2FjdGlvbi1zaGVldC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi9jb21wb25lbnRzL2FjdGlvbi1zaGVldC9hY3Rpb24tc2hlZXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLFNBQVMsRUFBYSxVQUFVLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7O0FBTzFELE1BQU0sT0FBTyxvQkFBdUMsU0FBUSxjQUFvQjtJQUc5RSxZQUFvQixxQkFBNEMsRUFBUyxVQUFzQjtRQUM3RixLQUFLLEVBQUUsQ0FBQztRQURVLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFBUyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBRi9GLGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUluQyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsY0FBYztRQUNaLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTtZQUMxRCxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDMUQ7UUFDRCxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3ZGLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDaEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ3pHO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQVUsRUFBRSxRQUFRLEdBQUcsQ0FBQyxFQUFFLEtBQUssSUFBRyxDQUFDO0lBQzNDLFNBQVMsQ0FBQyxNQUFNO1FBQ2QsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsUUFBUSxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUN2RSxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsTUFBTTtRQUMvQixPQUFPLENBQUMsR0FBRyxNQUFNLENBQUMsU0FBUyxJQUFJLE1BQU0sU0FBUyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFnQztRQUN4QyxPQUFPLEtBQUssS0FBSyxFQUFFLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxDQUFDO0lBQy9ELENBQUM7SUFFRCxhQUFhLENBQUMsS0FBSztRQUNqQixPQUFPLEtBQUssWUFBWSxXQUFXLENBQUM7SUFDdEMsQ0FBQztJQUVELE9BQU8sQ0FBQyxPQUFZLEVBQUUsS0FBVTtRQUM5QixJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEtBQUssRUFBRTtZQUMvQixPQUFPLEtBQUssWUFBWSxLQUFLLENBQUM7U0FDL0I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztJQUMxRCxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7WUFDckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNyQjtJQUNILENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDL0IsQ0FBQzs4R0FyRVUsb0JBQW9CO2tHQUFwQixvQkFBb0IsMEVDWGpDLCt0S0FrR0E7OzJGRHZGYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0UsYUFBYSxpQkFFUixpQkFBaUIsQ0FBQyxJQUFJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT25Jbml0LCBDb21wb25lbnQsIE9uRGVzdHJveSwgRWxlbWVudFJlZiwgVGVtcGxhdGVSZWYsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBMb2NhbGVQcm92aWRlclNlcnZpY2UgfSBmcm9tICduZy16b3Jyby1hbnRkLW1vYmlsZS9sb2NhbGUtcHJvdmlkZXInO1xuaW1wb3J0IHsgQWN0aW9uU2hlZXRSZWYgfSBmcm9tICcuL2FjdGlvbi1zaGVldC1yZWYuY2xhc3MnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdBY3Rpb25TaGVldCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hY3Rpb24tc2hlZXQuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIEFjdGlvblNoZWV0Q29tcG9uZW50PFQgPSBhbnksIFIgPSBhbnk+IGV4dGVuZHMgQWN0aW9uU2hlZXRSZWY8VCwgUj4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHVuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIG9wdGlvbjogYW55O1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxvY2FsZVByb3ZpZGVyU2VydmljZTogTG9jYWxlUHJvdmlkZXJTZXJ2aWNlLCBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmxvY2FsZVByb3ZpZGVyKCk7XG4gIH1cblxuICBsb2NhbGVQcm92aWRlcigpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBpZiAoc2VsZi5vcHRpb24ubG9jYWxlIHx8IHNlbGYub3B0aW9uLmxvY2FsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzZWxmLmxvY2FsZVByb3ZpZGVyU2VydmljZS5zZXRMb2NhbGUoc2VsZi5vcHRpb24ubG9jYWxlKTtcbiAgICB9XG4gICAgc2VsZi5sb2NhbGVQcm92aWRlclNlcnZpY2UubG9jYWxlQ2hhbmdlLnBpcGUodGFrZVVudGlsKHNlbGYudW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKF8gPT4ge1xuICAgICAgaWYgKHNlbGYub3B0aW9uLmNhbmNlbEJ1dHRvblRleHQpIHtcbiAgICAgICAgc2VsZi5vcHRpb24uY2FuY2VsQnV0dG9uVGV4dCA9IHNlbGYubG9jYWxlUHJvdmlkZXJTZXJ2aWNlLmdldExvY2FsZVN1Yk9iaignQWN0aW9uU2hlZXQnKVsnZGlzbWlzc1RleHQnXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9uUHJlc3MoaW5kZXg6IGFueSwgcm93SW5kZXggPSAwLCBldmVudCkge31cbiAgc2hvd1NoYXJlKG9wdGlvbikge1xuICAgIGNvbnN0IGNscyA9IHsgW2Ake29wdGlvbi5wcmVmaXhDbHN9LXNoYXJlYF06IG9wdGlvbi5mbGFnID09PSAnU0hBUkUnIH07XG4gICAgcmV0dXJuIGNscztcbiAgfVxuXG4gIHNldEFjdGl2ZUNsYXNzTmFtZShvcHRpb24sIHN1ZmZpeCkge1xuICAgIHJldHVybiBbYCR7b3B0aW9uLnByZWZpeENsc30tJHtzdWZmaXh9LWFjdGl2ZWBdO1xuICB9XG5cbiAgaXNOb1RpdGxlKHZhbHVlOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaXNUZW1wbGF0ZVJlZih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmO1xuICB9XG5cbiAgaXNBcnJheShvcHRpb25zOiBhbnksIHZhbHVlOiBhbnkpIHtcbiAgICBpZiAob3B0aW9ucy5sZW5ndGggPiAwICYmIHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBBcnJheTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0SW5zdGFuY2UoKTogQWN0aW9uU2hlZXRDb21wb25lbnQge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0RWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZiAmJiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9wdGlvbi5jbG9zZSkge1xuICAgICAgdGhpcy5vcHRpb24uY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBkZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLm5leHQoKTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlJC5jb21wbGV0ZSgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwie3sgb3B0aW9uLnByZWZpeENscyB9fS1tYXNrIHt7IG9wdGlvbi5tYXNrVHJhbnNpdGlvbk5hbWUgfX1cIj48L2Rpdj5cbjxkaXZcbiAgcm9sZT1cImRpYWxvZ1wiXG4gIGNsYXNzPVwie3sgb3B0aW9uLnByZWZpeENscyB9fS13cmFwIHt7IG9wdGlvbi50cmFuc2l0aW9uTmFtZSB9fVwiXG4gIChjbGljayk9XCJvcHRpb24ubWFza0Nsb3NlKC0xLCAwLCAkZXZlbnQpXCJcbj5cbiAgPGRpdiByb2xlPVwiZG9jdW1lbnRcIiBjbGFzcz1cInt7IG9wdGlvbi5wcmVmaXhDbHMgfX1cIiBbbmdDbGFzc109XCJzaG93U2hhcmUob3B0aW9uKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJ7eyBvcHRpb24ucHJlZml4Q2xzIH19LWNvbnRlbnRcIj5cbiAgICAgIDxidXR0b24gYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJ7eyBvcHRpb24ucHJlZml4Q2xzIH19LWNsb3NlXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwie3sgb3B0aW9uLnByZWZpeENscyB9fS1jbG9zZS14XCI+PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8ZGl2IGNsYXNzPVwie3sgb3B0aW9uLnByZWZpeENscyB9fS1ib2R5XCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc05vVGl0bGUob3B0aW9uLnRpdGxlKVwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiaXNUZW1wbGF0ZVJlZihvcHRpb24udGl0bGUpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwib3B0aW9uLnRpdGxlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxoMyAqbmdJZj1cIiFpc1RlbXBsYXRlUmVmKG9wdGlvbi50aXRsZSlcIiBjbGFzcz1cInt7IG9wdGlvbi5wcmVmaXhDbHMgfX0tdGl0bGVcIj57eyBvcHRpb24udGl0bGUgfX08L2gzPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNOb1RpdGxlKG9wdGlvbi5tZXNzYWdlKVwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiaXNUZW1wbGF0ZVJlZihvcHRpb24ubWVzc2FnZSlcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb24ubWVzc2FnZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzVGVtcGxhdGVSZWYob3B0aW9uLm1lc3NhZ2UpXCIgY2xhc3M9XCJ7eyBvcHRpb24ucHJlZml4Q2xzIH19LW1lc3NhZ2VcIj5cbiAgICAgICAgICAgICAge3sgb3B0aW9uLm1lc3NhZ2UgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cIm9wdGlvbi5mbGFnXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInTk9STUFMJ1wiIGNsYXNzPVwie3sgb3B0aW9uLnByZWZpeENscyB9fS1idXR0b24tbGlzdFwiIHJvbGU9XCJncm91cFwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIG9wdGlvbi5vcHRpb25zOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgVG91Y2hGZWVkYmFja0RpcmVjdGl2ZVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBvcHRpb24ucHJlZml4Q2xzIH19LWJ1dHRvbi1saXN0LWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzTmFtZV09XCJzZXRBY3RpdmVDbGFzc05hbWUob3B0aW9uLCAnYnV0dG9uLWxpc3QtaXRlbScpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwib3B0aW9uLmRlc3RydWN0aXZlQnV0dG9uSW5kZXggIT09IGkgJiYgb3B0aW9uLmNhbmNlbEJ1dHRvbkluZGV4ICE9PSBpXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBvcHRpb24ucHJlZml4Q2xzIH19LWJ1dHRvbi1saXN0LWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3B0aW9uLm9uUHJlc3MoaSwgMCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0gfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm9wdGlvbi5kZXN0cnVjdGl2ZUJ1dHRvbkluZGV4ID09PSBpXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBvcHRpb24ucHJlZml4Q2xzIH19LWJ1dHRvbi1saXN0LWl0ZW0ge3sgb3B0aW9uLnByZWZpeENscyB9fS1kZXN0cnVjdGl2ZS1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3B0aW9uLm9uUHJlc3MoaSwgMCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0gfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm9wdGlvbi5jYW5jZWxCdXR0b25JbmRleCA9PT0gaVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgb3B0aW9uLnByZWZpeENscyB9fS1idXR0b24tbGlzdC1pdGVtIHt7IG9wdGlvbi5wcmVmaXhDbHMgfX0tY2FuY2VsLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcHRpb24ub25QcmVzcyhpLCAwLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgaXRlbSB9fVxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInt7IG9wdGlvbi5wcmVmaXhDbHMgfX0tY2FuY2VsLWJ1dHRvbi1tYXNrXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInU0hBUkUnXCIgY2xhc3M9XCJ7eyBvcHRpb24ucHJlZml4Q2xzIH19LXNoYXJlIHt7IG9wdGlvbi5wcmVmaXhDbHMgfX0tc2hhcmUtY29udGVudFwiPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzQXJyYXkob3B0aW9uLm9wdGlvbnMsIG9wdGlvbi5vcHRpb25zWzBdKVwiIGNsYXNzPVwie3sgb3B0aW9uLnByZWZpeENscyB9fS1zaGFyZS1saXN0XCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBvcHRpb24ub3B0aW9uczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInt7IG9wdGlvbi5wcmVmaXhDbHMgfX0tc2hhcmUtbGlzdC1pdGVtXCIgKGNsaWNrKT1cIm9wdGlvbi5vblByZXNzKGksIDAsICRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInt7IG9wdGlvbi5wcmVmaXhDbHMgfX0tc2hhcmUtbGlzdC1pdGVtLWljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJpc1RlbXBsYXRlUmVmKGl0ZW0uaWNvbilcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJpdGVtLmljb25cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXNUZW1wbGF0ZVJlZihpdGVtLmljb24pXCIgW2lubmVySFRNTF09XCJpdGVtLmljb24gfCBzYWZlSFRNTFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInt7IG9wdGlvbi5wcmVmaXhDbHMgfX0tc2hhcmUtbGlzdC1pdGVtLXRpdGxlXCI+e3sgaXRlbS50aXRsZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNBcnJheShvcHRpb24ub3B0aW9ucywgb3B0aW9uLm9wdGlvbnNbMF0pXCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW1zIG9mIG9wdGlvbi5vcHRpb25zOyBsZXQgcm93SW5kZXggPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInt7IG9wdGlvbi5wcmVmaXhDbHMgfX0tc2hhcmUtbGlzdFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwie3sgb3B0aW9uLnByZWZpeENscyB9fS1zaGFyZS1saXN0LWl0ZW1cIiAoY2xpY2spPVwib3B0aW9uLm9uUHJlc3MoaSwgcm93SW5kZXgsICRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwie3sgb3B0aW9uLnByZWZpeENscyB9fS1zaGFyZS1saXN0LWl0ZW0taWNvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiaXNUZW1wbGF0ZVJlZihpdGVtLmljb24pXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaXRlbS5pY29uXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXNUZW1wbGF0ZVJlZihpdGVtLmljb24pXCIgW2lubmVySFRNTF09XCJpdGVtLmljb24gfCBzYWZlSFRNTFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ7eyBvcHRpb24ucHJlZml4Q2xzIH19LXNoYXJlLWxpc3QtaXRlbS10aXRsZVwiPnt7IGl0ZW0udGl0bGUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBUb3VjaEZlZWRiYWNrRGlyZWN0aXZlXG4gICAgICAgICAgICAgICAgW2NsYXNzTmFtZV09XCJzZXRBY3RpdmVDbGFzc05hbWUob3B0aW9uLCAnc2hhcmUtY2FuY2VsLWJ1dHRvbicpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInt7IG9wdGlvbi5wcmVmaXhDbHMgfX0tc2hhcmUtY2FuY2VsLWJ1dHRvblwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBvcHRpb24uY2FuY2VsQnV0dG9uVGV4dCB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19