@uiowa/uiowa-mfk-material
Version:
mfk, uiowa-mfk
224 lines • 18.1 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, Input, Output, EventEmitter, ViewChildren, QueryList } from '@angular/core';
import { Mfk } from '../models/mfk';
import { UiowaMfkOptionsService } from '../services/uiowa-mfk-options.service';
import { DigitOnlyDirective } from '@uiowa/digit-only';
var MfkInputComponent = /** @class */ (function () {
function MfkInputComponent(optionsService) {
this.optionsService = optionsService;
this._mfk = new Mfk();
this.options = [];
this.mfkChange = new EventEmitter();
}
Object.defineProperty(MfkInputComponent.prototype, "mfk", {
get: /**
* @return {?}
*/
function () {
var _this = this;
this.options
.filter((/**
* @param {?} o
* @return {?}
*/
function (o) { return o.readonly; }))
.forEach((/**
* @param {?} o
* @return {?}
*/
function (o) {
_this._mfk[o.name] = o.defaultValue;
}));
return this._mfk;
},
set: /**
* @param {?} mfk
* @return {?}
*/
function (mfk) {
this.options
.filter((/**
* @param {?} o
* @return {?}
*/
function (o) { return o.defaultValue; }))
.forEach((/**
* @param {?} o
* @return {?}
*/
function (o) {
if (!mfk[o.name]) {
mfk[o.name] = o.defaultValue;
}
}));
this._mfk = mfk;
},
enumerable: true,
configurable: true
});
/**
* @param {?} changes
* @return {?}
*/
MfkInputComponent.prototype.ngOnChanges = /**
* @param {?} changes
* @return {?}
*/
function (changes) {
if (changes.mfk) {
this.mfk = changes.mfk.currentValue;
}
if (changes.options) {
this.options = changes.options.currentValue;
this.options = this.optionsService.getOptions(this.options);
}
};
/**
* @return {?}
*/
MfkInputComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
this.options = this.optionsService.getAllOptions();
console.log(this.options);
};
/**
* @return {?}
*/
MfkInputComponent.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () { };
/**
* @param {?} e
* @return {?}
*/
MfkInputComponent.prototype.paste = /**
* @param {?} e
* @return {?}
*/
function (e) {
/** @type {?} */
var pastedInput = e.clipboardData.getData('text/plain').replace(/\D/g, '');
e.preventDefault();
if (!pastedInput) {
return;
}
if (pastedInput.length < 40) {
document.execCommand('insertText', false, pastedInput);
}
else {
this.mfk.parseString(pastedInput);
}
this.mfkChange.emit(this.mfk);
};
/**
* @param {?} e
* @return {?}
*/
MfkInputComponent.prototype.onKeyup = /**
* @param {?} e
* @return {?}
*/
function (e) {
var _this = this;
this.mfkChange.emit(this.mfk);
if ((e.keyCode < 48 || e.keyCode > 57) && (e.keyCode < 96 || e.keyCode > 105)) {
return; // only numbers can trigger auto jump feature.
}
/** @type {?} */
var currentInputFieldName = e.target['name'];
if (this.mfk[currentInputFieldName].length === e.target['maxLength']) {
// auto jump to next input field when current field is full
/** @type {?} */
var currentInputFieldIndex = this.options.findIndex((/**
* @param {?} o
* @return {?}
*/
function (o) { return o.name === currentInputFieldName; }));
var _loop_1 = function (i) {
if (this_1.options[i].readonly) {
return "continue";
}
/** @type {?} */
var nextInputField = this_1.mfkInputFields.find((/**
* @param {?} v
* @return {?}
*/
function (v) { return v.el.nativeElement['name'] === _this.options[i].name; }));
nextInputField.el.nativeElement.focus();
return "break";
};
var this_1 = this;
for (var i = currentInputFieldIndex + 1; i < this.options.length; i++) {
var state_1 = _loop_1(i);
if (state_1 === "break")
break;
}
}
};
/**
* @param {?} e
* @return {?}
*/
MfkInputComponent.prototype.onKeydown = /**
* @param {?} e
* @return {?}
*/
function (e) {
// handle "tab" key --> auto fill '0's if the input field has not completed
if (e.keyCode !== 9) {
return;
}
if (e.target['readOnly']) {
return;
}
/** @type {?} */
var maxlength = e.target['maxLength'];
while (this.mfk[e.target['name']].length < maxlength) {
this.mfk[e.target['name']] = this.mfk[e.target['name']].concat('0');
}
};
MfkInputComponent.decorators = [
{ type: Component, args: [{
selector: 'uiowa-mfk-input',
template: "<div id=\"mfk-container\">\r\n <div class=\"mfk-field\" fxLayout=\"row inline\" fxLayout.xs=\"column\" fxLayoutAlign=\"start center\"\r\n *ngFor=\"let option of options\" fxLayoutWrap fxLayoutGap=\"0.5%\">\r\n <mat-form-field class=\"form-control\" [ngStyle]=\"{'width.rem': option.width+0.5}\" appearance=\"outline\"\r\n floatLabel=\"always\" style=\" font-size: 14px;\">\r\n <mat-label>{{option.label}}</mat-label>\r\n <input matInput [attr.aria-label]=\"option.name\" [attr.name]=\"option.name\" [attr.maxlength]=\"option.length\"\r\n [readOnly]=\"option.readonly\" [(ngModel)]=\"mfk[option.name]\" (paste)=\"paste($event)\" (keyup)=\"onKeyup($event)\"\r\n (keydown)=\"onKeydown($event)\" inputmode=\"numeric\" pattern=\"[0-9]*\" digitOnly>\r\n </mat-form-field>\r\n\r\n\r\n </div>\r\n</div>\r\n",
styles: [":host{display:inline-flex}.mfk-field{display:flex;flex-direction:row;flex-flow:row;vertical-align:bottom;margin-right:.25rem}.mat-form-field{padding:.375rem!important;font-size:1rem;font-weight:400;font-style:normal;font-variant:normal}.mat-label{font-size:.625rem;margin-bottom:0;white-space:nowrap}"]
}] }
];
/** @nocollapse */
MfkInputComponent.ctorParameters = function () { return [
{ type: UiowaMfkOptionsService }
]; };
MfkInputComponent.propDecorators = {
mfk: [{ type: Input }],
options: [{ type: Input }],
mfkChange: [{ type: Output }],
mfkInputFields: [{ type: ViewChildren, args: [DigitOnlyDirective,] }]
};
return MfkInputComponent;
}());
export { MfkInputComponent };
if (false) {
/**
* @type {?}
* @private
*/
MfkInputComponent.prototype._mfk;
/** @type {?} */
MfkInputComponent.prototype.options;
/** @type {?} */
MfkInputComponent.prototype.mfkChange;
/** @type {?} */
MfkInputComponent.prototype.mfkInputFields;
/**
* @type {?}
* @private
*/
MfkInputComponent.prototype.optionsService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWZrLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1aW93YS91aW93YS1tZmstbWF0ZXJpYWwvIiwic291cmNlcyI6WyJsaWIvbWZrLWlucHV0L21may1pbnB1dC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUNMLE1BQU0sRUFFTixZQUFZLEVBRVosWUFBWSxFQUNaLFNBQVMsRUFFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXBDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXZEO0lBaUNFLDJCQUE2QixjQUFzQztRQUF0QyxtQkFBYyxHQUFkLGNBQWMsQ0FBd0I7UUEzQjNELFNBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBcUJoQixZQUFPLEdBQXNCLEVBQUUsQ0FBQztRQUMvQixjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUt3QixDQUFDO0lBMUJ2RSxzQkFDSSxrQ0FBRzs7OztRQVdQO1lBQUEsaUJBT0M7WUFOQyxJQUFJLENBQUMsT0FBTztpQkFDVCxNQUFNOzs7O1lBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsUUFBUSxFQUFWLENBQVUsRUFBQztpQkFDdkIsT0FBTzs7OztZQUFDLFVBQUEsQ0FBQztnQkFDUixLQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDO1lBQ3JDLENBQUMsRUFBQyxDQUFDO1lBQ0wsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ25CLENBQUM7Ozs7O1FBbkJELFVBQ1EsR0FBUTtZQUNkLElBQUksQ0FBQyxPQUFPO2lCQUNULE1BQU07Ozs7WUFBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxZQUFZLEVBQWQsQ0FBYyxFQUFDO2lCQUMzQixPQUFPOzs7O1lBQUMsVUFBQSxDQUFDO2dCQUNSLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUNoQixHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUM7aUJBQzlCO1lBQ0gsQ0FBQyxFQUFDLENBQUM7WUFFTCxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztRQUNsQixDQUFDOzs7T0FBQTs7Ozs7SUFpQkQsdUNBQVc7Ozs7SUFBWCxVQUFZLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtZQUNmLElBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUM7U0FDckM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUU7WUFDbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztZQUM1QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM3RDtJQUNILENBQUM7Ozs7SUFFRCxvQ0FBUTs7O0lBQVI7UUFDRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDbkQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUIsQ0FBQzs7OztJQUVELDJDQUFlOzs7SUFBZixjQUF5QixDQUFDOzs7OztJQUUxQixpQ0FBSzs7OztJQUFMLFVBQU0sQ0FBaUI7O1lBQ2YsV0FBVyxHQUFXLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ3BGLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLE9BQU87U0FDUjtRQUNELElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUU7WUFDM0IsUUFBUSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQ3hEO2FBQU07WUFDTCxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUNuQztRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxDQUFDOzs7OztJQUVELG1DQUFPOzs7O0lBQVAsVUFBUSxDQUFnQjtRQUF4QixpQkFrQkM7UUFqQkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsRUFBRTtZQUM3RSxPQUFPLENBQUMsOENBQThDO1NBQ3ZEOztZQUNLLHFCQUFxQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzlDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFOzs7Z0JBRTlELHNCQUFzQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUzs7OztZQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxDQUFDLElBQUksS0FBSyxxQkFBcUIsRUFBaEMsQ0FBZ0MsRUFBQztvQ0FDbkYsQ0FBQztnQkFDUixJQUFJLE9BQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTs7aUJBRTdCOztvQkFDSyxjQUFjLEdBQUcsT0FBSyxjQUFjLENBQUMsSUFBSTs7OztnQkFBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFuRCxDQUFtRCxFQUFDO2dCQUN6RyxjQUFjLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQzs7OztZQUwxQyxLQUFLLElBQUksQ0FBQyxHQUFHLHNCQUFzQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFO3NDQUE1RCxDQUFDOzs7YUFPVDtTQUNGO0lBQ0gsQ0FBQzs7Ozs7SUFFRCxxQ0FBUzs7OztJQUFULFVBQVUsQ0FBZ0I7UUFDeEIsMkVBQTJFO1FBQzNFLElBQUksQ0FBQyxDQUFDLE9BQU8sS0FBSyxDQUFDLEVBQUU7WUFDbkIsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3hCLE9BQU87U0FDUjs7WUFDSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFDdkMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxFQUFFO1lBQ3BELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNyRTtJQUNILENBQUM7O2dCQWxHRixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsazFCQUF5Qzs7aUJBRTFDOzs7O2dCQVBRLHNCQUFzQjs7O3NCQVU1QixLQUFLOzBCQW9CTCxLQUFLOzRCQUNMLE1BQU07aUNBRU4sWUFBWSxTQUFDLGtCQUFrQjs7SUFxRWxDLHdCQUFDO0NBQUEsQUFuR0QsSUFtR0M7U0E5RlksaUJBQWlCOzs7Ozs7SUFDNUIsaUNBQXlCOztJQXFCekIsb0NBQXlDOztJQUN6QyxzQ0FBOEM7O0lBRTlDLDJDQUM4Qzs7Ozs7SUFFbEMsMkNBQXVEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBBZnRlclZpZXdJbml0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1mayB9IGZyb20gJy4uL21vZGVscy9tZmsnO1xyXG5pbXBvcnQgeyBNZmtGaWVsZE9wdGlvbiB9IGZyb20gJy4uL21vZGVscy9tZmstZmllbGQtb3B0aW9uJztcclxuaW1wb3J0IHsgVWlvd2FNZmtPcHRpb25zU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Vpb3dhLW1may1vcHRpb25zLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEaWdpdE9ubHlEaXJlY3RpdmUgfSBmcm9tICdAdWlvd2EvZGlnaXQtb25seSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3Vpb3dhLW1may1pbnB1dCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL21may1pbnB1dC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbWZrLWlucHV0LmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWZrSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgcHJpdmF0ZSBfbWZrID0gbmV3IE1maygpO1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG1mayhtZms6IE1maykge1xyXG4gICAgdGhpcy5vcHRpb25zXHJcbiAgICAgIC5maWx0ZXIobyA9PiBvLmRlZmF1bHRWYWx1ZSlcclxuICAgICAgLmZvckVhY2gobyA9PiB7XHJcbiAgICAgICAgaWYgKCFtZmtbby5uYW1lXSkge1xyXG4gICAgICAgICAgbWZrW28ubmFtZV0gPSBvLmRlZmF1bHRWYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX21mayA9IG1maztcclxuICB9XHJcbiAgZ2V0IG1maygpOiBNZmsge1xyXG4gICAgdGhpcy5vcHRpb25zXHJcbiAgICAgIC5maWx0ZXIobyA9PiBvLnJlYWRvbmx5KVxyXG4gICAgICAuZm9yRWFjaChvID0+IHtcclxuICAgICAgICB0aGlzLl9tZmtbby5uYW1lXSA9IG8uZGVmYXVsdFZhbHVlO1xyXG4gICAgICB9KTtcclxuICAgIHJldHVybiB0aGlzLl9tZms7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIG9wdGlvbnM/OiBNZmtGaWVsZE9wdGlvbltdID0gW107XHJcbiAgQE91dHB1dCgpIG1ma0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TWZrPigpO1xyXG5cclxuICBAVmlld0NoaWxkcmVuKERpZ2l0T25seURpcmVjdGl2ZSlcclxuICBtZmtJbnB1dEZpZWxkczogUXVlcnlMaXN0PERpZ2l0T25seURpcmVjdGl2ZT47XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uc1NlcnZpY2U6IFVpb3dhTWZrT3B0aW9uc1NlcnZpY2UpIHt9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzLm1maykge1xyXG4gICAgICB0aGlzLm1mayA9IGNoYW5nZXMubWZrLmN1cnJlbnRWYWx1ZTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzLm9wdGlvbnMpIHtcclxuICAgICAgdGhpcy5vcHRpb25zID0gY2hhbmdlcy5vcHRpb25zLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgdGhpcy5vcHRpb25zID0gdGhpcy5vcHRpb25zU2VydmljZS5nZXRPcHRpb25zKHRoaXMub3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMub3B0aW9uc1NlcnZpY2UuZ2V0QWxsT3B0aW9ucygpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5vcHRpb25zKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHt9XHJcblxyXG4gIHBhc3RlKGU6IENsaXBib2FyZEV2ZW50KSB7XHJcbiAgICBjb25zdCBwYXN0ZWRJbnB1dDogc3RyaW5nID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQvcGxhaW4nKS5yZXBsYWNlKC9cXEQvZywgJycpOyAvLyBnZXQgYSBkaWdpdC1vbmx5IHN0cmluZ1xyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgaWYgKCFwYXN0ZWRJbnB1dCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAocGFzdGVkSW5wdXQubGVuZ3RoIDwgNDApIHtcclxuICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgcGFzdGVkSW5wdXQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5tZmsucGFyc2VTdHJpbmcocGFzdGVkSW5wdXQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5tZmtDaGFuZ2UuZW1pdCh0aGlzLm1mayk7XHJcbiAgfVxyXG5cclxuICBvbktleXVwKGU6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIHRoaXMubWZrQ2hhbmdlLmVtaXQodGhpcy5tZmspO1xyXG4gICAgaWYgKChlLmtleUNvZGUgPCA0OCB8fCBlLmtleUNvZGUgPiA1NykgJiYgKGUua2V5Q29kZSA8IDk2IHx8IGUua2V5Q29kZSA+IDEwNSkpIHtcclxuICAgICAgcmV0dXJuOyAvLyBvbmx5IG51bWJlcnMgY2FuIHRyaWdnZXIgYXV0byBqdW1wIGZlYXR1cmUuXHJcbiAgICB9XHJcbiAgICBjb25zdCBjdXJyZW50SW5wdXRGaWVsZE5hbWUgPSBlLnRhcmdldFsnbmFtZSddO1xyXG4gICAgaWYgKHRoaXMubWZrW2N1cnJlbnRJbnB1dEZpZWxkTmFtZV0ubGVuZ3RoID09PSBlLnRhcmdldFsnbWF4TGVuZ3RoJ10pIHtcclxuICAgICAgLy8gYXV0byBqdW1wIHRvIG5leHQgaW5wdXQgZmllbGQgd2hlbiBjdXJyZW50IGZpZWxkIGlzIGZ1bGxcclxuICAgICAgY29uc3QgY3VycmVudElucHV0RmllbGRJbmRleCA9IHRoaXMub3B0aW9ucy5maW5kSW5kZXgobyA9PiBvLm5hbWUgPT09IGN1cnJlbnRJbnB1dEZpZWxkTmFtZSk7XHJcbiAgICAgIGZvciAobGV0IGkgPSBjdXJyZW50SW5wdXRGaWVsZEluZGV4ICsgMTsgaSA8IHRoaXMub3B0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnNbaV0ucmVhZG9ubHkpIHtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0SW5wdXRGaWVsZCA9IHRoaXMubWZrSW5wdXRGaWVsZHMuZmluZCh2ID0+IHYuZWwubmF0aXZlRWxlbWVudFsnbmFtZSddID09PSB0aGlzLm9wdGlvbnNbaV0ubmFtZSk7XHJcbiAgICAgICAgbmV4dElucHV0RmllbGQuZWwubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbktleWRvd24oZTogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgLy8gaGFuZGxlIFwidGFiXCIga2V5IC0tPiBhdXRvIGZpbGwgJzAncyBpZiB0aGUgaW5wdXQgZmllbGQgaGFzIG5vdCBjb21wbGV0ZWRcclxuICAgIGlmIChlLmtleUNvZGUgIT09IDkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKGUudGFyZ2V0WydyZWFkT25seSddKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IG1heGxlbmd0aCA9IGUudGFyZ2V0WydtYXhMZW5ndGgnXTtcclxuICAgIHdoaWxlICh0aGlzLm1ma1tlLnRhcmdldFsnbmFtZSddXS5sZW5ndGggPCBtYXhsZW5ndGgpIHtcclxuICAgICAgdGhpcy5tZmtbZS50YXJnZXRbJ25hbWUnXV0gPSB0aGlzLm1ma1tlLnRhcmdldFsnbmFtZSddXS5jb25jYXQoJzAnKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19