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,33 @@
1
+ export default function(pageSize, currentRow, currentPage, totalRows, totalPages){
2
+
3
+ var el = document.createElement("span"),
4
+ showingEl = document.createElement("span"),
5
+ valueEl = document.createElement("span"),
6
+ ofEl = document.createElement("span"),
7
+ totalEl = document.createElement("span"),
8
+ rowsEl = document.createElement("span");
9
+
10
+ this.table.modules.localize.langBind("pagination|counter|showing", (value) => {
11
+ showingEl.innerHTML = value;
12
+ });
13
+
14
+ valueEl.innerHTML = " " + currentPage + " ";
15
+
16
+ this.table.modules.localize.langBind("pagination|counter|of", (value) => {
17
+ ofEl.innerHTML = value;
18
+ });
19
+
20
+ totalEl.innerHTML = " " + totalPages + " ";
21
+
22
+ this.table.modules.localize.langBind("pagination|counter|pages", (value) => {
23
+ rowsEl.innerHTML = value;
24
+ });
25
+
26
+ el.appendChild(showingEl);
27
+ el.appendChild(valueEl);
28
+ el.appendChild(ofEl);
29
+ el.appendChild(totalEl);
30
+ el.appendChild(rowsEl);
31
+
32
+ return el;
33
+ }
@@ -0,0 +1,40 @@
1
+ export default function(pageSize, currentRow, currentPage, totalRows, totalPages){
2
+ var el = document.createElement("span"),
3
+ showingEl = document.createElement("span"),
4
+ valueEl = document.createElement("span"),
5
+ ofEl = document.createElement("span"),
6
+ totalEl = document.createElement("span"),
7
+ rowsEl = document.createElement("span");
8
+
9
+ this.table.modules.localize.langBind("pagination|counter|showing", (value) => {
10
+ showingEl.innerHTML = value;
11
+ });
12
+
13
+ this.table.modules.localize.langBind("pagination|counter|of", (value) => {
14
+ ofEl.innerHTML = value;
15
+ });
16
+
17
+ this.table.modules.localize.langBind("pagination|counter|rows", (value) => {
18
+ rowsEl.innerHTML = value;
19
+ });
20
+
21
+ if(totalRows){
22
+ valueEl.innerHTML = " " + currentRow + "-" + Math.min((currentRow + pageSize - 1), totalRows) + " ";
23
+
24
+ totalEl.innerHTML = " " + totalRows + " ";
25
+
26
+ el.appendChild(showingEl);
27
+ el.appendChild(valueEl);
28
+ el.appendChild(ofEl);
29
+ el.appendChild(totalEl);
30
+ el.appendChild(rowsEl);
31
+ }else{
32
+ valueEl.innerHTML = " 0 ";
33
+
34
+ el.appendChild(showingEl);
35
+ el.appendChild(valueEl);
36
+ el.appendChild(rowsEl);
37
+ }
38
+
39
+ return el;
40
+ }
@@ -0,0 +1,8 @@
1
+ import rows from './pageCounters/rows.js';
2
+ import pages from './pageCounters/pages.js';
3
+
4
+
5
+ export default {
6
+ rows:rows,
7
+ pages:pages,
8
+ };
@@ -0,0 +1,473 @@
1
+ import Module from '../../core/Module.js';
2
+
3
+ import defaultReaders from './defaults/readers.js';
4
+ import defaultWriters from './defaults/writers.js';
5
+
6
+ export default class Persistence extends Module{
7
+
8
+ static moduleName = "persistence";
9
+
10
+ static moduleInitOrder = -10;
11
+
12
+ //load defaults
13
+ static readers = defaultReaders;
14
+ static writers = defaultWriters;
15
+
16
+ constructor(table){
17
+ super(table);
18
+
19
+ this.mode = "";
20
+ this.id = "";
21
+ // this.persistProps = ["field", "width", "visible"];
22
+ this.defWatcherBlock = false;
23
+ this.config = {};
24
+ this.readFunc = false;
25
+ this.writeFunc = false;
26
+
27
+ this.registerTableOption("persistence", false);
28
+ this.registerTableOption("persistenceID", ""); //key for persistent storage
29
+ this.registerTableOption("persistenceMode", true); //mode for storing persistence information
30
+ this.registerTableOption("persistenceReaderFunc", false); //function for handling persistence data reading
31
+ this.registerTableOption("persistenceWriterFunc", false); //function for handling persistence data writing
32
+ }
33
+
34
+ // Test for whether localStorage is available for use.
35
+ localStorageTest() {
36
+ var testKey = "_tabulator_test";
37
+
38
+ try {
39
+ window.localStorage.setItem( testKey, testKey);
40
+ window.localStorage.removeItem( testKey );
41
+ return true;
42
+ } catch(e) {
43
+ return false;
44
+ }
45
+ }
46
+
47
+ //setup parameters
48
+ initialize(){
49
+ if(this.table.options.persistence){
50
+ //determine persistent layout storage type
51
+ var mode = this.table.options.persistenceMode,
52
+ id = this.table.options.persistenceID,
53
+ retrievedData;
54
+
55
+ this.mode = mode !== true ? mode : (this.localStorageTest() ? "local" : "cookie");
56
+
57
+ if(this.table.options.persistenceReaderFunc){
58
+ if(typeof this.table.options.persistenceReaderFunc === "function"){
59
+ this.readFunc = this.table.options.persistenceReaderFunc;
60
+ }else{
61
+ if(Persistence.readers[this.table.options.persistenceReaderFunc]){
62
+ this.readFunc = Persistence.readers[this.table.options.persistenceReaderFunc];
63
+ }else{
64
+ console.warn("Persistence Read Error - invalid reader set", this.table.options.persistenceReaderFunc);
65
+ }
66
+ }
67
+ }else{
68
+ if(Persistence.readers[this.mode]){
69
+ this.readFunc = Persistence.readers[this.mode];
70
+ }else{
71
+ console.warn("Persistence Read Error - invalid reader set", this.mode);
72
+ }
73
+ }
74
+
75
+ if(this.table.options.persistenceWriterFunc){
76
+ if(typeof this.table.options.persistenceWriterFunc === "function"){
77
+ this.writeFunc = this.table.options.persistenceWriterFunc;
78
+ }else{
79
+ if(Persistence.writers[this.table.options.persistenceWriterFunc]){
80
+ this.writeFunc = Persistence.writers[this.table.options.persistenceWriterFunc];
81
+ }else{
82
+ console.warn("Persistence Write Error - invalid reader set", this.table.options.persistenceWriterFunc);
83
+ }
84
+ }
85
+ }else{
86
+ if(Persistence.writers[this.mode]){
87
+ this.writeFunc = Persistence.writers[this.mode];
88
+ }else{
89
+ console.warn("Persistence Write Error - invalid writer set", this.mode);
90
+ }
91
+ }
92
+
93
+ //set storage tag
94
+ this.id = "tabulator-" + (id || (this.table.element.getAttribute("id") || ""));
95
+
96
+ this.config = {
97
+ sort:this.table.options.persistence === true || this.table.options.persistence.sort,
98
+ filter:this.table.options.persistence === true || this.table.options.persistence.filter,
99
+ headerFilter:this.table.options.persistence === true || this.table.options.persistence.headerFilter,
100
+ group:this.table.options.persistence === true || this.table.options.persistence.group,
101
+ page:this.table.options.persistence === true || this.table.options.persistence.page,
102
+ columns:this.table.options.persistence === true ? ["title", "width", "visible"] : this.table.options.persistence.columns,
103
+ };
104
+
105
+ //load pagination data if needed
106
+ if(this.config.page){
107
+ retrievedData = this.retrieveData("page");
108
+
109
+ if(retrievedData){
110
+ if(typeof retrievedData.paginationSize !== "undefined" && (this.config.page === true || this.config.page.size)){
111
+ this.table.options.paginationSize = retrievedData.paginationSize;
112
+ }
113
+
114
+ if(typeof retrievedData.paginationInitialPage !== "undefined" && (this.config.page === true || this.config.page.page)){
115
+ this.table.options.paginationInitialPage = retrievedData.paginationInitialPage;
116
+ }
117
+ }
118
+ }
119
+
120
+ //load group data if needed
121
+ if(this.config.group){
122
+ retrievedData = this.retrieveData("group");
123
+
124
+ if(retrievedData){
125
+ if(typeof retrievedData.groupBy !== "undefined" && (this.config.group === true || this.config.group.groupBy)){
126
+ this.table.options.groupBy = retrievedData.groupBy;
127
+ }
128
+ if(typeof retrievedData.groupStartOpen !== "undefined" && (this.config.group === true || this.config.group.groupStartOpen)){
129
+ this.table.options.groupStartOpen = retrievedData.groupStartOpen;
130
+ }
131
+ if(typeof retrievedData.groupHeader !== "undefined" && (this.config.group === true || this.config.group.groupHeader)){
132
+ this.table.options.groupHeader = retrievedData.groupHeader;
133
+ }
134
+ }
135
+ }
136
+
137
+ if(this.config.columns){
138
+ this.table.options.columns = this.load("columns", this.table.options.columns);
139
+ this.subscribe("column-init", this.initializeColumn.bind(this));
140
+ this.subscribe("column-show", this.save.bind(this, "columns"));
141
+ this.subscribe("column-hide", this.save.bind(this, "columns"));
142
+ this.subscribe("column-moved", this.save.bind(this, "columns"));
143
+ }
144
+
145
+ this.subscribe("table-built", this.tableBuilt.bind(this), 0);
146
+
147
+ this.subscribe("table-redraw", this.tableRedraw.bind(this));
148
+
149
+ this.subscribe("filter-changed", this.eventSave.bind(this, "filter"));
150
+ this.subscribe("filter-changed", this.eventSave.bind(this, "headerFilter"));
151
+ this.subscribe("sort-changed", this.eventSave.bind(this, "sort"));
152
+ this.subscribe("group-changed", this.eventSave.bind(this, "group"));
153
+ this.subscribe("page-changed", this.eventSave.bind(this, "page"));
154
+ this.subscribe("column-resized", this.eventSave.bind(this, "columns"));
155
+ this.subscribe("column-width", this.eventSave.bind(this, "columns"));
156
+ this.subscribe("layout-refreshed", this.eventSave.bind(this, "columns"));
157
+ }
158
+
159
+ this.registerTableFunction("getColumnLayout", this.getColumnLayout.bind(this));
160
+ this.registerTableFunction("setColumnLayout", this.setColumnLayout.bind(this));
161
+ }
162
+
163
+ eventSave(type){
164
+ if(this.config[type]){
165
+ this.save(type);
166
+ }
167
+ }
168
+
169
+ tableBuilt(){
170
+ var sorters, filters, headerFilters;
171
+
172
+ if(this.config.sort){
173
+ sorters = this.load("sort");
174
+
175
+ if(!sorters === false){
176
+ this.table.options.initialSort = sorters;
177
+ }
178
+ }
179
+
180
+ if(this.config.filter){
181
+ filters = this.load("filter");
182
+
183
+ if(!filters === false){
184
+ this.table.options.initialFilter = filters;
185
+ }
186
+ }
187
+ if(this.config.headerFilter){
188
+ headerFilters = this.load("headerFilter");
189
+
190
+ if(!headerFilters === false){
191
+ this.table.options.initialHeaderFilter = headerFilters;
192
+ }
193
+ }
194
+
195
+ }
196
+
197
+ tableRedraw(force){
198
+ if(force && this.config.columns){
199
+ this.save("columns");
200
+ }
201
+ }
202
+
203
+ ///////////////////////////////////
204
+ ///////// Table Functions /////////
205
+ ///////////////////////////////////
206
+
207
+ getColumnLayout(){
208
+ return this.parseColumns(this.table.columnManager.getColumns());
209
+ }
210
+
211
+ setColumnLayout(layout){
212
+ this.table.columnManager.setColumns(this.mergeDefinition(this.table.options.columns, layout, true));
213
+ return true;
214
+ }
215
+
216
+ ///////////////////////////////////
217
+ ///////// Internal Logic //////////
218
+ ///////////////////////////////////
219
+
220
+ initializeColumn(column){
221
+ var def, keys;
222
+
223
+ if(this.config.columns){
224
+ this.defWatcherBlock = true;
225
+
226
+ def = column.getDefinition();
227
+
228
+ keys = this.config.columns === true ? Object.keys(def) : this.config.columns;
229
+
230
+ keys.forEach((key)=>{
231
+ var props = Object.getOwnPropertyDescriptor(def, key);
232
+ var value = def[key];
233
+
234
+ if(props){
235
+ Object.defineProperty(def, key, {
236
+ set: (newValue) => {
237
+ value = newValue;
238
+
239
+ if(!this.defWatcherBlock){
240
+ this.save("columns");
241
+ }
242
+
243
+ if(props.set){
244
+ props.set(newValue);
245
+ }
246
+ },
247
+ get:() => {
248
+ if(props.get){
249
+ props.get();
250
+ }
251
+ return value;
252
+ }
253
+ });
254
+ }
255
+ });
256
+
257
+ this.defWatcherBlock = false;
258
+ }
259
+ }
260
+
261
+ //load saved definitions
262
+ load(type, current){
263
+ var data = this.retrieveData(type);
264
+
265
+ if(current){
266
+ data = data ? this.mergeDefinition(current, data) : current;
267
+ }
268
+
269
+ return data;
270
+ }
271
+
272
+ //retrieve data from memory
273
+ retrieveData(type){
274
+ return this.readFunc ? this.readFunc(this.id, type) : false;
275
+ }
276
+
277
+ //merge old and new column definitions
278
+ mergeDefinition(oldCols, newCols, mergeAllNew){
279
+ var output = [];
280
+
281
+ newCols = newCols || [];
282
+
283
+ newCols.forEach((column, to) => {
284
+ var from = this._findColumn(oldCols, column),
285
+ keys;
286
+
287
+ if(from){
288
+ if(mergeAllNew){
289
+ keys = Object.keys(column);
290
+ }else if(this.config.columns === true || this.config.columns == undefined){
291
+ keys = Object.keys(from);
292
+ keys.push("width");
293
+ }else{
294
+ keys = this.config.columns;
295
+ }
296
+
297
+ keys.forEach((key)=>{
298
+ if(key !== "columns" && typeof column[key] !== "undefined"){
299
+ from[key] = column[key];
300
+ }
301
+ });
302
+
303
+ if(from.columns){
304
+ from.columns = this.mergeDefinition(from.columns, column.columns);
305
+ }
306
+
307
+ output.push(from);
308
+ }
309
+ });
310
+
311
+ oldCols.forEach((column, i) => {
312
+ var from = this._findColumn(newCols, column);
313
+
314
+ if (!from) {
315
+ if(output.length>i){
316
+ output.splice(i, 0, column);
317
+ }else{
318
+ output.push(column);
319
+ }
320
+ }
321
+ });
322
+
323
+ return output;
324
+ }
325
+
326
+ //find matching columns
327
+ _findColumn(columns, subject){
328
+ var type = subject.columns ? "group" : (subject.field ? "field" : "object");
329
+
330
+ return columns.find(function(col){
331
+ switch(type){
332
+ case "group":
333
+ return col.title === subject.title && col.columns.length === subject.columns.length;
334
+
335
+ case "field":
336
+ return col.field === subject.field;
337
+
338
+ case "object":
339
+ return col === subject;
340
+ }
341
+ });
342
+ }
343
+
344
+ //save data
345
+ save(type){
346
+ var data = {};
347
+
348
+ switch(type){
349
+ case "columns":
350
+ data = this.parseColumns(this.table.columnManager.getColumns());
351
+ break;
352
+
353
+ case "filter":
354
+ data = this.table.modules.filter.getFilters();
355
+ break;
356
+
357
+ case "headerFilter":
358
+ data = this.table.modules.filter.getHeaderFilters();
359
+ break;
360
+
361
+ case "sort":
362
+ data = this.validateSorters(this.table.modules.sort.getSort());
363
+ break;
364
+
365
+ case "group":
366
+ data = this.getGroupConfig();
367
+ break;
368
+
369
+ case "page":
370
+ data = this.getPageConfig();
371
+ break;
372
+ }
373
+
374
+ if(this.writeFunc){
375
+ this.writeFunc(this.id, type, data);
376
+ }
377
+
378
+ }
379
+
380
+ //ensure sorters contain no function data
381
+ validateSorters(data){
382
+ data.forEach(function(item){
383
+ item.column = item.field;
384
+ delete item.field;
385
+ });
386
+
387
+ return data;
388
+ }
389
+
390
+ getGroupConfig(){
391
+ var data = {};
392
+
393
+ if(this.config.group){
394
+ if(this.config.group === true || this.config.group.groupBy){
395
+ data.groupBy = this.table.options.groupBy;
396
+ }
397
+
398
+ if(this.config.group === true || this.config.group.groupStartOpen){
399
+ data.groupStartOpen = this.table.options.groupStartOpen;
400
+ }
401
+
402
+ if(this.config.group === true || this.config.group.groupHeader){
403
+ data.groupHeader = this.table.options.groupHeader;
404
+ }
405
+ }
406
+
407
+ return data;
408
+ }
409
+
410
+ getPageConfig(){
411
+ var data = {};
412
+
413
+ if(this.config.page){
414
+ if(this.config.page === true || this.config.page.size){
415
+ data.paginationSize = this.table.modules.page.getPageSize();
416
+ }
417
+
418
+ if(this.config.page === true || this.config.page.page){
419
+ data.paginationInitialPage = this.table.modules.page.getPage();
420
+ }
421
+ }
422
+
423
+ return data;
424
+ }
425
+
426
+
427
+ //parse columns for data to store
428
+ parseColumns(columns){
429
+ var definitions = [],
430
+ excludedKeys = ["headerContextMenu", "headerMenu", "contextMenu", "clickMenu"];
431
+
432
+ columns.forEach((column) => {
433
+ var defStore = {},
434
+ colDef = column.getDefinition(),
435
+ keys;
436
+
437
+ if(column.isGroup){
438
+ defStore.title = colDef.title;
439
+ defStore.columns = this.parseColumns(column.getColumns());
440
+ }else{
441
+ defStore.field = column.getField();
442
+
443
+ if(this.config.columns === true || this.config.columns == undefined){
444
+ keys = Object.keys(colDef);
445
+ keys.push("width");
446
+ keys.push("visible");
447
+ }else{
448
+ keys = this.config.columns;
449
+ }
450
+
451
+ keys.forEach((key)=>{
452
+ switch(key){
453
+ case "width":
454
+ defStore.width = column.getWidth();
455
+ break;
456
+ case "visible":
457
+ defStore.visible = column.visible;
458
+ break;
459
+
460
+ default:
461
+ if(typeof colDef[key] !== "function" && excludedKeys.indexOf(key) === -1){
462
+ defStore[key] = colDef[key];
463
+ }
464
+ }
465
+ });
466
+ }
467
+
468
+ definitions.push(defStore);
469
+ });
470
+
471
+ return definitions;
472
+ }
473
+ }
@@ -0,0 +1,29 @@
1
+ // read persistance information from storage
2
+ export default {
3
+ local:function(id, type){
4
+ var data = localStorage.getItem(id + "-" + type);
5
+
6
+ return data ? JSON.parse(data) : false;
7
+ },
8
+ cookie:function(id, type){
9
+ var cookie = document.cookie,
10
+ key = id + "-" + type,
11
+ cookiePos = cookie.indexOf(key + "="),
12
+ end, data;
13
+
14
+ //if cookie exists, decode and load column data into tabulator
15
+ if(cookiePos > -1){
16
+ cookie = cookie.slice(cookiePos);
17
+
18
+ end = cookie.indexOf(";");
19
+
20
+ if(end > -1){
21
+ cookie = cookie.slice(0, end);
22
+ }
23
+
24
+ data = cookie.replace(key + "=", "");
25
+ }
26
+
27
+ return data ? JSON.parse(data) : false;
28
+ }
29
+ };
@@ -0,0 +1,13 @@
1
+ //write persistence information to storage
2
+ export default {
3
+ local:function(id, type, data){
4
+ localStorage.setItem(id + "-" + type, JSON.stringify(data));
5
+ },
6
+ cookie:function(id, type, data){
7
+ var expireDate = new Date();
8
+
9
+ expireDate.setDate(expireDate.getDate() + 10000);
10
+
11
+ document.cookie = id + "-" + type + "=" + JSON.stringify(data) + "; expires=" + expireDate.toUTCString();
12
+ }
13
+ };