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