materialize-angular
Version:
Material UI Angular library
319 lines • 27.6 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';
export class SelectComponent {
/**
* @param {?} renderer
*/
constructor(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 {?}
*/
ngAfterContentInit() {
setTimeout(this.registerOptions, 0);
this.options.changes.subscribe((/**
* @param {?} changes
* @return {?}
*/
changes => {
setTimeout(this.registerOptions, 0);
}));
}
/**
* @return {?}
*/
registerOptions() {
this.options.forEach((/**
* @param {?} option
* @return {?}
*/
option => {
option.isActive = (option.value === this.value);
option.onClickEmitter.subscribe(this.onChangeOption);
}));
this.updateControl(this.value);
}
/**
* @param {?} value
* @return {?}
*/
updateControl(value) {
this.value = value;
this.isOpen = false;
this.activeSelectedOption(this.value);
}
/**
* @param {?} value
* @return {?}
*/
onChangeOption(value) {
this.updateControl(value);
this.onChangeEmitter.emit(this.value);
this.onChange(this.value);
}
/**
* @param {?} value
* @return {?}
*/
activeSelectedOption(value) {
this.options.forEach((/**
* @param {?} option
* @return {?}
*/
option => {
if (option.value === value) {
option.isActive = true;
this.activeSelectClass(option);
this.cloneOption(option);
}
else {
option.isActive = false;
}
}));
}
/**
* @param {?} selectedOption
* @return {?}
*/
cloneOption(selectedOption) {
if (!this.labelContainerRef) {
return;
}
const { nativeElement: labelContainer } = this.labelContainerRef;
const { optionTemplateRef, disabled } = selectedOption;
if (labelContainer.firstChild) {
this.renderer.removeChild(labelContainer, labelContainer.firstChild);
}
if (optionTemplateRef) {
const { firstChild } = optionTemplateRef.nativeElement;
/** @type {?} */
const cloned = firstChild.cloneNode(true);
if (disabled) {
this.renderer.addClass(cloned, 'option-disabled');
}
this.renderer.appendChild(labelContainer, cloned);
}
}
/**
* @param {?} event
* @return {?}
*/
onChangeNativeOption(event) {
const { selectedOptions } = event.target;
const { value } = selectedOptions[0];
this.value = value;
this.activeSelectClass(selectedOptions[0]);
this.onChangeEmitter.emit(this.value);
this.onChange(this.value);
}
/**
* @return {?}
*/
onBlur() {
this.isFocused = false;
}
/**
* @return {?}
*/
onFocus() {
if (!this.disabled) {
this.isFocused = true;
this.onTouched();
}
}
/**
* @return {?}
*/
onClick() {
if (!this.disabled) {
this.isFocused = true;
this.isOpen = true;
if (!this.isNativeControl) {
setTimeout(this.addBackdropListener, 0);
}
}
}
/**
* @return {?}
*/
addBackdropListener() {
this.backdropRef.nativeElement.addEventListener('click', (/**
* @return {?}
*/
() => {
this.isOpen = false;
}));
}
/**
* @param {?} isDisabled
* @return {?}
*/
setDisabledState(isDisabled) {
this.disabled = isDisabled;
}
/**
* @param {?} value
* @return {?}
*/
writeValue(value) {
this.value = value;
setTimeout((/**
* @return {?}
*/
() => {
this.updateControl(this.value);
}), 0);
}
/**
* @param {?} fn
* @return {?}
*/
registerOnChange(fn) {
this.onChange = fn;
}
/**
* @param {?} fn
* @return {?}
*/
registerOnTouched(fn) {
this.onTouched = fn;
}
/**
* @param {?} value
* @return {?}
*/
onChange(value) { }
/**
* @return {?}
*/
onTouched() { }
/**
* @param {?} selectedOption
* @return {?}
*/
activeSelectClass(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 {?}
*/
() => 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 = () => [
{ 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 }]
};
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL21hdGVyaWFsaXplLWFuZ3VsYXIvIiwic291cmNlcyI6WyJhcHAvY29tcGxldGVkLWNvbXBvbmVudHMvc2VsZWN0L3NlbGVjdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBUUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV0QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQVloRixNQUFNLE9BQU8sZUFBZTs7OztJQW1DMUIsWUFBb0IsUUFBbUI7UUFBbkIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQWY5QixjQUFTLEdBQVcsZUFBZSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUM7UUFDM0QsYUFBUSxHQUFZLGVBQWUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO1FBQzFELGVBQVUsR0FBVyxlQUFlLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQztRQUM3RCxPQUFFLEdBQWtCLGVBQWUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1FBQ3BELG9CQUFlLEdBQVksZUFBZSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUM7UUFDeEUsU0FBSSxHQUFXLGVBQWUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO1FBQ2pELGFBQVEsR0FBWSxlQUFlLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztRQUMxRCxVQUFLLEdBQXFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO1FBRS9FLFdBQU0sR0FB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TCxLQUFLO3VCQUNMLEtBQUs7b0JBQ0wsS0FBSzs7OztJQTFCTiw2QkFTRTs7SUFFRixzQ0FBa0U7O0lBQ2xFLDRDQUE4RTs7SUFDOUUsMkNBQTRFOztJQUU1RSxrQ0FBa0Y7O0lBRWxGLDBDQUFvRjs7SUFFcEYsb0NBQW9FOztJQUNwRSxtQ0FBbUU7O0lBQ25FLHFDQUFzRTs7SUFDdEUsNkJBQTZEOztJQUM3RCwwQ0FBaUY7O0lBQ2pGLCtCQUEwRDs7SUFDMUQsbUNBQW1FOztJQUNuRSxnQ0FBc0Y7O0lBRXRGLGlDQUF5Qzs7SUFFekMsb0NBQTBCOztJQUMxQixpQ0FBdUI7O0lBQ3ZCLHFDQUEwQjs7Ozs7SUFFZCxtQ0FBMkIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgV29ya3lsYWIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3dvcmt5bGFiL21hdGVyaWFsaXplLWFuZ3VsYXIvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFJlbmRlcmVyMixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAnLi4vLi4vY29uZmlnJztcbmltcG9ydCB7IFNlbGVjdE1vZGVsIH0gZnJvbSAnLi9zZWxlY3QubW9kZWwnO1xuaW1wb3J0IHsgU2VsZWN0T3B0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9zZWxlY3Qtb3B0aW9uL3NlbGVjdC1vcHRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IFNlbGVjdE9wdGlvbk1vZGVsIH0gZnJvbSAnLi9zZWxlY3Qtb3B0aW9uL3NlbGVjdC1vcHRpb24ubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgcHJvdmlkZXJzOiBbe1xuICAgIG11bHRpOiB0cnVlLFxuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNlbGVjdENvbXBvbmVudClcbiAgfV0sXG4gIHNlbGVjdG9yOiBgJHsgY29uZmlnLmNvbXBvbmVudHMucHJlZml4IH0tc2VsZWN0IH1gLFxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBTZWxlY3RDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJDb250ZW50SW5pdCwgU2VsZWN0TW9kZWwge1xuICBzdGF0aWMgcmVhZG9ubHkgZGVmYXVsdFByb3BzOiBTZWxlY3RNb2RlbCA9IHtcbiAgICBjbGFzc05hbWU6ICcnLFxuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICBmbG9hdExhYmVsOiAnJyxcbiAgICBpZDogbnVsbCxcbiAgICBpc05hdGl2ZUNvbnRyb2w6IGZhbHNlLFxuICAgIG5hbWU6ICcnLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICB2YWx1ZTogbnVsbFxuICB9O1xuXG4gIEBWaWV3Q2hpbGQoJ2JhY2tkcm9wJywgeyBzdGF0aWM6IGZhbHNlIH0pIGJhY2tkcm9wUmVmOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdsYWJlbENvbnRhaW5lcicsIHsgc3RhdGljOiBmYWxzZSB9KSBsYWJlbENvbnRhaW5lclJlZjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnc2VsZWN0RWxlbWVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBzZWxlY3RFbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oU2VsZWN0T3B0aW9uQ29tcG9uZW50KSBvcHRpb25zOiBRdWVyeUxpc3Q8U2VsZWN0T3B0aW9uQ29tcG9uZW50PjtcblxuICBAT3V0cHV0KCdvbkNoYW5nZScpIG9uQ2hhbmdlRW1pdHRlcjogRXZlbnRFbWl0dGVyPHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsPjtcblxuICBASW5wdXQoKSBjbGFzc05hbWU6IHN0cmluZyA9IFNlbGVjdENvbXBvbmVudC5kZWZhdWx0UHJvcHMuY2xhc3NOYW1lO1xuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IFNlbGVjdENvbXBvbmVudC5kZWZhdWx0UHJvcHMuZGlzYWJsZWQ7XG4gIEBJbnB1dCgpIGZsb2F0TGFiZWw6IHN0cmluZyA9IFNlbGVjdENvbXBvbmVudC5kZWZhdWx0UHJvcHMuZmxvYXRMYWJlbDtcbiAgQElucHV0KCkgaWQ6IHN0cmluZyB8IG51bGwgPSBTZWxlY3RDb21wb25lbnQuZGVmYXVsdFByb3BzLmlkO1xuICBASW5wdXQoKSBpc05hdGl2ZUNvbnRyb2w6IGJvb2xlYW4gPSBTZWxlY3RDb21wb25lbnQuZGVmYXVsdFByb3BzLmlzTmF0aXZlQ29udHJvbDtcbiAgQElucHV0KCkgbmFtZTogc3RyaW5nID0gU2VsZWN0Q29tcG9uZW50LmRlZmF1bHRQcm9wcy5uYW1lO1xuICBASW5wdXQoKSByZXF1aXJlZDogYm9vbGVhbiA9IFNlbGVjdENvbXBvbmVudC5kZWZhdWx0UHJvcHMucmVxdWlyZWQ7XG4gIEBJbnB1dCgpIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCA9IFNlbGVjdENvbXBvbmVudC5kZWZhdWx0UHJvcHMudmFsdWU7XG5cbiAgcHVibGljIHByZWZpeCA9IGNvbmZpZy5jb21wb25lbnRzLnByZWZpeDtcblxuICBwdWJsaWMgaXNGb2N1c2VkOiBib29sZWFuO1xuICBwdWJsaWMgaXNPcGVuOiBib29sZWFuO1xuICBwdWJsaWMgdmFsdWVMYWJlbDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMikge1xuICAgIHRoaXMuaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICB0aGlzLm9uQ2hhbmdlRW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIHRoaXMuYWRkQmFja2Ryb3BMaXN0ZW5lciA9IHRoaXMuYWRkQmFja2Ryb3BMaXN0ZW5lci5iaW5kKHRoaXMpO1xuICAgIHRoaXMub25DaGFuZ2VPcHRpb24gPSB0aGlzLm9uQ2hhbmdlT3B0aW9uLmJpbmQodGhpcyk7XG4gICAgdGhpcy5yZWdpc3Rlck9wdGlvbnMgPSB0aGlzLnJlZ2lzdGVyT3B0aW9ucy5iaW5kKHRoaXMpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHNldFRpbWVvdXQodGhpcy5yZWdpc3Rlck9wdGlvbnMsIDApO1xuXG4gICAgdGhpcy5vcHRpb25zLmNoYW5nZXMuc3Vic2NyaWJlKGNoYW5nZXMgPT4ge1xuICAgICAgc2V0VGltZW91dCh0aGlzLnJlZ2lzdGVyT3B0aW9ucywgMCk7XG4gICAgfSk7XG4gIH1cblxuICByZWdpc3Rlck9wdGlvbnMoKSB7XG4gICAgdGhpcy5vcHRpb25zLmZvckVhY2gob3B0aW9uID0+IHtcbiAgICAgIG9wdGlvbi5pc0FjdGl2ZSA9IChvcHRpb24udmFsdWUgPT09IHRoaXMudmFsdWUpO1xuXG4gICAgICBvcHRpb24ub25DbGlja0VtaXR0ZXIuc3Vic2NyaWJlKHRoaXMub25DaGFuZ2VPcHRpb24pO1xuICAgIH0pO1xuXG4gICAgdGhpcy51cGRhdGVDb250cm9sKHRoaXMudmFsdWUpO1xuICB9XG5cbiAgdXBkYXRlQ29udHJvbCh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcblxuICAgIHRoaXMuYWN0aXZlU2VsZWN0ZWRPcHRpb24odGhpcy52YWx1ZSk7XG4gIH1cblxuICBvbkNoYW5nZU9wdGlvbih2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwpIHtcbiAgICB0aGlzLnVwZGF0ZUNvbnRyb2wodmFsdWUpO1xuXG4gICAgdGhpcy5vbkNoYW5nZUVtaXR0ZXIuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICB9XG5cbiAgYWN0aXZlU2VsZWN0ZWRPcHRpb24odmFsdWU6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsKSB7XG4gICAgdGhpcy5vcHRpb25zLmZvckVhY2gob3B0aW9uID0+IHtcbiAgICAgIGlmIChvcHRpb24udmFsdWUgPT09IHZhbHVlKSB7XG4gICAgICAgIG9wdGlvbi5pc0FjdGl2ZSA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5hY3RpdmVTZWxlY3RDbGFzcyhvcHRpb24pO1xuXG4gICAgICAgIHRoaXMuY2xvbmVPcHRpb24ob3B0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvbi5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY2xvbmVPcHRpb24oc2VsZWN0ZWRPcHRpb246IFNlbGVjdE9wdGlvbkNvbXBvbmVudCkge1xuICAgIGlmICghdGhpcy5sYWJlbENvbnRhaW5lclJlZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgbmF0aXZlRWxlbWVudDogbGFiZWxDb250YWluZXIgfSA9IHRoaXMubGFiZWxDb250YWluZXJSZWY7XG4gICAgY29uc3QgeyBvcHRpb25UZW1wbGF0ZVJlZiwgZGlzYWJsZWQgfSA9IHNlbGVjdGVkT3B0aW9uO1xuXG4gICAgaWYgKGxhYmVsQ29udGFpbmVyLmZpcnN0Q2hpbGQpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQobGFiZWxDb250YWluZXIsIGxhYmVsQ29udGFpbmVyLmZpcnN0Q2hpbGQpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25UZW1wbGF0ZVJlZikge1xuICAgICAgY29uc3QgeyBmaXJzdENoaWxkIH0gPSBvcHRpb25UZW1wbGF0ZVJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgY29uc3QgY2xvbmVkID0gZmlyc3RDaGlsZC5jbG9uZU5vZGUodHJ1ZSk7XG5cbiAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGNsb25lZCwgJ29wdGlvbi1kaXNhYmxlZCcpO1xuICAgICAgfVxuICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChsYWJlbENvbnRhaW5lciwgY2xvbmVkKTtcbiAgICB9XG4gIH1cblxuICBvbkNoYW5nZU5hdGl2ZU9wdGlvbihldmVudDogYW55KSB7XG4gICAgY29uc3QgeyBzZWxlY3RlZE9wdGlvbnMgfSA9IGV2ZW50LnRhcmdldDtcbiAgICBjb25zdCB7IHZhbHVlIH0gPSBzZWxlY3RlZE9wdGlvbnNbMF07XG5cbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG5cbiAgICB0aGlzLmFjdGl2ZVNlbGVjdENsYXNzKHNlbGVjdGVkT3B0aW9uc1swXSk7XG5cbiAgICB0aGlzLm9uQ2hhbmdlRW1pdHRlci5lbWl0KHRoaXMudmFsdWUpO1xuICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XG4gIH1cblxuICBvbkJsdXIoKTogdm9pZCB7XG4gICAgdGhpcy5pc0ZvY3VzZWQgPSBmYWxzZTtcbiAgfVxuXG4gIG9uRm9jdXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmlzRm9jdXNlZCA9IHRydWU7XG5cbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgfVxuICB9XG5cbiAgb25DbGljaygpIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcblxuICAgICAgaWYgKCF0aGlzLmlzTmF0aXZlQ29udHJvbCkge1xuICAgICAgICBzZXRUaW1lb3V0KHRoaXMuYWRkQmFja2Ryb3BMaXN0ZW5lciwgMCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYWRkQmFja2Ryb3BMaXN0ZW5lcigpIHtcbiAgICB0aGlzLmJhY2tkcm9wUmVmLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVDb250cm9sKHRoaXMudmFsdWUpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIG9uQ2hhbmdlKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCk6IHZvaWQge31cblxuICBvblRvdWNoZWQoKTogdm9pZCB7fVxuXG4gIGFjdGl2ZVNlbGVjdENsYXNzKHNlbGVjdGVkT3B0aW9uOiBTZWxlY3RPcHRpb25Nb2RlbCkge1xuICAgIGlmICh0aGlzLnNlbGVjdEVsZW1lbnRSZWYgJiYgc2VsZWN0ZWRPcHRpb24uZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5zZWxlY3RFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdvcHRpb24tZGlzYWJsZWQnKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0RWxlbWVudFJlZiAmJiAhc2VsZWN0ZWRPcHRpb24uZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5zZWxlY3RFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdvcHRpb24tZGlzYWJsZWQnKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==