com.phloxui
Version:
PhloxUI Ng2+ Framework
499 lines (498 loc) • 37.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, ElementRef, Input, Output, EventEmitter } from '@angular/core';
import { I18N, Option } from '../../decorator/decorators';
import { AbstractTableComponent } from './AbstractTableComponent';
const /** @type {?} */ TYPE_NAME = "phx-table-body";
export class DefaultTableBody extends AbstractTableComponent {
/**
* @param {?} elementRef
*/
constructor(elementRef) {
super(elementRef);
this.rowDragEvent = new EventEmitter();
this.rowDragStartEvent = new EventEmitter();
this.rowDragEndEvent = new EventEmitter();
this.rowDragEnterEvent = new EventEmitter();
this.rowDragOverEvent = new EventEmitter();
this.rowDragLeaveEvent = new EventEmitter();
this.rowDropEvent = new EventEmitter();
this.rowDropAcceptedEvent = new EventEmitter();
this.rowDropRejectedEvent = new EventEmitter();
}
/**
* @param {?} table
* @return {?}
*/
doInitialize(table) {
}
/**
* @return {?}
*/
isSelfDataDirty() {
return false;
}
/**
* @return {?}
*/
selfResetData() {
}
/**
* @param {?} data
* @return {?}
*/
selfSaveData(data) {
}
/**
* @param {?} rows
* @return {?}
*/
render(rows) {
return new Promise((resolve, reject) => {
try {
this.rows = rows;
resolve();
}
catch (/** @type {?} */ e) {
reject(e);
}
});
}
/**
* @return {?}
*/
getRowControllers() {
return this.rows;
}
/**
* @return {?}
*/
getRowDragEvent() {
return this.rowDragEvent;
}
/**
* @param {?} event
* @return {?}
*/
setRowDragEvent(event) {
this.rowDragEvent = event;
}
/**
* @return {?}
*/
getRowDragStartEvent() {
return this.rowDragStartEvent;
}
/**
* @param {?} event
* @return {?}
*/
setRowDragStartEvent(event) {
this.rowDragStartEvent = event;
}
/**
* @return {?}
*/
getRowDragEndEvent() {
return this.rowDragEndEvent;
}
/**
* @param {?} event
* @return {?}
*/
setRowDragEndEvent(event) {
this.rowDragEndEvent = event;
}
/**
* @return {?}
*/
getRowDragEnterEvent() {
return this.rowDragEnterEvent;
}
/**
* @param {?} event
* @return {?}
*/
setRowDragEnterEvent(event) {
this.rowDragEnterEvent = event;
}
/**
* @return {?}
*/
getRowDragOverEvent() {
return this.rowDragOverEvent;
}
/**
* @param {?} event
* @return {?}
*/
setRowDragOverEvent(event) {
this.rowDragOverEvent = event;
}
/**
* @return {?}
*/
getRowDragLeaveEvent() {
return this.rowDragLeaveEvent;
}
/**
* @param {?} event
* @return {?}
*/
setRowDragLeaveEvent(event) {
this.rowDragLeaveEvent = event;
}
/**
* @return {?}
*/
getRowDropEvent() {
return this.rowDropEvent;
}
/**
* @param {?} event
* @return {?}
*/
setRowDropEvent(event) {
this.rowDropEvent = event;
}
/**
* @return {?}
*/
getRowDropAcceptedEvent() {
return this.rowDropAcceptedEvent;
}
/**
* @param {?} event
* @return {?}
*/
setRowDropAcceptedEvent(event) {
this.rowDropAcceptedEvent = event;
}
/**
* @return {?}
*/
getRowDropRejectedEvent() {
return this.rowDropRejectedEvent;
}
/**
* @param {?} event
* @return {?}
*/
setRowDropRejectedEvent(event) {
this.rowDropRejectedEvent = event;
}
/**
* @param {?} event
* @return {?}
*/
onDrag(event) {
if (this.rowDragEvent !== null && this.rowDragEvent !== undefined) {
this.rowDragEvent.emit(event);
}
let /** @type {?} */ parent = /** @type {?} */ (this.getDataParent());
if (parent !== null && typeof parent.onDrag === 'function') {
parent.onDrag(event);
}
}
/**
* @param {?} event
* @return {?}
*/
onDragStart(event) {
if (this.rowDragStartEvent !== null && this.rowDragStartEvent !== undefined) {
this.rowDragStartEvent.emit(event);
}
let /** @type {?} */ parent = /** @type {?} */ (this.getDataParent());
if (parent !== null && typeof parent.onDragStart === 'function') {
parent.onDragStart(event);
}
}
/**
* @param {?} event
* @return {?}
*/
onDragEnd(event) {
if (this.rowDragEndEvent !== null && this.rowDragEndEvent !== undefined) {
this.rowDragEndEvent.emit(event);
}
let /** @type {?} */ parent = /** @type {?} */ (this.getDataParent());
if (parent !== null && typeof parent.onDragEnd === 'function') {
parent.onDragEnd(event);
}
}
/**
* @param {?} event
* @return {?}
*/
onDragEnter(event) {
if (this.rowDragEnterEvent !== null && this.rowDragEnterEvent !== undefined) {
this.rowDragEnterEvent.emit(event);
}
let /** @type {?} */ parent = /** @type {?} */ (this.getDataParent());
if (parent !== null && typeof parent.onDragEnter === 'function') {
parent.onDragEnter(event);
}
}
/**
* @param {?} event
* @return {?}
*/
onDragOver(event) {
if (this.rowDragOverEvent !== null && this.rowDragOverEvent !== undefined) {
this.rowDragOverEvent.emit(event);
}
let /** @type {?} */ parent = /** @type {?} */ (this.getDataParent());
if (parent !== null && typeof parent.onDragOver === 'function') {
parent.onDragOver(event);
}
}
/**
* @param {?} event
* @return {?}
*/
onDragLeave(event) {
if (this.rowDragLeaveEvent !== null && this.rowDragLeaveEvent !== undefined) {
this.rowDragLeaveEvent.emit(event);
}
let /** @type {?} */ parent = /** @type {?} */ (this.getDataParent());
if (parent !== null && typeof parent.onDragLeave === 'function') {
parent.onDragLeave(event);
}
}
/**
* @param {?} event
* @return {?}
*/
onDrop(event) {
if (this.rowDropEvent !== null && this.rowDropEvent !== undefined) {
this.rowDropEvent.emit(event);
}
let /** @type {?} */ parent = /** @type {?} */ (this.getDataParent());
if (parent !== null && typeof parent.onDrop === 'function') {
parent.onDrop(event);
}
}
/**
* @param {?} event
* @return {?}
*/
onDropAccepted(event) {
if (this.rowDropAcceptedEvent !== null && this.rowDropAcceptedEvent !== undefined) {
this.rowDropAcceptedEvent.emit(event);
}
let /** @type {?} */ parent = /** @type {?} */ (this.getDataParent());
if (parent !== null && typeof parent.onDropAccepted === 'function') {
parent.onDropAccepted(event);
}
}
/**
* @param {?} event
* @return {?}
*/
onDropRejected(event) {
if (this.rowDropRejectedEvent !== null && this.rowDropRejectedEvent !== undefined) {
this.rowDropRejectedEvent.emit(event);
}
let /** @type {?} */ parent = /** @type {?} */ (this.getDataParent());
if (parent !== null && typeof parent.onDropRejected === 'function') {
parent.onDropRejected(event);
}
}
}
DefaultTableBody.TYPE_NAME = TYPE_NAME;
DefaultTableBody.decorators = [
{ type: Component, args: [{
moduleId: module.id,
selector: TYPE_NAME,
template: `<phx-component-wrapper [type]="getTable().getModel().getRowModel().getComponentType()"
[options]="getTable().getModel().getRowModel().getComponentOptions()"
[dataParent]="this"
[ignoreParentData]="true"
[handler]="row.wrapperHandler"
[data]="row.data"
[class]="'phx-table-row' + (getTable().getModel().getRowModel().getCSSClass() ? ' ' + getTable().getModel().getRowModel().getCSSClass() : '')"
*ngFor="let row of getRowControllers(); let idx = index">
</phx-component-wrapper>
`
},] },
];
/** @nocollapse */
DefaultTableBody.ctorParameters = () => [
{ type: ElementRef, },
];
DefaultTableBody.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 },],
"help": [{ type: Input },],
"rowDragEvent": [{ type: Output, args: ['phxRowDrag',] },],
"rowDragStartEvent": [{ type: Output, args: ['phxRowDragStart',] },],
"rowDragEndEvent": [{ type: Output, args: ['phxRowDragEnd',] },],
"rowDragEnterEvent": [{ type: Output, args: ['phxRowDragEnter',] },],
"rowDragOverEvent": [{ type: Output, args: ['phxRowDragOver',] },],
"rowDragLeaveEvent": [{ type: Output, args: ['phxRowDragLeave',] },],
"rowDropEvent": [{ type: Output, args: ['phxRowDrop',] },],
"rowDropAcceptedEvent": [{ type: Output, args: ['phxRowDropAccepted',] },],
"rowDropRejectedEvent": [{ type: Output, args: ['phxRowDropRejected',] },],
};
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Object)
], DefaultTableBody.prototype, "dataParent", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], DefaultTableBody.prototype, "ignoreParentData", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Object)
], DefaultTableBody.prototype, "data", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], DefaultTableBody.prototype, "ignoreParentDisabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], DefaultTableBody.prototype, "delegateHistory", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Function)
], DefaultTableBody.prototype, "onDisabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Function)
], DefaultTableBody.prototype, "onEnabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], DefaultTableBody.prototype, "loadingEnabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], DefaultTableBody.prototype, "i18nKey", void 0);
tslib_1.__decorate([
Option('i18nBypass'),
tslib_1.__metadata("design:type", Boolean)
], DefaultTableBody.prototype, "bypass", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], DefaultTableBody.prototype, "disabled", void 0);
tslib_1.__decorate([
Option(),
I18N(),
tslib_1.__metadata("design:type", Object)
], DefaultTableBody.prototype, "help", void 0);
tslib_1.__decorate([
I18N(),
tslib_1.__metadata("design:type", Array)
], DefaultTableBody.prototype, "rows", void 0);
tslib_1.__decorate([
Option('rowDrag'),
tslib_1.__metadata("design:type", EventEmitter)
], DefaultTableBody.prototype, "rowDragEvent", void 0);
tslib_1.__decorate([
Option('rowDragStart'),
tslib_1.__metadata("design:type", EventEmitter)
], DefaultTableBody.prototype, "rowDragStartEvent", void 0);
tslib_1.__decorate([
Option('rowDragEnd'),
tslib_1.__metadata("design:type", EventEmitter)
], DefaultTableBody.prototype, "rowDragEndEvent", void 0);
tslib_1.__decorate([
Option('rowDragEnter'),
tslib_1.__metadata("design:type", EventEmitter)
], DefaultTableBody.prototype, "rowDragEnterEvent", void 0);
tslib_1.__decorate([
Option('rowDragOver'),
tslib_1.__metadata("design:type", EventEmitter)
], DefaultTableBody.prototype, "rowDragOverEvent", void 0);
tslib_1.__decorate([
Option('rowDragLeave'),
tslib_1.__metadata("design:type", EventEmitter)
], DefaultTableBody.prototype, "rowDragLeaveEvent", void 0);
tslib_1.__decorate([
Option('rowDrop'),
tslib_1.__metadata("design:type", EventEmitter)
], DefaultTableBody.prototype, "rowDropEvent", void 0);
tslib_1.__decorate([
Option('rowDropAccepted'),
tslib_1.__metadata("design:type", EventEmitter)
], DefaultTableBody.prototype, "rowDropAcceptedEvent", void 0);
tslib_1.__decorate([
Option('rowDropRejected'),
tslib_1.__metadata("design:type", EventEmitter)
], DefaultTableBody.prototype, "rowDropRejectedEvent", void 0);
function DefaultTableBody_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
DefaultTableBody.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
DefaultTableBody.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
DefaultTableBody.propDecorators;
/** @type {?} */
DefaultTableBody.TYPE_NAME;
/** @type {?} */
DefaultTableBody.prototype.dataParent;
/** @type {?} */
DefaultTableBody.prototype.ignoreParentData;
/** @type {?} */
DefaultTableBody.prototype.data;
/** @type {?} */
DefaultTableBody.prototype.ignoreParentDisabled;
/** @type {?} */
DefaultTableBody.prototype.delegateHistory;
/** @type {?} */
DefaultTableBody.prototype.onDisabled;
/** @type {?} */
DefaultTableBody.prototype.onEnabled;
/** @type {?} */
DefaultTableBody.prototype.loadingEnabled;
/** @type {?} */
DefaultTableBody.prototype.i18nKey;
/** @type {?} */
DefaultTableBody.prototype.bypass;
/** @type {?} */
DefaultTableBody.prototype.options;
/** @type {?} */
DefaultTableBody.prototype.disabled;
/** @type {?} */
DefaultTableBody.prototype.help;
/** @type {?} */
DefaultTableBody.prototype.rows;
/** @type {?} */
DefaultTableBody.prototype.rowDragEvent;
/** @type {?} */
DefaultTableBody.prototype.rowDragStartEvent;
/** @type {?} */
DefaultTableBody.prototype.rowDragEndEvent;
/** @type {?} */
DefaultTableBody.prototype.rowDragEnterEvent;
/** @type {?} */
DefaultTableBody.prototype.rowDragOverEvent;
/** @type {?} */
DefaultTableBody.prototype.rowDragLeaveEvent;
/** @type {?} */
DefaultTableBody.prototype.rowDropEvent;
/** @type {?} */
DefaultTableBody.prototype.rowDropAcceptedEvent;
/** @type {?} */
DefaultTableBody.prototype.rowDropRejectedEvent;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVmYXVsdFRhYmxlQm9keS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb20ucGhsb3h1aS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnQvdGFibGUvRGVmYXVsdFRhYmxlQm9keS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRzFELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBS2xFLHVCQUFNLFNBQVMsR0FBVyxnQkFBZ0IsQ0FBQztBQWdCM0MsTUFBTSx1QkFBd0IsU0FBUSxzQkFBc0I7Ozs7Z0JBZ0Z2QyxVQUFzQjtRQUN2QyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFbEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUUxQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM1QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM1QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDL0MsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7Ozs7OztJ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QUFROzs7SUFFNUIsTUFBTSxFQUFFOzs7O0lBR1IsTUFBTSxFQUFFOzs7O0lBR1IsTUFBTSxDQUFDLFlBQVksQ0FBQzs7OztJQUtwQixNQUFNLEVBQUU7Ozs7SUFJUixNQUFNLEVBQUU7SUFDUixJQUFJLEVBQUU7Ozs7SUFHTixJQUFJLEVBQUU7Ozs7SUFLTixNQUFNLENBQUMsU0FBUyxDQUFDO3NDQUVNLFlBQVk7OztJQUNuQyxNQUFNLENBQUMsY0FBYyxDQUFDO3NDQUVNLFlBQVk7OztJQUN4QyxNQUFNLENBQUMsWUFBWSxDQUFDO3NDQUVNLFlBQVk7OztJQUN0QyxNQUFNLENBQUMsY0FBYyxDQUFDO3NDQUVNLFlBQVk7OztJQUN4QyxNQUFNLENBQUMsYUFBYSxDQUFDO3NDQUVNLFlBQVk7OztJQUN2QyxNQUFNLENBQUMsY0FBYyxDQUFDO3NDQUVNLFlBQVk7OztJQUN4QyxNQUFNLENBQUMsU0FBUyxDQUFDO3NDQUVNLFlBQVk7OztJQUNuQyxNQUFNLENBQUMsaUJBQWlCLENBQUM7c0NBRU0sWUFBWTs7O0lBQzNDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztzQ0FFTSxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgSTE4TiwgT3B0aW9uIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9yL2RlY29yYXRvcnMnO1xuXG5pbXBvcnQgeyBJVGFibGVCb2R5IH0gZnJvbSAnLi9JVGFibGVCb2R5JztcbmltcG9ydCB7IEFic3RyYWN0VGFibGVDb21wb25lbnQgfSBmcm9tICcuL0Fic3RyYWN0VGFibGVDb21wb25lbnQnO1xuaW1wb3J0IHsgSVRhYmxlUm93Q29udHJvbGxlciB9IGZyb20gJy4vSVRhYmxlUm93Q29udHJvbGxlcic7XG5pbXBvcnQgeyBQaGxveFRhYmxlIH0gZnJvbSAnLi9QaGxveFRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJSGFzRGF0YSB9IGZyb20gJy4uL0lIYXNEYXRhJztcblxuY29uc3QgVFlQRV9OQU1FOiBzdHJpbmcgPSBcInBoeC10YWJsZS1ib2R5XCI7XG5cbkBDb21wb25lbnQoe1xuICBtb2R1bGVJZDogbW9kdWxlLmlkLFxuICBzZWxlY3RvcjogVFlQRV9OQU1FLFxuICB0ZW1wbGF0ZTogYDxwaHgtY29tcG9uZW50LXdyYXBwZXIgW3R5cGVdPVwiZ2V0VGFibGUoKS5nZXRNb2RlbCgpLmdldFJvd01vZGVsKCkuZ2V0Q29tcG9uZW50VHlwZSgpXCJcbiAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJnZXRUYWJsZSgpLmdldE1vZGVsKCkuZ2V0Um93TW9kZWwoKS5nZXRDb21wb25lbnRPcHRpb25zKClcIlxuICAgICAgICAgICAgICAgICAgIFtkYXRhUGFyZW50XT1cInRoaXNcIlxuICAgICAgICAgICAgICAgICAgIFtpZ25vcmVQYXJlbnREYXRhXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgIFtoYW5kbGVyXT1cInJvdy53cmFwcGVySGFuZGxlclwiXG4gICAgICAgICAgICAgICAgICAgW2RhdGFdPVwicm93LmRhdGFcIlxuICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCIncGh4LXRhYmxlLXJvdycgKyAoZ2V0VGFibGUoKS5nZXRNb2RlbCgpLmdldFJvd01vZGVsKCkuZ2V0Q1NTQ2xhc3MoKSA/ICcgJyArIGdldFRhYmxlKCkuZ2V0TW9kZWwoKS5nZXRSb3dNb2RlbCgpLmdldENTU0NsYXNzKCkgOiAnJylcIlxuICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCByb3cgb2YgZ2V0Um93Q29udHJvbGxlcnMoKTsgbGV0IGlkeCA9IGluZGV4XCI+XG48L3BoeC1jb21wb25lbnQtd3JhcHBlcj5cbmBcbn0pXG5leHBvcnQgY2xhc3MgRGVmYXVsdFRhYmxlQm9keSBleHRlbmRzIEFic3RyYWN0VGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBJVGFibGVCb2R5IHtcblxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRZUEVfTkFNRTogc3RyaW5nID0gVFlQRV9OQU1FO1xuXG4gIC8vIFJlLWRlY2xhcmUgZmllbGQgdG8gZGVjbGFyZSBuZyBASW5wdXQuXG4gIC8vIC0tLSBmcm9tIEFic3RyYWN0SGFzRGF0YVxuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGRhdGFQYXJlbnQ6IElIYXNEYXRhO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGlnbm9yZVBhcmVudERhdGE6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgZGF0YTogYW55O1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGlnbm9yZVBhcmVudERpc2FibGVkOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGRlbGVnYXRlSGlzdG9yeTogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBvbkRpc2FibGVkOiBGdW5jdGlvbjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBvbkVuYWJsZWQ6IEZ1bmN0aW9uO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGxvYWRpbmdFbmFibGVkOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGkxOG5LZXk6IHN0cmluZztcbiAgQElucHV0KCdpMThuQnlwYXNzJylcbiAgQE9wdGlvbignaTE4bkJ5cGFzcycpXG4gIHByb3RlY3RlZCBieXBhc3M6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIHByb3RlY3RlZCBvcHRpb25zOiBhbnk7XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIC8vIC0tLSBBYnN0cmFjdEhhc0RhdGFIZWxwXG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBASTE4TigpXG4gIHByb3RlY3RlZCBoZWxwOiBhbnk7XG4gIC8vIC0tLSBzZWxmXG4gIEBJMThOKClcbiAgcHJvdGVjdGVkIHJvd3M6IElUYWJsZVJvd0NvbnRyb2xsZXJbXTtcblxuICAvLyBSZS1kZWNsYXJlIGZpZWxkIHRvIGRlY2xhcmUgbmcgQE91dHB1dC5cbiAgLy8gLS0tIHNlbGZcbiAgQE9wdGlvbigncm93RHJhZycpXG4gIEBPdXRwdXQoJ3BoeFJvd0RyYWcnKVxuICBwcm90ZWN0ZWQgcm93RHJhZ0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE9wdGlvbigncm93RHJhZ1N0YXJ0JylcbiAgQE91dHB1dCgncGh4Um93RHJhZ1N0YXJ0JylcbiAgcHJvdGVjdGVkIHJvd0RyYWdTdGFydEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE9wdGlvbigncm93RHJhZ0VuZCcpXG4gIEBPdXRwdXQoJ3BoeFJvd0RyYWdFbmQnKVxuICBwcm90ZWN0ZWQgcm93RHJhZ0VuZEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE9wdGlvbigncm93RHJhZ0VudGVyJylcbiAgQE91dHB1dCgncGh4Um93RHJhZ0VudGVyJylcbiAgcHJvdGVjdGVkIHJvd0RyYWdFbnRlckV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE9wdGlvbigncm93RHJhZ092ZXInKVxuICBAT3V0cHV0KCdwaHhSb3dEcmFnT3ZlcicpXG4gIHByb3RlY3RlZCByb3dEcmFnT3ZlckV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE9wdGlvbigncm93RHJhZ0xlYXZlJylcbiAgQE91dHB1dCgncGh4Um93RHJhZ0xlYXZlJylcbiAgcHJvdGVjdGVkIHJvd0RyYWdMZWF2ZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE9wdGlvbigncm93RHJvcCcpXG4gIEBPdXRwdXQoJ3BoeFJvd0Ryb3AnKVxuICBwcm90ZWN0ZWQgcm93RHJvcEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE9wdGlvbigncm93RHJvcEFjY2VwdGVkJylcbiAgQE91dHB1dCgncGh4Um93RHJvcEFjY2VwdGVkJylcbiAgcHJvdGVjdGVkIHJvd0Ryb3BBY2NlcHRlZEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE9wdGlvbigncm93RHJvcFJlamVjdGVkJylcbiAgQE91dHB1dCgncGh4Um93RHJvcFJlamVjdGVkJylcbiAgcHJvdGVjdGVkIHJvd0Ryb3BSZWplY3RlZEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xuICAgIHN1cGVyKGVsZW1lbnRSZWYpO1xuXG4gICAgdGhpcy5yb3dEcmFnRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgdGhpcy5yb3dEcmFnU3RhcnRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICB0aGlzLnJvd0RyYWdFbmRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIHRoaXMucm93RHJhZ0VudGVyRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgdGhpcy5yb3dEcmFnT3ZlckV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIHRoaXMucm93RHJhZ0xlYXZlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgdGhpcy5yb3dEcm9wRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgdGhpcy5yb3dEcm9wQWNjZXB0ZWRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICB0aGlzLnJvd0Ryb3BSZWplY3RlZEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICB9XG5cbiAgLy8gSW1wbGVtZW50XG4gIHByb3RlY3RlZCBkb0luaXRpYWxpemUodGFibGU6IFBobG94VGFibGUpOiB2b2lkIHtcbiAgfVxuXG4gIC8vIEltcGxlbWVudFxuICBwdWJsaWMgaXNTZWxmRGF0YURpcnR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIEltcGxlbWVudFxuICBwdWJsaWMgc2VsZlJlc2V0RGF0YSgpOiB2b2lkIHtcbiAgfVxuXG4gIC8vIEltcGxlbWVudFxuICBwdWJsaWMgc2VsZlNhdmVEYXRhKGRhdGE6IGFueSk6IHZvaWQge1xuICB9XG5cbiAgcHVibGljIHJlbmRlcihyb3dzOiBJVGFibGVSb3dDb250cm9sbGVyW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5yb3dzID0gcm93cztcblxuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSb3dDb250cm9sbGVycygpOiBJVGFibGVSb3dDb250cm9sbGVyW10ge1xuICAgIHJldHVybiB0aGlzLnJvd3M7XG4gIH1cblxuICBwdWJsaWMgZ2V0Um93RHJhZ0V2ZW50KCk6IEV2ZW50RW1pdHRlcjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5yb3dEcmFnRXZlbnQ7XG4gIH1cblxuICBwdWJsaWMgc2V0Um93RHJhZ0V2ZW50KGV2ZW50OiBFdmVudEVtaXR0ZXI8YW55Pik6IHZvaWQge1xuICAgIHRoaXMucm93RHJhZ0V2ZW50ID0gZXZlbnQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0Um93RHJhZ1N0YXJ0RXZlbnQoKTogRXZlbnRFbWl0dGVyPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnJvd0RyYWdTdGFydEV2ZW50O1xuICB9XG5cbiAgcHVibGljIHNldFJvd0RyYWdTdGFydEV2ZW50KGV2ZW50OiBFdmVudEVtaXR0ZXI8YW55Pik6IHZvaWQge1xuICAgIHRoaXMucm93RHJhZ1N0YXJ0RXZlbnQgPSBldmVudDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSb3dEcmFnRW5kRXZlbnQoKTogRXZlbnRFbWl0dGVyPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnJvd0RyYWdFbmRFdmVudDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRSb3dEcmFnRW5kRXZlbnQoZXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+KTogdm9pZCB7XG4gICAgdGhpcy5yb3dEcmFnRW5kRXZlbnQgPSBldmVudDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSb3dEcmFnRW50ZXJFdmVudCgpOiBFdmVudEVtaXR0ZXI8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMucm93RHJhZ0VudGVyRXZlbnQ7XG4gIH1cblxuICBwdWJsaWMgc2V0Um93RHJhZ0VudGVyRXZlbnQoZXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+KTogdm9pZCB7XG4gICAgdGhpcy5yb3dEcmFnRW50ZXJFdmVudCA9IGV2ZW50O1xuICB9XG5cbiAgcHVibGljIGdldFJvd0RyYWdPdmVyRXZlbnQoKTogRXZlbnRFbWl0dGVyPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnJvd0RyYWdPdmVyRXZlbnQ7XG4gIH1cblxuICBwdWJsaWMgc2V0Um93RHJhZ092ZXJFdmVudChldmVudDogRXZlbnRFbWl0dGVyPGFueT4pOiB2b2lkIHtcbiAgICB0aGlzLnJvd0RyYWdPdmVyRXZlbnQgPSBldmVudDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSb3dEcmFnTGVhdmVFdmVudCgpOiBFdmVudEVtaXR0ZXI8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMucm93RHJhZ0xlYXZlRXZlbnQ7XG4gIH1cblxuICBwdWJsaWMgc2V0Um93RHJhZ0xlYXZlRXZlbnQoZXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+KTogdm9pZCB7XG4gICAgdGhpcy5yb3dEcmFnTGVhdmVFdmVudCA9IGV2ZW50O1xuICB9XG5cbiAgcHVibGljIGdldFJvd0Ryb3BFdmVudCgpOiBFdmVudEVtaXR0ZXI8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMucm93RHJvcEV2ZW50O1xuICB9XG5cbiAgcHVibGljIHNldFJvd0Ryb3BFdmVudChldmVudDogRXZlbnRFbWl0dGVyPGFueT4pOiB2b2lkIHtcbiAgICB0aGlzLnJvd0Ryb3BFdmVudCA9IGV2ZW50O1xuICB9XG5cbiAgcHVibGljIGdldFJvd0Ryb3BBY2NlcHRlZEV2ZW50KCk6IEV2ZW50RW1pdHRlcjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5yb3dEcm9wQWNjZXB0ZWRFdmVudDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRSb3dEcm9wQWNjZXB0ZWRFdmVudChldmVudDogRXZlbnRFbWl0dGVyPGFueT4pOiB2b2lkIHtcbiAgICB0aGlzLnJvd0Ryb3BBY2NlcHRlZEV2ZW50ID0gZXZlbnQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0Um93RHJvcFJlamVjdGVkRXZlbnQoKTogRXZlbnRFbWl0dGVyPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnJvd0Ryb3BSZWplY3RlZEV2ZW50O1xuICB9XG5cbiAgcHVibGljIHNldFJvd0Ryb3BSZWplY3RlZEV2ZW50KGV2ZW50OiBFdmVudEVtaXR0ZXI8YW55Pik6IHZvaWQge1xuICAgIHRoaXMucm93RHJvcFJlamVjdGVkRXZlbnQgPSBldmVudDtcbiAgfVxuXG4gIC8vIEltcGxlbWVudDogSURyYWdnYWJsZVxuICBwdWJsaWMgb25EcmFnKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yb3dEcmFnRXZlbnQgIT09IG51bGwgJiYgdGhpcy5yb3dEcmFnRXZlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5yb3dEcmFnRXZlbnQuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgbGV0IHBhcmVudDogYW55ID0gdGhpcy5nZXREYXRhUGFyZW50KCkgYXMgYW55O1xuICAgIGlmIChwYXJlbnQgIT09IG51bGwgJiYgdHlwZW9mIHBhcmVudC5vbkRyYWcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHBhcmVudC5vbkRyYWcoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEltcGxlbWVudDogSURyYWdnYWJsZVxuICBwdWJsaWMgb25EcmFnU3RhcnQoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJvd0RyYWdTdGFydEV2ZW50ICE9PSBudWxsICYmIHRoaXMucm93RHJhZ1N0YXJ0RXZlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5yb3dEcmFnU3RhcnRFdmVudC5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBsZXQgcGFyZW50OiBhbnkgPSB0aGlzLmdldERhdGFQYXJlbnQoKSBhcyBhbnk7XG4gICAgaWYgKHBhcmVudCAhPT0gbnVsbCAmJiB0eXBlb2YgcGFyZW50Lm9uRHJhZ1N0YXJ0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwYXJlbnQub25EcmFnU3RhcnQoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEltcGxlbWVudDogSURyYWdnYWJsZVxuICBwdWJsaWMgb25EcmFnRW5kKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yb3dEcmFnRW5kRXZlbnQgIT09IG51bGwgJiYgdGhpcy5yb3dEcmFnRW5kRXZlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5yb3dEcmFnRW5kRXZlbnQuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgbGV0IHBhcmVudDogYW55ID0gdGhpcy5nZXREYXRhUGFyZW50KCkgYXMgYW55O1xuICAgIGlmIChwYXJlbnQgIT09IG51bGwgJiYgdHlwZW9mIHBhcmVudC5vbkRyYWdFbmQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHBhcmVudC5vbkRyYWdFbmQoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEltcGxlbWVudDogSURyb3BwYWJsZVxuICBwdWJsaWMgb25EcmFnRW50ZXIoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJvd0RyYWdFbnRlckV2ZW50ICE9PSBudWxsICYmIHRoaXMucm93RHJhZ0VudGVyRXZlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5yb3dEcmFnRW50ZXJFdmVudC5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBsZXQgcGFyZW50OiBhbnkgPSB0aGlzLmdldERhdGFQYXJlbnQoKSBhcyBhbnk7XG4gICAgaWYgKHBhcmVudCAhPT0gbnVsbCAmJiB0eXBlb2YgcGFyZW50Lm9uRHJhZ0VudGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwYXJlbnQub25EcmFnRW50ZXIoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEltcGxlbWVudDogSURyb3BwYWJsZVxuICBwdWJsaWMgb25EcmFnT3ZlcihldmVudDogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucm93RHJhZ092ZXJFdmVudCAhPT0gbnVsbCAmJiB0aGlzLnJvd0RyYWdPdmVyRXZlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5yb3dEcmFnT3ZlckV2ZW50LmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIGxldCBwYXJlbnQ6IGFueSA9IHRoaXMuZ2V0RGF0YVBhcmVudCgpIGFzIGFueTtcbiAgICBpZiAocGFyZW50ICE9PSBudWxsICYmIHR5cGVvZiBwYXJlbnQub25EcmFnT3ZlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcGFyZW50Lm9uRHJhZ092ZXIoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEltcGxlbWVudDogSURyb3BwYWJsZVxuICBwdWJsaWMgb25EcmFnTGVhdmUoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJvd0RyYWdMZWF2ZUV2ZW50ICE9PSBudWxsICYmIHRoaXMucm93RHJhZ0xlYXZlRXZlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5yb3dEcmFnTGVhdmVFdmVudC5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBsZXQgcGFyZW50OiBhbnkgPSB0aGlzLmdldERhdGFQYXJlbnQoKSBhcyBhbnk7XG4gICAgaWYgKHBhcmVudCAhPT0gbnVsbCAmJiB0eXBlb2YgcGFyZW50Lm9uRHJhZ0xlYXZlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwYXJlbnQub25EcmFnTGVhdmUoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEltcGxlbWVudDogSURyb3BwYWJsZVxuICBwdWJsaWMgb25Ecm9wKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yb3dEcm9wRXZlbnQgIT09IG51bGwgJiYgdGhpcy5yb3dEcm9wRXZlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5yb3dEcm9wRXZlbnQuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgbGV0IHBhcmVudDogYW55ID0gdGhpcy5nZXREYXRhUGFyZW50KCkgYXMgYW55O1xuICAgIGlmIChwYXJlbnQgIT09IG51bGwgJiYgdHlwZW9mIHBhcmVudC5vbkRyb3AgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHBhcmVudC5vbkRyb3AoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEltcGxlbWVudDogSURyb3BwYWJsZVxuICBwdWJsaWMgb25Ecm9wQWNjZXB0ZWQoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJvd0Ryb3BBY2NlcHRlZEV2ZW50ICE9PSBudWxsICYmIHRoaXMucm93RHJvcEFjY2VwdGVkRXZlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5yb3dEcm9wQWNjZXB0ZWRFdmVudC5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBsZXQgcGFyZW50OiBhbnkgPSB0aGlzLmdldERhdGFQYXJlbnQoKSBhcyBhbnk7XG4gICAgaWYgKHBhcmVudCAhPT0gbnVsbCAmJiB0eXBlb2YgcGFyZW50Lm9uRHJvcEFjY2VwdGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwYXJlbnQub25Ecm9wQWNjZXB0ZWQoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEltcGxlbWVudDogSURyb3BwYWJsZVxuICBwdWJsaWMgb25Ecm9wUmVqZWN0ZWQoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJvd0Ryb3BSZWplY3RlZEV2ZW50ICE9PSBudWxsICYmIHRoaXMucm93RHJvcFJlamVjdGVkRXZlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5yb3dEcm9wUmVqZWN0ZWRFdmVudC5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBsZXQgcGFyZW50OiBhbnkgPSB0aGlzLmdldERhdGFQYXJlbnQoKSBhcyBhbnk7XG4gICAgaWYgKHBhcmVudCAhPT0gbnVsbCAmJiB0eXBlb2YgcGFyZW50Lm9uRHJvcFJlamVjdGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwYXJlbnQub25Ecm9wUmVqZWN0ZWQoZXZlbnQpO1xuICAgIH1cbiAgfVxufVxuIl19