tabulator-tables 5.2.7 → 5.3.2

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 (214) hide show
  1. package/.eslintignore +3 -0
  2. package/.eslintrc.js +28 -0
  3. package/.github/workflows/bad-files-check.yml +39 -0
  4. package/.github/workflows/lint-and-test.yml +31 -0
  5. package/README.md +3 -3
  6. package/bower.json +1 -1
  7. package/build/Bundler.js +77 -77
  8. package/dist/css/tabulator.css +12 -7
  9. package/dist/css/tabulator.css.map +1 -1
  10. package/dist/css/tabulator.min.css +1 -1
  11. package/dist/css/tabulator.min.css.map +1 -1
  12. package/dist/css/tabulator_bootstrap3.css +12 -7
  13. package/dist/css/tabulator_bootstrap3.css.map +1 -1
  14. package/dist/css/tabulator_bootstrap3.min.css +1 -1
  15. package/dist/css/tabulator_bootstrap3.min.css.map +1 -1
  16. package/dist/css/tabulator_bootstrap4.css +12 -7
  17. package/dist/css/tabulator_bootstrap4.css.map +1 -1
  18. package/dist/css/tabulator_bootstrap4.min.css +1 -1
  19. package/dist/css/tabulator_bootstrap4.min.css.map +1 -1
  20. package/dist/css/tabulator_bootstrap5.css +12 -7
  21. package/dist/css/tabulator_bootstrap5.css.map +1 -1
  22. package/dist/css/tabulator_bootstrap5.min.css +1 -1
  23. package/dist/css/tabulator_bootstrap5.min.css.map +1 -1
  24. package/dist/css/tabulator_bulma.css +12 -7
  25. package/dist/css/tabulator_bulma.css.map +1 -1
  26. package/dist/css/tabulator_bulma.min.css +1 -1
  27. package/dist/css/tabulator_bulma.min.css.map +1 -1
  28. package/dist/css/tabulator_materialize.css +12 -7
  29. package/dist/css/tabulator_materialize.css.map +1 -1
  30. package/dist/css/tabulator_materialize.min.css +1 -1
  31. package/dist/css/tabulator_materialize.min.css.map +1 -1
  32. package/dist/css/tabulator_midnight.css +12 -7
  33. package/dist/css/tabulator_midnight.css.map +1 -1
  34. package/dist/css/tabulator_midnight.min.css +1 -1
  35. package/dist/css/tabulator_midnight.min.css.map +1 -1
  36. package/dist/css/tabulator_modern.css +12 -7
  37. package/dist/css/tabulator_modern.css.map +1 -1
  38. package/dist/css/tabulator_modern.min.css +1 -1
  39. package/dist/css/tabulator_modern.min.css.map +1 -1
  40. package/dist/css/tabulator_semanticui.css +12 -7
  41. package/dist/css/tabulator_semanticui.css.map +1 -1
  42. package/dist/css/tabulator_semanticui.min.css +1 -1
  43. package/dist/css/tabulator_semanticui.min.css.map +1 -1
  44. package/dist/css/tabulator_simple.css +12 -7
  45. package/dist/css/tabulator_simple.css.map +1 -1
  46. package/dist/css/tabulator_simple.min.css +1 -1
  47. package/dist/css/tabulator_simple.min.css.map +1 -1
  48. package/dist/css/tabulator_site.css +12 -7
  49. package/dist/css/tabulator_site.css.map +1 -1
  50. package/dist/css/tabulator_site.min.css +1 -1
  51. package/dist/css/tabulator_site.min.css.map +1 -1
  52. package/dist/js/jquery_wrapper.js +37 -37
  53. package/dist/js/tabulator.js +1551 -793
  54. package/dist/js/tabulator.js.map +1 -1
  55. package/dist/js/tabulator.min.js +2 -2
  56. package/dist/js/tabulator.min.js.map +1 -1
  57. package/dist/js/tabulator_esm.js +4300 -3581
  58. package/dist/js/tabulator_esm.js.map +1 -1
  59. package/dist/js/tabulator_esm.min.js +2 -2
  60. package/dist/js/tabulator_esm.min.js.map +1 -1
  61. package/package.json +4 -1
  62. package/src/js/builds/jquery_wrapper.js +37 -37
  63. package/src/js/core/ColumnManager.js +270 -232
  64. package/src/js/core/CoreFeature.js +16 -2
  65. package/src/js/core/FooterManager.js +10 -10
  66. package/src/js/core/Module.js +8 -8
  67. package/src/js/core/RowManager.js +139 -156
  68. package/src/js/core/Tabulator.js +88 -74
  69. package/src/js/core/TabulatorFull.js +1 -1
  70. package/src/js/core/cell/Cell.js +15 -16
  71. package/src/js/core/cell/CellComponent.js +2 -2
  72. package/src/js/core/column/Column.js +81 -68
  73. package/src/js/core/column/ColumnComponent.js +4 -4
  74. package/src/js/core/column/defaults/options.js +1 -1
  75. package/src/js/core/defaults/options.js +4 -2
  76. package/src/js/core/rendering/Renderer.js +19 -19
  77. package/src/js/core/rendering/renderers/BasicHorizontal.js +1 -2
  78. package/src/js/core/rendering/renderers/BasicVertical.js +1 -1
  79. package/src/js/core/rendering/renderers/VirtualDomHorizontal.js +42 -58
  80. package/src/js/core/rendering/renderers/VirtualDomVertical.js +31 -22
  81. package/src/js/core/row/Row.js +32 -8
  82. package/src/js/core/row/RowComponent.js +8 -4
  83. package/src/js/core/tools/Alert.js +44 -45
  84. package/src/js/core/tools/ComponentFunctionBinder.js +4 -2
  85. package/src/js/core/tools/DataLoader.js +3 -3
  86. package/src/js/core/tools/DeprecationAdvisor.js +47 -0
  87. package/src/js/core/tools/ExternalEventBus.js +5 -5
  88. package/src/js/core/tools/InteractionMonitor.js +41 -39
  89. package/src/js/core/tools/InternalEventBus.js +5 -5
  90. package/src/js/core/tools/ModuleBinder.js +6 -6
  91. package/src/js/core/tools/OptionsList.js +4 -4
  92. package/src/js/core/tools/Popup.js +211 -202
  93. package/src/js/modules/Accessor/Accessor.js +16 -16
  94. package/src/js/modules/Accessor/defaults/accessors.js +1 -1
  95. package/src/js/modules/Ajax/Ajax.js +7 -7
  96. package/src/js/modules/Ajax/defaults/loaderPromise.js +19 -19
  97. package/src/js/modules/Ajax/defaults/urlGenerator.js +1 -1
  98. package/src/js/modules/Clipboard/Clipboard.js +23 -23
  99. package/src/js/modules/Clipboard/defaults/pasteParsers.js +0 -2
  100. package/src/js/modules/ColumnCalcs/CalcComponent.js +2 -2
  101. package/src/js/modules/ColumnCalcs/ColumnCalcs.js +55 -51
  102. package/src/js/modules/ColumnCalcs/defaults/calculations.js +1 -1
  103. package/src/js/modules/DataTree/DataTree.js +24 -15
  104. package/src/js/modules/Download/Download.js +15 -8
  105. package/src/js/modules/Download/defaults/downloaders/csv.js +28 -28
  106. package/src/js/modules/Download/defaults/downloaders/html.js +2 -2
  107. package/src/js/modules/Download/defaults/downloaders/json.js +14 -14
  108. package/src/js/modules/Download/defaults/downloaders/jsonLines.js +1 -1
  109. package/src/js/modules/Download/defaults/downloaders/pdf.js +17 -19
  110. package/src/js/modules/Download/defaults/downloaders/xlsx.js +2 -2
  111. package/src/js/modules/Edit/Edit.js +219 -201
  112. package/src/js/modules/Edit/List.js +1026 -1006
  113. package/src/js/modules/Edit/defaults/editors/autocomplete.js +3 -3
  114. package/src/js/modules/Edit/defaults/editors/date.js +110 -0
  115. package/src/js/modules/Edit/defaults/editors/datetime.js +97 -0
  116. package/src/js/modules/Edit/defaults/editors/input.js +7 -7
  117. package/src/js/modules/Edit/defaults/editors/list.js +2 -2
  118. package/src/js/modules/Edit/defaults/editors/number.js +12 -12
  119. package/src/js/modules/Edit/defaults/editors/progress.js +11 -11
  120. package/src/js/modules/Edit/defaults/editors/range.js +5 -5
  121. package/src/js/modules/Edit/defaults/editors/select.js +3 -3
  122. package/src/js/modules/Edit/defaults/editors/star.js +9 -9
  123. package/src/js/modules/Edit/defaults/editors/textarea.js +97 -92
  124. package/src/js/modules/Edit/defaults/editors/tickCross.js +1 -3
  125. package/src/js/modules/Edit/defaults/editors/time.js +98 -0
  126. package/src/js/modules/Edit/defaults/editors.js +8 -2
  127. package/src/js/modules/Edit/inputMask.js +19 -26
  128. package/src/js/modules/Export/Export.js +69 -65
  129. package/src/js/modules/Filter/Filter.js +88 -95
  130. package/src/js/modules/Format/Format.js +24 -26
  131. package/src/js/modules/Format/defaults/formatters/buttonCross.js +1 -1
  132. package/src/js/modules/Format/defaults/formatters/buttonTick.js +1 -1
  133. package/src/js/modules/Format/defaults/formatters/color.js +1 -1
  134. package/src/js/modules/Format/defaults/formatters/datetime.js +7 -7
  135. package/src/js/modules/Format/defaults/formatters/datetimediff.js +7 -7
  136. package/src/js/modules/Format/defaults/formatters/handle.js +1 -1
  137. package/src/js/modules/Format/defaults/formatters/html.js +1 -1
  138. package/src/js/modules/Format/defaults/formatters/image.js +9 -9
  139. package/src/js/modules/Format/defaults/formatters/link.js +10 -10
  140. package/src/js/modules/Format/defaults/formatters/lookup.js +1 -1
  141. package/src/js/modules/Format/defaults/formatters/money.js +1 -1
  142. package/src/js/modules/Format/defaults/formatters/plaintext.js +1 -1
  143. package/src/js/modules/Format/defaults/formatters/progress.js +41 -42
  144. package/src/js/modules/Format/defaults/formatters/responsiveCollapse.js +3 -3
  145. package/src/js/modules/Format/defaults/formatters/rowSelection.js +1 -1
  146. package/src/js/modules/Format/defaults/formatters/rownum.js +9 -2
  147. package/src/js/modules/Format/defaults/formatters/star.js +1 -1
  148. package/src/js/modules/Format/defaults/formatters/textarea.js +1 -1
  149. package/src/js/modules/Format/defaults/formatters/tickCross.js +1 -1
  150. package/src/js/modules/Format/defaults/formatters/traffic.js +14 -14
  151. package/src/js/modules/FrozenColumns/FrozenColumns.js +6 -8
  152. package/src/js/modules/FrozenRows/FrozenRows.js +37 -7
  153. package/src/js/modules/GroupRows/Group.js +7 -7
  154. package/src/js/modules/GroupRows/GroupComponent.js +2 -2
  155. package/src/js/modules/GroupRows/GroupRows.js +34 -11
  156. package/src/js/modules/History/History.js +2 -2
  157. package/src/js/modules/HtmlTableImport/HtmlTableImport.js +3 -6
  158. package/src/js/modules/Import/Import.js +158 -159
  159. package/src/js/modules/Import/defaults/importers/array.js +5 -0
  160. package/src/js/modules/Import/defaults/importers/csv.js +49 -49
  161. package/src/js/modules/Import/defaults/importers/json.js +6 -6
  162. package/src/js/modules/Import/defaults/importers.js +2 -0
  163. package/src/js/modules/Interaction/Interaction.js +42 -43
  164. package/src/js/modules/Keybindings/Keybindings.js +14 -14
  165. package/src/js/modules/Keybindings/defaults/actions.js +1 -2
  166. package/src/js/modules/Layout/Layout.js +4 -5
  167. package/src/js/modules/Layout/defaults/modes/fitColumns.js +13 -16
  168. package/src/js/modules/Layout/defaults/modes/fitData.js +6 -4
  169. package/src/js/modules/Layout/defaults/modes/fitDataGeneral.js +2 -2
  170. package/src/js/modules/Layout/defaults/modes/fitDataStretch.js +2 -2
  171. package/src/js/modules/Localize/Localize.js +7 -7
  172. package/src/js/modules/Menu/Menu.js +8 -11
  173. package/src/js/modules/MoveColumns/MoveColumns.js +3 -6
  174. package/src/js/modules/MoveRows/MoveRows.js +30 -36
  175. package/src/js/modules/Mutator/Mutator.js +9 -9
  176. package/src/js/modules/Page/Page.js +73 -80
  177. package/src/js/modules/Page/defaults/pageCounters/pages.js +2 -2
  178. package/src/js/modules/Page/defaults/pageCounters/rows.js +1 -1
  179. package/src/js/modules/Persistence/Persistence.js +40 -44
  180. package/src/js/modules/Persistence/defaults/readers.js +1 -1
  181. package/src/js/modules/Popup/Popup.js +4 -5
  182. package/src/js/modules/Print/Print.js +2 -2
  183. package/src/js/modules/ReactiveData/ReactiveData.js +178 -115
  184. package/src/js/modules/ResizeColumns/ResizeColumns.js +3 -3
  185. package/src/js/modules/ResizeRows/ResizeRows.js +1 -1
  186. package/src/js/modules/ResizeTable/ResizeTable.js +77 -46
  187. package/src/js/modules/ResponsiveLayout/ResponsiveLayout.js +3 -5
  188. package/src/js/modules/SelectRow/SelectRow.js +26 -28
  189. package/src/js/modules/Sort/Sort.js +113 -85
  190. package/src/js/modules/Sort/defaults/sorters/alphanum.js +1 -1
  191. package/src/js/modules/Sort/defaults/sorters/array.js +24 -28
  192. package/src/js/modules/Sort/defaults/sorters/boolean.js +1 -1
  193. package/src/js/modules/Sort/defaults/sorters/date.js +1 -1
  194. package/src/js/modules/Sort/defaults/sorters/datetime.js +13 -13
  195. package/src/js/modules/Sort/defaults/sorters/exists.js +1 -1
  196. package/src/js/modules/Sort/defaults/sorters/number.js +1 -1
  197. package/src/js/modules/Sort/defaults/sorters/string.js +7 -7
  198. package/src/js/modules/Sort/defaults/sorters/time.js +1 -1
  199. package/src/js/modules/Tooltip/Tooltip.js +5 -7
  200. package/src/js/modules/Validate/Validate.js +10 -13
  201. package/src/js/modules/Validate/defaults/validators.js +8 -3
  202. package/src/scss/tabulator.scss +28 -17
  203. package/src/scss/themes/bootstrap/functions4.scss +1 -1
  204. package/src/scss/themes/bootstrap/tabulator_bootstrap3.scss +8 -8
  205. package/src/scss/themes/bootstrap/tabulator_bootstrap4.scss +8 -8
  206. package/src/scss/themes/bootstrap/tabulator_bootstrap5.scss +8 -8
  207. package/src/scss/themes/bulma/tabulator_bulma.scss +7 -7
  208. package/src/scss/themes/materialize/tabulator_materialize.scss +6 -6
  209. package/src/scss/themes/materialize/variables.scss +1 -1
  210. package/src/scss/themes/semanticui/tabulator_semanticui.scss +7 -7
  211. package/src/scss/themes/tabulator_midnight.scss +7 -7
  212. package/src/scss/themes/tabulator_modern.scss +14 -14
  213. package/src/scss/themes/tabulator_simple.scss +8 -8
  214. package/src/scss/themes/tabulator_site.scss +15 -15
@@ -1,14 +1,14 @@
1
1
  import Module from '../../core/Module.js';
2
2
  import Helpers from '../../core/tools/Helpers.js';
3
3
 
4
- import defautlAccessors from './defaults/accessors.js';
4
+ import defaultAccessors from './defaults/accessors.js';
5
5
 
6
6
  class Accessor extends Module{
7
7
 
8
8
  constructor(table){
9
9
  super(table);
10
10
 
11
- this.allowedTypes = ["", "data", "download", "clipboard", "print", "htmlOutput"] //list of accessor types
11
+ this.allowedTypes = ["", "data", "download", "clipboard", "print", "htmlOutput"]; //list of accessor types
12
12
 
13
13
  this.registerColumnOption("accessor");
14
14
  this.registerColumnOption("accessorParams");
@@ -47,7 +47,7 @@ class Accessor extends Module{
47
47
  config[key] = {
48
48
  accessor:accessor,
49
49
  params: column.definition[key + "Params"] || {},
50
- }
50
+ };
51
51
  }
52
52
  }
53
53
  });
@@ -63,16 +63,16 @@ class Accessor extends Module{
63
63
  //set column accessor
64
64
  switch(typeof value){
65
65
  case "string":
66
- if(Accessor.accessors[value]){
67
- accessor = Accessor.accessors[value]
68
- }else{
69
- console.warn("Accessor Error - No such accessor found, ignoring: ", value);
70
- }
71
- break;
66
+ if(Accessor.accessors[value]){
67
+ accessor = Accessor.accessors[value];
68
+ }else{
69
+ console.warn("Accessor Error - No such accessor found, ignoring: ", value);
70
+ }
71
+ break;
72
72
 
73
73
  case "function":
74
- accessor = value;
75
- break;
74
+ accessor = value;
75
+ break;
76
76
  }
77
77
 
78
78
  return accessor;
@@ -87,7 +87,7 @@ class Accessor extends Module{
87
87
  var data = Helpers.deepClone(row.data || {});
88
88
 
89
89
  this.table.columnManager.traverse(function(column){
90
- var value, accessor, params, colCompnent;
90
+ var value, accessor, params, colComponent;
91
91
 
92
92
  if(column.modules.accessor){
93
93
 
@@ -97,9 +97,9 @@ class Accessor extends Module{
97
97
  value = column.getFieldValue(data);
98
98
 
99
99
  if(value != "undefined"){
100
- colCompnent = column.getComponent();
101
- params = typeof accessor.params === "function" ? accessor.params(value, data, type, colCompnent, rowComponent) : accessor.params;
102
- column.setFieldValue(data, accessor.accessor(value, data, type, params, colCompnent, rowComponent));
100
+ colComponent = column.getComponent();
101
+ params = typeof accessor.params === "function" ? accessor.params(value, data, type, colComponent, rowComponent) : accessor.params;
102
+ column.setFieldValue(data, accessor.accessor(value, data, type, params, colComponent, rowComponent));
103
103
  }
104
104
  }
105
105
  }
@@ -111,6 +111,6 @@ class Accessor extends Module{
111
111
 
112
112
  //load defaults
113
113
  Accessor.moduleName = "accessor";
114
- Accessor.accessors = defautlAccessors;
114
+ Accessor.accessors = defaultAccessors;
115
115
 
116
116
  export default Accessor;
@@ -1 +1 @@
1
- export default {}
1
+ export default {};
@@ -95,7 +95,7 @@ class Ajax extends Module{
95
95
 
96
96
  //load config object
97
97
  generateConfig(config = {}){
98
- var ajaxConfig = Object.assign({}, this.config)
98
+ var ajaxConfig = Object.assign({}, this.config);
99
99
 
100
100
  if(typeof config == "string"){
101
101
  ajaxConfig.method = config;
@@ -120,13 +120,13 @@ class Ajax extends Module{
120
120
  sendRequest(url, params, config){
121
121
  if(this.table.options.ajaxRequesting.call(this.table, url, params) !== false){
122
122
  return this.loaderPromise(url, config, params)
123
- .then((data)=>{
124
- if(this.table.options.ajaxResponse){
125
- data = this.table.options.ajaxResponse.call(this.table, url, params, data);
126
- }
123
+ .then((data)=>{
124
+ if(this.table.options.ajaxResponse){
125
+ data = this.table.options.ajaxResponse.call(this.table, url, params, data);
126
+ }
127
127
 
128
- return data;
129
- });
128
+ return data;
129
+ });
130
130
  }else{
131
131
  return Promise.reject();
132
132
  }
@@ -61,27 +61,27 @@ export default function(url, config, params){
61
61
 
62
62
  //send request
63
63
  fetch(url, config)
64
- .then((response)=>{
65
- if(response.ok) {
66
- response.json()
67
- .then((data)=>{
68
- resolve(data);
69
- }).catch((error)=>{
70
- reject(error);
71
- console.warn("Ajax Load Error - Invalid JSON returned", error);
72
- });
73
- }else{
74
- console.error("Ajax Load Error - Connection Error: " + response.status, response.statusText);
75
- reject(response);
76
- }
77
- })
78
- .catch((error)=>{
79
- console.error("Ajax Load Error - Connection Error: ", error);
80
- reject(error);
81
- });
64
+ .then((response)=>{
65
+ if(response.ok) {
66
+ response.json()
67
+ .then((data)=>{
68
+ resolve(data);
69
+ }).catch((error)=>{
70
+ reject(error);
71
+ console.warn("Ajax Load Error - Invalid JSON returned", error);
72
+ });
73
+ }else{
74
+ console.error("Ajax Load Error - Connection Error: " + response.status, response.statusText);
75
+ reject(response);
76
+ }
77
+ })
78
+ .catch((error)=>{
79
+ console.error("Ajax Load Error - Connection Error: ", error);
80
+ reject(error);
81
+ });
82
82
  }else{
83
83
  console.warn("Ajax Load Error - No URL Set");
84
84
  resolve([]);
85
85
  }
86
86
  });
87
- };
87
+ }
@@ -41,4 +41,4 @@ export default function(url, config, params){
41
41
  }
42
42
 
43
43
  return url;
44
- };
44
+ }
@@ -18,7 +18,7 @@ class Clipboard extends Module{
18
18
  this.registerTableOption("clipboard", false); //enable clipboard
19
19
  this.registerTableOption("clipboardCopyStyled", true); //formatted table data
20
20
  this.registerTableOption("clipboardCopyConfig", false); //clipboard config
21
- this.registerTableOption("clipboardCopyFormatter", false); //DEPRICATED - REMOVE in 5.0
21
+ this.registerTableOption("clipboardCopyFormatter", false); //DEPRECATED - REMOVE in 5.0
22
22
  this.registerTableOption("clipboardCopyRowRange", "active"); //restrict clipboard to visible rows only
23
23
  this.registerTableOption("clipboardPasteParser", "table"); //convert pasted clipboard data to rows
24
24
  this.registerTableOption("clipboardPasteAction", "insert"); //how to insert pasted data into the table
@@ -47,9 +47,9 @@ class Clipboard extends Module{
47
47
  }
48
48
  }else{
49
49
 
50
- var list = this.table.modules.export.generateExportList(this.table.options.clipboardCopyConfig, this.table.options.clipboardCopyStyled, this.rowRange, "clipboard");
50
+ list = this.table.modules.export.generateExportList(this.table.options.clipboardCopyConfig, this.table.options.clipboardCopyStyled, this.rowRange, "clipboard");
51
51
 
52
- html = this.table.modules.export.genereateHTMLTable(list);
52
+ html = this.table.modules.export.generateHTMLTable(list);
53
53
  plain = html ? this.generatePlainContent(list) : "";
54
54
 
55
55
  if(this.table.options.clipboardCopyFormatter){
@@ -116,15 +116,15 @@ class Clipboard extends Module{
116
116
  }else{
117
117
  switch(typeof col.value){
118
118
  case "object":
119
- value = JSON.stringify(col.value);
120
- break;
119
+ value = JSON.stringify(col.value);
120
+ break;
121
121
 
122
122
  case "undefined":
123
- value = "";
124
- break;
123
+ value = "";
124
+ break;
125
125
 
126
126
  default:
127
- value = col.value;
127
+ value = col.value;
128
128
  }
129
129
  }
130
130
  }
@@ -139,7 +139,7 @@ class Clipboard extends Module{
139
139
  }
140
140
 
141
141
  copy (range, internal) {
142
- var range, sel, textRange;
142
+ var sel, textRange;
143
143
  this.blocked = false;
144
144
  this.customSelection = false;
145
145
 
@@ -177,32 +177,32 @@ class Clipboard extends Module{
177
177
 
178
178
  switch(typeof action){
179
179
  case "string":
180
- this.pasteAction = Clipboard.pasteActions[action];
180
+ this.pasteAction = Clipboard.pasteActions[action];
181
181
 
182
- if(!this.pasteAction){
183
- console.warn("Clipboard Error - No such paste action found:", action);
184
- }
185
- break;
182
+ if(!this.pasteAction){
183
+ console.warn("Clipboard Error - No such paste action found:", action);
184
+ }
185
+ break;
186
186
 
187
187
  case "function":
188
- this.pasteAction = action;
189
- break;
188
+ this.pasteAction = action;
189
+ break;
190
190
  }
191
191
  }
192
192
 
193
193
  setPasteParser(parser){
194
194
  switch(typeof parser){
195
195
  case "string":
196
- this.pasteParser = Clipboard.pasteParsers[parser];
196
+ this.pasteParser = Clipboard.pasteParsers[parser];
197
197
 
198
- if(!this.pasteParser){
199
- console.warn("Clipboard Error - No such paste parser found:", parser);
200
- }
201
- break;
198
+ if(!this.pasteParser){
199
+ console.warn("Clipboard Error - No such paste parser found:", parser);
200
+ }
201
+ break;
202
202
 
203
203
  case "function":
204
- this.pasteParser = parser;
205
- break;
204
+ this.pasteParser = parser;
205
+ break;
206
206
  }
207
207
  }
208
208
 
@@ -1,7 +1,6 @@
1
1
  export default {
2
2
  table:function(clipboard){
3
3
  var data = [],
4
- success = false,
5
4
  headerFindSuccess = true,
6
5
  columns = this.table.columnManager.columns,
7
6
  columnMap = [],
@@ -15,7 +14,6 @@ export default {
15
14
  });
16
15
 
17
16
  if(data.length && !(data.length === 1 && data[0].length < 2)){
18
- success = true;
19
17
 
20
18
  //check if headers are present by title
21
19
  data[0].forEach(function(value){
@@ -7,10 +7,10 @@ class CalcComponent{
7
7
  if (typeof target[name] !== "undefined") {
8
8
  return target[name];
9
9
  }else{
10
- return target._row.table.componentFunctionBinder.handle("row", target._row, name)
10
+ return target._row.table.componentFunctionBinder.handle("row", target._row, name);
11
11
  }
12
12
  }
13
- })
13
+ });
14
14
  }
15
15
 
16
16
  getData(transform){
@@ -93,7 +93,7 @@ class ColumnCalcs extends Module{
93
93
 
94
94
  rowsUpdated(row){
95
95
  if(this.table.options.groupBy){
96
- this.recalcRowGroup(this);
96
+ this.recalcRowGroup(row);
97
97
  }else{
98
98
  this.recalcActiveRows();
99
99
  }
@@ -135,7 +135,7 @@ class ColumnCalcs extends Module{
135
135
 
136
136
  //initialize column calcs
137
137
  initializeColumn(column){
138
- var def = column.definition
138
+ var def = column.definition;
139
139
 
140
140
  var config = {
141
141
  topCalcParams:def.topCalcParams || {},
@@ -146,16 +146,16 @@ class ColumnCalcs extends Module{
146
146
 
147
147
  switch(typeof def.topCalc){
148
148
  case "string":
149
- if(ColumnCalcs.calculations[def.topCalc]){
150
- config.topCalc = ColumnCalcs.calculations[def.topCalc]
151
- }else{
152
- console.warn("Column Calc Error - No such calculation found, ignoring: ", def.topCalc);
153
- }
154
- break;
149
+ if(ColumnCalcs.calculations[def.topCalc]){
150
+ config.topCalc = ColumnCalcs.calculations[def.topCalc];
151
+ }else{
152
+ console.warn("Column Calc Error - No such calculation found, ignoring: ", def.topCalc);
153
+ }
154
+ break;
155
155
 
156
156
  case "function":
157
- config.topCalc = def.topCalc;
158
- break
157
+ config.topCalc = def.topCalc;
158
+ break;
159
159
 
160
160
  }
161
161
 
@@ -173,16 +173,16 @@ class ColumnCalcs extends Module{
173
173
  if(def.bottomCalc){
174
174
  switch(typeof def.bottomCalc){
175
175
  case "string":
176
- if(ColumnCalcs.calculations[def.bottomCalc]){
177
- config.botCalc = ColumnCalcs.calculations[def.bottomCalc]
178
- }else{
179
- console.warn("Column Calc Error - No such calculation found, ignoring: ", def.bottomCalc);
180
- }
181
- break;
176
+ if(ColumnCalcs.calculations[def.bottomCalc]){
177
+ config.botCalc = ColumnCalcs.calculations[def.bottomCalc];
178
+ }else{
179
+ console.warn("Column Calc Error - No such calculation found, ignoring: ", def.bottomCalc);
180
+ }
181
+ break;
182
182
 
183
183
  case "function":
184
- config.botCalc = def.bottomCalc;
185
- break
184
+ config.botCalc = def.bottomCalc;
185
+ break;
186
186
 
187
187
  }
188
188
 
@@ -199,7 +199,7 @@ class ColumnCalcs extends Module{
199
199
  }
200
200
 
201
201
  //dummy functions to handle being mock column manager
202
- registerColumnField(){};
202
+ registerColumnField(){}
203
203
 
204
204
  removeCalcs(){
205
205
  var changed = false;
@@ -237,7 +237,11 @@ class ColumnCalcs extends Module{
237
237
 
238
238
  scrollHorizontal(left){
239
239
  if(this.botInitialized && this.botRow){
240
- this.botRow.getElement().style.marginLeft = (-left) + "px";
240
+ if(this.table.rtl){
241
+ this.botRow.getElement().style.marginRight = (left) + "px";
242
+ }else{
243
+ this.botRow.getElement().style.marginLeft = (-left) + "px";
244
+ }
241
245
  }
242
246
  }
243
247
 
@@ -252,7 +256,7 @@ class ColumnCalcs extends Module{
252
256
  this.topRow.deleteCells();
253
257
  }
254
258
 
255
- row = this.generateRow("top", this.rowsToData(rows))
259
+ row = this.generateRow("top", data);
256
260
  this.topRow = row;
257
261
  while(this.topElement.firstChild) this.topElement.removeChild(this.topElement.firstChild);
258
262
  this.topElement.appendChild(row.getElement());
@@ -264,7 +268,7 @@ class ColumnCalcs extends Module{
264
268
  this.botRow.deleteCells();
265
269
  }
266
270
 
267
- row = this.generateRow("bottom", this.rowsToData(rows))
271
+ row = this.generateRow("bottom", data);
268
272
  this.botRow = row;
269
273
  while(this.botElement.firstChild) this.botElement.removeChild(this.botElement.firstChild);
270
274
  this.botElement.appendChild(row.getElement());
@@ -384,38 +388,38 @@ class ColumnCalcs extends Module{
384
388
 
385
389
  this.table.columnManager.columnsByIndex.forEach((column) => {
386
390
 
387
- //set field name of mock column
388
- this.genColumn.setField(column.getField());
389
- this.genColumn.hozAlign = column.hozAlign;
391
+ //set field name of mock column
392
+ this.genColumn.setField(column.getField());
393
+ this.genColumn.hozAlign = column.hozAlign;
390
394
 
391
- if(column.definition[pos + "CalcFormatter"] && this.table.modExists("format")){
392
- this.genColumn.modules.format = {
393
- formatter: this.table.modules.format.getFormatter(column.definition[pos + "CalcFormatter"]),
394
- params: column.definition[pos + "CalcFormatterParams"] || {},
395
- };
396
- }else{
397
- this.genColumn.modules.format = {
398
- formatter: this.table.modules.format.getFormatter("plaintext"),
399
- params:{}
400
- };
401
- }
395
+ if(column.definition[pos + "CalcFormatter"] && this.table.modExists("format")){
396
+ this.genColumn.modules.format = {
397
+ formatter: this.table.modules.format.getFormatter(column.definition[pos + "CalcFormatter"]),
398
+ params: column.definition[pos + "CalcFormatterParams"] || {},
399
+ };
400
+ }else{
401
+ this.genColumn.modules.format = {
402
+ formatter: this.table.modules.format.getFormatter("plaintext"),
403
+ params:{}
404
+ };
405
+ }
402
406
 
403
- //ensure css class defintion is replicated to calculation cell
404
- this.genColumn.definition.cssClass = column.definition.cssClass;
407
+ //ensure css class definition is replicated to calculation cell
408
+ this.genColumn.definition.cssClass = column.definition.cssClass;
405
409
 
406
- //generate cell and assign to correct column
407
- var cell = new Cell(this.genColumn, row);
408
- cell.getElement();
409
- cell.column = column;
410
- cell.setWidth();
410
+ //generate cell and assign to correct column
411
+ var cell = new Cell(this.genColumn, row);
412
+ cell.getElement();
413
+ cell.column = column;
414
+ cell.setWidth();
411
415
 
412
- column.cells.push(cell);
413
- cells.push(cell);
416
+ column.cells.push(cell);
417
+ cells.push(cell);
414
418
 
415
- if(!column.visible){
416
- cell.hide();
417
- }
418
- });
419
+ if(!column.visible){
420
+ cell.hide();
421
+ }
422
+ });
419
423
 
420
424
  row.cells = cells;
421
425
  };
@@ -481,7 +485,7 @@ class ColumnCalcs extends Module{
481
485
  results = {
482
486
  top: this.topRow ? this.topRow.getData() : {},
483
487
  bottom: this.botRow ? this.botRow.getData() : {},
484
- }
488
+ };
485
489
  }
486
490
 
487
491
  return results;
@@ -502,7 +506,7 @@ class ColumnCalcs extends Module{
502
506
  top: groupObj.calcs.top ? groupObj.calcs.top.getData() : {},
503
507
  bottom: groupObj.calcs.bottom ? groupObj.calcs.bottom.getData() : {},
504
508
  groups: subGroupResults,
505
- }
509
+ };
506
510
 
507
511
  return results;
508
512
  }
@@ -1,7 +1,7 @@
1
1
  export default {
2
2
  "avg":function(values, data, calcParams){
3
3
  var output = 0,
4
- precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : 2
4
+ precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : 2;
5
5
 
6
6
  if(values.length){
7
7
  output = values.reduce(function(sum, value){
@@ -2,6 +2,8 @@ import Module from '../../core/Module.js';
2
2
 
3
3
  import Row from '../../core/row/Row.js';
4
4
 
5
+ import RowComponent from '../../core/row/RowComponent.js';
6
+
5
7
  class DataTree extends Module{
6
8
 
7
9
  constructor(table){
@@ -29,7 +31,7 @@ class DataTree extends Module{
29
31
  this.registerTableOption("dataTreeExpandElement", false);//data tree row expand element
30
32
  this.registerTableOption("dataTreeStartExpanded", false);
31
33
  this.registerTableOption("dataTreeChildColumnCalcs", false);//include visible data tree rows in column calculations
32
- this.registerTableOption("dataTreeSelectPropagate", false);//seleccting a parent row selects its children
34
+ this.registerTableOption("dataTreeSelectPropagate", false);//selecting a parent row selects its children
33
35
 
34
36
  //register component functions
35
37
  this.registerComponentFunction("row", "treeCollapse", this.collapseRow.bind(this));
@@ -49,6 +51,10 @@ class DataTree extends Module{
49
51
  this.field = options.dataTreeChildField;
50
52
  this.indent = options.dataTreeChildIndent;
51
53
 
54
+ if(this.options("movableRows")){
55
+ console.warn("The movableRows option is not available with dataTree enabled, moving of child rows could result in unpredictable behavior");
56
+ }
57
+
52
58
  if(options.dataTreeBranchElement){
53
59
 
54
60
  if(options.dataTreeBranchElement === true){
@@ -98,20 +104,20 @@ class DataTree extends Module{
98
104
 
99
105
  switch(typeof options.dataTreeStartExpanded){
100
106
  case "boolean":
101
- this.startOpen = function(row, index){
102
- return options.dataTreeStartExpanded;
103
- };
104
- break;
107
+ this.startOpen = function(row, index){
108
+ return options.dataTreeStartExpanded;
109
+ };
110
+ break;
105
111
 
106
112
  case "function":
107
- this.startOpen = options.dataTreeStartExpanded;
108
- break;
113
+ this.startOpen = options.dataTreeStartExpanded;
114
+ break;
109
115
 
110
116
  default:
111
- this.startOpen = function(row, index){
112
- return options.dataTreeStartExpanded[index];
113
- };
114
- break;
117
+ this.startOpen = function(row, index){
118
+ return options.dataTreeStartExpanded[index];
119
+ };
120
+ break;
115
121
  }
116
122
 
117
123
  this.subscribe("row-init", this.initializeRow.bind(this));
@@ -257,9 +263,10 @@ class DataTree extends Module{
257
263
 
258
264
  generateControlElement(row, el){
259
265
  var config = row.modules.dataTree,
260
- el = el || row.getCells()[0].getElement(),
261
266
  oldControl = config.controlEl;
262
267
 
268
+ el = el || row.getCells()[0].getElement();
269
+
263
270
  if(config.children !== false){
264
271
 
265
272
  if(config.open){
@@ -433,7 +440,7 @@ class DataTree extends Module{
433
440
  }
434
441
 
435
442
  getTreeParentRoot(row){
436
- return row.modules.dataTree.parent ? this.getTreeParentRoot(row.modules.dataTree.parent) : row;
443
+ return row.modules.dataTree && row.modules.dataTree.parent ? this.getTreeParentRoot(row.modules.dataTree.parent) : row;
437
444
  }
438
445
 
439
446
  getFilteredTreeChildren(row){
@@ -540,10 +547,12 @@ class DataTree extends Module{
540
547
  match = match.data;
541
548
  }
542
549
  }
550
+ }else if(subject === null){
551
+ match = false;
543
552
  }
544
553
 
545
- }else if(typeof subject == "undefined" || subject === null){
546
- match = false
554
+ }else if(typeof subject == "undefined"){
555
+ match = false;
547
556
  }else{
548
557
  //subject should be treated as the index of the row
549
558
  match = parent.data[this.field].find((row) => {
@@ -7,7 +7,10 @@ class Download extends Module{
7
7
  constructor(table){
8
8
  super(table);
9
9
 
10
- this.registerTableOption("downloadReady", function(data, blob){return blob;}); //function to manipulate download data
10
+ this.registerTableOption("downloadEncoder", function(data, mimeType){
11
+ return new Blob([data],{type:mimeType});
12
+ }); //function to manipulate download data
13
+ this.registerTableOption("downloadReady", undefined); //warn of function deprecation
11
14
  this.registerTableOption("downloadConfig", {}); //download config
12
15
  this.registerTableOption("downloadRowRange", "active"); //restrict download to active rows only
13
16
 
@@ -16,10 +19,16 @@ class Download extends Module{
16
19
  }
17
20
 
18
21
  initialize(){
22
+ this.deprecatedOptionsCheck();
23
+
19
24
  this.registerTableFunction("download", this.download.bind(this));
20
25
  this.registerTableFunction("downloadToTab", this.downloadToTab.bind(this));
21
26
  }
22
27
 
28
+ deprecatedOptionsCheck(){
29
+ this.deprecationCheck("downloadReady", "downloadEncoder");
30
+ }
31
+
23
32
  ///////////////////////////////////
24
33
  ///////// Table Functions /////////
25
34
  ///////////////////////////////////
@@ -93,16 +102,14 @@ class Download extends Module{
93
102
 
94
103
  triggerDownload(data, mime, type, filename, newTab){
95
104
  var element = document.createElement('a'),
96
- blob = new Blob([data],{type:mime}),
97
- filename = filename || "Tabulator." + (typeof type === "function" ? "txt" : type);
98
-
99
- blob = this.table.options.downloadReady(data, blob);
105
+ blob = this.table.options.downloadEncoder(data, mime);
100
106
 
101
107
  if(blob){
102
-
103
108
  if(newTab){
104
109
  window.open(window.URL.createObjectURL(blob));
105
110
  }else{
111
+ filename = filename || "Tabulator." + (typeof type === "function" ? "txt" : type);
112
+
106
113
  if(navigator.msSaveOrOpenBlob){
107
114
  navigator.msSaveOrOpenBlob(blob, filename);
108
115
  }else{
@@ -128,8 +135,8 @@ class Download extends Module{
128
135
  commsReceived(table, action, data){
129
136
  switch(action){
130
137
  case "intercept":
131
- this.download(data.type, "", data.options, data.active, data.intercept);
132
- break;
138
+ this.download(data.type, "", data.options, data.active, data.intercept);
139
+ break;
133
140
  }
134
141
  }
135
142
  }