@angular-mdl/core
Version:
Angular components, directives and styles based on material design lite https://getmdl.io.
170 lines • 19.2 kB
JavaScript
import { Component, ElementRef, forwardRef, HostBinding, HostListener, Input, Renderer2, ViewChild, ViewEncapsulation, } from "@angular/core";
import { NG_VALUE_ACCESSOR } from "@angular/forms";
import { toBoolean } from "../common/boolean-property";
import { noop } from "../common/noop";
import { callNative } from "../common/native-support";
import { toNumber } from "../common/number.property";
import * as i0 from "@angular/core";
import * as i1 from "@angular/forms";
export class MdlSliderComponent {
constructor(renderer, elRef) {
this.renderer = renderer;
this.elRef = elRef;
this.isSliderContainer = true;
this.onTouchedCallback = noop;
this.onChangeCallback = noop;
this.disabledIntern = false;
}
get disabled() {
return this.disabledIntern;
}
set disabled(value) {
this.disabledIntern = toBoolean(value);
}
get value() {
return this.valueIntern;
}
set value(v) {
this.valueIntern = toNumber(v);
this.updateSliderUI();
this.onChangeCallback(v);
}
onMouseUp(event) {
event.target.blur();
}
onMouseDown(event) {
if (event.target !== this.elRef.nativeElement) {
return;
}
// Discard the original event and create a new event that
// is on the slider element.
event.preventDefault();
const newEvent = new MouseEvent("mousedown", {
relatedTarget: event.relatedTarget,
button: event.button,
buttons: event.buttons,
clientX: event.clientX,
clientY: this.inputEl?.nativeElement.getBoundingClientRect().y,
screenX: event.screenX,
screenY: event.screenY,
});
callNative(this.inputEl?.nativeElement, "dispatchEvent", newEvent);
}
ngAfterViewInit() {
this.updateSliderUI();
}
writeValue(value) {
this.valueIntern = value;
this.updateSliderUI();
}
registerOnChange(fn) {
this.onChangeCallback = fn;
}
registerOnTouched(fn) {
this.onTouchedCallback = fn;
}
setDisabledState(isDisabled) {
this.disabled = isDisabled;
}
updateSliderUI() {
// if the input hat a static value (for example value="30"
// the setvalue method is called before the ViewChilds are initialized
// this has changed in Angular 9! :(
const min = toNumber(this.min);
const max = toNumber(this.max);
if (!this.inputEl ||
this.valueIntern == null ||
max == null ||
min == null) {
return;
}
const fraction = (this.valueIntern - min) / (max - min);
if (fraction === 0) {
this.renderer.addClass(this.inputEl.nativeElement, "is-lowest-value");
}
else {
this.renderer.removeClass(this.inputEl.nativeElement, "is-lowest-value");
}
this.renderer.setStyle(this.lowerEl?.nativeElement, "flex", "" + fraction);
this.renderer.setStyle(this.upperEl?.nativeElement, "flex", "" + (1 - fraction));
}
}
MdlSliderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: MdlSliderComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
MdlSliderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: MdlSliderComponent, selector: "mdl-slider", inputs: { min: "min", max: "max", step: "step", disabled: "disabled", value: "value" }, host: { listeners: { "mouseup": "onMouseUp($event)", "mousedown": "onMouseDown($event)" }, properties: { "class.mdl-slider__container": "this.isSliderContainer" } }, providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => MdlSliderComponent),
multi: true,
},
], viewQueries: [{ propertyName: "lowerEl", first: true, predicate: ["lower"], descendants: true, static: true }, { propertyName: "upperEl", first: true, predicate: ["uppper"], descendants: true, static: true }, { propertyName: "inputEl", first: true, predicate: ["input"], descendants: true, static: true }], ngImport: i0, template: `
<input
class="mdl-slider is-upgraded"
type="range"
[min]="min"
[max]="max"
[step]="step"
[(ngModel)]="value"
[disabled]="disabled"
tabindex="0"
#input
/>
<div class="mdl-slider__background-flex">
<div class="mdl-slider__background-lower" #lower></div>
<div class="mdl-slider__background-upper" #uppper></div>
</div>
`, isInline: true, styles: [":host{height:22px;user-select:none;-webkit-user-select:none;-moz-user-select:none}\n"], dependencies: [{ kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.RangeValueAccessor, selector: "input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], encapsulation: i0.ViewEncapsulation.None });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: MdlSliderComponent, decorators: [{
type: Component,
args: [{ selector: "mdl-slider", providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => MdlSliderComponent),
multi: true,
},
], template: `
<input
class="mdl-slider is-upgraded"
type="range"
[min]="min"
[max]="max"
[step]="step"
[(ngModel)]="value"
[disabled]="disabled"
tabindex="0"
#input
/>
<div class="mdl-slider__background-flex">
<div class="mdl-slider__background-lower" #lower></div>
<div class="mdl-slider__background-upper" #uppper></div>
</div>
`, encapsulation: ViewEncapsulation.None, styles: [":host{height:22px;user-select:none;-webkit-user-select:none;-moz-user-select:none}\n"] }]
}], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }]; }, propDecorators: { min: [{
type: Input
}], max: [{
type: Input
}], step: [{
type: Input
}], lowerEl: [{
type: ViewChild,
args: ["lower", { static: true }]
}], upperEl: [{
type: ViewChild,
args: ["uppper", { static: true }]
}], inputEl: [{
type: ViewChild,
args: ["input", { static: true }]
}], isSliderContainer: [{
type: HostBinding,
args: ["class.mdl-slider__container"]
}], disabled: [{
type: Input
}], value: [{
type: Input
}], onMouseUp: [{
type: HostListener,
args: ["mouseup", ["$event"]]
}], onMouseDown: [{
type: HostListener,
args: ["mousedown", ["$event"]]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWRsLXNsaWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvc2xpZGVyL21kbC1zbGlkZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsRUFDVixXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFDTCxTQUFTLEVBQ1QsU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7QUF3Q3JELE1BQU0sT0FBTyxrQkFBa0I7SUFvQjdCLFlBQW9CLFFBQW1CLEVBQVUsS0FBaUI7UUFBOUMsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUFVLFVBQUssR0FBTCxLQUFLLENBQVk7UUFObEUsc0JBQWlCLEdBQUcsSUFBSSxDQUFDO1FBRWpCLHNCQUFpQixHQUFlLElBQUksQ0FBQztRQUNyQyxxQkFBZ0IsR0FBeUIsSUFBSSxDQUFDO1FBQzlDLG1CQUFjLEdBQUcsS0FBSyxDQUFDO0lBRXNDLENBQUM7SUFFdEUsSUFDSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLFFBQVEsQ0FBQyxLQUFjO1FBQ3pCLElBQUksQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQWEsS0FBSyxDQUFDLENBQXFDO1FBQ3RELElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUdELFNBQVMsQ0FBQyxLQUFpQjtRQUN4QixLQUFLLENBQUMsTUFBc0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBR0QsV0FBVyxDQUFDLEtBQWlCO1FBQzNCLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRTtZQUM3QyxPQUFPO1NBQ1I7UUFDRCx5REFBeUQ7UUFDekQsNEJBQTRCO1FBQzVCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixNQUFNLFFBQVEsR0FBRyxJQUFJLFVBQVUsQ0FBQyxXQUFXLEVBQUU7WUFDM0MsYUFBYSxFQUFFLEtBQUssQ0FBQyxhQUFhO1lBQ2xDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtZQUNwQixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDdEIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ3RCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUM7WUFDOUQsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ3RCLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztTQUN2QixDQUFDLENBQUM7UUFDSCxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBYTtRQUN0QixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQWlCO1FBQ2hDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQWlCO1FBQ2pDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELGdCQUFnQixDQUFDLFVBQW1CO1FBQ2xDLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO0lBQzdCLENBQUM7SUFFRCxjQUFjO1FBQ1osMERBQTBEO1FBQzFELHNFQUFzRTtRQUN0RSxvQ0FBb0M7UUFDcEMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQixNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLElBQ0UsQ0FBQyxJQUFJLENBQUMsT0FBTztZQUNiLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSTtZQUN4QixHQUFHLElBQUksSUFBSTtZQUNYLEdBQUcsSUFBSSxJQUFJLEVBQ1g7WUFDQSxPQUFPO1NBQ1I7UUFDRCxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFFeEQsSUFBSSxRQUFRLEtBQUssQ0FBQyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLGlCQUFpQixDQUFDLENBQUM7U0FDdkU7YUFBTTtZQUNMLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLGlCQUFpQixDQUFDLENBQUM7U0FDMUU7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUNwQixJQUFJLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFDM0IsTUFBTSxFQUNOLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FDcEIsQ0FBQztJQUNKLENBQUM7OytHQW5IVSxrQkFBa0I7bUdBQWxCLGtCQUFrQixtU0FwQ2xCO1FBQ1Q7WUFDRSxPQUFPLEVBQUUsaUJBQWlCO1lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUM7WUFDakQsS0FBSyxFQUFFLElBQUk7U0FDWjtLQUNGLDZVQUNTOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JUOzJGQWFVLGtCQUFrQjtrQkF0QzlCLFNBQVM7K0JBQ0UsWUFBWSxhQUNYO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLG1CQUFtQixDQUFDOzRCQUNqRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRixZQUNTOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JULGlCQVdjLGlCQUFpQixDQUFDLElBQUk7eUhBSXJDLEdBQUc7c0JBREYsS0FBSztnQkFHTixHQUFHO3NCQURGLEtBQUs7Z0JBR04sSUFBSTtzQkFESCxLQUFLO2dCQUdOLE9BQU87c0JBRE4sU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUdwQyxPQUFPO3NCQUROLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHckMsT0FBTztzQkFETixTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBR3BDLGlCQUFpQjtzQkFEaEIsV0FBVzt1QkFBQyw2QkFBNkI7Z0JBVXRDLFFBQVE7c0JBRFgsS0FBSztnQkFhTyxLQUFLO3NCQUFqQixLQUFLO2dCQU9OLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBTW5DLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBSZW5kZXJlcjIsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IHRvQm9vbGVhbiB9IGZyb20gXCIuLi9jb21tb24vYm9vbGVhbi1wcm9wZXJ0eVwiO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gXCIuLi9jb21tb24vbm9vcFwiO1xuaW1wb3J0IHsgY2FsbE5hdGl2ZSB9IGZyb20gXCIuLi9jb21tb24vbmF0aXZlLXN1cHBvcnRcIjtcbmltcG9ydCB7IHRvTnVtYmVyIH0gZnJvbSBcIi4uL2NvbW1vbi9udW1iZXIucHJvcGVydHlcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcIm1kbC1zbGlkZXJcIixcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBNZGxTbGlkZXJDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8aW5wdXRcbiAgICAgIGNsYXNzPVwibWRsLXNsaWRlciBpcy11cGdyYWRlZFwiXG4gICAgICB0eXBlPVwicmFuZ2VcIlxuICAgICAgW21pbl09XCJtaW5cIlxuICAgICAgW21heF09XCJtYXhcIlxuICAgICAgW3N0ZXBdPVwic3RlcFwiXG4gICAgICBbKG5nTW9kZWwpXT1cInZhbHVlXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgI2lucHV0XG4gICAgLz5cbiAgICA8ZGl2IGNsYXNzPVwibWRsLXNsaWRlcl9fYmFja2dyb3VuZC1mbGV4XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWRsLXNsaWRlcl9fYmFja2dyb3VuZC1sb3dlclwiICNsb3dlcj48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtZGwtc2xpZGVyX19iYWNrZ3JvdW5kLXVwcGVyXCIgI3VwcHBlcj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBoZWlnaHQ6IDIycHg7XG4gICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xuICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xuICAgICAgfVxuICAgIGAsXG4gIF0sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIE1kbFNsaWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KClcbiAgbWluOiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpXG4gIG1heDogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKVxuICBzdGVwOiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIEBWaWV3Q2hpbGQoXCJsb3dlclwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBsb3dlckVsOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xuICBAVmlld0NoaWxkKFwidXBwcGVyXCIsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHVwcGVyRWw6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XG4gIEBWaWV3Q2hpbGQoXCJpbnB1dFwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBpbnB1dEVsOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xuICBASG9zdEJpbmRpbmcoXCJjbGFzcy5tZGwtc2xpZGVyX19jb250YWluZXJcIilcbiAgaXNTbGlkZXJDb250YWluZXIgPSB0cnVlO1xuICBwcml2YXRlIHZhbHVlSW50ZXJuOiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIG9uVG91Y2hlZENhbGxiYWNrOiAoKSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBvbkNoYW5nZUNhbGxiYWNrOiAoXzogdW5rbm93bikgPT4gdm9pZCA9IG5vb3A7XG4gIHByaXZhdGUgZGlzYWJsZWRJbnRlcm4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsIHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWYpIHt9XG5cbiAgQElucHV0KClcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRpc2FibGVkSW50ZXJuO1xuICB9XG5cbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5kaXNhYmxlZEludGVybiA9IHRvQm9vbGVhbih2YWx1ZSk7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVJbnRlcm47XG4gIH1cblxuICBASW5wdXQoKSBzZXQgdmFsdWUodjogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xuICAgIHRoaXMudmFsdWVJbnRlcm4gPSB0b051bWJlcih2KTtcbiAgICB0aGlzLnVwZGF0ZVNsaWRlclVJKCk7XG4gICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKHYpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcihcIm1vdXNldXBcIiwgW1wiJGV2ZW50XCJdKVxuICBvbk1vdXNlVXAoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5ibHVyKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKFwibW91c2Vkb3duXCIsIFtcIiRldmVudFwiXSlcbiAgb25Nb3VzZURvd24oZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQudGFyZ2V0ICE9PSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gRGlzY2FyZCB0aGUgb3JpZ2luYWwgZXZlbnQgYW5kIGNyZWF0ZSBhIG5ldyBldmVudCB0aGF0XG4gICAgLy8gaXMgb24gdGhlIHNsaWRlciBlbGVtZW50LlxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgbmV3RXZlbnQgPSBuZXcgTW91c2VFdmVudChcIm1vdXNlZG93blwiLCB7XG4gICAgICByZWxhdGVkVGFyZ2V0OiBldmVudC5yZWxhdGVkVGFyZ2V0LFxuICAgICAgYnV0dG9uOiBldmVudC5idXR0b24sXG4gICAgICBidXR0b25zOiBldmVudC5idXR0b25zLFxuICAgICAgY2xpZW50WDogZXZlbnQuY2xpZW50WCxcbiAgICAgIGNsaWVudFk6IHRoaXMuaW5wdXRFbD8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS55LFxuICAgICAgc2NyZWVuWDogZXZlbnQuc2NyZWVuWCxcbiAgICAgIHNjcmVlblk6IGV2ZW50LnNjcmVlblksXG4gICAgfSk7XG4gICAgY2FsbE5hdGl2ZSh0aGlzLmlucHV0RWw/Lm5hdGl2ZUVsZW1lbnQsIFwiZGlzcGF0Y2hFdmVudFwiLCBuZXdFdmVudCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVTbGlkZXJVSSgpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZUludGVybiA9IHZhbHVlO1xuICAgIHRoaXMudXBkYXRlU2xpZGVyVUkoKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICgpID0+IHVua25vd24pOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICB1cGRhdGVTbGlkZXJVSSgpOiB2b2lkIHtcbiAgICAvLyBpZiB0aGUgaW5wdXQgaGF0IGEgc3RhdGljIHZhbHVlIChmb3IgZXhhbXBsZSB2YWx1ZT1cIjMwXCJcbiAgICAvLyB0aGUgc2V0dmFsdWUgbWV0aG9kIGlzIGNhbGxlZCBiZWZvcmUgdGhlIFZpZXdDaGlsZHMgYXJlIGluaXRpYWxpemVkXG4gICAgLy8gdGhpcyBoYXMgY2hhbmdlZCBpbiBBbmd1bGFyIDkhIDooXG4gICAgY29uc3QgbWluID0gdG9OdW1iZXIodGhpcy5taW4pO1xuICAgIGNvbnN0IG1heCA9IHRvTnVtYmVyKHRoaXMubWF4KTtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5pbnB1dEVsIHx8XG4gICAgICB0aGlzLnZhbHVlSW50ZXJuID09IG51bGwgfHxcbiAgICAgIG1heCA9PSBudWxsIHx8XG4gICAgICBtaW4gPT0gbnVsbFxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmcmFjdGlvbiA9ICh0aGlzLnZhbHVlSW50ZXJuIC0gbWluKSAvIChtYXggLSBtaW4pO1xuXG4gICAgaWYgKGZyYWN0aW9uID09PSAwKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LCBcImlzLWxvd2VzdC12YWx1ZVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudCwgXCJpcy1sb3dlc3QtdmFsdWVcIik7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmxvd2VyRWw/Lm5hdGl2ZUVsZW1lbnQsIFwiZmxleFwiLCBcIlwiICsgZnJhY3Rpb24pO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICB0aGlzLnVwcGVyRWw/Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICBcImZsZXhcIixcbiAgICAgIFwiXCIgKyAoMSAtIGZyYWN0aW9uKVxuICAgICk7XG4gIH1cbn1cbiJdfQ==