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
@@ -4,187 +4,186 @@ import defaultImporters from './defaults/importers.js';
4
4
 
5
5
  class Import extends Module{
6
6
 
7
- constructor(table){
8
- super(table);
7
+ constructor(table){
8
+ super(table);
9
9
 
10
- this.registerTableOption("importFormat");
11
- this.registerTableOption("importReader", "text");
12
- }
10
+ this.registerTableOption("importFormat");
11
+ this.registerTableOption("importReader", "text");
12
+ }
13
13
 
14
- initialize(){
15
- this.registerTableFunction("import", this.importFromFile.bind(this));
16
-
17
- if(this.table.options.importFormat){
18
- this.subscribe("data-loading", this.loadDataCheck.bind(this), 10);
19
- this.subscribe("data-load", this.loadData.bind(this), 10);
20
- }
21
- }
22
-
23
- loadDataCheck(data){
24
- return typeof data === "string";
25
- }
26
-
27
- loadData(data, params, config, silent, previousData){
28
- return this.importData(this.lookupImporter(), data)
29
- .then(this.structureData.bind(this))
30
- .catch((err) => {
31
- console.error("Import Error:", err || "Unable to import data")
32
- return Promise.reject(err);
33
- })
34
- }
35
-
36
- lookupImporter(importFormat){
37
- var importer;
14
+ initialize(){
15
+ this.registerTableFunction("import", this.importFromFile.bind(this));
16
+
17
+ if(this.table.options.importFormat){
18
+ this.subscribe("data-loading", this.loadDataCheck.bind(this), 10);
19
+ this.subscribe("data-load", this.loadData.bind(this), 10);
20
+ }
21
+ }
22
+
23
+ loadDataCheck(data){
24
+ return this.table.options.importFormat && (typeof data === "string" || (Array.isArray(data) && data.length && Array.isArray(data)));
25
+ }
26
+
27
+ loadData(data, params, config, silent, previousData){
28
+ return this.importData(this.lookupImporter(), data)
29
+ .then(this.structureData.bind(this))
30
+ .catch((err) => {
31
+ console.error("Import Error:", err || "Unable to import data");
32
+ return Promise.reject(err);
33
+ });
34
+ }
35
+
36
+ lookupImporter(importFormat){
37
+ var importer;
38
38
 
39
- if(!importFormat){
40
- importFormat = this.table.options.importFormat;
41
- }
39
+ if(!importFormat){
40
+ importFormat = this.table.options.importFormat;
41
+ }
42
42
 
43
- if(typeof importFormat === "string"){
44
- importer = Import.importers[importFormat];
45
- }else{
46
- importer = importFormat;
47
- }
48
-
49
- if(!importer){
50
- console.error("Import Error - Importer not found:", importFormat);
51
- }
43
+ if(typeof importFormat === "string"){
44
+ importer = Import.importers[importFormat];
45
+ }else{
46
+ importer = importFormat;
47
+ }
48
+
49
+ if(!importer){
50
+ console.error("Import Error - Importer not found:", importFormat);
51
+ }
52
52
 
53
- return importer;
54
- }
53
+ return importer;
54
+ }
55
55
 
56
- importFromFile(importFormat, extension){
57
- var importer = this.lookupImporter(importFormat);
56
+ importFromFile(importFormat, extension){
57
+ var importer = this.lookupImporter(importFormat);
58
58
 
59
- if(importer){
60
- return this.pickFile(extension)
61
- .then(this.importData.bind(this, importer))
62
- .then(this.structureData.bind(this))
63
- .then(this.setData.bind(this))
64
- .catch((err) => {
65
- console.error("Import Error:", err || "Unable to import file")
66
- return Promise.reject(err);
67
- })
68
- }
69
- }
59
+ if(importer){
60
+ return this.pickFile(extension)
61
+ .then(this.importData.bind(this, importer))
62
+ .then(this.structureData.bind(this))
63
+ .then(this.setData.bind(this))
64
+ .catch((err) => {
65
+ console.error("Import Error:", err || "Unable to import file");
66
+ return Promise.reject(err);
67
+ });
68
+ }
69
+ }
70
70
 
71
- pickFile(extensions){
72
- return new Promise((resolve, reject) => {
73
- var input = document.createElement("input");
74
- input.type = "file";
75
- input.accept = extensions;
71
+ pickFile(extensions){
72
+ return new Promise((resolve, reject) => {
73
+ var input = document.createElement("input");
74
+ input.type = "file";
75
+ input.accept = extensions;
76
76
 
77
- input.addEventListener("change", (e) => {
78
- var file = input.files[0],
79
- reader = new FileReader(),
80
- data;
77
+ input.addEventListener("change", (e) => {
78
+ var file = input.files[0],
79
+ reader = new FileReader();
81
80
 
82
- switch(this.table.options.importReader){
83
- case "buffer":
84
- reader.readAsArrayBuffer(file);
85
- break;
86
-
87
- case "binary":
88
- reader.readAsBinaryString(file);
89
- break;
90
-
91
- case "url":
92
- reader.readAsDataURL(file);
93
- break;
94
-
95
- case "text":
96
- default:
97
- reader.readAsText(file);
98
- }
81
+ switch(this.table.options.importReader){
82
+ case "buffer":
83
+ reader.readAsArrayBuffer(file);
84
+ break;
85
+
86
+ case "binary":
87
+ reader.readAsBinaryString(file);
88
+ break;
89
+
90
+ case "url":
91
+ reader.readAsDataURL(file);
92
+ break;
93
+
94
+ case "text":
95
+ default:
96
+ reader.readAsText(file);
97
+ }
99
98
 
100
- reader.onload = (e) => {
101
- resolve(reader.result)
102
- };
99
+ reader.onload = (e) => {
100
+ resolve(reader.result);
101
+ };
103
102
 
104
- reader.onerror = (e) => {
105
- console.warn("File Load Error - Unable to read file");
106
- reject();
107
- };
108
- });
103
+ reader.onerror = (e) => {
104
+ console.warn("File Load Error - Unable to read file");
105
+ reject();
106
+ };
107
+ });
109
108
 
110
- input.click();
111
- });
112
- }
109
+ input.click();
110
+ });
111
+ }
113
112
 
114
- importData(importer, fileContents){
115
- var data = importer.call(this.table, fileContents);
113
+ importData(importer, fileContents){
114
+ var data = importer.call(this.table, fileContents);
116
115
 
117
- if(data instanceof Promise){
118
- return data;
119
- }else{
120
- return data ? Promise.resolve(data) : Promise.reject();
121
- }
122
- }
123
-
124
- structureData(parsedData){
125
- var data = [];
116
+ if(data instanceof Promise){
117
+ return data;
118
+ }else{
119
+ return data ? Promise.resolve(data) : Promise.reject();
120
+ }
121
+ }
122
+
123
+ structureData(parsedData){
124
+ var data = [];
126
125
 
127
- if(Array.isArray(parsedData) && parsedData.length && Array.isArray(parsedData[0])){
128
- if(this.table.options.autoColumns){
129
- data = this.structureArrayToObject(parsedData);
130
- }else{
131
- data = this.structureArrayToColumns(parsedData);
132
- }
133
-
134
- return data;
135
- }else{
136
- return parsedData;
137
- }
138
- }
139
-
140
- structureArrayToObject(parsedData){
141
- var columns = parsedData.shift();
142
-
143
- var data = parsedData.map((values) => {
144
- var row = {};
145
-
146
- columns.forEach((key, i) => {
147
- row[key] = values[i];
148
- })
149
-
150
- return row;
151
- })
152
-
153
- return data;
154
- }
155
-
156
- structureArrayToColumns(parsedData){
157
- var data = [],
158
- columns = this.table.getColumns();
159
-
160
- //remove first row if it is the column names
161
- if(columns[0] && parsedData[0][0]){
162
- if(columns[0].getDefinition().title === parsedData[0][0]){
163
- parsedData.shift();
164
- }
165
- }
126
+ if(Array.isArray(parsedData) && parsedData.length && Array.isArray(parsedData[0])){
127
+ if(this.table.options.autoColumns){
128
+ data = this.structureArrayToObject(parsedData);
129
+ }else{
130
+ data = this.structureArrayToColumns(parsedData);
131
+ }
132
+
133
+ return data;
134
+ }else{
135
+ return parsedData;
136
+ }
137
+ }
138
+
139
+ structureArrayToObject(parsedData){
140
+ var columns = parsedData.shift();
141
+
142
+ var data = parsedData.map((values) => {
143
+ var row = {};
144
+
145
+ columns.forEach((key, i) => {
146
+ row[key] = values[i];
147
+ });
148
+
149
+ return row;
150
+ });
151
+
152
+ return data;
153
+ }
154
+
155
+ structureArrayToColumns(parsedData){
156
+ var data = [],
157
+ columns = this.table.getColumns();
158
+
159
+ //remove first row if it is the column names
160
+ if(columns[0] && parsedData[0][0]){
161
+ if(columns[0].getDefinition().title === parsedData[0][0]){
162
+ parsedData.shift();
163
+ }
164
+ }
166
165
 
167
- //convert row arrays to objects
168
- parsedData.forEach((rowData) => {
169
- var row = {};
166
+ //convert row arrays to objects
167
+ parsedData.forEach((rowData) => {
168
+ var row = {};
170
169
 
171
- rowData.forEach((value, index) => {
172
- var column = columns[index];
170
+ rowData.forEach((value, index) => {
171
+ var column = columns[index];
173
172
 
174
- if(column){
175
- row[column.getField()] = value;
176
- }
177
- })
173
+ if(column){
174
+ row[column.getField()] = value;
175
+ }
176
+ });
178
177
 
179
- data.push(row);
180
- });
178
+ data.push(row);
179
+ });
181
180
 
182
- return data;
183
- }
181
+ return data;
182
+ }
184
183
 
185
- setData(data){
186
- return this.table.setData(data);
187
- }
184
+ setData(data){
185
+ return this.table.setData(data);
186
+ }
188
187
  }
189
188
 
190
189
  Import.moduleName = "import";
@@ -0,0 +1,5 @@
1
+ function arrayImporter(input){
2
+ return input;
3
+ }
4
+
5
+ export default arrayImporter;
@@ -1,63 +1,63 @@
1
1
  function csvImporter(input){
2
- var data = [],
3
- row = 0,
4
- col = 0,
5
- inQuote = false;
2
+ var data = [],
3
+ row = 0,
4
+ col = 0,
5
+ inQuote = false;
6
6
 
7
- //Iterate over each character
8
- for (let index = 0; index < input.length; index++) {
9
- let char = input[index],
10
- nextChar = input[index+1];
7
+ //Iterate over each character
8
+ for (let index = 0; index < input.length; index++) {
9
+ let char = input[index],
10
+ nextChar = input[index+1];
11
11
 
12
- //Initialize empty row
13
- if(!data[row]){
14
- data[row] = [];
15
- }
12
+ //Initialize empty row
13
+ if(!data[row]){
14
+ data[row] = [];
15
+ }
16
16
 
17
- //Initialize empty column
18
- if(!data[row][col]){
19
- data[row][col] = "";
20
- }
17
+ //Initialize empty column
18
+ if(!data[row][col]){
19
+ data[row][col] = "";
20
+ }
21
21
 
22
- //Handle quotation mark inside string
23
- if (char == '"' && inQuote && nextChar == '"') {
24
- data[row][col] += char;
25
- index++;
26
- continue;
27
- }
22
+ //Handle quotation mark inside string
23
+ if (char == '"' && inQuote && nextChar == '"') {
24
+ data[row][col] += char;
25
+ index++;
26
+ continue;
27
+ }
28
28
 
29
- //Begin / End Quote
30
- if (char == '"') {
31
- inQuote = !inQuote;
32
- continue;
33
- }
29
+ //Begin / End Quote
30
+ if (char == '"') {
31
+ inQuote = !inQuote;
32
+ continue;
33
+ }
34
34
 
35
- //Next column (if not in quote)
36
- if (char == ',' && !inQuote) {
37
- col++;
38
- continue;
39
- }
35
+ //Next column (if not in quote)
36
+ if (char == ',' && !inQuote) {
37
+ col++;
38
+ continue;
39
+ }
40
40
 
41
- //New row if new line and not in quote (CRLF)
42
- if (char == '\r' && nextChar == '\n' && !inQuote) {
43
- col = 0;
44
- row++;
45
- index++;
46
- continue;
47
- }
41
+ //New row if new line and not in quote (CRLF)
42
+ if (char == '\r' && nextChar == '\n' && !inQuote) {
43
+ col = 0;
44
+ row++;
45
+ index++;
46
+ continue;
47
+ }
48
48
 
49
- //New row if new line and not in quote (CR or LF)
50
- if ((char == '\r' || char == '\n') && !inQuote) {
51
- col = 0;
52
- row++;
53
- continue;
54
- }
49
+ //New row if new line and not in quote (CR or LF)
50
+ if ((char == '\r' || char == '\n') && !inQuote) {
51
+ col = 0;
52
+ row++;
53
+ continue;
54
+ }
55
55
 
56
- //Normal Character, append to column
57
- data[row][col] += char;
58
- }
56
+ //Normal Character, append to column
57
+ data[row][col] += char;
58
+ }
59
59
 
60
- return data;
60
+ return data;
61
61
  }
62
62
 
63
63
  export default csvImporter;
@@ -1,8 +1,8 @@
1
1
  export default function(input){
2
- try {
3
- return JSON.parse(input);
4
- } catch(e) {
5
- console.warn("JSON Import Error - File contents is invalid JSON", e);
6
- return Promise.reject();
7
- }
2
+ try {
3
+ return JSON.parse(input);
4
+ } catch(e) {
5
+ console.warn("JSON Import Error - File contents is invalid JSON", e);
6
+ return Promise.reject();
7
+ }
8
8
  }
@@ -1,7 +1,9 @@
1
1
  import csv from './importers/csv.js';
2
2
  import json from './importers/json.js';
3
+ import array from './importers/array.js';
3
4
 
4
5
  export default {
5
6
  csv:csv,
6
7
  json:json,
8
+ array:array,
7
9
  };
@@ -1,5 +1,4 @@
1
1
  import Module from '../../core/Module.js';
2
- import Helpers from '../../core/tools/Helpers.js';
3
2
 
4
3
  import Cell from '../../core/cell/Cell.js';
5
4
  import Column from '../../core/column/Column.js';
@@ -61,7 +60,7 @@ class Interaction extends Module{
61
60
  groupTap:"group",
62
61
  groupDblTap:"group",
63
62
  groupTapHold:"group",
64
- }
63
+ };
65
64
 
66
65
  this.subscribers = {};
67
66
 
@@ -90,7 +89,7 @@ class Interaction extends Module{
90
89
  tapDbl:null,
91
90
  tapHold:null,
92
91
  }
93
- }
92
+ };
94
93
 
95
94
  this.registerColumnOption("headerClick");
96
95
  this.registerColumnOption("headerDblClick");
@@ -121,13 +120,15 @@ class Interaction extends Module{
121
120
  initialize(){
122
121
  this.initializeExternalEvents();
123
122
 
124
- this.subscribe("column-init", this.initializeColumn.bind(this))
125
- this.subscribe("cell-dblclick", this.cellContentsSelectionFixer.bind(this))
123
+ this.subscribe("column-init", this.initializeColumn.bind(this));
124
+ this.subscribe("cell-dblclick", this.cellContentsSelectionFixer.bind(this));
126
125
  }
127
126
 
128
127
  cellContentsSelectionFixer(e, cell){
128
+ var range;
129
+
129
130
  if(this.table.modExists("edit")){
130
- if (this.table.modules.edit.currentCell === this){
131
+ if (this.table.modules.edit.currentCell === cell){
131
132
  return; //prevent instant selection of editor content
132
133
  }
133
134
  }
@@ -136,12 +137,12 @@ class Interaction extends Module{
136
137
 
137
138
  try{
138
139
  if (document.selection) { // IE
139
- var range = document.body.createTextRange();
140
- range.moveToElementText(this.element);
140
+ range = document.body.createTextRange();
141
+ range.moveToElementText(cell.getElement());
141
142
  range.select();
142
143
  } else if (window.getSelection) {
143
- var range = document.createRange();
144
- range.selectNode(this.element);
144
+ range = document.createRange();
145
+ range.selectNode(cell.getElement());
145
146
  window.getSelection().removeAllRanges();
146
147
  window.getSelection().addRange(range);
147
148
  }
@@ -150,13 +151,11 @@ class Interaction extends Module{
150
151
 
151
152
  initializeExternalEvents(){
152
153
  for(let key in this.eventMap){
153
- this.subscriptionChangeExternal(key, this.subscriptionChanged.bind(this, key))
154
+ this.subscriptionChangeExternal(key, this.subscriptionChanged.bind(this, key));
154
155
  }
155
156
  }
156
157
 
157
158
  subscriptionChanged(key, added){
158
- var index;
159
-
160
159
  if(added){
161
160
  if(!this.subscribers[key]){
162
161
  if(this.eventMap[key].includes("-")){
@@ -194,7 +193,7 @@ class Interaction extends Module{
194
193
  }
195
194
 
196
195
  unsubscribeTouchEvents(key){
197
- var notouch = true,
196
+ var noTouch = true,
198
197
  type = this.eventMap[key];
199
198
 
200
199
  if(this.subscribers[key] && !this.subscribedExternal(key)){
@@ -203,12 +202,12 @@ class Interaction extends Module{
203
202
  for(let i in this.eventMap){
204
203
  if(this.eventMap[i] === type){
205
204
  if(this.subscribers[i]){
206
- notouch = false;
205
+ noTouch = false;
207
206
  }
208
207
  }
209
208
  }
210
209
 
211
- if(notouch){
210
+ if(noTouch){
212
211
  this.unsubscribe(type + "-touchstart", this.touchSubscribers[type + "-touchstart"]);
213
212
  this.unsubscribe(type + "-touchend", this.touchSubscribers[type + "-touchend"]);
214
213
 
@@ -247,44 +246,44 @@ class Interaction extends Module{
247
246
 
248
247
  switch(action){
249
248
  case "start":
250
- watchers.tap = true;
251
-
252
- clearTimeout(watchers.tapHold);
249
+ watchers.tap = true;
253
250
 
254
- watchers.tapHold = setTimeout(() => {
255
251
  clearTimeout(watchers.tapHold);
256
- watchers.tapHold = null;
257
252
 
258
- watchers.tap = null;
259
- clearTimeout(watchers.tapDbl);
260
- watchers.tapDbl = null;
253
+ watchers.tapHold = setTimeout(() => {
254
+ clearTimeout(watchers.tapHold);
255
+ watchers.tapHold = null;
261
256
 
262
- this.dispatchEvent(type + "TapHold", e, component);
263
- }, 1000);
264
- break;
257
+ watchers.tap = null;
258
+ clearTimeout(watchers.tapDbl);
259
+ watchers.tapDbl = null;
265
260
 
266
- case "end":
267
- if(watchers.tap){
261
+ this.dispatchEvent(type + "TapHold", e, component);
262
+ }, 1000);
263
+ break;
268
264
 
269
- watchers.tap = null;
270
- this.dispatchEvent(type + "Tap", e, component);
271
- }
265
+ case "end":
266
+ if(watchers.tap){
272
267
 
273
- if(watchers.tapDbl){
274
- clearTimeout(watchers.tapDbl);
275
- watchers.tapDbl = null;
268
+ watchers.tap = null;
269
+ this.dispatchEvent(type + "Tap", e, component);
270
+ }
276
271
 
277
- this.dispatchEvent(type + "DblTap", e, component);
278
- }else{
279
- watchers.tapDbl = setTimeout(() => {
272
+ if(watchers.tapDbl){
280
273
  clearTimeout(watchers.tapDbl);
281
274
  watchers.tapDbl = null;
282
- }, 300);
283
- }
284
275
 
285
- clearTimeout(watchers.tapHold);
286
- watchers.tapHold = null;
287
- break;
276
+ this.dispatchEvent(type + "DblTap", e, component);
277
+ }else{
278
+ watchers.tapDbl = setTimeout(() => {
279
+ clearTimeout(watchers.tapDbl);
280
+ watchers.tapDbl = null;
281
+ }, 300);
282
+ }
283
+
284
+ clearTimeout(watchers.tapHold);
285
+ watchers.tapHold = null;
286
+ break;
288
287
  }
289
288
  }
290
289