ngx-ui-switch
Version:
switch button for angular4
214 lines • 26.2 kB
JavaScript
import { Component, Input, Output, EventEmitter, HostListener, forwardRef, Inject, Optional, } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { UI_SWITCH_OPTIONS } from './ui-switch.token';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
const UI_SWITCH_CONTROL_VALUE_ACCESSOR = {
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => UiSwitchComponent),
multi: true,
};
export class UiSwitchComponent {
cdr;
_checked;
_disabled;
_reverse;
_loading;
_beforeChange;
size;
color;
switchOffColor;
switchColor;
defaultBgColor;
defaultBoColor;
checkedLabel;
uncheckedLabel;
checkedTextColor;
uncheckedTextColor;
beforeChange;
ariaLabel;
set checked(v) {
this._checked = v !== false;
}
get checked() {
return this._checked;
}
set disabled(v) {
this._disabled = v !== false;
}
get disabled() {
return this._disabled;
}
set reverse(v) {
this._reverse = v !== false;
}
get reverse() {
return this._reverse;
}
set loading(v) {
this._loading = v !== false;
}
get loading() {
return this._loading;
}
/**
* Emits changed value
*/
// eslint-disable-next-line @angular-eslint/no-output-native
change = new EventEmitter();
/**
* Emits DOM event
*/
changeEvent = new EventEmitter();
/**
* Emits changed value
*/
valueChange = new EventEmitter();
constructor(config = {}, cdr) {
this.cdr = cdr;
this.size = (config && config.size) || 'medium';
this.color = config && config.color;
this.switchOffColor = config && config.switchOffColor;
this.switchColor = config && config.switchColor;
this.defaultBgColor = config && config.defaultBgColor;
this.defaultBoColor = config && config.defaultBoColor;
this.checkedLabel = config && config.checkedLabel;
this.uncheckedLabel = config && config.uncheckedLabel;
this.checkedTextColor = config && config.checkedTextColor;
this.uncheckedTextColor = config && config.uncheckedTextColor;
}
getColor(flag = '') {
if (flag === 'borderColor') {
return this.defaultBoColor;
}
if (flag === 'switchColor') {
if (this.reverse) {
return !this.checked ? this.switchColor : this.switchOffColor || this.switchColor;
}
return this.checked ? this.switchColor : this.switchOffColor || this.switchColor;
}
if (flag === 'checkedTextColor') {
return this.reverse ? this.uncheckedTextColor : this.checkedTextColor;
}
if (flag === 'uncheckedTextColor') {
return this.reverse ? this.checkedTextColor : this.uncheckedTextColor;
}
if (this.reverse) {
return !this.checked ? this.color : this.defaultBgColor;
}
return this.checked ? this.color : this.defaultBgColor;
}
getLabelClass(labelType) {
const checked = labelType === (this.reverse ? 'unchecked' : 'checked');
return checked ? 'switch-label-checked' : 'switch-label-unchecked';
}
onClick(event) {
if (this.disabled) {
return;
}
this.checked = !this.checked;
// Component events
this.change.emit(this.checked);
this.valueChange.emit(this.checked);
this.changeEvent.emit(event);
// value accessor callbacks
this.onChangeCallback(this.checked);
this.onTouchedCallback(this.checked);
this.cdr.markForCheck();
}
onToggle(event) {
if (this.disabled) {
return;
}
if (this.beforeChange) {
this._beforeChange = this.beforeChange.subscribe((confirm) => {
if (confirm) {
this.onClick(event);
}
});
}
else {
this.onClick(event);
}
}
writeValue(obj) {
if (obj !== this.checked) {
this.checked = !!obj;
}
// Added as part of #243 when change detection OnPush is set for the
// hosting component
// https://github.com/webcat12345/ngx-ui-switch/issues/243
if (this.cdr) {
this.cdr.markForCheck();
}
}
registerOnChange(fn) {
this.onChangeCallback = fn;
}
registerOnTouched(fn) {
this.onTouchedCallback = fn;
}
setDisabledState(isDisabled) {
this.disabled = isDisabled;
}
onTouchedCallback = (v) => { };
onChangeCallback = (v) => { };
ngOnDestroy() {
if (this._beforeChange) {
this._beforeChange.unsubscribe();
}
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UiSwitchComponent, deps: [{ token: UI_SWITCH_OPTIONS, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: UiSwitchComponent, selector: "ui-switch", inputs: { size: "size", color: "color", switchOffColor: "switchOffColor", switchColor: "switchColor", defaultBgColor: "defaultBgColor", defaultBoColor: "defaultBoColor", checkedLabel: "checkedLabel", uncheckedLabel: "uncheckedLabel", checkedTextColor: "checkedTextColor", uncheckedTextColor: "uncheckedTextColor", beforeChange: "beforeChange", ariaLabel: "ariaLabel", checked: "checked", disabled: "disabled", reverse: "reverse", loading: "loading" }, outputs: { change: "change", changeEvent: "changeEvent", valueChange: "valueChange" }, host: { listeners: { "click": "onToggle($event)" } }, providers: [UI_SWITCH_CONTROL_VALUE_ACCESSOR], ngImport: i0, template: "<button\n type=\"button\"\n class=\"switch\"\n role=\"switch\"\n [attr.aria-checked]=\"reverse ? !checked : checked\"\n [attr.aria-label]=\"ariaLabel\"\n [class.checked]=\"reverse ? !checked : checked\"\n [class.disabled]=\"disabled\"\n [class.loading]=\"loading\"\n [class.switch-large]=\"size === 'large'\"\n [class.switch-medium]=\"size === 'medium'\"\n [class.switch-small]=\"size === 'small'\"\n [style.background-color]=\"getColor()\"\n [style.border-color]=\"getColor('borderColor')\"\n>\n <label class=\"switch-pane\" *ngIf=\"checkedLabel || uncheckedLabel\">\n <span\n [attr.aria-label]=\"this.checkedLabel\"\n [class]=\"getLabelClass('checked')\"\n [style.color]=\"getColor('checkedTextColor')\"\n >{{ this.checkedLabel }}</span\n >\n <span\n [attr.aria-label]=\"this.uncheckedLabel\"\n [class]=\"getLabelClass('unchecked')\"\n [style.color]=\"getColor('uncheckedTextColor')\"\n >{{ this.uncheckedLabel }}</span\n >\n </label>\n <small [style.background]=\"getColor('switchColor')\">\n <ng-content></ng-content>\n </small>\n</button>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UiSwitchComponent, decorators: [{
type: Component,
args: [{ selector: 'ui-switch', providers: [UI_SWITCH_CONTROL_VALUE_ACCESSOR], template: "<button\n type=\"button\"\n class=\"switch\"\n role=\"switch\"\n [attr.aria-checked]=\"reverse ? !checked : checked\"\n [attr.aria-label]=\"ariaLabel\"\n [class.checked]=\"reverse ? !checked : checked\"\n [class.disabled]=\"disabled\"\n [class.loading]=\"loading\"\n [class.switch-large]=\"size === 'large'\"\n [class.switch-medium]=\"size === 'medium'\"\n [class.switch-small]=\"size === 'small'\"\n [style.background-color]=\"getColor()\"\n [style.border-color]=\"getColor('borderColor')\"\n>\n <label class=\"switch-pane\" *ngIf=\"checkedLabel || uncheckedLabel\">\n <span\n [attr.aria-label]=\"this.checkedLabel\"\n [class]=\"getLabelClass('checked')\"\n [style.color]=\"getColor('checkedTextColor')\"\n >{{ this.checkedLabel }}</span\n >\n <span\n [attr.aria-label]=\"this.uncheckedLabel\"\n [class]=\"getLabelClass('unchecked')\"\n [style.color]=\"getColor('uncheckedTextColor')\"\n >{{ this.uncheckedLabel }}</span\n >\n </label>\n <small [style.background]=\"getColor('switchColor')\">\n <ng-content></ng-content>\n </small>\n</button>\n" }]
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
type: Inject,
args: [UI_SWITCH_OPTIONS]
}, {
type: Optional
}] }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { size: [{
type: Input
}], color: [{
type: Input
}], switchOffColor: [{
type: Input
}], switchColor: [{
type: Input
}], defaultBgColor: [{
type: Input
}], defaultBoColor: [{
type: Input
}], checkedLabel: [{
type: Input
}], uncheckedLabel: [{
type: Input
}], checkedTextColor: [{
type: Input
}], uncheckedTextColor: [{
type: Input
}], beforeChange: [{
type: Input
}], ariaLabel: [{
type: Input
}], checked: [{
type: Input
}], disabled: [{
type: Input
}], reverse: [{
type: Input
}], loading: [{
type: Input
}], change: [{
type: Output
}], changeEvent: [{
type: Output
}], valueChange: [{
type: Output
}], onToggle: [{
type: HostListener,
args: ['click', ['$event']]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktc3dpdGNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdWktc3dpdGNoL3VpLXN3aXRjaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi9zcmMvbGliL3VpLXN3aXRjaC91aS1zd2l0Y2guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixZQUFZLEVBQ1osVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEdBRVQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUF3QixNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7QUFJdEQsTUFBTSxnQ0FBZ0MsR0FBUTtJQUM1QyxPQUFPLEVBQUUsaUJBQWlCO0lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsaUJBQWlCLENBQUM7SUFDaEQsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBUUYsTUFBTSxPQUFPLGlCQUFpQjtJQTBFbEI7SUF6RUYsUUFBUSxDQUFVO0lBQ2xCLFNBQVMsQ0FBVTtJQUNuQixRQUFRLENBQVU7SUFDbEIsUUFBUSxDQUFVO0lBQ2xCLGFBQWEsQ0FBZTtJQUUzQixJQUFJLENBQUM7SUFDTCxLQUFLLENBQUM7SUFDTixjQUFjLENBQUM7SUFDZixXQUFXLENBQUM7SUFDWixjQUFjLENBQUM7SUFDZixjQUFjLENBQUM7SUFDZixZQUFZLENBQUM7SUFDYixjQUFjLENBQUM7SUFDZixnQkFBZ0IsQ0FBQztJQUNqQixrQkFBa0IsQ0FBQztJQUNuQixZQUFZLENBQXNCO0lBQ2xDLFNBQVMsQ0FBUztJQUUzQixJQUNJLE9BQU8sQ0FBQyxDQUFVO1FBQ3BCLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxLQUFLLEtBQUss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QyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgZm9yd2FyZFJlZixcbiAgSW5qZWN0LFxuICBPcHRpb25hbCxcbiAgT25EZXN0cm95LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SLCBDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFVJX1NXSVRDSF9PUFRJT05TIH0gZnJvbSAnLi91aS1zd2l0Y2gudG9rZW4nO1xuaW1wb3J0IHsgVWlTd2l0Y2hNb2R1bGVDb25maWcgfSBmcm9tICcuL3VpLXN3aXRjaC5jb25maWcnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmNvbnN0IFVJX1NXSVRDSF9DT05UUk9MX1ZBTFVFX0FDQ0VTU09SOiBhbnkgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBVaVN3aXRjaENvbXBvbmVudCksXG4gIG11bHRpOiB0cnVlLFxufTtcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAndWktc3dpdGNoJyxcbiAgdGVtcGxhdGVVcmw6ICd1aS1zd2l0Y2guY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtVSV9TV0lUQ0hfQ09OVFJPTF9WQUxVRV9BQ0NFU1NPUl0sXG59KVxuZXhwb3J0IGNsYXNzIFVpU3dpdGNoQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgX2NoZWNrZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX2Rpc2FibGVkOiBib29sZWFuO1xuICBwcml2YXRlIF9yZXZlcnNlOiBib29sZWFuO1xuICBwcml2YXRlIF9sb2FkaW5nOiBib29sZWFuO1xuICBwcml2YXRlIF9iZWZvcmVDaGFuZ2U6IFN1YnNjcmlwdGlvbjtcblxuICBASW5wdXQoKSBzaXplO1xuICBASW5wdXQoKSBjb2xvcjtcbiAgQElucHV0KCkgc3dpdGNoT2ZmQ29sb3I7XG4gIEBJbnB1dCgpIHN3aXRjaENvbG9yO1xuICBASW5wdXQoKSBkZWZhdWx0QmdDb2xvcjtcbiAgQElucHV0KCkgZGVmYXVsdEJvQ29sb3I7XG4gIEBJbnB1dCgpIGNoZWNrZWRMYWJlbDtcbiAgQElucHV0KCkgdW5jaGVja2VkTGFiZWw7XG4gIEBJbnB1dCgpIGNoZWNrZWRUZXh0Q29sb3I7XG4gIEBJbnB1dCgpIHVuY2hlY2tlZFRleHRDb2xvcjtcbiAgQElucHV0KCkgYmVmb3JlQ2hhbmdlOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBASW5wdXQoKSBhcmlhTGFiZWw6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBzZXQgY2hlY2tlZCh2OiBib29sZWFuKSB7XG4gICAgdGhpcy5fY2hlY2tlZCA9IHYgIT09IGZhbHNlO1xuICB9XG5cbiAgZ2V0IGNoZWNrZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NoZWNrZWQ7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgZGlzYWJsZWQodjogYm9vbGVhbikge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gdiAhPT0gZmFsc2U7XG4gIH1cblxuICBnZXQgZGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHJldmVyc2UodjogYm9vbGVhbikge1xuICAgIHRoaXMuX3JldmVyc2UgPSB2ICE9PSBmYWxzZTtcbiAgfVxuXG4gIGdldCByZXZlcnNlKCkge1xuICAgIHJldHVybiB0aGlzLl9yZXZlcnNlO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IGxvYWRpbmcodjogYm9vbGVhbikge1xuICAgIHRoaXMuX2xvYWRpbmcgPSB2ICE9PSBmYWxzZTtcbiAgfVxuXG4gIGdldCBsb2FkaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9sb2FkaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIGNoYW5nZWQgdmFsdWVcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICBAT3V0cHV0KCkgY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIC8qKlxuICAgKiBFbWl0cyBET00gZXZlbnRcbiAgICovXG4gIEBPdXRwdXQoKSBjaGFuZ2VFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4oKTtcblxuICAvKipcbiAgICogRW1pdHMgY2hhbmdlZCB2YWx1ZVxuICAgKi9cbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoVUlfU1dJVENIX09QVElPTlMpIEBPcHRpb25hbCgpIGNvbmZpZzogVWlTd2l0Y2hNb2R1bGVDb25maWcgPSB7fSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgdGhpcy5zaXplID0gKGNvbmZpZyAmJiBjb25maWcuc2l6ZSkgfHwgJ21lZGl1bSc7XG4gICAgdGhpcy5jb2xvciA9IGNvbmZpZyAmJiBjb25maWcuY29sb3I7XG4gICAgdGhpcy5zd2l0Y2hPZmZDb2xvciA9IGNvbmZpZyAmJiBjb25maWcuc3dpdGNoT2ZmQ29sb3I7XG4gICAgdGhpcy5zd2l0Y2hDb2xvciA9IGNvbmZpZyAmJiBjb25maWcuc3dpdGNoQ29sb3I7XG4gICAgdGhpcy5kZWZhdWx0QmdDb2xvciA9IGNvbmZpZyAmJiBjb25maWcuZGVmYXVsdEJnQ29sb3I7XG4gICAgdGhpcy5kZWZhdWx0Qm9Db2xvciA9IGNvbmZpZyAmJiBjb25maWcuZGVmYXVsdEJvQ29sb3I7XG4gICAgdGhpcy5jaGVja2VkTGFiZWwgPSBjb25maWcgJiYgY29uZmlnLmNoZWNrZWRMYWJlbDtcbiAgICB0aGlzLnVuY2hlY2tlZExhYmVsID0gY29uZmlnICYmIGNvbmZpZy51bmNoZWNrZWRMYWJlbDtcbiAgICB0aGlzLmNoZWNrZWRUZXh0Q29sb3IgPSBjb25maWcgJiYgY29uZmlnLmNoZWNrZWRUZXh0Q29sb3I7XG4gICAgdGhpcy51bmNoZWNrZWRUZXh0Q29sb3IgPSBjb25maWcgJiYgY29uZmlnLnVuY2hlY2tlZFRleHRDb2xvcjtcbiAgfVxuXG4gIGdldENvbG9yKGZsYWcgPSAnJykge1xuICAgIGlmIChmbGFnID09PSAnYm9yZGVyQ29sb3InKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWZhdWx0Qm9Db2xvcjtcbiAgICB9XG4gICAgaWYgKGZsYWcgPT09ICdzd2l0Y2hDb2xvcicpIHtcbiAgICAgIGlmICh0aGlzLnJldmVyc2UpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmNoZWNrZWQgPyB0aGlzLnN3aXRjaENvbG9yIDogdGhpcy5zd2l0Y2hPZmZDb2xvciB8fCB0aGlzLnN3aXRjaENvbG9yO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuY2hlY2tlZCA/IHRoaXMuc3dpdGNoQ29sb3IgOiB0aGlzLnN3aXRjaE9mZkNvbG9yIHx8IHRoaXMuc3dpdGNoQ29sb3I7XG4gICAgfVxuICAgIGlmIChmbGFnID09PSAnY2hlY2tlZFRleHRDb2xvcicpIHtcbiAgICAgIHJldHVybiB0aGlzLnJldmVyc2UgPyB0aGlzLnVuY2hlY2tlZFRleHRDb2xvciA6IHRoaXMuY2hlY2tlZFRleHRDb2xvcjtcbiAgICB9XG4gICAgaWYgKGZsYWcgPT09ICd1bmNoZWNrZWRUZXh0Q29sb3InKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXZlcnNlID8gdGhpcy5jaGVja2VkVGV4dENvbG9yIDogdGhpcy51bmNoZWNrZWRUZXh0Q29sb3I7XG4gICAgfVxuICAgIGlmICh0aGlzLnJldmVyc2UpIHtcbiAgICAgIHJldHVybiAhdGhpcy5jaGVja2VkID8gdGhpcy5jb2xvciA6IHRoaXMuZGVmYXVsdEJnQ29sb3I7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNoZWNrZWQgPyB0aGlzLmNvbG9yIDogdGhpcy5kZWZhdWx0QmdDb2xvcjtcbiAgfVxuXG4gIGdldExhYmVsQ2xhc3MobGFiZWxUeXBlOiAnY2hlY2tlZCcgfCAndW5jaGVja2VkJyk6IHN0cmluZyB7XG4gICAgY29uc3QgY2hlY2tlZCA9IGxhYmVsVHlwZSA9PT0gKHRoaXMucmV2ZXJzZSA/ICd1bmNoZWNrZWQnIDogJ2NoZWNrZWQnKTtcbiAgICByZXR1cm4gY2hlY2tlZCA/ICdzd2l0Y2gtbGFiZWwtY2hlY2tlZCcgOiAnc3dpdGNoLWxhYmVsLXVuY2hlY2tlZCc7XG4gIH1cblxuICBvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jaGVja2VkID0gIXRoaXMuY2hlY2tlZDtcblxuICAgIC8vIENvbXBvbmVudCBldmVudHNcbiAgICB0aGlzLmNoYW5nZS5lbWl0KHRoaXMuY2hlY2tlZCk7XG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMuY2hlY2tlZCk7XG4gICAgdGhpcy5jaGFuZ2VFdmVudC5lbWl0KGV2ZW50KTtcblxuICAgIC8vIHZhbHVlIGFjY2Vzc29yIGNhbGxiYWNrc1xuICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayh0aGlzLmNoZWNrZWQpO1xuICAgIHRoaXMub25Ub3VjaGVkQ2FsbGJhY2sodGhpcy5jaGVja2VkKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgb25Ub2dnbGUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5iZWZvcmVDaGFuZ2UpIHtcbiAgICAgIHRoaXMuX2JlZm9yZUNoYW5nZSA9IHRoaXMuYmVmb3JlQ2hhbmdlLnN1YnNjcmliZSgoY29uZmlybTogYm9vbGVhbikgPT4ge1xuICAgICAgICBpZiAoY29uZmlybSkge1xuICAgICAgICAgIHRoaXMub25DbGljayhldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9uQ2xpY2soZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAob2JqICE9PSB0aGlzLmNoZWNrZWQpIHtcbiAgICAgIHRoaXMuY2hlY2tlZCA9ICEhb2JqO1xuICAgIH1cblxuICAgIC8vIEFkZGVkIGFzIHBhcnQgb2YgIzI0MyB3aGVuIGNoYW5nZSBkZXRlY3Rpb24gT25QdXNoIGlzIHNldCBmb3IgdGhlXG4gICAgLy8gaG9zdGluZyBjb21wb25lbnRcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2ViY2F0MTIzNDUvbmd4LXVpLXN3aXRjaC9pc3N1ZXMvMjQzXG4gICAgaWYgKHRoaXMuY2RyKSB7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uVG91Y2hlZENhbGxiYWNrID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIHByaXZhdGUgb25Ub3VjaGVkQ2FsbGJhY2sgPSAodjogYW55KSA9PiB7fTtcbiAgcHJpdmF0ZSBvbkNoYW5nZUNhbGxiYWNrID0gKHY6IGFueSkgPT4ge307XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuX2JlZm9yZUNoYW5nZSkge1xuICAgICAgdGhpcy5fYmVmb3JlQ2hhbmdlLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG59XG4iLCI8YnV0dG9uXG4gIHR5cGU9XCJidXR0b25cIlxuICBjbGFzcz1cInN3aXRjaFwiXG4gIHJvbGU9XCJzd2l0Y2hcIlxuICBbYXR0ci5hcmlhLWNoZWNrZWRdPVwicmV2ZXJzZSA/ICFjaGVja2VkIDogY2hlY2tlZFwiXG4gIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCJcbiAgW2NsYXNzLmNoZWNrZWRdPVwicmV2ZXJzZSA/ICFjaGVja2VkIDogY2hlY2tlZFwiXG4gIFtjbGFzcy5kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gIFtjbGFzcy5sb2FkaW5nXT1cImxvYWRpbmdcIlxuICBbY2xhc3Muc3dpdGNoLWxhcmdlXT1cInNpemUgPT09ICdsYXJnZSdcIlxuICBbY2xhc3Muc3dpdGNoLW1lZGl1bV09XCJzaXplID09PSAnbWVkaXVtJ1wiXG4gIFtjbGFzcy5zd2l0Y2gtc21hbGxdPVwic2l6ZSA9PT0gJ3NtYWxsJ1wiXG4gIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImdldENvbG9yKClcIlxuICBbc3R5bGUuYm9yZGVyLWNvbG9yXT1cImdldENvbG9yKCdib3JkZXJDb2xvcicpXCJcbj5cbiAgPGxhYmVsIGNsYXNzPVwic3dpdGNoLXBhbmVcIiAqbmdJZj1cImNoZWNrZWRMYWJlbCB8fCB1bmNoZWNrZWRMYWJlbFwiPlxuICAgIDxzcGFuXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInRoaXMuY2hlY2tlZExhYmVsXCJcbiAgICAgIFtjbGFzc109XCJnZXRMYWJlbENsYXNzKCdjaGVja2VkJylcIlxuICAgICAgW3N0eWxlLmNvbG9yXT1cImdldENvbG9yKCdjaGVja2VkVGV4dENvbG9yJylcIlxuICAgICAgPnt7IHRoaXMuY2hlY2tlZExhYmVsIH19PC9zcGFuXG4gICAgPlxuICAgIDxzcGFuXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInRoaXMudW5jaGVja2VkTGFiZWxcIlxuICAgICAgW2NsYXNzXT1cImdldExhYmVsQ2xhc3MoJ3VuY2hlY2tlZCcpXCJcbiAgICAgIFtzdHlsZS5jb2xvcl09XCJnZXRDb2xvcigndW5jaGVja2VkVGV4dENvbG9yJylcIlxuICAgICAgPnt7IHRoaXMudW5jaGVja2VkTGFiZWwgfX08L3NwYW5cbiAgICA+XG4gIDwvbGFiZWw+XG4gIDxzbWFsbCBbc3R5bGUuYmFja2dyb3VuZF09XCJnZXRDb2xvcignc3dpdGNoQ29sb3InKVwiPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgPC9zbWFsbD5cbjwvYnV0dG9uPlxuIl19