tabulator-tables 5.1.1 → 5.1.4

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.
Files changed (32) hide show
  1. package/bower.json +1 -1
  2. package/dist/js/tabulator.js +233 -148
  3. package/dist/js/tabulator.js.map +1 -1
  4. package/dist/js/tabulator.min.js +2 -2
  5. package/dist/js/tabulator.min.js.map +1 -1
  6. package/dist/js/tabulator_esm.js +551 -485
  7. package/dist/js/tabulator_esm.js.map +1 -1
  8. package/dist/js/tabulator_esm.min.js +2 -2
  9. package/dist/js/tabulator_esm.min.js.map +1 -1
  10. package/package.json +5 -2
  11. package/src/js/core/FooterManager.js +2 -4
  12. package/src/js/core/RowManager.js +0 -6
  13. package/src/js/core/Tabulator.js +13 -30
  14. package/src/js/core/rendering/renderers/VirtualDomHorizontal.js +1 -1
  15. package/src/js/core/row/Row.js +2 -2
  16. package/src/js/core/tools/InteractionMonitor.js +1 -1
  17. package/src/js/core/tools/ModuleBinder.js +15 -3
  18. package/src/js/modules/ColumnCalcs/ColumnCalcs.js +9 -4
  19. package/src/js/modules/Export/Export.js +5 -4
  20. package/src/js/modules/Filter/Filter.js +4 -3
  21. package/src/js/modules/Format/defaults/formatters/rowSelection.js +19 -1
  22. package/src/js/modules/Format/defaults/formatters/rownum.js +1 -1
  23. package/src/js/modules/FrozenColumns/FrozenColumns.js +101 -83
  24. package/src/js/modules/GroupRows/Group.js +144 -142
  25. package/src/js/modules/Layout/Layout.js +1 -0
  26. package/src/js/modules/Page/Page.js +6 -3
  27. package/src/js/modules/Page/defaults/pageCounters/rows.js +21 -13
  28. package/src/js/modules/Persistence/Persistence.js +6 -4
  29. package/src/js/modules/Persistence/defaults/readers.js +3 -3
  30. package/src/js/modules/ResizeColumns/ResizeColumns.js +61 -51
  31. package/src/js/modules/ResponsiveLayout/ResponsiveLayout.js +1 -1
  32. package/src/js/modules/SelectRow/SelectRow.js +132 -128
@@ -62,10 +62,13 @@ class Page extends Module{
62
62
  initialize(){
63
63
  if(this.table.options.pagination){
64
64
  this.subscribe("row-deleted", this.rowsUpdated.bind(this));
65
- this.subscribe("row-adding-position", this.rowAddingPosition.bind(this));
66
65
  this.subscribe("row-added", this.rowsUpdated.bind(this));
67
66
  this.subscribe("data-processed", this.initialLoadComplete.bind(this));
68
67
  this.subscribe("table-built", this.calculatePageSizes.bind(this));
68
+
69
+ if(this.table.options.paginationAddRow == "page"){
70
+ this.subscribe("row-adding-position", this.rowAddingPosition.bind(this));
71
+ }
69
72
 
70
73
  if(this.table.options.paginationMode === "remote"){
71
74
  this.subscribe("data-params", this.remotePageParams.bind(this));
@@ -854,8 +857,8 @@ class Page extends Module{
854
857
 
855
858
  //handle the footer element being redrawn
856
859
  footerRedraw(){
857
- var footer = this.table.footerManager.element;
858
-
860
+ var footer = this.table.footerManager.containerElement;
861
+
859
862
  if((Math.ceil(footer.clientWidth) - footer.scrollWidth) < 0){
860
863
  this.pagesElement.style.display = 'none';
861
864
  }else{
@@ -5,28 +5,36 @@ export default function(pageSize, currentRow, currentPage, totalRows, totalPages
5
5
  ofEl = document.createElement("span"),
6
6
  totalEl = document.createElement("span"),
7
7
  rowsEl = document.createElement("span");
8
-
8
+
9
9
  this.table.modules.localize.langBind("pagination|counter|showing", (value) => {
10
10
  showingEl.innerHTML = value;
11
11
  });
12
-
13
- valueEl.innerHTML = " " + currentRow + "-" + Math.min((currentRow + pageSize - 1), totalRows) + " ";
14
-
12
+
15
13
  this.table.modules.localize.langBind("pagination|counter|of", (value) => {
16
14
  ofEl.innerHTML = value;
17
15
  });
18
-
19
- totalEl.innerHTML = " " + totalRows + " ";
20
-
16
+
21
17
  this.table.modules.localize.langBind("pagination|counter|rows", (value) => {
22
18
  rowsEl.innerHTML = value;
23
19
  });
24
-
25
- el.appendChild(showingEl);
26
- el.appendChild(valueEl);
27
- el.appendChild(ofEl);
28
- el.appendChild(totalEl);
29
- el.appendChild(rowsEl);
20
+
21
+ if(totalRows){
22
+ valueEl.innerHTML = " " + currentRow + "-" + Math.min((currentRow + pageSize - 1), totalRows) + " ";
23
+
24
+ totalEl.innerHTML = " " + totalRows + " ";
25
+
26
+ el.appendChild(showingEl);
27
+ el.appendChild(valueEl);
28
+ el.appendChild(ofEl);
29
+ el.appendChild(totalEl);
30
+ el.appendChild(rowsEl);
31
+ }else{
32
+ valueEl.innerHTML = " 0 ";
33
+
34
+ el.appendChild(showingEl);
35
+ el.appendChild(valueEl);
36
+ el.appendChild(rowsEl);
37
+ }
30
38
 
31
39
  return el;
32
40
  };
@@ -131,11 +131,11 @@ class Persistence extends Module{
131
131
  this.subscribe("column-show", this.save.bind(this, "columns"));
132
132
  this.subscribe("column-hide", this.save.bind(this, "columns"));
133
133
  this.subscribe("column-moved", this.save.bind(this, "columns"));
134
- this.subscribe("table-built", this.tableBuilt.bind(this), 0);
135
134
  }
136
135
 
137
- this.subscribe("table-redraw", this.tableRedraw.bind(this));
136
+ this.subscribe("table-built", this.tableBuilt.bind(this), 0);
138
137
 
138
+ this.subscribe("table-redraw", this.tableRedraw.bind(this));
139
139
 
140
140
  this.subscribe("filter-changed", this.eventSave.bind(this, "filter"));
141
141
  this.subscribe("sort-changed", this.eventSave.bind(this, "sort"));
@@ -163,7 +163,7 @@ class Persistence extends Module{
163
163
  sorters = this.load("sort");
164
164
 
165
165
  if(!sorters === false){
166
- this.table.initialSort = sorters;
166
+ this.table.options.initialSort = sorters;
167
167
  }
168
168
  }
169
169
 
@@ -171,7 +171,7 @@ class Persistence extends Module{
171
171
  filters = this.load("filter");
172
172
 
173
173
  if(!filters === false){
174
- this.table.initialFilter = filters;
174
+ this.table.options.initialFilter = filters;
175
175
  }
176
176
  }
177
177
  }
@@ -451,6 +451,8 @@ class Persistence extends Module{
451
451
 
452
452
  Persistence.moduleName = "persistence";
453
453
 
454
+ Persistence.moduleInitOrder = 1;
455
+
454
456
  //load defaults
455
457
  Persistence.readers = defaultReaders;
456
458
  Persistence.writers = defaultWriters;
@@ -13,12 +13,12 @@ export default {
13
13
 
14
14
  //if cookie exists, decode and load column data into tabulator
15
15
  if(cookiePos > -1){
16
- cookie = cookie.substr(cookiePos);
16
+ cookie = cookie.slice(cookiePos);
17
17
 
18
18
  end = cookie.indexOf(";");
19
19
 
20
20
  if(end > -1){
21
- cookie = cookie.substr(0, end);
21
+ cookie = cookie.slice(0, end);
22
22
  }
23
23
 
24
24
  data = cookie.replace(key + "=", "");
@@ -26,4 +26,4 @@ export default {
26
26
 
27
27
  return data ? JSON.parse(data) : false;
28
28
  }
29
- };
29
+ };
@@ -1,186 +1,196 @@
1
1
  import Module from '../../core/Module.js';
2
2
 
3
3
  class ResizeColumns extends Module{
4
-
4
+
5
5
  constructor(table){
6
6
  super(table);
7
-
7
+
8
8
  this.startColumn = false;
9
9
  this.startX = false;
10
10
  this.startWidth = false;
11
11
  this.handle = null;
12
12
  this.prevHandle = null;
13
-
13
+
14
14
  this.registerColumnOption("resizable", true);
15
15
  }
16
-
16
+
17
17
  initialize(){
18
18
  // if(this.table.options.resizableColumns){
19
- this.subscribe("cell-layout", this.layoutCellHandles.bind(this));
20
- this.subscribe("column-init", this.layoutColumnHeader.bind(this));
19
+ this.subscribe("cell-layout", this.layoutCellHandles.bind(this));
20
+ this.subscribe("column-init", this.layoutColumnHeader.bind(this));
21
21
  // }
22
22
  }
23
-
23
+
24
24
  layoutCellHandles(cell){
25
25
  if(cell.row.type === "row"){
26
26
  this.initializeColumn("cell", cell.column, cell.element);
27
27
  }
28
28
  }
29
-
29
+
30
30
  layoutColumnHeader(column){
31
31
  this.initializeColumn("header", column, column.element);
32
32
  }
33
-
33
+
34
34
  initializeColumn(type, column, element){
35
35
  var self = this,
36
36
  variableHeight = false,
37
37
  mode = column.definition.resizable;
38
-
38
+
39
39
  //set column resize mode
40
40
  if(type === "header"){
41
41
  variableHeight = column.definition.formatter == "textarea" || column.definition.variableHeight;
42
42
  column.modules.resize = {variableHeight:variableHeight};
43
43
  }
44
-
44
+
45
45
  if(mode === true || mode == type){
46
-
46
+
47
47
  var handle = document.createElement('div');
48
48
  handle.className = "tabulator-col-resize-handle";
49
-
50
-
49
+
50
+
51
51
  var prevHandle = document.createElement('div');
52
52
  prevHandle.className = "tabulator-col-resize-handle prev";
53
-
53
+
54
54
  handle.addEventListener("click", function(e){
55
55
  e.stopPropagation();
56
56
  });
57
-
57
+
58
58
  var handleDown = function(e){
59
59
  var nearestColumn = column.getLastColumn();
60
-
60
+
61
61
  if(nearestColumn && self._checkResizability(nearestColumn)){
62
62
  self.startColumn = column;
63
63
  self._mouseDown(e, nearestColumn, handle);
64
64
  }
65
65
  };
66
-
66
+
67
67
  handle.addEventListener("mousedown", handleDown);
68
68
  handle.addEventListener("touchstart", handleDown, {passive: true});
69
-
69
+
70
70
  //reszie column on double click
71
71
  handle.addEventListener("dblclick", function(e){
72
- var col = column.getLastColumn();
73
-
72
+ var col = column.getLastColumn(),
73
+ oldWidth;
74
+
74
75
  if(col && self._checkResizability(col)){
76
+ oldWidth = col.getWidth();
77
+
75
78
  e.stopPropagation();
76
79
  col.reinitializeWidth(true);
80
+
81
+ if(oldWidth !== col.getWidth()){
82
+ self.dispatch("column-resized", col);
83
+ self.table.externalEvents.dispatch("columnResized", col.getComponent());
84
+ }
77
85
  }
78
86
  });
79
-
80
-
87
+
88
+
81
89
  prevHandle.addEventListener("click", function(e){
82
90
  e.stopPropagation();
83
91
  });
84
-
92
+
85
93
  var prevHandleDown = function(e){
86
94
  var nearestColumn, colIndex, prevColumn;
87
-
95
+
88
96
  nearestColumn = column.getFirstColumn();
89
-
97
+
90
98
  if(nearestColumn){
91
99
  colIndex = self.table.columnManager.findColumnIndex(nearestColumn);
92
100
  prevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false;
93
-
101
+
94
102
  if(prevColumn && self._checkResizability(prevColumn)){
95
103
  self.startColumn = column;
96
104
  self._mouseDown(e, prevColumn, prevHandle);
97
105
  }
98
106
  }
99
107
  };
100
-
108
+
101
109
  prevHandle.addEventListener("mousedown", prevHandleDown);
102
110
  prevHandle.addEventListener("touchstart", prevHandleDown, {passive: true});
103
-
111
+
104
112
  //resize column on double click
105
113
  prevHandle.addEventListener("dblclick", function(e){
106
114
  var nearestColumn, colIndex, prevColumn;
107
-
115
+
108
116
  nearestColumn = column.getFirstColumn();
109
-
117
+
110
118
  if(nearestColumn){
111
119
  colIndex = self.table.columnManager.findColumnIndex(nearestColumn);
112
120
  prevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false;
113
-
121
+
114
122
  if(prevColumn && self._checkResizability(prevColumn)){
115
123
  e.stopPropagation();
116
124
  prevColumn.reinitializeWidth(true);
117
125
  }
118
126
  }
119
127
  });
120
-
128
+
121
129
  element.appendChild(handle);
122
130
  element.appendChild(prevHandle);
123
131
  }
124
132
  }
125
-
133
+
126
134
  _checkResizability(column){
127
135
  return column.definition.resizable;
128
136
  }
129
-
137
+
130
138
  _mouseDown(e, column, handle){
131
139
  var self = this;
132
-
140
+
133
141
  self.table.element.classList.add("tabulator-block-select");
134
142
 
135
143
  function mouseMove(e){
136
144
  // self.table.columnManager.tempScrollBlock();
137
-
145
+
138
146
  if(self.table.rtl){
139
147
  column.setWidth(self.startWidth - ((typeof e.screenX === "undefined" ? e.touches[0].screenX : e.screenX) - self.startX));
140
148
  }else{
141
149
  column.setWidth(self.startWidth + ((typeof e.screenX === "undefined" ? e.touches[0].screenX : e.screenX) - self.startX));
142
150
  }
143
-
151
+
144
152
  self.table.columnManager.renderer.rerenderColumns(true);
145
-
153
+
146
154
  if(!self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){
147
155
  column.checkCellHeights();
148
156
  }
149
157
  }
150
-
158
+
151
159
  function mouseUp(e){
152
-
160
+
153
161
  //block editor from taking action while resizing is taking place
154
162
  if(self.startColumn.modules.edit){
155
163
  self.startColumn.modules.edit.blocked = false;
156
164
  }
157
-
165
+
158
166
  if(self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){
159
167
  column.checkCellHeights();
160
168
  }
161
-
169
+
162
170
  document.body.removeEventListener("mouseup", mouseUp);
163
171
  document.body.removeEventListener("mousemove", mouseMove);
164
-
172
+
165
173
  handle.removeEventListener("touchmove", mouseMove);
166
174
  handle.removeEventListener("touchend", mouseUp);
167
-
175
+
168
176
  self.table.element.classList.remove("tabulator-block-select");
169
177
 
170
- self.dispatch("column-resized", column);
171
- self.table.externalEvents.dispatch("columnResized", column.getComponent());
178
+ if(self.startWidth !== column.getWidth()){
179
+ self.dispatch("column-resized", column);
180
+ self.table.externalEvents.dispatch("columnResized", column.getComponent());
181
+ }
172
182
  }
173
-
183
+
174
184
  e.stopPropagation(); //prevent resize from interfereing with movable columns
175
-
185
+
176
186
  //block editor from taking action while resizing is taking place
177
187
  if(self.startColumn.modules.edit){
178
188
  self.startColumn.modules.edit.blocked = true;
179
189
  }
180
-
190
+
181
191
  self.startX = typeof e.screenX === "undefined" ? e.touches[0].screenX : e.screenX;
182
192
  self.startWidth = column.getWidth();
183
-
193
+
184
194
  document.body.addEventListener("mousemove", mouseMove);
185
195
  document.body.addEventListener("mouseup", mouseUp);
186
196
  handle.addEventListener("touchmove", mouseMove, {passive: true});
@@ -322,7 +322,7 @@ class ResponsiveLayout extends Module{
322
322
  var titleHighlight = document.createElement("strong");
323
323
  titleData.appendChild(titleHighlight);
324
324
  this.langBind("columns|" + item.field, function(text){
325
- titleHighlight.innerText = text || item.title;
325
+ titleHighlight.innerHTML = text || item.title;
326
326
  });
327
327
 
328
328
  if(item.value instanceof Node){