com.phloxui
Version:
PhloxUI Ng2+ Framework
276 lines (273 loc) • 25.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import { Component, Input, ElementRef } from '@angular/core';
import { ComponentDialogModel } from '.././model/ComponentDialogModel';
import { PhloxAppInfoService } from '../../service/PhloxAppInfoService.service';
import { AbstractDialogController } from '../AbstractDialogController';
const /** @type {?} */ TYPE_NAME = "phx-component-dialog";
/**
* <p style="text-indent: 2em;">
* A <code>child-view</code> component class of [[PhloxDialog]] handling logic of <code>component dialog</code>. This class should be
* <b>internally used by the framework</b>. If you just want to show a <code>component dialog</code>. Please see [[DialogService.showComponentDialog]]
* for more info.
* </p>
*
* @author shiorin, tee4cute
* @see [[PhloxDialog]]
* @see [[DialogService]]
*/
export class ComponentDialog extends AbstractDialogController {
/**
* @param {?} elementRef
* @param {?} phloxAppService
*/
constructor(elementRef, phloxAppService) {
super(elementRef);
this.componentInstance = null;
if (phloxAppService != null) {
phloxAppService.getAppInfo().then((result) => {
this.phloxAppInfo = result;
});
}
this.componentHandler = (result) => {
this.componentInstance = result.instance;
if (typeof this.componentInstance.getButtonsChangeEvent === 'function') {
let /** @type {?} */ btnChangeEV = this.componentInstance.getButtonsChangeEvent();
if (btnChangeEV !== null && typeof btnChangeEV !== 'undefined') {
btnChangeEV.subscribe((event) => {
this.refreshActionButtons();
});
}
}
this.refreshActionButtons();
};
}
/**
* @return {?}
*/
ngOnInit() {
this.refreshActionButtons();
}
/**
* @param {?} changes
* @return {?}
*/
ngOnChanges(changes) {
if (changes['model'] !== null && typeof changes['model'] !== 'undefined') {
this.refreshActionButtons();
}
}
/**
* @return {?}
*/
getResultFromComponentWrapper() {
if (this.componentInstance !== null && typeof this.componentInstance !== 'undefined') {
if (typeof this.componentInstance.getDialogResult === 'function') {
return this.componentInstance.getDialogResult();
}
}
return null;
}
/**
* @return {?}
*/
refreshActionButtons() {
let /** @type {?} */ dialogButtons = [];
if (this.componentInstance !== null && typeof this.componentInstance !== 'undefined') {
if (typeof this.componentInstance.getDialogButtons === 'function') {
let /** @type {?} */ actionBths = this.componentInstance.getDialogButtons();
if (actionBths !== null && typeof actionBths !== 'undefined' && Array.isArray(actionBths)) {
for (let /** @type {?} */ btn of actionBths) {
dialogButtons.push(btn);
}
}
}
}
if (dialogButtons.length <= 0) {
if (this.model !== null && typeof this.model !== 'undefined') {
if (this.model.buttonModels !== null && typeof this.model.buttonModels !== 'undefined') {
for (let /** @type {?} */ btn of this.model.buttonModels) {
dialogButtons.push(btn);
}
}
}
}
// auto add btn
if (dialogButtons.length <= 0) {
let /** @type {?} */ cancelHandler = () => {
let /** @type {?} */ result = -1;
if (this.dialog !== null && typeof this.dialog !== 'undefined') {
this.dialog.hideDialog();
}
};
dialogButtons.push(new ComponentDialogModel.ButtonModel(this.getI18NMessage('CANCEL'), null, cancelHandler, ['dialog-btn', 'cancel']));
}
this.dialogButtons = dialogButtons;
}
/**
* @param {?} key
* @return {?}
*/
getI18NMessage(key) {
if (this.phloxAppInfo != null && this.phloxAppInfo.i18n != null) {
if (this.phloxAppInfo.i18n[key] !== null && typeof this.phloxAppInfo.i18n[key] !== 'undefined') {
return this.phloxAppInfo.i18n[key];
}
}
return key;
}
/**
* @param {?} $event
* @return {?}
*/
_onXBtnClicked($event) {
if (this.model !== null && typeof this.model !== 'undefined') {
if (this.model.closeHandler !== null && typeof this.model.closeHandler !== 'undefined') {
if (typeof this.model.closeHandler === 'function') {
this.model.closeHandler.call(null, $event);
}
}
}
}
/**
* @return {?}
*/
_isShowXBtn() {
if (this.model !== null && typeof this.model !== 'undefined') {
if (this.model.closeHandler !== null && typeof this.model.closeHandler !== 'undefined') {
if (typeof this.model.closeHandler === 'function') {
return true;
}
}
}
return false;
}
/**
* @return {?}
*/
_getComponentHandler() {
return this.componentHandler;
}
/**
* @param {?} styleClass
* @return {?}
*/
_getDefaultItemStyleClass(styleClass) {
let /** @type {?} */ defStyleClass = ["dialog-btn"];
if (styleClass !== null && styleClass !== undefined && styleClass.length > 0) {
return styleClass;
}
return defStyleClass;
}
/**
* @return {?}
*/
showDialog() {
this.show = true;
}
/**
* @return {?}
*/
hideDialog() {
this.show = false;
}
/**
* @return {?}
*/
isShow() {
return this.show;
}
/**
* @return {?}
*/
getModel() {
return this.model;
}
/**
* @param {?} model
* @return {?}
*/
setModel(model) {
this.model = model;
this.refreshActionButtons();
}
}
ComponentDialog.TYPE_NAME = TYPE_NAME;
ComponentDialog.decorators = [
{ type: Component, args: [{
moduleId: module.id,
selector: TYPE_NAME,
template: `<div class="phx-component-dialog" [class.show]="isShow()">
<ng-template [ngIf]="getModel() != null">
<div class="dialog-header" [ngClass]="getModel().headerStyleClass">
<div class="wrapper">
<div>
{{getModel() != null ? getModel().title : ''}}
</div>
<div>
<div class="table-wrapper fluid">
<div class="table-cell-wrapper middle">
<h4 class="x-btn" *ngIf="_isShowXBtn()" (click)="_onXBtnClicked($event)">X</h4>
</div>
</div>
</div>
</div>
</div>
<div class="dialog-body" [ngClass]="getModel().bodyStyleClass">
<div>
<phx-component-wrapper #componentWrapper [type]="getModel().componentType" [model]="getModel().model" [handler]="_getComponentHandler()"
[data]="getModel().data"></phx-component-wrapper>
</div>
</div>
<div class="dialog-footer" [ngClass]="getModel().footerStyleClass">
<div class="wrapper">
<div>
<ng-template [ngIf]="getModel() != null">
<div *ngFor="let item of getDialogButtons(); let j = index"
[ngClass]="_getDefaultItemStyleClass(item.styleClass)" (click)="item.handler()">{{item.label}}</div>
</ng-template>
</div>
</div>
</div>
</ng-template>
</div>
`
},] },
];
/** @nocollapse */
ComponentDialog.ctorParameters = () => [
{ type: ElementRef, },
{ type: PhloxAppInfoService, },
];
ComponentDialog.propDecorators = {
"model": [{ type: Input },],
"dialog": [{ type: Input },],
};
function ComponentDialog_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
ComponentDialog.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
ComponentDialog.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
ComponentDialog.propDecorators;
/** @type {?} */
ComponentDialog.TYPE_NAME;
/** @type {?} */
ComponentDialog.prototype.model;
/** @type {?} */
ComponentDialog.prototype.dialog;
/** @type {?} */
ComponentDialog.prototype.componentInstance;
/** @type {?} */
ComponentDialog.prototype.show;
/** @type {?} */
ComponentDialog.prototype.phloxAppInfo;
/** @type {?} */
ComponentDialog.prototype.componentHandler;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcG9uZW50RGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudC9kaWFsb2cuaW50ZXJuYWwvQ29tcG9uZW50RGlhbG9nLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQThDLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQUUsb0JBQW9CLEVBQWUsTUFBTSxpQ0FBaUMsQ0FBQztBQUlwRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNoRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUV2RSx1QkFBTSxTQUFTLEdBQVcsc0JBQXNCLENBQUM7Ozs7Ozs7Ozs7OztBQXNEakQsTUFBTSxzQkFBdUIsU0FBUSx3QkFBd0I7Ozs7O0lBYTNELFlBQVksVUFBc0IsRUFBRSxlQUFvQztRQUN0RSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFbEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUU5QixFQUFFLENBQUMsQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM1QixlQUFlLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQzNDLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDO2FBQzVCLENBQUMsQ0FBQztTQUNKO1FBRUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsTUFBVyxFQUFFLEVBQUU7WUFDdEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7WUFDekMsRUFBRSxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FB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LFVBQVUsQ0FBQztTQUNuQjtRQUVELE1BQU0sQ0FBQyxhQUFhLENBQUM7Ozs7O0lBR2hCLFVBQVU7UUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQzs7Ozs7SUFHWixVQUFVO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7Ozs7O0lBR2IsTUFBTTtRQUNYLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDOzs7OztJQUdaLFFBQVE7UUFDYixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQzs7Ozs7O0lBR2IsUUFBUSxDQUFDLEtBQVU7UUFDeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFbkIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7Ozs0QkEvSmEsU0FBUzs7WUEzQ3JELFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUU7Z0JBQ25CLFFBQVEsRUFBRSxTQUFTO2dCQUNuQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW9DWDthQUNBOzs7O1lBN0RzRSxVQUFVO1lBS3hFLG1CQUFtQjs7O3NCQTZEekIsS0FBSzt1QkFFTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBPbkNoYW5nZXMsIFZpZXdDaGlsZCwgRXZlbnRFbWl0dGVyLCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnREaWFsb2dNb2RlbCwgQnV0dG9uTW9kZWwgfSBmcm9tICcuLi8uL21vZGVsL0NvbXBvbmVudERpYWxvZ01vZGVsJztcbmltcG9ydCB7IERpYWxvZ01vZGVsIH0gZnJvbSAnLi4vLi9tb2RlbC9EaWFsb2dNb2RlbCc7XG5pbXBvcnQgeyBJRGlhbG9nIH0gZnJvbSAnLi9JRGlhbG9nJztcbmltcG9ydCB7IFBobG94QXBwSW5mbyB9IGZyb20gJy4uLy4uL2NvbXBvbmVudC9tb2RlbC9QaGxveEFwcEluZm8nO1xuaW1wb3J0IHsgUGhsb3hBcHBJbmZvU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvUGhsb3hBcHBJbmZvU2VydmljZS5zZXJ2aWNlJztcbmltcG9ydCB7IEFic3RyYWN0RGlhbG9nQ29udHJvbGxlciB9IGZyb20gJy4uL0Fic3RyYWN0RGlhbG9nQ29udHJvbGxlcic7XG5cbmNvbnN0IFRZUEVfTkFNRTogc3RyaW5nID0gXCJwaHgtY29tcG9uZW50LWRpYWxvZ1wiO1xuXG4vKipcbiAqIDxwIHN0eWxlPVwidGV4dC1pbmRlbnQ6IDJlbTtcIj5cbiAqIEEgPGNvZGU+Y2hpbGQtdmlldzwvY29kZT4gY29tcG9uZW50IGNsYXNzIG9mIFtbUGhsb3hEaWFsb2ddXSBoYW5kbGluZyBsb2dpYyBvZiA8Y29kZT5jb21wb25lbnQgZGlhbG9nPC9jb2RlPi4gVGhpcyBjbGFzcyBzaG91bGQgYmVcbiAqIDxiPmludGVybmFsbHkgdXNlZCBieSB0aGUgZnJhbWV3b3JrPC9iPi4gSWYgeW91IGp1c3Qgd2FudCB0byBzaG93IGEgPGNvZGU+Y29tcG9uZW50IGRpYWxvZzwvY29kZT4uIFBsZWFzZSBzZWUgW1tEaWFsb2dTZXJ2aWNlLnNob3dDb21wb25lbnREaWFsb2ddXVxuICogZm9yIG1vcmUgaW5mby5cbiAqIDwvcD5cbiAqXG4gKiBAYXV0aG9yIHNoaW9yaW4sIHRlZTRjdXRlXG4gKiBAc2VlIFtbUGhsb3hEaWFsb2ddXVxuICogQHNlZSBbW0RpYWxvZ1NlcnZpY2VdXVxuICovXG5AQ29tcG9uZW50KHtcbiAgbW9kdWxlSWQ6IG1vZHVsZS5pZCxcbiAgc2VsZWN0b3I6IFRZUEVfTkFNRSxcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwicGh4LWNvbXBvbmVudC1kaWFsb2dcIiBbY2xhc3Muc2hvd109XCJpc1Nob3coKVwiPlxuXHQ8bmctdGVtcGxhdGUgW25nSWZdPVwiZ2V0TW9kZWwoKSAhPSBudWxsXCI+XG5cdFx0PGRpdiBjbGFzcz1cImRpYWxvZy1oZWFkZXJcIiBbbmdDbGFzc109XCJnZXRNb2RlbCgpLmhlYWRlclN0eWxlQ2xhc3NcIj5cblx0XHRcdDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XG5cdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0e3tnZXRNb2RlbCgpICE9IG51bGwgPyBnZXRNb2RlbCgpLnRpdGxlIDogJyd9fVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGFibGUtd3JhcHBlciBmbHVpZFwiPlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInRhYmxlLWNlbGwtd3JhcHBlciBtaWRkbGVcIj5cblx0XHRcdFx0XHRcdFx0PGg0IGNsYXNzPVwieC1idG5cIiAqbmdJZj1cIl9pc1Nob3dYQnRuKClcIiAoY2xpY2spPVwiX29uWEJ0bkNsaWNrZWQoJGV2ZW50KVwiPlg8L2g0PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cblx0XHQ8ZGl2IGNsYXNzPVwiZGlhbG9nLWJvZHlcIiBbbmdDbGFzc109XCJnZXRNb2RlbCgpLmJvZHlTdHlsZUNsYXNzXCI+XG5cdFx0XHQ8ZGl2PlxuXHRcdFx0XHQ8cGh4LWNvbXBvbmVudC13cmFwcGVyICNjb21wb25lbnRXcmFwcGVyIFt0eXBlXT1cImdldE1vZGVsKCkuY29tcG9uZW50VHlwZVwiIFttb2RlbF09XCJnZXRNb2RlbCgpLm1vZGVsXCIgW2hhbmRsZXJdPVwiX2dldENvbXBvbmVudEhhbmRsZXIoKVwiXG5cdFx0XHRcdFx0W2RhdGFdPVwiZ2V0TW9kZWwoKS5kYXRhXCI+PC9waHgtY29tcG9uZW50LXdyYXBwZXI+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblxuXHRcdDxkaXYgY2xhc3M9XCJkaWFsb2ctZm9vdGVyXCIgW25nQ2xhc3NdPVwiZ2V0TW9kZWwoKS5mb290ZXJTdHlsZUNsYXNzXCI+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxuXHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJnZXRNb2RlbCgpICE9IG51bGxcIj5cblx0XHRcdFx0XHQ8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldERpYWxvZ0J1dHRvbnMoKTsgbGV0IGogPSBpbmRleFwiXG5cdFx0XHRcdFx0XHRbbmdDbGFzc109XCJfZ2V0RGVmYXVsdEl0ZW1TdHlsZUNsYXNzKGl0ZW0uc3R5bGVDbGFzcylcIiAoY2xpY2spPVwiaXRlbS5oYW5kbGVyKClcIj57e2l0ZW0ubGFiZWx9fTwvZGl2PlxuXHRcdFx0XHRcdDwvbmctdGVtcGxhdGU+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbmBcbn0pXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50RGlhbG9nIGV4dGVuZHMgQWJzdHJhY3REaWFsb2dDb250cm9sbGVyIGltcGxlbWVudHMgSURpYWxvZywgT25Jbml0LCBPbkNoYW5nZXMge1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVFlQRV9OQU1FOiBzdHJpbmcgPSBUWVBFX05BTUU7XG5cbiAgQElucHV0KClcbiAgcHJpdmF0ZSBtb2RlbDogQ29tcG9uZW50RGlhbG9nTW9kZWw7XG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgZGlhbG9nOiBhbnk7XG4gIHByaXZhdGUgY29tcG9uZW50SW5zdGFuY2U6IGFueTtcbiAgcHJpdmF0ZSBzaG93OiBib29sZWFuO1xuICBwcml2YXRlIHBobG94QXBwSW5mbzogUGhsb3hBcHBJbmZvO1xuICBwcml2YXRlIGNvbXBvbmVudEhhbmRsZXI6IEZ1bmN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIHBobG94QXBwU2VydmljZTogUGhsb3hBcHBJbmZvU2VydmljZSkge1xuICAgIHN1cGVyKGVsZW1lbnRSZWYpO1xuXG4gICAgdGhpcy5jb21wb25lbnRJbnN0YW5jZSA9IG51bGw7XG5cbiAgICBpZiAocGhsb3hBcHBTZXJ2aWNlICE9IG51bGwpIHtcbiAgICAgIHBobG94QXBwU2VydmljZS5nZXRBcHBJbmZvKCkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgIHRoaXMucGhsb3hBcHBJbmZvID0gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wb25lbnRIYW5kbGVyID0gKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICB0aGlzLmNvbXBvbmVudEluc3RhbmNlID0gcmVzdWx0Lmluc3RhbmNlO1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbXBvbmVudEluc3RhbmNlLmdldEJ1dHRvbnNDaGFuZ2VFdmVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBsZXQgYnRuQ2hhbmdlRVYgPSB0aGlzLmNvbXBvbmVudEluc3RhbmNlLmdldEJ1dHRvbnNDaGFuZ2VFdmVudCgpO1xuICAgICAgICBpZiAoYnRuQ2hhbmdlRVYgIT09IG51bGwgJiYgdHlwZW9mIGJ0bkNoYW5nZUVWICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGJ0bkNoYW5nZUVWLnN1YnNjcmliZSgoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoQWN0aW9uQnV0dG9ucygpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMucmVmcmVzaEFjdGlvbkJ1dHRvbnMoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5yZWZyZXNoQWN0aW9uQnV0dG9ucygpO1xuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IGFueSkge1xuICAgIGlmIChjaGFuZ2VzWydtb2RlbCddICE9PSBudWxsICYmIHR5cGVvZiBjaGFuZ2VzWydtb2RlbCddICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5yZWZyZXNoQWN0aW9uQnV0dG9ucygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmVzdWx0RnJvbUNvbXBvbmVudFdyYXBwZXIoKTogYW55IHtcbiAgICBpZiAodGhpcy5jb21wb25lbnRJbnN0YW5jZSAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5jb21wb25lbnRJbnN0YW5jZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5jb21wb25lbnRJbnN0YW5jZS5nZXREaWFsb2dSZXN1bHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcG9uZW50SW5zdGFuY2UuZ2V0RGlhbG9nUmVzdWx0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSByZWZyZXNoQWN0aW9uQnV0dG9ucygpOiB2b2lkIHtcbiAgICBsZXQgZGlhbG9nQnV0dG9ucyA9IFtdO1xuXG4gICAgaWYgKHRoaXMuY29tcG9uZW50SW5zdGFuY2UgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuY29tcG9uZW50SW5zdGFuY2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuY29tcG9uZW50SW5zdGFuY2UuZ2V0RGlhbG9nQnV0dG9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBsZXQgYWN0aW9uQnRocyA9IHRoaXMuY29tcG9uZW50SW5zdGFuY2UuZ2V0RGlhbG9nQnV0dG9ucygpO1xuXG4gICAgICAgIGlmIChhY3Rpb25CdGhzICE9PSBudWxsICYmIHR5cGVvZiBhY3Rpb25CdGhzICE9PSAndW5kZWZpbmVkJyAmJiBBcnJheS5pc0FycmF5KGFjdGlvbkJ0aHMpKSB7XG4gICAgICAgICAgZm9yIChsZXQgYnRuIG9mIGFjdGlvbkJ0aHMpIHtcbiAgICAgICAgICAgIGRpYWxvZ0J1dHRvbnMucHVzaChidG4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkaWFsb2dCdXR0b25zLmxlbmd0aCA8PSAwKSB7XG4gICAgICBpZiAodGhpcy5tb2RlbCAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5tb2RlbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZWwuYnV0dG9uTW9kZWxzICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLm1vZGVsLmJ1dHRvbk1vZGVscyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBmb3IgKGxldCBidG4gb2YgdGhpcy5tb2RlbC5idXR0b25Nb2RlbHMpIHtcbiAgICAgICAgICAgIGRpYWxvZ0J1dHRvbnMucHVzaChidG4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGF1dG8gYWRkIGJ0blxuICAgIGlmIChkaWFsb2dCdXR0b25zLmxlbmd0aCA8PSAwKSB7XG4gICAgICBsZXQgY2FuY2VsSGFuZGxlcjogRnVuY3Rpb24gPSAoKSA9PiB7XG4gICAgICAgIGxldCByZXN1bHQgPSAtMTtcbiAgICAgICAgaWYgKHRoaXMuZGlhbG9nICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmRpYWxvZyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aGlzLmRpYWxvZy5oaWRlRGlhbG9nKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBkaWFsb2dCdXR0b25zLnB1c2gobmV3IENvbXBvbmVudERpYWxvZ01vZGVsLkJ1dHRvbk1vZGVsKHRoaXMuZ2V0STE4Tk1lc3NhZ2UoJ0NBTkNFTCcpLCBudWxsLCBjYW5jZWxIYW5kbGVyLCBbJ2RpYWxvZy1idG4nLCAnY2FuY2VsJ10pKTtcbiAgICB9XG5cbiAgICB0aGlzLmRpYWxvZ0J1dHRvbnMgPSBkaWFsb2dCdXR0b25zO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJMThOTWVzc2FnZShrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMucGhsb3hBcHBJbmZvICE9IG51bGwgJiYgdGhpcy5waGxveEFwcEluZm8uaTE4biAhPSBudWxsKSB7XG4gICAgICBpZiAodGhpcy5waGxveEFwcEluZm8uaTE4bltrZXldICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLnBobG94QXBwSW5mby5pMThuW2tleV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBobG94QXBwSW5mby5pMThuW2tleV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBrZXk7XG4gIH1cblxuICBwdWJsaWMgX29uWEJ0bkNsaWNrZWQoJGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1vZGVsICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLm1vZGVsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKHRoaXMubW9kZWwuY2xvc2VIYW5kbGVyICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLm1vZGVsLmNsb3NlSGFuZGxlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1vZGVsLmNsb3NlSGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRoaXMubW9kZWwuY2xvc2VIYW5kbGVyLmNhbGwobnVsbCwgJGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBfaXNTaG93WEJ0bigpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5tb2RlbCAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5tb2RlbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmICh0aGlzLm1vZGVsLmNsb3NlSGFuZGxlciAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5tb2RlbC5jbG9zZUhhbmRsZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tb2RlbC5jbG9zZUhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBfZ2V0Q29tcG9uZW50SGFuZGxlcigpOiBGdW5jdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50SGFuZGxlcjtcbiAgfVxuXG4gIHB1YmxpYyBfZ2V0RGVmYXVsdEl0ZW1TdHlsZUNsYXNzKHN0eWxlQ2xhc3M6IFN0cmluZ1tdKTogU3RyaW5nW117XG4gICAgbGV0IGRlZlN0eWxlQ2xhc3MgPSBbXCJkaWFsb2ctYnRuXCJdO1xuXG4gICAgaWYoc3R5bGVDbGFzcyAhPT0gbnVsbCAmJiBzdHlsZUNsYXNzICE9PSB1bmRlZmluZWQgJiYgc3R5bGVDbGFzcy5sZW5ndGggPiAwKXtcbiAgICAgIHJldHVybiBzdHlsZUNsYXNzO1xuICAgIH1cblxuICAgIHJldHVybiBkZWZTdHlsZUNsYXNzO1xuICB9XG5cbiAgcHVibGljIHNob3dEaWFsb2coKTogdm9pZCB7XG4gICAgdGhpcy5zaG93ID0gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBoaWRlRGlhbG9nKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvdyA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGlzU2hvdygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaG93O1xuICB9XG5cbiAgcHVibGljIGdldE1vZGVsKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICBwdWJsaWMgc2V0TW9kZWwobW9kZWw6IGFueSk6IHZvaWQge1xuICAgIHRoaXMubW9kZWwgPSBtb2RlbDtcblxuICAgIHRoaXMucmVmcmVzaEFjdGlvbkJ1dHRvbnMoKTtcbiAgfVxufVxuIl19