@datagrok-libraries/utils 4.1.27 → 4.1.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/css/forms.css ADDED
@@ -0,0 +1,36 @@
1
+ .d4-multi-form {
2
+ overflow: scroll!important;
3
+ }
4
+
5
+ .d4-multi-form-header {
6
+ width: 100px;
7
+ margin-right: 10px;
8
+ padding-top: 10px;
9
+ }
10
+
11
+ .d4-multi-form-column-name {
12
+ font-weight: bold;
13
+ position: absolute;
14
+ left: 10px;
15
+ }
16
+
17
+ .d4-multi-form-form {
18
+ min-width: 170px;
19
+ }
20
+
21
+ .d4-multi-form-form.temp {
22
+ position: absolute;
23
+ visibility: hidden;
24
+ }
25
+
26
+ .d4-multi-form-value {
27
+ }
28
+
29
+ .d4-multi-form #vlist {
30
+ height: initial;
31
+ overflow-x: visible!important;
32
+ }
33
+
34
+ .d4-multi-form .ui-input-editor {
35
+ padding: initial;
36
+ }
package/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "email": "amuzychyna@datagrok.ai"
9
9
  },
10
10
  "fullName": "Utils",
11
- "version": "4.1.27",
11
+ "version": "4.1.28",
12
12
  "description": "Common utilities",
13
13
  "dependencies": {
14
14
  "cash-dom": "^8.1.1",
@@ -0,0 +1,26 @@
1
+ import * as DG from 'datagrok-api/dg';
2
+ import '../../css/forms.css';
3
+ export declare class FormsViewer extends DG.JsViewer {
4
+ get type(): string;
5
+ fieldsColumnNames: string[];
6
+ colorCode: boolean;
7
+ showCurrentRow: boolean;
8
+ showMouseOverRow: boolean;
9
+ showSelectedRows: boolean;
10
+ showFixedRows: boolean;
11
+ indexes: number[];
12
+ columnHeadersDiv: HTMLDivElement;
13
+ virtualView: DG.VirtualView;
14
+ set dataframe(df: DG.DataFrame);
15
+ set fixedRowNumbers(idxs: number[]);
16
+ set columns(colNames: string[]);
17
+ constructor();
18
+ onTableAttached(): void;
19
+ onPropertyChanged(property: DG.Property): void;
20
+ renderHeader(): void;
21
+ get currentRowPos(): 0 | null;
22
+ get mouseOverPos(): 0 | 1 | null;
23
+ renderForm(row: number): HTMLDivElement;
24
+ render(): void;
25
+ }
26
+ //# sourceMappingURL=forms-viewer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forms-viewer.d.ts","sourceRoot":"","sources":["forms-viewer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAQtC,OAAO,qBAAqB,CAAC;AAG7B,qBAAa,WAAY,SAAQ,EAAE,CAAC,QAAQ;IAE1C,IAAI,IAAI,IAAI,MAAM,CAA0B;IAE5C,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,UAAS;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,gBAAgB,EAAE,cAAc,CAAC;IACjC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC;IAG5B,IAAI,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,EAG7B;IAED,IAAI,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,EAOjC;IAED,IAAI,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,EAG7B;;IAwBD,eAAe;IAoBf,iBAAiB,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,GAAG,IAAI;IAO9C,YAAY;IAkBZ,IAAI,aAAa,aAA6C;IAC9D,IAAI,YAAY,iBAA2E;IAE3F,UAAU,CAAC,GAAG,EAAE,MAAM;IAqCtB,MAAM;CAcP"}
@@ -0,0 +1,118 @@
1
+ import * as DG from 'datagrok-api/dg';
2
+ import * as ui from 'datagrok-api/ui';
3
+ import * as grok from 'datagrok-api/grok';
4
+ import { filter } from 'rxjs/operators';
5
+ import '../../css/forms.css';
6
+ export class FormsViewer extends DG.JsViewer {
7
+ get type() { return 'FormsViewer'; }
8
+ set dataframe(df) {
9
+ this.dataFrame = df;
10
+ this.onTableAttached();
11
+ }
12
+ set fixedRowNumbers(idxs) {
13
+ this.indexes = idxs;
14
+ this.showCurrentRow = false;
15
+ this.showMouseOverRow = false;
16
+ this.showSelectedRows = false;
17
+ this.showFixedRows = true;
18
+ this.render();
19
+ }
20
+ set columns(colNames) {
21
+ this.fieldsColumnNames = colNames;
22
+ this.render();
23
+ }
24
+ constructor() {
25
+ super();
26
+ this.showFixedRows = false;
27
+ // properties
28
+ this.fieldsColumnNames = this.addProperty('fieldsColumnNames', DG.TYPE.COLUMN_LIST);
29
+ this.colorCode = this.bool('colorCode', true);
30
+ this.showCurrentRow = this.bool('showCurrentRow', true);
31
+ this.showMouseOverRow = this.bool('showMouseOverRow', true);
32
+ this.showSelectedRows = this.bool('showSelectedRows', true);
33
+ //fields
34
+ this.indexes = [];
35
+ // init
36
+ this.root.classList.add('d4-multi-form');
37
+ this.columnHeadersDiv = ui.div([], 'd4-multi-form-header');
38
+ this.virtualView = ui.virtualView(0, (i) => this.renderForm(i), false, 1);
39
+ const formWithHeaderDiv = ui.divH([this.columnHeadersDiv, this.virtualView.root]);
40
+ formWithHeaderDiv.setAttribute('style', 'overflow:visible!important');
41
+ this.root.appendChild(formWithHeaderDiv);
42
+ }
43
+ onTableAttached() {
44
+ if (this.fieldsColumnNames === null)
45
+ this.fieldsColumnNames = this.dataFrame.columns.names();
46
+ const sub = (stream, action) => {
47
+ this.subs.push(DG.debounce(stream, 50).subscribe((_) => action()));
48
+ };
49
+ sub(this.dataFrame.selection.onChanged, () => this.render());
50
+ sub(this.dataFrame.filter.onChanged, () => this.render());
51
+ sub(this.dataFrame.onCurrentRowChanged.pipe(filter((_) => this.showCurrentRow)), () => this.virtualView.refreshItem(this.currentRowPos));
52
+ sub(this.dataFrame.onMouseOverRowChanged.pipe(filter((_) => this.showMouseOverRow)), () => this.virtualView.refreshItem(this.mouseOverPos));
53
+ this.render();
54
+ }
55
+ onPropertyChanged(property) {
56
+ if (property.name === 'showCurrentRow' || property.name === 'showMouseOverRow' || property.name === 'showSelectedRows' &&
57
+ property.get(this) === true && this.showFixedRows)
58
+ grok.shell.warning(`Cannot set ${property.name} to true since fixed rows are set`);
59
+ this.render();
60
+ }
61
+ renderHeader() {
62
+ ui.empty(this.columnHeadersDiv);
63
+ const form = this.renderForm(0);
64
+ form.classList.add('temp');
65
+ document.body.appendChild(form);
66
+ for (const name of this.fieldsColumnNames) {
67
+ const formField = form.querySelector('[column="' + name + '"]');
68
+ if (formField) {
69
+ const columnLabel = ui.bind(this.dataFrame.col(name), ui.divText(name, 'd4-multi-form-column-name'));
70
+ columnLabel.style.top = `${formField.offsetTop + 10}px`;
71
+ this.columnHeadersDiv.appendChild(columnLabel);
72
+ }
73
+ }
74
+ form.remove();
75
+ }
76
+ get currentRowPos() { return this.showCurrentRow ? 0 : null; }
77
+ get mouseOverPos() { return this.showMouseOverRow ? (this.showCurrentRow ? 1 : 0) : null; }
78
+ renderForm(row) {
79
+ if (this.showCurrentRow && row === this.currentRowPos)
80
+ row = this.dataFrame.currentRowIdx;
81
+ else if (this.showMouseOverRow && row === this.mouseOverPos)
82
+ row = this.dataFrame.mouseOverRowIdx;
83
+ else
84
+ row = this.indexes[row - (this.showCurrentRow ? 1 : 0) - (this.showMouseOverRow ? 1 : 0)];
85
+ const form = ui.divV(this.fieldsColumnNames.map((name) => {
86
+ var _a;
87
+ if (row === -1)
88
+ return ui.div();
89
+ const input = DG.InputBase.forColumn(this.dataFrame.col(name));
90
+ if (input) {
91
+ input.input.setAttribute('column', name);
92
+ input.value = this.dataFrame.get(name, row);
93
+ if (this.colorCode) {
94
+ const grid = ((_a = this.view) !== null && _a !== void 0 ? _a : grok.shell.tv).grid;
95
+ const color = grid.cell(name, row).color;
96
+ input.input.style.color = DG.Color.toHtml(DG.Color.getContrastColor(color));
97
+ input.input.style.backgroundColor = DG.Color.toHtml(color);
98
+ }
99
+ return input.input;
100
+ }
101
+ return ui.div();
102
+ }), 'd4-multi-form-form');
103
+ form.onclick = () => this.dataFrame.currentRowIdx = row;
104
+ form.onmouseenter = () => this.dataFrame.mouseOverRowIdx = row;
105
+ form.onmouseleave = () => this.dataFrame.mouseOverRowIdx = -1;
106
+ return form;
107
+ }
108
+ render() {
109
+ if (!this.showFixedRows) {
110
+ if (this.showSelectedRows)
111
+ this.indexes = this.dataFrame.selection.trueCount > 0 ? Array.from(this.dataFrame.selection.getSelectedIndexes()) : [];
112
+ }
113
+ ui.empty(this.columnHeadersDiv);
114
+ this.renderHeader();
115
+ this.virtualView.setData(this.indexes.length + (this.showCurrentRow ? 1 : 0) + (this.showMouseOverRow ? 1 : 0), (i) => this.renderForm(i));
116
+ }
117
+ }
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybXMtdmlld2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZm9ybXMtdmlld2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBRzFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUd4QyxPQUFPLHFCQUFxQixDQUFDO0FBRzdCLE1BQU0sT0FBTyxXQUFZLFNBQVEsRUFBRSxDQUFDLFFBQVE7SUFFMUMsSUFBSSxJQUFJLEtBQWEsT0FBTyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBYTVDLElBQUksU0FBUyxDQUFDLEVBQWdCO1FBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxlQUFlLENBQUMsSUFBYztRQUNoQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDOUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxRQUFrQjtRQUM1QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsUUFBUSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQ7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQTFCVixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQTRCcEIsYUFBYTtR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UyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5cbmltcG9ydCAnLi4vLi4vY3NzL2Zvcm1zLmNzcyc7XG5cblxuZXhwb3J0IGNsYXNzIEZvcm1zVmlld2VyIGV4dGVuZHMgREcuSnNWaWV3ZXIge1xuXG4gIGdldCB0eXBlKCk6IHN0cmluZyB7IHJldHVybiAnRm9ybXNWaWV3ZXInOyB9XG5cbiAgZmllbGRzQ29sdW1uTmFtZXM6IHN0cmluZ1tdO1xuICBjb2xvckNvZGU6IGJvb2xlYW47XG4gIHNob3dDdXJyZW50Um93OiBib29sZWFuO1xuICBzaG93TW91c2VPdmVyUm93OiBib29sZWFuO1xuICBzaG93U2VsZWN0ZWRSb3dzOiBib29sZWFuO1xuICBzaG93Rml4ZWRSb3dzID0gZmFsc2U7XG4gIGluZGV4ZXM6IG51bWJlcltdO1xuICBjb2x1bW5IZWFkZXJzRGl2OiBIVE1MRGl2RWxlbWVudDtcbiAgdmlydHVhbFZpZXc6IERHLlZpcnR1YWxWaWV3O1xuXG5cbiAgc2V0IGRhdGFmcmFtZShkZjogREcuRGF0YUZyYW1lKSB7XG4gICAgdGhpcy5kYXRhRnJhbWUgPSBkZjtcbiAgICB0aGlzLm9uVGFibGVBdHRhY2hlZCgpO1xuICB9XG5cbiAgc2V0IGZpeGVkUm93TnVtYmVycyhpZHhzOiBudW1iZXJbXSkge1xuICAgIHRoaXMuaW5kZXhlcyA9IGlkeHM7XG4gICAgdGhpcy5zaG93Q3VycmVudFJvdyA9IGZhbHNlO1xuICAgIHRoaXMuc2hvd01vdXNlT3ZlclJvdyA9IGZhbHNlO1xuICAgIHRoaXMuc2hvd1NlbGVjdGVkUm93cyA9IGZhbHNlO1xuICAgIHRoaXMuc2hvd0ZpeGVkUm93cyA9IHRydWU7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHNldCBjb2x1bW5zKGNvbE5hbWVzOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuZmllbGRzQ29sdW1uTmFtZXMgPSBjb2xOYW1lcztcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIC8vIHByb3BlcnRpZXNcbiAgICB0aGlzLmZpZWxkc0NvbHVtbk5hbWVzID0gdGhpcy5hZGRQcm9wZXJ0eSgnZmllbGRzQ29sdW1uTmFtZXMnLCBERy5UWVBFLkNPTFVNTl9MSVNUKTtcbiAgICB0aGlzLmNvbG9yQ29kZSA9IHRoaXMuYm9vbCgnY29sb3JDb2RlJywgdHJ1ZSk7XG4gICAgdGhpcy5zaG93Q3VycmVudFJvdyA9IHRoaXMuYm9vbCgnc2hvd0N1cnJlbnRSb3cnLCB0cnVlKTtcbiAgICB0aGlzLnNob3dNb3VzZU92ZXJSb3cgPSB0aGlzLmJvb2woJ3Nob3dNb3VzZU92ZXJSb3cnLCB0cnVlKTtcbiAgICB0aGlzLnNob3dTZWxlY3RlZFJvd3MgPSB0aGlzLmJvb2woJ3Nob3dTZWxlY3RlZFJvd3MnLCB0cnVlKTtcblxuICAgIC8vZmllbGRzXG4gICAgdGhpcy5pbmRleGVzID0gW107XG5cbiAgICAvLyBpbml0XG4gICAgdGhpcy5yb290LmNsYXNzTGlzdC5hZGQoJ2Q0LW11bHRpLWZvcm0nKTtcbiAgICB0aGlzLmNvbHVtbkhlYWRlcnNEaXYgPSB1aS5kaXYoW10sICdkNC1tdWx0aS1mb3JtLWhlYWRlcicpO1xuICAgIHRoaXMudmlydHVhbFZpZXcgPSB1aS52aXJ0dWFsVmlldygwLCAoaTogbnVtYmVyKSA9PiB0aGlzLnJlbmRlckZvcm0oaSksIGZhbHNlLCAxKTtcbiAgICBjb25zdCBmb3JtV2l0aEhlYWRlckRpdiA9IHVpLmRpdkgoW3RoaXMuY29sdW1uSGVhZGVyc0RpdiwgdGhpcy52aXJ0dWFsVmlldy5yb290XSk7XG4gICAgZm9ybVdpdGhIZWFkZXJEaXYuc2V0QXR0cmlidXRlKCdzdHlsZScsICdvdmVyZmxvdzp2aXNpYmxlIWltcG9ydGFudCcpO1xuICAgIHRoaXMucm9vdC5hcHBlbmRDaGlsZChmb3JtV2l0aEhlYWRlckRpdik7XG4gIH1cblxuICBvblRhYmxlQXR0YWNoZWQoKSB7XG4gICAgaWYgKHRoaXMuZmllbGRzQ29sdW1uTmFtZXMgPT09IG51bGwpXG4gICAgICB0aGlzLmZpZWxkc0NvbHVtbk5hbWVzID0gdGhpcy5kYXRhRnJhbWUuY29sdW1ucy5uYW1lcygpO1xuXG4gICAgY29uc3Qgc3ViID0gKHN0cmVhbTogT2JzZXJ2YWJsZTx1bmtub3duPiwgYWN0aW9uOiBGdW5jdGlvbikgPT4ge1xuICAgICAgdGhpcy5zdWJzLnB1c2goREcuZGVib3VuY2Uoc3RyZWFtLCA1MCkuc3Vic2NyaWJlKChfKSA9PiBhY3Rpb24oKSkpO1xuICAgIH07XG5cbiAgICBzdWIodGhpcy5kYXRhRnJhbWUuc2VsZWN0aW9uLm9uQ2hhbmdlZCwgKCkgPT4gdGhpcy5yZW5kZXIoKSk7XG4gICAgc3ViKHRoaXMuZGF0YUZyYW1lLmZpbHRlci5vbkNoYW5nZWQsICgpID0+IHRoaXMucmVuZGVyKCkpO1xuXG4gICAgc3ViKHRoaXMuZGF0YUZyYW1lLm9uQ3VycmVudFJvd0NoYW5nZWQucGlwZShmaWx0ZXIoKF8pID0+IHRoaXMuc2hvd0N1cnJlbnRSb3cpKSxcbiAgICAgICgpID0+IHRoaXMudmlydHVhbFZpZXcucmVmcmVzaEl0ZW0odGhpcy5jdXJyZW50Um93UG9zISkpO1xuXG4gICAgc3ViKHRoaXMuZGF0YUZyYW1lLm9uTW91c2VPdmVyUm93Q2hhbmdlZC5waXBlKGZpbHRlcigoXykgPT4gdGhpcy5zaG93TW91c2VPdmVyUm93KSksXG4gICAgICAoKSA9PiB0aGlzLnZpcnR1YWxWaWV3LnJlZnJlc2hJdGVtKHRoaXMubW91c2VPdmVyUG9zISkpO1xuXG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG9uUHJvcGVydHlDaGFuZ2VkKHByb3BlcnR5OiBERy5Qcm9wZXJ0eSk6IHZvaWQge1xuICAgIGlmIChwcm9wZXJ0eS5uYW1lID09PSAnc2hvd0N1cnJlbnRSb3cnIHx8IHByb3BlcnR5Lm5hbWUgPT09ICdzaG93TW91c2VPdmVyUm93JyB8fCBwcm9wZXJ0eS5uYW1lID09PSAnc2hvd1NlbGVjdGVkUm93cycgJiZcbiAgICAgIHByb3BlcnR5LmdldCh0aGlzKSA9PT0gdHJ1ZSAmJiB0aGlzLnNob3dGaXhlZFJvd3MpXG4gICAgICBncm9rLnNoZWxsLndhcm5pbmcoYENhbm5vdCBzZXQgJHtwcm9wZXJ0eS5uYW1lfSB0byB0cnVlIHNpbmNlIGZpeGVkIHJvd3MgYXJlIHNldGApO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByZW5kZXJIZWFkZXIoKSB7XG4gICAgdWkuZW1wdHkodGhpcy5jb2x1bW5IZWFkZXJzRGl2KTtcbiAgICBjb25zdCBmb3JtID0gdGhpcy5yZW5kZXJGb3JtKDApO1xuICAgIGZvcm0uY2xhc3NMaXN0LmFkZCgndGVtcCcpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZm9ybSk7XG5cbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgdGhpcy5maWVsZHNDb2x1bW5OYW1lcykge1xuICAgICAgY29uc3QgZm9ybUZpZWxkID0gZm9ybS5xdWVyeVNlbGVjdG9yKCdbY29sdW1uPVwiJyArIG5hbWUgKyAnXCJdJyk7XG4gICAgICBpZiAoZm9ybUZpZWxkKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbkxhYmVsID0gdWkuYmluZCh0aGlzLmRhdGFGcmFtZS5jb2wobmFtZSksIHVpLmRpdlRleHQobmFtZSwgJ2Q0LW11bHRpLWZvcm0tY29sdW1uLW5hbWUnKSk7XG4gICAgICAgIGNvbHVtbkxhYmVsLnN0eWxlLnRvcCA9IGAkeyhmb3JtRmllbGQgYXMgSFRNTEVsZW1lbnQpLm9mZnNldFRvcCArIDEwfXB4YDtcbiAgICAgICAgdGhpcy5jb2x1bW5IZWFkZXJzRGl2LmFwcGVuZENoaWxkKGNvbHVtbkxhYmVsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3JtLnJlbW92ZSgpO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRSb3dQb3MoKSB7IHJldHVybiB0aGlzLnNob3dDdXJyZW50Um93ID8gMCA6IG51bGw7IH1cbiAgZ2V0IG1vdXNlT3ZlclBvcygpIHsgcmV0dXJuIHRoaXMuc2hvd01vdXNlT3ZlclJvdyA/ICh0aGlzLnNob3dDdXJyZW50Um93ID8gMSA6IDApIDogbnVsbDsgfVxuXG4gIHJlbmRlckZvcm0ocm93OiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5zaG93Q3VycmVudFJvdyAmJiByb3cgPT09IHRoaXMuY3VycmVudFJvd1BvcylcbiAgICAgIHJvdyA9IHRoaXMuZGF0YUZyYW1lLmN1cnJlbnRSb3dJZHg7XG4gICAgZWxzZSBpZiAodGhpcy5zaG93TW91c2VPdmVyUm93ICYmIHJvdyA9PT0gdGhpcy5tb3VzZU92ZXJQb3MpXG4gICAgICByb3cgPSB0aGlzLmRhdGFGcmFtZS5tb3VzZU92ZXJSb3dJZHg7XG4gICAgZWxzZVxuICAgICAgcm93ID0gdGhpcy5pbmRleGVzW3JvdyAtICh0aGlzLnNob3dDdXJyZW50Um93ID8gMSA6IDApIC0gKHRoaXMuc2hvd01vdXNlT3ZlclJvdyA/IDEgOiAwKV07XG5cbiAgICBjb25zdCBmb3JtID0gdWkuZGl2VihcbiAgICAgIHRoaXMuZmllbGRzQ29sdW1uTmFtZXMubWFwKChuYW1lKSA9PiB7XG4gICAgICAgIGlmIChyb3cgPT09IC0xKVxuICAgICAgICAgIHJldHVybiB1aS5kaXYoKTtcblxuICAgICAgICBjb25zdCBpbnB1dCA9IERHLklucHV0QmFzZS5mb3JDb2x1bW4odGhpcy5kYXRhRnJhbWUuY29sKG5hbWUpISk7XG4gICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgIGlucHV0LmlucHV0LnNldEF0dHJpYnV0ZSgnY29sdW1uJywgbmFtZSk7XG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB0aGlzLmRhdGFGcmFtZS5nZXQobmFtZSwgcm93KTtcblxuICAgICAgICAgIGlmICh0aGlzLmNvbG9yQ29kZSkge1xuICAgICAgICAgICAgY29uc3QgZ3JpZCA9ICgodGhpcy52aWV3ID8/IGdyb2suc2hlbGwudHYpIGFzIERHLlRhYmxlVmlldykuZ3JpZDtcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yID0gZ3JpZC5jZWxsKG5hbWUsIHJvdykuY29sb3I7XG4gICAgICAgICAgICBpbnB1dC5pbnB1dC5zdHlsZS5jb2xvciA9IERHLkNvbG9yLnRvSHRtbChERy5Db2xvci5nZXRDb250cmFzdENvbG9yKGNvbG9yKSk7XG4gICAgICAgICAgICBpbnB1dC5pbnB1dC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBERy5Db2xvci50b0h0bWwoY29sb3IpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBpbnB1dC5pbnB1dDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdWkuZGl2KCk7XG4gICAgICB9LFxuICAgICAgKSwgJ2Q0LW11bHRpLWZvcm0tZm9ybScpO1xuXG4gICAgZm9ybS5vbmNsaWNrID0gKCkgPT4gdGhpcy5kYXRhRnJhbWUuY3VycmVudFJvd0lkeCA9IHJvdztcbiAgICBmb3JtLm9ubW91c2VlbnRlciA9ICgpID0+IHRoaXMuZGF0YUZyYW1lLm1vdXNlT3ZlclJvd0lkeCA9IHJvdztcbiAgICBmb3JtLm9ubW91c2VsZWF2ZSA9ICgpID0+IHRoaXMuZGF0YUZyYW1lLm1vdXNlT3ZlclJvd0lkeCA9IC0xO1xuICAgIHJldHVybiBmb3JtO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICghdGhpcy5zaG93Rml4ZWRSb3dzKSB7XG4gICAgICBpZiAodGhpcy5zaG93U2VsZWN0ZWRSb3dzKVxuICAgICAgICB0aGlzLmluZGV4ZXMgPSB0aGlzLmRhdGFGcmFtZS5zZWxlY3Rpb24udHJ1ZUNvdW50ID4gMCA/IEFycmF5LmZyb20odGhpcy5kYXRhRnJhbWUuc2VsZWN0aW9uLmdldFNlbGVjdGVkSW5kZXhlcygpKSA6IFtdO1xuICAgIH1cblxuICAgIHVpLmVtcHR5KHRoaXMuY29sdW1uSGVhZGVyc0Rpdik7XG5cbiAgICB0aGlzLnJlbmRlckhlYWRlcigpO1xuXG4gICAgdGhpcy52aXJ0dWFsVmlldy5zZXREYXRhKFxuICAgICAgdGhpcy5pbmRleGVzLmxlbmd0aCArICh0aGlzLnNob3dDdXJyZW50Um93ID8gMSA6IDApICsgKHRoaXMuc2hvd01vdXNlT3ZlclJvdyA/IDEgOiAwKSxcbiAgICAgIChpOiBudW1iZXIpID0+IHRoaXMucmVuZGVyRm9ybShpKSk7XG4gIH1cbn1cbiJdfQ==