ontimize-web-ngx
Version:
Ontimize Web framework using Angular 15
205 lines • 28.4 kB
JavaScript
import { BehaviorSubject } from 'rxjs';
import { Util } from '../../../util/util';
import { Codes } from '../../../util/codes';
export class OColumn {
constructor() {
this._editing = false;
this.multilineSubject = new BehaviorSubject(this.multiline);
this.isMultiline = this.multilineSubject.asObservable();
}
get editing() {
return this._editing;
}
set editing(val) {
if (this.type === 'boolean' && this.editor && this.editor.autoCommit) {
this._editing = false;
}
this._editing = this.editor != null && val;
this.editor.setEditingRowClass(this._editing);
}
setDefaultProperties(args) {
this.type = 'string';
this.className = 'o-column-' + (this.type) + ' ';
this.orderable = args.orderable;
this.resizable = args.resizable;
this.groupable = args.groupable;
this.searchable = !(this.type === 'date' && args.pageable);
this.searching = true;
this.name = this.attr;
this.title = this.attr;
this.multiline = false;
}
setColumnProperties(column) {
this.title = Util.isDefined(column.title) ? column.title : column.attr;
this.definition = column;
this.multiline = column.multiline;
if (Util.isDefined(column.minWidth)) {
this.minWidth = column.minWidth;
}
if (Util.isDefined(column.maxWidth)) {
this.maxWidth = column.maxWidth;
}
if (Util.isDefined(column.orderable)) {
this.orderable = column.orderable;
}
if (Util.isDefined(column.resizable)) {
this.resizable = column.resizable;
}
if (Util.isDefined(column.searchable)) {
this.searchable = column.searchable;
}
if (Util.isDefined(column.groupable)) {
this.groupable = column.groupable;
}
if (Util.isDefined(column.renderer)) {
this.renderer = column.renderer;
}
if (Util.isDefined(column.editor)) {
this.editor = column.editor;
}
if (Util.isDefined(column.type)) {
this.type = column.type;
this.className = 'o-column-' + (this.type) + ' ';
}
if (Util.isDefined(column.type)) {
this.sqlType = column.getSQLType();
}
if (Util.isDefined(column.class)) {
this.className = Util.isDefined(this.className) ? (this.className + ' ' + column.class) : column.class;
}
if (Util.isDefined(column.operation) || Util.isDefined(column.functionOperation)) {
this.calculate = column.operation ? column.operation : column.functionOperation;
}
if (Util.isDefined(column.tooltip) && column.tooltip) {
this.tooltip = {
value: column.tooltipValue,
function: column.tooltipFunction
};
}
this.headerTooltip = column.headerTooltip ?? null;
this.headerTooltipIcon = column.headerTooltipIcon ?? null;
this.headerTooltipClass = column.headerTooltipClass ?? '';
if (Util.isDefined(column.filterExpressionFunction)) {
this.filterExpressionFunction = column.filterExpressionFunction;
}
this.valueColumn = column.valueColumn ?? this.attr;
}
set searchable(val) {
this._searchable = val;
this.searching = val;
}
get searchable() {
return this._searchable;
}
set multiline(val) {
val = Util.parseBoolean(String(val));
this._multiline = val;
this.multilineSubject.next(this._multiline);
}
get multiline() {
return this._multiline;
}
hasTooltip() {
return Util.isDefined(this.tooltip);
}
getTooltip(rowData) {
if (!this.hasTooltip()) {
return undefined;
}
let tooltip;
if (Util.isDefined(this.tooltip.value)) {
tooltip = this.tooltip.value;
}
else if (Util.isDefined(this.tooltip.function)) {
try {
tooltip = this.tooltip.function(rowData);
}
catch (e) {
console.warn('o-table-column tooltip-function didnt worked');
}
}
else {
tooltip = Util.isDefined(this.renderer) ? this.renderer.getTooltip(rowData[this.name], rowData) : rowData[this.name];
}
return tooltip;
}
getMinWidth() {
if (Util.isDefined(this.width)) {
return this.width;
}
return this.minWidth;
}
getMinWidthValue() {
return Util.extractPixelsValue(this.minWidth, Codes.DEFAULT_COLUMN_MIN_WIDTH);
}
getMaxWidthValue() {
const value = Util.extractPixelsValue(this.maxWidth);
return value ? value : undefined;
}
setRenderWidth(horizontalScrolled, clientWidth) {
if (Util.isDefined(this.width)) {
return;
}
const defaultWidth = (horizontalScrolled) ? undefined : 'auto';
this.width = Util.isDefined(this.DOMWidth) ? (this.getDOMWidth(clientWidth) + 'px') : defaultWidth;
}
getDOMWidth(val) {
let DOMWidth;
const pxVal = Util.extractPixelsValue(val);
if (Util.isDefined(pxVal)) {
DOMWidth = pxVal;
const minValue = this.getMinWidthValue();
if (Util.isDefined(minValue) && pxVal > 0 && pxVal < minValue) {
DOMWidth = minValue;
}
if (Util.isDefined(this.maxWidth)) {
const maxValue = Util.extractPixelsValue(this.maxWidth);
if (Util.isDefined(maxValue) && pxVal > maxValue) {
DOMWidth = maxValue;
}
}
}
return DOMWidth;
}
set width(val) {
let widthVal = val;
let DOMWidth = this.getDOMWidth(val);
const pxVal = Util.extractPixelsValue(DOMWidth);
if (Util.isDefined(pxVal)) {
this.DOMWidth = pxVal;
widthVal = pxVal + 'px';
}
this._width = widthVal;
}
get width() {
return this._width;
}
getWidthToStore() {
return this._width;
}
setWidth(val) {
this.width = val + 'px';
this.DOMWidth = val;
}
getTitleAlignClass() {
if (Util.isDefined(this.definition)) {
return this.definition.titleAlign || Codes.COLUMN_TITLE_ALIGN_CENTER;
}
return Codes.COLUMN_TITLE_ALIGN_CENTER;
}
getFilterValue(cellValue, rowValue) {
if (this.renderer) {
return this.renderer.getFilter(cellValue, rowValue);
}
else {
return [cellValue];
}
}
useCustomFilterFunction() {
return this.searching && this.visible && this.renderer != null && this.renderer.filterFunction != null;
}
useQuickfilterFunction() {
return this.searching && this.visible && !(this.renderer != null && this.renderer.filterFunction != null);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1jb2x1bW4uY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy90YWJsZS9jb2x1bW4vby1jb2x1bW4uY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQVFuRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFMUMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTVDLE1BQU0sT0FBTyxPQUFPO0lBQXBCO1FBY1ksYUFBUSxHQUFZLEtBQUssQ0FBQztRQWdCNUIscUJBQWdCLEdBQTZCLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNsRixnQkFBVyxHQUF3QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLENBQUM7SUEwT2pGLENBQUM7SUF2T0MsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxHQUFZO1FBQ3RCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRTtZQUNwRSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztTQUN2QjtRQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLElBQUksR0FBRyxDQUFDO1FBQzNDLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQy9DLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxJQUFTO1FBQzVCLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxD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QztTQUNwQjtJQUNILENBQUM7SUFFRCx1QkFBdUI7UUFDckIsT0FBTyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDO0lBQ3pHLENBQUM7SUFFRCxzQkFBc0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxDQUFDO0lBQzVHLENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBPVGFibGVDb2x1bW5DYWxjdWxhdGVkIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9vLXRhYmxlLWNvbHVtbi1jYWxjdWxhdGVkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBPVGFibGVDb2x1bW4gfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL28tdGFibGUtY29sdW1uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBFeHByZXNzaW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvZXhwcmVzc2lvbi50eXBlJztcbmltcG9ydCB7IE9wZXJhdG9yRnVuY3Rpb24gfSBmcm9tICcuLi8uLi8uLi90eXBlcy9vcGVyYXRpb24tZnVuY3Rpb24udHlwZSc7XG5pbXBvcnQgeyBPQ29sdW1uQWdncmVnYXRlIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvdGFibGUvby1jb2x1bW4tYWdncmVnYXRlLnR5cGUnO1xuaW1wb3J0IHsgT0NvbHVtblRvb2x0aXAgfSBmcm9tICcuLi8uLi8uLi90eXBlcy90YWJsZS9vLWNvbHVtbi10b29sdGlwLnR5cGUnO1xuaW1wb3J0IHsgVXRpbCB9IGZyb20gJy4uLy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgdHlwZSB7IE9CYXNlVGFibGVDZWxsUmVuZGVyZXIgfSBmcm9tICcuL2NlbGwtcmVuZGVyZXIvby1iYXNlLXRhYmxlLWNlbGwtcmVuZGVyZXIuY2xhc3MnO1xuaW1wb3J0IHsgQ29kZXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL2NvZGVzJztcblxuZXhwb3J0IGNsYXNzIE9Db2x1bW4ge1xuICBhdHRyOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xuICBzcWxUeXBlOiBudW1iZXI7XG4gIGNsYXNzTmFtZTogc3RyaW5nO1xuICBvcmRlcmFibGU6IGJvb2xlYW47XG4gIGdyb3VwYWJsZTogYm9vbGVhbjtcbiAgX3NlYXJjaGFibGU6IGJvb2xlYW47XG4gIHNlYXJjaGluZzogYm9vbGVhbjsgLy8gdGhpcyBjb2x1bW4gaXMgdXNlZCB0byBmaWx0ZXIgaW4gcXVpY2tmaWx0ZXJcbiAgdmlzaWJsZTogYm9vbGVhbjtcbiAgcmVuZGVyZXI6IE9CYXNlVGFibGVDZWxsUmVuZGVyZXI7XG4gIGVkaXRvcjogYW55O1xuICBwcm90ZWN0ZWQgX2VkaXRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgX3dpZHRoOiBzdHJpbmc7XG4gIG1pbldpZHRoOiBzdHJpbmc7XG4gIG1heFdpZHRoOiBzdHJpbmc7XG4gIGFnZ3JlZ2F0ZTogT0NvbHVtbkFnZ3JlZ2F0ZTtcbiAgY2FsY3VsYXRlOiBzdHJpbmcgfCBPcGVyYXRvckZ1bmN0aW9uO1xuICBkZWZpbml0aW9uOiBPVGFibGVDb2x1bW47XG4gIHRvb2x0aXA6IE9Db2x1bW5Ub29sdGlwO1xuICByZXNpemFibGU6IGJvb2xlYW47XG4gIERPTVdpZHRoOiBudW1iZXI7XG4gIHZhbHVlQ29sdW1uOiBzdHJpbmc7XG4gIGhlYWRlclRvb2x0aXA6IHN0cmluZztcbiAgaGVhZGVyVG9vbHRpcEljb246IHN0cmluZztcbiAgaGVhZGVyVG9vbHRpcENsYXNzOiBzdHJpbmc7XG4gIGZpbHRlckV4cHJlc3Npb25GdW5jdGlvbjogKGNvbHVtbkF0dHI6IHN0cmluZywgcXVpY2tGaWx0ZXI/OiBzdHJpbmcpID0+IEV4cHJlc3Npb247XG5cbiAgcHJpdmF0ZSBtdWx0aWxpbmVTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRoaXMubXVsdGlsaW5lKTtcbiAgcHVibGljIGlzTXVsdGlsaW5lOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5tdWx0aWxpbmVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICBwcml2YXRlIF9tdWx0aWxpbmU6IGJvb2xlYW47XG5cbiAgZ2V0IGVkaXRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2VkaXRpbmc7XG4gIH1cblxuICBzZXQgZWRpdGluZyh2YWw6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy50eXBlID09PSAnYm9vbGVhbicgJiYgdGhpcy5lZGl0b3IgJiYgdGhpcy5lZGl0b3IuYXV0b0NvbW1pdCkge1xuICAgICAgdGhpcy5fZWRpdGluZyA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLl9lZGl0aW5nID0gdGhpcy5lZGl0b3IgIT0gbnVsbCAmJiB2YWw7XG4gICAgdGhpcy5lZGl0b3Iuc2V0RWRpdGluZ1Jvd0NsYXNzKHRoaXMuX2VkaXRpbmcpXG4gIH1cblxuICBzZXREZWZhdWx0UHJvcGVydGllcyhhcmdzOiBhbnkpIHtcbiAgICB0aGlzLnR5cGUgPSAnc3RyaW5nJztcbiAgICB0aGlzLmNsYXNzTmFtZSA9ICdvLWNvbHVtbi0nICsgKHRoaXMudHlwZSkgKyAnICc7XG4gICAgdGhpcy5vcmRlcmFibGUgPSBhcmdzLm9yZGVyYWJsZTtcbiAgICB0aGlzLnJlc2l6YWJsZSA9IGFyZ3MucmVzaXphYmxlO1xuICAgIHRoaXMuZ3JvdXBhYmxlID0gYXJncy5ncm91cGFibGU7XG4gICAgdGhpcy5zZWFyY2hhYmxlID0gISh0aGlzLnR5cGUgPT09ICdkYXRlJyAmJiBhcmdzLnBhZ2VhYmxlKTtcbiAgICB0aGlzLnNlYXJjaGluZyA9IHRydWU7XG4gICAgLy8gY29sdW1uIHdpdGhvdXQgJ2F0dHInIHNob3VsZCBjb250YWluIG9ubHkgcmVuZGVyZXJzIHRoYXQgZG8gbm90IGRlcGVuZCBvbiBjZWxsIGRhdGEsIGJ1dCByb3cgZGF0YSAoZS5nLiBhY3Rpb25zKVxuICAgIHRoaXMubmFtZSA9IHRoaXMuYXR0cjtcbiAgICB0aGlzLnRpdGxlID0gdGhpcy5hdHRyO1xuICAgIHRoaXMubXVsdGlsaW5lID0gZmFsc2U7XG4gIH1cblxuICBzZXRDb2x1bW5Qcm9wZXJ0aWVzKGNvbHVtbjogT1RhYmxlQ29sdW1uICYgT1RhYmxlQ29sdW1uQ2FsY3VsYXRlZCkge1xuICAgIHRoaXMudGl0bGUgPSBVdGlsLmlzRGVmaW5lZChjb2x1bW4udGl0bGUpID8gY29sdW1uLnRpdGxlIDogY29sdW1uLmF0dHI7XG4gICAgdGhpcy5kZWZpbml0aW9uID0gY29sdW1uO1xuICAgIHRoaXMubXVsdGlsaW5lID0gY29sdW1uLm11bHRpbGluZTtcblxuICAgIGlmIChVdGlsLmlzRGVmaW5lZChjb2x1bW4ubWluV2lkdGgpKSB7XG4gICAgICB0aGlzLm1pbldpZHRoID0gY29sdW1uLm1pbldpZHRoO1xuICAgIH1cbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoY29sdW1uLm1heFdpZHRoKSkge1xuICAgICAgdGhpcy5tYXhXaWR0aCA9IGNvbHVtbi5tYXhXaWR0aDtcbiAgICB9XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGNvbHVtbi5vcmRlcmFibGUpKSB7XG4gICAgICB0aGlzLm9yZGVyYWJsZSA9IGNvbHVtbi5vcmRlcmFibGU7XG4gICAgfVxuICAgIGlmIChVdGlsLmlzRGVmaW5lZChjb2x1bW4ucmVzaXphYmxlKSkge1xuICAgICAgdGhpcy5yZXNpemFibGUgPSBjb2x1bW4ucmVzaXphYmxlO1xuICAgIH1cblxuICAgIGlmIChVdGlsLmlzRGVmaW5lZChjb2x1bW4uc2VhcmNoYWJsZSkpIHtcbiAgICAgIHRoaXMuc2VhcmNoYWJsZSA9IGNvbHVtbi5zZWFyY2hhYmxlO1xuICAgIH1cblxuICAgIGlmIChVdGlsLmlzRGVmaW5lZChjb2x1bW4uZ3JvdXBhYmxlKSkge1xuICAgICAgdGhpcy5ncm91cGFibGUgPSBjb2x1bW4uZ3JvdXBhYmxlO1xuICAgIH1cbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoY29sdW1uLnJlbmRlcmVyKSkge1xuICAgICAgdGhpcy5yZW5kZXJlciA9IGNvbHVtbi5yZW5kZXJlcjtcbiAgICB9XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGNvbHVtbi5lZGl0b3IpKSB7XG4gICAgICB0aGlzLmVkaXRvciA9IGNvbHVtbi5lZGl0b3I7XG4gICAgfVxuICAgIGlmIChVdGlsLmlzRGVmaW5lZChjb2x1bW4udHlwZSkpIHtcbiAgICAgIHRoaXMudHlwZSA9IGNvbHVtbi50eXBlO1xuICAgICAgdGhpcy5jbGFzc05hbWUgPSAnby1jb2x1bW4tJyArICh0aGlzLnR5cGUpICsgJyAnO1xuICAgIH1cblxuICAgIGlmIChVdGlsLmlzRGVmaW5lZChjb2x1bW4udHlwZSkpIHtcbiAgICAgIHRoaXMuc3FsVHlwZSA9IGNvbHVtbi5nZXRTUUxUeXBlKCk7XG4gICAgfVxuXG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGNvbHVtbi5jbGFzcykpIHtcbiAgICAgIHRoaXMuY2xhc3NOYW1lID0gVXRpbC5pc0RlZmluZWQodGhpcy5jbGFzc05hbWUpID8gKHRoaXMuY2xhc3NOYW1lICsgJyAnICsgY29sdW1uLmNsYXNzKSA6IGNvbHVtbi5jbGFzcztcbiAgICB9XG4gICAgLy8gaWYgKGNvbHVtbiBpbnN0YW5jZW9mIE9UYWJsZUNvbHVtbkNhbGN1bGF0ZWRDb21wb25lbnQpIHtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoY29sdW1uLm9wZXJhdGlvbikgfHwgVXRpbC5pc0RlZmluZWQoY29sdW1uLmZ1bmN0aW9uT3BlcmF0aW9uKSkge1xuICAgICAgdGhpcy5jYWxjdWxhdGUgPSBjb2x1bW4ub3BlcmF0aW9uID8gY29sdW1uLm9wZXJhdGlvbiA6IGNvbHVtbi5mdW5jdGlvbk9wZXJhdGlvbjtcbiAgICB9XG4gICAgLy8gfVxuICAgIGlmIChVdGlsLmlzRGVmaW5lZChjb2x1bW4udG9vbHRpcCkgJiYgY29sdW1uLnRvb2x0aXApIHtcbiAgICAgIHRoaXMudG9vbHRpcCA9IHtcbiAgICAgICAgdmFsdWU6IGNvbHVtbi50b29sdGlwVmFsdWUsXG4gICAgICAgIGZ1bmN0aW9uOiBjb2x1bW4udG9vbHRpcEZ1bmN0aW9uXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuaGVhZGVyVG9vbHRpcCA9IGNvbHVtbi5oZWFkZXJUb29sdGlwID8/IG51bGw7XG4gICAgdGhpcy5oZWFkZXJUb29sdGlwSWNvbiA9IGNvbHVtbi5oZWFkZXJUb29sdGlwSWNvbiA/PyBudWxsO1xuICAgIHRoaXMuaGVhZGVyVG9vbHRpcENsYXNzID0gY29sdW1uLmhlYWRlclRvb2x0aXBDbGFzcyA/PyAnJztcblxuICAgIGlmIChVdGlsLmlzRGVmaW5lZChjb2x1bW4uZmlsdGVyRXhwcmVzc2lvbkZ1bmN0aW9uKSkge1xuICAgICAgdGhpcy5maWx0ZXJFeHByZXNzaW9uRnVuY3Rpb24gPSBjb2x1bW4uZmlsdGVyRXhwcmVzc2lvbkZ1bmN0aW9uO1xuICAgIH1cbiAgICB0aGlzLnZhbHVlQ29sdW1uID0gY29sdW1uLnZhbHVlQ29sdW1uID8/IHRoaXMuYXR0cjtcblxuICB9XG5cbiAgc2V0IHNlYXJjaGFibGUodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2VhcmNoYWJsZSA9IHZhbDtcbiAgICB0aGlzLnNlYXJjaGluZyA9IHZhbDtcbiAgfVxuXG4gIGdldCBzZWFyY2hhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zZWFyY2hhYmxlO1xuICB9XG5cbiAgc2V0IG11bHRpbGluZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB2YWwgPSBVdGlsLnBhcnNlQm9vbGVhbihTdHJpbmcodmFsKSk7XG4gICAgdGhpcy5fbXVsdGlsaW5lID0gdmFsO1xuICAgIHRoaXMubXVsdGlsaW5lU3ViamVjdC5uZXh0KHRoaXMuX211bHRpbGluZSk7XG4gIH1cblxuICBnZXQgbXVsdGlsaW5lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9tdWx0aWxpbmU7XG4gIH1cblxuICBoYXNUb29sdGlwKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBVdGlsLmlzRGVmaW5lZCh0aGlzLnRvb2x0aXApO1xuICB9XG5cbiAgZ2V0VG9vbHRpcChyb3dEYXRhOiBhbnkpOiBhbnkge1xuICAgIGlmICghdGhpcy5oYXNUb29sdGlwKCkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGxldCB0b29sdGlwO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnRvb2x0aXAudmFsdWUpKSB7XG4gICAgICB0b29sdGlwID0gdGhpcy50b29sdGlwLnZhbHVlO1xuICAgIH0gZWxzZSBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy50b29sdGlwLmZ1bmN0aW9uKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdG9vbHRpcCA9IHRoaXMudG9vbHRpcC5mdW5jdGlvbihyb3dEYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdvLXRhYmxlLWNvbHVtbiB0b29sdGlwLWZ1bmN0aW9uIGRpZG50IHdvcmtlZCcpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0b29sdGlwID0gVXRpbC5pc0RlZmluZWQodGhpcy5yZW5kZXJlcikgPyB0aGlzLnJlbmRlcmVyLmdldFRvb2x0aXAocm93RGF0YVt0aGlzLm5hbWVdLCByb3dEYXRhKSA6IHJvd0RhdGFbdGhpcy5uYW1lXTtcbiAgICB9XG4gICAgcmV0dXJuIHRvb2x0aXA7XG4gIH1cblxuICBnZXRNaW5XaWR0aCgpIHtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy53aWR0aCkpIHtcbiAgICAgIHJldHVybiB0aGlzLndpZHRoO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5taW5XaWR0aDtcbiAgfVxuXG4gIGdldE1pbldpZHRoVmFsdWUoKSB7XG4gICAgcmV0dXJuIFV0aWwuZXh0cmFjdFBpeGVsc1ZhbHVlKHRoaXMubWluV2lkdGgsIENvZGVzLkRFRkFVTFRfQ09MVU1OX01JTl9XSURUSCk7XG4gIH1cblxuICBnZXRNYXhXaWR0aFZhbHVlKCkge1xuICAgIGNvbnN0IHZhbHVlID0gVXRpbC5leHRyYWN0UGl4ZWxzVmFsdWUodGhpcy5tYXhXaWR0aCk7XG4gICAgcmV0dXJuIHZhbHVlID8gdmFsdWUgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBzZXRSZW5kZXJXaWR0aChob3Jpem9udGFsU2Nyb2xsZWQ6IGJvb2xlYW4sIGNsaWVudFdpZHRoOiBudW1iZXIpIHtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy53aWR0aCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkZWZhdWx0V2lkdGggPSAoaG9yaXpvbnRhbFNjcm9sbGVkKSA/IHVuZGVmaW5lZCA6ICdhdXRvJztcbiAgICB0aGlzLndpZHRoID0gVXRpbC5pc0RlZmluZWQodGhpcy5ET01XaWR0aCkgPyAodGhpcy5nZXRET01XaWR0aChjbGllbnRXaWR0aCkgKyAncHgnKSA6IGRlZmF1bHRXaWR0aDtcbiAgfVxuXG4gIGdldERPTVdpZHRoKHZhbDogYW55KTogbnVtYmVyIHtcbiAgICBsZXQgRE9NV2lkdGg7XG4gICAgY29uc3QgcHhWYWwgPSBVdGlsLmV4dHJhY3RQaXhlbHNWYWx1ZSh2YWwpO1xuXG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHB4VmFsKSkge1xuICAgICAgRE9NV2lkdGggPSBweFZhbDtcbiAgICAgIGNvbnN0IG1pblZhbHVlID0gdGhpcy5nZXRNaW5XaWR0aFZhbHVlKCk7XG4gICAgICBpZiAoVXRpbC5pc0RlZmluZWQobWluVmFsdWUpICYmIHB4VmFsID4gMCAmJiBweFZhbCA8IG1pblZhbHVlKSB7XG4gICAgICAgIERPTVdpZHRoID0gbWluVmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLm1heFdpZHRoKSkge1xuICAgICAgICBjb25zdCBtYXhWYWx1ZSA9IFV0aWwuZXh0cmFjdFBpeGVsc1ZhbHVlKHRoaXMubWF4V2lkdGgpO1xuICAgICAgICBpZiAoVXRpbC5pc0RlZmluZWQobWF4VmFsdWUpICYmIHB4VmFsID4gbWF4VmFsdWUpIHtcbiAgICAgICAgICBET01XaWR0aCA9IG1heFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICB9XG4gICAgcmV0dXJuIERPTVdpZHRoO1xuICB9XG5cbiAgc2V0IHdpZHRoKHZhbDogc3RyaW5nKSB7XG4gICAgbGV0IHdpZHRoVmFsID0gdmFsO1xuICAgIGxldCBET01XaWR0aCA9IHRoaXMuZ2V0RE9NV2lkdGgodmFsKTtcbiAgICBjb25zdCBweFZhbCA9IFV0aWwuZXh0cmFjdFBpeGVsc1ZhbHVlKERPTVdpZHRoKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQocHhWYWwpKSB7XG4gICAgICB0aGlzLkRPTVdpZHRoID0gcHhWYWw7XG4gICAgICB3aWR0aFZhbCA9IHB4VmFsICsgJ3B4JztcbiAgICB9XG5cbiAgICB0aGlzLl93aWR0aCA9IHdpZHRoVmFsO1xuICB9XG5cbiAgZ2V0IHdpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xuICB9XG5cblxuICBnZXRXaWR0aFRvU3RvcmUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fd2lkdGg7XG4gIH1cblxuICBzZXRXaWR0aCh2YWw6IG51bWJlcikge1xuICAgIHRoaXMud2lkdGggPSB2YWwgKyAncHgnO1xuICAgIHRoaXMuRE9NV2lkdGggPSB2YWw7XG4gIH1cblxuICBnZXRUaXRsZUFsaWduQ2xhc3MoKSB7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuZGVmaW5pdGlvbikpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlZmluaXRpb24udGl0bGVBbGlnbiB8fCBDb2Rlcy5DT0xVTU5fVElUTEVfQUxJR05fQ0VOVEVSO1xuICAgIH1cbiAgICAvLyBkZWZhdWx0IHRpdGxlIGFsaWduXG4gICAgcmV0dXJuIENvZGVzLkNPTFVNTl9USVRMRV9BTElHTl9DRU5URVI7XG4gIH1cblxuICBnZXRGaWx0ZXJWYWx1ZShjZWxsVmFsdWU6IGFueSwgcm93VmFsdWU/OiBhbnkpOiBhbnlbXSB7XG4gICAgaWYgKHRoaXMucmVuZGVyZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmdldEZpbHRlcihjZWxsVmFsdWUsIHJvd1ZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtjZWxsVmFsdWVdO1xuICAgIH1cbiAgfVxuXG4gIHVzZUN1c3RvbUZpbHRlckZ1bmN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlYXJjaGluZyAmJiB0aGlzLnZpc2libGUgJiYgdGhpcy5yZW5kZXJlciAhPSBudWxsICYmIHRoaXMucmVuZGVyZXIuZmlsdGVyRnVuY3Rpb24gIT0gbnVsbDtcbiAgfVxuXG4gIHVzZVF1aWNrZmlsdGVyRnVuY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VhcmNoaW5nICYmIHRoaXMudmlzaWJsZSAmJiAhKHRoaXMucmVuZGVyZXIgIT0gbnVsbCAmJiB0aGlzLnJlbmRlcmVyLmZpbHRlckZ1bmN0aW9uICE9IG51bGwpO1xuICB9XG5cbn1cbiJdfQ==