tabulator-tables 5.3.4 → 5.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/bower.json +1 -1
- package/build/Bundler.js +64 -38
- package/dist/css/tabulator.css +69 -19
- package/dist/css/tabulator.css.map +1 -1
- package/dist/css/tabulator.min.css +1 -1
- package/dist/css/tabulator.min.css.map +1 -1
- package/dist/css/tabulator_bootstrap3.css +69 -19
- package/dist/css/tabulator_bootstrap3.css.map +1 -1
- package/dist/css/tabulator_bootstrap3.min.css +1 -1
- package/dist/css/tabulator_bootstrap3.min.css.map +1 -1
- package/dist/css/tabulator_bootstrap4.css +69 -19
- package/dist/css/tabulator_bootstrap4.css.map +1 -1
- package/dist/css/tabulator_bootstrap4.min.css +1 -1
- package/dist/css/tabulator_bootstrap4.min.css.map +1 -1
- package/dist/css/tabulator_bootstrap5.css +69 -19
- package/dist/css/tabulator_bootstrap5.css.map +1 -1
- package/dist/css/tabulator_bootstrap5.min.css +1 -1
- package/dist/css/tabulator_bootstrap5.min.css.map +1 -1
- package/dist/css/tabulator_bulma.css +69 -19
- package/dist/css/tabulator_bulma.css.map +1 -1
- package/dist/css/tabulator_bulma.min.css +1 -1
- package/dist/css/tabulator_bulma.min.css.map +1 -1
- package/dist/css/tabulator_materialize.css +69 -19
- package/dist/css/tabulator_materialize.css.map +1 -1
- package/dist/css/tabulator_materialize.min.css +1 -1
- package/dist/css/tabulator_materialize.min.css.map +1 -1
- package/dist/css/tabulator_midnight.css +69 -19
- package/dist/css/tabulator_midnight.css.map +1 -1
- package/dist/css/tabulator_midnight.min.css +1 -1
- package/dist/css/tabulator_midnight.min.css.map +1 -1
- package/dist/css/tabulator_modern.css +69 -19
- package/dist/css/tabulator_modern.css.map +1 -1
- package/dist/css/tabulator_modern.min.css +1 -1
- package/dist/css/tabulator_modern.min.css.map +1 -1
- package/dist/css/tabulator_semanticui.css +69 -19
- package/dist/css/tabulator_semanticui.css.map +1 -1
- package/dist/css/tabulator_semanticui.min.css +1 -1
- package/dist/css/tabulator_semanticui.min.css.map +1 -1
- package/dist/css/tabulator_simple.css +69 -19
- package/dist/css/tabulator_simple.css.map +1 -1
- package/dist/css/tabulator_simple.min.css +1 -1
- package/dist/css/tabulator_simple.min.css.map +1 -1
- package/dist/css/tabulator_site.css +69 -19
- package/dist/css/tabulator_site.css.map +1 -1
- package/dist/css/tabulator_site.min.css +1 -1
- package/dist/css/tabulator_site.min.css.map +1 -1
- package/dist/js/tabulator.js +25853 -27494
- package/dist/js/tabulator.js.map +1 -1
- package/dist/js/tabulator.min.js +2 -2
- package/dist/js/tabulator.min.js.map +1 -1
- package/dist/js/tabulator_esm.js +738 -506
- package/dist/js/tabulator_esm.js.map +1 -1
- package/dist/js/tabulator_esm.min.js +2 -2
- package/dist/js/tabulator_esm.min.js.map +1 -1
- package/package.json +3 -6
- package/src/js/core/ColumnManager.js +30 -15
- package/src/js/core/RowManager.js +26 -0
- package/src/js/core/column/Column.js +4 -0
- package/src/js/core/column/defaults/options.js +1 -0
- package/src/js/core/rendering/renderers/VirtualDomHorizontal.js +100 -77
- package/src/js/core/row/Row.js +1 -1
- package/src/js/core/tools/InteractionMonitor.js +2 -0
- package/src/js/core/tools/Popup.js +98 -76
- package/src/js/modules/ColumnCalcs/ColumnCalcs.js +185 -146
- package/src/js/modules/Download/defaults/downloaders/xlsx.js +2 -1
- package/src/js/modules/Edit/Edit.js +13 -2
- package/src/js/modules/Edit/List.js +1 -0
- package/src/js/modules/Filter/Filter.js +2 -2
- package/src/js/modules/Format/Format.js +46 -40
- package/src/js/modules/Format/defaults/formatters/responsiveCollapse.js +9 -1
- package/src/js/modules/FrozenColumns/FrozenColumns.js +24 -57
- package/src/js/modules/FrozenRows/FrozenRows.js +1 -1
- package/src/js/modules/GroupRows/Group.js +20 -28
- package/src/js/modules/GroupRows/GroupComponent.js +1 -1
- package/src/js/modules/GroupRows/GroupRows.js +8 -0
- package/src/js/modules/Interaction/Interaction.js +12 -0
- package/src/js/modules/Menu/Menu.js +31 -7
- package/src/js/modules/MoveColumns/MoveColumns.js +3 -3
- package/src/js/modules/Page/Page.js +1 -0
- package/src/js/modules/Persistence/Persistence.js +1 -0
- package/src/js/modules/Popup/Popup.js +42 -4
- package/src/js/modules/ResizeColumns/ResizeColumns.js +25 -6
- package/src/js/modules/ResizeTable/ResizeTable.js +7 -8
- package/src/js/modules/ResponsiveLayout/ResponsiveLayout.js +21 -21
- package/src/js/modules/Sort/Sort.js +14 -2
- package/src/scss/tabulator.scss +92 -31
|
@@ -14,18 +14,22 @@ class Menu extends Module{
|
|
|
14
14
|
this.columnSubscribers = {};
|
|
15
15
|
|
|
16
16
|
this.registerTableOption("menuContainer", undefined); //deprecated
|
|
17
|
-
|
|
17
|
+
|
|
18
18
|
this.registerTableOption("rowContextMenu", false);
|
|
19
19
|
this.registerTableOption("rowClickMenu", false);
|
|
20
|
+
this.registerTableOption("rowDblClickMenu", false);
|
|
20
21
|
this.registerTableOption("groupContextMenu", false);
|
|
21
22
|
this.registerTableOption("groupClickMenu", false);
|
|
23
|
+
this.registerTableOption("groupDblClickMenu", false);
|
|
22
24
|
|
|
23
25
|
this.registerColumnOption("headerContextMenu");
|
|
24
26
|
this.registerColumnOption("headerClickMenu");
|
|
27
|
+
this.registerColumnOption("headerDblClickMenu");
|
|
25
28
|
this.registerColumnOption("headerMenu");
|
|
26
29
|
this.registerColumnOption("headerMenuIcon");
|
|
27
30
|
this.registerColumnOption("contextMenu");
|
|
28
31
|
this.registerColumnOption("clickMenu");
|
|
32
|
+
this.registerColumnOption("dblClickMenu");
|
|
29
33
|
|
|
30
34
|
}
|
|
31
35
|
|
|
@@ -36,7 +40,7 @@ class Menu extends Module{
|
|
|
36
40
|
|
|
37
41
|
this.subscribe("column-init", this.initializeColumn.bind(this));
|
|
38
42
|
}
|
|
39
|
-
|
|
43
|
+
|
|
40
44
|
deprecatedOptionsCheck(){
|
|
41
45
|
if(!this.deprecationCheck("menuContainer", "popupContainer")){
|
|
42
46
|
this.table.options.popupContainer = this.table.options.menuContainer;
|
|
@@ -52,6 +56,10 @@ class Menu extends Module{
|
|
|
52
56
|
if(this.table.options.rowClickMenu){
|
|
53
57
|
this.subscribe("row-click", this.loadMenuEvent.bind(this, this.table.options.rowClickMenu));
|
|
54
58
|
}
|
|
59
|
+
|
|
60
|
+
if(this.table.options.rowDblClickMenu){
|
|
61
|
+
this.subscribe("row-dblclick", this.loadMenuEvent.bind(this, this.table.options.rowDblClickMenu));
|
|
62
|
+
}
|
|
55
63
|
}
|
|
56
64
|
|
|
57
65
|
initializeGroupWatchers(){
|
|
@@ -63,6 +71,10 @@ class Menu extends Module{
|
|
|
63
71
|
if(this.table.options.groupClickMenu){
|
|
64
72
|
this.subscribe("group-click", this.loadMenuEvent.bind(this, this.table.options.groupClickMenu));
|
|
65
73
|
}
|
|
74
|
+
|
|
75
|
+
if(this.table.options.groupDblClickMenu){
|
|
76
|
+
this.subscribe("group-dblclick", this.loadMenuEvent.bind(this, this.table.options.groupDblClickMenu));
|
|
77
|
+
}
|
|
66
78
|
}
|
|
67
79
|
|
|
68
80
|
initializeColumn(column){
|
|
@@ -80,6 +92,11 @@ class Menu extends Module{
|
|
|
80
92
|
this.subscribe("column-click", this.columnSubscribers.headerClickMenu);
|
|
81
93
|
}
|
|
82
94
|
|
|
95
|
+
if(def.headerDblClickMenu && !this.columnSubscribers.headerDblClickMenu){
|
|
96
|
+
this.columnSubscribers.headerDblClickMenu = this.loadMenuTableColumnEvent.bind(this, "headerDblClickMenu");
|
|
97
|
+
this.subscribe("column-dblclick", this.columnSubscribers.headerDblClickMenu);
|
|
98
|
+
}
|
|
99
|
+
|
|
83
100
|
if(def.headerMenu){
|
|
84
101
|
this.initializeColumnHeaderMenu(column);
|
|
85
102
|
}
|
|
@@ -95,6 +112,11 @@ class Menu extends Module{
|
|
|
95
112
|
this.columnSubscribers.clickMenu = this.loadMenuTableCellEvent.bind(this, "clickMenu");
|
|
96
113
|
this.subscribe("cell-click", this.columnSubscribers.clickMenu);
|
|
97
114
|
}
|
|
115
|
+
|
|
116
|
+
if(def.dblClickMenu && !this.columnSubscribers.dblClickMenu){
|
|
117
|
+
this.columnSubscribers.dblClickMenu = this.loadMenuTableCellEvent.bind(this, "dblClickMenu");
|
|
118
|
+
this.subscribe("cell-dblclick", this.columnSubscribers.dblClickMenu);
|
|
119
|
+
}
|
|
98
120
|
}
|
|
99
121
|
|
|
100
122
|
initializeColumnHeaderMenu(column){
|
|
@@ -103,12 +125,12 @@ class Menu extends Module{
|
|
|
103
125
|
|
|
104
126
|
headerMenuEl = document.createElement("span");
|
|
105
127
|
headerMenuEl.classList.add("tabulator-header-popup-button");
|
|
106
|
-
|
|
128
|
+
|
|
107
129
|
if(icon){
|
|
108
130
|
if(typeof icon === "function"){
|
|
109
131
|
icon = icon(column.getComponent());
|
|
110
132
|
}
|
|
111
|
-
|
|
133
|
+
|
|
112
134
|
if(icon instanceof HTMLElement){
|
|
113
135
|
headerMenuEl.appendChild(icon);
|
|
114
136
|
}else{
|
|
@@ -251,7 +273,9 @@ class Menu extends Module{
|
|
|
251
273
|
});
|
|
252
274
|
|
|
253
275
|
menuEl.addEventListener("click", (e) => {
|
|
254
|
-
this.rootPopup
|
|
276
|
+
if(this.rootPopup){
|
|
277
|
+
this.rootPopup.hide();
|
|
278
|
+
}
|
|
255
279
|
});
|
|
256
280
|
|
|
257
281
|
popup.show(parentEl || e);
|
|
@@ -265,9 +289,9 @@ class Menu extends Module{
|
|
|
265
289
|
this.currentComponent = null;
|
|
266
290
|
}
|
|
267
291
|
});
|
|
268
|
-
|
|
292
|
+
|
|
269
293
|
this.currentComponent = component;
|
|
270
|
-
|
|
294
|
+
|
|
271
295
|
this.dispatchExternal("menuOpened", component.getComponent());
|
|
272
296
|
}
|
|
273
297
|
}
|
|
@@ -164,7 +164,7 @@ class MoveColumns extends Module{
|
|
|
164
164
|
|
|
165
165
|
startMove(e, column){
|
|
166
166
|
var element = column.getElement(),
|
|
167
|
-
headerElement = this.table.columnManager.
|
|
167
|
+
headerElement = this.table.columnManager.getContentsElement(),
|
|
168
168
|
headersElement = this.table.columnManager.getHeadersElement();
|
|
169
169
|
|
|
170
170
|
this.moving = column;
|
|
@@ -183,7 +183,7 @@ class MoveColumns extends Module{
|
|
|
183
183
|
this.hoverElement = element.cloneNode(true);
|
|
184
184
|
this.hoverElement.classList.add("tabulator-moving");
|
|
185
185
|
|
|
186
|
-
|
|
186
|
+
headerElement.appendChild(this.hoverElement);
|
|
187
187
|
|
|
188
188
|
this.hoverElement.style.left = "0";
|
|
189
189
|
this.hoverElement.style.bottom = (headerElement.clientHeight - headersElement.offsetHeight) + "px";
|
|
@@ -265,7 +265,7 @@ class MoveColumns extends Module{
|
|
|
265
265
|
}
|
|
266
266
|
|
|
267
267
|
moveHover(e){
|
|
268
|
-
var columnHolder = this.table.columnManager.
|
|
268
|
+
var columnHolder = this.table.columnManager.getContentsElement(),
|
|
269
269
|
scrollLeft = columnHolder.scrollLeft,
|
|
270
270
|
xPos = ((this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(columnHolder).left) + scrollLeft,
|
|
271
271
|
scrollPos;
|
|
@@ -142,6 +142,7 @@ class Persistence extends Module{
|
|
|
142
142
|
this.subscribe("group-changed", this.eventSave.bind(this, "group"));
|
|
143
143
|
this.subscribe("page-changed", this.eventSave.bind(this, "page"));
|
|
144
144
|
this.subscribe("column-resized", this.eventSave.bind(this, "columns"));
|
|
145
|
+
this.subscribe("column-width", this.eventSave.bind(this, "columns"));
|
|
145
146
|
this.subscribe("layout-refreshed", this.eventSave.bind(this, "columns"));
|
|
146
147
|
}
|
|
147
148
|
|
|
@@ -9,15 +9,24 @@ class Popup extends Module{
|
|
|
9
9
|
|
|
10
10
|
this.registerTableOption("rowContextPopup", false);
|
|
11
11
|
this.registerTableOption("rowClickPopup", false);
|
|
12
|
+
this.registerTableOption("rowDblClickPopup", false);
|
|
12
13
|
this.registerTableOption("groupContextPopup", false);
|
|
13
14
|
this.registerTableOption("groupClickPopup", false);
|
|
15
|
+
this.registerTableOption("groupDblClickPopup", false);
|
|
14
16
|
|
|
15
17
|
this.registerColumnOption("headerContextPopup");
|
|
16
18
|
this.registerColumnOption("headerClickPopup");
|
|
19
|
+
this.registerColumnOption("headerDblClickPopup");
|
|
17
20
|
this.registerColumnOption("headerPopup");
|
|
18
21
|
this.registerColumnOption("headerPopupIcon");
|
|
19
22
|
this.registerColumnOption("contextPopup");
|
|
20
23
|
this.registerColumnOption("clickPopup");
|
|
24
|
+
this.registerColumnOption("dblClickPopup");
|
|
25
|
+
|
|
26
|
+
this.registerComponentFunction("cell", "popup", this._componentPopupCall.bind(this));
|
|
27
|
+
this.registerComponentFunction("column", "popup", this._componentPopupCall.bind(this));
|
|
28
|
+
this.registerComponentFunction("row", "popup", this._componentPopupCall.bind(this));
|
|
29
|
+
this.registerComponentFunction("group", "popup", this._componentPopupCall.bind(this));
|
|
21
30
|
|
|
22
31
|
}
|
|
23
32
|
|
|
@@ -27,6 +36,10 @@ class Popup extends Module{
|
|
|
27
36
|
|
|
28
37
|
this.subscribe("column-init", this.initializeColumn.bind(this));
|
|
29
38
|
}
|
|
39
|
+
|
|
40
|
+
_componentPopupCall(component, contents, position){
|
|
41
|
+
this.loadPopupEvent(contents, null, component, position);
|
|
42
|
+
}
|
|
30
43
|
|
|
31
44
|
initializeRowWatchers(){
|
|
32
45
|
if(this.table.options.rowContextPopup){
|
|
@@ -37,6 +50,10 @@ class Popup extends Module{
|
|
|
37
50
|
if(this.table.options.rowClickPopup){
|
|
38
51
|
this.subscribe("row-click", this.loadPopupEvent.bind(this, this.table.options.rowClickPopup));
|
|
39
52
|
}
|
|
53
|
+
|
|
54
|
+
if(this.table.options.rowDblClickPopup){
|
|
55
|
+
this.subscribe("row-dblclick", this.loadPopupEvent.bind(this, this.table.options.rowDblClickPopup));
|
|
56
|
+
}
|
|
40
57
|
}
|
|
41
58
|
|
|
42
59
|
initializeGroupWatchers(){
|
|
@@ -48,6 +65,10 @@ class Popup extends Module{
|
|
|
48
65
|
if(this.table.options.groupClickPopup){
|
|
49
66
|
this.subscribe("group-click", this.loadPopupEvent.bind(this, this.table.options.groupClickPopup));
|
|
50
67
|
}
|
|
68
|
+
|
|
69
|
+
if(this.table.options.groupDblClickPopup){
|
|
70
|
+
this.subscribe("group-dblclick", this.loadPopupEvent.bind(this, this.table.options.groupDblClickPopup));
|
|
71
|
+
}
|
|
51
72
|
}
|
|
52
73
|
|
|
53
74
|
initializeColumn(column){
|
|
@@ -63,6 +84,11 @@ class Popup extends Module{
|
|
|
63
84
|
if(def.headerClickPopup && !this.columnSubscribers.headerClickPopup){
|
|
64
85
|
this.columnSubscribers.headerClickPopup = this.loadPopupTableColumnEvent.bind(this, "headerClickPopup");
|
|
65
86
|
this.subscribe("column-click", this.columnSubscribers.headerClickPopup);
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
}if(def.headerDblClickPopup && !this.columnSubscribers.headerDblClickPopup){
|
|
90
|
+
this.columnSubscribers.headerDblClickPopup = this.loadPopupTableColumnEvent.bind(this, "headerDblClickPopup");
|
|
91
|
+
this.subscribe("column-dblclick", this.columnSubscribers.headerDblClickPopup);
|
|
66
92
|
}
|
|
67
93
|
|
|
68
94
|
if(def.headerPopup){
|
|
@@ -80,6 +106,11 @@ class Popup extends Module{
|
|
|
80
106
|
this.columnSubscribers.clickPopup = this.loadPopupTableCellEvent.bind(this, "clickPopup");
|
|
81
107
|
this.subscribe("cell-click", this.columnSubscribers.clickPopup);
|
|
82
108
|
}
|
|
109
|
+
|
|
110
|
+
if(def.dblClickPopup && !this.columnSubscribers.dblClickPopup){
|
|
111
|
+
this.columnSubscribers.dblClickPopup = this.loadPopupTableCellEvent.bind(this, "dblClickPopup");
|
|
112
|
+
this.subscribe("cell-click", this.columnSubscribers.dblClickPopup);
|
|
113
|
+
}
|
|
83
114
|
}
|
|
84
115
|
|
|
85
116
|
initializeColumnHeaderPopup(column){
|
|
@@ -133,7 +164,7 @@ class Popup extends Module{
|
|
|
133
164
|
}
|
|
134
165
|
}
|
|
135
166
|
|
|
136
|
-
loadPopupEvent(contents, e, component){
|
|
167
|
+
loadPopupEvent(contents, e, component, position){
|
|
137
168
|
var renderedCallback;
|
|
138
169
|
|
|
139
170
|
function onRendered(callback){
|
|
@@ -148,10 +179,10 @@ class Popup extends Module{
|
|
|
148
179
|
|
|
149
180
|
contents = typeof contents == "function" ? contents.call(this.table, e, component.getComponent(), onRendered) : contents;
|
|
150
181
|
|
|
151
|
-
this.loadPopup(e, component, contents, renderedCallback);
|
|
182
|
+
this.loadPopup(e, component, contents, renderedCallback, position);
|
|
152
183
|
}
|
|
153
184
|
|
|
154
|
-
loadPopup(e, component, contents, renderedCallback){
|
|
185
|
+
loadPopup(e, component, contents, renderedCallback, position){
|
|
155
186
|
var touch = !(e instanceof MouseEvent),
|
|
156
187
|
contentsEl, popup;
|
|
157
188
|
|
|
@@ -177,8 +208,15 @@ class Popup extends Module{
|
|
|
177
208
|
if(typeof renderedCallback === "function"){
|
|
178
209
|
popup.renderCallback(renderedCallback);
|
|
179
210
|
}
|
|
211
|
+
|
|
212
|
+
if(e){
|
|
213
|
+
popup.show(e);
|
|
214
|
+
}else{
|
|
215
|
+
popup.show(component.getElement(), position || "center");
|
|
216
|
+
}
|
|
217
|
+
|
|
180
218
|
|
|
181
|
-
popup.
|
|
219
|
+
popup.hideOnBlur(() => {
|
|
182
220
|
this.dispatchExternal("popupClosed", component.getComponent());
|
|
183
221
|
});
|
|
184
222
|
|
|
@@ -81,15 +81,32 @@ class ResizeColumns extends Module{
|
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
83
|
}
|
|
84
|
+
|
|
85
|
+
frozenColumnOffset(column){
|
|
86
|
+
var offset = false;
|
|
87
|
+
|
|
88
|
+
if(column.modules.frozen){
|
|
89
|
+
offset = column.modules.frozen.marginValue;
|
|
90
|
+
|
|
91
|
+
if(column.modules.frozen.position === "left"){
|
|
92
|
+
offset += column.getWidth() - 3;
|
|
93
|
+
}else{
|
|
94
|
+
if(offset){
|
|
95
|
+
offset -= 3;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return offset !== false ? offset + "px" : false;
|
|
101
|
+
}
|
|
84
102
|
|
|
85
103
|
reinitializeColumn(column){
|
|
86
|
-
var frozenOffset =
|
|
87
|
-
|
|
104
|
+
var frozenOffset = this.frozenColumnOffset(column);
|
|
88
105
|
|
|
89
106
|
column.cells.forEach((cell) => {
|
|
90
107
|
if(cell.modules.resize && cell.modules.resize.handleEl){
|
|
91
108
|
if(frozenOffset){
|
|
92
|
-
cell.modules.resize.handleEl.style.
|
|
109
|
+
cell.modules.resize.handleEl.style[column.modules.frozen.position] = frozenOffset;
|
|
93
110
|
}
|
|
94
111
|
|
|
95
112
|
cell.element.after(cell.modules.resize.handleEl);
|
|
@@ -98,7 +115,7 @@ class ResizeColumns extends Module{
|
|
|
98
115
|
|
|
99
116
|
if(column.modules.resize && column.modules.resize.handleEl){
|
|
100
117
|
if(frozenOffset){
|
|
101
|
-
column.modules.resize.handleEl.style.
|
|
118
|
+
column.modules.resize.handleEl.style[column.modules.frozen.position] = frozenOffset;
|
|
102
119
|
}
|
|
103
120
|
|
|
104
121
|
column.element.after(column.modules.resize.handleEl);
|
|
@@ -150,8 +167,8 @@ class ResizeColumns extends Module{
|
|
|
150
167
|
});
|
|
151
168
|
|
|
152
169
|
if(column.modules.frozen){
|
|
153
|
-
handle.style.position = "
|
|
154
|
-
handle.style
|
|
170
|
+
handle.style.position = "sticky";
|
|
171
|
+
handle.style[column.modules.frozen.position] = this.frozenColumnOffset(column);
|
|
155
172
|
}
|
|
156
173
|
|
|
157
174
|
config.handleEl = handle;
|
|
@@ -263,6 +280,8 @@ class ResizeColumns extends Module{
|
|
|
263
280
|
self.table.element.classList.remove("tabulator-block-select");
|
|
264
281
|
|
|
265
282
|
if(self.startWidth !== column.getWidth()){
|
|
283
|
+
self.table.columnManager.verticalAlignHeaders();
|
|
284
|
+
|
|
266
285
|
self.dispatch("column-resized", column);
|
|
267
286
|
self.table.externalEvents.dispatch("columnResized", column.getComponent());
|
|
268
287
|
}
|
|
@@ -58,7 +58,7 @@ class ResizeTable extends Module{
|
|
|
58
58
|
this.containerHeight = table.element.parentNode.clientHeight;
|
|
59
59
|
this.containerWidth = table.element.parentNode.clientWidth;
|
|
60
60
|
}
|
|
61
|
-
|
|
61
|
+
|
|
62
62
|
this.redrawTable();
|
|
63
63
|
}
|
|
64
64
|
}
|
|
@@ -110,17 +110,16 @@ class ResizeTable extends Module{
|
|
|
110
110
|
initializeVisibilityObserver(){
|
|
111
111
|
this.visibilityObserver = new IntersectionObserver((entries) => {
|
|
112
112
|
this.visible = entries[0].isIntersecting;
|
|
113
|
-
|
|
113
|
+
|
|
114
114
|
if(!this.initialized){
|
|
115
115
|
this.initialized = true;
|
|
116
116
|
this.initialRedraw = !this.visible;
|
|
117
|
+
}else{
|
|
118
|
+
if(this.visible){
|
|
119
|
+
this.redrawTable(this.initialRedraw);
|
|
120
|
+
this.initialRedraw = false;
|
|
121
|
+
}
|
|
117
122
|
}
|
|
118
|
-
|
|
119
|
-
if(this.visible){
|
|
120
|
-
this.redrawTable(this.initialRedraw);
|
|
121
|
-
this.initialRedraw = false;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
123
|
});
|
|
125
124
|
|
|
126
125
|
this.visibilityObserver.observe(this.table.element);
|
|
@@ -183,22 +183,21 @@ class ResponsiveLayout extends Module{
|
|
|
183
183
|
|
|
184
184
|
//redraw columns to fit space
|
|
185
185
|
update(){
|
|
186
|
-
var
|
|
187
|
-
working = true;
|
|
186
|
+
var working = true;
|
|
188
187
|
|
|
189
188
|
while(working){
|
|
190
189
|
|
|
191
|
-
let width =
|
|
190
|
+
let width = this.table.modules.layout.getMode() == "fitColumns" ? this.table.columnManager.getFlexBaseWidth() : this.table.columnManager.getWidth();
|
|
192
191
|
|
|
193
|
-
let diff = (
|
|
192
|
+
let diff = (this.table.options.headerVisible ? this.table.columnManager.element.clientWidth : this.table.element.clientWidth) - width;
|
|
194
193
|
|
|
195
194
|
if(diff < 0){
|
|
196
195
|
//table is too wide
|
|
197
|
-
let column =
|
|
196
|
+
let column = this.columns[this.index];
|
|
198
197
|
|
|
199
198
|
if(column){
|
|
200
|
-
|
|
201
|
-
|
|
199
|
+
this.hideColumn(column);
|
|
200
|
+
this.index ++;
|
|
202
201
|
}else{
|
|
203
202
|
working = false;
|
|
204
203
|
}
|
|
@@ -206,13 +205,13 @@ class ResponsiveLayout extends Module{
|
|
|
206
205
|
}else{
|
|
207
206
|
|
|
208
207
|
//table has spare space
|
|
209
|
-
let column =
|
|
208
|
+
let column = this.columns[this.index -1];
|
|
210
209
|
|
|
211
210
|
if(column){
|
|
212
211
|
if(diff > 0){
|
|
213
212
|
if(diff >= column.getWidth()){
|
|
214
|
-
|
|
215
|
-
|
|
213
|
+
this.showColumn(column);
|
|
214
|
+
this.index --;
|
|
216
215
|
}else{
|
|
217
216
|
working = false;
|
|
218
217
|
}
|
|
@@ -224,18 +223,17 @@ class ResponsiveLayout extends Module{
|
|
|
224
223
|
}
|
|
225
224
|
}
|
|
226
225
|
|
|
227
|
-
if(!
|
|
228
|
-
|
|
226
|
+
if(!this.table.rowManager.activeRowsCount){
|
|
227
|
+
this.table.rowManager.renderEmptyScroll();
|
|
229
228
|
}
|
|
230
229
|
}
|
|
231
230
|
}
|
|
232
231
|
|
|
233
232
|
generateCollapsedContent(){
|
|
234
|
-
var
|
|
235
|
-
rows = this.table.rowManager.getDisplayRows();
|
|
233
|
+
var rows = this.table.rowManager.getDisplayRows();
|
|
236
234
|
|
|
237
|
-
rows.forEach(
|
|
238
|
-
|
|
235
|
+
rows.forEach((row) => {
|
|
236
|
+
this.generateCollapsedRowContent(row);
|
|
239
237
|
});
|
|
240
238
|
}
|
|
241
239
|
|
|
@@ -255,16 +253,15 @@ class ResponsiveLayout extends Module{
|
|
|
255
253
|
}
|
|
256
254
|
|
|
257
255
|
generateCollapsedRowData(row){
|
|
258
|
-
var
|
|
259
|
-
data = row.getData(),
|
|
256
|
+
var data = row.getData(),
|
|
260
257
|
output = [],
|
|
261
258
|
mockCellComponent;
|
|
262
259
|
|
|
263
|
-
this.hiddenColumns.forEach(
|
|
260
|
+
this.hiddenColumns.forEach((column) => {
|
|
264
261
|
var value = column.getFieldValue(data);
|
|
265
262
|
|
|
266
263
|
if(column.definition.title && column.field){
|
|
267
|
-
if(column.modules.format &&
|
|
264
|
+
if(column.modules.format && this.table.options.responsiveLayoutCollapseUseFormatters){
|
|
268
265
|
|
|
269
266
|
mockCellComponent = {
|
|
270
267
|
value:false,
|
|
@@ -284,6 +281,9 @@ class ResponsiveLayout extends Module{
|
|
|
284
281
|
getColumn:function(){
|
|
285
282
|
return column.getComponent();
|
|
286
283
|
},
|
|
284
|
+
getTable:() => {
|
|
285
|
+
return this.table;
|
|
286
|
+
},
|
|
287
287
|
};
|
|
288
288
|
|
|
289
289
|
function onRendered(callback){
|
|
@@ -293,7 +293,7 @@ class ResponsiveLayout extends Module{
|
|
|
293
293
|
output.push({
|
|
294
294
|
field: column.field,
|
|
295
295
|
title: column.definition.title,
|
|
296
|
-
value: column.modules.format.formatter.call(
|
|
296
|
+
value: column.modules.format.formatter.call(this.table.modules.format, mockCellComponent, column.modules.format.params, onRendered)
|
|
297
297
|
});
|
|
298
298
|
}else{
|
|
299
299
|
output.push({
|
|
@@ -16,6 +16,7 @@ class Sort extends Module{
|
|
|
16
16
|
this.registerTableOption("columnHeaderSortMulti", true); //multiple or single column sorting
|
|
17
17
|
this.registerTableOption("sortOrderReverse", false); //reverse internal sort ordering
|
|
18
18
|
this.registerTableOption("headerSortElement", "<div class='tabulator-arrow'></div>"); //header sort element
|
|
19
|
+
this.registerTableOption("headerSortClickElement", "header"); //element which triggers sort when clicked
|
|
19
20
|
|
|
20
21
|
this.registerColumnOption("sorter");
|
|
21
22
|
this.registerColumnOption("sorterParams");
|
|
@@ -113,10 +114,21 @@ class Sort extends Module{
|
|
|
113
114
|
|
|
114
115
|
colEl.classList.add("tabulator-sortable");
|
|
115
116
|
|
|
116
|
-
|
|
117
117
|
arrowEl = document.createElement("div");
|
|
118
118
|
arrowEl.classList.add("tabulator-col-sorter");
|
|
119
119
|
|
|
120
|
+
switch(this.table.options.headerSortClickElement){
|
|
121
|
+
case "icon":
|
|
122
|
+
arrowEl.classList.add("tabulator-col-sorter-element");
|
|
123
|
+
break;
|
|
124
|
+
case "header":
|
|
125
|
+
colEl.classList.add("tabulator-col-sorter-element");
|
|
126
|
+
break;
|
|
127
|
+
default:
|
|
128
|
+
colEl.classList.add("tabulator-col-sorter-element");
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
|
|
120
132
|
switch(this.table.options.headerSortElement){
|
|
121
133
|
case "function":
|
|
122
134
|
//do nothing
|
|
@@ -138,7 +150,7 @@ class Sort extends Module{
|
|
|
138
150
|
this.setColumnHeaderSortIcon(column, "none");
|
|
139
151
|
|
|
140
152
|
//sort on click
|
|
141
|
-
colEl.addEventListener("click", (e) => {
|
|
153
|
+
(this.table.options.headerSortClickElement === "icon" ? arrowEl : colEl).addEventListener("click", (e) => {
|
|
142
154
|
var dir = "",
|
|
143
155
|
sorters=[],
|
|
144
156
|
match = false;
|