@perspective-dev/viewer-datagrid 4.3.0 → 4.4.1
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/dist/cdn/perspective-viewer-datagrid.js +4 -22
- package/dist/cdn/perspective-viewer-datagrid.js.map +4 -4
- package/dist/css/perspective-viewer-datagrid-toolbar.css +1 -1
- package/dist/css/perspective-viewer-datagrid.css +1 -1
- package/dist/esm/color_utils.d.ts +22 -0
- package/dist/esm/custom_elements/datagrid.d.ts +5 -5
- package/dist/esm/data_listener/format_cell.d.ts +1 -1
- package/dist/esm/data_listener/formatter_cache.d.ts +1 -1
- package/dist/esm/data_listener/index.d.ts +3 -2
- package/dist/esm/event_handlers/click/edit_click.d.ts +3 -2
- package/dist/esm/event_handlers/click.d.ts +4 -6
- package/dist/esm/event_handlers/dispatch_click.d.ts +3 -2
- package/dist/esm/event_handlers/expand_collapse.d.ts +1 -1
- package/dist/esm/event_handlers/focus.d.ts +4 -5
- package/dist/esm/event_handlers/header_click.d.ts +5 -3
- package/dist/esm/event_handlers/keydown/edit_keydown.d.ts +3 -4
- package/dist/esm/event_handlers/select_region.d.ts +3 -1
- package/dist/esm/event_handlers/sort.d.ts +8 -7
- package/dist/esm/model/create.d.ts +1 -1
- package/dist/esm/perspective-viewer-datagrid.js +3 -3
- package/dist/esm/perspective-viewer-datagrid.js.map +4 -4
- package/dist/esm/plugin/activate.d.ts +1 -1
- package/dist/esm/plugin/column_style_controls.d.ts +1 -1
- package/dist/esm/style_handlers/body.d.ts +3 -3
- package/dist/esm/style_handlers/column_header.d.ts +4 -3
- package/dist/esm/style_handlers/consolidated.d.ts +3 -47
- package/dist/esm/style_handlers/editable.d.ts +3 -2
- package/dist/esm/style_handlers/focus.d.ts +4 -4
- package/dist/esm/style_handlers/group_header.d.ts +1 -1
- package/dist/esm/style_handlers/table_cell/boolean.d.ts +1 -1
- package/dist/esm/style_handlers/table_cell/cell_flash.d.ts +1 -1
- package/dist/esm/style_handlers/table_cell/datetime.d.ts +6 -2
- package/dist/esm/style_handlers/table_cell/numeric.d.ts +1 -1
- package/dist/esm/style_handlers/table_cell/row_header.d.ts +1 -1
- package/dist/esm/style_handlers/table_cell/string.d.ts +1 -1
- package/dist/esm/style_handlers/types.d.ts +0 -4
- package/dist/esm/types.d.ts +10 -17
- package/package.json +3 -5
- package/src/css/mitered-headers.css +64 -0
- package/src/css/perspective-viewer-datagrid.css +6 -0
- package/src/{less/pro.less → css/pro.css} +32 -31
- package/src/css/regular_table.css +589 -0
- package/src/{less/row-hover.less → css/row-hover.css} +48 -29
- package/src/{less/scrollbar.less → css/scrollbar.css} +16 -15
- package/src/{less/sub-cell-scroll.less → css/sub-cell-scroll.css} +14 -13
- package/src/{less/toolbar.less → css/toolbar.css} +57 -39
- package/src/ts/color_utils.ts +144 -16
- package/src/ts/custom_elements/datagrid.ts +11 -12
- package/src/ts/custom_elements/toolbar.ts +4 -5
- package/src/ts/data_listener/format_cell.ts +28 -9
- package/src/ts/data_listener/formatter_cache.ts +1 -1
- package/src/ts/data_listener/index.ts +4 -8
- package/src/ts/event_handlers/click/edit_click.ts +7 -6
- package/src/ts/event_handlers/click.ts +39 -68
- package/src/ts/event_handlers/dispatch_click.ts +24 -25
- package/src/ts/event_handlers/expand_collapse.ts +7 -7
- package/src/ts/event_handlers/focus.ts +38 -35
- package/src/ts/event_handlers/header_click.ts +101 -62
- package/src/ts/event_handlers/keydown/edit_keydown.ts +49 -52
- package/src/ts/event_handlers/select_region.ts +144 -133
- package/src/ts/event_handlers/sort.ts +16 -24
- package/src/ts/model/column_overrides.ts +13 -4
- package/src/ts/model/create.ts +55 -59
- package/src/ts/model/toolbar.ts +23 -7
- package/src/ts/plugin/activate.ts +120 -92
- package/src/ts/plugin/column_style_controls.ts +1 -1
- package/src/ts/plugin/save.ts +1 -0
- package/src/ts/style_handlers/body.ts +56 -61
- package/src/ts/style_handlers/column_header.ts +16 -19
- package/src/ts/style_handlers/consolidated.ts +22 -123
- package/src/ts/style_handlers/editable.ts +10 -8
- package/src/ts/style_handlers/focus.ts +5 -5
- package/src/ts/style_handlers/group_header.ts +3 -2
- package/src/ts/style_handlers/table_cell/boolean.ts +3 -3
- package/src/ts/style_handlers/table_cell/cell_flash.ts +11 -11
- package/src/ts/style_handlers/table_cell/datetime.ts +14 -11
- package/src/ts/style_handlers/table_cell/numeric.ts +24 -25
- package/src/ts/style_handlers/table_cell/row_header.ts +2 -2
- package/src/ts/style_handlers/table_cell/string.ts +20 -18
- package/src/ts/style_handlers/types.ts +0 -10
- package/src/ts/types.ts +28 -20
- package/dist/esm/event_handlers/deselect_all.d.ts +0 -5
- package/dist/esm/event_handlers/row_select_click.d.ts +0 -4
- package/src/less/mitered-headers.less +0 -65
- package/src/less/regular_table.less +0 -526
- package/src/ts/event_handlers/deselect_all.ts +0 -28
- package/src/ts/event_handlers/row_select_click.ts +0 -92
|
@@ -17,14 +17,10 @@ import {
|
|
|
17
17
|
format_tree_header,
|
|
18
18
|
format_tree_header_row_path,
|
|
19
19
|
} from "./format_tree_header.js";
|
|
20
|
-
import type {
|
|
21
|
-
DatagridModel,
|
|
22
|
-
PerspectiveViewerElement,
|
|
23
|
-
RegularTable,
|
|
24
|
-
Schema,
|
|
25
|
-
} from "../types.js";
|
|
20
|
+
import type { DatagridModel, RegularTable, Schema } from "../types.js";
|
|
26
21
|
import type { CellScalar, DataResponse } from "regular-table/dist/esm/types.js";
|
|
27
|
-
import { ViewConfig, ViewWindow } from "@perspective-dev/client";
|
|
22
|
+
import type { ViewConfig, ViewWindow } from "@perspective-dev/client";
|
|
23
|
+
import type { HTMLPerspectiveViewerElement } from "@perspective-dev/viewer";
|
|
28
24
|
|
|
29
25
|
interface ColumnData {
|
|
30
26
|
__ROW_PATH__?: unknown[][];
|
|
@@ -40,7 +36,7 @@ interface ColumnData {
|
|
|
40
36
|
* @returns A data listener for the plugin.
|
|
41
37
|
*/
|
|
42
38
|
export function createDataListener(
|
|
43
|
-
viewer:
|
|
39
|
+
viewer: HTMLPerspectiveViewerElement,
|
|
44
40
|
): (
|
|
45
41
|
regularTable: RegularTable,
|
|
46
42
|
x0: number,
|
|
@@ -14,10 +14,11 @@ import { CellMetadataBody } from "regular-table/dist/esm/types.js";
|
|
|
14
14
|
import {
|
|
15
15
|
type RegularTable,
|
|
16
16
|
type DatagridModel,
|
|
17
|
-
type PerspectiveViewerElement,
|
|
18
17
|
get_psp_type,
|
|
19
18
|
} from "../../types.js";
|
|
20
19
|
|
|
20
|
+
import type { HTMLPerspectiveViewerElement } from "@perspective-dev/viewer";
|
|
21
|
+
|
|
21
22
|
export function write_cell(
|
|
22
23
|
table: RegularTable,
|
|
23
24
|
model: DatagridModel,
|
|
@@ -56,21 +57,21 @@ export function write_cell(
|
|
|
56
57
|
}
|
|
57
58
|
|
|
58
59
|
export function clickListener(
|
|
59
|
-
|
|
60
|
+
model: DatagridModel,
|
|
60
61
|
table: RegularTable,
|
|
61
|
-
_viewer:
|
|
62
|
+
_viewer: HTMLPerspectiveViewerElement,
|
|
62
63
|
event: MouseEvent,
|
|
63
64
|
): void {
|
|
64
65
|
const meta = table.getMeta(event.target as HTMLElement);
|
|
65
66
|
if (meta?.type === "body" || meta?.type === "column_header") {
|
|
66
|
-
const is_editable2 =
|
|
67
|
-
const is_bool = get_psp_type(
|
|
67
|
+
const is_editable2 = model._is_editable[meta.x];
|
|
68
|
+
const is_bool = get_psp_type(model, meta) === "boolean";
|
|
68
69
|
const is_null = (event.target as Element).classList.contains(
|
|
69
70
|
"psp-null",
|
|
70
71
|
);
|
|
71
72
|
|
|
72
73
|
if (is_editable2 && is_bool && !is_null) {
|
|
73
|
-
write_cell(table,
|
|
74
|
+
write_cell(table, model, event.target as HTMLElement);
|
|
74
75
|
}
|
|
75
76
|
}
|
|
76
77
|
}
|
|
@@ -12,81 +12,52 @@
|
|
|
12
12
|
|
|
13
13
|
import * as edit_click from "./click/edit_click.js";
|
|
14
14
|
import * as edit_keydown from "./keydown/edit_keydown.js";
|
|
15
|
-
import type {
|
|
16
|
-
|
|
17
|
-
PerspectiveViewerElement,
|
|
18
|
-
SelectedPosition,
|
|
19
|
-
} from "../types.js";
|
|
15
|
+
import type { DatagridModel, SelectedPositionMap } from "../types.js";
|
|
16
|
+
import { isEditableMode } from "../types.js";
|
|
20
17
|
import { RegularTableElement } from "regular-table";
|
|
21
|
-
import {
|
|
18
|
+
import type { HTMLPerspectiveViewerElement } from "@perspective-dev/viewer";
|
|
22
19
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
export function is_editable(
|
|
26
|
-
this: DatagridModel,
|
|
27
|
-
viewer: PerspectiveViewerElement,
|
|
28
|
-
allowed: boolean = false,
|
|
29
|
-
): boolean {
|
|
30
|
-
const has_pivots =
|
|
31
|
-
this._config.group_by.length === 0 &&
|
|
32
|
-
this._config.split_by.length === 0;
|
|
33
|
-
const selectable = viewer.hasAttribute("selectable");
|
|
34
|
-
const plugin = viewer.children[0] as
|
|
35
|
-
| HTMLPerspectiveViewerDatagridPluginElement
|
|
36
|
-
| undefined;
|
|
37
|
-
const editable = allowed || !!(plugin?._edit_mode === "EDIT");
|
|
38
|
-
return has_pivots && !selectable && editable;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export function keydownListener(
|
|
42
|
-
this: DatagridModel,
|
|
20
|
+
export function createKeydownListener(
|
|
21
|
+
model: DatagridModel,
|
|
43
22
|
table: RegularTableElement,
|
|
44
|
-
viewer:
|
|
23
|
+
viewer: HTMLPerspectiveViewerElement,
|
|
45
24
|
selected_position_map: SelectedPositionMap,
|
|
46
|
-
|
|
47
|
-
): void {
|
|
48
|
-
|
|
49
|
-
if (
|
|
50
|
-
|
|
51
|
-
|
|
25
|
+
): EventListener {
|
|
26
|
+
return (event: Event): void => {
|
|
27
|
+
const keyEvent = event as KeyboardEvent;
|
|
28
|
+
if (model._edit_mode === "EDIT") {
|
|
29
|
+
if (!isEditableMode(model, viewer)) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
52
32
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
33
|
+
edit_keydown.keydownListener(
|
|
34
|
+
model,
|
|
35
|
+
table,
|
|
36
|
+
viewer,
|
|
37
|
+
selected_position_map,
|
|
38
|
+
keyEvent,
|
|
39
|
+
);
|
|
40
|
+
} else {
|
|
41
|
+
console.debug(
|
|
42
|
+
`Mode ${model._edit_mode} for "keydown" event not yet implemented`,
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
65
46
|
}
|
|
66
47
|
|
|
67
|
-
export function
|
|
68
|
-
|
|
48
|
+
export function createEditClickListener(
|
|
49
|
+
model: DatagridModel,
|
|
69
50
|
table: RegularTableElement,
|
|
70
|
-
viewer:
|
|
71
|
-
|
|
72
|
-
): void {
|
|
73
|
-
|
|
74
|
-
if (
|
|
75
|
-
|
|
76
|
-
|
|
51
|
+
viewer: HTMLPerspectiveViewerElement,
|
|
52
|
+
): EventListener {
|
|
53
|
+
return (event: Event): void => {
|
|
54
|
+
const mouseEvent = event as MouseEvent;
|
|
55
|
+
if (model._edit_mode === "EDIT") {
|
|
56
|
+
if (!isEditableMode(model, viewer)) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
77
59
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
} else if (this._edit_mode === "SELECT_COLUMN") {
|
|
82
|
-
// Not yet implemented
|
|
83
|
-
} else if (this._edit_mode === "SELECT_ROW") {
|
|
84
|
-
// Not yet implemented
|
|
85
|
-
} else if (this._edit_mode === "SELECT_REGION") {
|
|
86
|
-
// Not yet implemented
|
|
87
|
-
} else {
|
|
88
|
-
console.debug(
|
|
89
|
-
`Mode ${this._edit_mode} for "click" event not yet implemented`,
|
|
90
|
-
);
|
|
91
|
-
}
|
|
60
|
+
edit_click.clickListener(model, table, viewer, mouseEvent);
|
|
61
|
+
}
|
|
62
|
+
};
|
|
92
63
|
}
|
|
@@ -12,31 +12,30 @@
|
|
|
12
12
|
|
|
13
13
|
import { RegularTableElement } from "regular-table";
|
|
14
14
|
import getCellConfig from "../get_cell_config.js";
|
|
15
|
-
import type {
|
|
16
|
-
|
|
17
|
-
PerspectiveViewerElement,
|
|
18
|
-
PerspectiveClickDetail,
|
|
19
|
-
} from "../types.js";
|
|
15
|
+
import type { DatagridModel, PerspectiveClickDetail } from "../types.js";
|
|
16
|
+
import type { HTMLPerspectiveViewerElement } from "@perspective-dev/viewer";
|
|
20
17
|
|
|
21
|
-
export
|
|
22
|
-
|
|
18
|
+
export function createDispatchClickListener(
|
|
19
|
+
model: DatagridModel,
|
|
23
20
|
table: RegularTableElement,
|
|
24
|
-
viewer:
|
|
25
|
-
|
|
26
|
-
): Promise<void> {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
21
|
+
viewer: HTMLPerspectiveViewerElement,
|
|
22
|
+
): EventListener {
|
|
23
|
+
return async (event: Event): Promise<void> => {
|
|
24
|
+
const mouseEvent = event as MouseEvent;
|
|
25
|
+
const meta = table.getMeta(mouseEvent.target as HTMLElement);
|
|
26
|
+
if (!meta || meta.type !== "body") return;
|
|
27
|
+
const { x, y } = meta;
|
|
28
|
+
const { row, column_names, config } = await getCellConfig(model, y, x);
|
|
29
|
+
viewer.dispatchEvent(
|
|
30
|
+
new CustomEvent<PerspectiveClickDetail>("perspective-click", {
|
|
31
|
+
bubbles: true,
|
|
32
|
+
composed: true,
|
|
33
|
+
detail: {
|
|
34
|
+
row,
|
|
35
|
+
column_names,
|
|
36
|
+
config,
|
|
37
|
+
},
|
|
38
|
+
}),
|
|
39
|
+
);
|
|
40
|
+
};
|
|
42
41
|
}
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
import type { RegularTable, DatagridModel } from "../types.js";
|
|
14
14
|
|
|
15
15
|
export async function expandCollapseHandler(
|
|
16
|
-
|
|
16
|
+
model: DatagridModel,
|
|
17
17
|
regularTable: RegularTable,
|
|
18
18
|
event: MouseEvent,
|
|
19
19
|
): Promise<void> {
|
|
@@ -24,22 +24,22 @@ export async function expandCollapseHandler(
|
|
|
24
24
|
);
|
|
25
25
|
|
|
26
26
|
if (event.shiftKey && is_collapse) {
|
|
27
|
-
|
|
27
|
+
model._view.set_depth(
|
|
28
28
|
(meta.row_header as unknown[]).filter((x) => x !== undefined)
|
|
29
29
|
.length - 2,
|
|
30
30
|
);
|
|
31
31
|
} else if (event.shiftKey) {
|
|
32
|
-
|
|
32
|
+
model._view.set_depth(
|
|
33
33
|
(meta.row_header as unknown[]).filter((x) => x !== undefined)
|
|
34
34
|
.length - 1,
|
|
35
35
|
);
|
|
36
36
|
} else if (is_collapse) {
|
|
37
|
-
|
|
37
|
+
model._view.collapse(meta.y);
|
|
38
38
|
} else {
|
|
39
|
-
|
|
39
|
+
model._view.expand(meta.y);
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
model._num_rows = await model._view.num_rows();
|
|
43
|
+
model._num_columns = await model._view.num_columns();
|
|
44
44
|
regularTable.draw();
|
|
45
45
|
}
|
|
@@ -10,54 +10,57 @@
|
|
|
10
10
|
// ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃
|
|
11
11
|
// ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
|
|
12
12
|
|
|
13
|
-
import { is_editable } from "./click.js";
|
|
14
13
|
import { write_cell } from "./click/edit_click.js";
|
|
15
14
|
import type {
|
|
16
15
|
RegularTable,
|
|
17
16
|
DatagridModel,
|
|
18
|
-
PerspectiveViewerElement,
|
|
19
17
|
SelectedPosition,
|
|
18
|
+
SelectedPositionMap,
|
|
20
19
|
} from "../types.js";
|
|
20
|
+
import { isEditableMode } from "../types.js";
|
|
21
|
+
import type { HTMLPerspectiveViewerElement } from "@perspective-dev/viewer";
|
|
21
22
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
export function focusoutListener(
|
|
25
|
-
this: DatagridModel,
|
|
23
|
+
export function createFocusoutListener(
|
|
24
|
+
model: DatagridModel,
|
|
26
25
|
table: RegularTable,
|
|
27
|
-
viewer:
|
|
26
|
+
viewer: HTMLPerspectiveViewerElement,
|
|
28
27
|
selected_position_map: SelectedPositionMap,
|
|
29
|
-
|
|
30
|
-
): void {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
if (
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
28
|
+
): EventListener {
|
|
29
|
+
return (event: Event): void => {
|
|
30
|
+
const focusEvent = event as FocusEvent;
|
|
31
|
+
if (isEditableMode(model, viewer) && selected_position_map.has(table)) {
|
|
32
|
+
const target = focusEvent.target as HTMLElement;
|
|
33
|
+
target.classList.remove("psp-error");
|
|
34
|
+
const selectedPosition = selected_position_map.get(table)!;
|
|
35
|
+
selected_position_map.delete(table);
|
|
36
|
+
if (selectedPosition.content !== target.textContent) {
|
|
37
|
+
if (!write_cell(table, model, target)) {
|
|
38
|
+
target.textContent = selectedPosition.content || "";
|
|
39
|
+
target.classList.add("psp-error");
|
|
40
|
+
target.focus();
|
|
41
|
+
}
|
|
41
42
|
}
|
|
42
43
|
}
|
|
43
|
-
}
|
|
44
|
+
};
|
|
44
45
|
}
|
|
45
46
|
|
|
46
|
-
export function
|
|
47
|
-
|
|
47
|
+
export function createFocusinListener(
|
|
48
|
+
_model: DatagridModel,
|
|
48
49
|
table: RegularTable,
|
|
49
|
-
_viewer:
|
|
50
|
+
_viewer: HTMLPerspectiveViewerElement,
|
|
50
51
|
selected_position_map: SelectedPositionMap,
|
|
51
|
-
|
|
52
|
-
): void {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
52
|
+
): EventListener {
|
|
53
|
+
return (event: Event): void => {
|
|
54
|
+
const focusEvent = event as FocusEvent;
|
|
55
|
+
const target = focusEvent.target as HTMLElement;
|
|
56
|
+
const meta = table.getMeta(target);
|
|
57
|
+
if (meta?.type === "body") {
|
|
58
|
+
const new_state: SelectedPosition = {
|
|
59
|
+
x: meta.x,
|
|
60
|
+
y: meta.y,
|
|
61
|
+
content: target.textContent || undefined,
|
|
62
|
+
};
|
|
63
|
+
selected_position_map.set(table, new_state);
|
|
64
|
+
}
|
|
65
|
+
};
|
|
63
66
|
}
|
|
@@ -12,74 +12,113 @@
|
|
|
12
12
|
|
|
13
13
|
import { sortHandler } from "./sort.js";
|
|
14
14
|
import { expandCollapseHandler } from "./expand_collapse.js";
|
|
15
|
-
import type {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
export async function mousedown_listener(
|
|
22
|
-
this: DatagridModel,
|
|
15
|
+
import type { RegularTable, DatagridModel } from "../types.js";
|
|
16
|
+
import type { HTMLPerspectiveViewerElement } from "@perspective-dev/viewer";
|
|
17
|
+
|
|
18
|
+
export function createMousedownListener(
|
|
19
|
+
model: DatagridModel,
|
|
23
20
|
regularTable: RegularTable,
|
|
24
|
-
viewer:
|
|
25
|
-
|
|
26
|
-
): Promise<void> {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
while (target && target.tagName !== "TD" && target.tagName !== "TH") {
|
|
37
|
-
target = target.parentElement;
|
|
38
|
-
if (!target || !regularTable.contains(target)) {
|
|
21
|
+
viewer: HTMLPerspectiveViewerElement,
|
|
22
|
+
): EventListener {
|
|
23
|
+
return async (event: Event): Promise<void> => {
|
|
24
|
+
const mouseEvent = event as MouseEvent;
|
|
25
|
+
if (mouseEvent.which !== 1) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
let target = mouseEvent.target as HTMLElement | null;
|
|
30
|
+
if (target?.tagName === "A") {
|
|
39
31
|
return;
|
|
40
32
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
33
|
+
|
|
34
|
+
while (target && target.tagName !== "TD" && target.tagName !== "TH") {
|
|
35
|
+
target = target.parentElement;
|
|
36
|
+
if (!target || !regularTable.contains(target)) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if (!target) return;
|
|
42
|
+
|
|
43
|
+
if (target.classList.contains("psp-tree-label")) {
|
|
44
|
+
if (model._edit_mode !== "SELECT_ROW_TREE") {
|
|
45
|
+
expandCollapseHandler(model, regularTable, mouseEvent);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (target.classList.contains("psp-menu-enabled")) {
|
|
52
|
+
const meta = regularTable.getMeta(target);
|
|
53
|
+
const column_name =
|
|
54
|
+
meta?.column_header?.[model._config.split_by.length];
|
|
55
|
+
await viewer.toggleColumnSettings(`${column_name}`);
|
|
56
|
+
} else if (target.classList.contains("psp-sort-enabled")) {
|
|
57
|
+
sortHandler(model, regularTable, viewer, mouseEvent, target);
|
|
58
|
+
}
|
|
59
|
+
};
|
|
57
60
|
}
|
|
58
61
|
|
|
59
|
-
export function
|
|
62
|
+
export function createDblclickListener(
|
|
63
|
+
model: DatagridModel,
|
|
60
64
|
regularTable: RegularTable,
|
|
61
|
-
|
|
62
|
-
):
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
target = target
|
|
70
|
-
if (
|
|
65
|
+
viewer: HTMLPerspectiveViewerElement,
|
|
66
|
+
): EventListener {
|
|
67
|
+
return async (event: Event): Promise<void> => {
|
|
68
|
+
const mouseEvent = event as MouseEvent;
|
|
69
|
+
if (mouseEvent.which !== 1) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
let target = mouseEvent.target as HTMLElement | null;
|
|
74
|
+
if (target?.tagName === "A") {
|
|
71
75
|
return;
|
|
72
76
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
!target
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
77
|
+
|
|
78
|
+
while (target && target.tagName !== "TD" && target.tagName !== "TH") {
|
|
79
|
+
target = target.parentElement;
|
|
80
|
+
if (!target || !regularTable.contains(target)) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
if (!target) return;
|
|
86
|
+
|
|
87
|
+
if (target.classList.contains("psp-tree-label")) {
|
|
88
|
+
if (model._edit_mode === "SELECT_ROW_TREE") {
|
|
89
|
+
expandCollapseHandler(model, regularTable, mouseEvent);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export function createClickListener(regularTable: RegularTable): EventListener {
|
|
96
|
+
return (event: Event): void => {
|
|
97
|
+
const mouseEvent = event as MouseEvent;
|
|
98
|
+
if (mouseEvent.which !== 1) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
let target = mouseEvent.target as HTMLElement | null;
|
|
103
|
+
while (target && target.tagName !== "TD" && target.tagName !== "TH") {
|
|
104
|
+
target = target.parentElement;
|
|
105
|
+
if (!target || !regularTable.contains(target)) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if (!target) return;
|
|
111
|
+
|
|
112
|
+
if (
|
|
113
|
+
target.classList.contains("psp-tree-label") &&
|
|
114
|
+
mouseEvent.offsetX < 26
|
|
115
|
+
) {
|
|
116
|
+
mouseEvent.stopImmediatePropagation();
|
|
117
|
+
} else if (
|
|
118
|
+
target.classList.contains("psp-header-leaf") &&
|
|
119
|
+
!target.classList.contains("psp-header-corner")
|
|
120
|
+
) {
|
|
121
|
+
mouseEvent.stopImmediatePropagation();
|
|
122
|
+
}
|
|
123
|
+
};
|
|
85
124
|
}
|