ngx-materialize
Version:
An Angular wrap around Materialize library
326 lines (325 loc) • 27.7 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Directive, ElementRef, Input, Optional, Renderer } from '@angular/core';
import { NgControl } from '@angular/forms';
import { interval } from 'rxjs';
import { first, skipWhile } from 'rxjs/operators';
import { HandlePropChanges } from '../shared/index';
var MzInputDirective = /** @class */ (function (_super) {
tslib_1.__extends(MzInputDirective, _super);
function MzInputDirective(ngControl, elementRef, renderer) {
var _this = _super.call(this) || this;
_this.ngControl = ngControl;
_this.elementRef = elementRef;
_this.renderer = renderer;
return _this;
}
/**
* @return {?}
*/
MzInputDirective.prototype.ngOnInit = /**
* @return {?}
*/
function () {
this.initHandlers();
this.initElements();
this.initInputSubscription();
this.handleProperties();
};
/**
* @return {?}
*/
MzInputDirective.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
if (this.inputValueSubscription) {
this.inputValueSubscription.unsubscribe();
}
};
/**
* @return {?}
*/
MzInputDirective.prototype.initHandlers = /**
* @return {?}
*/
function () {
var _this = this;
this.handlers = {
autocomplete: function () { return _this.handleAutocomplete(); },
dataError: function () { return _this.handleDataError(); },
dataSuccess: function () { return _this.handleDataSuccess(); },
label: function () { return _this.handleLabel(); },
length: function () { return _this.handleLength(); },
placeholder: function () { return _this.handlePlaceholder(); },
validate: function () { return _this.handleValidate(); },
};
};
/**
* @return {?}
*/
MzInputDirective.prototype.initElements = /**
* @return {?}
*/
function () {
this.inputElement = $(this.elementRef.nativeElement);
this.inputContainerElement = $(this.elementRef.nativeElement).parent('.input-field');
this.labelElement = this.createLabelElement();
};
/**
* @return {?}
*/
MzInputDirective.prototype.initInputSubscription = /**
* @return {?}
*/
function () {
var _this = this;
if (this.ngControl) {
this.inputValueSubscription = this.ngControl.valueChanges.subscribe(function () { return _this.setLabelActive(); });
}
};
/**
* @return {?}
*/
MzInputDirective.prototype.createLabelElement = /**
* @return {?}
*/
function () {
var /** @type {?} */ labelElement = document.createElement('label');
labelElement.setAttribute('for', this.id);
this.renderer.invokeElementMethod(this.inputElement, 'after', [labelElement]);
return $(labelElement);
};
/**
* @return {?}
*/
MzInputDirective.prototype.handleProperties = /**
* @return {?}
*/
function () {
if (this.inputContainerElement.length === 0) {
console.error('Input with mz-input directive must be placed inside an [mz-input-container] tag', this.inputElement);
return;
}
_super.prototype.executePropHandlers.call(this);
};
/**
* @return {?}
*/
MzInputDirective.prototype.handleAutocomplete = /**
* @return {?}
*/
function () {
var _this = this;
var /** @type {?} */ isAutocomplete = this.autocomplete != null
&& this.autocomplete.data != null
&& Object.keys(this.autocomplete.data).length > 0;
this.renderer.setElementClass(this.inputElement[0], 'autocomplete', isAutocomplete);
if (this.autocomplete != null) {
// wait until autocomplete is defined before to invoke
// see issue: https://github.com/Dogfalo/materialize/issues/4401
interval(100)
.pipe(skipWhile(function () { return !_this.inputElement['autocomplete']; }), first())
.subscribe(function () { return _this.renderer.invokeElementMethod(_this.inputElement, 'autocomplete', [_this.autocomplete]); });
}
};
/**
* @return {?}
*/
MzInputDirective.prototype.handleDataError = /**
* @return {?}
*/
function () {
this.renderer.setElementAttribute(this.labelElement[0], 'data-error', this.dataError);
};
/**
* @return {?}
*/
MzInputDirective.prototype.handleDataSuccess = /**
* @return {?}
*/
function () {
this.renderer.setElementAttribute(this.labelElement[0], 'data-success', this.dataSuccess);
};
/**
* @return {?}
*/
MzInputDirective.prototype.handleLabel = /**
* @return {?}
*/
function () {
this.renderer.invokeElementMethod(this.labelElement, 'text', [this.label]);
};
/**
* @return {?}
*/
MzInputDirective.prototype.handleLength = /**
* @return {?}
*/
function () {
var /** @type {?} */ length = this.length ? this.length.toString() : null;
this.renderer.setElementAttribute(this.inputElement[0], 'data-length', length);
if (length) {
this.setCharacterCount();
}
else {
this.removeCharacterCount();
}
};
/**
* @return {?}
*/
MzInputDirective.prototype.handlePlaceholder = /**
* @return {?}
*/
function () {
var _this = this;
var /** @type {?} */ placeholder = !!this.placeholder ? this.placeholder : null;
this.renderer.setElementAttribute(this.inputElement[0], 'placeholder', placeholder);
// fix issue in IE where having a placeholder on input make control dirty
// note that it still trigger validation on focus but this is better than nothing
// issue : https://github.com/angular/angular/issues/15299
// workaround : https://stackoverflow.com/a/44967245/5583283
if (this.ngControl) {
setTimeout(function () { return _this.ngControl.control.markAsPristine(); });
}
this.setLabelActive();
};
/**
* @return {?}
*/
MzInputDirective.prototype.handleValidate = /**
* @return {?}
*/
function () {
this.renderer.setElementClass(this.inputElement[0], 'validate', this.validate);
if (this.validate) {
// force validation
this.renderer.invokeElementMethod(this.inputElement, 'trigger', ['blur']);
}
else {
this.removeValidationClasses();
}
};
/**
* @return {?}
*/
MzInputDirective.prototype.setCharacterCount = /**
* @return {?}
*/
function () {
var _this = this;
this.renderer.invokeElementMethod(this.inputElement, 'characterCounter');
// force validation
// need setTimeout otherwise it wont trigger validation right away
setTimeout(function () {
_this.renderer.invokeElementMethod(_this.inputElement, 'trigger', ['input']);
_this.renderer.invokeElementMethod(_this.inputElement, 'trigger', ['blur']);
});
};
/**
* @return {?}
*/
MzInputDirective.prototype.setLabelActive = /**
* @return {?}
*/
function () {
var _this = this;
// need setTimeout otherwise it wont make label float in some circonstances
// for example: forcing validation for example, reseting form programmaticaly, ...
setTimeout(function () {
var /** @type {?} */ inputValue = (/** @type {?} */ (_this.inputElement[0])).value;
var /** @type {?} */ isActive = !!_this.placeholder || !!inputValue;
_this.renderer.setElementClass(_this.labelElement[0], 'active', isActive);
});
};
/**
* @return {?}
*/
MzInputDirective.prototype.removeCharacterCount = /**
* @return {?}
*/
function () {
this.renderer.invokeElementMethod(this.inputElement.siblings('.character-counter'), 'remove');
this.removeValidationClasses();
};
/**
* @return {?}
*/
MzInputDirective.prototype.removeValidationClasses = /**
* @return {?}
*/
function () {
// reset valid/invalid state
this.renderer.setElementClass(this.inputElement[0], 'invalid', false);
this.renderer.setElementClass(this.inputElement[0], 'valid', false);
};
MzInputDirective.decorators = [
{ type: Directive, args: [{
selector: 'input[mzInput], input[mz-input]',
},] },
];
/** @nocollapse */
MzInputDirective.ctorParameters = function () { return [
{ type: NgControl, decorators: [{ type: Optional },] },
{ type: ElementRef, },
{ type: Renderer, },
]; };
MzInputDirective.propDecorators = {
"id": [{ type: Input },],
"placeholder": [{ type: Input },],
"autocomplete": [{ type: Input },],
"dataError": [{ type: Input },],
"dataSuccess": [{ type: Input },],
"label": [{ type: Input },],
"length": [{ type: Input },],
"validate": [{ type: Input },],
};
return MzInputDirective;
}(HandlePropChanges));
export { MzInputDirective };
function MzInputDirective_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
MzInputDirective.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
MzInputDirective.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
MzInputDirective.propDecorators;
/** @type {?} */
MzInputDirective.prototype.id;
/** @type {?} */
MzInputDirective.prototype.placeholder;
/** @type {?} */
MzInputDirective.prototype.autocomplete;
/** @type {?} */
MzInputDirective.prototype.dataError;
/** @type {?} */
MzInputDirective.prototype.dataSuccess;
/** @type {?} */
MzInputDirective.prototype.label;
/** @type {?} */
MzInputDirective.prototype.length;
/** @type {?} */
MzInputDirective.prototype.validate;
/** @type {?} */
MzInputDirective.prototype.inputElement;
/** @type {?} */
MzInputDirective.prototype.inputContainerElement;
/** @type {?} */
MzInputDirective.prototype.inputValueSubscription;
/** @type {?} */
MzInputDirective.prototype.labelElement;
/** @type {?} */
MzInputDirective.prototype.ngControl;
/** @type {?} */
MzInputDirective.prototype.elementRef;
/** @type {?} */
MzInputDirective.prototype.renderer;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LW1hdGVyaWFsaXplLyIsInNvdXJjZXMiOlsic3JjL2lucHV0L2lucHV0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBcUIsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFFBQVEsRUFBNEIsTUFBTSxNQUFNLENBQUM7QUFDMUQsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7SUFLZCw0Q0FBaUI7SUFrQnJELDBCQUNzQixXQUNaLFlBQ0E7UUFIVixZQUtFLGlCQUFPLFNBQ1I7UUFMcUIsZUFBUyxHQUFULFNBQVM7UUFDckIsZ0JBQVUsR0FBVixVQUFVO1FBQ1YsY0FBUSxHQUFSLFFBQVE7O0tBR2pCOzs7O0lBRUQsbUNBQVE7OztJQUFSO1FBQ0UsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztLQUN6Qjs7OztJQUVELHNDQUFXOzs7SUFBWDtRQUNFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQzNDO0tBQ0Y7Ozs7SUFFRCx1Q0FBWTs7O0lBQVo7UUFBQSxpQkFVQztRQVRDLElBQUksQ0FBQyxRQUFRLEdBQUc7WUFDZCxZQUFZLEVBQUUsY0FBTSxP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QUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQ3JFOztnQkF2TEYsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxpQ0FBaUM7aUJBQzVDOzs7O2dCQVJRLFNBQVMsdUJBNEJiLFFBQVE7Z0JBN0JPLFVBQVU7Z0JBQXNDLFFBQVE7Ozt1QkFZekUsS0FBSztnQ0FDTCxLQUFLO2lDQUdMLEtBQUs7OEJBQ0wsS0FBSztnQ0FDTCxLQUFLOzBCQUNMLEtBQUs7MkJBQ0wsS0FBSzs2QkFDTCxLQUFLOzsyQkFyQlI7RUFVc0MsaUJBQWlCO1NBQTFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbCwgUmVuZGVyZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBpbnRlcnZhbCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGZpcnN0LCBza2lwV2hpbGUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBIYW5kbGVQcm9wQ2hhbmdlcyB9IGZyb20gJy4uL3NoYXJlZC9pbmRleCc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ2lucHV0W216SW5wdXRdLCBpbnB1dFttei1pbnB1dF0nLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTXpJbnB1dERpcmVjdGl2ZSBleHRlbmRzIEhhbmRsZVByb3BDaGFuZ2VzIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIC8vIG5hdGl2ZSBwcm9wZXJ0aWVzXHJcbiAgQElucHV0KCkgaWQ6IHN0cmluZztcclxuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xyXG5cclxuICAvLyBkaXJlY3RpdmUgcHJvcGVydGllc1xyXG4gIEBJbnB1dCgpIGF1dG9jb21wbGV0ZTogeyBkYXRhOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IH07XHJcbiAgQElucHV0KCkgZGF0YUVycm9yOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZGF0YVN1Y2Nlc3M6IHN0cmluZztcclxuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGxlbmd0aDogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHZhbGlkYXRlOiBib29sZWFuO1xyXG5cclxuICBpbnB1dEVsZW1lbnQ6IEpRdWVyeTtcclxuICBpbnB1dENvbnRhaW5lckVsZW1lbnQ6IEpRdWVyeTtcclxuICBpbnB1dFZhbHVlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgbGFiZWxFbGVtZW50OiBKUXVlcnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcclxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyLFxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5pbml0SGFuZGxlcnMoKTtcclxuICAgIHRoaXMuaW5pdEVsZW1lbnRzKCk7XHJcbiAgICB0aGlzLmluaXRJbnB1dFN1YnNjcmlwdGlvbigpO1xyXG4gICAgdGhpcy5oYW5kbGVQcm9wZXJ0aWVzKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLmlucHV0VmFsdWVTdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5pbnB1dFZhbHVlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0SGFuZGxlcnMoKSB7XHJcbiAgICB0aGlzLmhhbmRsZXJzID0ge1xyXG4gICAgICBhdXRvY29tcGxldGU6ICgpID0+IHRoaXMuaGFuZGxlQXV0b2NvbXBsZXRlKCksXHJcbiAgICAgIGRhdGFFcnJvcjogKCkgPT4gdGhpcy5oYW5kbGVEYXRhRXJyb3IoKSxcclxuICAgICAgZGF0YVN1Y2Nlc3M6ICgpID0+IHRoaXMuaGFuZGxlRGF0YVN1Y2Nlc3MoKSxcclxuICAgICAgbGFiZWw6ICgpID0+IHRoaXMuaGFuZGxlTGFiZWwoKSxcclxuICAgICAgbGVuZ3RoOiAoKSA9PiB0aGlzLmhhbmRsZUxlbmd0aCgpLFxyXG4gICAgICBwbGFjZWhvbGRlcjogKCkgPT4gdGhpcy5oYW5kbGVQbGFjZWhvbGRlcigpLFxyXG4gICAgICB2YWxpZGF0ZTogKCkgPT4gdGhpcy5oYW5kbGVWYWxpZGF0ZSgpLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGluaXRFbGVtZW50cygpIHtcclxuICAgIHRoaXMuaW5wdXRFbGVtZW50ID0gJCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XHJcbiAgICB0aGlzLmlucHV0Q29udGFpbmVyRWxlbWVudCA9ICQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLnBhcmVudCgnLmlucHV0LWZpZWxkJyk7XHJcbiAgICB0aGlzLmxhYmVsRWxlbWVudCA9IHRoaXMuY3JlYXRlTGFiZWxFbGVtZW50KCk7XHJcbiAgfVxyXG5cclxuICBpbml0SW5wdXRTdWJzY3JpcHRpb24oKSB7XHJcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wpIHtcclxuICAgICAgdGhpcy5pbnB1dFZhbHVlU3Vic2NyaXB0aW9uID0gdGhpcy5uZ0NvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLnNldExhYmVsQWN0aXZlKCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY3JlYXRlTGFiZWxFbGVtZW50KCkge1xyXG4gICAgY29uc3QgbGFiZWxFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGFiZWwnKTtcclxuICAgIGxhYmVsRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2ZvcicsIHRoaXMuaWQpO1xyXG5cclxuICAgIHRoaXMucmVuZGVyZXIuaW52b2tlRWxlbWVudE1ldGhvZCh0aGlzLmlucHV0RWxlbWVudCwgJ2FmdGVyJywgW2xhYmVsRWxlbWVudF0pO1xyXG5cclxuICAgIHJldHVybiAkKGxhYmVsRWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVQcm9wZXJ0aWVzKCkge1xyXG4gICAgaWYgKHRoaXMuaW5wdXRDb250YWluZXJFbGVtZW50Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdJbnB1dCB3aXRoIG16LWlucHV0IGRpcmVjdGl2ZSBtdXN0IGJlIHBsYWNlZCBpbnNpZGUgYW4gW216LWlucHV0LWNvbnRhaW5lcl0gdGFnJywgdGhpcy5pbnB1dEVsZW1lbnQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgc3VwZXIuZXhlY3V0ZVByb3BIYW5kbGVycygpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlQXV0b2NvbXBsZXRlKCkge1xyXG4gICAgY29uc3QgaXNBdXRvY29tcGxldGUgPSB0aGlzLmF1dG9jb21wbGV0ZSAhPSBudWxsXHJcbiAgICAgICYmIHRoaXMuYXV0b2NvbXBsZXRlLmRhdGEgIT0gbnVsbFxyXG4gICAgICAmJiBPYmplY3Qua2V5cyh0aGlzLmF1dG9jb21wbGV0ZS5kYXRhKS5sZW5ndGggPiAwO1xyXG5cclxuICAgIHRoaXMucmVuZGVyZXIuc2V0RWxlbWVudENsYXNzKHRoaXMuaW5wdXRFbGVtZW50WzBdLCAnYXV0b2NvbXBsZXRlJywgaXNBdXRvY29tcGxldGUpO1xyXG5cclxuICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZSAhPSBudWxsKSB7XHJcbiAgICAgIC8vIHdhaXQgdW50aWwgYXV0b2NvbXBsZXRlIGlzIGRlZmluZWQgYmVmb3JlIHRvIGludm9rZVxyXG4gICAgICAvLyBzZWUgaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9Eb2dmYWxvL21hdGVyaWFsaXplL2lzc3Vlcy80NDAxXHJcbiAgICAgIGludGVydmFsKDEwMClcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIHNraXBXaGlsZSgoKSA9PiAhdGhpcy5pbnB1dEVsZW1lbnRbJ2F1dG9jb21wbGV0ZSddKSxcclxuICAgICAgICAgIGZpcnN0KCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJlbmRlcmVyLmludm9rZUVsZW1lbnRNZXRob2QodGhpcy5pbnB1dEVsZW1lbnQsICdhdXRvY29tcGxldGUnLCBbdGhpcy5hdXRvY29tcGxldGVdKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVEYXRhRXJyb3IoKSB7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldEVsZW1lbnRBdHRyaWJ1dGUodGhpcy5sYWJlbEVsZW1lbnRbMF0sICdkYXRhLWVycm9yJywgdGhpcy5kYXRhRXJyb3IpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlRGF0YVN1Y2Nlc3MoKSB7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldEVsZW1lbnRBdHRyaWJ1dGUodGhpcy5sYWJlbEVsZW1lbnRbMF0sICdkYXRhLXN1Y2Nlc3MnLCB0aGlzLmRhdGFTdWNjZXNzKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUxhYmVsKCkge1xyXG4gICAgdGhpcy5yZW5kZXJlci5pbnZva2VFbGVtZW50TWV0aG9kKHRoaXMubGFiZWxFbGVtZW50LCAndGV4dCcsIFt0aGlzLmxhYmVsXSk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVMZW5ndGgoKSB7XHJcbiAgICBjb25zdCBsZW5ndGggPSB0aGlzLmxlbmd0aCA/IHRoaXMubGVuZ3RoLnRvU3RyaW5nKCkgOiBudWxsO1xyXG5cclxuICAgIHRoaXMucmVuZGVyZXIuc2V0RWxlbWVudEF0dHJpYnV0ZSh0aGlzLmlucHV0RWxlbWVudFswXSwgJ2RhdGEtbGVuZ3RoJywgbGVuZ3RoKTtcclxuXHJcbiAgICBpZiAobGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuc2V0Q2hhcmFjdGVyQ291bnQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucmVtb3ZlQ2hhcmFjdGVyQ291bnQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZVBsYWNlaG9sZGVyKCkge1xyXG4gICAgY29uc3QgcGxhY2Vob2xkZXIgPSAhIXRoaXMucGxhY2Vob2xkZXIgPyB0aGlzLnBsYWNlaG9sZGVyIDogbnVsbDtcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0RWxlbWVudEF0dHJpYnV0ZSh0aGlzLmlucHV0RWxlbWVudFswXSwgJ3BsYWNlaG9sZGVyJywgcGxhY2Vob2xkZXIpO1xyXG5cclxuICAgIC8vIGZpeCBpc3N1ZSBpbiBJRSB3aGVyZSBoYXZpbmcgYSBwbGFjZWhvbGRlciBvbiBpbnB1dCBtYWtlIGNvbnRyb2wgZGlydHlcclxuICAgIC8vIG5vdGUgdGhhdCBpdCBzdGlsbCB0cmlnZ2VyIHZhbGlkYXRpb24gb24gZm9jdXMgYnV0IHRoaXMgaXMgYmV0dGVyIHRoYW4gbm90aGluZ1xyXG4gICAgLy8gaXNzdWUgOiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xNTI5OVxyXG4gICAgLy8gd29ya2Fyb3VuZCA6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80NDk2NzI0NS81NTgzMjgzXHJcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wpIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm5nQ29udHJvbC5jb250cm9sLm1hcmtBc1ByaXN0aW5lKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2V0TGFiZWxBY3RpdmUoKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVZhbGlkYXRlKCkge1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRFbGVtZW50Q2xhc3ModGhpcy5pbnB1dEVsZW1lbnRbMF0sICd2YWxpZGF0ZScsIHRoaXMudmFsaWRhdGUpO1xyXG5cclxuICAgIGlmICh0aGlzLnZhbGlkYXRlKSB7XHJcbiAgICAgIC8vIGZvcmNlIHZhbGlkYXRpb25cclxuICAgICAgdGhpcy5yZW5kZXJlci5pbnZva2VFbGVtZW50TWV0aG9kKHRoaXMuaW5wdXRFbGVtZW50LCAndHJpZ2dlcicsIFsnYmx1ciddKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucmVtb3ZlVmFsaWRhdGlvbkNsYXNzZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldENoYXJhY3RlckNvdW50KCkge1xyXG4gICAgdGhpcy5yZW5kZXJlci5pbnZva2VFbGVtZW50TWV0aG9kKHRoaXMuaW5wdXRFbGVtZW50LCAnY2hhcmFjdGVyQ291bnRlcicpO1xyXG5cclxuICAgIC8vIGZvcmNlIHZhbGlkYXRpb25cclxuICAgIC8vIG5lZWQgc2V0VGltZW91dCBvdGhlcndpc2UgaXQgd29udCB0cmlnZ2VyIHZhbGlkYXRpb24gcmlnaHQgYXdheVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuaW52b2tlRWxlbWVudE1ldGhvZCh0aGlzLmlucHV0RWxlbWVudCwgJ3RyaWdnZXInLCBbJ2lucHV0J10pO1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLmludm9rZUVsZW1lbnRNZXRob2QodGhpcy5pbnB1dEVsZW1lbnQsICd0cmlnZ2VyJywgWydibHVyJ10pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRMYWJlbEFjdGl2ZSgpIHtcclxuICAgIC8vIG5lZWQgc2V0VGltZW91dCBvdGhlcndpc2UgaXQgd29udCBtYWtlIGxhYmVsIGZsb2F0IGluIHNvbWUgY2lyY29uc3RhbmNlc1xyXG4gICAgLy8gZm9yIGV4YW1wbGU6IGZvcmNpbmcgdmFsaWRhdGlvbiBmb3IgZXhhbXBsZSwgcmVzZXRpbmcgZm9ybSBwcm9ncmFtbWF0aWNhbHksIC4uLlxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGlucHV0VmFsdWUgPSAoPEhUTUxJbnB1dEVsZW1lbnQ+dGhpcy5pbnB1dEVsZW1lbnRbMF0pLnZhbHVlO1xyXG4gICAgICBjb25zdCBpc0FjdGl2ZSA9ICEhdGhpcy5wbGFjZWhvbGRlciB8fCAhIWlucHV0VmFsdWU7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0RWxlbWVudENsYXNzKHRoaXMubGFiZWxFbGVtZW50WzBdLCAnYWN0aXZlJywgaXNBY3RpdmUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVDaGFyYWN0ZXJDb3VudCgpIHtcclxuICAgIHRoaXMucmVuZGVyZXIuaW52b2tlRWxlbWVudE1ldGhvZCh0aGlzLmlucHV0RWxlbWVudC5zaWJsaW5ncygnLmNoYXJhY3Rlci1jb3VudGVyJyksICdyZW1vdmUnKTtcclxuXHJcbiAgICB0aGlzLnJlbW92ZVZhbGlkYXRpb25DbGFzc2VzKCk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVWYWxpZGF0aW9uQ2xhc3NlcygpIHtcclxuICAgIC8vIHJlc2V0IHZhbGlkL2ludmFsaWQgc3RhdGVcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0RWxlbWVudENsYXNzKHRoaXMuaW5wdXRFbGVtZW50WzBdLCAnaW52YWxpZCcsIGZhbHNlKTtcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0RWxlbWVudENsYXNzKHRoaXMuaW5wdXRFbGVtZW50WzBdLCAndmFsaWQnLCBmYWxzZSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==