ngx-form-control
Version:
Form controls for angular 6
158 lines (154 loc) • 14.7 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Component, Input } from '@angular/core';
import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
import { BaseControlComponent } from '../../utils/base-control.component';
export class FormToggleComponent extends BaseControlComponent {
constructor() {
super(...arguments);
this.type = 'checkbox';
this._innerValue = false;
this._isTouch = false;
}
/**
* @return {?}
*/
get value() {
return this._innerValue;
}
/**
* @param {?} value
* @return {?}
*/
set value(value) {
this._isTouch = true;
this._innerValue = value;
this.triggerChange();
}
/**
* @return {?}
*/
get invalid() {
if (this.hasCustomError) {
return true;
}
if (!this._isTouch) {
return false;
}
return this.hasRequiredError;
}
/**
* @return {?}
*/
get valid() {
if (this.hasCustomError) {
return false;
}
if (!this._isTouch) {
return false;
}
return !this.hasRequiredError;
}
/**
* @return {?}
*/
get errorMessages() {
if (this.hasRequiredError) {
return [this.requiredErrorMessage];
}
if (this.hasCustomError) {
return this.innerCustomErrorMessages;
}
}
/**
* @return {?}
*/
get isCheckboxType() {
return 'checkbox' === this.type;
}
/**
* @return {?}
*/
get isToggleType() {
return !this.isCheckboxType;
}
/**
* @param {?} value
* @return {?}
*/
writeValue(value) {
this._innerValue = value;
}
/**
* @return {?}
*/
validate() {
/** @type {?} */
const result = {};
if (this.hasRequiredError) {
result['required'] = true;
}
return result;
}
/**
* @return {?}
*/
reset() {
this._isTouch = false;
}
}
FormToggleComponent.decorators = [
{ type: Component, args: [{
selector: 'ngx-form-toggle',
template: `<div class="custom-checkbox" [ngClass]="{'custom-control': isCheckboxType}">
<ng-container *ngIf="isCheckboxType">
<!--suppress HtmlFormInputWithoutLabel -->
<input class="custom-control-input"
[title]="title"
[ngClass]="{'is-invalid': invalid, 'is-valid': valid}"
type="checkbox"
[id]="id"
[required]="required"
[(ngModel)]="value">
<label class="custom-control-label" [for]="id">{{label}}</label>
</ng-container>
<ng-container *ngIf="isToggleType">
<input class="custom-control-input tgl tgl-light"
[title]="title"
[ngClass]="{'is-invalid': invalid, 'is-valid': valid}"
type="checkbox"
[id]="id"
[required]="required"
[(ngModel)]="value">
<label class="tgl-btn" [for]="id"></label>
<label class="tgl-label" [for]="id" *ngIf="label">{{label}}</label>
</ng-container>
<div class="valid-feedback" *ngIf="valid && validMessage">{{validMessage}}</div>
<div class="invalid-feedback" *ngIf="errorMessages && errorMessages.length">
<span *ngFor="let message of errorMessages; let last = last;">
{{message}}<br *ngIf="!last">
</span>
</div>
</div>
`,
styles: [`.tgl{display:none}.tgl,.tgl *,.tgl :after,.tgl :before,.tgl+.tgl-btn,.tgl:after,.tgl:before{box-sizing:border-box}.tgl ::-moz-selection,.tgl :after::-moz-selection,.tgl :before::-moz-selection,.tgl+.tgl-btn::-moz-selection,.tgl::-moz-selection,.tgl:after::-moz-selection,.tgl:before::-moz-selection{background:0 0}.tgl ::selection,.tgl :after::selection,.tgl :before::selection,.tgl+.tgl-btn::selection,.tgl::selection,.tgl:after::selection,.tgl:before::selection{background:0 0}.tgl+.tgl-btn{outline:0;display:inline-block;vertical-align:middle;margin-right:15px;width:4em;height:2em;position:relative;cursor:pointer;margin-bottom:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tgl+.tgl-btn:after,.tgl+.tgl-btn:before{position:relative;display:block;content:"";width:50%;height:100%}.tgl+.tgl-btn:after{left:0}.tgl+.tgl-btn:before{display:none}.tgl:checked+.tgl-btn:after{left:50%}.tgl-light+.tgl-btn{background:#f0f0f0;border-radius:2em;padding:2px;transition:all .4s ease}.tgl-light+.tgl-btn:after{border-radius:50%;background:#fff;transition:all .2s ease}.tgl-light:checked+.tgl-btn{background:#9fd6ae}.custom-control-input~.tgl-label{margin-bottom:0;vertical-align:middle}.custom-control-input.is-invalid~.tgl-label{color:#dc3545}.custom-control-input.is-valid~.tgl-label{color:#28a745}`],
providers: [
{ provide: NG_VALUE_ACCESSOR, useExisting: FormToggleComponent, multi: true },
{ provide: NG_VALIDATORS, useExisting: FormToggleComponent, multi: true }
]
},] },
];
FormToggleComponent.propDecorators = {
type: [{ type: Input }]
};
if (false) {
/** @type {?} */
FormToggleComponent.prototype.type;
/** @type {?} */
FormToggleComponent.prototype._innerValue;
/** @type {?} */
FormToggleComponent.prototype._isTouch;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS10b2dnbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWZvcm0tY29udHJvbC8iLCJzb3VyY2VzIjpbImxpYi9mb3JtLXRvZ2dsZS9mb3JtLXRvZ2dsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBQyxhQUFhLEVBQUUsaUJBQWlCLEVBQW1CLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEYsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUE0Q3hFLE1BQU0sMEJBQTJCLFNBQVEsb0JBQW9COzs7b0JBRXBCLFVBQVU7MkJBQzNCLEtBQUs7d0JBQ1IsS0FBSzs7Ozs7SUFFeEIsSUFBSSxLQUFLO1FBQ1AsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7S0FDekI7Ozs7O0lBRUQsSUFBSSxLQUFLLENBQUMsS0FBYztRQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7S0FDdEI7Ozs7SUFFRCxJQUFJLE9BQU87UUFDVCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztZQUN4QixNQUFNLENBQUMsSUFBSSxDQUFDO1NBQ2I7UUFFRCxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ25CLE1BQU0sQ0FBQyxLQUFLLENBQUM7U0FDZDtRQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7S0FDOUI7Ozs7SUFFRCxJQUFJLEtBQUs7UUFDUCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztZQUN4QixNQUFNLENBQUMsS0FBSyxDQUFDO1NBQ2Q7UUFFRCxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ25CLE1BQU0sQ0FBQyxLQUFLLENBQUM7U0FDZDtRQUVELE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztLQUMvQjs7OztJQUVELElBQUksYUFBYTtRQUNmLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7WUFDMUIsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7U0FDcEM7UUFFRCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztZQUN4QixNQUFNLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDO1NBQ3RDO0tBQ0Y7Ozs7SUFFRCxJQUFJLGNBQWM7UUFDaEIsTUFBTSxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDO0tBQ2pDOzs7O0lBRUQsSUFBSSxZQUFZO1FBQ2QsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztLQUM3Qjs7Ozs7SUFFRCxVQUFVLENBQUMsS0FBYztRQUN2QixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztLQUMxQjs7OztJQUVELFFBQVE7O1FBQ04sTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBRWxCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7WUFDMUIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQztTQUMzQjtRQUVELE1BQU0sQ0FBQyxNQUFNLENBQUM7S0FDZjs7OztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztLQUN2Qjs7O1lBcEhGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsaUJBQWlCO2dCQUMzQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQWlDWDtnQkFDQyxNQUFNLEVBQUUsQ0FBQyxzekNBQXN6QyxDQUFDO2dCQUNoMEMsU0FBUyxFQUFFO29CQUNULEVBQUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFDO29CQUMzRSxFQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUM7aUJBQ3hFO2FBQ0Y7OzttQkFHRSxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIElucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiwgVmFsaWRhdGlvbkVycm9yc30gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge0Jhc2VDb250cm9sQ29tcG9uZW50fSBmcm9tICcuLi8uLi91dGlscy9iYXNlLWNvbnRyb2wuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbmd4LWZvcm0tdG9nZ2xlJyxcclxuICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJjdXN0b20tY2hlY2tib3hcIiBbbmdDbGFzc109XCJ7J2N1c3RvbS1jb250cm9sJzogaXNDaGVja2JveFR5cGV9XCI+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzQ2hlY2tib3hUeXBlXCI+XHJcbiAgICA8IS0tc3VwcHJlc3MgSHRtbEZvcm1JbnB1dFdpdGhvdXRMYWJlbCAtLT5cclxuICAgIDxpbnB1dCBjbGFzcz1cImN1c3RvbS1jb250cm9sLWlucHV0XCJcclxuICAgICAgICAgICBbdGl0bGVdPVwidGl0bGVcIlxyXG4gICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaXMtaW52YWxpZCc6IGludmFsaWQsICdpcy12YWxpZCc6IHZhbGlkfVwiXHJcbiAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICBbaWRdPVwiaWRcIlxyXG4gICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXHJcbiAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiPlxyXG4gICAgPGxhYmVsIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtbGFiZWxcIiBbZm9yXT1cImlkXCI+e3tsYWJlbH19PC9sYWJlbD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzVG9nZ2xlVHlwZVwiPlxyXG4gICAgPGlucHV0IGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXQgdGdsIHRnbC1saWdodFwiXHJcbiAgICAgICAgICAgW3RpdGxlXT1cInRpdGxlXCJcclxuICAgICAgICAgICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnOiBpbnZhbGlkLCAnaXMtdmFsaWQnOiB2YWxpZH1cIlxyXG4gICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgW2lkXT1cImlkXCJcclxuICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxyXG4gICAgICAgICAgIFsobmdNb2RlbCldPVwidmFsdWVcIj5cclxuICAgIDxsYWJlbCBjbGFzcz1cInRnbC1idG5cIiBbZm9yXT1cImlkXCI+PC9sYWJlbD5cclxuICAgIDxsYWJlbCBjbGFzcz1cInRnbC1sYWJlbFwiIFtmb3JdPVwiaWRcIiAqbmdJZj1cImxhYmVsXCI+e3tsYWJlbH19PC9sYWJlbD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cInZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJ2YWxpZCAmJiB2YWxpZE1lc3NhZ2VcIj57e3ZhbGlkTWVzc2FnZX19PC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJlcnJvck1lc3NhZ2VzICYmIGVycm9yTWVzc2FnZXMubGVuZ3RoXCI+XHJcbiAgICA8c3BhbiAqbmdGb3I9XCJsZXQgbWVzc2FnZSBvZiBlcnJvck1lc3NhZ2VzOyBsZXQgbGFzdCA9IGxhc3Q7XCI+XHJcbiAgICAgIHt7bWVzc2FnZX19PGJyICpuZ0lmPVwiIWxhc3RcIj5cclxuICAgIDwvc3Bhbj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbmAsXHJcbiAgc3R5bGVzOiBbYC50Z2x7ZGlzcGxheTpub25lfS50Z2wsLnRnbCAqLC50Z2wgOmFmdGVyLC50Z2wgOmJlZm9yZSwudGdsKy50Z2wtYnRuLC50Z2w6YWZ0ZXIsLnRnbDpiZWZvcmV7Ym94LXNpemluZzpib3JkZXItYm94fS50Z2wgOjotbW96LXNlbGVjdGlvbiwudGdsIDphZnRlcjo6LW1vei1zZWxlY3Rpb24sLnRnbCA6YmVmb3JlOjotbW96LXNlbGVjdGlvbiwudGdsKy50Z2wtYnRuOjotbW96LXNlbGVjdGlvbiwudGdsOjotbW96LXNlbGVjdGlvbiwudGdsOmFmdGVyOjotbW96LXNlbGVjdGlvbiwudGdsOmJlZm9yZTo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZDowIDB9LnRnbCA6OnNlbGVjdGlvbiwudGdsIDphZnRlcjo6c2VsZWN0aW9uLC50Z2wgOmJlZm9yZTo6c2VsZWN0aW9uLC50Z2wrLnRnbC1idG46OnNlbGVjdGlvbiwudGdsOjpzZWxlY3Rpb24sLnRnbDphZnRlcjo6c2VsZWN0aW9uLC50Z2w6YmVmb3JlOjpzZWxlY3Rpb257YmFja2dyb3VuZDowIDB9LnRnbCsudGdsLWJ0bntvdXRsaW5lOjA7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlO21hcmdpbi1yaWdodDoxNXB4O3dpZHRoOjRlbTtoZWlnaHQ6MmVtO3Bvc2l0aW9uOnJlbGF0aXZlO2N1cnNvcjpwb2ludGVyO21hcmdpbi1ib3R0b206MDstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LnRnbCsudGdsLWJ0bjphZnRlciwudGdsKy50Z2wtYnRuOmJlZm9yZXtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO2NvbnRlbnQ6XCJcIjt3aWR0aDo1MCU7aGVpZ2h0OjEwMCV9LnRnbCsudGdsLWJ0bjphZnRlcntsZWZ0OjB9LnRnbCsudGdsLWJ0bjpiZWZvcmV7ZGlzcGxheTpub25lfS50Z2w6Y2hlY2tlZCsudGdsLWJ0bjphZnRlcntsZWZ0OjUwJX0udGdsLWxpZ2h0Ky50Z2wtYnRue2JhY2tncm91bmQ6I2YwZjBmMDtib3JkZXItcmFkaXVzOjJlbTtwYWRkaW5nOjJweDt0cmFuc2l0aW9uOmFsbCAuNHMgZWFzZX0udGdsLWxpZ2h0Ky50Z2wtYnRuOmFmdGVye2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQ6I2ZmZjt0cmFuc2l0aW9uOmFsbCAuMnMgZWFzZX0udGdsLWxpZ2h0OmNoZWNrZWQrLnRnbC1idG57YmFja2dyb3VuZDojOWZkNmFlfS5jdXN0b20tY29udHJvbC1pbnB1dH4udGdsLWxhYmVse21hcmdpbi1ib3R0b206MDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmN1c3RvbS1jb250cm9sLWlucHV0LmlzLWludmFsaWR+LnRnbC1sYWJlbHtjb2xvcjojZGMzNTQ1fS5jdXN0b20tY29udHJvbC1pbnB1dC5pcy12YWxpZH4udGdsLWxhYmVse2NvbG9yOiMyOGE3NDV9YF0sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7cHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBGb3JtVG9nZ2xlQ29tcG9uZW50LCBtdWx0aTogdHJ1ZX0sXHJcbiAgICB7cHJvdmlkZTogTkdfVkFMSURBVE9SUywgdXNlRXhpc3Rpbmc6IEZvcm1Ub2dnbGVDb21wb25lbnQsIG11bHRpOiB0cnVlfVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEZvcm1Ub2dnbGVDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29udHJvbENvbXBvbmVudCB7XHJcblxyXG4gIEBJbnB1dCgpIHR5cGU6ICdjaGVja2JveCcgfCAndG9nZ2xlJyA9ICdjaGVja2JveCc7XHJcbiAgcHJpdmF0ZSBfaW5uZXJWYWx1ZSA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2lzVG91Y2ggPSBmYWxzZTtcclxuXHJcbiAgZ2V0IHZhbHVlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lubmVyVmFsdWU7XHJcbiAgfVxyXG5cclxuICBzZXQgdmFsdWUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2lzVG91Y2ggPSB0cnVlO1xyXG4gICAgdGhpcy5faW5uZXJWYWx1ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy50cmlnZ2VyQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaW52YWxpZCgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLmhhc0N1c3RvbUVycm9yKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5faXNUb3VjaCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaGFzUmVxdWlyZWRFcnJvcjtcclxuICB9XHJcblxyXG4gIGdldCB2YWxpZCgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLmhhc0N1c3RvbUVycm9yKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuX2lzVG91Y2gpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAhdGhpcy5oYXNSZXF1aXJlZEVycm9yO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGVycm9yTWVzc2FnZXMoKTogQXJyYXk8c3RyaW5nPiB7XHJcbiAgICBpZiAodGhpcy5oYXNSZXF1aXJlZEVycm9yKSB7XHJcbiAgICAgIHJldHVybiBbdGhpcy5yZXF1aXJlZEVycm9yTWVzc2FnZV07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaGFzQ3VzdG9tRXJyb3IpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaW5uZXJDdXN0b21FcnJvck1lc3NhZ2VzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGlzQ2hlY2tib3hUeXBlKCkge1xyXG4gICAgcmV0dXJuICdjaGVja2JveCcgPT09IHRoaXMudHlwZTtcclxuICB9XHJcblxyXG4gIGdldCBpc1RvZ2dsZVR5cGUoKSB7XHJcbiAgICByZXR1cm4gIXRoaXMuaXNDaGVja2JveFR5cGU7XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLl9pbm5lclZhbHVlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZSgpOiBWYWxpZGF0aW9uRXJyb3JzIHtcclxuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuICAgIGlmICh0aGlzLmhhc1JlcXVpcmVkRXJyb3IpIHtcclxuICAgICAgcmVzdWx0WydyZXF1aXJlZCddID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICB0aGlzLl9pc1RvdWNoID0gZmFsc2U7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=