tabulator-tables 6.5.0 → 6.5.1

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 (222) hide show
  1. package/dist/js/tabulator.js +1 -1
  2. package/dist/js/tabulator.min.js +1 -1
  3. package/dist/js/tabulator_esm.js +1 -1
  4. package/dist/js/tabulator_esm.min.js +1 -1
  5. package/dist/js/tabulator_esm.min.mjs +1 -1
  6. package/dist/js/tabulator_esm.mjs +1 -1
  7. package/package.json +2 -1
  8. package/src/js/builds/esm.js +16 -0
  9. package/src/js/builds/jquery_wrapper.js +63 -0
  10. package/src/js/builds/usd.js +1 -0
  11. package/src/js/core/ColumnManager.js +789 -0
  12. package/src/js/core/CoreFeature.js +140 -0
  13. package/src/js/core/FooterManager.js +102 -0
  14. package/src/js/core/Module.js +140 -0
  15. package/src/js/core/RowManager.js +1140 -0
  16. package/src/js/core/Tabulator.js +928 -0
  17. package/src/js/core/TabulatorFull.js +21 -0
  18. package/src/js/core/cell/Cell.js +299 -0
  19. package/src/js/core/cell/CellComponent.js +79 -0
  20. package/src/js/core/column/Column.js +978 -0
  21. package/src/js/core/column/ColumnComponent.js +151 -0
  22. package/src/js/core/column/defaults/options.js +18 -0
  23. package/src/js/core/defaults/options.js +66 -0
  24. package/src/js/core/modules/core.js +3 -0
  25. package/src/js/core/modules/optional.js +37 -0
  26. package/src/js/core/rendering/Renderer.js +204 -0
  27. package/src/js/core/rendering/renderers/BasicHorizontal.js +27 -0
  28. package/src/js/core/rendering/renderers/BasicVertical.js +103 -0
  29. package/src/js/core/rendering/renderers/VirtualDomHorizontal.js +587 -0
  30. package/src/js/core/rendering/renderers/VirtualDomVertical.js +642 -0
  31. package/src/js/core/row/PseudoRow.js +47 -0
  32. package/src/js/core/row/Row.js +487 -0
  33. package/src/js/core/row/RowComponent.js +94 -0
  34. package/src/js/core/tools/Alert.js +66 -0
  35. package/src/js/core/tools/ComponentFunctionBinder.js +32 -0
  36. package/src/js/core/tools/DataLoader.js +128 -0
  37. package/src/js/core/tools/DependencyRegistry.js +82 -0
  38. package/src/js/core/tools/DeprecationAdvisor.js +51 -0
  39. package/src/js/core/tools/ExternalEventBus.js +105 -0
  40. package/src/js/core/tools/Helpers.js +66 -0
  41. package/src/js/core/tools/InteractionMonitor.js +329 -0
  42. package/src/js/core/tools/InternalEventBus.js +162 -0
  43. package/src/js/core/tools/ModuleBinder.js +153 -0
  44. package/src/js/core/tools/OptionsList.js +45 -0
  45. package/src/js/core/tools/Popup.js +317 -0
  46. package/src/js/core/tools/TableRegistry.js +65 -0
  47. package/src/js/modules/Accessor/Accessor.js +115 -0
  48. package/src/js/modules/Accessor/defaults/accessors.js +5 -0
  49. package/src/js/modules/Ajax/Ajax.js +142 -0
  50. package/src/js/modules/Ajax/defaults/config.js +3 -0
  51. package/src/js/modules/Ajax/defaults/contentTypeFormatters.js +45 -0
  52. package/src/js/modules/Ajax/defaults/loaderPromise.js +87 -0
  53. package/src/js/modules/Ajax/defaults/urlGenerator.js +44 -0
  54. package/src/js/modules/Clipboard/Clipboard.js +282 -0
  55. package/src/js/modules/Clipboard/defaults/pasteActions.js +11 -0
  56. package/src/js/modules/Clipboard/defaults/pasteParsers.js +75 -0
  57. package/src/js/modules/Clipboard/extensions/extensions.js +9 -0
  58. package/src/js/modules/Clipboard/extensions/keybindings/actions.js +9 -0
  59. package/src/js/modules/Clipboard/extensions/keybindings/bindings.js +3 -0
  60. package/src/js/modules/ColumnCalcs/CalcComponent.js +46 -0
  61. package/src/js/modules/ColumnCalcs/ColumnCalcs.js +586 -0
  62. package/src/js/modules/ColumnCalcs/defaults/calculations.js +93 -0
  63. package/src/js/modules/Comms/Comms.js +49 -0
  64. package/src/js/modules/DataTree/DataTree.js +620 -0
  65. package/src/js/modules/Download/Download.js +146 -0
  66. package/src/js/modules/Download/defaults/downloaders/csv.js +61 -0
  67. package/src/js/modules/Download/defaults/downloaders/html.js +5 -0
  68. package/src/js/modules/Download/defaults/downloaders/json.js +34 -0
  69. package/src/js/modules/Download/defaults/downloaders/jsonLines.js +32 -0
  70. package/src/js/modules/Download/defaults/downloaders/pdf.js +113 -0
  71. package/src/js/modules/Download/defaults/downloaders/xlsx.js +103 -0
  72. package/src/js/modules/Download/defaults/downloaders.js +15 -0
  73. package/src/js/modules/Edit/Edit.js +845 -0
  74. package/src/js/modules/Edit/List.js +1060 -0
  75. package/src/js/modules/Edit/defaults/editors/adaptable.js +37 -0
  76. package/src/js/modules/Edit/defaults/editors/date.js +144 -0
  77. package/src/js/modules/Edit/defaults/editors/datetime.js +131 -0
  78. package/src/js/modules/Edit/defaults/editors/input.js +77 -0
  79. package/src/js/modules/Edit/defaults/editors/list.js +7 -0
  80. package/src/js/modules/Edit/defaults/editors/number.js +110 -0
  81. package/src/js/modules/Edit/defaults/editors/progress.js +127 -0
  82. package/src/js/modules/Edit/defaults/editors/range.js +81 -0
  83. package/src/js/modules/Edit/defaults/editors/star.js +146 -0
  84. package/src/js/modules/Edit/defaults/editors/textarea.js +123 -0
  85. package/src/js/modules/Edit/defaults/editors/tickCross.js +95 -0
  86. package/src/js/modules/Edit/defaults/editors/time.js +132 -0
  87. package/src/js/modules/Edit/defaults/editors.js +27 -0
  88. package/src/js/modules/Edit/inputMask.js +74 -0
  89. package/src/js/modules/Export/Export.js +654 -0
  90. package/src/js/modules/Export/ExportColumn.js +9 -0
  91. package/src/js/modules/Export/ExportRow.js +8 -0
  92. package/src/js/modules/Export/defaults/columnLookups.js +3 -0
  93. package/src/js/modules/Export/defaults/rowLookups.js +18 -0
  94. package/src/js/modules/Filter/Filter.js +902 -0
  95. package/src/js/modules/Filter/defaults/filters.js +215 -0
  96. package/src/js/modules/Format/Format.js +200 -0
  97. package/src/js/modules/Format/defaults/formatters/adaptable.js +32 -0
  98. package/src/js/modules/Format/defaults/formatters/array.js +30 -0
  99. package/src/js/modules/Format/defaults/formatters/buttonCross.js +3 -0
  100. package/src/js/modules/Format/defaults/formatters/buttonTick.js +3 -0
  101. package/src/js/modules/Format/defaults/formatters/color.js +4 -0
  102. package/src/js/modules/Format/defaults/formatters/datetime.js +39 -0
  103. package/src/js/modules/Format/defaults/formatters/datetimediff.js +43 -0
  104. package/src/js/modules/Format/defaults/formatters/handle.js +4 -0
  105. package/src/js/modules/Format/defaults/formatters/html.js +3 -0
  106. package/src/js/modules/Format/defaults/formatters/image.js +40 -0
  107. package/src/js/modules/Format/defaults/formatters/json.js +12 -0
  108. package/src/js/modules/Format/defaults/formatters/link.js +82 -0
  109. package/src/js/modules/Format/defaults/formatters/lookup.js +10 -0
  110. package/src/js/modules/Format/defaults/formatters/money.js +44 -0
  111. package/src/js/modules/Format/defaults/formatters/plaintext.js +3 -0
  112. package/src/js/modules/Format/defaults/formatters/progress.js +133 -0
  113. package/src/js/modules/Format/defaults/formatters/rownum.js +14 -0
  114. package/src/js/modules/Format/defaults/formatters/star.js +38 -0
  115. package/src/js/modules/Format/defaults/formatters/textarea.js +4 -0
  116. package/src/js/modules/Format/defaults/formatters/tickCross.js +22 -0
  117. package/src/js/modules/Format/defaults/formatters/toggle.js +48 -0
  118. package/src/js/modules/Format/defaults/formatters/traffic.js +47 -0
  119. package/src/js/modules/Format/defaults/formatters.js +47 -0
  120. package/src/js/modules/FrozenColumns/FrozenColumns.js +302 -0
  121. package/src/js/modules/FrozenRows/FrozenRows.js +175 -0
  122. package/src/js/modules/GroupRows/Group.js +615 -0
  123. package/src/js/modules/GroupRows/GroupComponent.js +69 -0
  124. package/src/js/modules/GroupRows/GroupRows.js +636 -0
  125. package/src/js/modules/History/History.js +172 -0
  126. package/src/js/modules/History/defaults/redoers.js +31 -0
  127. package/src/js/modules/History/defaults/undoers.js +33 -0
  128. package/src/js/modules/History/extensions/extensions.js +9 -0
  129. package/src/js/modules/History/extensions/keybindings/actions.js +27 -0
  130. package/src/js/modules/History/extensions/keybindings/bindings.js +4 -0
  131. package/src/js/modules/HtmlTableImport/HtmlTableImport.js +180 -0
  132. package/src/js/modules/Import/Import.js +303 -0
  133. package/src/js/modules/Import/defaults/importers/array.js +3 -0
  134. package/src/js/modules/Import/defaults/importers/csv.js +61 -0
  135. package/src/js/modules/Import/defaults/importers/json.js +8 -0
  136. package/src/js/modules/Import/defaults/importers/xlsx.js +7 -0
  137. package/src/js/modules/Import/defaults/importers.js +11 -0
  138. package/src/js/modules/Interaction/Interaction.js +339 -0
  139. package/src/js/modules/Keybindings/Keybindings.js +198 -0
  140. package/src/js/modules/Keybindings/defaults/actions.js +90 -0
  141. package/src/js/modules/Keybindings/defaults/bindings.js +12 -0
  142. package/src/js/modules/Layout/Layout.js +66 -0
  143. package/src/js/modules/Layout/defaults/modes/fitColumns.js +171 -0
  144. package/src/js/modules/Layout/defaults/modes/fitData.js +10 -0
  145. package/src/js/modules/Layout/defaults/modes/fitDataGeneral.js +10 -0
  146. package/src/js/modules/Layout/defaults/modes/fitDataStretch.js +40 -0
  147. package/src/js/modules/Layout/defaults/modes.js +12 -0
  148. package/src/js/modules/Localize/Localize.js +184 -0
  149. package/src/js/modules/Localize/defaults/langs.js +37 -0
  150. package/src/js/modules/Menu/Menu.js +302 -0
  151. package/src/js/modules/MoveColumns/MoveColumns.js +311 -0
  152. package/src/js/modules/MoveRows/MoveRows.js +604 -0
  153. package/src/js/modules/MoveRows/defaults/receivers.js +30 -0
  154. package/src/js/modules/MoveRows/defaults/senders.js +5 -0
  155. package/src/js/modules/Mutator/Mutator.js +164 -0
  156. package/src/js/modules/Mutator/defaults/mutators.js +1 -0
  157. package/src/js/modules/Page/Page.js +891 -0
  158. package/src/js/modules/Page/defaults/pageCounters/pages.js +33 -0
  159. package/src/js/modules/Page/defaults/pageCounters/rows.js +40 -0
  160. package/src/js/modules/Page/defaults/pageCounters.js +8 -0
  161. package/src/js/modules/Persistence/Persistence.js +473 -0
  162. package/src/js/modules/Persistence/defaults/readers.js +29 -0
  163. package/src/js/modules/Persistence/defaults/writers.js +13 -0
  164. package/src/js/modules/Popup/Popup.js +227 -0
  165. package/src/js/modules/Print/Print.js +136 -0
  166. package/src/js/modules/ReactiveData/ReactiveData.js +416 -0
  167. package/src/js/modules/ResizeColumns/ResizeColumns.js +365 -0
  168. package/src/js/modules/ResizeRows/ResizeRows.js +145 -0
  169. package/src/js/modules/ResizeTable/ResizeTable.js +158 -0
  170. package/src/js/modules/ResponsiveLayout/ResponsiveLayout.js +354 -0
  171. package/src/js/modules/ResponsiveLayout/extensions/extensions.js +9 -0
  172. package/src/js/modules/ResponsiveLayout/extensions/formatters/responsiveCollapse.js +44 -0
  173. package/src/js/modules/SelectRange/Range.js +366 -0
  174. package/src/js/modules/SelectRange/RangeComponent.js +91 -0
  175. package/src/js/modules/SelectRange/SelectRange.js +993 -0
  176. package/src/js/modules/SelectRange/extensions/clipboard/pasteActions.js +45 -0
  177. package/src/js/modules/SelectRange/extensions/clipboard/pasteParsers.js +57 -0
  178. package/src/js/modules/SelectRange/extensions/export/columnLookups.js +11 -0
  179. package/src/js/modules/SelectRange/extensions/export/rowLookups.js +5 -0
  180. package/src/js/modules/SelectRange/extensions/extensions.js +21 -0
  181. package/src/js/modules/SelectRange/extensions/keybindings/actions.js +38 -0
  182. package/src/js/modules/SelectRange/extensions/keybindings/bindings.js +14 -0
  183. package/src/js/modules/SelectRow/SelectRow.js +499 -0
  184. package/src/js/modules/SelectRow/extensions/extensions.js +9 -0
  185. package/src/js/modules/SelectRow/extensions/formatters/rowSelection.js +60 -0
  186. package/src/js/modules/Sort/Sort.js +480 -0
  187. package/src/js/modules/Sort/defaults/sorters/alphanum.js +44 -0
  188. package/src/js/modules/Sort/defaults/sorters/array.js +82 -0
  189. package/src/js/modules/Sort/defaults/sorters/boolean.js +7 -0
  190. package/src/js/modules/Sort/defaults/sorters/date.js +10 -0
  191. package/src/js/modules/Sort/defaults/sorters/datetime.js +48 -0
  192. package/src/js/modules/Sort/defaults/sorters/exists.js +7 -0
  193. package/src/js/modules/Sort/defaults/sorters/number.js +40 -0
  194. package/src/js/modules/Sort/defaults/sorters/string.js +34 -0
  195. package/src/js/modules/Sort/defaults/sorters/time.js +10 -0
  196. package/src/js/modules/Sort/defaults/sorters.js +21 -0
  197. package/src/js/modules/Spreadsheet/GridCalculator.js +64 -0
  198. package/src/js/modules/Spreadsheet/Sheet.js +243 -0
  199. package/src/js/modules/Spreadsheet/SheetComponent.js +59 -0
  200. package/src/js/modules/Spreadsheet/Spreadsheet.js +309 -0
  201. package/src/js/modules/Tooltip/Tooltip.js +128 -0
  202. package/src/js/modules/Validate/Validate.js +303 -0
  203. package/src/js/modules/Validate/defaults/validators.js +150 -0
  204. package/src/scss/tabulator.scss +1693 -0
  205. package/src/scss/themes/bootstrap/tabulator_bootstrap3.scss +302 -0
  206. package/src/scss/themes/bootstrap/tabulator_bootstrap4.scss +589 -0
  207. package/src/scss/themes/bootstrap/tabulator_bootstrap5.scss +979 -0
  208. package/src/scss/themes/bootstrap/variables3.scss +872 -0
  209. package/src/scss/themes/bootstrap/variables4.scss +1059 -0
  210. package/src/scss/themes/bootstrap/variables5.scss +1967 -0
  211. package/src/scss/themes/bulma/tabulator_bulma.scss +316 -0
  212. package/src/scss/themes/bulma/variables.scss +198 -0
  213. package/src/scss/themes/materialize/tabulator_materialize.scss +318 -0
  214. package/src/scss/themes/materialize/variables.scss +71 -0
  215. package/src/scss/themes/semanticui/tabulator_semanticui.scss +623 -0
  216. package/src/scss/themes/semanticui/variables.scss +843 -0
  217. package/src/scss/themes/semanticui/variables_table.scss +248 -0
  218. package/src/scss/themes/tabulator_midnight.scss +235 -0
  219. package/src/scss/themes/tabulator_modern.scss +308 -0
  220. package/src/scss/themes/tabulator_simple.scss +143 -0
  221. package/src/scss/themes/tabulator_site.scss +267 -0
  222. package/src/scss/themes/tabulator_site_dark.scss +496 -0
@@ -0,0 +1,303 @@
1
+ import Module from '../../core/Module.js';
2
+
3
+ import defaultValidators from './defaults/validators.js';
4
+
5
+ export default class Validate extends Module{
6
+
7
+ static moduleName = "validate";
8
+
9
+ //load defaults
10
+ static validators = defaultValidators;
11
+
12
+ constructor(table){
13
+ super(table);
14
+
15
+ this.invalidCells = [];
16
+
17
+ this.registerTableOption("validationMode", "blocking");
18
+
19
+ this.registerColumnOption("validator");
20
+
21
+ this.registerTableFunction("getInvalidCells", this.getInvalidCells.bind(this));
22
+ this.registerTableFunction("clearCellValidation", this.userClearCellValidation.bind(this));
23
+ this.registerTableFunction("validate", this.userValidate.bind(this));
24
+
25
+ this.registerComponentFunction("cell", "isValid", this.cellIsValid.bind(this));
26
+ this.registerComponentFunction("cell", "clearValidation", this.clearValidation.bind(this));
27
+ this.registerComponentFunction("cell", "validate", this.cellValidate.bind(this));
28
+
29
+ this.registerComponentFunction("column", "validate", this.columnValidate.bind(this));
30
+ this.registerComponentFunction("row", "validate", this.rowValidate.bind(this));
31
+ }
32
+
33
+
34
+ initialize(){
35
+ this.subscribe("cell-delete", this.clearValidation.bind(this));
36
+ this.subscribe("column-layout", this.initializeColumnCheck.bind(this));
37
+
38
+ this.subscribe("edit-success", this.editValidate.bind(this));
39
+ this.subscribe("edit-editor-clear", this.editorClear.bind(this));
40
+ this.subscribe("edit-edited-clear", this.editedClear.bind(this));
41
+ }
42
+
43
+ ///////////////////////////////////
44
+ ///////// Event Handling //////////
45
+ ///////////////////////////////////
46
+
47
+ editValidate(cell, value, previousValue){
48
+ var valid = this.table.options.validationMode !== "manual" ? this.validate(cell.column.modules.validate, cell, value) : true;
49
+
50
+ // allow time for editor to make render changes then style cell
51
+ if(valid !== true){
52
+ setTimeout(() => {
53
+ cell.getElement().classList.add("tabulator-validation-fail");
54
+ this.dispatchExternal("validationFailed", cell.getComponent(), value, valid);
55
+ });
56
+ }
57
+
58
+ return valid;
59
+ }
60
+
61
+ editorClear(cell, cancelled){
62
+ if(cancelled){
63
+ if(cell.column.modules.validate){
64
+ this.cellValidate(cell);
65
+ }
66
+ }
67
+
68
+ cell.getElement().classList.remove("tabulator-validation-fail");
69
+ }
70
+
71
+ editedClear(cell){
72
+ if(cell.modules.validate){
73
+ cell.modules.validate.invalid = false;
74
+ }
75
+ }
76
+
77
+ ///////////////////////////////////
78
+ ////////// Cell Functions /////////
79
+ ///////////////////////////////////
80
+
81
+ cellIsValid(cell){
82
+ return cell.modules.validate ? (cell.modules.validate.invalid || true) : true;
83
+ }
84
+
85
+ cellValidate(cell){
86
+ return this.validate(cell.column.modules.validate, cell, cell.getValue());
87
+ }
88
+
89
+ ///////////////////////////////////
90
+ ///////// Column Functions ////////
91
+ ///////////////////////////////////
92
+
93
+ columnValidate(column){
94
+ var invalid = [];
95
+
96
+ column.cells.forEach((cell) => {
97
+ if(this.cellValidate(cell) !== true){
98
+ invalid.push(cell.getComponent());
99
+ }
100
+ });
101
+
102
+ return invalid.length ? invalid : true;
103
+ }
104
+
105
+ ///////////////////////////////////
106
+ ////////// Row Functions //////////
107
+ ///////////////////////////////////
108
+
109
+ rowValidate(row){
110
+ var invalid = [];
111
+
112
+ row.cells.forEach((cell) => {
113
+ if(this.cellValidate(cell) !== true){
114
+ invalid.push(cell.getComponent());
115
+ }
116
+ });
117
+
118
+ return invalid.length ? invalid : true;
119
+ }
120
+
121
+ ///////////////////////////////////
122
+ ///////// Table Functions /////////
123
+ ///////////////////////////////////
124
+
125
+
126
+ userClearCellValidation(cells){
127
+ if(!cells){
128
+ cells = this.getInvalidCells();
129
+ }
130
+
131
+ if(!Array.isArray(cells)){
132
+ cells = [cells];
133
+ }
134
+
135
+ cells.forEach((cell) => {
136
+ this.clearValidation(cell._getSelf());
137
+ });
138
+ }
139
+
140
+ userValidate(cells){
141
+ var output = [];
142
+
143
+ //clear row data
144
+ this.table.rowManager.rows.forEach((row) => {
145
+ row = row.getComponent();
146
+
147
+ var valid = row.validate();
148
+
149
+ if(valid !== true){
150
+ output = output.concat(valid);
151
+ }
152
+ });
153
+
154
+ return output.length ? output : true;
155
+ }
156
+
157
+ ///////////////////////////////////
158
+ ///////// Internal Logic //////////
159
+ ///////////////////////////////////
160
+
161
+ initializeColumnCheck(column){
162
+ if(typeof column.definition.validator !== "undefined"){
163
+ this.initializeColumn(column);
164
+ }
165
+ }
166
+
167
+ //validate
168
+ initializeColumn(column){
169
+ var self = this,
170
+ config = [],
171
+ validator;
172
+
173
+ if(column.definition.validator){
174
+
175
+ if(Array.isArray(column.definition.validator)){
176
+ column.definition.validator.forEach((item) => {
177
+ validator = self._extractValidator(item);
178
+
179
+ if(validator){
180
+ config.push(validator);
181
+ }
182
+ });
183
+
184
+ }else{
185
+ validator = this._extractValidator(column.definition.validator);
186
+
187
+ if(validator){
188
+ config.push(validator);
189
+ }
190
+ }
191
+
192
+ column.modules.validate = config.length ? config : false;
193
+ }
194
+ }
195
+
196
+ _extractValidator(value){
197
+ var type, params, pos;
198
+
199
+ switch(typeof value){
200
+ case "string":
201
+ pos = value.indexOf(':');
202
+
203
+ if(pos > -1){
204
+ type = value.substring(0,pos);
205
+ params = value.substring(pos+1);
206
+ }else{
207
+ type = value;
208
+ }
209
+
210
+ return this._buildValidator(type, params);
211
+
212
+ case "function":
213
+ return this._buildValidator(value);
214
+
215
+ case "object":
216
+ return this._buildValidator(value.type, value.parameters);
217
+ }
218
+ }
219
+
220
+ _buildValidator(type, params){
221
+
222
+ var func = typeof type == "function" ? type : Validate.validators[type];
223
+
224
+ if(!func){
225
+ console.warn("Validator Setup Error - No matching validator found:", type);
226
+ return false;
227
+ }else{
228
+ return {
229
+ type:typeof type == "function" ? "function" : type,
230
+ func:func,
231
+ params:params,
232
+ };
233
+ }
234
+ }
235
+
236
+ validate(validators, cell, value){
237
+ var self = this,
238
+ failedValidators = [],
239
+ invalidIndex = this.invalidCells.indexOf(cell);
240
+
241
+ if(validators){
242
+ validators.forEach((item) => {
243
+ if(!item.func.call(self, cell.getComponent(), value, item.params)){
244
+ failedValidators.push({
245
+ type:item.type,
246
+ parameters:item.params
247
+ });
248
+ }
249
+ });
250
+ }
251
+
252
+ if(!cell.modules.validate){
253
+ cell.modules.validate = {};
254
+ }
255
+
256
+ if(!failedValidators.length){
257
+ cell.modules.validate.invalid = false;
258
+ cell.getElement().classList.remove("tabulator-validation-fail");
259
+
260
+ if(invalidIndex > -1){
261
+ this.invalidCells.splice(invalidIndex, 1);
262
+ }
263
+ }else{
264
+ cell.modules.validate.invalid = failedValidators;
265
+
266
+ if(this.table.options.validationMode !== "manual"){
267
+ cell.getElement().classList.add("tabulator-validation-fail");
268
+ }
269
+
270
+ if(invalidIndex == -1){
271
+ this.invalidCells.push(cell);
272
+ }
273
+ }
274
+
275
+ return failedValidators.length ? failedValidators : true;
276
+ }
277
+
278
+ getInvalidCells(){
279
+ var output = [];
280
+
281
+ this.invalidCells.forEach((cell) => {
282
+ output.push(cell.getComponent());
283
+ });
284
+
285
+ return output;
286
+ }
287
+
288
+ clearValidation(cell){
289
+ var invalidIndex;
290
+
291
+ if(cell.modules.validate && cell.modules.validate.invalid){
292
+
293
+ cell.getElement().classList.remove("tabulator-validation-fail");
294
+ cell.modules.validate.invalid = false;
295
+
296
+ invalidIndex = this.invalidCells.indexOf(cell);
297
+
298
+ if(invalidIndex > -1){
299
+ this.invalidCells.splice(invalidIndex, 1);
300
+ }
301
+ }
302
+ }
303
+ }
@@ -0,0 +1,150 @@
1
+ export default {
2
+ //is integer
3
+ integer: function(cell, value, parameters){
4
+ if(value === "" || value === null || typeof value === "undefined"){
5
+ return true;
6
+ }
7
+
8
+ value = Number(value);
9
+
10
+ return !isNaN(value) && isFinite(value) && Math.floor(value) === value;
11
+ },
12
+
13
+ //is float
14
+ float: function(cell, value, parameters){
15
+ if(value === "" || value === null || typeof value === "undefined"){
16
+ return true;
17
+ }
18
+
19
+ value = Number(value);
20
+
21
+ return !isNaN(value) && isFinite(value) && value % 1 !== 0;
22
+ },
23
+
24
+ //must be a number
25
+ numeric: function(cell, value, parameters){
26
+ if(value === "" || value === null || typeof value === "undefined"){
27
+ return true;
28
+ }
29
+ return !isNaN(value);
30
+ },
31
+
32
+ //must be a string
33
+ string: function(cell, value, parameters){
34
+ if(value === "" || value === null || typeof value === "undefined"){
35
+ return true;
36
+ }
37
+ return isNaN(value);
38
+ },
39
+
40
+ //must be alphanumeric
41
+ alphanumeric: function(cell, value, parameters){
42
+ if(value === "" || value === null || typeof value === "undefined"){
43
+ return true;
44
+ }
45
+
46
+ var reg = new RegExp(/^[a-z0-9]+$/i);
47
+
48
+ return reg.test(value);
49
+ },
50
+
51
+ //maximum value
52
+ max: function(cell, value, parameters){
53
+ if(value === "" || value === null || typeof value === "undefined"){
54
+ return true;
55
+ }
56
+ return parseFloat(value) <= parameters;
57
+ },
58
+
59
+ //minimum value
60
+ min: function(cell, value, parameters){
61
+ if(value === "" || value === null || typeof value === "undefined"){
62
+ return true;
63
+ }
64
+ return parseFloat(value) >= parameters;
65
+ },
66
+
67
+ //starts with value
68
+ starts: function(cell, value, parameters){
69
+ if(value === "" || value === null || typeof value === "undefined"){
70
+ return true;
71
+ }
72
+ return String(value).toLowerCase().startsWith(String(parameters).toLowerCase());
73
+ },
74
+
75
+ //ends with value
76
+ ends: function(cell, value, parameters){
77
+ if(value === "" || value === null || typeof value === "undefined"){
78
+ return true;
79
+ }
80
+ return String(value).toLowerCase().endsWith(String(parameters).toLowerCase());
81
+ },
82
+
83
+
84
+ //minimum string length
85
+ minLength: function(cell, value, parameters){
86
+ if(value === "" || value === null || typeof value === "undefined"){
87
+ return true;
88
+ }
89
+ return String(value).length >= parameters;
90
+ },
91
+
92
+ //maximum string length
93
+ maxLength: function(cell, value, parameters){
94
+ if(value === "" || value === null || typeof value === "undefined"){
95
+ return true;
96
+ }
97
+ return String(value).length <= parameters;
98
+ },
99
+
100
+ //in provided value list
101
+ in: function(cell, value, parameters){
102
+ if(value === "" || value === null || typeof value === "undefined"){
103
+ return true;
104
+ }
105
+
106
+ if(typeof parameters == "string"){
107
+ parameters = parameters.split("|");
108
+ }
109
+
110
+ return parameters.indexOf(value) > -1;
111
+ },
112
+
113
+ //must match provided regex
114
+ regex: function(cell, value, parameters){
115
+ if(value === "" || value === null || typeof value === "undefined"){
116
+ return true;
117
+ }
118
+ var reg = new RegExp(parameters);
119
+
120
+ return reg.test(value);
121
+ },
122
+
123
+ //value must be unique in this column
124
+ unique: function(cell, value, parameters){
125
+ if(value === "" || value === null || typeof value === "undefined"){
126
+ return true;
127
+ }
128
+ var unique = true;
129
+
130
+ var cellData = cell.getData();
131
+ var column = cell.getColumn()._getSelf();
132
+
133
+ this.table.rowManager.rows.forEach(function(row){
134
+ var data = row.getData();
135
+
136
+ if(data !== cellData){
137
+ if(value == column.getFieldValue(data)){
138
+ unique = false;
139
+ }
140
+ }
141
+ });
142
+
143
+ return unique;
144
+ },
145
+
146
+ //must have a value
147
+ required:function(cell, value, parameters){
148
+ return value !== "" && value !== null && typeof value !== "undefined";
149
+ },
150
+ };