@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
309 lines • 32.5 kB
JavaScript
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