UNPKG

materialize-angular

Version:
319 lines 27.6 kB
/** * @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>&nbsp;</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==