materialize-angular
Version:
Material UI Angular library
388 lines • 29.8 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: app/completed-components/select/select.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @license
* Copyright Workylab. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://raw.githubusercontent.com/workylab/materialize-angular/master/LICENSE
*/
import { Component, ContentChildren, ElementRef, EventEmitter, forwardRef, Input, Output, QueryList, Renderer2, ViewChild } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { config } from '../../config';
import { SelectOptionComponent } from './select-option/select-option.component';
var SelectComponent = /** @class */ (function () {
function SelectComponent(renderer) {
this.renderer = renderer;
this.className = SelectComponent.defaultProps.className;
this.disabled = SelectComponent.defaultProps.disabled;
this.floatLabel = SelectComponent.defaultProps.floatLabel;
this.id = SelectComponent.defaultProps.id;
this.isNativeControl = SelectComponent.defaultProps.isNativeControl;
this.name = SelectComponent.defaultProps.name;
this.required = SelectComponent.defaultProps.required;
this.value = SelectComponent.defaultProps.value;
this.prefix = config.components.prefix;
this.isFocused = false;
this.isOpen = false;
this.onChangeEmitter = new EventEmitter();
this.addBackdropListener = this.addBackdropListener.bind(this);
this.onChangeOption = this.onChangeOption.bind(this);
this.registerOptions = this.registerOptions.bind(this);
}
/**
* @return {?}
*/
SelectComponent.prototype.ngAfterContentInit = /**
* @return {?}
*/
function () {
var _this = this;
setTimeout(this.registerOptions, 0);
this.options.changes.subscribe((/**
* @param {?} changes
* @return {?}
*/
function (changes) {
setTimeout(_this.registerOptions, 0);
}));
};
/**
* @return {?}
*/
SelectComponent.prototype.registerOptions = /**
* @return {?}
*/
function () {
var _this = this;
this.options.forEach((/**
* @param {?} option
* @return {?}
*/
function (option) {
option.isActive = (option.value === _this.value);
option.onClickEmitter.subscribe(_this.onChangeOption);
}));
this.updateControl(this.value);
};
/**
* @param {?} value
* @return {?}
*/
SelectComponent.prototype.updateControl = /**
* @param {?} value
* @return {?}
*/
function (value) {
this.value = value;
this.isOpen = false;
this.activeSelectedOption(this.value);
};
/**
* @param {?} value
* @return {?}
*/
SelectComponent.prototype.onChangeOption = /**
* @param {?} value
* @return {?}
*/
function (value) {
this.updateControl(value);
this.onChangeEmitter.emit(this.value);
this.onChange(this.value);
};
/**
* @param {?} value
* @return {?}
*/
SelectComponent.prototype.activeSelectedOption = /**
* @param {?} value
* @return {?}
*/
function (value) {
var _this = this;
this.options.forEach((/**
* @param {?} option
* @return {?}
*/
function (option) {
if (option.value === value) {
option.isActive = true;
_this.activeSelectClass(option);
_this.cloneOption(option);
}
else {
option.isActive = false;
}
}));
};
/**
* @param {?} selectedOption
* @return {?}
*/
SelectComponent.prototype.cloneOption = /**
* @param {?} selectedOption
* @return {?}
*/
function (selectedOption) {
if (!this.labelContainerRef) {
return;
}
var labelContainer = this.labelContainerRef.nativeElement;
var optionTemplateRef = selectedOption.optionTemplateRef, disabled = selectedOption.disabled;
if (labelContainer.firstChild) {
this.renderer.removeChild(labelContainer, labelContainer.firstChild);
}
if (optionTemplateRef) {
var firstChild = optionTemplateRef.nativeElement.firstChild;
/** @type {?} */
var cloned = firstChild.cloneNode(true);
if (disabled) {
this.renderer.addClass(cloned, 'option-disabled');
}
this.renderer.appendChild(labelContainer, cloned);
}
};
/**
* @param {?} event
* @return {?}
*/
SelectComponent.prototype.onChangeNativeOption = /**
* @param {?} event
* @return {?}
*/
function (event) {
var selectedOptions = event.target.selectedOptions;
var value = selectedOptions[0].value;
this.value = value;
this.activeSelectClass(selectedOptions[0]);
this.onChangeEmitter.emit(this.value);
this.onChange(this.value);
};
/**
* @return {?}
*/
SelectComponent.prototype.onBlur = /**
* @return {?}
*/
function () {
this.isFocused = false;
};
/**
* @return {?}
*/
SelectComponent.prototype.onFocus = /**
* @return {?}
*/
function () {
if (!this.disabled) {
this.isFocused = true;
this.onTouched();
}
};
/**
* @return {?}
*/
SelectComponent.prototype.onClick = /**
* @return {?}
*/
function () {
if (!this.disabled) {
this.isFocused = true;
this.isOpen = true;
if (!this.isNativeControl) {
setTimeout(this.addBackdropListener, 0);
}
}
};
/**
* @return {?}
*/
SelectComponent.prototype.addBackdropListener = /**
* @return {?}
*/
function () {
var _this = this;
this.backdropRef.nativeElement.addEventListener('click', (/**
* @return {?}
*/
function () {
_this.isOpen = false;
}));
};
/**
* @param {?} isDisabled
* @return {?}
*/
SelectComponent.prototype.setDisabledState = /**
* @param {?} isDisabled
* @return {?}
*/
function (isDisabled) {
this.disabled = isDisabled;
};
/**
* @param {?} value
* @return {?}
*/
SelectComponent.prototype.writeValue = /**
* @param {?} value
* @return {?}
*/
function (value) {
var _this = this;
this.value = value;
setTimeout((/**
* @return {?}
*/
function () {
_this.updateControl(_this.value);
}), 0);
};
/**
* @param {?} fn
* @return {?}
*/
SelectComponent.prototype.registerOnChange = /**
* @param {?} fn
* @return {?}
*/
function (fn) {
this.onChange = fn;
};
/**
* @param {?} fn
* @return {?}
*/
SelectComponent.prototype.registerOnTouched = /**
* @param {?} fn
* @return {?}
*/
function (fn) {
this.onTouched = fn;
};
/**
* @param {?} value
* @return {?}
*/
SelectComponent.prototype.onChange = /**
* @param {?} value
* @return {?}
*/
function (value) { };
/**
* @return {?}
*/
SelectComponent.prototype.onTouched = /**
* @return {?}
*/
function () { };
/**
* @param {?} selectedOption
* @return {?}
*/
SelectComponent.prototype.activeSelectClass = /**
* @param {?} selectedOption
* @return {?}
*/
function (selectedOption) {
if (this.selectElementRef && selectedOption.disabled) {
this.renderer.addClass(this.selectElementRef.nativeElement, 'option-disabled');
}
else if (this.selectElementRef && !selectedOption.disabled) {
this.renderer.removeClass(this.selectElementRef.nativeElement, 'option-disabled');
}
};
SelectComponent.defaultProps = {
className: '',
disabled: false,
floatLabel: '',
id: null,
isNativeControl: false,
name: '',
required: false,
value: null
};
SelectComponent.decorators = [
{ type: Component, args: [{
providers: [{
multi: true,
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef((/**
* @return {?}
*/
function () { return SelectComponent; }))
}],
selector: config.components.prefix + "-select }",
template: "<div [ngClass]=\"[className, prefix + '-form-control-select-container']\" *ngIf=\"isNativeControl\">\n <div [ngClass]=\"prefix + '-form-control-container'\"\n [class.float-label]=\"floatLabel\"\n [class.active]=\"value\"\n [class.focused]=\"isFocused\"\n [class.disabled]=\"disabled\"\n >\n <div [ngClass]=\"prefix + '-form-control-wrapper'\">\n <div [ngClass]=\"prefix + '-form-control-label'\">{{ floatLabel }}</div>\n\n <select #selectElement (blur)=\"onBlur()\" (click)=\"onClick()\" (focus)=\"onFocus()\" (input)=\"onChangeNativeOption($event)\"\n [ngClass]=\"prefix + '-form-control'\"\n [attr.id]=\"id\"\n [disabled]=\"disabled\"\n [name]=\"name\"\n [required]=\"required\"\n [value]=\"value\"\n >\n <option\n [selected]=\"option.value === value\"\n [value]=\"option.value\"\n [disabled]=\"option.disabled\"\n *ngFor=\"let option of options\">\n {{ option.content }}\n </option>\n </select>\n </div>\n\n <materialize-icon [className]=\"prefix + '-form-control-select-icon'\" size=\"lg\">arrow_drop_down</materialize-icon>\n </div>\n</div>\n\n\n<div (focus)=\"onFocus()\" (blur)=\"onBlur()\" *ngIf=\"!isNativeControl\"\n [ngClass]=\"[className, prefix + '-form-control-select-container']\"\n [class.open]=\"isOpen\"\n [tabindex]=\"disabled ? '-1' : '0'\"\n>\n <div #backdrop *ngIf=\"isOpen\" [ngClass]=\"prefix + '-form-control-select-backdrop'\"></div>\n\n <div (click)=\"onClick()\"\n [ngClass]=\"[prefix + '-form-control-container' , className]\"\n [class.float-label]=\"floatLabel\"\n [class.active]=\"value\"\n [class.focused]=\"isFocused\"\n [class.disabled]=\"disabled\"\n >\n <div [ngClass]=\"prefix + '-form-control-wrapper'\">\n <div [ngClass]=\"prefix + '-form-control-label'\">{{ floatLabel }}</div>\n <div [ngClass]=\"prefix + '-form-control'\" #labelContainer> </div>\n </div>\n\n <materialize-icon [className]=\"prefix + '-form-control-select-icon'\" size=\"lg\">arrow_drop_down</materialize-icon>\n </div>\n\n <div [className]=\"prefix + '-form-control-select-menu'\">\n <ng-content select=\"materialize-select-option\"></ng-content>\n </div>\n</div>\n"
}] }
];
/** @nocollapse */
SelectComponent.ctorParameters = function () { return [
{ type: Renderer2 }
]; };
SelectComponent.propDecorators = {
backdropRef: [{ type: ViewChild, args: ['backdrop', { static: false },] }],
labelContainerRef: [{ type: ViewChild, args: ['labelContainer', { static: false },] }],
selectElementRef: [{ type: ViewChild, args: ['selectElement', { static: false },] }],
options: [{ type: ContentChildren, args: [SelectOptionComponent,] }],
onChangeEmitter: [{ type: Output, args: ['onChange',] }],
className: [{ type: Input }],
disabled: [{ type: Input }],
floatLabel: [{ type: Input }],
id: [{ type: Input }],
isNativeControl: [{ type: Input }],
name: [{ type: Input }],
required: [{ type: Input }],
value: [{ type: Input }]
};
return SelectComponent;
}());
export { SelectComponent };
if (false) {
/** @type {?} */
SelectComponent.defaultProps;
/** @type {?} */
SelectComponent.prototype.backdropRef;
/** @type {?} */
SelectComponent.prototype.labelContainerRef;
/** @type {?} */
SelectComponent.prototype.selectElementRef;
/** @type {?} */
SelectComponent.prototype.options;
/** @type {?} */
SelectComponent.prototype.onChangeEmitter;
/** @type {?} */
SelectComponent.prototype.className;
/** @type {?} */
SelectComponent.prototype.disabled;
/** @type {?} */
SelectComponent.prototype.floatLabel;
/** @type {?} */
SelectComponent.prototype.id;
/** @type {?} */
SelectComponent.prototype.isNativeControl;
/** @type {?} */
SelectComponent.prototype.name;
/** @type {?} */
SelectComponent.prototype.required;
/** @type {?} */
SelectComponent.prototype.value;
/** @type {?} */
SelectComponent.prototype.prefix;
/** @type {?} */
SelectComponent.prototype.isFocused;
/** @type {?} */
SelectComponent.prototype.isOpen;
/** @type {?} */
SelectComponent.prototype.valueLabel;
/**
* @type {?}
* @private
*/
SelectComponent.prototype.renderer;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL21hdGVyaWFsaXplLWFuZ3VsYXIvIiwic291cmNlcyI6WyJhcHAvY29tcGxldGVkLWNvbXBvbmVudHMvc2VsZWN0L3NlbGVjdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBUUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV0QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUdoRjtJQTRDRSx5QkFBb0IsUUFBbUI7UUFBbkIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQWY5QixjQUFTLEdBQVcsZUFBZSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUM7UUFDM0QsYUFBUSxHQUFZLGVBQWUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO1FBQzFELGVBQVUsR0FBVyxlQUFlLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQztRQUM3RCxPQUFFLEdBQWtCLGVBQWUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1FBQ3BELG9CQUFlLEdBQVksZUFBZSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUM7UUFDeEUsU0FBSSxHQUFXLGVBQWUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO1FBQ2pELGFBQVEsR0FBWSxlQUFlLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztRQUMxRCxVQUFLLEdBQXFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO1FBRS9FLFdBQU0sR0FBRyxNQUFNLENBQUMsVUFBVSxD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LEtBQUs7cUJBQ0wsS0FBSztrQ0FDTCxLQUFLO3VCQUNMLEtBQUs7MkJBQ0wsS0FBSzt3QkFDTCxLQUFLOztJQStKUixzQkFBQztDQUFBLEFBbk1ELElBbU1DO1NBMUxZLGVBQWU7OztJQUMxQiw2QkFTRTs7SUFFRixzQ0FBa0U7O0lBQ2xFLDRDQUE4RTs7SUFDOUUsMkNBQTRFOztJQUU1RSxrQ0FBa0Y7O0lBRWxGLDBDQUFvRjs7SUFFcEYsb0NBQW9FOztJQUNwRSxtQ0FBbUU7O0lBQ25FLHFDQUFzRTs7SUFDdEUsNkJBQTZEOztJQUM3RCwwQ0FBaUY7O0lBQ2pGLCtCQUEwRDs7SUFDMUQsbUNBQW1FOztJQUNuRSxnQ0FBc0Y7O0lBRXRGLGlDQUF5Qzs7SUFFekMsb0NBQTBCOztJQUMxQixpQ0FBdUI7O0lBQ3ZCLHFDQUEwQjs7Ozs7SUFFZCxtQ0FBMkIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgV29ya3lsYWIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3dvcmt5bGFiL21hdGVyaWFsaXplLWFuZ3VsYXIvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFJlbmRlcmVyMixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAnLi4vLi4vY29uZmlnJztcbmltcG9ydCB7IFNlbGVjdE1vZGVsIH0gZnJvbSAnLi9zZWxlY3QubW9kZWwnO1xuaW1wb3J0IHsgU2VsZWN0T3B0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9zZWxlY3Qtb3B0aW9uL3NlbGVjdC1vcHRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IFNlbGVjdE9wdGlvbk1vZGVsIH0gZnJvbSAnLi9zZWxlY3Qtb3B0aW9uL3NlbGVjdC1vcHRpb24ubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgcHJvdmlkZXJzOiBbe1xuICAgIG11bHRpOiB0cnVlLFxuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNlbGVjdENvbXBvbmVudClcbiAgfV0sXG4gIHNlbGVjdG9yOiBgJHsgY29uZmlnLmNvbXBvbmVudHMucHJlZml4IH0tc2VsZWN0IH1gLFxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBTZWxlY3RDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJDb250ZW50SW5pdCwgU2VsZWN0TW9kZWwge1xuICBzdGF0aWMgcmVhZG9ubHkgZGVmYXVsdFByb3BzOiBTZWxlY3RNb2RlbCA9IHtcbiAgICBjbGFzc05hbWU6ICcnLFxuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICBmbG9hdExhYmVsOiAnJyxcbiAgICBpZDogbnVsbCxcbiAgICBpc05hdGl2ZUNvbnRyb2w6IGZhbHNlLFxuICAgIG5hbWU6ICcnLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICB2YWx1ZTogbnVsbFxuICB9O1xuXG4gIEBWaWV3Q2hpbGQoJ2JhY2tkcm9wJywgeyBzdGF0aWM6IGZhbHNlIH0pIGJhY2tkcm9wUmVmOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdsYWJlbENvbnRhaW5lcicsIHsgc3RhdGljOiBmYWxzZSB9KSBsYWJlbENvbnRhaW5lclJlZjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnc2VsZWN0RWxlbWVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBzZWxlY3RFbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oU2VsZWN0T3B0aW9uQ29tcG9uZW50KSBvcHRpb25zOiBRdWVyeUxpc3Q8U2VsZWN0T3B0aW9uQ29tcG9uZW50PjtcblxuICBAT3V0cHV0KCdvbkNoYW5nZScpIG9uQ2hhbmdlRW1pdHRlcjogRXZlbnRFbWl0dGVyPHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsPjtcblxuICBASW5wdXQoKSBjbGFzc05hbWU6IHN0cmluZyA9IFNlbGVjdENvbXBvbmVudC5kZWZhdWx0UHJvcHMuY2xhc3NOYW1lO1xuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IFNlbGVjdENvbXBvbmVudC5kZWZhdWx0UHJvcHMuZGlzYWJsZWQ7XG4gIEBJbnB1dCgpIGZsb2F0TGFiZWw6IHN0cmluZyA9IFNlbGVjdENvbXBvbmVudC5kZWZhdWx0UHJvcHMuZmxvYXRMYWJlbDtcbiAgQElucHV0KCkgaWQ6IHN0cmluZyB8IG51bGwgPSBTZWxlY3RDb21wb25lbnQuZGVmYXVsdFByb3BzLmlkO1xuICBASW5wdXQoKSBpc05hdGl2ZUNvbnRyb2w6IGJvb2xlYW4gPSBTZWxlY3RDb21wb25lbnQuZGVmYXVsdFByb3BzLmlzTmF0aXZlQ29udHJvbDtcbiAgQElucHV0KCkgbmFtZTogc3RyaW5nID0gU2VsZWN0Q29tcG9uZW50LmRlZmF1bHRQcm9wcy5uYW1lO1xuICBASW5wdXQoKSByZXF1aXJlZDogYm9vbGVhbiA9IFNlbGVjdENvbXBvbmVudC5kZWZhdWx0UHJvcHMucmVxdWlyZWQ7XG4gIEBJbnB1dCgpIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCA9IFNlbGVjdENvbXBvbmVudC5kZWZhdWx0UHJvcHMudmFsdWU7XG5cbiAgcHVibGljIHByZWZpeCA9IGNvbmZpZy5jb21wb25lbnRzLnByZWZpeDtcblxuICBwdWJsaWMgaXNGb2N1c2VkOiBib29sZWFuO1xuICBwdWJsaWMgaXNPcGVuOiBib29sZWFuO1xuICBwdWJsaWMgdmFsdWVMYWJlbDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMikge1xuICAgIHRoaXMuaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICB0aGlzLm9uQ2hhbmdlRW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIHRoaXMuYWRkQmFja2Ryb3BMaXN0ZW5lciA9IHRoaXMuYWRkQmFja2Ryb3BMaXN0ZW5lci5iaW5kKHRoaXMpO1xuICAgIHRoaXMub25DaGFuZ2VPcHRpb24gPSB0aGlzLm9uQ2hhbmdlT3B0aW9uLmJpbmQodGhpcyk7XG4gICAgdGhpcy5yZWdpc3Rlck9wdGlvbnMgPSB0aGlzLnJlZ2lzdGVyT3B0aW9ucy5iaW5kKHRoaXMpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHNldFRpbWVvdXQodGhpcy5yZWdpc3Rlck9wdGlvbnMsIDApO1xuXG4gICAgdGhpcy5vcHRpb25zLmNoYW5nZXMuc3Vic2NyaWJlKGNoYW5nZXMgPT4ge1xuICAgICAgc2V0VGltZW91dCh0aGlzLnJlZ2lzdGVyT3B0aW9ucywgMCk7XG4gICAgfSk7XG4gIH1cblxuICByZWdpc3Rlck9wdGlvbnMoKSB7XG4gICAgdGhpcy5vcHRpb25zLmZvckVhY2gob3B0aW9uID0+IHtcbiAgICAgIG9wdGlvbi5pc0FjdGl2ZSA9IChvcHRpb24udmFsdWUgPT09IHRoaXMudmFsdWUpO1xuXG4gICAgICBvcHRpb24ub25DbGlja0VtaXR0ZXIuc3Vic2NyaWJlKHRoaXMub25DaGFuZ2VPcHRpb24pO1xuICAgIH0pO1xuXG4gICAgdGhpcy51cGRhdGVDb250cm9sKHRoaXMudmFsdWUpO1xuICB9XG5cbiAgdXBkYXRlQ29udHJvbCh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcblxuICAgIHRoaXMuYWN0aXZlU2VsZWN0ZWRPcHRpb24odGhpcy52YWx1ZSk7XG4gIH1cblxuICBvbkNoYW5nZU9wdGlvbih2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwpIHtcbiAgICB0aGlzLnVwZGF0ZUNvbnRyb2wodmFsdWUpO1xuXG4gICAgdGhpcy5vbkNoYW5nZUVtaXR0ZXIuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICB9XG5cbiAgYWN0aXZlU2VsZWN0ZWRPcHRpb24odmFsdWU6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsKSB7XG4gICAgdGhpcy5vcHRpb25zLmZvckVhY2gob3B0aW9uID0+IHtcbiAgICAgIGlmIChvcHRpb24udmFsdWUgPT09IHZhbHVlKSB7XG4gICAgICAgIG9wdGlvbi5pc0FjdGl2ZSA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5hY3RpdmVTZWxlY3RDbGFzcyhvcHRpb24pO1xuXG4gICAgICAgIHRoaXMuY2xvbmVPcHRpb24ob3B0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvbi5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY2xvbmVPcHRpb24oc2VsZWN0ZWRPcHRpb246IFNlbGVjdE9wdGlvbkNvbXBvbmVudCkge1xuICAgIGlmICghdGhpcy5sYWJlbENvbnRhaW5lclJlZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgbmF0aXZlRWxlbWVudDogbGFiZWxDb250YWluZXIgfSA9IHRoaXMubGFiZWxDb250YWluZXJSZWY7XG4gICAgY29uc3QgeyBvcHRpb25UZW1wbGF0ZVJlZiwgZGlzYWJsZWQgfSA9IHNlbGVjdGVkT3B0aW9uO1xuXG4gICAgaWYgKGxhYmVsQ29udGFpbmVyLmZpcnN0Q2hpbGQpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQobGFiZWxDb250YWluZXIsIGxhYmVsQ29udGFpbmVyLmZpcnN0Q2hpbGQpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25UZW1wbGF0ZVJlZikge1xuICAgICAgY29uc3QgeyBmaXJzdENoaWxkIH0gPSBvcHRpb25UZW1wbGF0ZVJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgY29uc3QgY2xvbmVkID0gZmlyc3RDaGlsZC5jbG9uZU5vZGUodHJ1ZSk7XG5cbiAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGNsb25lZCwgJ29wdGlvbi1kaXNhYmxlZCcpO1xuICAgICAgfVxuICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChsYWJlbENvbnRhaW5lciwgY2xvbmVkKTtcbiAgICB9XG4gIH1cblxuICBvbkNoYW5nZU5hdGl2ZU9wdGlvbihldmVudDogYW55KSB7XG4gICAgY29uc3QgeyBzZWxlY3RlZE9wdGlvbnMgfSA9IGV2ZW50LnRhcmdldDtcbiAgICBjb25zdCB7IHZhbHVlIH0gPSBzZWxlY3RlZE9wdGlvbnNbMF07XG5cbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG5cbiAgICB0aGlzLmFjdGl2ZVNlbGVjdENsYXNzKHNlbGVjdGVkT3B0aW9uc1swXSk7XG5cbiAgICB0aGlzLm9uQ2hhbmdlRW1pdHRlci5lbWl0KHRoaXMudmFsdWUpO1xuICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XG4gIH1cblxuICBvbkJsdXIoKTogdm9pZCB7XG4gICAgdGhpcy5pc0ZvY3VzZWQgPSBmYWxzZTtcbiAgfVxuXG4gIG9uRm9jdXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmlzRm9jdXNlZCA9IHRydWU7XG5cbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgfVxuICB9XG5cbiAgb25DbGljaygpIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcblxuICAgICAgaWYgKCF0aGlzLmlzTmF0aXZlQ29udHJvbCkge1xuICAgICAgICBzZXRUaW1lb3V0KHRoaXMuYWRkQmFja2Ryb3BMaXN0ZW5lciwgMCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYWRkQmFja2Ryb3BMaXN0ZW5lcigpIHtcbiAgICB0aGlzLmJhY2tkcm9wUmVmLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVDb250cm9sKHRoaXMudmFsdWUpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIG9uQ2hhbmdlKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCk6IHZvaWQge31cblxuICBvblRvdWNoZWQoKTogdm9pZCB7fVxuXG4gIGFjdGl2ZVNlbGVjdENsYXNzKHNlbGVjdGVkT3B0aW9uOiBTZWxlY3RPcHRpb25Nb2RlbCkge1xuICAgIGlmICh0aGlzLnNlbGVjdEVsZW1lbnRSZWYgJiYgc2VsZWN0ZWRPcHRpb24uZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5zZWxlY3RFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdvcHRpb24tZGlzYWJsZWQnKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0RWxlbWVudFJlZiAmJiAhc2VsZWN0ZWRPcHRpb24uZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5zZWxlY3RFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdvcHRpb24tZGlzYWJsZWQnKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==