tabulator-tables 5.4.2 → 5.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (253) hide show
  1. package/.babelrc.json +3 -3
  2. package/.editorconfig +6 -6
  3. package/.eslintignore +3 -3
  4. package/.eslintrc.js +28 -28
  5. package/.github/ISSUE_TEMPLATE/bug_report.md +58 -58
  6. package/.github/ISSUE_TEMPLATE/documentation.md +14 -14
  7. package/.github/ISSUE_TEMPLATE/feature_request.md +24 -24
  8. package/.github/ISSUE_TEMPLATE/question.md +12 -12
  9. package/.github/workflows/bad-files-check.yml +39 -39
  10. package/.github/workflows/lint-and-test.yml +30 -30
  11. package/CODE_OF_CONDUCT.md +46 -46
  12. package/CONTRIBUTING.md +22 -22
  13. package/LICENSE +20 -20
  14. package/README.md +76 -76
  15. package/bower.json +40 -40
  16. package/build/Bundler.js +185 -185
  17. package/build/rollup.js +6 -6
  18. package/dist/css/tabulator.css +1 -5
  19. package/dist/css/tabulator.css.map +1 -1
  20. package/dist/css/tabulator.min.css +1 -1
  21. package/dist/css/tabulator.min.css.map +1 -1
  22. package/dist/css/tabulator_bootstrap3.css +1 -5
  23. package/dist/css/tabulator_bootstrap3.css.map +1 -1
  24. package/dist/css/tabulator_bootstrap3.min.css +1 -1
  25. package/dist/css/tabulator_bootstrap3.min.css.map +1 -1
  26. package/dist/css/tabulator_bootstrap4.css +1 -5
  27. package/dist/css/tabulator_bootstrap4.css.map +1 -1
  28. package/dist/css/tabulator_bootstrap4.min.css +1 -1
  29. package/dist/css/tabulator_bootstrap4.min.css.map +1 -1
  30. package/dist/css/tabulator_bootstrap5.css +1 -5
  31. package/dist/css/tabulator_bootstrap5.css.map +1 -1
  32. package/dist/css/tabulator_bootstrap5.min.css +1 -1
  33. package/dist/css/tabulator_bootstrap5.min.css.map +1 -1
  34. package/dist/css/tabulator_bulma.css +1 -5
  35. package/dist/css/tabulator_bulma.css.map +1 -1
  36. package/dist/css/tabulator_bulma.min.css +1 -1
  37. package/dist/css/tabulator_bulma.min.css.map +1 -1
  38. package/dist/css/tabulator_materialize.css +1 -5
  39. package/dist/css/tabulator_materialize.css.map +1 -1
  40. package/dist/css/tabulator_materialize.min.css +1 -1
  41. package/dist/css/tabulator_materialize.min.css.map +1 -1
  42. package/dist/css/tabulator_midnight.css +1 -5
  43. package/dist/css/tabulator_midnight.css.map +1 -1
  44. package/dist/css/tabulator_midnight.min.css +1 -1
  45. package/dist/css/tabulator_midnight.min.css.map +1 -1
  46. package/dist/css/tabulator_modern.css +1 -5
  47. package/dist/css/tabulator_modern.css.map +1 -1
  48. package/dist/css/tabulator_modern.min.css +1 -1
  49. package/dist/css/tabulator_modern.min.css.map +1 -1
  50. package/dist/css/tabulator_semanticui.css +103 -107
  51. package/dist/css/tabulator_semanticui.css.map +1 -1
  52. package/dist/css/tabulator_semanticui.min.css +1 -1
  53. package/dist/css/tabulator_semanticui.min.css.map +1 -1
  54. package/dist/css/tabulator_simple.css +1 -5
  55. package/dist/css/tabulator_simple.css.map +1 -1
  56. package/dist/css/tabulator_simple.min.css +1 -1
  57. package/dist/css/tabulator_simple.min.css.map +1 -1
  58. package/dist/css/tabulator_site.css +1 -5
  59. package/dist/css/tabulator_site.css.map +1 -1
  60. package/dist/css/tabulator_site.min.css +1 -1
  61. package/dist/css/tabulator_site.min.css.map +1 -1
  62. package/dist/js/jquery_wrapper.js +55 -55
  63. package/dist/js/tabulator.js +25847 -25653
  64. package/dist/js/tabulator.js.map +1 -1
  65. package/dist/js/tabulator.min.js +2 -2
  66. package/dist/js/tabulator.min.js.map +1 -1
  67. package/dist/js/tabulator_esm.js +25926 -25732
  68. package/dist/js/tabulator_esm.js.map +1 -1
  69. package/dist/js/tabulator_esm.min.js +2 -2
  70. package/dist/js/tabulator_esm.min.js.map +1 -1
  71. package/package.json +65 -65
  72. package/src/js/builds/esm.js +14 -14
  73. package/src/js/builds/jquery_wrapper.js +55 -55
  74. package/src/js/core/ColumnManager.js +730 -730
  75. package/src/js/core/CoreFeature.js +138 -138
  76. package/src/js/core/FooterManager.js +101 -101
  77. package/src/js/core/Module.js +141 -141
  78. package/src/js/core/RowManager.js +1112 -1082
  79. package/src/js/core/Tabulator.js +895 -893
  80. package/src/js/core/TabulatorFull.js +10 -10
  81. package/src/js/core/cell/Cell.js +295 -295
  82. package/src/js/core/cell/CellComponent.js +76 -76
  83. package/src/js/core/column/Column.js +949 -949
  84. package/src/js/core/column/ColumnComponent.js +152 -152
  85. package/src/js/core/column/defaults/options.js +17 -17
  86. package/src/js/core/defaults/options.js +65 -65
  87. package/src/js/core/modules/core.js +2 -2
  88. package/src/js/core/modules/optional.js +34 -34
  89. package/src/js/core/rendering/Renderer.js +203 -203
  90. package/src/js/core/rendering/renderers/BasicHorizontal.js +19 -19
  91. package/src/js/core/rendering/renderers/BasicVertical.js +79 -78
  92. package/src/js/core/rendering/renderers/VirtualDomHorizontal.js +577 -577
  93. package/src/js/core/rendering/renderers/VirtualDomVertical.js +579 -579
  94. package/src/js/core/row/PseudoRow.js +44 -44
  95. package/src/js/core/row/Row.js +457 -457
  96. package/src/js/core/row/RowComponent.js +93 -93
  97. package/src/js/core/tools/Alert.js +61 -61
  98. package/src/js/core/tools/ComponentFunctionBinder.js +32 -32
  99. package/src/js/core/tools/DataLoader.js +119 -119
  100. package/src/js/core/tools/DeprecationAdvisor.js +46 -46
  101. package/src/js/core/tools/ExternalEventBus.js +104 -104
  102. package/src/js/core/tools/Helpers.js +46 -46
  103. package/src/js/core/tools/InteractionMonitor.js +321 -321
  104. package/src/js/core/tools/InternalEventBus.js +161 -161
  105. package/src/js/core/tools/ModuleBinder.js +104 -104
  106. package/src/js/core/tools/OptionsList.js +44 -40
  107. package/src/js/core/tools/Popup.js +304 -304
  108. package/src/js/core/tools/TableRegistry.js +61 -61
  109. package/src/js/modules/Accessor/Accessor.js +115 -115
  110. package/src/js/modules/Ajax/Ajax.js +143 -143
  111. package/src/js/modules/Ajax/defaults/config.js +2 -2
  112. package/src/js/modules/Ajax/defaults/contentTypeFormatters.js +44 -44
  113. package/src/js/modules/Ajax/defaults/loaderPromise.js +86 -86
  114. package/src/js/modules/Ajax/defaults/urlGenerator.js +43 -43
  115. package/src/js/modules/Clipboard/Clipboard.js +279 -279
  116. package/src/js/modules/Clipboard/defaults/pasteActions.js +10 -10
  117. package/src/js/modules/Clipboard/defaults/pasteParsers.js +74 -74
  118. package/src/js/modules/ColumnCalcs/CalcComponent.js +47 -47
  119. package/src/js/modules/ColumnCalcs/ColumnCalcs.js +581 -568
  120. package/src/js/modules/ColumnCalcs/defaults/calculations.js +85 -85
  121. package/src/js/modules/Comms/Comms.js +51 -51
  122. package/src/js/modules/DataTree/DataTree.js +603 -603
  123. package/src/js/modules/Download/Download.js +148 -148
  124. package/src/js/modules/Download/defaults/downloaders/csv.js +61 -61
  125. package/src/js/modules/Download/defaults/downloaders/html.js +4 -4
  126. package/src/js/modules/Download/defaults/downloaders/json.js +33 -33
  127. package/src/js/modules/Download/defaults/downloaders/jsonLines.js +31 -31
  128. package/src/js/modules/Download/defaults/downloaders/pdf.js +111 -111
  129. package/src/js/modules/Download/defaults/downloaders/xlsx.js +98 -98
  130. package/src/js/modules/Download/defaults/downloaders.js +14 -14
  131. package/src/js/modules/Edit/Edit.js +735 -736
  132. package/src/js/modules/Edit/List.js +1037 -1033
  133. package/src/js/modules/Edit/defaults/editors/autocomplete.js +11 -11
  134. package/src/js/modules/Edit/defaults/editors/date.js +138 -110
  135. package/src/js/modules/Edit/defaults/editors/datetime.js +125 -97
  136. package/src/js/modules/Edit/defaults/editors/input.js +76 -74
  137. package/src/js/modules/Edit/defaults/editors/list.js +6 -6
  138. package/src/js/modules/Edit/defaults/editors/number.js +109 -107
  139. package/src/js/modules/Edit/defaults/editors/progress.js +126 -126
  140. package/src/js/modules/Edit/defaults/editors/range.js +80 -78
  141. package/src/js/modules/Edit/defaults/editors/select.js +9 -9
  142. package/src/js/modules/Edit/defaults/editors/star.js +145 -145
  143. package/src/js/modules/Edit/defaults/editors/textarea.js +122 -120
  144. package/src/js/modules/Edit/defaults/editors/tickCross.js +94 -96
  145. package/src/js/modules/Edit/defaults/editors/time.js +126 -98
  146. package/src/js/modules/Edit/defaults/editors.js +28 -28
  147. package/src/js/modules/Edit/inputMask.js +73 -73
  148. package/src/js/modules/Export/Export.js +623 -617
  149. package/src/js/modules/Export/ExportColumn.js +10 -10
  150. package/src/js/modules/Export/ExportRow.js +9 -9
  151. package/src/js/modules/Filter/Filter.js +892 -889
  152. package/src/js/modules/Filter/defaults/filters.js +107 -107
  153. package/src/js/modules/Format/Format.js +212 -212
  154. package/src/js/modules/Format/defaults/formatters/buttonCross.js +2 -2
  155. package/src/js/modules/Format/defaults/formatters/buttonTick.js +2 -2
  156. package/src/js/modules/Format/defaults/formatters/color.js +3 -3
  157. package/src/js/modules/Format/defaults/formatters/datetime.js +36 -36
  158. package/src/js/modules/Format/defaults/formatters/datetimediff.js +40 -40
  159. package/src/js/modules/Format/defaults/formatters/handle.js +3 -3
  160. package/src/js/modules/Format/defaults/formatters/html.js +2 -2
  161. package/src/js/modules/Format/defaults/formatters/image.js +39 -39
  162. package/src/js/modules/Format/defaults/formatters/link.js +77 -77
  163. package/src/js/modules/Format/defaults/formatters/lookup.js +9 -9
  164. package/src/js/modules/Format/defaults/formatters/money.js +36 -36
  165. package/src/js/modules/Format/defaults/formatters/plaintext.js +2 -2
  166. package/src/js/modules/Format/defaults/formatters/progress.js +132 -132
  167. package/src/js/modules/Format/defaults/formatters/responsiveCollapse.js +43 -43
  168. package/src/js/modules/Format/defaults/formatters/rowSelection.js +59 -59
  169. package/src/js/modules/Format/defaults/formatters/rownum.js +9 -9
  170. package/src/js/modules/Format/defaults/formatters/star.js +37 -37
  171. package/src/js/modules/Format/defaults/formatters/textarea.js +3 -3
  172. package/src/js/modules/Format/defaults/formatters/tickCross.js +21 -21
  173. package/src/js/modules/Format/defaults/formatters/traffic.js +46 -46
  174. package/src/js/modules/Format/defaults/formatters.js +42 -42
  175. package/src/js/modules/FrozenColumns/FrozenColumns.js +299 -299
  176. package/src/js/modules/FrozenRows/FrozenRows.js +169 -159
  177. package/src/js/modules/GroupRows/Group.js +597 -595
  178. package/src/js/modules/GroupRows/GroupComponent.js +66 -66
  179. package/src/js/modules/GroupRows/GroupRows.js +639 -623
  180. package/src/js/modules/History/History.js +171 -171
  181. package/src/js/modules/History/defaults/redoers.js +24 -24
  182. package/src/js/modules/History/defaults/undoers.js +24 -24
  183. package/src/js/modules/HtmlTableImport/HtmlTableImport.js +181 -181
  184. package/src/js/modules/Import/Import.js +193 -193
  185. package/src/js/modules/Import/defaults/importers/array.js +4 -4
  186. package/src/js/modules/Import/defaults/importers/csv.js +62 -62
  187. package/src/js/modules/Import/defaults/importers/json.js +7 -7
  188. package/src/js/modules/Import/defaults/importers.js +8 -8
  189. package/src/js/modules/Interaction/Interaction.js +325 -325
  190. package/src/js/modules/Keybindings/Keybindings.js +172 -172
  191. package/src/js/modules/Keybindings/defaults/actions.js +118 -118
  192. package/src/js/modules/Keybindings/defaults/bindings.js +12 -12
  193. package/src/js/modules/Layout/Layout.js +49 -49
  194. package/src/js/modules/Layout/defaults/modes/fitColumns.js +171 -171
  195. package/src/js/modules/Layout/defaults/modes/fitData.js +9 -9
  196. package/src/js/modules/Layout/defaults/modes/fitDataGeneral.js +9 -9
  197. package/src/js/modules/Layout/defaults/modes/fitDataStretch.js +39 -39
  198. package/src/js/modules/Layout/defaults/modes.js +11 -11
  199. package/src/js/modules/Localize/Localize.js +185 -194
  200. package/src/js/modules/Localize/defaults/langs.js +36 -36
  201. package/src/js/modules/Menu/Menu.js +302 -302
  202. package/src/js/modules/MoveColumns/MoveColumns.js +299 -299
  203. package/src/js/modules/MoveRows/MoveRows.js +635 -635
  204. package/src/js/modules/Mutator/Mutator.js +161 -161
  205. package/src/js/modules/Page/Page.js +881 -881
  206. package/src/js/modules/Page/defaults/pageCounters/pages.js +32 -32
  207. package/src/js/modules/Page/defaults/pageCounters/rows.js +39 -39
  208. package/src/js/modules/Page/defaults/pageCounters.js +7 -7
  209. package/src/js/modules/Persistence/Persistence.js +458 -458
  210. package/src/js/modules/Persistence/defaults/readers.js +29 -29
  211. package/src/js/modules/Persistence/defaults/writers.js +12 -12
  212. package/src/js/modules/Popup/Popup.js +231 -231
  213. package/src/js/modules/Print/Print.js +137 -124
  214. package/src/js/modules/ReactiveData/ReactiveData.js +408 -408
  215. package/src/js/modules/ResizeColumns/ResizeColumns.js +309 -309
  216. package/src/js/modules/ResizeRows/ResizeRows.js +111 -111
  217. package/src/js/modules/ResizeTable/ResizeTable.js +159 -159
  218. package/src/js/modules/ResponsiveLayout/ResponsiveLayout.js +345 -345
  219. package/src/js/modules/SelectRow/SelectRow.js +446 -436
  220. package/src/js/modules/Sort/Sort.js +470 -470
  221. package/src/js/modules/Sort/defaults/sorters/alphanum.js +43 -43
  222. package/src/js/modules/Sort/defaults/sorters/array.js +53 -53
  223. package/src/js/modules/Sort/defaults/sorters/boolean.js +6 -6
  224. package/src/js/modules/Sort/defaults/sorters/date.js +9 -9
  225. package/src/js/modules/Sort/defaults/sorters/datetime.js +43 -43
  226. package/src/js/modules/Sort/defaults/sorters/exists.js +6 -6
  227. package/src/js/modules/Sort/defaults/sorters/number.js +39 -39
  228. package/src/js/modules/Sort/defaults/sorters/string.js +33 -33
  229. package/src/js/modules/Sort/defaults/sorters/time.js +9 -9
  230. package/src/js/modules/Sort/defaults/sorters.js +20 -20
  231. package/src/js/modules/Tooltip/Tooltip.js +130 -130
  232. package/src/js/modules/Validate/Validate.js +305 -305
  233. package/src/js/modules/Validate/defaults/validators.js +138 -138
  234. package/src/scss/tabulator.scss +1464 -1466
  235. package/src/scss/themes/bootstrap/functions4.scss +118 -118
  236. package/src/scss/themes/bootstrap/functions5.scss +302 -302
  237. package/src/scss/themes/bootstrap/tabulator_bootstrap3.scss +284 -284
  238. package/src/scss/themes/bootstrap/tabulator_bootstrap4.scss +544 -544
  239. package/src/scss/themes/bootstrap/tabulator_bootstrap5.scss +574 -574
  240. package/src/scss/themes/bootstrap/variables3.scss +870 -870
  241. package/src/scss/themes/bootstrap/variables4.scss +930 -930
  242. package/src/scss/themes/bootstrap/variables5.scss +1641 -1641
  243. package/src/scss/themes/bulma/tabulator_bulma.scss +252 -252
  244. package/src/scss/themes/bulma/variables.scss +197 -197
  245. package/src/scss/themes/materialize/tabulator_materialize.scss +265 -265
  246. package/src/scss/themes/materialize/variables.scss +70 -70
  247. package/src/scss/themes/semanticui/tabulator_semanticui.scss +561 -561
  248. package/src/scss/themes/semanticui/variables.scss +839 -839
  249. package/src/scss/themes/semanticui/variables_table.scss +247 -247
  250. package/src/scss/themes/tabulator_midnight.scss +158 -158
  251. package/src/scss/themes/tabulator_modern.scss +231 -231
  252. package/src/scss/themes/tabulator_simple.scss +102 -102
  253. package/src/scss/themes/tabulator_site.scss +189 -189
@@ -1,11 +1,11 @@
1
- //tabulator with all modules installed
2
- import {default as Tabulator} from './Tabulator.js';
3
- import * as modules from '../core/modules/optional.js';
4
- import ModuleBinder from './tools/ModuleBinder.js';
5
-
6
- class TabulatorFull extends Tabulator {}
7
-
8
- //bind modules and static functionality
9
- new ModuleBinder(TabulatorFull, modules);
10
-
1
+ //tabulator with all modules installed
2
+ import {default as Tabulator} from './Tabulator.js';
3
+ import * as modules from '../core/modules/optional.js';
4
+ import ModuleBinder from './tools/ModuleBinder.js';
5
+
6
+ class TabulatorFull extends Tabulator {}
7
+
8
+ //bind modules and static functionality
9
+ new ModuleBinder(TabulatorFull, modules);
10
+
11
11
  export default TabulatorFull;
@@ -1,295 +1,295 @@
1
- import CoreFeature from '../CoreFeature.js';
2
- import CellComponent from './CellComponent.js';
3
-
4
- export default class Cell extends CoreFeature{
5
- constructor(column, row){
6
- super(column.table);
7
-
8
- this.table = column.table;
9
- this.column = column;
10
- this.row = row;
11
- this.element = null;
12
- this.value = null;
13
- this.initialValue;
14
- this.oldValue = null;
15
- this.modules = {};
16
-
17
- this.height = null;
18
- this.width = null;
19
- this.minWidth = null;
20
-
21
- this.component = null;
22
-
23
- this.loaded = false; //track if the cell has been added to the DOM yet
24
-
25
- this.build();
26
- }
27
-
28
- //////////////// Setup Functions /////////////////
29
- //generate element
30
- build(){
31
- this.generateElement();
32
-
33
- this.setWidth();
34
-
35
- this._configureCell();
36
-
37
- this.setValueActual(this.column.getFieldValue(this.row.data));
38
-
39
- this.initialValue = this.value;
40
- }
41
-
42
- generateElement(){
43
- this.element = document.createElement('div');
44
- this.element.className = "tabulator-cell";
45
- this.element.setAttribute("role", "gridcell");
46
- }
47
-
48
- _configureCell(){
49
- var element = this.element,
50
- field = this.column.getField(),
51
- vertAligns = {
52
- top:"flex-start",
53
- bottom:"flex-end",
54
- middle:"center",
55
- },
56
- hozAligns = {
57
- left:"flex-start",
58
- right:"flex-end",
59
- center:"center",
60
- };
61
-
62
- //set text alignment
63
- element.style.textAlign = this.column.hozAlign;
64
-
65
- if(this.column.vertAlign){
66
- element.style.display = "inline-flex";
67
-
68
- element.style.alignItems = vertAligns[this.column.vertAlign] || "";
69
-
70
- if(this.column.hozAlign){
71
- element.style.justifyContent = hozAligns[this.column.hozAlign] || "";
72
- }
73
- }
74
-
75
- if(field){
76
- element.setAttribute("tabulator-field", field);
77
- }
78
-
79
- //add class to cell if needed
80
- if(this.column.definition.cssClass){
81
- var classNames = this.column.definition.cssClass.split(" ");
82
- classNames.forEach((className) => {
83
- element.classList.add(className);
84
- });
85
- }
86
-
87
- this.dispatch("cell-init", this);
88
-
89
- //hide cell if not visible
90
- if(!this.column.visible){
91
- this.hide();
92
- }
93
- }
94
-
95
- //generate cell contents
96
- _generateContents(){
97
- var val;
98
-
99
- val = this.chain("cell-format", this, null, () => {
100
- return this.element.innerHTML = this.value;
101
- });
102
-
103
- switch(typeof val){
104
- case "object":
105
- if(val instanceof Node){
106
-
107
- //clear previous cell contents
108
- while(this.element.firstChild) this.element.removeChild(this.element.firstChild);
109
-
110
- this.element.appendChild(val);
111
- }else{
112
- this.element.innerHTML = "";
113
-
114
- if(val != null){
115
- console.warn("Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:", val);
116
- }
117
- }
118
- break;
119
- case "undefined":
120
- this.element.innerHTML = "";
121
- break;
122
- default:
123
- this.element.innerHTML = val;
124
- }
125
- }
126
-
127
- cellRendered(){
128
- this.dispatch("cell-rendered", this);
129
- }
130
-
131
- //////////////////// Getters ////////////////////
132
- getElement(containerOnly){
133
- if(!this.loaded){
134
- this.loaded = true;
135
- if(!containerOnly){
136
- this.layoutElement();
137
- }
138
- }
139
-
140
- return this.element;
141
- }
142
-
143
- getValue(){
144
- return this.value;
145
- }
146
-
147
- getOldValue(){
148
- return this.oldValue;
149
- }
150
-
151
- //////////////////// Actions ////////////////////
152
- setValue(value, mutate, force){
153
- var changed = this.setValueProcessData(value, mutate, force);
154
-
155
- if(changed){
156
- this.dispatch("cell-value-updated", this);
157
-
158
- this.cellRendered();
159
-
160
- if(this.column.definition.cellEdited){
161
- this.column.definition.cellEdited.call(this.table, this.getComponent());
162
- }
163
-
164
- this.dispatchExternal("cellEdited", this.getComponent());
165
-
166
- if(this.subscribedExternal("dataChanged")){
167
- this.dispatchExternal("dataChanged", this.table.rowManager.getData());
168
- }
169
- }
170
- }
171
-
172
- setValueProcessData(value, mutate, force){
173
- var changed = false;
174
-
175
- if(this.value !== value || force){
176
-
177
- changed = true;
178
-
179
- if(mutate){
180
- value = this.chain("cell-value-changing", [this, value], null, value);
181
- }
182
- }
183
-
184
- this.setValueActual(value);
185
-
186
- if(changed){
187
- this.dispatch("cell-value-changed", this);
188
- }
189
-
190
- return changed;
191
- }
192
-
193
- setValueActual(value){
194
- this.oldValue = this.value;
195
-
196
- this.value = value;
197
-
198
- this.dispatch("cell-value-save-before", this);
199
-
200
- this.column.setFieldValue(this.row.data, value);
201
-
202
- this.dispatch("cell-value-save-after", this);
203
-
204
- if(this.loaded){
205
- this.layoutElement();
206
- }
207
- }
208
-
209
- layoutElement(){
210
- this._generateContents();
211
-
212
- this.dispatch("cell-layout", this);
213
- }
214
-
215
- setWidth(){
216
- this.width = this.column.width;
217
- this.element.style.width = this.column.widthStyled;
218
- }
219
-
220
- clearWidth(){
221
- this.width = "";
222
- this.element.style.width = "";
223
- }
224
-
225
- getWidth(){
226
- return this.width || this.element.offsetWidth;
227
- }
228
-
229
- setMinWidth(){
230
- this.minWidth = this.column.minWidth;
231
- this.element.style.minWidth = this.column.minWidthStyled;
232
- }
233
-
234
- setMaxWidth(){
235
- this.maxWidth = this.column.maxWidth;
236
- this.element.style.maxWidth = this.column.maxWidthStyled;
237
- }
238
-
239
- checkHeight(){
240
- // var height = this.element.css("height");
241
- this.row.reinitializeHeight();
242
- }
243
-
244
- clearHeight(){
245
- this.element.style.height = "";
246
- this.height = null;
247
-
248
- this.dispatch("cell-height", this, "");
249
- }
250
-
251
- setHeight(){
252
- this.height = this.row.height;
253
- this.element.style.height = this.row.heightStyled;
254
-
255
- this.dispatch("cell-height", this, this.row.heightStyled);
256
- }
257
-
258
- getHeight(){
259
- return this.height || this.element.offsetHeight;
260
- }
261
-
262
- show(){
263
- this.element.style.display = this.column.vertAlign ? "inline-flex" : "";
264
- }
265
-
266
- hide(){
267
- this.element.style.display = "none";
268
- }
269
-
270
- delete(){
271
- this.dispatch("cell-delete", this);
272
-
273
- if(!this.table.rowManager.redrawBlock && this.element.parentNode){
274
- this.element.parentNode.removeChild(this.element);
275
- }
276
-
277
- this.element = false;
278
- this.column.deleteCell(this);
279
- this.row.deleteCell(this);
280
- this.calcs = {};
281
- }
282
-
283
- getIndex(){
284
- return this.row.getCellIndex(this);
285
- }
286
-
287
- //////////////// Object Generation /////////////////
288
- getComponent(){
289
- if(!this.component){
290
- this.component = new CellComponent(this);
291
- }
292
-
293
- return this.component;
294
- }
295
- }
1
+ import CoreFeature from '../CoreFeature.js';
2
+ import CellComponent from './CellComponent.js';
3
+
4
+ export default class Cell extends CoreFeature{
5
+ constructor(column, row){
6
+ super(column.table);
7
+
8
+ this.table = column.table;
9
+ this.column = column;
10
+ this.row = row;
11
+ this.element = null;
12
+ this.value = null;
13
+ this.initialValue;
14
+ this.oldValue = null;
15
+ this.modules = {};
16
+
17
+ this.height = null;
18
+ this.width = null;
19
+ this.minWidth = null;
20
+
21
+ this.component = null;
22
+
23
+ this.loaded = false; //track if the cell has been added to the DOM yet
24
+
25
+ this.build();
26
+ }
27
+
28
+ //////////////// Setup Functions /////////////////
29
+ //generate element
30
+ build(){
31
+ this.generateElement();
32
+
33
+ this.setWidth();
34
+
35
+ this._configureCell();
36
+
37
+ this.setValueActual(this.column.getFieldValue(this.row.data));
38
+
39
+ this.initialValue = this.value;
40
+ }
41
+
42
+ generateElement(){
43
+ this.element = document.createElement('div');
44
+ this.element.className = "tabulator-cell";
45
+ this.element.setAttribute("role", "gridcell");
46
+ }
47
+
48
+ _configureCell(){
49
+ var element = this.element,
50
+ field = this.column.getField(),
51
+ vertAligns = {
52
+ top:"flex-start",
53
+ bottom:"flex-end",
54
+ middle:"center",
55
+ },
56
+ hozAligns = {
57
+ left:"flex-start",
58
+ right:"flex-end",
59
+ center:"center",
60
+ };
61
+
62
+ //set text alignment
63
+ element.style.textAlign = this.column.hozAlign;
64
+
65
+ if(this.column.vertAlign){
66
+ element.style.display = "inline-flex";
67
+
68
+ element.style.alignItems = vertAligns[this.column.vertAlign] || "";
69
+
70
+ if(this.column.hozAlign){
71
+ element.style.justifyContent = hozAligns[this.column.hozAlign] || "";
72
+ }
73
+ }
74
+
75
+ if(field){
76
+ element.setAttribute("tabulator-field", field);
77
+ }
78
+
79
+ //add class to cell if needed
80
+ if(this.column.definition.cssClass){
81
+ var classNames = this.column.definition.cssClass.split(" ");
82
+ classNames.forEach((className) => {
83
+ element.classList.add(className);
84
+ });
85
+ }
86
+
87
+ this.dispatch("cell-init", this);
88
+
89
+ //hide cell if not visible
90
+ if(!this.column.visible){
91
+ this.hide();
92
+ }
93
+ }
94
+
95
+ //generate cell contents
96
+ _generateContents(){
97
+ var val;
98
+
99
+ val = this.chain("cell-format", this, null, () => {
100
+ return this.element.innerHTML = this.value;
101
+ });
102
+
103
+ switch(typeof val){
104
+ case "object":
105
+ if(val instanceof Node){
106
+
107
+ //clear previous cell contents
108
+ while(this.element.firstChild) this.element.removeChild(this.element.firstChild);
109
+
110
+ this.element.appendChild(val);
111
+ }else{
112
+ this.element.innerHTML = "";
113
+
114
+ if(val != null){
115
+ console.warn("Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:", val);
116
+ }
117
+ }
118
+ break;
119
+ case "undefined":
120
+ this.element.innerHTML = "";
121
+ break;
122
+ default:
123
+ this.element.innerHTML = val;
124
+ }
125
+ }
126
+
127
+ cellRendered(){
128
+ this.dispatch("cell-rendered", this);
129
+ }
130
+
131
+ //////////////////// Getters ////////////////////
132
+ getElement(containerOnly){
133
+ if(!this.loaded){
134
+ this.loaded = true;
135
+ if(!containerOnly){
136
+ this.layoutElement();
137
+ }
138
+ }
139
+
140
+ return this.element;
141
+ }
142
+
143
+ getValue(){
144
+ return this.value;
145
+ }
146
+
147
+ getOldValue(){
148
+ return this.oldValue;
149
+ }
150
+
151
+ //////////////////// Actions ////////////////////
152
+ setValue(value, mutate, force){
153
+ var changed = this.setValueProcessData(value, mutate, force);
154
+
155
+ if(changed){
156
+ this.dispatch("cell-value-updated", this);
157
+
158
+ this.cellRendered();
159
+
160
+ if(this.column.definition.cellEdited){
161
+ this.column.definition.cellEdited.call(this.table, this.getComponent());
162
+ }
163
+
164
+ this.dispatchExternal("cellEdited", this.getComponent());
165
+
166
+ if(this.subscribedExternal("dataChanged")){
167
+ this.dispatchExternal("dataChanged", this.table.rowManager.getData());
168
+ }
169
+ }
170
+ }
171
+
172
+ setValueProcessData(value, mutate, force){
173
+ var changed = false;
174
+
175
+ if(this.value !== value || force){
176
+
177
+ changed = true;
178
+
179
+ if(mutate){
180
+ value = this.chain("cell-value-changing", [this, value], null, value);
181
+ }
182
+ }
183
+
184
+ this.setValueActual(value);
185
+
186
+ if(changed){
187
+ this.dispatch("cell-value-changed", this);
188
+ }
189
+
190
+ return changed;
191
+ }
192
+
193
+ setValueActual(value){
194
+ this.oldValue = this.value;
195
+
196
+ this.value = value;
197
+
198
+ this.dispatch("cell-value-save-before", this);
199
+
200
+ this.column.setFieldValue(this.row.data, value);
201
+
202
+ this.dispatch("cell-value-save-after", this);
203
+
204
+ if(this.loaded){
205
+ this.layoutElement();
206
+ }
207
+ }
208
+
209
+ layoutElement(){
210
+ this._generateContents();
211
+
212
+ this.dispatch("cell-layout", this);
213
+ }
214
+
215
+ setWidth(){
216
+ this.width = this.column.width;
217
+ this.element.style.width = this.column.widthStyled;
218
+ }
219
+
220
+ clearWidth(){
221
+ this.width = "";
222
+ this.element.style.width = "";
223
+ }
224
+
225
+ getWidth(){
226
+ return this.width || this.element.offsetWidth;
227
+ }
228
+
229
+ setMinWidth(){
230
+ this.minWidth = this.column.minWidth;
231
+ this.element.style.minWidth = this.column.minWidthStyled;
232
+ }
233
+
234
+ setMaxWidth(){
235
+ this.maxWidth = this.column.maxWidth;
236
+ this.element.style.maxWidth = this.column.maxWidthStyled;
237
+ }
238
+
239
+ checkHeight(){
240
+ // var height = this.element.css("height");
241
+ this.row.reinitializeHeight();
242
+ }
243
+
244
+ clearHeight(){
245
+ this.element.style.height = "";
246
+ this.height = null;
247
+
248
+ this.dispatch("cell-height", this, "");
249
+ }
250
+
251
+ setHeight(){
252
+ this.height = this.row.height;
253
+ this.element.style.height = this.row.heightStyled;
254
+
255
+ this.dispatch("cell-height", this, this.row.heightStyled);
256
+ }
257
+
258
+ getHeight(){
259
+ return this.height || this.element.offsetHeight;
260
+ }
261
+
262
+ show(){
263
+ this.element.style.display = this.column.vertAlign ? "inline-flex" : "";
264
+ }
265
+
266
+ hide(){
267
+ this.element.style.display = "none";
268
+ }
269
+
270
+ delete(){
271
+ this.dispatch("cell-delete", this);
272
+
273
+ if(!this.table.rowManager.redrawBlock && this.element.parentNode){
274
+ this.element.parentNode.removeChild(this.element);
275
+ }
276
+
277
+ this.element = false;
278
+ this.column.deleteCell(this);
279
+ this.row.deleteCell(this);
280
+ this.calcs = {};
281
+ }
282
+
283
+ getIndex(){
284
+ return this.row.getCellIndex(this);
285
+ }
286
+
287
+ //////////////// Object Generation /////////////////
288
+ getComponent(){
289
+ if(!this.component){
290
+ this.component = new CellComponent(this);
291
+ }
292
+
293
+ return this.component;
294
+ }
295
+ }