UNPKG

@catull/igniteui-angular

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

309 lines 32.5 kB
var IgxMaskDirective_1; import { __decorate, __metadata } from "tslib"; import { CommonModule } from '@angular/common'; import { Directive, ElementRef, EventEmitter, HostListener, Input, NgModule, OnInit, Output, PipeTransform } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { KEYS, MaskHelper } from './mask-helper'; import { isIE } from '../../core/utils'; const noop = () => { }; const ɵ0 = noop; let IgxMaskDirective = IgxMaskDirective_1 = class IgxMaskDirective { constructor(elementRef) { this.elementRef = elementRef; /** * Emits an event each time the value changes. * Provides `rawValue: string` and `formattedValue: string` as event arguments. * ```html * <input (onValueChange) = "onValueChange(rawValue: string, formattedValue: string)"> * ``` */ this.onValueChange = new EventEmitter(); /** *@hidden */ this._maskOptions = { format: '', promptChar: '' }; /** *@hidden */ this._onTouchedCallback = noop; /** *@hidden */ this._onChangeCallback = noop; this.maskHelper = new MaskHelper(); } /** * Specifies a placeholder. * ```html * <input placeholder = "enter text..."> * ``` * @memberof IgxMaskDirective */ set placeholder(val) { this._placeholder = val; this.nativeElement.setAttribute('placeholder', this._placeholder); } get placeholder() { return this._placeholder; } /** *@hidden */ get value() { return this.nativeElement.value; } /** *@hidden */ set value(val) { this.nativeElement.value = val; } /** *@hidden */ get nativeElement() { return this.elementRef.nativeElement; } /** *@hidden */ get selectionStart() { return this.nativeElement.selectionStart; } /** *@hidden */ get selectionEnd() { return this.nativeElement.selectionEnd; } /** *@hidden */ ngOnInit() { if (this.promptChar && this.promptChar.length > 1) { this._maskOptions.promptChar = this.promptChar = this.promptChar.substring(0, 1); } this._maskOptions.format = this.mask ? this.mask : 'CCCCCCCCCC'; this._maskOptions.promptChar = this.promptChar ? this.promptChar : '_'; this.nativeElement.setAttribute('placeholder', this.placeholder ? this.placeholder : this._maskOptions.format); } /** *@hidden */ onKeydown(event) { const key = event.keyCode || event.charCode; if (isIE() && this._stopPropagation) { this._stopPropagation = false; } if (key === KEYS.Ctrl) { this._ctrlDown = true; } if ((this._ctrlDown && key === KEYS.Z) || (this._ctrlDown && key === KEYS.Y)) { event.preventDefault(); } this._key = key; this._selection = Math.abs(this.selectionEnd - this.selectionStart); } /** *@hidden */ onKeyup(event) { const key = event.keyCode || event.charCode; if (key === KEYS.Ctrl) { this._ctrlDown = false; } } /** *@hidden */ onPaste(event) { this._paste = true; this._valOnPaste = this.value; this._cursorOnPaste = this.getCursorPosition(); } /** *@hidden */ onInputChanged(event) { if (isIE() && this._stopPropagation) { this._stopPropagation = false; return; } if (this._paste) { this._paste = false; const clipboardData = this.value.substring(this._cursorOnPaste, this.getCursorPosition()); this.value = this.maskHelper.parseValueByMaskUponCopyPaste(this._valOnPaste, this._maskOptions, this._cursorOnPaste, clipboardData, this._selection); this.setCursorPosition(this.maskHelper.cursor); } else { const currentCursorPos = this.getCursorPosition(); this.maskHelper.data = (this._key === KEYS.BACKSPACE) || (this._key === KEYS.DELETE); this.value = this._selection && this._selection !== 0 ? this.maskHelper.parseValueByMaskUponSelection(this.value, this._maskOptions, currentCursorPos - 1, this._selection) : this.maskHelper.parseValueByMask(this.value, this._maskOptions, currentCursorPos - 1); this.setCursorPosition(this.maskHelper.cursor); } const rawVal = this.maskHelper.restoreValueFromMask(this.value, this._maskOptions); this.dataValue = this.includeLiterals ? this.value : rawVal; this._onChangeCallback(this.dataValue); this.onValueChange.emit({ rawValue: rawVal, formattedValue: this.value }); } /** *@hidden */ onFocus(value) { if (this.focusedValuePipe) { if (isIE()) { this._stopPropagation = true; } this.value = this.focusedValuePipe.transform(value); } else { this.value = this.maskHelper.parseValueByMaskOnInit(this.value, this._maskOptions); } } /** *@hidden */ onBlur(value) { if (this.displayValuePipe) { this.value = this.displayValuePipe.transform(value); } else if (value === this.maskHelper.parseMask(this._maskOptions)) { this.value = ''; } } /** *@hidden */ getCursorPosition() { return this.nativeElement.selectionStart; } /** *@hidden */ setCursorPosition(start, end = start) { this.nativeElement.setSelectionRange(start, end); } /** *@hidden */ writeValue(value) { if (this.promptChar && this.promptChar.length > 1) { this._maskOptions.promptChar = this.promptChar.substring(0, 1); } this.value = value ? this.maskHelper.parseValueByMaskOnInit(value, this._maskOptions) : ''; if (this.displayValuePipe) { this.value = this.displayValuePipe.transform(this.value); } this.dataValue = this.includeLiterals ? this.value : value; this._onChangeCallback(this.dataValue); this.onValueChange.emit({ rawValue: value, formattedValue: this.value }); } /** *@hidden */ registerOnChange(fn) { this._onChangeCallback = fn; } /** *@hidden */ registerOnTouched(fn) { this._onTouchedCallback = fn; } }; IgxMaskDirective.ctorParameters = () => [ { type: ElementRef } ]; __decorate([ Input('igxMask'), __metadata("design:type", String) ], IgxMaskDirective.prototype, "mask", void 0); __decorate([ Input(), __metadata("design:type", String) ], IgxMaskDirective.prototype, "promptChar", void 0); __decorate([ Input(), __metadata("design:type", Boolean) ], IgxMaskDirective.prototype, "includeLiterals", void 0); __decorate([ Input(), __metadata("design:type", String), __metadata("design:paramtypes", [String]) ], IgxMaskDirective.prototype, "placeholder", null); __decorate([ Input(), __metadata("design:type", Object) ], IgxMaskDirective.prototype, "displayValuePipe", void 0); __decorate([ Input(), __metadata("design:type", Object) ], IgxMaskDirective.prototype, "focusedValuePipe", void 0); __decorate([ Input(), __metadata("design:type", String) ], IgxMaskDirective.prototype, "dataValue", void 0); __decorate([ Output(), __metadata("design:type", Object) ], IgxMaskDirective.prototype, "onValueChange", void 0); __decorate([ HostListener('keydown', ['$event']), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", void 0) ], IgxMaskDirective.prototype, "onKeydown", null); __decorate([ HostListener('keyup', ['$event']), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", void 0) ], IgxMaskDirective.prototype, "onKeyup", null); __decorate([ HostListener('paste', ['$event']), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", void 0) ], IgxMaskDirective.prototype, "onPaste", null); __decorate([ HostListener('input', ['$event']), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", void 0) ], IgxMaskDirective.prototype, "onInputChanged", null); __decorate([ HostListener('focus', ['$event.target.value']), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", void 0) ], IgxMaskDirective.prototype, "onFocus", null); __decorate([ HostListener('blur', ['$event.target.value']), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", void 0) ], IgxMaskDirective.prototype, "onBlur", null); IgxMaskDirective = IgxMaskDirective_1 = __decorate([ Directive({ providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: IgxMaskDirective_1, multi: true }], selector: '[igxMask]' }), __metadata("design:paramtypes", [ElementRef]) ], IgxMaskDirective); export { IgxMaskDirective }; /** * @hidden */ let IgxMaskModule = class IgxMaskModule { }; IgxMaskModule = __decorate([ NgModule({ declarations: [IgxMaskDirective], exports: [IgxMaskDirective], imports: [CommonModule] }) ], IgxMaskModule); export { IgxMaskModule }; export { ɵ0 }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFzay5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pZ25pdGV1aS1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL2RpcmVjdGl2ZXMvbWFzay9tYXNrLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixhQUFhLEVBQ2hCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsSUFBSSxFQUFrQixNQUFNLGtCQUFrQixDQUFDO0FBRXhELE1BQU0sSUFBSSxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQzs7QUFNdkIsSUFBYSxnQkFBZ0Isd0JBQTdCLE1BQWEsZ0JBQWdCO0lBb0x6QixZQUFvQixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBekcxQzs7Ozs7O1dBTUc7UUFFSSxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFrQixDQUFDO1FBeUQxRDs7V0FFRztRQUNLLGlCQUFZLEdBQUc7WUFDbkIsTUFBTSxFQUFFLEVBQUU7WUFDVixVQUFVLEVBQUUsRUFBRTtTQUNqQixDQUFDO1FBd0JGOztXQUVHO1FBQ0ssdUJBQWtCLEdBQWUsSUFBSSxDQUFDO1FBRTlDOztXQUVHO1FBQ0ssc0JBQWlCLEdBQXFCLElBQUksQ0FBQztRQUcvQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQXRKRDs7Ozs7O09BTUc7SUFFSCxJQUFXLFdBQVcsQ0FBQyxHQUFX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b21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBEaXJlY3RpdmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIE5nTW9kdWxlLFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgUGlwZVRyYW5zZm9ybVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEtFWVMsIE1hc2tIZWxwZXIgfSBmcm9tICcuL21hc2staGVscGVyJztcbmltcG9ydCB7IGlzSUUsIElCYXNlRXZlbnRBcmdzIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7IH07XG5cbkBEaXJlY3RpdmUoe1xuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBJZ3hNYXNrRGlyZWN0aXZlLCBtdWx0aTogdHJ1ZSB9XSxcbiAgICBzZWxlY3RvcjogJ1tpZ3hNYXNrXSdcbn0pXG5leHBvcnQgY2xhc3MgSWd4TWFza0RpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGlucHV0IG1hc2suXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpbnB1dCBbaWd4TWFza10gPSBcIicwMC8wMC8wMDAwJ1wiPlxuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hNYXNrRGlyZWN0aXZlXG4gICAgICovXG4gICAgQElucHV0KCdpZ3hNYXNrJylcbiAgICBwdWJsaWMgbWFzazogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY2hhcmFjdGVyIHJlcHJlc2VudGluZyBhIGZpbGxhYmxlIHNwb3QgaW4gdGhlIGlucHV0IG1hc2suXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBcIidfJ1wiLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aW5wdXQgW3Byb21wdENoYXJdID0gXCInLydcIj5cbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4TWFza0RpcmVjdGl2ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHByb21wdENoYXI6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyBpZiB0aGUgYm91bmQgdmFsdWUgaW5jbHVkZXMgdGhlIGZvcm1hdHRpbmcgc3ltYm9scy5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlucHV0IFtpbmNsdWRlTGl0ZXJhbHNdID0gXCJ0cnVlXCI+XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneE1hc2tEaXJlY3RpdmVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpbmNsdWRlTGl0ZXJhbHM6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgYSBwbGFjZWhvbGRlci5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlucHV0IHBsYWNlaG9sZGVyID0gXCJlbnRlciB0ZXh0Li4uXCI+XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneE1hc2tEaXJlY3RpdmVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgcGxhY2Vob2xkZXIodmFsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fcGxhY2Vob2xkZXIgPSB2YWw7XG4gICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3BsYWNlaG9sZGVyJywgdGhpcy5fcGxhY2Vob2xkZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyBhIHBpcGUgdG8gYmUgdXNlZCBvbiBibHVyLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aW5wdXQgW2Rpc3BsYXlWYWx1ZVBpcGVdID0gXCJkaXNwbGF5Rm9ybWF0UGlwZVwiPlxuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hNYXNrRGlyZWN0aXZlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGlzcGxheVZhbHVlUGlwZTogUGlwZVRyYW5zZm9ybTtcblxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyBhIHBpcGUgdG8gYmUgdXNlZCBvbiBmb2N1cy5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlucHV0IFtmb2N1c2VkVmFsdWVQaXBlXSA9IFwiaW5wdXRGb3JtYXRQaXBlXCI+XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneE1hc2tEaXJlY3RpdmVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmb2N1c2VkVmFsdWVQaXBlOiBQaXBlVHJhbnNmb3JtO1xuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwcml2YXRlIGRhdGFWYWx1ZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgYW4gZXZlbnQgZWFjaCB0aW1lIHRoZSB2YWx1ZSBjaGFuZ2VzLlxuICAgICAqIFByb3ZpZGVzIGByYXdWYWx1ZTogc3RyaW5nYCBhbmQgYGZvcm1hdHRlZFZhbHVlOiBzdHJpbmdgIGFzIGV2ZW50IGFyZ3VtZW50cy5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlucHV0IChvblZhbHVlQ2hhbmdlKSA9IFwib25WYWx1ZUNoYW5nZShyYXdWYWx1ZTogc3RyaW5nLCBmb3JtYXR0ZWRWYWx1ZTogc3RyaW5nKVwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvblZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJTWFza0V2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0IHZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0IHZhbHVlKHZhbCkge1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB2YWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXQgbmF0aXZlRWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0IHNlbGVjdGlvblN0YXJ0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0IHNlbGVjdGlvbkVuZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25FbmQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfY3RybERvd246IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKkBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9wYXN0ZTogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGlvbjogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfcGxhY2Vob2xkZXI6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX21hc2tPcHRpb25zID0ge1xuICAgICAgICBmb3JtYXQ6ICcnLFxuICAgICAgICBwcm9tcHRDaGFyOiAnJ1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKkBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9rZXk7XG5cbiAgICAvKipcbiAgICAgKkBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9jdXJzb3JPblBhc3RlO1xuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfdmFsT25QYXN0ZTtcblxuICAgIHByaXZhdGUgX3N0b3BQcm9wYWdhdGlvbjogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgbWFza0hlbHBlcjogTWFza0hlbHBlcjtcblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX29uVG91Y2hlZENhbGxiYWNrOiAoKSA9PiB2b2lkID0gbm9vcDtcblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX29uQ2hhbmdlQ2FsbGJhY2s6IChfOiBhbnkpID0+IHZvaWQgPSBub29wO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7XG4gICAgICAgIHRoaXMubWFza0hlbHBlciA9IG5ldyBNYXNrSGVscGVyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5wcm9tcHRDaGFyICYmIHRoaXMucHJvbXB0Q2hhci5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXNrT3B0aW9ucy5wcm9tcHRDaGFyID0gdGhpcy5wcm9tcHRDaGFyID0gdGhpcy5wcm9tcHRDaGFyLnN1YnN0cmluZygwLCAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX21hc2tPcHRpb25zLmZvcm1hdCA9IHRoaXMubWFzayA/IHRoaXMubWFzayA6ICdDQ0NDQ0NDQ0NDJztcbiAgICAgICAgdGhpcy5fbWFza09wdGlvbnMucHJvbXB0Q2hhciA9IHRoaXMucHJvbXB0Q2hhciA/IHRoaXMucHJvbXB0Q2hhciA6ICdfJztcbiAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgncGxhY2Vob2xkZXInLCB0aGlzLnBsYWNlaG9sZGVyID8gdGhpcy5wbGFjZWhvbGRlciA6IHRoaXMuX21hc2tPcHRpb25zLmZvcm1hdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uS2V5ZG93bihldmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBrZXkgPSBldmVudC5rZXlDb2RlIHx8IGV2ZW50LmNoYXJDb2RlO1xuXG4gICAgICAgIGlmIChpc0lFKCkgJiYgdGhpcy5fc3RvcFByb3BhZ2F0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9zdG9wUHJvcGFnYXRpb24gPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChrZXkgPT09IEtFWVMuQ3RybCkge1xuICAgICAgICAgICAgdGhpcy5fY3RybERvd24gPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCh0aGlzLl9jdHJsRG93biAmJiBrZXkgPT09IEtFWVMuWikgfHwgKHRoaXMuX2N0cmxEb3duICYmIGtleSA9PT0gS0VZUy5ZKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2tleSA9IGtleTtcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uID0gTWF0aC5hYnModGhpcy5zZWxlY3Rpb25FbmQgLSB0aGlzLnNlbGVjdGlvblN0YXJ0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKkBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXl1cCcsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uS2V5dXAoZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qga2V5ID0gZXZlbnQua2V5Q29kZSB8fCBldmVudC5jaGFyQ29kZTtcblxuICAgICAgICBpZiAoa2V5ID09PSBLRVlTLkN0cmwpIHtcbiAgICAgICAgICAgIHRoaXMuX2N0cmxEb3duID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKkBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdwYXN0ZScsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uUGFzdGUoZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcGFzdGUgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuX3ZhbE9uUGFzdGUgPSB0aGlzLnZhbHVlO1xuICAgICAgICB0aGlzLl9jdXJzb3JPblBhc3RlID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2lucHV0JywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25JbnB1dENoYW5nZWQoZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGlzSUUoKSAmJiB0aGlzLl9zdG9wUHJvcGFnYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX3N0b3BQcm9wYWdhdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX3Bhc3RlKSB7XG4gICAgICAgICAgICB0aGlzLl9wYXN0ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICBjb25zdCBjbGlwYm9hcmREYXRhID0gdGhpcy52YWx1ZS5zdWJzdHJpbmcodGhpcy5fY3Vyc29yT25QYXN0ZSwgdGhpcy5nZXRDdXJzb3JQb3NpdGlvbigpKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm1hc2tIZWxwZXIucGFyc2VWYWx1ZUJ5TWFza1Vwb25Db3B5UGFzdGUoXG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsT25QYXN0ZSwgdGhpcy5fbWFza09wdGlvbnMsIHRoaXMuX2N1cnNvck9uUGFzdGUsIGNsaXBib2FyZERhdGEsIHRoaXMuX3NlbGVjdGlvbik7XG5cbiAgICAgICAgICAgIHRoaXMuc2V0Q3Vyc29yUG9zaXRpb24odGhpcy5tYXNrSGVscGVyLmN1cnNvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q3Vyc29yUG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbigpO1xuXG4gICAgICAgICAgICB0aGlzLm1hc2tIZWxwZXIuZGF0YSA9ICh0aGlzLl9rZXkgPT09IEtFWVMuQkFDS1NQQUNFKSB8fCAodGhpcy5fa2V5ID09PSBLRVlTLkRFTEVURSk7XG5cbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLl9zZWxlY3Rpb24gJiYgdGhpcy5fc2VsZWN0aW9uICE9PSAwID9cbiAgICAgICAgICAgICAgICB0aGlzLm1hc2tIZWxwZXIucGFyc2VWYWx1ZUJ5TWFza1Vwb25TZWxlY3Rpb24odGhpcy52YWx1ZSwgdGhpcy5fbWFza09wdGlvbnMsIGN1cnJlbnRDdXJzb3JQb3MgLSAxLCB0aGlzLl9zZWxlY3Rpb24pIDpcbiAgICAgICAgICAgICAgICB0aGlzLm1hc2tIZWxwZXIucGFyc2VWYWx1ZUJ5TWFzayh0aGlzLnZhbHVlLCB0aGlzLl9tYXNrT3B0aW9ucywgY3VycmVudEN1cnNvclBvcyAtIDEpO1xuXG4gICAgICAgICAgICB0aGlzLnNldEN1cnNvclBvc2l0aW9uKHRoaXMubWFza0hlbHBlci5jdXJzb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmF3VmFsID0gdGhpcy5tYXNrSGVscGVyLnJlc3RvcmVWYWx1ZUZyb21NYXNrKHRoaXMudmFsdWUsIHRoaXMuX21hc2tPcHRpb25zKTtcblxuICAgICAgICB0aGlzLmRhdGFWYWx1ZSA9IHRoaXMuaW5jbHVkZUxpdGVyYWxzID8gdGhpcy52YWx1ZSA6IHJhd1ZhbDtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayh0aGlzLmRhdGFWYWx1ZSk7XG5cbiAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlLmVtaXQoeyByYXdWYWx1ZTogcmF3VmFsLCBmb3JtYXR0ZWRWYWx1ZTogdGhpcy52YWx1ZSB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKkBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdmb2N1cycsIFsnJGV2ZW50LnRhcmdldC52YWx1ZSddKVxuICAgIHB1YmxpYyBvbkZvY3VzKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmZvY3VzZWRWYWx1ZVBpcGUpIHtcbiAgICAgICAgICAgIGlmIChpc0lFKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdG9wUHJvcGFnYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuZm9jdXNlZFZhbHVlUGlwZS50cmFuc2Zvcm0odmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWFza0hlbHBlci5wYXJzZVZhbHVlQnlNYXNrT25Jbml0KHRoaXMudmFsdWUsIHRoaXMuX21hc2tPcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2JsdXInLCBbJyRldmVudC50YXJnZXQudmFsdWUnXSlcbiAgICBwdWJsaWMgb25CbHVyKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmRpc3BsYXlWYWx1ZVBpcGUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmRpc3BsYXlWYWx1ZVBpcGUudHJhbnNmb3JtKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdGhpcy5tYXNrSGVscGVyLnBhcnNlTWFzayh0aGlzLl9tYXNrT3B0aW9ucykpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0Q3Vyc29yUG9zaXRpb24oKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKkBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNldEN1cnNvclBvc2l0aW9uKHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyID0gc3RhcnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLnByb21wdENoYXIgJiYgdGhpcy5wcm9tcHRDaGFyLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRoaXMuX21hc2tPcHRpb25zLnByb21wdENoYXIgPSB0aGlzLnByb21wdENoYXIuc3Vic3RyaW5nKDAsIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlID8gdGhpcy5tYXNrSGVscGVyLnBhcnNlVmFsdWVCeU1hc2tPbkluaXQodmFsdWUsIHRoaXMuX21hc2tPcHRpb25zKSA6ICcnO1xuICAgICAgICBpZiAodGhpcy5kaXNwbGF5VmFsdWVQaXBlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5kaXNwbGF5VmFsdWVQaXBlLnRyYW5zZm9ybSh0aGlzLnZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGF0YVZhbHVlID0gdGhpcy5pbmNsdWRlTGl0ZXJhbHMgPyB0aGlzLnZhbHVlIDogdmFsdWU7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodGhpcy5kYXRhVmFsdWUpO1xuXG4gICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZS5lbWl0KHsgcmF3VmFsdWU6IHZhbHVlLCBmb3JtYXR0ZWRWYWx1ZTogdGhpcy52YWx1ZSB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKkBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKF86IGFueSkgPT4gdm9pZCkgeyB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrID0gZm47IH1cblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCkgeyB0aGlzLl9vblRvdWNoZWRDYWxsYmFjayA9IGZuOyB9XG59XG5cbi8qKlxuICogVGhlIElneE1hc2tNb2R1bGUgcHJvdmlkZXMgdGhlIHtAbGluayBJZ3hNYXNrRGlyZWN0aXZlfSBpbnNpZGUgeW91ciBhcHBsaWNhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJTWFza0V2ZW50QXJncyBleHRlbmRzIElCYXNlRXZlbnRBcmdzIHtcbiAgICByYXdWYWx1ZTogc3RyaW5nO1xuICAgIGZvcm1hdHRlZFZhbHVlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5ATmdNb2R1bGUoe1xuICAgIGRlY2xhcmF0aW9uczogW0lneE1hc2tEaXJlY3RpdmVdLFxuICAgIGV4cG9ydHM6IFtJZ3hNYXNrRGlyZWN0aXZlXSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hNYXNrTW9kdWxlIHsgfVxuIl19