com.phloxui
Version:
PhloxUI Ng2+ Framework
541 lines (540 loc) • 35.9 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, ElementRef, Input, Output, EventEmitter, ApplicationRef } from '@angular/core';
import { Option } from '../../../../../decorator/Option.decorator';
import { NeedFocusService } from '../../../../../service/NeedFocusService.service';
import { FileSelector } from '../../../../../component/dataview/input/FileSelector.component';
import { I18N } from '../../../../../decorator/I18N.decorator';
const /** @type {?} */ TYPE_NAME = "material-file-selector";
export class MaterialFileSelector extends FileSelector {
/**
* @param {?} elementRef
* @param {?} needFocusService
* @param {?} applicationRef
*/
constructor(elementRef, needFocusService, applicationRef) {
super(elementRef, needFocusService);
this._applicationRef = applicationRef;
this._bgColor = '#ededed'; //extract(@CLR_1, 7);
}
/**
* @return {?}
*/
ngOnInit() {
super.ngOnInit();
}
/**
* @param {?} inputValue
* @param {?} results
* @return {?}
*/
onValidationEnd(inputValue, results) {
//! do sthing
}
/**
* @param {?} data
* @param {?} inputVal
* @return {?}
*/
onDataChange(data, inputVal) {
// throw new Error("Method not implemented.");
}
/**
* @param {?} $event
* @return {?}
*/
doFocus($event) {
// throw new Error("Method not implemented.");
}
/**
* @param {?} $event
* @return {?}
*/
doLostFocus($event) {
// throw new Error("Method not implemented.");
}
/**
* @return {?}
*/
getAllowMultipleSelect() {
return this.allowMultipleSelect;
}
/**
* @param {?} file
* @return {?}
*/
handleFiles(file) {
if (this.isAccept(file.files)) {
this.addFiles(file.files, event);
}
}
/**
* @return {?}
*/
openFileSelector() {
document.getElementById('file').click();
}
/**
* @return {?}
*/
isSelfDataDirty() {
let /** @type {?} */ d1 = FileSelector.resolveMappedData(this.field, this.originalValue);
let /** @type {?} */ d2 = this.getInputValue();
if (d1 !== d2) {
return true;
}
return false;
}
/**
* @param {?} data
* @return {?}
*/
selfSaveData(data) {
if (data !== undefined && data !== null) {
this.originalValue = JSON.parse(JSON.stringify(data));
}
else {
this.originalValue = data;
}
}
/**
* @return {?}
*/
selfResetData() {
this.setInputValue(this.originalValue);
}
/**
* @return {?}
*/
getWidth() {
return this.width;
}
/**
* @param {?} width
* @return {?}
*/
setWidth(width) {
return this.width = width;
}
/**
* @return {?}
*/
getHeight() {
return this.height;
}
/**
* @param {?} height
* @return {?}
*/
setHeight(height) {
return this.height = height;
}
/**
* @return {?}
*/
getLabel() {
return this.label;
}
/**
* @param {?} label
* @return {?}
*/
setLabel(label) {
return this.label = label;
}
/**
* @return {?}
*/
getDescription() {
return this.description;
}
/**
* @param {?} description
* @return {?}
*/
setDescription(description) {
return this.description = description;
}
/**
* @param {?} event
* @param {?} format
* @param {?} data
* @return {?}
*/
isAcceptDragData(event, format, data) {
return this.isAccept(event.dataTransfer.files);
}
/**
* @param {?} event
* @return {?}
*/
getDragOverDataTransfer(event) {
return;
}
/**
* @param {?} event
* @return {?}
*/
onDragEnter(event) {
this._bgColor = '#d6d6d6'; //extract(@CLR_1, 5);
this._applicationRef.tick();
}
/**
* @param {?} event
* @return {?}
*/
onDragOver(event) {
}
/**
* @param {?} event
* @return {?}
*/
onDragLeave(event) {
this._bgColor = '#ededed'; //extract(@CLR_1, 7);
this._applicationRef.tick();
}
/**
* @param {?} event
* @return {?}
*/
onDrop(event) {
}
/**
* @param {?} event
* @param {?} data
* @return {?}
*/
onDropAccepted(event, data) {
this._bgColor = '#ededed'; //extract(@CLR_1, 7);
this._applicationRef.tick();
event.preventDefault();
var /** @type {?} */ files = event.dataTransfer.files;
this.addFiles(files, event);
clearTimeout(this._timeout);
this._timeout = setTimeout(() => {
this.setDefaultState();
this._applicationRef.tick();
}, 5000);
}
/**
* @param {?} event
* @return {?}
*/
onDropRejected(event) {
this._applicationRef.tick();
event.preventDefault();
clearTimeout(this._timeout);
this._timeout = setTimeout(() => {
this.setDefaultState();
this._applicationRef.tick();
}, 5000);
}
}
MaterialFileSelector.TYPE_NAME = TYPE_NAME;
MaterialFileSelector.decorators = [
{ type: Component, args: [{
moduleId: module.id,
selector: TYPE_NAME,
template: `<div (click)="file.click()" class="material-file-selector" [style.background-color]="_bgColor" [dropAccept]="'FILES'"
[phxDroppable]="this" [style.width]="getWidth()" [style.height]="getHeight()">
<div class="material-file-selector-box">
<div class="icon-clouds ">
<div class="icon-clouds-text">
{{getFiles().length}}
<div class="icon-clouds-text-type">
{{getLabel()}}
</div>
</div>
</div>
<div *ngIf="isAcceptStatus() && getAlertMessage() === null">
{{getDescription()}}
</div>
<div *ngIf="isAcceptStatus() && getAlertMessage() !== null">
{{getAlertMessage()}}
</div>
<div *ngIf="!isAcceptStatus() && getAlertMessage() !== null" style="color: red;">
{{getAlertMessage()}}
</div>
</div>
<input #file type="file" style="display: none;" [multiple]="getAllowMultipleSelect()" (change)="handleFiles(file)">
</div>
`,
},] },
];
/** @nocollapse */
MaterialFileSelector.ctorParameters = () => [
{ type: ElementRef, },
{ type: NeedFocusService, },
{ type: ApplicationRef, },
];
MaterialFileSelector.propDecorators = {
"dataParent": [{ type: Input },],
"ignoreParentData": [{ type: Input },],
"data": [{ type: Input },],
"ignoreParentDisabled": [{ type: Input },],
"delegateHistory": [{ type: Input },],
"onDisabled": [{ type: Input },],
"onEnabled": [{ type: Input },],
"loadingEnabled": [{ type: Input },],
"i18nKey": [{ type: Input },],
"bypass": [{ type: Input, args: ['i18nBypass',] },],
"options": [{ type: Input },],
"disabled": [{ type: Input },],
"field": [{ type: Input },],
"name": [{ type: Input },],
"typeOfData": [{ type: Input },],
"readOnly": [{ type: Input },],
"help": [{ type: Input },],
"maxFilesize": [{ type: Input },],
"allowMultipleSelect": [{ type: Input },],
"fileTypes": [{ type: Input },],
"label": [{ type: Input },],
"description": [{ type: Input },],
"width": [{ type: Input },],
"height": [{ type: Input },],
"loadEvent": [{ type: Output, args: ['phxLoad',] },],
"startValidateEvent": [{ type: Output, args: ['phxStartValidate',] },],
"endValidateEvent": [{ type: Output, args: ['phxEndValidate',] },],
"beforeFocusEvent": [{ type: Output, args: ['phxBeforeFocus',] },],
"focusEvent": [{ type: Output, args: ['phxFocus',] },],
"beforeLostFocusEvent": [{ type: Output, args: ['phxBeforeLostFocus',] },],
"lostFocusEvent": [{ type: Output, args: ['phxLostFocus',] },],
"beforeChangeEvent": [{ type: Output, args: ['phxBeforeChange',] },],
"changeEvent": [{ type: Output, args: ['phxChange',] },],
"beforeSelectEvent": [{ type: Output, args: ['phxBeforeSelect',] },],
"selectEvent": [{ type: Output, args: ['phxSelect',] },],
};
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Object)
], MaterialFileSelector.prototype, "dataParent", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], MaterialFileSelector.prototype, "ignoreParentData", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Object)
], MaterialFileSelector.prototype, "data", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], MaterialFileSelector.prototype, "ignoreParentDisabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], MaterialFileSelector.prototype, "delegateHistory", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Function)
], MaterialFileSelector.prototype, "onDisabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Function)
], MaterialFileSelector.prototype, "onEnabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], MaterialFileSelector.prototype, "loadingEnabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], MaterialFileSelector.prototype, "i18nKey", void 0);
tslib_1.__decorate([
Option('i18nBypass'),
tslib_1.__metadata("design:type", Boolean)
], MaterialFileSelector.prototype, "bypass", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], MaterialFileSelector.prototype, "disabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], MaterialFileSelector.prototype, "field", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], MaterialFileSelector.prototype, "name", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], MaterialFileSelector.prototype, "typeOfData", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], MaterialFileSelector.prototype, "readOnly", void 0);
tslib_1.__decorate([
I18N(),
Option(),
tslib_1.__metadata("design:type", Object)
], MaterialFileSelector.prototype, "help", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Number)
], MaterialFileSelector.prototype, "maxFilesize", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], MaterialFileSelector.prototype, "allowMultipleSelect", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Array)
], MaterialFileSelector.prototype, "fileTypes", void 0);
tslib_1.__decorate([
I18N(),
Option(),
tslib_1.__metadata("design:type", String)
], MaterialFileSelector.prototype, "label", void 0);
tslib_1.__decorate([
I18N(),
Option(),
tslib_1.__metadata("design:type", String)
], MaterialFileSelector.prototype, "description", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], MaterialFileSelector.prototype, "width", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], MaterialFileSelector.prototype, "height", void 0);
tslib_1.__decorate([
Option('load'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialFileSelector.prototype, "loadEvent", void 0);
tslib_1.__decorate([
Option('startValidate'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialFileSelector.prototype, "startValidateEvent", void 0);
tslib_1.__decorate([
Option('endValidate'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialFileSelector.prototype, "endValidateEvent", void 0);
tslib_1.__decorate([
Option('beforeFocus'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialFileSelector.prototype, "beforeFocusEvent", void 0);
tslib_1.__decorate([
Option('focus'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialFileSelector.prototype, "focusEvent", void 0);
tslib_1.__decorate([
Option('beforeLostFocus'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialFileSelector.prototype, "beforeLostFocusEvent", void 0);
tslib_1.__decorate([
Option('lostFocus'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialFileSelector.prototype, "lostFocusEvent", void 0);
tslib_1.__decorate([
Option('beforeChange'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialFileSelector.prototype, "beforeChangeEvent", void 0);
tslib_1.__decorate([
Option('change'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialFileSelector.prototype, "changeEvent", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialFileSelector.prototype, "beforeSelectEvent", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialFileSelector.prototype, "selectEvent", void 0);
function MaterialFileSelector_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
MaterialFileSelector.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
MaterialFileSelector.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
MaterialFileSelector.propDecorators;
/** @type {?} */
MaterialFileSelector.TYPE_NAME;
/** @type {?} */
MaterialFileSelector.prototype.dataParent;
/** @type {?} */
MaterialFileSelector.prototype.ignoreParentData;
/** @type {?} */
MaterialFileSelector.prototype.data;
/** @type {?} */
MaterialFileSelector.prototype.ignoreParentDisabled;
/** @type {?} */
MaterialFileSelector.prototype.delegateHistory;
/** @type {?} */
MaterialFileSelector.prototype.onDisabled;
/** @type {?} */
MaterialFileSelector.prototype.onEnabled;
/** @type {?} */
MaterialFileSelector.prototype.loadingEnabled;
/** @type {?} */
MaterialFileSelector.prototype.i18nKey;
/** @type {?} */
MaterialFileSelector.prototype.bypass;
/** @type {?} */
MaterialFileSelector.prototype.options;
/** @type {?} */
MaterialFileSelector.prototype.disabled;
/** @type {?} */
MaterialFileSelector.prototype.field;
/** @type {?} */
MaterialFileSelector.prototype.name;
/** @type {?} */
MaterialFileSelector.prototype.typeOfData;
/** @type {?} */
MaterialFileSelector.prototype.readOnly;
/** @type {?} */
MaterialFileSelector.prototype.help;
/** @type {?} */
MaterialFileSelector.prototype.maxFilesize;
/** @type {?} */
MaterialFileSelector.prototype.allowMultipleSelect;
/** @type {?} */
MaterialFileSelector.prototype.fileTypes;
/** @type {?} */
MaterialFileSelector.prototype.label;
/** @type {?} */
MaterialFileSelector.prototype.description;
/** @type {?} */
MaterialFileSelector.prototype.width;
/** @type {?} */
MaterialFileSelector.prototype.height;
/** @type {?} */
MaterialFileSelector.prototype.loadEvent;
/** @type {?} */
MaterialFileSelector.prototype.startValidateEvent;
/** @type {?} */
MaterialFileSelector.prototype.endValidateEvent;
/** @type {?} */
MaterialFileSelector.prototype.beforeFocusEvent;
/** @type {?} */
MaterialFileSelector.prototype.focusEvent;
/** @type {?} */
MaterialFileSelector.prototype.beforeLostFocusEvent;
/** @type {?} */
MaterialFileSelector.prototype.lostFocusEvent;
/** @type {?} */
MaterialFileSelector.prototype.beforeChangeEvent;
/** @type {?} */
MaterialFileSelector.prototype.changeEvent;
/** @type {?} */
MaterialFileSelector.prototype.beforeSelectEvent;
/** @type {?} */
MaterialFileSelector.prototype.selectEvent;
/** @type {?} */
MaterialFileSelector.prototype.originalValue;
/** @type {?} */
MaterialFileSelector.prototype._bgColor;
/** @type {?} */
MaterialFileSelector.prototype._applicationRef;
/** @type {?} */
MaterialFileSelector.prototype._timeout;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF0ZXJpYWxGaWxlU2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvdGhlbWUvbWF0ZXJpYWwvY29tcG9uZW50L2RhdGF2aWV3L2lucHV0L01hdGVyaWFsRmlsZVNlbGVjdG9yLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFJbkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdFQUFnRSxDQUFDO0FBRTlGLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUkvRCx1QkFBTSxTQUFTLEdBQVcsd0JBQXdCLENBQUM7QUE4Qm5ELE1BQU0sMkJBQTRCLFNBQVEsWUFBWTs7Ozs7O0lBaUlsRCxZQUFZLFVBQXNCLEVBQUUsZ0JBQWtDLEVBQUUsY0FBOEI7UUFDbEcsS0FBSyxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBRXBDLElBQUksQ0FBQyxlQUFlLEdBQUcsY0FBYyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO0tBQzdCOzs7O0lBRU0sUUFBUTtRQUNYLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQzs7Ozs7OztJQUdYLGVBQWUsQ0FBQyxVQUFlLEVBQUUsT0FBMkI7O0tBRXJFOzs7Ozs7SUFFUyxZQUFZLENBQUMsSUFBUyxFQUFFLFFBQWE7O0tBRTlDOzs7OztJQUVTLE9BQU8sQ0FBQyxNQUFhOztLQUU5Qjs7Ozs7SUFFUyxXQUFXLENBQUMsTUFBYTs7S0FFbEM7Ozs7SUFF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SUFDTixNQUFNLEVBQUU7Ozs7SUFHUixJQUFJLEVBQUU7SUFDTixNQUFNLEVBQUU7Ozs7SUFJUixNQUFNLEVBQUU7Ozs7SUFHUixNQUFNLEVBQUU7Ozs7SUFNUixNQUFNLENBQUMsTUFBTSxDQUFDO3NDQUNNLFlBQVk7OztJQUloQyxNQUFNLENBQUMsZUFBZSxDQUFDO3NDQUNNLFlBQVk7OztJQUV6QyxNQUFNLENBQUMsYUFBYSxDQUFDO3NDQUNNLFlBQVk7OztJQUV2QyxNQUFNLENBQUMsYUFBYSxDQUFDO3NDQUNNLFlBQVk7OztJQUV2QyxNQUFNLENBQUMsT0FBTyxDQUFDO3NDQUNNLFlBQVk7OztJQUVqQyxNQUFNLENBQUMsaUJBQWlCLENBQUM7c0NBQ00sWUFBWTs7O0lBRTNDLE1BQU0sQ0FBQyxXQUFXLENBQUM7c0NBQ00sWUFBWTs7O0lBRXJDLE1BQU0sQ0FBQyxjQUFjLENBQUM7c0NBQ00sWUFBWTs7O0lBRXhDLE1BQU0sQ0FBQyxRQUFRLENBQUM7c0NBQ00sWUFBWTs7O0lBR2xDLE1BQU0sRUFBRTtzQ0FDb0IsWUFBWTs7O0lBRXhDLE1BQU0sRUFBRTtzQ0FDYyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEVsZW1lbnRSZWYsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgQXBwbGljYXRpb25SZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9wdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2RlY29yYXRvci9PcHRpb24uZGVjb3JhdG9yJztcbmltcG9ydCB7IE5lZWRGb2N1c1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zZXJ2aWNlL05lZWRGb2N1c1NlcnZpY2Uuc2VydmljZSc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uUmVzdWx0IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29tcG9uZW50L21vZGVsL1ZhbGlkYXRpb25SZXN1bHQnO1xuaW1wb3J0IHsgSURyb3BwYWJsZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvbXBvbmVudC9JRHJvcHBhYmxlJztcbmltcG9ydCB7IERyYWdEYXRhVHJhbnNmZXIgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb21wb25lbnQvbW9kZWwvRHJhZ0RhdGFUcmFuc2Zlcic7XG5pbXBvcnQgeyBGaWxlU2VsZWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb21wb25lbnQvZGF0YXZpZXcvaW5wdXQvRmlsZVNlbGVjdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJSGFzRGF0YSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvbXBvbmVudC9JSGFzRGF0YSc7XG5pbXBvcnQgeyBJMThOIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vZGVjb3JhdG9yL0kxOE4uZGVjb3JhdG9yJztcblxuZGVjbGFyZSB2YXIgJDogYW55O1xuXG5jb25zdCBUWVBFX05BTUU6IHN0cmluZyA9IFwibWF0ZXJpYWwtZmlsZS1zZWxlY3RvclwiO1xuXG5AQ29tcG9uZW50KHtcbiAgICBtb2R1bGVJZDogbW9kdWxlLmlkLFxuICAgIHNlbGVjdG9yOiBUWVBFX05BTUUsXG4gICAgdGVtcGxhdGU6IGA8ZGl2IChjbGljayk9XCJmaWxlLmNsaWNrKClcIiBjbGFzcz1cIm1hdGVyaWFsLWZpbGUtc2VsZWN0b3JcIiBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJfYmdDb2xvclwiIFtkcm9wQWNjZXB0XT1cIidGSUxFUydcIlxuICAgIFtwaHhEcm9wcGFibGVdPVwidGhpc1wiIFtzdHlsZS53aWR0aF09XCJnZXRXaWR0aCgpXCIgW3N0eWxlLmhlaWdodF09XCJnZXRIZWlnaHQoKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJtYXRlcmlhbC1maWxlLXNlbGVjdG9yLWJveFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1jbG91ZHMgXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1jbG91ZHMtdGV4dFwiPlxuICAgICAgICAgICAgICAgIHt7Z2V0RmlsZXMoKS5sZW5ndGh9fVxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWNsb3Vkcy10ZXh0LXR5cGVcIj5cbiAgICAgICAgICAgICAgICAgICAge3tnZXRMYWJlbCgpfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImlzQWNjZXB0U3RhdHVzKCkgJiYgZ2V0QWxlcnRNZXNzYWdlKCkgPT09IG51bGxcIj5cbiAgICAgICAgICAgIHt7Z2V0RGVzY3JpcHRpb24oKX19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNBY2NlcHRTdGF0dXMoKSAmJiBnZXRBbGVydE1lc3NhZ2UoKSAhPT0gbnVsbFwiPlxuICAgICAgICAgICAge3tnZXRBbGVydE1lc3NhZ2UoKX19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzQWNjZXB0U3RhdHVzKCkgJiYgZ2V0QWxlcnRNZXNzYWdlKCkgIT09IG51bGxcIiBzdHlsZT1cImNvbG9yOiByZWQ7XCI+XG4gICAgICAgICAgICB7e2dldEFsZXJ0TWVzc2FnZSgpfX1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGlucHV0ICNmaWxlIHR5cGU9XCJmaWxlXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIFttdWx0aXBsZV09XCJnZXRBbGxvd011bHRpcGxlU2VsZWN0KClcIiAoY2hhbmdlKT1cImhhbmRsZUZpbGVzKGZpbGUpXCI+XG48L2Rpdj5cbmAsXG59KVxuZXhwb3J0IGNsYXNzIE1hdGVyaWFsRmlsZVNlbGVjdG9yIGV4dGVuZHMgRmlsZVNlbGVjdG9yIGltcGxlbWVudHMgT25Jbml0LCBJRHJvcHBhYmxlIHtcblxuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVFlQRV9OQU1FOiBzdHJpbmcgPSBUWVBFX05BTUU7XG5cbiAgICAvLyBSZS1kZWNsYXJlIGZpZWxkIHRvIGRlY2xhcmUgbmcgQElucHV0LlxuICAgIC8vIC0tLSBmcm9tIEFic3RyYWN0SGFzRGF0YVxuICAgIEBJbnB1dCgpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIGRhdGFQYXJlbnQ6IElIYXNEYXRhO1xuICAgIEBJbnB1dCgpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIGlnbm9yZVBhcmVudERhdGE6IGJvb2xlYW47XG4gICAgQElucHV0KClcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgZGF0YTogYW55O1xuICAgIEBJbnB1dCgpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIGlnbm9yZVBhcmVudERpc2FibGVkOiBib29sZWFuO1xuICAgIEBJbnB1dCgpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIGRlbGVnYXRlSGlzdG9yeTogYm9vbGVhbjtcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBvbkRpc2FibGVkOiBGdW5jdGlvbjtcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBvbkVuYWJsZWQ6IEZ1bmN0aW9uO1xuICAgIEBJbnB1dCgpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIGxvYWRpbmdFbmFibGVkOiBib29sZWFuO1xuICAgIEBJbnB1dCgpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIGkxOG5LZXk6IHN0cmluZztcbiAgICBASW5wdXQoJ2kxOG5CeXBhc3MnKVxuICAgIEBPcHRpb24oJ2kxOG5CeXBhc3MnKVxuICAgIHByb3RlY3RlZCBieXBhc3M6IGJvb2xlYW47XG4gICAgQElucHV0KClcbiAgICBwcm90ZWN0ZWQgb3B0aW9uczogYW55O1xuICAgIEBJbnB1dCgpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIGRpc2FibGVkOiBib29sZWFuO1xuICAgIC8vIC0tLSBmcm9tIEFic3RyYWN0RGF0YVZpZXdcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBmaWVsZDogc3RyaW5nO1xuICAgIC8vIC0tLSBmcm9tIEFic3RyYWN0SW5wdXREYXRhVmlld1xuICAgIEBJbnB1dCgpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIG5hbWU6IHN0cmluZztcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCB0eXBlT2ZEYXRhOiBzdHJpbmc7XG4gICAgQElucHV0KClcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgcmVhZE9ubHk6IGJvb2xlYW47XG4gICAgQElucHV0KClcbiAgICBASTE4TigpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIGhlbHA6IGFueTtcbiAgICAvLyAtLS0gZnJvbSBBYnN0cmFjRmlsZVNlbGVjdG9yXG4gICAgQElucHV0KClcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgbWF4RmlsZXNpemU6IG51bWJlcjtcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBhbGxvd011bHRpcGxlU2VsZWN0OiBib29sZWFuO1xuICAgIEBJbnB1dCgpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIGZpbGVUeXBlczogc3RyaW5nW107XG4gICAgLy8gLS0tIHNlbGZcbiAgICBASTE4TigpXG4gICAgQE9wdGlvbigpXG4gICAgQElucHV0KClcbiAgICBwcm90ZWN0ZWQgbGFiZWw6IHN0cmluZztcbiAgICBASTE4TigpXG4gICAgQE9wdGlvbigpXG4gICAgQElucHV0KClcbiAgICBwcm90ZWN0ZWQgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCB3aWR0aDogc3RyaW5nO1xuICAgIEBJbnB1dCgpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIGhlaWdodDogc3RyaW5nO1xuXG4gICAgLy8gUmUtZGVjbGFyZSBmaWVsZCB0byBkZWNsYXJlIG5nIEBPdXRwdXQuXG4gICAgLy8gLS0tIGZyb20gQWJzdHJhY3RIYXNEYXRhXG4gICAgQE91dHB1dCgncGh4TG9hZCcpXG4gICAgQE9wdGlvbignbG9hZCcpXG4gICAgcHJvdGVjdGVkIGxvYWRFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gICAgLy8gLS0tIGZyb20gQWJzdHJhY3REYXRhVmlld1xuICAgIC8vIC0tLSBmcm9tIEFic3RyYWN0SW5wdXREYXRhVmlld1xuICAgIEBPdXRwdXQoJ3BoeFN0YXJ0VmFsaWRhdGUnKVxuICAgIEBPcHRpb24oJ3N0YXJ0VmFsaWRhdGUnKVxuICAgIHByb3RlY3RlZCBzdGFydFZhbGlkYXRlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAgIEBPdXRwdXQoJ3BoeEVuZFZhbGlkYXRlJylcbiAgICBAT3B0aW9uKCdlbmRWYWxpZGF0ZScpXG4gICAgcHJvdGVjdGVkIGVuZFZhbGlkYXRlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAgIEBPdXRwdXQoJ3BoeEJlZm9yZUZvY3VzJylcbiAgICBAT3B0aW9uKCdiZWZvcmVGb2N1cycpXG4gICAgcHJvdGVjdGVkIGJlZm9yZUZvY3VzRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAgIEBPdXRwdXQoJ3BoeEZvY3VzJylcbiAgICBAT3B0aW9uKCdmb2N1cycpXG4gICAgcHJvdGVjdGVkIGZvY3VzRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAgIEBPdXRwdXQoJ3BoeEJlZm9yZUxvc3RGb2N1cycpXG4gICAgQE9wdGlvbignYmVmb3JlTG9zdEZvY3VzJylcbiAgICBwcm90ZWN0ZWQgYmVmb3JlTG9zdEZvY3VzRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAgIEBPdXRwdXQoJ3BoeExvc3RGb2N1cycpXG4gICAgQE9wdGlvbignbG9zdEZvY3VzJylcbiAgICBwcm90ZWN0ZWQgbG9zdEZvY3VzRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAgIEBPdXRwdXQoJ3BoeEJlZm9yZUNoYW5nZScpXG4gICAgQE9wdGlvbignYmVmb3JlQ2hhbmdlJylcbiAgICBwcm90ZWN0ZWQgYmVmb3JlQ2hhbmdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAgIEBPdXRwdXQoJ3BoeENoYW5nZScpXG4gICAgQE9wdGlvbignY2hhbmdlJylcbiAgICBwcm90ZWN0ZWQgY2hhbmdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAgIC8vIC0tLSBmcm9tIEFic3RyYWNGaWxlU2VsZWN0b3JcbiAgICBAT3V0cHV0KCdwaHhCZWZvcmVTZWxlY3QnKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBiZWZvcmVTZWxlY3RFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gICAgQE91dHB1dCgncGh4U2VsZWN0JylcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgc2VsZWN0RXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAgIHByb3RlY3RlZCBvcmlnaW5hbFZhbHVlOiBhbnk7XG5cbiAgICBwdWJsaWMgX2JnQ29sb3I6IHN0cmluZztcbiAgICBwcml2YXRlIF9hcHBsaWNhdGlvblJlZjogQXBwbGljYXRpb25SZWY7XG4gICAgcHJpdmF0ZSBfdGltZW91dDogYW55O1xuXG4gICAgY29uc3RydWN0b3IoZWxlbWVudFJlZjogRWxlbWVudFJlZiwgbmVlZEZvY3VzU2VydmljZTogTmVlZEZvY3VzU2VydmljZSwgYXBwbGljYXRpb25SZWY6IEFwcGxpY2F0aW9uUmVmKSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnRSZWYsIG5lZWRGb2N1c1NlcnZpY2UpO1xuXG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uUmVmID0gYXBwbGljYXRpb25SZWY7XG4gICAgICAgIHRoaXMuX2JnQ29sb3IgPSAnI2VkZWRlZCc7Ly9leHRyYWN0KEBDTFJfMSwgNyk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvblZhbGlkYXRpb25FbmQoaW5wdXRWYWx1ZTogYW55LCByZXN1bHRzOiBWYWxpZGF0aW9uUmVzdWx0W10pOiB2b2lkIHtcbiAgICAgICAgLy8hIGRvIHN0aGluZ1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvbkRhdGFDaGFuZ2UoZGF0YTogYW55LCBpbnB1dFZhbDogYW55KTogdm9pZCB7XG4gICAgICAgIC8vIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBkb0ZvY3VzKCRldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgLy8gdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGRvTG9zdEZvY3VzKCRldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgLy8gdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEFsbG93TXVsdGlwbGVTZWxlY3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFsbG93TXVsdGlwbGVTZWxlY3Q7XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZUZpbGVzKGZpbGU6IGFueSkge1xuICAgICAgICBpZiAodGhpcy5pc0FjY2VwdChmaWxlLmZpbGVzKSkgeyBcbiAgICAgICAgICAgIHRoaXMuYWRkRmlsZXMoZmlsZS5maWxlcywgZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9wZW5GaWxlU2VsZWN0b3IoKSB7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlJykuY2xpY2soKTtcbiAgICB9IFxuXG4gICAgcHVibGljIGlzU2VsZkRhdGFEaXJ0eSgpOiBib29sZWFuIHsgXG4gICAgICAgIGxldCBkMSA9IEZpbGVTZWxlY3Rvci5yZXNvbHZlTWFwcGVkRGF0YSh0aGlzLmZpZWxkLCB0aGlzLm9yaWdpbmFsVmFsdWUpO1xuICAgICAgICBsZXQgZDIgPSB0aGlzLmdldElucHV0VmFsdWUoKTtcbiAgICAgICAgaWYgKGQxICE9PSBkMikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlOyBcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VsZlNhdmVEYXRhKGRhdGE6IGFueSk6IHZvaWQge1xuICAgICAgICBpZihkYXRhICE9PSB1bmRlZmluZWQgJiYgZGF0YSAhPT0gbnVsbCl7XG4gICAgICAgICAgICB0aGlzLm9yaWdpbmFsVmFsdWUgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luYWxWYWx1ZSA9IGRhdGE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2VsZlJlc2V0RGF0YSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKHRoaXMub3JpZ2luYWxWYWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFdpZHRoKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpZHRoO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRXaWR0aCh3aWR0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SGVpZ2h0KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmhlaWdodDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0SGVpZ2h0KGhlaWdodDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRMYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5sYWJlbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0TGFiZWwobGFiZWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmxhYmVsID0gbGFiZWw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlc2NyaXB0aW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXREZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNBY2NlcHREcmFnRGF0YShldmVudDogYW55LCBmb3JtYXQ6IHN0cmluZywgZGF0YTogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzQWNjZXB0KGV2ZW50LmRhdGFUcmFuc2Zlci5maWxlcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldERyYWdPdmVyRGF0YVRyYW5zZmVyKGV2ZW50OiBhbnkpOiBEcmFnRGF0YVRyYW5zZmVyIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkRyYWdFbnRlcihldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2JnQ29sb3IgPSAnI2Q2ZDZkNic7Ly9leHRyYWN0KEBDTFJfMSwgNSk7XG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uUmVmLnRpY2soKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25EcmFnT3ZlcihldmVudDogYW55KTogdm9pZCB7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRHJhZ0xlYXZlKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYmdDb2xvciA9ICcjZWRlZGVkJzsvL2V4dHJhY3QoQENMUl8xLCA3KTtcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb25SZWYudGljaygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkRyb3AoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkRyb3BBY2NlcHRlZChldmVudDogYW55LCBkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYmdDb2xvciA9ICcjZWRlZGVkJzsvL2V4dHJhY3QoQENMUl8xLCA3KTtcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb25SZWYudGljaygpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIHZhciBmaWxlczogRmlsZVtdID0gZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzO1xuXG4gICAgICAgIHRoaXMuYWRkRmlsZXMoZmlsZXMsIGV2ZW50KTtcbiBcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xuICAgICAgICB0aGlzLl90aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldERlZmF1bHRTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb25SZWYudGljaygpO1xuICAgICAgICB9LCA1MDAwKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Ecm9wUmVqZWN0ZWQoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvblJlZi50aWNrKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xuICAgICAgICB0aGlzLl90aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldERlZmF1bHRTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb25SZWYudGljaygpO1xuICAgICAgICB9LCA1MDAwKTtcbiAgICB9XG59XG4iXX0=