@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
335 lines • 34.6 kB
JavaScript
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';
var noop = function () { };
var ɵ0 = noop;
var IgxMaskDirective = /** @class */ (function () {
function IgxMaskDirective(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();
}
IgxMaskDirective_1 = IgxMaskDirective;
Object.defineProperty(IgxMaskDirective.prototype, "placeholder", {
get: function () {
return this._placeholder;
},
/**
* Specifies a placeholder.
* ```html
* <input placeholder = "enter text...">
* ```
* @memberof IgxMaskDirective
*/
set: function (val) {
this._placeholder = val;
this.nativeElement.setAttribute('placeholder', this._placeholder);
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxMaskDirective.prototype, "value", {
/**
*@hidden
*/
get: function () {
return this.nativeElement.value;
},
/**
*@hidden
*/
set: function (val) {
this.nativeElement.value = val;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxMaskDirective.prototype, "nativeElement", {
/**
*@hidden
*/
get: function () {
return this.elementRef.nativeElement;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxMaskDirective.prototype, "selectionStart", {
/**
*@hidden
*/
get: function () {
return this.nativeElement.selectionStart;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxMaskDirective.prototype, "selectionEnd", {
/**
*@hidden
*/
get: function () {
return this.nativeElement.selectionEnd;
},
enumerable: true,
configurable: true
});
/**
*@hidden
*/
IgxMaskDirective.prototype.ngOnInit = function () {
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
*/
IgxMaskDirective.prototype.onKeydown = function (event) {
var 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
*/
IgxMaskDirective.prototype.onKeyup = function (event) {
var key = event.keyCode || event.charCode;
if (key === KEYS.Ctrl) {
this._ctrlDown = false;
}
};
/**
*@hidden
*/
IgxMaskDirective.prototype.onPaste = function (event) {
this._paste = true;
this._valOnPaste = this.value;
this._cursorOnPaste = this.getCursorPosition();
};
/**
*@hidden
*/
IgxMaskDirective.prototype.onInputChanged = function (event) {
if (isIE() && this._stopPropagation) {
this._stopPropagation = false;
return;
}
if (this._paste) {
this._paste = false;
var 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 {
var 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);
}
var 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
*/
IgxMaskDirective.prototype.onFocus = function (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
*/
IgxMaskDirective.prototype.onBlur = function (value) {
if (this.displayValuePipe) {
this.value = this.displayValuePipe.transform(value);
}
else if (value === this.maskHelper.parseMask(this._maskOptions)) {
this.value = '';
}
};
/**
*@hidden
*/
IgxMaskDirective.prototype.getCursorPosition = function () {
return this.nativeElement.selectionStart;
};
/**
*@hidden
*/
IgxMaskDirective.prototype.setCursorPosition = function (start, end) {
if (end === void 0) { end = start; }
this.nativeElement.setSelectionRange(start, end);
};
/**
*@hidden
*/
IgxMaskDirective.prototype.writeValue = function (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
*/
IgxMaskDirective.prototype.registerOnChange = function (fn) { this._onChangeCallback = fn; };
/**
*@hidden
*/
IgxMaskDirective.prototype.registerOnTouched = function (fn) { this._onTouchedCallback = fn; };
var IgxMaskDirective_1;
IgxMaskDirective.ctorParameters = function () { return [
{ 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);
return IgxMaskDirective;
}());
export { IgxMaskDirective };
/**
* @hidden
*/
var IgxMaskModule = /** @class */ (function () {
function IgxMaskModule() {
}
IgxMaskModule = __decorate([
NgModule({
declarations: [IgxMaskDirective],
exports: [IgxMaskDirective],
imports: [CommonModule]
})
], IgxMaskModule);
return IgxMaskModule;
}());
export { IgxMaskModule };
export { ɵ0 };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFzay5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pZ25pdGV1aS1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL2RpcmVjdGl2ZXMvbWFzay9tYXNrLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDSCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLGFBQWEsRUFDaEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxJQUFJLEVBQWtCLE1BQU0sa0JBQWtCLENBQUM7QUFFeEQsSUFBTSxJQUFJLEdBQUcsY0FBUSxDQUFDLENBQUM7O0FBTXZCO0lBb0xJLDBCQUFvQixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBekcxQzs7Ozs7O1dBTUc7UUFFSSxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFrQixDQUFDO1FBeUQxRDs7V0FFRztRQUNLLGlCQUFZLEdBQUc7WUFDbkIsTUFBTSxFQUFFLEVBQUU7WUFDVixVQUFVLEVBQUUsRUFBRTtTQUNqQixDQUFDO1FBd0JGOztXQUVHO1FBQ0ssdUJBQWtCLEdBQWUsSUFBSSxDQUFDO1FBRTlDOztXQUVHO1FBQ0ssc0JBQWlCLEdBQXFCLElBQUksQ0FBQztRQUcvQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7SUFDdkMsQ0FBQzt5QkF0TFEsZ0JBQWdCO0lBd0N6QixzQkFBVyx5Q0FBVzthQUt0QjtZQUNJLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztRQUM3QixDQUFDO1FB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QUFPLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztZQUMzQixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7U0FDMUIsQ0FBQztPQUNXLGFBQWEsQ0FBSTtJQUFELG9CQUFDO0NBQUEsQUFBOUIsSUFBOEI7U0FBakIsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgTmdNb2R1bGUsXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBQaXBlVHJhbnNmb3JtXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgS0VZUywgTWFza0hlbHBlciB9IGZyb20gJy4vbWFzay1oZWxwZXInO1xuaW1wb3J0IHsgaXNJRSwgSUJhc2VFdmVudEFyZ3MgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcblxuY29uc3Qgbm9vcCA9ICgpID0+IHsgfTtcblxuQERpcmVjdGl2ZSh7XG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IElneE1hc2tEaXJlY3RpdmUsIG11bHRpOiB0cnVlIH1dLFxuICAgIHNlbGVjdG9yOiAnW2lneE1hc2tdJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hNYXNrRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgaW5wdXQgbWFzay5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlucHV0IFtpZ3hNYXNrXSA9IFwiJzAwLzAwLzAwMDAnXCI+XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneE1hc2tEaXJlY3RpdmVcbiAgICAgKi9cbiAgICBASW5wdXQoJ2lneE1hc2snKVxuICAgIHB1YmxpYyBtYXNrOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjaGFyYWN0ZXIgcmVwcmVzZW50aW5nIGEgZmlsbGFibGUgc3BvdCBpbiB0aGUgaW5wdXQgbWFzay5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIFwiJ18nXCIuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpbnB1dCBbcHJvbXB0Q2hhcl0gPSBcIicvJ1wiPlxuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hNYXNrRGlyZWN0aXZlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcHJvbXB0Q2hhcjogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIGlmIHRoZSBib3VuZCB2YWx1ZSBpbmNsdWRlcyB0aGUgZm9ybWF0dGluZyBzeW1ib2xzLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aW5wdXQgW2luY2x1ZGVMaXRlcmFsc10gPSBcInRydWVcIj5cbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4TWFza0RpcmVjdGl2ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGluY2x1ZGVMaXRlcmFsczogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyBhIHBsYWNlaG9sZGVyLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aW5wdXQgcGxhY2Vob2xkZXIgPSBcImVudGVyIHRleHQuLi5cIj5cbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4TWFza0RpcmVjdGl2ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBwbGFjZWhvbGRlcih2YWw6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHZhbDtcbiAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgncGxhY2Vob2xkZXInLCB0aGlzLl9wbGFjZWhvbGRlcik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIGEgcGlwZSB0byBiZSB1c2VkIG9uIGJsdXIuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpbnB1dCBbZGlzcGxheVZhbHVlUGlwZV0gPSBcImRpc3BsYXlGb3JtYXRQaXBlXCI+XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneE1hc2tEaXJlY3RpdmVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkaXNwbGF5VmFsdWVQaXBlOiBQaXBlVHJhbnNmb3JtO1xuXG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIGEgcGlwZSB0byBiZSB1c2VkIG9uIGZvY3VzLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aW5wdXQgW2ZvY3VzZWRWYWx1ZVBpcGVdID0gXCJpbnB1dEZvcm1hdFBpcGVcIj5cbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4TWFza0RpcmVjdGl2ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGZvY3VzZWRWYWx1ZVBpcGU6IFBpcGVUcmFuc2Zvcm07XG5cbiAgICAvKipcbiAgICAgKkBoaWRkZW5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHByaXZhdGUgZGF0YVZhbHVlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyBhbiBldmVudCBlYWNoIHRpbWUgdGhlIHZhbHVlIGNoYW5nZXMuXG4gICAgICogUHJvdmlkZXMgYHJhd1ZhbHVlOiBzdHJpbmdgIGFuZCBgZm9ybWF0dGVkVmFsdWU6IHN0cmluZ2AgYXMgZXZlbnQgYXJndW1lbnRzLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aW5wdXQgKG9uVmFsdWVDaGFuZ2UpID0gXCJvblZhbHVlQ2hhbmdlKHJhd1ZhbHVlOiBzdHJpbmcsIGZvcm1hdHRlZFZhbHVlOiBzdHJpbmcpXCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG9uVmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPElNYXNrRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXQgdmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXQgdmFsdWUodmFsKSB7XG4gICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC52YWx1ZSA9IHZhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKkBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldCBuYXRpdmVFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXQgc2VsZWN0aW9uU3RhcnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXQgc2VsZWN0aW9uRW5kKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50LnNlbGVjdGlvbkVuZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKkBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9jdHJsRG93bjogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX3Bhc3RlOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0aW9uOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKkBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9wbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfbWFza09wdGlvbnMgPSB7XG4gICAgICAgIGZvcm1hdDogJycsXG4gICAgICAgIHByb21wdENoYXI6ICcnXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX2tleTtcblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX2N1cnNvck9uUGFzdGU7XG5cbiAgICAvKipcbiAgICAgKkBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF92YWxPblBhc3RlO1xuXG4gICAgcHJpdmF0ZSBfc3RvcFByb3BhZ2F0aW9uOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBtYXNrSGVscGVyOiBNYXNrSGVscGVyO1xuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSBub29wO1xuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfb25DaGFuZ2VDYWxsYmFjazogKF86IGFueSkgPT4gdm9pZCA9IG5vb3A7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHtcbiAgICAgICAgdGhpcy5tYXNrSGVscGVyID0gbmV3IE1hc2tIZWxwZXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKkBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnByb21wdENoYXIgJiYgdGhpcy5wcm9tcHRDaGFyLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRoaXMuX21hc2tPcHRpb25zLnByb21wdENoYXIgPSB0aGlzLnByb21wdENoYXIgPSB0aGlzLnByb21wdENoYXIuc3Vic3RyaW5nKDAsIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbWFza09wdGlvbnMuZm9ybWF0ID0gdGhpcy5tYXNrID8gdGhpcy5tYXNrIDogJ0NDQ0NDQ0NDQ0MnO1xuICAgICAgICB0aGlzLl9tYXNrT3B0aW9ucy5wcm9tcHRDaGFyID0gdGhpcy5wcm9tcHRDaGFyID8gdGhpcy5wcm9tcHRDaGFyIDogJ18nO1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdwbGFjZWhvbGRlcicsIHRoaXMucGxhY2Vob2xkZXIgPyB0aGlzLnBsYWNlaG9sZGVyIDogdGhpcy5fbWFza09wdGlvbnMuZm9ybWF0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKkBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25LZXlkb3duKGV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleUNvZGUgfHwgZXZlbnQuY2hhckNvZGU7XG5cbiAgICAgICAgaWYgKGlzSUUoKSAmJiB0aGlzLl9zdG9wUHJvcGFnYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX3N0b3BQcm9wYWdhdGlvbiA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGtleSA9PT0gS0VZUy5DdHJsKSB7XG4gICAgICAgICAgICB0aGlzLl9jdHJsRG93biA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKHRoaXMuX2N0cmxEb3duICYmIGtleSA9PT0gS0VZUy5aKSB8fCAodGhpcy5fY3RybERvd24gJiYga2V5ID09PSBLRVlTLlkpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fa2V5ID0ga2V5O1xuICAgICAgICB0aGlzLl9zZWxlY3Rpb24gPSBNYXRoLmFicyh0aGlzLnNlbGVjdGlvbkVuZCAtIHRoaXMuc2VsZWN0aW9uU3RhcnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleXVwJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25LZXl1cChldmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBrZXkgPSBldmVudC5rZXlDb2RlIHx8IGV2ZW50LmNoYXJDb2RlO1xuXG4gICAgICAgIGlmIChrZXkgPT09IEtFWVMuQ3RybCkge1xuICAgICAgICAgICAgdGhpcy5fY3RybERvd24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ3Bhc3RlJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25QYXN0ZShldmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wYXN0ZSA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5fdmFsT25QYXN0ZSA9IHRoaXMudmFsdWU7XG4gICAgICAgIHRoaXMuX2N1cnNvck9uUGFzdGUgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignaW5wdXQnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbklucHV0Q2hhbmdlZChldmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoaXNJRSgpICYmIHRoaXMuX3N0b3BQcm9wYWdhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fc3RvcFByb3BhZ2F0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fcGFzdGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3Bhc3RlID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGNvbnN0IGNsaXBib2FyZERhdGEgPSB0aGlzLnZhbHVlLnN1YnN0cmluZyh0aGlzLl9jdXJzb3JPblBhc3RlLCB0aGlzLmdldEN1cnNvclBvc2l0aW9uKCkpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWFza0hlbHBlci5wYXJzZVZhbHVlQnlNYXNrVXBvbkNvcHlQYXN0ZShcbiAgICAgICAgICAgICAgICB0aGlzLl92YWxPblBhc3RlLCB0aGlzLl9tYXNrT3B0aW9ucywgdGhpcy5fY3Vyc29yT25QYXN0ZSwgY2xpcGJvYXJkRGF0YSwgdGhpcy5fc2VsZWN0aW9uKTtcblxuICAgICAgICAgICAgdGhpcy5zZXRDdXJzb3JQb3NpdGlvbih0aGlzLm1hc2tIZWxwZXIuY3Vyc29yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDdXJzb3JQb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKCk7XG5cbiAgICAgICAgICAgIHRoaXMubWFza0hlbHBlci5kYXRhID0gKHRoaXMuX2tleSA9PT0gS0VZUy5CQUNLU1BBQ0UpIHx8ICh0aGlzLl9rZXkgPT09IEtFWVMuREVMRVRFKTtcblxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuX3NlbGVjdGlvbiAmJiB0aGlzLl9zZWxlY3Rpb24gIT09IDAgP1xuICAgICAgICAgICAgICAgIHRoaXMubWFza0hlbHBlci5wYXJzZVZhbHVlQnlNYXNrVXBvblNlbGVjdGlvbih0aGlzLnZhbHVlLCB0aGlzLl9tYXNrT3B0aW9ucywgY3VycmVudEN1cnNvclBvcyAtIDEsIHRoaXMuX3NlbGVjdGlvbikgOlxuICAgICAgICAgICAgICAgIHRoaXMubWFza0hlbHBlci5wYXJzZVZhbHVlQnlNYXNrKHRoaXMudmFsdWUsIHRoaXMuX21hc2tPcHRpb25zLCBjdXJyZW50Q3Vyc29yUG9zIC0gMSk7XG5cbiAgICAgICAgICAgIHRoaXMuc2V0Q3Vyc29yUG9zaXRpb24odGhpcy5tYXNrSGVscGVyLmN1cnNvcik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByYXdWYWwgPSB0aGlzLm1hc2tIZWxwZXIucmVzdG9yZVZhbHVlRnJvbU1hc2sodGhpcy52YWx1ZSwgdGhpcy5fbWFza09wdGlvbnMpO1xuXG4gICAgICAgIHRoaXMuZGF0YVZhbHVlID0gdGhpcy5pbmNsdWRlTGl0ZXJhbHMgPyB0aGlzLnZhbHVlIDogcmF3VmFsO1xuICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKHRoaXMuZGF0YVZhbHVlKTtcblxuICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2UuZW1pdCh7IHJhd1ZhbHVlOiByYXdWYWwsIGZvcm1hdHRlZFZhbHVlOiB0aGlzLnZhbHVlIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2ZvY3VzJywgWyckZXZlbnQudGFyZ2V0LnZhbHVlJ10pXG4gICAgcHVibGljIG9uRm9jdXModmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9jdXNlZFZhbHVlUGlwZSkge1xuICAgICAgICAgICAgaWYgKGlzSUUoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0b3BQcm9wYWdhdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5mb2N1c2VkVmFsdWVQaXBlLnRyYW5zZm9ybSh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5tYXNrSGVscGVyLnBhcnNlVmFsdWVCeU1hc2tPbkluaXQodGhpcy52YWx1ZSwgdGhpcy5fbWFza09wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignYmx1cicsIFsnJGV2ZW50LnRhcmdldC52YWx1ZSddKVxuICAgIHB1YmxpYyBvbkJsdXIodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzcGxheVZhbHVlUGlwZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuZGlzcGxheVZhbHVlUGlwZS50cmFuc2Zvcm0odmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSB0aGlzLm1hc2tIZWxwZXIucGFyc2VNYXNrKHRoaXMuX21hc2tPcHRpb25zKSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRDdXJzb3JQb3NpdGlvbigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0Q3Vyc29yUG9zaXRpb24oc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIgPSBzdGFydCk6IHZvaWQge1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHdyaXRlVmFsdWUodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvbXB0Q2hhciAmJiB0aGlzLnByb21wdENoYXIubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdGhpcy5fbWFza09wdGlvbnMucHJvbXB0Q2hhciA9IHRoaXMucHJvbXB0Q2hhci5zdWJzdHJpbmcoMCwgMSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWUgPyB0aGlzLm1hc2tIZWxwZXIucGFyc2VWYWx1ZUJ5TWFza09uSW5pdCh2YWx1ZSwgdGhpcy5fbWFza09wdGlvbnMpIDogJyc7XG4gICAgICAgIGlmICh0aGlzLmRpc3BsYXlWYWx1ZVBpcGUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmRpc3BsYXlWYWx1ZVBpcGUudHJhbnNmb3JtKHRoaXMudmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kYXRhVmFsdWUgPSB0aGlzLmluY2x1ZGVMaXRlcmFscyA/IHRoaXMudmFsdWUgOiB2YWx1ZTtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayh0aGlzLmRhdGFWYWx1ZSk7XG5cbiAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlLmVtaXQoeyByYXdWYWx1ZTogdmFsdWUsIGZvcm1hdHRlZFZhbHVlOiB0aGlzLnZhbHVlIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoXzogYW55KSA9PiB2b2lkKSB7IHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sgPSBmbjsgfVxuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKSB7IHRoaXMuX29uVG91Y2hlZENhbGxiYWNrID0gZm47IH1cbn1cblxuLyoqXG4gKiBUaGUgSWd4TWFza01vZHVsZSBwcm92aWRlcyB0aGUge0BsaW5rIElneE1hc2tEaXJlY3RpdmV9IGluc2lkZSB5b3VyIGFwcGxpY2F0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElNYXNrRXZlbnRBcmdzIGV4dGVuZHMgSUJhc2VFdmVudEFyZ3Mge1xuICAgIHJhd1ZhbHVlOiBzdHJpbmc7XG4gICAgZm9ybWF0dGVkVmFsdWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbSWd4TWFza0RpcmVjdGl2ZV0sXG4gICAgZXhwb3J0czogW0lneE1hc2tEaXJlY3RpdmVdLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIElneE1hc2tNb2R1bGUgeyB9XG4iXX0=