@nuarch/dynamic-forms
Version:
Teradata UI Platform Dynamic Forms Module
295 lines • 22.4 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc
*/
import { Component, Directive, Input, HostBinding, TemplateRef, ChangeDetectorRef, Type } from '@angular/core';
import { ViewChild, ViewContainerRef } from '@angular/core';
import { ComponentFactoryResolver, forwardRef } from '@angular/core';
import { NG_VALUE_ACCESSOR, FormControl } from '@angular/forms';
import { TemplatePortalDirective } from '@angular/cdk/portal';
import { mixinControlValueAccessor } from '@covalent/core/common';
import { TdDynamicFormsService } from './services/dynamic-forms.service';
export class TdDynamicElementBase {
/**
* @param {?} _changeDetectorRef
*/
constructor(_changeDetectorRef) {
this._changeDetectorRef = _changeDetectorRef;
}
}
if (false) {
/** @type {?} */
TdDynamicElementBase.prototype._changeDetectorRef;
}
/* tslint:disable-next-line */
/** @type {?} */
export const _TdDynamicElementMixinBase = mixinControlValueAccessor(TdDynamicElementBase);
export class TdDynamicFormsErrorTemplate extends TemplatePortalDirective {
/**
* @param {?} templateRef
* @param {?} viewContainerRef
*/
constructor(templateRef, viewContainerRef) {
super(templateRef, viewContainerRef);
}
}
TdDynamicFormsErrorTemplate.decorators = [
{ type: Directive, args: [{ selector: '[tdDynamicFormsError]ng-template' },] }
];
/** @nocollapse */
TdDynamicFormsErrorTemplate.ctorParameters = () => [
{ type: TemplateRef },
{ type: ViewContainerRef }
];
TdDynamicFormsErrorTemplate.propDecorators = {
tdDynamicFormsError: [{ type: Input }]
};
if (false) {
/** @type {?} */
TdDynamicFormsErrorTemplate.prototype.tdDynamicFormsError;
}
export class TdDynamicElementDirective {
/**
* @param {?} viewContainer
*/
constructor(viewContainer) {
this.viewContainer = viewContainer;
}
}
TdDynamicElementDirective.decorators = [
{ type: Directive, args: [{
selector: '[tdDynamicContainer]',
},] }
];
/** @nocollapse */
TdDynamicElementDirective.ctorParameters = () => [
{ type: ViewContainerRef }
];
if (false) {
/** @type {?} */
TdDynamicElementDirective.prototype.viewContainer;
}
export class TdDynamicElementComponent extends _TdDynamicElementMixinBase {
/**
* @param {?} _componentFactoryResolver
* @param {?} _dynamicFormsService
* @param {?} _changeDetectorRef
*/
constructor(_componentFactoryResolver, _dynamicFormsService, _changeDetectorRef) {
super(_changeDetectorRef);
this._componentFactoryResolver = _componentFactoryResolver;
this._dynamicFormsService = _dynamicFormsService;
/**
* Sets label to be displayed.
*/
this.label = '';
/**
* Sets hint to be displayed.
*/
this.hint = '';
/**
* Sets name to be displayed as attribute.
*/
this.name = '';
/**
* Sets type or element of element to be rendered.
* Throws error if does not exist or no supported.
*/
this.type = undefined;
/**
* Sets required validation checkup (if supported by element).
*/
this.required = undefined;
/**
* Sets min validation checkup (if supported by element).
*/
this.min = undefined;
/**
* Sets max validation checkup (if supported by element).
*/
this.max = undefined;
/**
* Sets minLength validation checkup (if supported by element).
*/
this.minLength = undefined;
/**
* Sets maxLength validation checkup (if supported by element).
*/
this.maxLength = undefined;
/**
* Sets selections for array elements (if supported by element).
*/
this.selections = undefined;
/**
* Sets multiple property for array elements (if supported by element).
*/
this.multiple = undefined;
/**
* Sets error message template so it can be injected into dynamic components.
*/
this.errorMessageTemplate = undefined;
}
/**
* @return {?}
*/
get maxAttr() {
return this.max;
}
/**
* @return {?}
*/
get minAttr() {
return this.min;
}
/**
* @return {?}
*/
ngOnInit() {
/** @type {?} */
let component = (/** @type {?} */ (this.type)) instanceof Type ? this.type : this._dynamicFormsService.getDynamicElement(this.type);
/** @type {?} */
let ref = this._componentFactoryResolver.
resolveComponentFactory(component)
.create(this.childElement.viewContainer.injector);
this.childElement.viewContainer.insert(ref.hostView);
this._instance = ref.instance;
this._instance.control = this.dynamicControl;
this._instance.label = this.label;
this._instance.hint = this.hint;
this._instance.name = this.name;
this._instance.type = this.type;
this._instance.value = this.value;
this._instance.required = this.required;
this._instance.min = this.min;
this._instance.max = this.max;
this._instance.minLength = this.minLength;
this._instance.maxLength = this.maxLength;
this._instance.selections = this.selections;
this._instance.multiple = this.multiple;
this._instance.errorMessageTemplate = this.errorMessageTemplate;
}
/**
* Reassign any inputs that have changed
* @param {?} changes
* @return {?}
*/
ngOnChanges(changes) {
if (this._instance) {
for (let prop in changes) {
this._instance[prop] = changes[prop].currentValue;
}
}
}
}
TdDynamicElementComponent.decorators = [
{ type: Component, args: [{
providers: [TdDynamicFormsService, {
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => TdDynamicElementComponent),
multi: true,
}],
selector: 'td-dynamic-element',
template: '<div tdDynamicContainer></div>'
}] }
];
/** @nocollapse */
TdDynamicElementComponent.ctorParameters = () => [
{ type: ComponentFactoryResolver },
{ type: TdDynamicFormsService },
{ type: ChangeDetectorRef }
];
TdDynamicElementComponent.propDecorators = {
dynamicControl: [{ type: Input }],
label: [{ type: Input }],
hint: [{ type: Input }],
name: [{ type: Input }],
type: [{ type: Input }],
required: [{ type: Input }],
min: [{ type: Input }],
max: [{ type: Input }],
minLength: [{ type: Input }],
maxLength: [{ type: Input }],
selections: [{ type: Input }],
multiple: [{ type: Input }],
errorMessageTemplate: [{ type: Input }],
childElement: [{ type: ViewChild, args: [TdDynamicElementDirective,] }],
maxAttr: [{ type: HostBinding, args: ['attr.max',] }],
minAttr: [{ type: HostBinding, args: ['attr.min',] }]
};
if (false) {
/** @type {?} */
TdDynamicElementComponent.prototype._instance;
/**
* Sets form control of the element.
* @type {?}
*/
TdDynamicElementComponent.prototype.dynamicControl;
/**
* Sets label to be displayed.
* @type {?}
*/
TdDynamicElementComponent.prototype.label;
/**
* Sets hint to be displayed.
* @type {?}
*/
TdDynamicElementComponent.prototype.hint;
/**
* Sets name to be displayed as attribute.
* @type {?}
*/
TdDynamicElementComponent.prototype.name;
/**
* Sets type or element of element to be rendered.
* Throws error if does not exist or no supported.
* @type {?}
*/
TdDynamicElementComponent.prototype.type;
/**
* Sets required validation checkup (if supported by element).
* @type {?}
*/
TdDynamicElementComponent.prototype.required;
/**
* Sets min validation checkup (if supported by element).
* @type {?}
*/
TdDynamicElementComponent.prototype.min;
/**
* Sets max validation checkup (if supported by element).
* @type {?}
*/
TdDynamicElementComponent.prototype.max;
/**
* Sets minLength validation checkup (if supported by element).
* @type {?}
*/
TdDynamicElementComponent.prototype.minLength;
/**
* Sets maxLength validation checkup (if supported by element).
* @type {?}
*/
TdDynamicElementComponent.prototype.maxLength;
/**
* Sets selections for array elements (if supported by element).
* @type {?}
*/
TdDynamicElementComponent.prototype.selections;
/**
* Sets multiple property for array elements (if supported by element).
* @type {?}
*/
TdDynamicElementComponent.prototype.multiple;
/**
* Sets error message template so it can be injected into dynamic components.
* @type {?}
*/
TdDynamicElementComponent.prototype.errorMessageTemplate;
/** @type {?} */
TdDynamicElementComponent.prototype.childElement;
/** @type {?} */
TdDynamicElementComponent.prototype._componentFactoryResolver;
/** @type {?} */
TdDynamicElementComponent.prototype._dynamicFormsService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1lbGVtZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BudWFyY2gvZHluYW1pYy1mb3Jtcy8iLCJzb3VyY2VzIjpbImR5bmFtaWMtZWxlbWVudC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQW9DLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakosT0FBTyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsd0JBQXdCLEVBQWdCLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTlELE9BQU8sRUFBRSx5QkFBeUIsRUFBeUIsTUFBTSx1QkFBdUIsQ0FBQztBQUV6RixPQUFPLEVBQW1DLHFCQUFxQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFMUcsTUFBTSxPQUFPLG9CQUFvQjs7OztJQUMvQixZQUFtQixrQkFBcUM7UUFBckMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtJQUFHLENBQUM7Q0FDN0Q7OztJQURhLGtEQUE0Qzs7OztBQUkxRCxNQUFNLE9BQU8sMEJBQTBCLEdBQUcseUJBQXlCLENBQUMsb0JBQW9CLENBQUM7QUFHekYsTUFBTSxPQUFPLDJCQUE0QixTQUFRLHVCQUF1Qjs7Ozs7SUFHdEUsWUFBWSxXQUE2QixFQUFFLGdCQUFrQztRQUMzRSxLQUFLLENBQUMsV0FBVyxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDdkMsQ0FBQzs7O1lBTkYsU0FBUyxTQUFDLEVBQUMsUUFBUSxFQUFFLGtDQUFrQyxFQUFDOzs7O1lB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c0JBRW5DLFdBQVcsU0FBQyxVQUFVO3NCQUt0QixXQUFXLFNBQUMsVUFBVTs7OztJQTNFdkIsOENBQXVCOzs7OztJQUt2QixtREFBcUM7Ozs7O0lBS3JDLDBDQUE0Qjs7Ozs7SUFLNUIseUNBQTJCOzs7OztJQUszQix5Q0FBMkI7Ozs7OztJQU0zQix5Q0FBNEQ7Ozs7O0lBSzVELDZDQUF1Qzs7Ozs7SUFLdkMsd0NBQWlDOzs7OztJQUtqQyx3Q0FBaUM7Ozs7O0lBS2pDLDhDQUF1Qzs7Ozs7SUFLdkMsOENBQXVDOzs7OztJQUt2QywrQ0FBdUM7Ozs7O0lBS3ZDLDZDQUF1Qzs7Ozs7SUFLdkMseURBQTREOztJQUU1RCxpREFBOEU7O0lBWWxFLDhEQUEyRDs7SUFDM0QseURBQW1EIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBEaXJlY3RpdmUsIElucHV0LCBIb3N0QmluZGluZywgT25Jbml0LCBTaW1wbGVDaGFuZ2VzLCBPbkNoYW5nZXMsIFRlbXBsYXRlUmVmLCBDaGFuZ2VEZXRlY3RvclJlZiwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBDb21wb25lbnRSZWYsIGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SLCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVGVtcGxhdGVQb3J0YWxEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcclxuXHJcbmltcG9ydCB7IG1peGluQ29udHJvbFZhbHVlQWNjZXNzb3IsIElDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0Bjb3ZhbGVudC9jb3JlL2NvbW1vbic7XHJcblxyXG5pbXBvcnQgeyBUZER5bmFtaWNFbGVtZW50LCBUZER5bmFtaWNUeXBlLCBUZER5bmFtaWNGb3Jtc1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2R5bmFtaWMtZm9ybXMuc2VydmljZSc7XHJcblxyXG5leHBvcnQgY2xhc3MgVGREeW5hbWljRWxlbWVudEJhc2Uge1xyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7fVxyXG59XHJcblxyXG4vKiB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgKi9cclxuZXhwb3J0IGNvbnN0IF9UZER5bmFtaWNFbGVtZW50TWl4aW5CYXNlID0gbWl4aW5Db250cm9sVmFsdWVBY2Nlc3NvcihUZER5bmFtaWNFbGVtZW50QmFzZSk7XHJcblxyXG5ARGlyZWN0aXZlKHtzZWxlY3RvcjogJ1t0ZER5bmFtaWNGb3Jtc0Vycm9yXW5nLXRlbXBsYXRlJ30pXHJcbmV4cG9ydCBjbGFzcyBUZER5bmFtaWNGb3Jtc0Vycm9yVGVtcGxhdGUgZXh0ZW5kcyBUZW1wbGF0ZVBvcnRhbERpcmVjdGl2ZSB7XHJcblxyXG4gIEBJbnB1dCgpIHRkRHluYW1pY0Zvcm1zRXJyb3I6IHN0cmluZztcclxuICBjb25zdHJ1Y3Rvcih0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55Piwgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZikge1xyXG4gICAgc3VwZXIodGVtcGxhdGVSZWYsIHZpZXdDb250YWluZXJSZWYpO1xyXG4gIH1cclxufVxyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbdGREeW5hbWljQ29udGFpbmVyXScsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUZER5bmFtaWNFbGVtZW50RGlyZWN0aXZlIHtcclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZikgeyB9XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHByb3ZpZGVyczogW1RkRHluYW1pY0Zvcm1zU2VydmljZSwge1xyXG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUZER5bmFtaWNFbGVtZW50Q29tcG9uZW50KSxcclxuICAgIG11bHRpOiB0cnVlLFxyXG4gIH1dLFxyXG4gIHNlbGVjdG9yOiAndGQtZHluYW1pYy1lbGVtZW50JyxcclxuICB0ZW1wbGF0ZTogJzxkaXYgdGREeW5hbWljQ29udGFpbmVyPjwvZGl2PicsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUZER5bmFtaWNFbGVtZW50Q29tcG9uZW50IGV4dGVuZHMgX1RkRHluYW1pY0VsZW1lbnRNaXhpbkJhc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50cyBJQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuXHJcbiAgcHJpdmF0ZSBfaW5zdGFuY2U6IGFueTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyBmb3JtIGNvbnRyb2wgb2YgdGhlIGVsZW1lbnQuXHJcbiAgICovXHJcbiAgQElucHV0KCkgZHluYW1pY0NvbnRyb2w6IEZvcm1Db250cm9sO1xyXG5cclxuICAvKipcclxuICAgKiBTZXRzIGxhYmVsIHRvIGJlIGRpc3BsYXllZC5cclxuICAgKi9cclxuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nID0gJyc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgaGludCB0byBiZSBkaXNwbGF5ZWQuXHJcbiAgICovXHJcbiAgQElucHV0KCkgaGludDogc3RyaW5nID0gJyc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgbmFtZSB0byBiZSBkaXNwbGF5ZWQgYXMgYXR0cmlidXRlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIG5hbWU6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHR5cGUgb3IgZWxlbWVudCBvZiBlbGVtZW50IHRvIGJlIHJlbmRlcmVkLlxyXG4gICAqIFRocm93cyBlcnJvciBpZiBkb2VzIG5vdCBleGlzdCBvciBubyBzdXBwb3J0ZWQuXHJcbiAgICovXHJcbiAgQElucHV0KCkgdHlwZTogVGREeW5hbWljRWxlbWVudCB8IFRkRHluYW1pY1R5cGUgPSB1bmRlZmluZWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgcmVxdWlyZWQgdmFsaWRhdGlvbiBjaGVja3VwIChpZiBzdXBwb3J0ZWQgYnkgZWxlbWVudCkuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcmVxdWlyZWQ6IGJvb2xlYW4gPSB1bmRlZmluZWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgbWluIHZhbGlkYXRpb24gY2hlY2t1cCAoaWYgc3VwcG9ydGVkIGJ5IGVsZW1lbnQpLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIG1pbjogbnVtYmVyID0gdW5kZWZpbmVkO1xyXG5cclxuICAvKipcclxuICAgKiBTZXRzIG1heCB2YWxpZGF0aW9uIGNoZWNrdXAgKGlmIHN1cHBvcnRlZCBieSBlbGVtZW50KS5cclxuICAgKi9cclxuICBASW5wdXQoKSBtYXg6IG51bWJlciA9IHVuZGVmaW5lZDtcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyBtaW5MZW5ndGggdmFsaWRhdGlvbiBjaGVja3VwIChpZiBzdXBwb3J0ZWQgYnkgZWxlbWVudCkuXHJcbiAgICovXHJcbiAgQElucHV0KCkgbWluTGVuZ3RoOiBudW1iZXIgPSB1bmRlZmluZWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgbWF4TGVuZ3RoIHZhbGlkYXRpb24gY2hlY2t1cCAoaWYgc3VwcG9ydGVkIGJ5IGVsZW1lbnQpLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIG1heExlbmd0aDogbnVtYmVyID0gdW5kZWZpbmVkO1xyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHNlbGVjdGlvbnMgZm9yIGFycmF5IGVsZW1lbnRzIChpZiBzdXBwb3J0ZWQgYnkgZWxlbWVudCkuXHJcbiAgICovXHJcbiAgQElucHV0KCkgc2VsZWN0aW9uczogYW55W10gPSB1bmRlZmluZWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgbXVsdGlwbGUgcHJvcGVydHkgZm9yIGFycmF5IGVsZW1lbnRzIChpZiBzdXBwb3J0ZWQgYnkgZWxlbWVudCkuXHJcbiAgICovXHJcbiAgQElucHV0KCkgbXVsdGlwbGU6IGJvb2xlYW4gPSB1bmRlZmluZWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgZXJyb3IgbWVzc2FnZSB0ZW1wbGF0ZSBzbyBpdCBjYW4gYmUgaW5qZWN0ZWQgaW50byBkeW5hbWljIGNvbXBvbmVudHMuXHJcbiAgICovXHJcbiAgQElucHV0KCkgZXJyb3JNZXNzYWdlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gPSB1bmRlZmluZWQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoVGREeW5hbWljRWxlbWVudERpcmVjdGl2ZSkgY2hpbGRFbGVtZW50OiBUZER5bmFtaWNFbGVtZW50RGlyZWN0aXZlO1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ2F0dHIubWF4JylcclxuICBnZXQgbWF4QXR0cigpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMubWF4O1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLm1pbicpXHJcbiAgZ2V0IG1pbkF0dHIoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLm1pbjtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgX2R5bmFtaWNGb3Jtc1NlcnZpY2U6IFRkRHluYW1pY0Zvcm1zU2VydmljZSxcclxuICAgICAgICAgICAgICBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XHJcbiAgICBzdXBlcihfY2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBsZXQgY29tcG9uZW50OiBhbnkgPSA8YW55PnRoaXMudHlwZSBpbnN0YW5jZW9mIFR5cGUgPyB0aGlzLnR5cGUgOiB0aGlzLl9keW5hbWljRm9ybXNTZXJ2aWNlLmdldER5bmFtaWNFbGVtZW50KHRoaXMudHlwZSk7XHJcbiAgICBsZXQgcmVmOiBDb21wb25lbnRSZWY8YW55PiA9IHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5cclxuICAgICAgcmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoY29tcG9uZW50KVxyXG4gICAgICAuY3JlYXRlKHRoaXMuY2hpbGRFbGVtZW50LnZpZXdDb250YWluZXIuaW5qZWN0b3IpO1xyXG4gICAgdGhpcy5jaGlsZEVsZW1lbnQudmlld0NvbnRhaW5lci5pbnNlcnQocmVmLmhvc3RWaWV3KTtcclxuICAgIHRoaXMuX2luc3RhbmNlID0gcmVmLmluc3RhbmNlO1xyXG4gICAgdGhpcy5faW5zdGFuY2UuY29udHJvbCA9IHRoaXMuZHluYW1pY0NvbnRyb2w7XHJcbiAgICB0aGlzLl9pbnN0YW5jZS5sYWJlbCA9IHRoaXMubGFiZWw7XHJcbiAgICB0aGlzLl9pbnN0YW5jZS5oaW50ID0gdGhpcy5oaW50O1xyXG4gICAgdGhpcy5faW5zdGFuY2UubmFtZSA9IHRoaXMubmFtZTtcclxuICAgIHRoaXMuX2luc3RhbmNlLnR5cGUgPSB0aGlzLnR5cGU7XHJcbiAgICB0aGlzLl9pbnN0YW5jZS52YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICB0aGlzLl9pbnN0YW5jZS5yZXF1aXJlZCA9IHRoaXMucmVxdWlyZWQ7XHJcbiAgICB0aGlzLl9pbnN0YW5jZS5taW4gPSB0aGlzLm1pbjtcclxuICAgIHRoaXMuX2luc3RhbmNlLm1heCA9IHRoaXMubWF4O1xyXG4gICAgdGhpcy5faW5zdGFuY2UubWluTGVuZ3RoID0gdGhpcy5taW5MZW5ndGg7XHJcbiAgICB0aGlzLl9pbnN0YW5jZS5tYXhMZW5ndGggPSB0aGlzLm1heExlbmd0aDtcclxuICAgIHRoaXMuX2luc3RhbmNlLnNlbGVjdGlvbnMgPSB0aGlzLnNlbGVjdGlvbnM7XHJcbiAgICB0aGlzLl9pbnN0YW5jZS5tdWx0aXBsZSA9IHRoaXMubXVsdGlwbGU7XHJcbiAgICB0aGlzLl9pbnN0YW5jZS5lcnJvck1lc3NhZ2VUZW1wbGF0ZSA9IHRoaXMuZXJyb3JNZXNzYWdlVGVtcGxhdGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWFzc2lnbiBhbnkgaW5wdXRzIHRoYXQgaGF2ZSBjaGFuZ2VkXHJcbiAgICovXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2luc3RhbmNlKSB7XHJcbiAgICAgIGZvciAobGV0IHByb3AgaW4gY2hhbmdlcykge1xyXG4gICAgICAgIHRoaXMuX2luc3RhbmNlW3Byb3BdID0gY2hhbmdlc1twcm9wXS5jdXJyZW50VmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19