com.phloxui
Version:
PhloxUI Ng2+ Framework
161 lines (160 loc) • 17.2 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import { Component, Input, Output, ViewContainerRef, Type, EventEmitter, ComponentFactoryResolver } from '@angular/core';
import { DATA_CHANGE_EVENT } from '../../share/CustomEventType';
import { AbstractDataViewWrapper } from './AbstractDataViewWrapper';
const /** @type {?} */ TYPE_NAME = "phx-data-view-wrapper";
export class DataViewWrapper extends AbstractDataViewWrapper {
/**
* @param {?} target
* @param {?} componentFactoryResolver
*/
constructor(target, componentFactoryResolver) {
super(target, componentFactoryResolver);
}
/**
* @return {?}
*/
ngOnInit() {
super.ngOnInit();
}
/**
* @param {?} changes
* @return {?}
*/
ngOnChanges(changes) {
if (changes['componentType'] !== null && typeof changes['componentType'] !== 'undefined') {
let /** @type {?} */ oldType = changes['componentType'].previousValue;
let /** @type {?} */ newType = changes['componentType'].currentValue;
if (oldType !== newType) {
this.render();
}
}
if (changes['data'] !== null && typeof changes['data'] !== 'undefined') {
let /** @type {?} */ oldData = changes['data'].previousValue;
let /** @type {?} */ newData = changes['data'].currentValue;
if (oldData !== newData) {
if (this.componentRef !== null && this.componentRef !== undefined) {
this.componentRef.instance.setData(this.data);
}
else {
this.render();
}
}
}
if (changes['options'] !== null && typeof changes['options'] !== 'undefined') {
let /** @type {?} */ oldOpt = changes['options'].previousValue;
let /** @type {?} */ newOpt = changes['options'].currentValue;
if (oldOpt !== newOpt) {
if (this.componentRef !== null && this.componentRef !== undefined) {
this.componentRef.instance.setOptions(this.options);
}
else {
this.render();
}
}
}
if (this.componentRef !== null && typeof this.componentRef !== 'undefined') {
if (changes['class'] !== null && typeof changes['class'] !== 'undefined') {
let /** @type {?} */ oldClass = changes['class'].previousValue;
let /** @type {?} */ newClass = changes['class'].currentValue;
if (oldClass !== newClass) {
$(this.componentRef.location.nativeElement).attr('class', newClass);
}
}
}
}
/**
* @return {?}
*/
render() {
// remove old dom
if (this.componentRef !== null && typeof this.componentRef !== 'undefined') {
if (typeof this.componentRef.instance.setData === 'function') {
this.componentRef.instance.setData(null);
}
if (typeof this.componentRef.instance.setDataParent === 'function') {
this.componentRef.instance.setDataParent(null);
}
this.componentRef.destroy();
}
if (this.componentType != null && (typeof this.componentType !== 'undefined')) {
const /** @type {?} */ simpleCompoFactory = this.componentFactoryResolver.resolveComponentFactory(this.componentType);
let /** @type {?} */ compRef = this.target.createComponent(simpleCompoFactory);
compRef.instance.setData(this.data);
compRef.instance.setOptions(this.options);
this.componentRef = compRef;
let /** @type {?} */ compHandler = null;
if (typeof compRef.instance.getEventHandler === 'function') {
compHandler = compRef.instance.getEventHandler();
}
if (compHandler !== null && typeof compHandler !== 'undefined') {
compHandler.subscribe((event) => {
if (event.type == DATA_CHANGE_EVENT) {
// update data row
this.data = event.detail.data;
}
this.eventHandler.emit(event);
});
}
}
}
/**
* @return {?}
*/
getEventHandler() {
return this.eventHandler;
}
/**
* @param {?} event
* @return {?}
*/
setEventHandler(event) {
this.eventHandler = event;
}
}
DataViewWrapper.TYPE_NAME = TYPE_NAME;
DataViewWrapper.decorators = [
{ type: Component, args: [{
moduleId: module.id,
selector: TYPE_NAME,
template: ``
},] },
];
/** @nocollapse */
DataViewWrapper.ctorParameters = () => [
{ type: ViewContainerRef, },
{ type: ComponentFactoryResolver, },
];
DataViewWrapper.propDecorators = {
"componentType": [{ type: Input, args: ['type',] },],
"data": [{ type: Input },],
"options": [{ type: Input },],
"eventHandler": [{ type: Output },],
};
function DataViewWrapper_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
DataViewWrapper.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
DataViewWrapper.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
DataViewWrapper.propDecorators;
/** @type {?} */
DataViewWrapper.TYPE_NAME;
/** @type {?} */
DataViewWrapper.prototype.componentType;
/** @type {?} */
DataViewWrapper.prototype.data;
/** @type {?} */
DataViewWrapper.prototype.options;
/** @type {?} */
DataViewWrapper.prototype.eventHandler;
/** @type {?} */
DataViewWrapper.prototype.componentRef;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0YVZpZXdXcmFwcGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudC9kYXRhdmlldy9EYXRhVmlld1dyYXBwZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqSSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUlwRSx1QkFBTSxTQUFTLEdBQVcsdUJBQXVCLENBQUM7QUFPbEQsTUFBTSxzQkFBdUIsU0FBUSx1QkFBdUI7Ozs7O0lBZTFELFlBQVksTUFBd0IsRUFBRSx3QkFBa0Q7UUFDdEYsS0FBSyxDQUFDLE1BQU0sRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0tBQ3pDOzs7O0lBRU0sUUFBUTtRQUNiLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQzs7Ozs7O0lBR1osV0FBVyxDQUFDLE9BQVk7UUFDN0IsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxLQUFLLElBQUksSUFBSSxPQUFPLE9BQU8sQ0FBQyxlQUFlLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ3pGLHFCQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsYUFBYSxDQUFDO1lBQ3JELHFCQUFJLE9BQU8sR0FBUSxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsWUFBWSxDQUFDO1lBRXpELEVBQUUsQ0FBQyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUN4QixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7YUFDZjtTQUNGO1FBRUQsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksSUFBSSxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ3ZFLHFCQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsYUFBYSxDQUFDO1lBQzVDLHFCQUFJLE9BQU8sR0FBUSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxDQUFDO1lBRWhELEVBQUUsQ0FBQyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUN4QixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7b0JBQ2xFLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQy9DO2dCQUFDLElBQUksQ0FBQyxDQUFDO29CQUNOLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztpQkFDZjthQUNGO1NBQ0Y7UUFFRCxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxJQUFJLE9BQU8sT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDN0UscUJBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxhQUFhLENBQUM7WUFDOUMscUJBQUksTUFBTSxHQUFRLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxZQUFZLENBQUM7WUFFbEQsRUFBRSxDQUFDLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ3RCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztvQkFDbEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDckQ7Z0JBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ04sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2lCQUNmO2FBQ0Y7U0FDRjtRQUVELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDLFlBQVksS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQzNFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztnQkFDekUscUJBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFhLENBQUM7Z0JBQzlDLHFCQUFJLFFBQVEsR0FBUSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDO2dCQUVsRCxFQUFFLENBQUMsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztvQkFDMUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7aUJBQ3JFO2FBQ0Y7U0FDRjs7Ozs7SUFHSSxNQUFNOztRQUVYLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDLFlBQVksS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQzNFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQzdELElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUMxQztZQUVELEVBQUUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsYUFBYSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQ25FLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNoRDtZQUVELElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDN0I7UUFFRCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLGFBQWEsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUUsdUJBQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNyRyxxQkFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUM5RCxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDO1lBRTVCLHFCQUFJLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDdkIsRUFBRSxDQUFDLENBQUMsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLGVBQWUsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUMzRCxXQUFXLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsQ0FBQzthQUNsRDtZQUVELEVBQUUsQ0FBQyxDQUFDLFdBQVcsS0FBSyxJQUFJLElBQUksT0FBTyxXQUFXLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztnQkFDL0QsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO29CQUNuQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLGlCQUFpQixDQUFDLENBQUMsQ0FBQzs7d0JBRXBDLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7cUJBQy9CO29CQUNELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUMvQixDQUFDLENBQUM7YUFDSjtTQUVGOzs7OztJQUdJLGVBQWU7UUFDcEIsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7Ozs7OztJQUdwQixlQUFlLENBQUMsS0FBVTtRQUMvQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQzs7OzRCQWpIZSxTQUFTOztZQVByRCxTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFO2dCQUNuQixRQUFRLEVBQUUsU0FBUztnQkFDbkIsUUFBUSxFQUFFLEVBQUU7YUFDYjs7OztZQVowQyxnQkFBZ0I7WUFBc0Isd0JBQXdCOzs7OEJBaUJ0RyxLQUFLLFNBQUMsTUFBTTtxQkFFWixLQUFLO3dCQUVMLEtBQUs7NkJBRUwsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBWaWV3Q29udGFpbmVyUmVmLCBUeXBlLCBFdmVudEVtaXR0ZXIsIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgREFUQV9DSEFOR0VfRVZFTlQgfSBmcm9tICcuLi8uLi9zaGFyZS9DdXN0b21FdmVudFR5cGUnO1xuaW1wb3J0IHsgQWJzdHJhY3REYXRhVmlld1dyYXBwZXIgfSBmcm9tICcuL0Fic3RyYWN0RGF0YVZpZXdXcmFwcGVyJztcblxuZGVjbGFyZSB2YXIgJDogYW55O1xuXG5jb25zdCBUWVBFX05BTUU6IHN0cmluZyA9IFwicGh4LWRhdGEtdmlldy13cmFwcGVyXCI7XG5cbkBDb21wb25lbnQoe1xuICBtb2R1bGVJZDogbW9kdWxlLmlkLFxuICBzZWxlY3RvcjogVFlQRV9OQU1FLFxuICB0ZW1wbGF0ZTogYGBcbn0pXG5leHBvcnQgY2xhc3MgRGF0YVZpZXdXcmFwcGVyIGV4dGVuZHMgQWJzdHJhY3REYXRhVmlld1dyYXBwZXIgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVFlQRV9OQU1FOiBzdHJpbmcgPSBUWVBFX05BTUU7XG5cbiAgQElucHV0KCd0eXBlJylcbiAgcHJvdGVjdGVkIGNvbXBvbmVudFR5cGU6IFR5cGU8YW55PjtcbiAgQElucHV0KClcbiAgcHJvdGVjdGVkIGRhdGE6IGFueTtcbiAgQElucHV0KClcbiAgcHJvdGVjdGVkIG9wdGlvbnM6IGFueTtcbiAgQE91dHB1dCgpXG4gIHByb3RlY3RlZCBldmVudEhhbmRsZXI6IEV2ZW50RW1pdHRlcjxhbnk+O1xuXG4gIHByaXZhdGUgY29tcG9uZW50UmVmOiBhbnk7XG5cbiAgY29uc3RydWN0b3IodGFyZ2V0OiBWaWV3Q29udGFpbmVyUmVmLCBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcikge1xuICAgIHN1cGVyKHRhcmdldCwgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IGFueSkge1xuICAgIGlmIChjaGFuZ2VzWydjb21wb25lbnRUeXBlJ10gIT09IG51bGwgJiYgdHlwZW9mIGNoYW5nZXNbJ2NvbXBvbmVudFR5cGUnXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGxldCBvbGRUeXBlID0gY2hhbmdlc1snY29tcG9uZW50VHlwZSddLnByZXZpb3VzVmFsdWU7XG4gICAgICBsZXQgbmV3VHlwZTogYW55ID0gY2hhbmdlc1snY29tcG9uZW50VHlwZSddLmN1cnJlbnRWYWx1ZTtcblxuICAgICAgaWYgKG9sZFR5cGUgIT09IG5ld1R5cGUpIHtcbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1snZGF0YSddICE9PSBudWxsICYmIHR5cGVvZiBjaGFuZ2VzWydkYXRhJ10gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBsZXQgb2xkRGF0YSA9IGNoYW5nZXNbJ2RhdGEnXS5wcmV2aW91c1ZhbHVlO1xuICAgICAgbGV0IG5ld0RhdGE6IGFueSA9IGNoYW5nZXNbJ2RhdGEnXS5jdXJyZW50VmFsdWU7XG5cbiAgICAgIGlmIChvbGREYXRhICE9PSBuZXdEYXRhKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZiAhPT0gbnVsbCAmJiB0aGlzLmNvbXBvbmVudFJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2Uuc2V0RGF0YSh0aGlzLmRhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1snb3B0aW9ucyddICE9PSBudWxsICYmIHR5cGVvZiBjaGFuZ2VzWydvcHRpb25zJ10gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBsZXQgb2xkT3B0ID0gY2hhbmdlc1snb3B0aW9ucyddLnByZXZpb3VzVmFsdWU7XG4gICAgICBsZXQgbmV3T3B0OiBhbnkgPSBjaGFuZ2VzWydvcHRpb25zJ10uY3VycmVudFZhbHVlO1xuXG4gICAgICBpZiAob2xkT3B0ICE9PSBuZXdPcHQpIHtcbiAgICAgICAgaWYgKHRoaXMuY29tcG9uZW50UmVmICE9PSBudWxsICYmIHRoaXMuY29tcG9uZW50UmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5zZXRPcHRpb25zKHRoaXMub3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZiAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5jb21wb25lbnRSZWYgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAoY2hhbmdlc1snY2xhc3MnXSAhPT0gbnVsbCAmJiB0eXBlb2YgY2hhbmdlc1snY2xhc3MnXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgbGV0IG9sZENsYXNzID0gY2hhbmdlc1snY2xhc3MnXS5wcmV2aW91c1ZhbHVlO1xuICAgICAgICBsZXQgbmV3Q2xhc3M6IGFueSA9IGNoYW5nZXNbJ2NsYXNzJ10uY3VycmVudFZhbHVlO1xuXG4gICAgICAgIGlmIChvbGRDbGFzcyAhPT0gbmV3Q2xhc3MpIHtcbiAgICAgICAgICAkKHRoaXMuY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpLmF0dHIoJ2NsYXNzJywgbmV3Q2xhc3MpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlbmRlcigpOiB2b2lkIHtcbiAgICAvLyByZW1vdmUgb2xkIGRvbVxuICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZiAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5jb21wb25lbnRSZWYgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLnNldERhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2Uuc2V0RGF0YShudWxsKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5zZXREYXRhUGFyZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLnNldERhdGFQYXJlbnQobnVsbCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29tcG9uZW50UmVmLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb21wb25lbnRUeXBlICE9IG51bGwgJiYgKHR5cGVvZiB0aGlzLmNvbXBvbmVudFR5cGUgIT09ICd1bmRlZmluZWQnKSkge1xuICAgICAgY29uc3Qgc2ltcGxlQ29tcG9GYWN0b3J5ID0gdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodGhpcy5jb21wb25lbnRUeXBlKTtcbiAgICAgIGxldCBjb21wUmVmID0gdGhpcy50YXJnZXQuY3JlYXRlQ29tcG9uZW50KHNpbXBsZUNvbXBvRmFjdG9yeSk7XG4gICAgICBjb21wUmVmLmluc3RhbmNlLnNldERhdGEodGhpcy5kYXRhKTtcbiAgICAgIGNvbXBSZWYuaW5zdGFuY2Uuc2V0T3B0aW9ucyh0aGlzLm9wdGlvbnMpO1xuICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSBjb21wUmVmO1xuXG4gICAgICBsZXQgY29tcEhhbmRsZXIgPSBudWxsO1xuICAgICAgaWYgKHR5cGVvZiBjb21wUmVmLmluc3RhbmNlLmdldEV2ZW50SGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb21wSGFuZGxlciA9IGNvbXBSZWYuaW5zdGFuY2UuZ2V0RXZlbnRIYW5kbGVyKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb21wSGFuZGxlciAhPT0gbnVsbCAmJiB0eXBlb2YgY29tcEhhbmRsZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbXBIYW5kbGVyLnN1YnNjcmliZSgoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChldmVudC50eXBlID09IERBVEFfQ0hBTkdFX0VWRU5UKSB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgZGF0YSByb3dcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IGV2ZW50LmRldGFpbC5kYXRhO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmV2ZW50SGFuZGxlci5lbWl0KGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0RXZlbnRIYW5kbGVyKCk6IEV2ZW50RW1pdHRlcjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5ldmVudEhhbmRsZXI7XG4gIH1cblxuICBwdWJsaWMgc2V0RXZlbnRIYW5kbGVyKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmV2ZW50SGFuZGxlciA9IGV2ZW50O1xuICB9XG59XG4iXX0=