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.
- package/dist/js/tabulator.js +1 -1
- package/dist/js/tabulator.min.js +1 -1
- package/dist/js/tabulator_esm.js +1 -1
- package/dist/js/tabulator_esm.min.js +1 -1
- package/dist/js/tabulator_esm.min.mjs +1 -1
- package/dist/js/tabulator_esm.mjs +1 -1
- package/package.json +2 -1
- package/src/js/builds/esm.js +16 -0
- package/src/js/builds/jquery_wrapper.js +63 -0
- package/src/js/builds/usd.js +1 -0
- package/src/js/core/ColumnManager.js +789 -0
- package/src/js/core/CoreFeature.js +140 -0
- package/src/js/core/FooterManager.js +102 -0
- package/src/js/core/Module.js +140 -0
- package/src/js/core/RowManager.js +1140 -0
- package/src/js/core/Tabulator.js +928 -0
- package/src/js/core/TabulatorFull.js +21 -0
- package/src/js/core/cell/Cell.js +299 -0
- package/src/js/core/cell/CellComponent.js +79 -0
- package/src/js/core/column/Column.js +978 -0
- package/src/js/core/column/ColumnComponent.js +151 -0
- package/src/js/core/column/defaults/options.js +18 -0
- package/src/js/core/defaults/options.js +66 -0
- package/src/js/core/modules/core.js +3 -0
- package/src/js/core/modules/optional.js +37 -0
- package/src/js/core/rendering/Renderer.js +204 -0
- package/src/js/core/rendering/renderers/BasicHorizontal.js +27 -0
- package/src/js/core/rendering/renderers/BasicVertical.js +103 -0
- package/src/js/core/rendering/renderers/VirtualDomHorizontal.js +587 -0
- package/src/js/core/rendering/renderers/VirtualDomVertical.js +642 -0
- package/src/js/core/row/PseudoRow.js +47 -0
- package/src/js/core/row/Row.js +487 -0
- package/src/js/core/row/RowComponent.js +94 -0
- package/src/js/core/tools/Alert.js +66 -0
- package/src/js/core/tools/ComponentFunctionBinder.js +32 -0
- package/src/js/core/tools/DataLoader.js +128 -0
- package/src/js/core/tools/DependencyRegistry.js +82 -0
- package/src/js/core/tools/DeprecationAdvisor.js +51 -0
- package/src/js/core/tools/ExternalEventBus.js +105 -0
- package/src/js/core/tools/Helpers.js +66 -0
- package/src/js/core/tools/InteractionMonitor.js +329 -0
- package/src/js/core/tools/InternalEventBus.js +162 -0
- package/src/js/core/tools/ModuleBinder.js +153 -0
- package/src/js/core/tools/OptionsList.js +45 -0
- package/src/js/core/tools/Popup.js +317 -0
- package/src/js/core/tools/TableRegistry.js +65 -0
- package/src/js/modules/Accessor/Accessor.js +115 -0
- package/src/js/modules/Accessor/defaults/accessors.js +5 -0
- package/src/js/modules/Ajax/Ajax.js +142 -0
- package/src/js/modules/Ajax/defaults/config.js +3 -0
- package/src/js/modules/Ajax/defaults/contentTypeFormatters.js +45 -0
- package/src/js/modules/Ajax/defaults/loaderPromise.js +87 -0
- package/src/js/modules/Ajax/defaults/urlGenerator.js +44 -0
- package/src/js/modules/Clipboard/Clipboard.js +282 -0
- package/src/js/modules/Clipboard/defaults/pasteActions.js +11 -0
- package/src/js/modules/Clipboard/defaults/pasteParsers.js +75 -0
- package/src/js/modules/Clipboard/extensions/extensions.js +9 -0
- package/src/js/modules/Clipboard/extensions/keybindings/actions.js +9 -0
- package/src/js/modules/Clipboard/extensions/keybindings/bindings.js +3 -0
- package/src/js/modules/ColumnCalcs/CalcComponent.js +46 -0
- package/src/js/modules/ColumnCalcs/ColumnCalcs.js +586 -0
- package/src/js/modules/ColumnCalcs/defaults/calculations.js +93 -0
- package/src/js/modules/Comms/Comms.js +49 -0
- package/src/js/modules/DataTree/DataTree.js +620 -0
- package/src/js/modules/Download/Download.js +146 -0
- package/src/js/modules/Download/defaults/downloaders/csv.js +61 -0
- package/src/js/modules/Download/defaults/downloaders/html.js +5 -0
- package/src/js/modules/Download/defaults/downloaders/json.js +34 -0
- package/src/js/modules/Download/defaults/downloaders/jsonLines.js +32 -0
- package/src/js/modules/Download/defaults/downloaders/pdf.js +113 -0
- package/src/js/modules/Download/defaults/downloaders/xlsx.js +103 -0
- package/src/js/modules/Download/defaults/downloaders.js +15 -0
- package/src/js/modules/Edit/Edit.js +845 -0
- package/src/js/modules/Edit/List.js +1060 -0
- package/src/js/modules/Edit/defaults/editors/adaptable.js +37 -0
- package/src/js/modules/Edit/defaults/editors/date.js +144 -0
- package/src/js/modules/Edit/defaults/editors/datetime.js +131 -0
- package/src/js/modules/Edit/defaults/editors/input.js +77 -0
- package/src/js/modules/Edit/defaults/editors/list.js +7 -0
- package/src/js/modules/Edit/defaults/editors/number.js +110 -0
- package/src/js/modules/Edit/defaults/editors/progress.js +127 -0
- package/src/js/modules/Edit/defaults/editors/range.js +81 -0
- package/src/js/modules/Edit/defaults/editors/star.js +146 -0
- package/src/js/modules/Edit/defaults/editors/textarea.js +123 -0
- package/src/js/modules/Edit/defaults/editors/tickCross.js +95 -0
- package/src/js/modules/Edit/defaults/editors/time.js +132 -0
- package/src/js/modules/Edit/defaults/editors.js +27 -0
- package/src/js/modules/Edit/inputMask.js +74 -0
- package/src/js/modules/Export/Export.js +654 -0
- package/src/js/modules/Export/ExportColumn.js +9 -0
- package/src/js/modules/Export/ExportRow.js +8 -0
- package/src/js/modules/Export/defaults/columnLookups.js +3 -0
- package/src/js/modules/Export/defaults/rowLookups.js +18 -0
- package/src/js/modules/Filter/Filter.js +902 -0
- package/src/js/modules/Filter/defaults/filters.js +215 -0
- package/src/js/modules/Format/Format.js +200 -0
- package/src/js/modules/Format/defaults/formatters/adaptable.js +32 -0
- package/src/js/modules/Format/defaults/formatters/array.js +30 -0
- package/src/js/modules/Format/defaults/formatters/buttonCross.js +3 -0
- package/src/js/modules/Format/defaults/formatters/buttonTick.js +3 -0
- package/src/js/modules/Format/defaults/formatters/color.js +4 -0
- package/src/js/modules/Format/defaults/formatters/datetime.js +39 -0
- package/src/js/modules/Format/defaults/formatters/datetimediff.js +43 -0
- package/src/js/modules/Format/defaults/formatters/handle.js +4 -0
- package/src/js/modules/Format/defaults/formatters/html.js +3 -0
- package/src/js/modules/Format/defaults/formatters/image.js +40 -0
- package/src/js/modules/Format/defaults/formatters/json.js +12 -0
- package/src/js/modules/Format/defaults/formatters/link.js +82 -0
- package/src/js/modules/Format/defaults/formatters/lookup.js +10 -0
- package/src/js/modules/Format/defaults/formatters/money.js +44 -0
- package/src/js/modules/Format/defaults/formatters/plaintext.js +3 -0
- package/src/js/modules/Format/defaults/formatters/progress.js +133 -0
- package/src/js/modules/Format/defaults/formatters/rownum.js +14 -0
- package/src/js/modules/Format/defaults/formatters/star.js +38 -0
- package/src/js/modules/Format/defaults/formatters/textarea.js +4 -0
- package/src/js/modules/Format/defaults/formatters/tickCross.js +22 -0
- package/src/js/modules/Format/defaults/formatters/toggle.js +48 -0
- package/src/js/modules/Format/defaults/formatters/traffic.js +47 -0
- package/src/js/modules/Format/defaults/formatters.js +47 -0
- package/src/js/modules/FrozenColumns/FrozenColumns.js +302 -0
- package/src/js/modules/FrozenRows/FrozenRows.js +175 -0
- package/src/js/modules/GroupRows/Group.js +615 -0
- package/src/js/modules/GroupRows/GroupComponent.js +69 -0
- package/src/js/modules/GroupRows/GroupRows.js +636 -0
- package/src/js/modules/History/History.js +172 -0
- package/src/js/modules/History/defaults/redoers.js +31 -0
- package/src/js/modules/History/defaults/undoers.js +33 -0
- package/src/js/modules/History/extensions/extensions.js +9 -0
- package/src/js/modules/History/extensions/keybindings/actions.js +27 -0
- package/src/js/modules/History/extensions/keybindings/bindings.js +4 -0
- package/src/js/modules/HtmlTableImport/HtmlTableImport.js +180 -0
- package/src/js/modules/Import/Import.js +303 -0
- package/src/js/modules/Import/defaults/importers/array.js +3 -0
- package/src/js/modules/Import/defaults/importers/csv.js +61 -0
- package/src/js/modules/Import/defaults/importers/json.js +8 -0
- package/src/js/modules/Import/defaults/importers/xlsx.js +7 -0
- package/src/js/modules/Import/defaults/importers.js +11 -0
- package/src/js/modules/Interaction/Interaction.js +339 -0
- package/src/js/modules/Keybindings/Keybindings.js +198 -0
- package/src/js/modules/Keybindings/defaults/actions.js +90 -0
- package/src/js/modules/Keybindings/defaults/bindings.js +12 -0
- package/src/js/modules/Layout/Layout.js +66 -0
- package/src/js/modules/Layout/defaults/modes/fitColumns.js +171 -0
- package/src/js/modules/Layout/defaults/modes/fitData.js +10 -0
- package/src/js/modules/Layout/defaults/modes/fitDataGeneral.js +10 -0
- package/src/js/modules/Layout/defaults/modes/fitDataStretch.js +40 -0
- package/src/js/modules/Layout/defaults/modes.js +12 -0
- package/src/js/modules/Localize/Localize.js +184 -0
- package/src/js/modules/Localize/defaults/langs.js +37 -0
- package/src/js/modules/Menu/Menu.js +302 -0
- package/src/js/modules/MoveColumns/MoveColumns.js +311 -0
- package/src/js/modules/MoveRows/MoveRows.js +604 -0
- package/src/js/modules/MoveRows/defaults/receivers.js +30 -0
- package/src/js/modules/MoveRows/defaults/senders.js +5 -0
- package/src/js/modules/Mutator/Mutator.js +164 -0
- package/src/js/modules/Mutator/defaults/mutators.js +1 -0
- package/src/js/modules/Page/Page.js +891 -0
- package/src/js/modules/Page/defaults/pageCounters/pages.js +33 -0
- package/src/js/modules/Page/defaults/pageCounters/rows.js +40 -0
- package/src/js/modules/Page/defaults/pageCounters.js +8 -0
- package/src/js/modules/Persistence/Persistence.js +473 -0
- package/src/js/modules/Persistence/defaults/readers.js +29 -0
- package/src/js/modules/Persistence/defaults/writers.js +13 -0
- package/src/js/modules/Popup/Popup.js +227 -0
- package/src/js/modules/Print/Print.js +136 -0
- package/src/js/modules/ReactiveData/ReactiveData.js +416 -0
- package/src/js/modules/ResizeColumns/ResizeColumns.js +365 -0
- package/src/js/modules/ResizeRows/ResizeRows.js +145 -0
- package/src/js/modules/ResizeTable/ResizeTable.js +158 -0
- package/src/js/modules/ResponsiveLayout/ResponsiveLayout.js +354 -0
- package/src/js/modules/ResponsiveLayout/extensions/extensions.js +9 -0
- package/src/js/modules/ResponsiveLayout/extensions/formatters/responsiveCollapse.js +44 -0
- package/src/js/modules/SelectRange/Range.js +366 -0
- package/src/js/modules/SelectRange/RangeComponent.js +91 -0
- package/src/js/modules/SelectRange/SelectRange.js +993 -0
- package/src/js/modules/SelectRange/extensions/clipboard/pasteActions.js +45 -0
- package/src/js/modules/SelectRange/extensions/clipboard/pasteParsers.js +57 -0
- package/src/js/modules/SelectRange/extensions/export/columnLookups.js +11 -0
- package/src/js/modules/SelectRange/extensions/export/rowLookups.js +5 -0
- package/src/js/modules/SelectRange/extensions/extensions.js +21 -0
- package/src/js/modules/SelectRange/extensions/keybindings/actions.js +38 -0
- package/src/js/modules/SelectRange/extensions/keybindings/bindings.js +14 -0
- package/src/js/modules/SelectRow/SelectRow.js +499 -0
- package/src/js/modules/SelectRow/extensions/extensions.js +9 -0
- package/src/js/modules/SelectRow/extensions/formatters/rowSelection.js +60 -0
- package/src/js/modules/Sort/Sort.js +480 -0
- package/src/js/modules/Sort/defaults/sorters/alphanum.js +44 -0
- package/src/js/modules/Sort/defaults/sorters/array.js +82 -0
- package/src/js/modules/Sort/defaults/sorters/boolean.js +7 -0
- package/src/js/modules/Sort/defaults/sorters/date.js +10 -0
- package/src/js/modules/Sort/defaults/sorters/datetime.js +48 -0
- package/src/js/modules/Sort/defaults/sorters/exists.js +7 -0
- package/src/js/modules/Sort/defaults/sorters/number.js +40 -0
- package/src/js/modules/Sort/defaults/sorters/string.js +34 -0
- package/src/js/modules/Sort/defaults/sorters/time.js +10 -0
- package/src/js/modules/Sort/defaults/sorters.js +21 -0
- package/src/js/modules/Spreadsheet/GridCalculator.js +64 -0
- package/src/js/modules/Spreadsheet/Sheet.js +243 -0
- package/src/js/modules/Spreadsheet/SheetComponent.js +59 -0
- package/src/js/modules/Spreadsheet/Spreadsheet.js +309 -0
- package/src/js/modules/Tooltip/Tooltip.js +128 -0
- package/src/js/modules/Validate/Validate.js +303 -0
- package/src/js/modules/Validate/defaults/validators.js +150 -0
- package/src/scss/tabulator.scss +1693 -0
- package/src/scss/themes/bootstrap/tabulator_bootstrap3.scss +302 -0
- package/src/scss/themes/bootstrap/tabulator_bootstrap4.scss +589 -0
- package/src/scss/themes/bootstrap/tabulator_bootstrap5.scss +979 -0
- package/src/scss/themes/bootstrap/variables3.scss +872 -0
- package/src/scss/themes/bootstrap/variables4.scss +1059 -0
- package/src/scss/themes/bootstrap/variables5.scss +1967 -0
- package/src/scss/themes/bulma/tabulator_bulma.scss +316 -0
- package/src/scss/themes/bulma/variables.scss +198 -0
- package/src/scss/themes/materialize/tabulator_materialize.scss +318 -0
- package/src/scss/themes/materialize/variables.scss +71 -0
- package/src/scss/themes/semanticui/tabulator_semanticui.scss +623 -0
- package/src/scss/themes/semanticui/variables.scss +843 -0
- package/src/scss/themes/semanticui/variables_table.scss +248 -0
- package/src/scss/themes/tabulator_midnight.scss +235 -0
- package/src/scss/themes/tabulator_modern.scss +308 -0
- package/src/scss/themes/tabulator_simple.scss +143 -0
- package/src/scss/themes/tabulator_site.scss +267 -0
- package/src/scss/themes/tabulator_site_dark.scss +496 -0
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
|
|
3
|
+
//equal to
|
|
4
|
+
"=":function(filterVal, rowVal, rowData, filterParams){
|
|
5
|
+
return rowVal == filterVal ? true : false;
|
|
6
|
+
},
|
|
7
|
+
|
|
8
|
+
//less than
|
|
9
|
+
"<":function(filterVal, rowVal, rowData, filterParams){
|
|
10
|
+
return rowVal < filterVal ? true : false;
|
|
11
|
+
},
|
|
12
|
+
|
|
13
|
+
//less than or equal to
|
|
14
|
+
"<=":function(filterVal, rowVal, rowData, filterParams){
|
|
15
|
+
return rowVal <= filterVal ? true : false;
|
|
16
|
+
},
|
|
17
|
+
|
|
18
|
+
//greater than
|
|
19
|
+
">":function(filterVal, rowVal, rowData, filterParams){
|
|
20
|
+
return rowVal > filterVal ? true : false;
|
|
21
|
+
},
|
|
22
|
+
|
|
23
|
+
//greater than or equal to
|
|
24
|
+
">=":function(filterVal, rowVal, rowData, filterParams){
|
|
25
|
+
return rowVal >= filterVal ? true : false;
|
|
26
|
+
},
|
|
27
|
+
|
|
28
|
+
//not equal to
|
|
29
|
+
"!=":function(filterVal, rowVal, rowData, filterParams){
|
|
30
|
+
return rowVal != filterVal ? true : false;
|
|
31
|
+
},
|
|
32
|
+
|
|
33
|
+
"regex":function(filterVal, rowVal, rowData, filterParams){
|
|
34
|
+
|
|
35
|
+
if(typeof filterVal == "string"){
|
|
36
|
+
filterVal = new RegExp(filterVal);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return filterVal.test(rowVal);
|
|
40
|
+
},
|
|
41
|
+
|
|
42
|
+
//contains the string
|
|
43
|
+
"like":function(filterVal, rowVal, rowData, filterParams){
|
|
44
|
+
if(filterVal === null || typeof filterVal === "undefined"){
|
|
45
|
+
return rowVal === filterVal ? true : false;
|
|
46
|
+
}else{
|
|
47
|
+
if(typeof rowVal !== 'undefined' && rowVal !== null){
|
|
48
|
+
return String(rowVal).toLowerCase().indexOf(filterVal.toLowerCase()) > -1;
|
|
49
|
+
}
|
|
50
|
+
else{
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
|
|
56
|
+
//contains the keywords
|
|
57
|
+
"keywords":function(filterVal, rowVal, rowData, filterParams){
|
|
58
|
+
var keywords = filterVal.toLowerCase().split(typeof filterParams.separator === "undefined" ? " " : filterParams.separator),
|
|
59
|
+
value = String(rowVal === null || typeof rowVal === "undefined" ? "" : rowVal).toLowerCase(),
|
|
60
|
+
matches = [];
|
|
61
|
+
|
|
62
|
+
keywords.forEach((keyword) =>{
|
|
63
|
+
if(value.includes(keyword)){
|
|
64
|
+
matches.push(true);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
return filterParams.matchAll ? matches.length === keywords.length : !!matches.length;
|
|
69
|
+
},
|
|
70
|
+
|
|
71
|
+
//starts with the string
|
|
72
|
+
"starts":function(filterVal, rowVal, rowData, filterParams){
|
|
73
|
+
if(filterVal === null || typeof filterVal === "undefined"){
|
|
74
|
+
return rowVal === filterVal ? true : false;
|
|
75
|
+
}else{
|
|
76
|
+
if(typeof rowVal !== 'undefined' && rowVal !== null){
|
|
77
|
+
return String(rowVal).toLowerCase().startsWith(filterVal.toLowerCase());
|
|
78
|
+
}
|
|
79
|
+
else{
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
|
|
85
|
+
//ends with the string
|
|
86
|
+
"ends":function(filterVal, rowVal, rowData, filterParams){
|
|
87
|
+
if(filterVal === null || typeof filterVal === "undefined"){
|
|
88
|
+
return rowVal === filterVal ? true : false;
|
|
89
|
+
}else{
|
|
90
|
+
if(typeof rowVal !== 'undefined' && rowVal !== null){
|
|
91
|
+
return String(rowVal).toLowerCase().endsWith(filterVal.toLowerCase());
|
|
92
|
+
}
|
|
93
|
+
else{
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
|
|
99
|
+
//in array
|
|
100
|
+
"in":function(filterVal, rowVal, rowData, filterParams){
|
|
101
|
+
if(Array.isArray(filterVal)){
|
|
102
|
+
return filterVal.length ? filterVal.indexOf(rowVal) > -1 : true;
|
|
103
|
+
}else{
|
|
104
|
+
console.warn("Filter Error - filter value is not an array:", filterVal);
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
|
|
109
|
+
// Smart filter
|
|
110
|
+
// Supports ., !, <, >, <=, >=, = and falls back to like filter
|
|
111
|
+
"smart": function (filterVal, rowVal, rowData, filterParams) {
|
|
112
|
+
const search = filterVal.trim();
|
|
113
|
+
|
|
114
|
+
// searching . returns all non-empty cells
|
|
115
|
+
if (search === ".") return !(rowVal === null || rowVal == "");
|
|
116
|
+
// searching ! returns all empty cells
|
|
117
|
+
if (search === "!") return rowVal === null || rowVal == "";
|
|
118
|
+
|
|
119
|
+
// number comparisons - use existing filters
|
|
120
|
+
if (search.indexOf("<=") === 0)
|
|
121
|
+
return this["<="](
|
|
122
|
+
parseFloat(search.substring(2)),
|
|
123
|
+
rowVal,
|
|
124
|
+
rowData,
|
|
125
|
+
filterParams
|
|
126
|
+
);
|
|
127
|
+
if (search.indexOf(">=") === 0)
|
|
128
|
+
return this[">="](
|
|
129
|
+
parseFloat(search.substring(2)),
|
|
130
|
+
rowVal,
|
|
131
|
+
rowData,
|
|
132
|
+
filterParams
|
|
133
|
+
);
|
|
134
|
+
if (search.indexOf("<") === 0)
|
|
135
|
+
return this["<"](
|
|
136
|
+
parseFloat(search.substring(1)),
|
|
137
|
+
rowVal,
|
|
138
|
+
rowData,
|
|
139
|
+
filterParams
|
|
140
|
+
);
|
|
141
|
+
if (search.indexOf(">") === 0)
|
|
142
|
+
return this[">"](
|
|
143
|
+
parseFloat(search.substring(1)),
|
|
144
|
+
rowVal,
|
|
145
|
+
rowData,
|
|
146
|
+
filterParams
|
|
147
|
+
);
|
|
148
|
+
if (search.indexOf("=") === 0)
|
|
149
|
+
return this["="](search.substring(1).trim(), rowVal, rowData, filterParams);
|
|
150
|
+
|
|
151
|
+
// we got a string like "ne ci"
|
|
152
|
+
// convert this to "ne AND ci" to find "New York City"
|
|
153
|
+
if (search.includes(" ")) {
|
|
154
|
+
// Split by spaces and join with AND for fuzzy search
|
|
155
|
+
const terms = search.split(/\s+/).filter((term) => term.length > 0);
|
|
156
|
+
if (terms.length > 1) {
|
|
157
|
+
const fuzzySearch = terms.join(" AND ");
|
|
158
|
+
return this["smarter"](fuzzySearch, rowVal, rowData, filterParams);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// otherwise we use the regular like filter
|
|
163
|
+
return this["like"](search, rowVal, rowData, filterParams);
|
|
164
|
+
},
|
|
165
|
+
|
|
166
|
+
// Smarter filter
|
|
167
|
+
// Just like the smart filter but you can combine multiple filters (AND/OR)
|
|
168
|
+
// Examples:
|
|
169
|
+
// - "john AND smith" - both terms must match
|
|
170
|
+
// - "john OR jane" - either term must match
|
|
171
|
+
// - ">100 AND <500" - value must be between 100 and 500
|
|
172
|
+
// - "! OR foo" - either empty or foo
|
|
173
|
+
"smarter": function (filterVal, rowVal, rowData, filterParams) {
|
|
174
|
+
const search = filterVal.trim();
|
|
175
|
+
|
|
176
|
+
// If no search value, show all rows
|
|
177
|
+
if (!search) return true;
|
|
178
|
+
|
|
179
|
+
// Split by AND/OR operators while preserving the operators
|
|
180
|
+
const parts = search.split(/\s+(AND|OR)\s+/i);
|
|
181
|
+
|
|
182
|
+
// If no operators found, use the original smart filter
|
|
183
|
+
if (parts.length === 1) {
|
|
184
|
+
return this["smart"](search, rowVal, rowData, filterParams);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// Process each part and operator
|
|
188
|
+
let result = null;
|
|
189
|
+
let currentOperator = null;
|
|
190
|
+
|
|
191
|
+
for (let i = 0; i < parts.length; i++) {
|
|
192
|
+
const part = parts[i].trim();
|
|
193
|
+
|
|
194
|
+
if (part === "AND" || part === "OR") {
|
|
195
|
+
currentOperator = part;
|
|
196
|
+
continue;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// Apply the smart filter to this part
|
|
200
|
+
const partResult = this["smart"](part, rowVal, rowData, filterParams);
|
|
201
|
+
|
|
202
|
+
// Combine results based on operator
|
|
203
|
+
if (result === null) {
|
|
204
|
+
result = partResult;
|
|
205
|
+
} else if (currentOperator === "AND") {
|
|
206
|
+
result = result && partResult;
|
|
207
|
+
} else if (currentOperator === "OR") {
|
|
208
|
+
result = result || partResult;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
return result !== null ? result : true;
|
|
213
|
+
},
|
|
214
|
+
|
|
215
|
+
};
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import Module from '../../core/Module.js';
|
|
2
|
+
|
|
3
|
+
import defaultFormatters from './defaults/formatters.js';
|
|
4
|
+
|
|
5
|
+
export default class Format extends Module{
|
|
6
|
+
|
|
7
|
+
static moduleName = "format";
|
|
8
|
+
|
|
9
|
+
//load defaults
|
|
10
|
+
static formatters = defaultFormatters;
|
|
11
|
+
|
|
12
|
+
constructor(table){
|
|
13
|
+
super(table);
|
|
14
|
+
|
|
15
|
+
this.registerColumnOption("formatter");
|
|
16
|
+
this.registerColumnOption("formatterParams");
|
|
17
|
+
|
|
18
|
+
this.registerColumnOption("formatterPrint");
|
|
19
|
+
this.registerColumnOption("formatterPrintParams");
|
|
20
|
+
this.registerColumnOption("formatterClipboard");
|
|
21
|
+
this.registerColumnOption("formatterClipboardParams");
|
|
22
|
+
this.registerColumnOption("formatterHtmlOutput");
|
|
23
|
+
this.registerColumnOption("formatterHtmlOutputParams");
|
|
24
|
+
this.registerColumnOption("titleFormatter");
|
|
25
|
+
this.registerColumnOption("titleFormatterParams");
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
initialize(){
|
|
29
|
+
this.subscribe("cell-format", this.formatValue.bind(this));
|
|
30
|
+
this.subscribe("cell-rendered", this.cellRendered.bind(this));
|
|
31
|
+
this.subscribe("column-layout", this.initializeColumn.bind(this));
|
|
32
|
+
this.subscribe("column-format", this.formatHeader.bind(this));
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
//initialize column formatter
|
|
36
|
+
initializeColumn(column){
|
|
37
|
+
column.modules.format = this.lookupTypeFormatter(column, "");
|
|
38
|
+
|
|
39
|
+
if(typeof column.definition.formatterPrint !== "undefined"){
|
|
40
|
+
column.modules.format.print = this.lookupTypeFormatter(column, "Print");
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if(typeof column.definition.formatterClipboard !== "undefined"){
|
|
44
|
+
column.modules.format.clipboard = this.lookupTypeFormatter(column, "Clipboard");
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if(typeof column.definition.formatterHtmlOutput !== "undefined"){
|
|
48
|
+
column.modules.format.htmlOutput = this.lookupTypeFormatter(column, "HtmlOutput");
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
lookupTypeFormatter(column, type){
|
|
53
|
+
var config = {params:column.definition["formatter" + type + "Params"] || {}},
|
|
54
|
+
formatter = column.definition["formatter" + type];
|
|
55
|
+
|
|
56
|
+
config.formatter = this.lookupFormatter(formatter);
|
|
57
|
+
|
|
58
|
+
return config;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
lookupFormatter(formatter){
|
|
63
|
+
var formatterFunc;
|
|
64
|
+
|
|
65
|
+
//set column formatter
|
|
66
|
+
switch(typeof formatter){
|
|
67
|
+
case "string":
|
|
68
|
+
if(Format.formatters[formatter]){
|
|
69
|
+
formatterFunc = Format.formatters[formatter];
|
|
70
|
+
}else{
|
|
71
|
+
console.warn("Formatter Error - No such formatter found: ", formatter);
|
|
72
|
+
formatterFunc = Format.formatters.plaintext;
|
|
73
|
+
}
|
|
74
|
+
break;
|
|
75
|
+
|
|
76
|
+
case "function":
|
|
77
|
+
formatterFunc = formatter;
|
|
78
|
+
break;
|
|
79
|
+
|
|
80
|
+
default:
|
|
81
|
+
formatterFunc = Format.formatters.plaintext;
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
return formatterFunc;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
cellRendered(cell){
|
|
89
|
+
if(cell.modules.format && cell.modules.format.renderedCallback && !cell.modules.format.rendered){
|
|
90
|
+
cell.modules.format.renderedCallback();
|
|
91
|
+
cell.modules.format.rendered = true;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
//return a formatted value for a column header
|
|
96
|
+
formatHeader(column, title, el){
|
|
97
|
+
var formatter, params, onRendered, mockCell;
|
|
98
|
+
|
|
99
|
+
if(column.definition.titleFormatter){
|
|
100
|
+
formatter = this.lookupFormatter(column.definition.titleFormatter);
|
|
101
|
+
|
|
102
|
+
onRendered = (callback) => {
|
|
103
|
+
column.titleFormatterRendered = callback;
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
mockCell = {
|
|
107
|
+
getValue:function(){
|
|
108
|
+
return title;
|
|
109
|
+
},
|
|
110
|
+
getElement:function(){
|
|
111
|
+
return el;
|
|
112
|
+
},
|
|
113
|
+
getType:function(){
|
|
114
|
+
return "header";
|
|
115
|
+
},
|
|
116
|
+
getColumn:function(){
|
|
117
|
+
return column.getComponent();
|
|
118
|
+
},
|
|
119
|
+
getTable:() => {
|
|
120
|
+
return this.table;
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
params = column.definition.titleFormatterParams || {};
|
|
125
|
+
|
|
126
|
+
params = typeof params === "function" ? params() : params;
|
|
127
|
+
|
|
128
|
+
return formatter.call(this, mockCell, params, onRendered);
|
|
129
|
+
}else{
|
|
130
|
+
return title;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
//return a formatted value for a cell
|
|
136
|
+
formatValue(cell){
|
|
137
|
+
var component = cell.getComponent(),
|
|
138
|
+
params = typeof cell.column.modules.format.params === "function" ? cell.column.modules.format.params(component) : cell.column.modules.format.params;
|
|
139
|
+
|
|
140
|
+
function onRendered(callback){
|
|
141
|
+
if(!cell.modules.format){
|
|
142
|
+
cell.modules.format = {};
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
cell.modules.format.renderedCallback = callback;
|
|
146
|
+
cell.modules.format.rendered = false;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
return cell.column.modules.format.formatter.call(this, component, params, onRendered);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
formatExportValue(cell, type){
|
|
153
|
+
var formatter = cell.column.modules.format[type],
|
|
154
|
+
params;
|
|
155
|
+
|
|
156
|
+
if(formatter){
|
|
157
|
+
params = typeof formatter.params === "function" ? formatter.params(cell.getComponent()) : formatter.params;
|
|
158
|
+
|
|
159
|
+
function onRendered(callback){
|
|
160
|
+
if(!cell.modules.format){
|
|
161
|
+
cell.modules.format = {};
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
cell.modules.format.renderedCallback = callback;
|
|
165
|
+
cell.modules.format.rendered = false;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
return formatter.formatter.call(this, cell.getComponent(), params, onRendered);
|
|
169
|
+
|
|
170
|
+
}else{
|
|
171
|
+
return this.formatValue(cell);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
sanitizeHTML(value){
|
|
176
|
+
if(value){
|
|
177
|
+
var entityMap = {
|
|
178
|
+
'&': '&',
|
|
179
|
+
'<': '<',
|
|
180
|
+
'>': '>',
|
|
181
|
+
'"': '"',
|
|
182
|
+
"'": ''',
|
|
183
|
+
'/': '/',
|
|
184
|
+
'`': '`',
|
|
185
|
+
'=': '='
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
return String(value).replace(/[&<>"'`=/]/g, function (s) {
|
|
189
|
+
return entityMap[s];
|
|
190
|
+
});
|
|
191
|
+
}else{
|
|
192
|
+
return value;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
emptyToSpace(value){
|
|
197
|
+
return value === null || typeof value === "undefined" || value === "" ? " " : value;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export default function(cell, params, onRendered){
|
|
2
|
+
var lookup, formatterFunc, formatterParams;
|
|
3
|
+
|
|
4
|
+
function defaultLookup(cell){
|
|
5
|
+
var value = cell.getValue(),
|
|
6
|
+
formatter = "plaintext";
|
|
7
|
+
|
|
8
|
+
switch(typeof value){
|
|
9
|
+
case "boolean":
|
|
10
|
+
formatter = "tickCross";
|
|
11
|
+
break;
|
|
12
|
+
|
|
13
|
+
case "string":
|
|
14
|
+
if(value.includes("\n")){
|
|
15
|
+
formatter = "textarea";
|
|
16
|
+
}
|
|
17
|
+
break;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
return formatter;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
lookup = params.formatterLookup ? params.formatterLookup(cell) : defaultLookup(cell);
|
|
24
|
+
|
|
25
|
+
if(params.paramsLookup){
|
|
26
|
+
formatterParams = typeof params.paramsLookup === "function" ? params.paramsLookup(lookup, cell) : params.paramsLookup[lookup];
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
formatterFunc = this.table.modules.format.lookupFormatter(lookup);
|
|
30
|
+
|
|
31
|
+
return formatterFunc.call(this, cell, formatterParams || {}, onRendered);
|
|
32
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import Helpers from '../../../../core/tools/Helpers.js';
|
|
2
|
+
|
|
3
|
+
export default function(cell, formatterParams, onRendered){
|
|
4
|
+
var delimiter = formatterParams.delimiter || ",",
|
|
5
|
+
value = cell.getValue(),
|
|
6
|
+
table = this.table,
|
|
7
|
+
valueMap;
|
|
8
|
+
|
|
9
|
+
if(formatterParams.valueMap){
|
|
10
|
+
if(typeof formatterParams.valueMap === "string"){
|
|
11
|
+
valueMap = function(value){
|
|
12
|
+
return value.map((item) => {
|
|
13
|
+
return Helpers.retrieveNestedData(table.options.nestedFieldSeparator, formatterParams.valueMap, item);
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
}else{
|
|
17
|
+
valueMap = formatterParams.valueMap;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
if(Array.isArray(value)){
|
|
22
|
+
if(valueMap){
|
|
23
|
+
value = valueMap(value);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return value.join(delimiter);
|
|
27
|
+
}else{
|
|
28
|
+
return value;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export default function(cell, formatterParams, onRendered){
|
|
2
|
+
return '<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#CE1515" d="M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272 c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0 l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269 c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73 L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z"/></svg>';
|
|
3
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export default function(cell, formatterParams, onRendered){
|
|
2
|
+
return '<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#2DC214" clip-rule="evenodd" d="M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34 c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351 l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07 l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z" fill-rule="evenodd"/></svg>';
|
|
3
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export default function(cell, formatterParams, onRendered){
|
|
2
|
+
var DT = this.table.dependencyRegistry.lookup(["luxon", "DateTime"], "DateTime");
|
|
3
|
+
var inputFormat = formatterParams.inputFormat || "yyyy-MM-dd HH:mm:ss";
|
|
4
|
+
var outputFormat = formatterParams.outputFormat || "dd/MM/yyyy HH:mm:ss";
|
|
5
|
+
var invalid = typeof formatterParams.invalidPlaceholder !== "undefined" ? formatterParams.invalidPlaceholder : "";
|
|
6
|
+
var value = cell.getValue();
|
|
7
|
+
|
|
8
|
+
if(typeof DT != "undefined"){
|
|
9
|
+
var newDatetime;
|
|
10
|
+
|
|
11
|
+
if(DT.isDateTime(value)){
|
|
12
|
+
newDatetime = value;
|
|
13
|
+
}else if(inputFormat === "x"){
|
|
14
|
+
newDatetime = DT.fromMillis(value);
|
|
15
|
+
}else if(inputFormat === "iso"){
|
|
16
|
+
newDatetime = DT.fromISO(String(value));
|
|
17
|
+
}else{
|
|
18
|
+
newDatetime = DT.fromFormat(String(value), inputFormat);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
if(newDatetime.isValid){
|
|
22
|
+
if(formatterParams.timezone){
|
|
23
|
+
newDatetime = newDatetime.setZone(formatterParams.timezone);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return newDatetime.toFormat(outputFormat);
|
|
27
|
+
}else{
|
|
28
|
+
if(invalid === true || !value){
|
|
29
|
+
return value;
|
|
30
|
+
}else if(typeof invalid === "function"){
|
|
31
|
+
return invalid(value);
|
|
32
|
+
}else{
|
|
33
|
+
return invalid;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}else{
|
|
37
|
+
console.error("Format Error - 'datetime' formatter is dependant on luxon.js");
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export default function (cell, formatterParams, onRendered) {
|
|
2
|
+
var DT = this.table.dependencyRegistry.lookup(["luxon", "DateTime"], "DateTime");
|
|
3
|
+
var inputFormat = formatterParams.inputFormat || "yyyy-MM-dd HH:mm:ss";
|
|
4
|
+
var invalid = typeof formatterParams.invalidPlaceholder !== "undefined" ? formatterParams.invalidPlaceholder : "";
|
|
5
|
+
var suffix = typeof formatterParams.suffix !== "undefined" ? formatterParams.suffix : false;
|
|
6
|
+
var unit = typeof formatterParams.unit !== "undefined" ? formatterParams.unit : "days";
|
|
7
|
+
var humanize = typeof formatterParams.humanize !== "undefined" ? formatterParams.humanize : false;
|
|
8
|
+
var date = typeof formatterParams.date !== "undefined" ? formatterParams.date : DT.now();
|
|
9
|
+
var value = cell.getValue();
|
|
10
|
+
|
|
11
|
+
if(typeof DT != "undefined"){
|
|
12
|
+
var newDatetime;
|
|
13
|
+
|
|
14
|
+
if(DT.isDateTime(value)){
|
|
15
|
+
newDatetime = value;
|
|
16
|
+
}else if(inputFormat === "x"){
|
|
17
|
+
newDatetime = DT.fromMillis(value);
|
|
18
|
+
}else if(inputFormat === "iso"){
|
|
19
|
+
newDatetime = DT.fromISO(String(value));
|
|
20
|
+
}else{
|
|
21
|
+
newDatetime = DT.fromFormat(String(value), inputFormat);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (newDatetime.isValid){
|
|
25
|
+
if(humanize){
|
|
26
|
+
return newDatetime.diff(date, unit).toHuman() + (suffix ? " " + suffix : "");
|
|
27
|
+
}else{
|
|
28
|
+
return parseInt(newDatetime.diff(date, unit)[unit]) + (suffix ? " " + suffix : "");
|
|
29
|
+
}
|
|
30
|
+
} else {
|
|
31
|
+
|
|
32
|
+
if (invalid === true) {
|
|
33
|
+
return value;
|
|
34
|
+
} else if (typeof invalid === "function") {
|
|
35
|
+
return invalid(value);
|
|
36
|
+
} else {
|
|
37
|
+
return invalid;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}else{
|
|
41
|
+
console.error("Format Error - 'datetimediff' formatter is dependant on luxon.js");
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export default function(cell, formatterParams, onRendered){
|
|
2
|
+
cell.getElement().classList.add("tabulator-row-handle");
|
|
3
|
+
return "<div class='tabulator-row-handle-box'><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div></div>";
|
|
4
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export default function(cell, formatterParams, onRendered){
|
|
2
|
+
var el = document.createElement("img"),
|
|
3
|
+
src = cell.getValue();
|
|
4
|
+
|
|
5
|
+
if(formatterParams.urlPrefix){
|
|
6
|
+
src = formatterParams.urlPrefix + cell.getValue();
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
if(formatterParams.urlSuffix){
|
|
10
|
+
src = src + formatterParams.urlSuffix;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
el.setAttribute("src", src);
|
|
14
|
+
|
|
15
|
+
switch(typeof formatterParams.height){
|
|
16
|
+
case "number":
|
|
17
|
+
el.style.height = formatterParams.height + "px";
|
|
18
|
+
break;
|
|
19
|
+
|
|
20
|
+
case "string":
|
|
21
|
+
el.style.height = formatterParams.height;
|
|
22
|
+
break;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
switch(typeof formatterParams.width){
|
|
26
|
+
case "number":
|
|
27
|
+
el.style.width = formatterParams.width + "px";
|
|
28
|
+
break;
|
|
29
|
+
|
|
30
|
+
case "string":
|
|
31
|
+
el.style.width = formatterParams.width;
|
|
32
|
+
break;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
el.addEventListener("load", function(){
|
|
36
|
+
cell.getRow().normalizeHeight();
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
return el;
|
|
40
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export default function(cell, formatterParams, onRendered){
|
|
2
|
+
var indent = formatterParams.indent || "\t",
|
|
3
|
+
multiline = typeof formatterParams.multiline === "undefined" ? true : formatterParams.multiline,
|
|
4
|
+
replacer = formatterParams.replacer || null,
|
|
5
|
+
value = cell.getValue();
|
|
6
|
+
|
|
7
|
+
if(multiline){
|
|
8
|
+
cell.getElement().style.whiteSpace = "pre-wrap";
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
return JSON.stringify(value, replacer, indent);
|
|
12
|
+
}
|