tabulator-tables 5.0.1 → 5.0.6

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 (59) hide show
  1. package/bower.json +1 -1
  2. package/build/rollup.js +1 -1
  3. package/dist/css/tabulator_bootstrap3.css +9 -0
  4. package/dist/css/tabulator_bootstrap3.css.map +1 -1
  5. package/dist/css/tabulator_bootstrap3.min.css +1 -1
  6. package/dist/css/tabulator_bootstrap3.min.css.map +1 -1
  7. package/dist/css/tabulator_bootstrap4.css +0 -4
  8. package/dist/css/tabulator_bootstrap4.css.map +1 -1
  9. package/dist/css/tabulator_bootstrap4.min.css +1 -1
  10. package/dist/css/tabulator_bootstrap4.min.css.map +1 -1
  11. package/dist/css/tabulator_bulma.css +5 -1
  12. package/dist/css/tabulator_bulma.css.map +1 -1
  13. package/dist/css/tabulator_bulma.min.css +1 -1
  14. package/dist/css/tabulator_bulma.min.css.map +1 -1
  15. package/dist/css/tabulator_semanticui.css +11 -2
  16. package/dist/css/tabulator_semanticui.css.map +1 -1
  17. package/dist/css/tabulator_semanticui.min.css +1 -1
  18. package/dist/css/tabulator_semanticui.min.css.map +1 -1
  19. package/dist/js/tabulator.js +295 -176
  20. package/dist/js/tabulator.js.map +1 -1
  21. package/dist/js/tabulator.min.js +2 -2
  22. package/dist/js/tabulator.min.js.map +1 -1
  23. package/dist/js/tabulator_esm.js +252 -153
  24. package/dist/js/tabulator_esm.js.map +1 -1
  25. package/dist/js/tabulator_esm.min.js +2 -2
  26. package/dist/js/tabulator_esm.min.js.map +1 -1
  27. package/package.json +1 -1
  28. package/src/js/core/ColumnManager.js +12 -12
  29. package/src/js/core/FooterManager.js +2 -2
  30. package/src/js/core/RowManager.js +6 -5
  31. package/src/js/core/Tabulator.js +64 -29
  32. package/src/js/core/column/Column.js +2 -2
  33. package/src/js/core/rendering/renderers/VirtualDomVertical.js +4 -0
  34. package/src/js/core/row/Row.js +4 -1
  35. package/src/js/core/tools/DataLoader.js +1 -1
  36. package/src/js/core/tools/ExternalEventBus.js +3 -2
  37. package/src/js/core/tools/Helpers.js +24 -7
  38. package/src/js/core/tools/InteractionMonitor.js +1 -0
  39. package/src/js/core/tools/ModuleBinder.js +1 -1
  40. package/src/js/modules/Accessor/Accessor.js +1 -1
  41. package/src/js/modules/Ajax/defaults/contentTypeFormatters.js +22 -1
  42. package/src/js/modules/DataTree/DataTree.js +1 -1
  43. package/src/js/modules/Edit/Edit.js +7 -6
  44. package/src/js/modules/Edit/defaults/editors/progress.js +2 -2
  45. package/src/js/modules/Filter/Filter.js +1 -1
  46. package/src/js/modules/Format/defaults/formatters/money.js +8 -1
  47. package/src/js/modules/FrozenColumns/FrozenColumns.js +21 -0
  48. package/src/js/modules/GroupRows/Group.js +2 -0
  49. package/src/js/modules/GroupRows/GroupRows.js +4 -6
  50. package/src/js/modules/History/defaults/redoers.js +1 -0
  51. package/src/js/modules/History/defaults/undoers.js +1 -0
  52. package/src/js/modules/HtmlTableImport/HtmlTableImport.js +4 -22
  53. package/src/js/modules/Page/Page.js +2 -2
  54. package/src/js/modules/ReactiveData/ReactiveData.js +28 -27
  55. package/src/js/modules/ResponsiveLayout/ResponsiveLayout.js +5 -1
  56. package/src/scss/themes/bootstrap/tabulator_bootstrap3.scss +9 -0
  57. package/src/scss/themes/bootstrap/tabulator_bootstrap4.scss +0 -4
  58. package/src/scss/themes/bulma/tabulator_bulma.scss +5 -1
  59. package/src/scss/themes/semanticui/tabulator_semanticui.scss +12 -7
@@ -1,4 +1,4 @@
1
- /* Tabulator v5.0.1 (c) Oliver Folkerd 2021 */
1
+ /* Tabulator v5.0.6 (c) Oliver Folkerd 2021 */
2
2
  class CoreFeature{
3
3
 
4
4
  constructor(table){
@@ -195,7 +195,7 @@ class Module extends CoreFeature{
195
195
  }
196
196
  }
197
197
 
198
- class Helpers$1{
198
+ class Helpers{
199
199
 
200
200
  static elVisible(el){
201
201
  return !(el.offsetWidth <= 0 && el.offsetHeight <= 0);
@@ -210,18 +210,35 @@ class Helpers$1{
210
210
  };
211
211
  }
212
212
 
213
- static deepClone(obj){
214
- var clone = Object.assign(Array.isArray(obj) ? [] : {}, obj);
213
+ static deepClone(obj, clone, list = []){
214
+ var objectProto = {}.__proto__,
215
+ arrayProto = [].__proto__;
216
+
217
+ if (!clone){
218
+ clone = Object.assign(Array.isArray(obj) ? [] : {}, obj);
219
+ }
215
220
 
216
221
  for(var i in obj) {
217
- if(obj[i] != null && typeof(obj[i]) === "object"){
218
- if (obj[i] instanceof Date) {
219
- clone[i] = new Date(obj[i]);
220
- } else {
221
- clone[i] = this.deepClone(obj[i]);
222
+ let subject = obj[i],
223
+ match, copy;
224
+
225
+ if(subject != null && typeof subject === "object" && (subject.__proto__ === objectProto || subject.__proto__ === arrayProto)){
226
+ match = list.findIndex((item) => {
227
+ return item.subject === subject;
228
+ });
229
+
230
+ if(match > -1){
231
+ clone[i] = list[match].copy;
232
+ }else {
233
+ copy = Object.assign(Array.isArray(subject) ? [] : {}, subject);
234
+
235
+ list.unshift({subject, copy});
236
+
237
+ clone[i] = this.deepClone(subject, copy, list);
222
238
  }
223
239
  }
224
240
  }
241
+
225
242
  return clone;
226
243
  }
227
244
  }
@@ -259,7 +276,7 @@ class Accessor extends Module{
259
276
  var match = false,
260
277
  config = {};
261
278
 
262
- this.allowedTypes.forEach(function(type){
279
+ this.allowedTypes.forEach((type) => {
263
280
  var key = "accessor" + (type.charAt(0).toUpperCase() + type.slice(1)),
264
281
  accessor;
265
282
 
@@ -309,7 +326,7 @@ class Accessor extends Module{
309
326
  rowComponent = row.getComponent();
310
327
 
311
328
  //clone data object with deep copy to isolate internal data from returned result
312
- var data = Helpers$1.deepClone(row.data || {});
329
+ var data = Helpers.deepClone(row.data || {});
313
330
 
314
331
  this.table.columnManager.traverse(function(column){
315
332
  var value, accessor, params, colCompnent;
@@ -475,6 +492,26 @@ function defaultLoaderPromise(url, config, params){
475
492
  });
476
493
  }
477
494
 
495
+ function generateParamsList$1(data, prefix){
496
+ var output = [];
497
+
498
+ prefix = prefix || "";
499
+
500
+ if(Array.isArray(data)){
501
+ data.forEach((item, i) => {
502
+ output = output.concat(generateParamsList$1(item, prefix ? prefix + "[" + i + "]" : i));
503
+ });
504
+ }else if (typeof data === "object"){
505
+ for (var key in data){
506
+ output = output.concat(generateParamsList$1(data[key], prefix ? prefix + "[" + key + "]" : key));
507
+ }
508
+ }else {
509
+ output.push({key:prefix, value:data});
510
+ }
511
+
512
+ return output;
513
+ }
514
+
478
515
  var defaultContentTypeFormatters = {
479
516
  "json":{
480
517
  headers:{
@@ -488,7 +525,8 @@ var defaultContentTypeFormatters = {
488
525
  headers:{
489
526
  },
490
527
  body:function(url, config, params){
491
- var output = this.generateParamsList(params),
528
+
529
+ var output = generateParamsList$1(params),
492
530
  form = new FormData();
493
531
 
494
532
  output.forEach(function(item){
@@ -2292,7 +2330,7 @@ class Column$1 extends CoreFeature{
2292
2330
  this.reinitializeWidth();
2293
2331
  }
2294
2332
 
2295
- this.table.columnManager._verticalAlignHeaders();
2333
+ this.table.columnManager.verticalAlignHeaders();
2296
2334
 
2297
2335
  this.dispatch("column-show", this, responsiveToggle);
2298
2336
 
@@ -2317,7 +2355,7 @@ class Column$1 extends CoreFeature{
2317
2355
 
2318
2356
  this.element.style.display = "none";
2319
2357
 
2320
- this.table.columnManager._verticalAlignHeaders();
2358
+ this.table.columnManager.verticalAlignHeaders();
2321
2359
 
2322
2360
  if(this.parent.isGroup){
2323
2361
  this.parent.checkColumnVisibility();
@@ -2836,6 +2874,10 @@ class Row$1 extends CoreFeature{
2836
2874
  }
2837
2875
  }
2838
2876
 
2877
+ deinitializeHeight(){
2878
+ this.heightInitialized = false;
2879
+ }
2880
+
2839
2881
  reinitialize(children){
2840
2882
  this.initialized = false;
2841
2883
  this.heightInitialized = false;
@@ -2892,7 +2934,6 @@ class Row$1 extends CoreFeature{
2892
2934
 
2893
2935
  //normalize the height of elements in the row
2894
2936
  normalizeHeight(force){
2895
-
2896
2937
  if(force){
2897
2938
  this.clearCellHeight();
2898
2939
  }
@@ -2946,7 +2987,7 @@ class Row$1 extends CoreFeature{
2946
2987
 
2947
2988
  //update the rows data
2948
2989
  updateData(updatedData){
2949
- var visible = this.element && Helpers$1.elVisible(this.element),
2990
+ var visible = this.element && Helpers.elVisible(this.element),
2950
2991
  tempData = {},
2951
2992
  newRowData;
2952
2993
 
@@ -4281,7 +4322,7 @@ class DataTree extends Module{
4281
4322
 
4282
4323
  checkForRestyle(cell){
4283
4324
  if(!cell.row.cells.indexOf(cell)){
4284
- cell.row.reinitialize();
4325
+ this.layoutRow(cell.row);
4285
4326
  }
4286
4327
  }
4287
4328
 
@@ -5589,7 +5630,7 @@ function select(cell, onRendered, success, cancel, editorParams){
5589
5630
  }
5590
5631
 
5591
5632
 
5592
- var offset = Helpers$1.elOffset(cellEl);
5633
+ var offset = Helpers.elOffset(cellEl);
5593
5634
 
5594
5635
  listEl.style.minWidth = cellEl.offsetWidth + "px";
5595
5636
 
@@ -6066,7 +6107,7 @@ function autocomplete(cell, onRendered, success, cancel, editorParams){
6066
6107
  if(!listEl.parentNode){
6067
6108
  while(listEl.firstChild) listEl.removeChild(listEl.firstChild);
6068
6109
 
6069
- var offset = Helpers$1.elOffset(cellEl);
6110
+ var offset = Helpers.elOffset(cellEl);
6070
6111
 
6071
6112
  listEl.style.minWidth = cellEl.offsetWidth + "px";
6072
6113
 
@@ -6381,8 +6422,8 @@ function star(cell, onRendered, success, cancel, editorParams){
6381
6422
  //draggable progress bar
6382
6423
  function progress(cell, onRendered, success, cancel, editorParams){
6383
6424
  var element = cell.getElement(),
6384
- max = typeof editorParams.max === "undefined" ? ( element.getElementsByTagName("div")[0].getAttribute("max") || 100) : editorParams.max,
6385
- min = typeof editorParams.min === "undefined" ? ( element.getElementsByTagName("div")[0].getAttribute("min") || 0) : editorParams.min,
6425
+ max = typeof editorParams.max === "undefined" ? ( element.getElementsByTagName("div")[0]?.getAttribute("max") || 100) : editorParams.max,
6426
+ min = typeof editorParams.min === "undefined" ? ( element.getElementsByTagName("div")[0]?.getAttribute("min") || 0) : editorParams.min,
6386
6427
  percent = (max - min) / 100,
6387
6428
  value = cell.getValue() || 0,
6388
6429
  handle = document.createElement("div"),
@@ -6754,7 +6795,7 @@ class Edit extends Module{
6754
6795
  nextCell = this.findNextEditableCell(prevRow, prevRow.cells.length);
6755
6796
 
6756
6797
  if(nextCell){
6757
- nextCell.edit();
6798
+ nextCell.getComponent().edit();
6758
6799
  return true;
6759
6800
  }
6760
6801
  }
@@ -6785,7 +6826,7 @@ class Edit extends Module{
6785
6826
  nextCell = this.findNextEditableCell(nextRow, -1);
6786
6827
 
6787
6828
  if(nextCell){
6788
- nextCell.edit();
6829
+ nextCell.getComponent().edit();
6789
6830
  return true;
6790
6831
  }
6791
6832
  }
@@ -6809,7 +6850,7 @@ class Edit extends Module{
6809
6850
  nextCell = this.findPrevEditableCell(cell.row, index);
6810
6851
 
6811
6852
  if(nextCell){
6812
- nextCell.edit();
6853
+ nextCell.getComponent().edit();
6813
6854
  return true;
6814
6855
  }
6815
6856
  }
@@ -6831,7 +6872,7 @@ class Edit extends Module{
6831
6872
  nextCell = this.findNextEditableCell(cell.row, index);
6832
6873
 
6833
6874
  if(nextCell){
6834
- nextCell.edit();
6875
+ nextCell.getComponent().edit();
6835
6876
  return true;
6836
6877
  }
6837
6878
  }
@@ -6853,7 +6894,7 @@ class Edit extends Module{
6853
6894
  nextRow = this.table.rowManager.prevDisplayRow(cell.row, true);
6854
6895
 
6855
6896
  if(nextRow){
6856
- nextRow.cells[index].edit();
6897
+ nextRow.cells[index].getComponent().edit();
6857
6898
  return true;
6858
6899
  }
6859
6900
  }
@@ -6875,7 +6916,7 @@ class Edit extends Module{
6875
6916
  nextRow = this.table.rowManager.nextDisplayRow(cell.row, true);
6876
6917
 
6877
6918
  if(nextRow){
6878
- nextRow.cells[index].edit();
6919
+ nextRow.cells[index].getComponent().edit();
6879
6920
  return true;
6880
6921
  }
6881
6922
  }
@@ -8954,10 +8995,12 @@ function textarea$1(cell, formatterParams, onRendered){
8954
8995
 
8955
8996
  function money(cell, formatterParams, onRendered){
8956
8997
  var floatVal = parseFloat(cell.getValue()),
8998
+ sign = "",
8957
8999
  number, integer, decimal, rgx;
8958
9000
 
8959
9001
  var decimalSym = formatterParams.decimal || ".";
8960
9002
  var thousandSym = formatterParams.thousand || ",";
9003
+ var negativeSign = formatterParams.negativeSign || "-";
8961
9004
  var symbol = formatterParams.symbol || "";
8962
9005
  var after = !!formatterParams.symbolAfter;
8963
9006
  var precision = typeof formatterParams.precision !== "undefined" ? formatterParams.precision : 2;
@@ -8966,6 +9009,11 @@ function money(cell, formatterParams, onRendered){
8966
9009
  return this.emptyToSpace(this.sanitizeHTML(cell.getValue()));
8967
9010
  }
8968
9011
 
9012
+ if(floatVal < 0){
9013
+ floatVal = Math.abs(floatVal);
9014
+ sign = negativeSign;
9015
+ }
9016
+
8969
9017
  number = precision !== false ? floatVal.toFixed(precision) : floatVal;
8970
9018
  number = String(number).split(".");
8971
9019
 
@@ -8978,7 +9026,7 @@ function money(cell, formatterParams, onRendered){
8978
9026
  integer = integer.replace(rgx, "$1" + thousandSym + "$2");
8979
9027
  }
8980
9028
 
8981
- return after ? integer + decimal + symbol : symbol + integer + decimal;
9029
+ return after ? sign + integer + decimal + symbol : sign + symbol + integer + decimal;
8982
9030
  }
8983
9031
 
8984
9032
  function link(cell, formatterParams, onRendered){
@@ -9865,12 +9913,33 @@ class FrozenColumns extends Module{
9865
9913
  if(this.table.modules.columnCalcs.topInitialized && this.table.modules.columnCalcs.topRow){
9866
9914
  this.layoutRow(this.table.modules.columnCalcs.topRow);
9867
9915
  }
9916
+
9868
9917
  if(this.table.modules.columnCalcs.botInitialized && this.table.modules.columnCalcs.botRow){
9869
9918
  this.layoutRow(this.table.modules.columnCalcs.botRow);
9870
9919
  }
9920
+
9921
+ if(this.table.modExists("groupRows")){
9922
+ this.layoutGroupCalcs(this.table.modules.groupRows.getGroups());
9923
+ }
9871
9924
  }
9872
9925
  }
9873
9926
 
9927
+ layoutGroupCalcs(groups){
9928
+ groups.forEach((group) => {
9929
+ if(group.calcs.top){
9930
+ this.layoutRow(group.calcs.top);
9931
+ }
9932
+
9933
+ if(group.calcs.bottom){
9934
+ this.layoutRow(group.calcs.bottom);
9935
+ }
9936
+
9937
+ if(group.groupList && group.groupList.length){
9938
+ this.layoutGroupCalcs(group.groupList && group.groupList);
9939
+ }
9940
+ });
9941
+ }
9942
+
9874
9943
  //calculate column positions and layout headers
9875
9944
  layoutColumnPosition(allCells){
9876
9945
 
@@ -10794,7 +10863,7 @@ class Group{
10794
10863
  this.initialized = false;
10795
10864
  this.height = 0;
10796
10865
 
10797
- if(Helpers$1.elVisible(this.element)){
10866
+ if(Helpers.elVisible(this.element)){
10798
10867
  this.initialize(true);
10799
10868
  }
10800
10869
  }
@@ -10823,6 +10892,8 @@ class Group{
10823
10892
 
10824
10893
  clearCellHeight(){}
10825
10894
 
10895
+ deinitializeHeight(){}
10896
+
10826
10897
  //////////////// Object Generation /////////////////
10827
10898
  getComponent(){
10828
10899
  if(!this.component){
@@ -11159,14 +11230,12 @@ class GroupRows extends Module{
11159
11230
  getRows(rows){
11160
11231
  if(this.groupIDLookups.length){
11161
11232
 
11162
- if(!Object.keys(this.groups).length){
11163
- this.dispatchExternal("dataGrouping");
11233
+ this.dispatchExternal("dataGrouping");
11164
11234
 
11165
- this.generateGroups(rows);
11235
+ this.generateGroups(rows);
11166
11236
 
11167
- if(this.subscribedExternal("dataGrouped")){
11168
- this.dispatchExternal("dataGrouped", this.getGroups(true));
11169
- }
11237
+ if(this.subscribedExternal("dataGrouped")){
11238
+ this.dispatchExternal("dataGrouped", this.getGroups(true));
11170
11239
  }
11171
11240
 
11172
11241
  return this.updateGroupRows();
@@ -11403,6 +11472,7 @@ GroupRows.moduleName = "groupRows";
11403
11472
  var defaultUndoers = {
11404
11473
  cellEdit: function(action){
11405
11474
  action.component.setValueProcessData(action.data.oldValue);
11475
+ action.component.cellRendered();
11406
11476
  },
11407
11477
 
11408
11478
  rowAdd: function(action){
@@ -11428,6 +11498,7 @@ var defaultUndoers = {
11428
11498
  var defaultRedoers = {
11429
11499
  cellEdit: function(action){
11430
11500
  action.component.setValueProcessData(action.data.newValue);
11501
+ action.component.cellRendered();
11431
11502
  },
11432
11503
 
11433
11504
  rowAdd: function(action){
@@ -11624,17 +11695,17 @@ class HtmlTableImport extends Module{
11624
11695
  }
11625
11696
 
11626
11697
  initialize(){
11627
- this.subscribe("table-building", this.tableElementCheck.bind(this));
11698
+ this.tableElementCheck();
11628
11699
  }
11629
11700
 
11630
11701
  tableElementCheck(){
11631
- if(this.table.element.tagName === "TABLE"){
11702
+ if(this.table.originalElement && this.table.originalElement.tagName === "TABLE"){
11632
11703
  this.parseTable();
11633
11704
  }
11634
11705
  }
11635
11706
 
11636
11707
  parseTable(){
11637
- var element = this.table.element,
11708
+ var element = this.table.originalElement,
11638
11709
  options = this.table.options,
11639
11710
  columns = options.columns,
11640
11711
  headers = element.getElementsByTagName("th"),
@@ -11678,28 +11749,9 @@ class HtmlTableImport extends Module{
11678
11749
  data.push(item);
11679
11750
  }
11680
11751
 
11681
- //create new element
11682
- var newElement = document.createElement("div");
11683
-
11684
- //transfer attributes to new element
11685
- var attributes = element.attributes;
11686
-
11687
- // loop through attributes and apply them on div
11688
-
11689
- for(var i in attributes){
11690
- if(typeof attributes[i] == "object"){
11691
- newElement.setAttribute(attributes[i].name, attributes[i].value);
11692
- }
11693
- }
11694
-
11695
- // replace table with div element
11696
- element.parentNode.replaceChild(newElement, element);
11697
-
11698
11752
  options.data = data;
11699
11753
 
11700
11754
  this.dispatchExternal("htmlImported");
11701
-
11702
- this.table.element = newElement;
11703
11755
  }
11704
11756
 
11705
11757
  //extract tabulator attribute options
@@ -11776,7 +11828,7 @@ class HtmlTableImport extends Module{
11776
11828
  header.attributes;
11777
11829
 
11778
11830
  // //check for tablator inline options
11779
- this._extractOptions(header, col, Column.prototype.defaultOptionList);
11831
+ this._extractOptions(header, col, Column$1.prototype.defaultOptionList);
11780
11832
 
11781
11833
  this.fieldIndex[index] = col.field;
11782
11834
 
@@ -12682,7 +12734,7 @@ class Menu extends Module{
12682
12734
 
12683
12735
  this.positionReversedX = false;
12684
12736
  }else {
12685
- parentOffset = Helpers$1.elOffset(parentEl);
12737
+ parentOffset = Helpers.elOffset(parentEl);
12686
12738
  x = parentOffset.left + parentEl.offsetWidth;
12687
12739
  y = parentOffset.top - 1;
12688
12740
  }
@@ -12800,7 +12852,7 @@ class MoveColumns extends Module{
12800
12852
 
12801
12853
  config.mousemove = function(e){
12802
12854
  if(column.parent === self.moving.parent){
12803
- if((((self.touchMove ? e.touches[0].pageX : e.pageX) - Helpers$1.elOffset(colEl).left) + self.table.columnManager.element.scrollLeft) > (column.getWidth() / 2)){
12855
+ if((((self.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(colEl).left) + self.table.columnManager.element.scrollLeft) > (column.getWidth() / 2)){
12804
12856
  if(self.toCol !== column || !self.toColAfter){
12805
12857
  colEl.parentNode.insertBefore(self.placeholderElement, colEl.nextSibling);
12806
12858
  self.moveColumn(column, true);
@@ -12916,7 +12968,7 @@ class MoveColumns extends Module{
12916
12968
  var element = column.getElement();
12917
12969
 
12918
12970
  this.moving = column;
12919
- this.startX = (this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers$1.elOffset(element).left;
12971
+ this.startX = (this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(element).left;
12920
12972
 
12921
12973
  this.table.element.classList.add("tabulator-block-select");
12922
12974
 
@@ -13015,7 +13067,7 @@ class MoveColumns extends Module{
13015
13067
  moveHover(e){
13016
13068
  var columnHolder = this.table.columnManager.getElement(),
13017
13069
  scrollLeft = columnHolder.scrollLeft,
13018
- xPos = ((this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers$1.elOffset(columnHolder).left) + scrollLeft,
13070
+ xPos = ((this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(columnHolder).left) + scrollLeft,
13019
13071
  scrollPos;
13020
13072
 
13021
13073
  this.hoverElement.style.left = (xPos - this.startX) + "px";
@@ -13117,7 +13169,7 @@ class MoveRows extends Module{
13117
13169
 
13118
13170
  //same table drag drop
13119
13171
  config.mousemove = function(e){
13120
- if(((e.pageY - Helpers$1.elOffset(group.element).top) + self.table.rowManager.element.scrollTop) > (group.getHeight() / 2)){
13172
+ if(((e.pageY - Helpers.elOffset(group.element).top) + self.table.rowManager.element.scrollTop) > (group.getHeight() / 2)){
13121
13173
  if(self.toRow !== group || !self.toRowAfter){
13122
13174
  var rowEl = group.getElement();
13123
13175
  rowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);
@@ -13151,7 +13203,7 @@ class MoveRows extends Module{
13151
13203
  config.mousemove = function(e){
13152
13204
  var rowEl = row.getElement();
13153
13205
 
13154
- if(((e.pageY - Helpers$1.elOffset(rowEl).top) + self.table.rowManager.element.scrollTop) > (row.getHeight() / 2)){
13206
+ if(((e.pageY - Helpers.elOffset(rowEl).top) + self.table.rowManager.element.scrollTop) > (row.getHeight() / 2)){
13155
13207
  if(self.toRow !== row || !self.toRowAfter){
13156
13208
  rowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);
13157
13209
  self.moveRow(row, true);
@@ -13943,6 +13995,8 @@ class Page extends Module{
13943
13995
 
13944
13996
  this.table.rowManager.getTableElement().removeChild(testElRow);
13945
13997
  }
13998
+
13999
+ this.generatePageSizeSelectList();
13946
14000
  }
13947
14001
 
13948
14002
  initialLoadComplete(){
@@ -14202,8 +14256,6 @@ class Page extends Module{
14202
14256
 
14203
14257
  this.page = this.table.options.paginationInitialPage;
14204
14258
  this.count = this.table.options.paginationButtonCount;
14205
-
14206
- this.generatePageSizeSelectList();
14207
14259
  }
14208
14260
 
14209
14261
  //set default values
@@ -15216,7 +15268,8 @@ class ReactiveData extends Module{
15216
15268
  }
15217
15269
 
15218
15270
  watchData(data){
15219
- var version;
15271
+ var self = this,
15272
+ version;
15220
15273
 
15221
15274
  this.currentVersion ++;
15222
15275
 
@@ -15232,16 +15285,16 @@ class ReactiveData extends Module{
15232
15285
  Object.defineProperty(this.data, "push", {
15233
15286
  enumerable: false,
15234
15287
  configurable: true,
15235
- value: () => {
15288
+ value: function(){
15236
15289
  var args = Array.from(arguments);
15237
15290
 
15238
- if(!this.blocked && version === this.currentVersion){
15291
+ if(!self.blocked && version === self.currentVersion){
15239
15292
  args.forEach((arg) => {
15240
- this.table.rowManager.addRowActual(arg, false);
15293
+ self.table.rowManager.addRowActual(arg, false);
15241
15294
  });
15242
15295
  }
15243
15296
 
15244
- return this.origFuncs.push.apply(data, arguments);
15297
+ return self.origFuncs.push.apply(data, arguments);
15245
15298
  }
15246
15299
  });
15247
15300
 
@@ -15251,16 +15304,16 @@ class ReactiveData extends Module{
15251
15304
  Object.defineProperty(this.data, "unshift", {
15252
15305
  enumerable: false,
15253
15306
  configurable: true,
15254
- value: () => {
15307
+ value: function(){
15255
15308
  var args = Array.from(arguments);
15256
15309
 
15257
- if(!this.blocked && version === this.currentVersion){
15310
+ if(!self.blocked && version === self.currentVersion){
15258
15311
  args.forEach((arg) => {
15259
- this.table.rowManager.addRowActual(arg, true);
15312
+ self.table.rowManager.addRowActual(arg, true);
15260
15313
  });
15261
15314
  }
15262
15315
 
15263
- return this.origFuncs.unshift.apply(data, arguments);
15316
+ return self.origFuncs.unshift.apply(data, arguments);
15264
15317
  }
15265
15318
  });
15266
15319
 
@@ -15271,12 +15324,12 @@ class ReactiveData extends Module{
15271
15324
  Object.defineProperty(this.data, "shift", {
15272
15325
  enumerable: false,
15273
15326
  configurable: true,
15274
- value: () => {
15327
+ value: function(){
15275
15328
  var row;
15276
15329
 
15277
- if(!this.blocked && version === this.currentVersion){
15278
- if(this.data.length){
15279
- row = this.table.rowManager.getRowFromDataObject(this.data[0]);
15330
+ if(!self.blocked && version === self.currentVersion){
15331
+ if(self.data.length){
15332
+ row = self.table.rowManager.getRowFromDataObject(self.data[0]);
15280
15333
 
15281
15334
  if(row){
15282
15335
  row.deleteActual();
@@ -15284,7 +15337,7 @@ class ReactiveData extends Module{
15284
15337
  }
15285
15338
  }
15286
15339
 
15287
- return this.origFuncs.shift.call(data);
15340
+ return self.origFuncs.shift.call(data);
15288
15341
  }
15289
15342
  });
15290
15343
 
@@ -15294,18 +15347,18 @@ class ReactiveData extends Module{
15294
15347
  Object.defineProperty(this.data, "pop", {
15295
15348
  enumerable: false,
15296
15349
  configurable: true,
15297
- value: () => {
15350
+ value: function(){
15298
15351
  var row;
15299
- if(!this.blocked && version === this.currentVersion){
15300
- if(this.data.length){
15301
- row = this.table.rowManager.getRowFromDataObject(this.data[this.data.length - 1]);
15352
+ if(!self.blocked && version === self.currentVersion){
15353
+ if(self.data.length){
15354
+ row = self.table.rowManager.getRowFromDataObject(self.data[self.data.length - 1]);
15302
15355
 
15303
15356
  if(row){
15304
15357
  row.deleteActual();
15305
15358
  }
15306
15359
  }
15307
15360
  }
15308
- return this.origFuncs.pop.call(data);
15361
+ return self.origFuncs.pop.call(data);
15309
15362
  }
15310
15363
  });
15311
15364
 
@@ -15316,28 +15369,28 @@ class ReactiveData extends Module{
15316
15369
  Object.defineProperty(this.data, "splice", {
15317
15370
  enumerable: false,
15318
15371
  configurable: true,
15319
- value: () => {
15372
+ value: function(){
15320
15373
  var args = Array.from(arguments),
15321
15374
  start = args[0] < 0 ? data.length + args[0] : args[0],
15322
15375
  end = args[1],
15323
15376
  newRows = args[2] ? args.slice(2) : false,
15324
15377
  startRow;
15325
15378
 
15326
- if(!this.blocked && version === this.currentVersion){
15379
+ if(!self.blocked && version === self.currentVersion){
15327
15380
 
15328
15381
  //add new rows
15329
15382
  if(newRows){
15330
- startRow = data[start] ? this.table.rowManager.getRowFromDataObject(data[start]) : false;
15383
+ startRow = data[start] ? self.table.rowManager.getRowFromDataObject(data[start]) : false;
15331
15384
 
15332
15385
  if(startRow){
15333
15386
  newRows.forEach((rowData) => {
15334
- this.table.rowManager.addRowActual(rowData, true, startRow, true);
15387
+ self.table.rowManager.addRowActual(rowData, true, startRow, true);
15335
15388
  });
15336
15389
  }else {
15337
15390
  newRows = newRows.slice().reverse();
15338
15391
 
15339
15392
  newRows.forEach((rowData) => {
15340
- this.table.rowManager.addRowActual(rowData, true, false, true);
15393
+ self.table.rowManager.addRowActual(rowData, true, false, true);
15341
15394
  });
15342
15395
  }
15343
15396
  }
@@ -15347,7 +15400,7 @@ class ReactiveData extends Module{
15347
15400
  var oldRows = data.slice(start, typeof args[1] === "undefined" ? args[1] : start + end);
15348
15401
 
15349
15402
  oldRows.forEach((rowData, i) => {
15350
- var row = this.table.rowManager.getRowFromDataObject(rowData);
15403
+ var row = self.table.rowManager.getRowFromDataObject(rowData);
15351
15404
 
15352
15405
  if(row){
15353
15406
  row.deleteActual(i !== oldRows.length - 1);
@@ -15356,11 +15409,11 @@ class ReactiveData extends Module{
15356
15409
  }
15357
15410
 
15358
15411
  if(newRows || end !== 0){
15359
- this.table.rowManager.reRenderInPosition();
15412
+ self.table.rowManager.reRenderInPosition();
15360
15413
  }
15361
15414
  }
15362
15415
 
15363
- return this.origFuncs.splice.apply(data, arguments);
15416
+ return self.origFuncs.splice.apply(data, arguments);
15364
15417
  }
15365
15418
  });
15366
15419
  }
@@ -16242,10 +16295,14 @@ class ResponsiveLayout extends Module{
16242
16295
  },
16243
16296
  };
16244
16297
 
16298
+ function onRendered(callback){
16299
+ callback();
16300
+ }
16301
+
16245
16302
  output.push({
16246
16303
  field: column.field,
16247
16304
  title: column.definition.title,
16248
- value: column.modules.format.formatter.call(self.table.modules.format, mockCellComponent, column.modules.format.params)
16305
+ value: column.modules.format.formatter.call(self.table.modules.format, mockCellComponent, column.modules.format.params, onRendered)
16249
16306
  });
16250
16307
  }else {
16251
16308
  output.push({
@@ -18082,8 +18139,8 @@ class Renderer extends CoreFeature{
18082
18139
 
18083
18140
  //check row visibility
18084
18141
  if(!ifVisible){
18085
- if(Helpers$1.elVisible(rowEl)){
18086
- offset = Helpers$1.elOffset(rowEl).top - Helpers$1.elOffset(this.elementVertical).top;
18142
+ if(Helpers.elVisible(rowEl)){
18143
+ offset = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.elementVertical).top;
18087
18144
 
18088
18145
  if(offset > 0 && offset < this.elementVertical.clientHeight - rowEl.offsetHeight){
18089
18146
  return false;
@@ -18686,6 +18743,7 @@ class ColumnManager extends CoreFeature {
18686
18743
  var el = document.createElement("div");
18687
18744
 
18688
18745
  el.classList.add("tabulator-headers");
18746
+ el.setAttribute("role", "row");
18689
18747
 
18690
18748
  return el;
18691
18749
  }
@@ -18694,6 +18752,7 @@ class ColumnManager extends CoreFeature {
18694
18752
  var el = document.createElement("div");
18695
18753
 
18696
18754
  el.classList.add("tabulator-header");
18755
+ el.setAttribute("role", "rowgroup");
18697
18756
 
18698
18757
  if(!this.table.options.headerVisible){
18699
18758
  el.classList.add("tabulator-header-hidden");
@@ -18852,7 +18911,6 @@ class ColumnManager extends CoreFeature {
18852
18911
  index = nextToColumn ? this.findColumnIndex(nextToColumn) : nextToColumn;
18853
18912
 
18854
18913
  if(nextToColumn && index > -1){
18855
-
18856
18914
  var parentIndex = this.columns.indexOf(nextToColumn.getTopColumn());
18857
18915
  var nextEl = nextToColumn.getElement();
18858
18916
 
@@ -18863,7 +18921,6 @@ class ColumnManager extends CoreFeature {
18863
18921
  this.columns.splice(parentIndex + 1, 0, column);
18864
18922
  nextEl.parentNode.insertBefore(colEl, nextEl.nextSibling);
18865
18923
  }
18866
-
18867
18924
  }else {
18868
18925
  if(before){
18869
18926
  this.columns.unshift(column);
@@ -18872,10 +18929,10 @@ class ColumnManager extends CoreFeature {
18872
18929
  this.columns.push(column);
18873
18930
  this.headersElement.appendChild(column.getElement());
18874
18931
  }
18875
-
18876
- column.columnRendered();
18877
18932
  }
18878
18933
 
18934
+ column.columnRendered();
18935
+
18879
18936
  return column;
18880
18937
  }
18881
18938
 
@@ -18898,7 +18955,7 @@ class ColumnManager extends CoreFeature {
18898
18955
  }
18899
18956
 
18900
18957
  //ensure column headers take up the correct amount of space in column groups
18901
- _verticalAlignHeaders(){
18958
+ verticalAlignHeaders(){
18902
18959
  var minHeight = 0;
18903
18960
 
18904
18961
  this.columns.forEach((column) => {
@@ -19055,7 +19112,7 @@ class ColumnManager extends CoreFeature {
19055
19112
  to.element.parentNode.insertBefore(to.element, from.element);
19056
19113
  }
19057
19114
 
19058
- this._verticalAlignHeaders();
19115
+ this.verticalAlignHeaders();
19059
19116
 
19060
19117
  this.table.rowManager.reinitialize();
19061
19118
  }
@@ -19236,7 +19293,7 @@ class ColumnManager extends CoreFeature {
19236
19293
  column.reinitializeWidth();
19237
19294
  }
19238
19295
 
19239
- this._verticalAlignHeaders();
19296
+ this.verticalAlignHeaders();
19240
19297
 
19241
19298
  this.table.rowManager.reinitialize();
19242
19299
 
@@ -19270,18 +19327,18 @@ class ColumnManager extends CoreFeature {
19270
19327
  this.columns.splice(index, 1);
19271
19328
  }
19272
19329
 
19273
- this._verticalAlignHeaders();
19330
+ this.verticalAlignHeaders();
19274
19331
 
19275
19332
  this.redraw();
19276
19333
  }
19277
19334
 
19278
19335
  //redraw columns
19279
19336
  redraw(force){
19280
- if(force){
19281
- if(Helpers$1.elVisible(this.element)){
19282
- this._verticalAlignHeaders();
19283
- }
19337
+ if(Helpers.elVisible(this.element)){
19338
+ this.verticalAlignHeaders();
19339
+ }
19284
19340
 
19341
+ if(force){
19285
19342
  this.table.rowManager.resetScroll();
19286
19343
  this.table.rowManager.reinitialize();
19287
19344
  }
@@ -19355,7 +19412,7 @@ class BaiscVertical extends Renderer{
19355
19412
  }
19356
19413
 
19357
19414
  scrollToRowNearestTop(row){
19358
- var rowTop = Helpers$1.elOffset(row.getElement()).top;
19415
+ var rowTop = Helpers.elOffset(row.getElement()).top;
19359
19416
 
19360
19417
  return !(Math.abs(this.elementVertical.scrollTop - rowTop) > Math.abs(this.elementVertical.scrollTop + this.elementVertical.clientHeight - rowTop));
19361
19418
  }
@@ -19363,7 +19420,7 @@ class BaiscVertical extends Renderer{
19363
19420
  scrollToRow(row){
19364
19421
  var rowEl = row.getElement();
19365
19422
 
19366
- this.elementVertical.scrollTop = Helpers$1.elOffset(rowEl).top - Helpers$1.elOffset(this.elementVertical).top + this.elementVertical.scrollTop;
19423
+ this.elementVertical.scrollTop = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.elementVertical).top + this.elementVertical.scrollTop;
19367
19424
  }
19368
19425
 
19369
19426
  visibleRows(includingBuffer){
@@ -19461,6 +19518,10 @@ class VirtualDomVertical extends Renderer{
19461
19518
  }
19462
19519
  }
19463
19520
 
19521
+ rows.forEach((row) => {
19522
+ row.deinitializeHeight();
19523
+ });
19524
+
19464
19525
  if(callback){
19465
19526
  callback();
19466
19527
  }
@@ -19621,7 +19682,7 @@ class VirtualDomVertical extends Renderer{
19621
19682
  position -= topPad;
19622
19683
  }
19623
19684
 
19624
- if(rowsCount && Helpers$1.elVisible(this.elementVertical)){
19685
+ if(rowsCount && Helpers.elVisible(this.elementVertical)){
19625
19686
  this.vDomTop = position;
19626
19687
 
19627
19688
  this.vDomBottom = position -1;
@@ -19980,6 +20041,7 @@ class RowManager extends CoreFeature{
19980
20041
 
19981
20042
  el.classList.add("tabulator-tableholder");
19982
20043
  el.setAttribute("tabindex", 0);
20044
+ el.setAttribute("role", "rowgroup");
19983
20045
 
19984
20046
  return el;
19985
20047
  }
@@ -19988,6 +20050,7 @@ class RowManager extends CoreFeature{
19988
20050
  var el = document.createElement("div");
19989
20051
 
19990
20052
  el.classList.add("tabulator-table");
20053
+ el.setAttribute("role", "rowgroup");
19991
20054
 
19992
20055
  return el;
19993
20056
  }
@@ -20110,13 +20173,12 @@ class RowManager extends CoreFeature{
20110
20173
  });
20111
20174
  }
20112
20175
  }else {
20113
- if(this.table.options.autoColumns && columnsChanged){
20176
+ if(this.table.options.autoColumns && columnsChanged && this.table.initialized){
20114
20177
  this.table.columnManager.generateColumnsFromRowData(data);
20115
20178
  }
20116
20179
  this.resetScroll();
20117
20180
 
20118
20181
  this._setDataActual(data);
20119
-
20120
20182
  }
20121
20183
 
20122
20184
  resolve();
@@ -20236,7 +20298,7 @@ class RowManager extends CoreFeature{
20236
20298
  this.dispatch("row-added", row, data, pos, index);
20237
20299
  });
20238
20300
 
20239
- this.reRenderInPosition();
20301
+ this.refreshActiveData(false, false, true);
20240
20302
 
20241
20303
  this.regenerateRowNumbers();
20242
20304
 
@@ -20618,7 +20680,7 @@ class RowManager extends CoreFeature{
20618
20680
  //case to handle scenario when trying to skip past end stage
20619
20681
  }
20620
20682
 
20621
- if(Helpers$1.elVisible(this.element)){
20683
+ if(Helpers.elVisible(this.element)){
20622
20684
  if(renderInPosition){
20623
20685
  this.reRenderInPosition();
20624
20686
  }else {
@@ -20781,13 +20843,13 @@ class RowManager extends CoreFeature{
20781
20843
  }
20782
20844
 
20783
20845
  renderTable(){
20784
-
20785
20846
  this.dispatchExternal("renderStarted");
20786
20847
 
20787
20848
  this.element.scrollTop = 0;
20788
20849
 
20850
+ this._clearTable();
20851
+
20789
20852
  if(this.displayRowsCount){
20790
- this._clearTable();
20791
20853
  this.renderer.renderRows();
20792
20854
 
20793
20855
  if(this.firstRender){
@@ -20978,7 +21040,7 @@ class FooterManager extends CoreFeature{
20978
21040
  }
20979
21041
 
20980
21042
  initialize(){
20981
-
21043
+ this.initializeElement();
20982
21044
  }
20983
21045
 
20984
21046
  createElement (){
@@ -20989,7 +21051,7 @@ class FooterManager extends CoreFeature{
20989
21051
  return el;
20990
21052
  }
20991
21053
 
20992
- initializeElement(element){
21054
+ initializeElement(){
20993
21055
  if(this.table.options.footerElement){
20994
21056
 
20995
21057
  switch(typeof this.table.options.footerElement){
@@ -21155,6 +21217,7 @@ class InteractionManager extends CoreFeature {
21155
21217
  if(!listener.handler){
21156
21218
  listener.handler = this.track.bind(this, key);
21157
21219
  this.el.addEventListener(key, listener.handler);
21220
+ console.log("add", key);
21158
21221
  // this.el.addEventListener(key, listener.handler, {passive: true})
21159
21222
  }
21160
21223
  }else {
@@ -21390,7 +21453,7 @@ class DataLoader extends CoreFeature{
21390
21453
  this.hideLoader();
21391
21454
 
21392
21455
  if(rowData !== false){
21393
- this.dispatchExternal("dataLoaded", data);
21456
+ this.dispatchExternal("dataLoaded", rowData);
21394
21457
  this.table.rowManager.setData(rowData, replace, !replace);
21395
21458
  }
21396
21459
  }else {
@@ -21494,7 +21557,8 @@ class DataLoader extends CoreFeature{
21494
21557
 
21495
21558
  class ExternalEventBus {
21496
21559
 
21497
- constructor(optionsList, debug){
21560
+ constructor(table, optionsList, debug){
21561
+ this.table = table;
21498
21562
  this.events = {};
21499
21563
  this.optionsList = optionsList || {};
21500
21564
  this.subscriptionNotifiers = {};
@@ -21572,7 +21636,7 @@ class ExternalEventBus {
21572
21636
 
21573
21637
  if(this.events[key]){
21574
21638
  this.events[key].forEach((callback, i) => {
21575
- let callResult = callback.apply(this, args);
21639
+ let callResult = callback.apply(this.table, args);
21576
21640
 
21577
21641
  if(!i){
21578
21642
  result = callResult;
@@ -22155,7 +22219,7 @@ class Localize extends Module{
22155
22219
  }
22156
22220
 
22157
22221
  initialize(){
22158
- this.langList = Helpers$1.deepClone(Localize.langs);
22222
+ this.langList = Helpers.deepClone(Localize.langs);
22159
22223
 
22160
22224
  if(this.table.options.columnDefaults.headerFilterPlaceholder !== false){
22161
22225
  this.setHeaderFilterPlaceholder(this.table.options.columnDefaults.headerFilterPlaceholder);
@@ -22247,7 +22311,7 @@ class Localize extends Module{
22247
22311
  this.locale = desiredLocale;
22248
22312
 
22249
22313
  //load default lang template
22250
- this.lang = Helpers$1.deepClone(this.langList.default || {});
22314
+ this.lang = Helpers.deepClone(this.langList.default || {});
22251
22315
 
22252
22316
  if(desiredLocale != "default"){
22253
22317
  traverseLang(this.langList[desiredLocale], this.lang);
@@ -22399,7 +22463,7 @@ class ModuleBinder {
22399
22463
 
22400
22464
  tabulator.extendModule = function(name, property, values){
22401
22465
  if(tabulator.moduleBindings[name]){
22402
- var source = tabulator.moduleBindings[name].prototype[property];
22466
+ var source = tabulator.moduleBindings[name][property];
22403
22467
 
22404
22468
  if(source){
22405
22469
  if(typeof values == "object"){
@@ -22484,6 +22548,7 @@ class Tabulator {
22484
22548
  this.browserSlow = false; //handle reduced functionality for slower browsers
22485
22549
  this.browserMobile = false; //check if running on moble, prevent resize cancelling edit on keyboard appearence
22486
22550
  this.rtl = false; //check if the table is in RTL mode
22551
+ this.originalElement = null; //hold original table element if it has been replaced
22487
22552
 
22488
22553
  this.componentFunctionBinder = new ComponentFuctionBinder(this); //bind component functions
22489
22554
  this.dataLoader = false; //bind component functions
@@ -22542,7 +22607,7 @@ class Tabulator {
22542
22607
 
22543
22608
  this._mapDepricatedFunctionality();
22544
22609
 
22545
- this.externalEvents = new ExternalEventBus(this.options, this.options.debugEventsExternal);
22610
+ this.externalEvents = new ExternalEventBus(this, this.options, this.options.debugEventsExternal);
22546
22611
  this.eventBus = new InternalEventBus(this.options.debugEventsInternal);
22547
22612
 
22548
22613
  this.interactionMonitor = new InteractionManager(this);
@@ -22553,27 +22618,6 @@ class Tabulator {
22553
22618
  this.footerManager.initialize();
22554
22619
  }
22555
22620
 
22556
- rtlCheck(){
22557
- var style = window.getComputedStyle(this.element);
22558
-
22559
- switch(this.options.textDirection){
22560
- case"auto":
22561
- if(style.direction !== "rtl"){
22562
- break;
22563
- }
22564
- case "rtl":
22565
- this.element.classList.add("tabulator-rtl");
22566
- this.rtl = true;
22567
- break;
22568
-
22569
- case "ltr":
22570
- this.element.classList.add("tabulator-ltr");
22571
-
22572
- default:
22573
- this.rtl = false;
22574
- }
22575
- }
22576
-
22577
22621
  //convert depricated functionality to new functions
22578
22622
  _mapDepricatedFunctionality(){
22579
22623
  //all previously deprecated functionality removed in the 5.0 release
@@ -22601,13 +22645,38 @@ class Tabulator {
22601
22645
  this.externalEvents.dispatch("tableBuilding");
22602
22646
  this.eventBus.dispatch("table-building");
22603
22647
 
22604
- this.rtlCheck();
22648
+ this._rtlCheck();
22605
22649
 
22606
22650
  this._buildElement();
22607
22651
 
22652
+ this._initializeTable();
22653
+
22608
22654
  this._loadInitialData();
22609
22655
 
22610
22656
  this.initialized = true;
22657
+
22658
+ this.externalEvents.dispatch("tableBuilt");
22659
+ }
22660
+
22661
+ _rtlCheck(){
22662
+ var style = window.getComputedStyle(this.element);
22663
+
22664
+ switch(this.options.textDirection){
22665
+ case"auto":
22666
+ if(style.direction !== "rtl"){
22667
+ break;
22668
+ }
22669
+ case "rtl":
22670
+ this.element.classList.add("tabulator-rtl");
22671
+ this.rtl = true;
22672
+ break;
22673
+
22674
+ case "ltr":
22675
+ this.element.classList.add("tabulator-ltr");
22676
+
22677
+ default:
22678
+ this.rtl = false;
22679
+ }
22611
22680
  }
22612
22681
 
22613
22682
  //clear pointers to objects in default config object
@@ -22622,7 +22691,28 @@ class Tabulator {
22622
22691
  //build tabulator element
22623
22692
  _buildElement(){
22624
22693
  var element = this.element,
22625
- options = this.options;
22694
+ options = this.options,
22695
+ newElement;
22696
+
22697
+ if(element.tagName === "TABLE"){
22698
+ this.originalElement = this.element;
22699
+ newElement = document.createElement("div");
22700
+
22701
+ //transfer attributes to new element
22702
+ var attributes = element.attributes;
22703
+
22704
+ // loop through attributes and apply them on div
22705
+ for(var i in attributes){
22706
+ if(typeof attributes[i] == "object"){
22707
+ newElement.setAttribute(attributes[i].name, attributes[i].value);
22708
+ }
22709
+ }
22710
+
22711
+ // replace table with div element
22712
+ element.parentNode.replaceChild(newElement, element);
22713
+
22714
+ this.element = element = newElement;
22715
+ }
22626
22716
 
22627
22717
  element.classList.add("tabulator");
22628
22718
  element.setAttribute("role", "grid");
@@ -22647,6 +22737,12 @@ class Tabulator {
22647
22737
  options.maxHeight = isNaN(options.maxHeight) ? options.maxHeight : options.maxHeight + "px";
22648
22738
  element.style.maxHeight = options.maxHeight;
22649
22739
  }
22740
+ }
22741
+
22742
+ //initialize core systems and modules
22743
+ _initializeTable(){
22744
+ var element = this.element,
22745
+ options = this.options;
22650
22746
 
22651
22747
  this.columnManager.initialize();
22652
22748
  this.rowManager.initialize();
@@ -22662,7 +22758,6 @@ class Tabulator {
22662
22758
 
22663
22759
  //configure placeholder element
22664
22760
  if(typeof options.placeholder == "string"){
22665
-
22666
22761
  var el = document.createElement("div");
22667
22762
  el.classList.add("tabulator-placeholder");
22668
22763
 
@@ -22682,7 +22777,8 @@ class Tabulator {
22682
22777
  this.footerManager.activate();
22683
22778
  }
22684
22779
 
22685
- if(options.autoColumns && this.options.data){
22780
+ if(options.autoColumns && options.data){
22781
+
22686
22782
  this.columnManager.generateColumnsFromRowData(this.options.data);
22687
22783
  }
22688
22784
 
@@ -22696,7 +22792,6 @@ class Tabulator {
22696
22792
  this.columnManager.setColumns(options.columns);
22697
22793
 
22698
22794
  this.eventBus.dispatch("table-built");
22699
- this.externalEvents.dispatch("tableBuilt");
22700
22795
  }
22701
22796
 
22702
22797
  _loadInitialData(){
@@ -23088,7 +23183,11 @@ class Tabulator {
23088
23183
 
23089
23184
  /////////////// Column Functions ///////////////
23090
23185
  setColumns(definition){
23091
- this.columnManager.setColumns(definition);
23186
+ if(this.initialized){
23187
+ this.columnManager.setColumns(definition);
23188
+ }else {
23189
+ console.warn("setColumns failed - table not yet initialized. To set initial data please use the 'columns' property in the table constructor.");
23190
+ }
23092
23191
  }
23093
23192
 
23094
23193
  getColumns(structured){