tabulator-tables 5.4.3 → 5.5.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.
Files changed (253) hide show
  1. package/.babelrc.json +3 -3
  2. package/.editorconfig +6 -6
  3. package/.eslintignore +3 -3
  4. package/.eslintrc.js +28 -28
  5. package/.github/ISSUE_TEMPLATE/bug_report.md +58 -58
  6. package/.github/ISSUE_TEMPLATE/documentation.md +14 -14
  7. package/.github/ISSUE_TEMPLATE/feature_request.md +24 -24
  8. package/.github/ISSUE_TEMPLATE/question.md +12 -12
  9. package/.github/workflows/bad-files-check.yml +39 -39
  10. package/.github/workflows/lint-and-test.yml +30 -30
  11. package/CODE_OF_CONDUCT.md +46 -46
  12. package/CONTRIBUTING.md +22 -22
  13. package/LICENSE +20 -20
  14. package/README.md +76 -76
  15. package/bower.json +40 -40
  16. package/build/Bundler.js +185 -185
  17. package/build/rollup.js +6 -6
  18. package/dist/css/tabulator.css +80 -53
  19. package/dist/css/tabulator.css.map +1 -1
  20. package/dist/css/tabulator.min.css +1 -1
  21. package/dist/css/tabulator.min.css.map +1 -1
  22. package/dist/css/tabulator_bootstrap3.css +89 -58
  23. package/dist/css/tabulator_bootstrap3.css.map +1 -1
  24. package/dist/css/tabulator_bootstrap3.min.css +1 -1
  25. package/dist/css/tabulator_bootstrap3.min.css.map +1 -1
  26. package/dist/css/tabulator_bootstrap4.css +106 -73
  27. package/dist/css/tabulator_bootstrap4.css.map +1 -1
  28. package/dist/css/tabulator_bootstrap4.min.css +1 -1
  29. package/dist/css/tabulator_bootstrap4.min.css.map +1 -1
  30. package/dist/css/tabulator_bootstrap5.css +110 -75
  31. package/dist/css/tabulator_bootstrap5.css.map +1 -1
  32. package/dist/css/tabulator_bootstrap5.min.css +1 -1
  33. package/dist/css/tabulator_bootstrap5.min.css.map +1 -1
  34. package/dist/css/tabulator_bulma.css +95 -62
  35. package/dist/css/tabulator_bulma.css.map +1 -1
  36. package/dist/css/tabulator_bulma.min.css +1 -1
  37. package/dist/css/tabulator_bulma.min.css.map +1 -1
  38. package/dist/css/tabulator_materialize.css +93 -63
  39. package/dist/css/tabulator_materialize.css.map +1 -1
  40. package/dist/css/tabulator_materialize.min.css +1 -1
  41. package/dist/css/tabulator_materialize.min.css.map +1 -1
  42. package/dist/css/tabulator_midnight.css +90 -59
  43. package/dist/css/tabulator_midnight.css.map +1 -1
  44. package/dist/css/tabulator_midnight.min.css +1 -1
  45. package/dist/css/tabulator_midnight.min.css.map +1 -1
  46. package/dist/css/tabulator_modern.css +96 -62
  47. package/dist/css/tabulator_modern.css.map +1 -1
  48. package/dist/css/tabulator_modern.min.css +1 -1
  49. package/dist/css/tabulator_modern.min.css.map +1 -1
  50. package/dist/css/tabulator_semanticui.css +233 -182
  51. package/dist/css/tabulator_semanticui.css.map +1 -1
  52. package/dist/css/tabulator_semanticui.min.css +1 -1
  53. package/dist/css/tabulator_semanticui.min.css.map +1 -1
  54. package/dist/css/tabulator_simple.css +80 -53
  55. package/dist/css/tabulator_simple.css.map +1 -1
  56. package/dist/css/tabulator_simple.min.css +1 -1
  57. package/dist/css/tabulator_simple.min.css.map +1 -1
  58. package/dist/css/tabulator_site.css +88 -57
  59. package/dist/css/tabulator_site.css.map +1 -1
  60. package/dist/css/tabulator_site.min.css +1 -1
  61. package/dist/css/tabulator_site.min.css.map +1 -1
  62. package/dist/js/jquery_wrapper.js +55 -55
  63. package/dist/js/tabulator.js +26054 -25713
  64. package/dist/js/tabulator.js.map +1 -1
  65. package/dist/js/tabulator.min.js +2 -2
  66. package/dist/js/tabulator.min.js.map +1 -1
  67. package/dist/js/tabulator_esm.js +26131 -25790
  68. package/dist/js/tabulator_esm.js.map +1 -1
  69. package/dist/js/tabulator_esm.min.js +2 -2
  70. package/dist/js/tabulator_esm.min.js.map +1 -1
  71. package/package.json +65 -65
  72. package/src/js/builds/esm.js +14 -14
  73. package/src/js/builds/jquery_wrapper.js +55 -55
  74. package/src/js/core/ColumnManager.js +745 -730
  75. package/src/js/core/CoreFeature.js +138 -138
  76. package/src/js/core/FooterManager.js +101 -101
  77. package/src/js/core/Module.js +141 -141
  78. package/src/js/core/RowManager.js +1128 -1101
  79. package/src/js/core/Tabulator.js +895 -892
  80. package/src/js/core/TabulatorFull.js +10 -10
  81. package/src/js/core/cell/Cell.js +295 -295
  82. package/src/js/core/cell/CellComponent.js +78 -76
  83. package/src/js/core/column/Column.js +949 -949
  84. package/src/js/core/column/ColumnComponent.js +152 -152
  85. package/src/js/core/column/defaults/options.js +17 -17
  86. package/src/js/core/defaults/options.js +65 -65
  87. package/src/js/core/modules/core.js +2 -2
  88. package/src/js/core/modules/optional.js +34 -34
  89. package/src/js/core/rendering/Renderer.js +203 -203
  90. package/src/js/core/rendering/renderers/BasicHorizontal.js +24 -19
  91. package/src/js/core/rendering/renderers/BasicVertical.js +83 -79
  92. package/src/js/core/rendering/renderers/VirtualDomHorizontal.js +582 -577
  93. package/src/js/core/rendering/renderers/VirtualDomVertical.js +634 -580
  94. package/src/js/core/row/PseudoRow.js +44 -44
  95. package/src/js/core/row/Row.js +457 -457
  96. package/src/js/core/row/RowComponent.js +93 -93
  97. package/src/js/core/tools/Alert.js +61 -61
  98. package/src/js/core/tools/ComponentFunctionBinder.js +32 -32
  99. package/src/js/core/tools/DataLoader.js +119 -119
  100. package/src/js/core/tools/DeprecationAdvisor.js +46 -46
  101. package/src/js/core/tools/ExternalEventBus.js +104 -104
  102. package/src/js/core/tools/Helpers.js +46 -46
  103. package/src/js/core/tools/InteractionMonitor.js +321 -321
  104. package/src/js/core/tools/InternalEventBus.js +161 -161
  105. package/src/js/core/tools/ModuleBinder.js +104 -104
  106. package/src/js/core/tools/OptionsList.js +44 -40
  107. package/src/js/core/tools/Popup.js +304 -304
  108. package/src/js/core/tools/TableRegistry.js +61 -61
  109. package/src/js/modules/Accessor/Accessor.js +115 -115
  110. package/src/js/modules/Ajax/Ajax.js +143 -143
  111. package/src/js/modules/Ajax/defaults/config.js +2 -2
  112. package/src/js/modules/Ajax/defaults/contentTypeFormatters.js +44 -44
  113. package/src/js/modules/Ajax/defaults/loaderPromise.js +86 -86
  114. package/src/js/modules/Ajax/defaults/urlGenerator.js +43 -43
  115. package/src/js/modules/Clipboard/Clipboard.js +279 -279
  116. package/src/js/modules/Clipboard/defaults/pasteActions.js +10 -10
  117. package/src/js/modules/Clipboard/defaults/pasteParsers.js +74 -74
  118. package/src/js/modules/ColumnCalcs/CalcComponent.js +47 -47
  119. package/src/js/modules/ColumnCalcs/ColumnCalcs.js +581 -568
  120. package/src/js/modules/ColumnCalcs/defaults/calculations.js +92 -85
  121. package/src/js/modules/Comms/Comms.js +51 -51
  122. package/src/js/modules/DataTree/DataTree.js +603 -603
  123. package/src/js/modules/Download/Download.js +148 -148
  124. package/src/js/modules/Download/defaults/downloaders/csv.js +61 -61
  125. package/src/js/modules/Download/defaults/downloaders/html.js +4 -4
  126. package/src/js/modules/Download/defaults/downloaders/json.js +33 -33
  127. package/src/js/modules/Download/defaults/downloaders/jsonLines.js +31 -31
  128. package/src/js/modules/Download/defaults/downloaders/pdf.js +111 -111
  129. package/src/js/modules/Download/defaults/downloaders/xlsx.js +102 -99
  130. package/src/js/modules/Download/defaults/downloaders.js +14 -14
  131. package/src/js/modules/Edit/Edit.js +734 -736
  132. package/src/js/modules/Edit/List.js +1048 -1033
  133. package/src/js/modules/Edit/defaults/editors/autocomplete.js +11 -11
  134. package/src/js/modules/Edit/defaults/editors/date.js +138 -110
  135. package/src/js/modules/Edit/defaults/editors/datetime.js +125 -97
  136. package/src/js/modules/Edit/defaults/editors/input.js +76 -74
  137. package/src/js/modules/Edit/defaults/editors/list.js +6 -6
  138. package/src/js/modules/Edit/defaults/editors/number.js +109 -107
  139. package/src/js/modules/Edit/defaults/editors/progress.js +126 -126
  140. package/src/js/modules/Edit/defaults/editors/range.js +80 -78
  141. package/src/js/modules/Edit/defaults/editors/select.js +9 -9
  142. package/src/js/modules/Edit/defaults/editors/star.js +145 -145
  143. package/src/js/modules/Edit/defaults/editors/textarea.js +122 -120
  144. package/src/js/modules/Edit/defaults/editors/tickCross.js +94 -96
  145. package/src/js/modules/Edit/defaults/editors/time.js +126 -98
  146. package/src/js/modules/Edit/defaults/editors.js +28 -28
  147. package/src/js/modules/Edit/inputMask.js +73 -73
  148. package/src/js/modules/Export/Export.js +626 -623
  149. package/src/js/modules/Export/ExportColumn.js +10 -10
  150. package/src/js/modules/Export/ExportRow.js +9 -9
  151. package/src/js/modules/Filter/Filter.js +903 -892
  152. package/src/js/modules/Filter/defaults/filters.js +107 -107
  153. package/src/js/modules/Format/Format.js +215 -212
  154. package/src/js/modules/Format/defaults/formatters/buttonCross.js +2 -2
  155. package/src/js/modules/Format/defaults/formatters/buttonTick.js +2 -2
  156. package/src/js/modules/Format/defaults/formatters/color.js +3 -3
  157. package/src/js/modules/Format/defaults/formatters/datetime.js +36 -36
  158. package/src/js/modules/Format/defaults/formatters/datetimediff.js +40 -40
  159. package/src/js/modules/Format/defaults/formatters/handle.js +3 -3
  160. package/src/js/modules/Format/defaults/formatters/html.js +2 -2
  161. package/src/js/modules/Format/defaults/formatters/image.js +39 -39
  162. package/src/js/modules/Format/defaults/formatters/link.js +77 -77
  163. package/src/js/modules/Format/defaults/formatters/lookup.js +9 -9
  164. package/src/js/modules/Format/defaults/formatters/money.js +43 -36
  165. package/src/js/modules/Format/defaults/formatters/plaintext.js +2 -2
  166. package/src/js/modules/Format/defaults/formatters/progress.js +132 -132
  167. package/src/js/modules/Format/defaults/formatters/responsiveCollapse.js +43 -43
  168. package/src/js/modules/Format/defaults/formatters/rowSelection.js +59 -59
  169. package/src/js/modules/Format/defaults/formatters/rownum.js +9 -9
  170. package/src/js/modules/Format/defaults/formatters/star.js +37 -37
  171. package/src/js/modules/Format/defaults/formatters/textarea.js +3 -3
  172. package/src/js/modules/Format/defaults/formatters/tickCross.js +21 -21
  173. package/src/js/modules/Format/defaults/formatters/traffic.js +46 -46
  174. package/src/js/modules/Format/defaults/formatters.js +42 -42
  175. package/src/js/modules/FrozenColumns/FrozenColumns.js +299 -299
  176. package/src/js/modules/FrozenRows/FrozenRows.js +169 -159
  177. package/src/js/modules/GroupRows/Group.js +597 -598
  178. package/src/js/modules/GroupRows/GroupComponent.js +70 -66
  179. package/src/js/modules/GroupRows/GroupRows.js +639 -639
  180. package/src/js/modules/History/History.js +171 -171
  181. package/src/js/modules/History/defaults/redoers.js +24 -24
  182. package/src/js/modules/History/defaults/undoers.js +24 -24
  183. package/src/js/modules/HtmlTableImport/HtmlTableImport.js +181 -181
  184. package/src/js/modules/Import/Import.js +193 -193
  185. package/src/js/modules/Import/defaults/importers/array.js +4 -4
  186. package/src/js/modules/Import/defaults/importers/csv.js +62 -62
  187. package/src/js/modules/Import/defaults/importers/json.js +7 -7
  188. package/src/js/modules/Import/defaults/importers.js +8 -8
  189. package/src/js/modules/Interaction/Interaction.js +337 -325
  190. package/src/js/modules/Keybindings/Keybindings.js +172 -172
  191. package/src/js/modules/Keybindings/defaults/actions.js +118 -118
  192. package/src/js/modules/Keybindings/defaults/bindings.js +12 -12
  193. package/src/js/modules/Layout/Layout.js +49 -49
  194. package/src/js/modules/Layout/defaults/modes/fitColumns.js +171 -171
  195. package/src/js/modules/Layout/defaults/modes/fitData.js +9 -9
  196. package/src/js/modules/Layout/defaults/modes/fitDataGeneral.js +9 -9
  197. package/src/js/modules/Layout/defaults/modes/fitDataStretch.js +39 -39
  198. package/src/js/modules/Layout/defaults/modes.js +11 -11
  199. package/src/js/modules/Localize/Localize.js +185 -185
  200. package/src/js/modules/Localize/defaults/langs.js +36 -36
  201. package/src/js/modules/Menu/Menu.js +302 -302
  202. package/src/js/modules/MoveColumns/MoveColumns.js +299 -299
  203. package/src/js/modules/MoveRows/MoveRows.js +635 -635
  204. package/src/js/modules/Mutator/Mutator.js +161 -161
  205. package/src/js/modules/Page/Page.js +881 -881
  206. package/src/js/modules/Page/defaults/pageCounters/pages.js +32 -32
  207. package/src/js/modules/Page/defaults/pageCounters/rows.js +39 -39
  208. package/src/js/modules/Page/defaults/pageCounters.js +7 -7
  209. package/src/js/modules/Persistence/Persistence.js +472 -458
  210. package/src/js/modules/Persistence/defaults/readers.js +29 -29
  211. package/src/js/modules/Persistence/defaults/writers.js +12 -12
  212. package/src/js/modules/Popup/Popup.js +231 -231
  213. package/src/js/modules/Print/Print.js +137 -137
  214. package/src/js/modules/ReactiveData/ReactiveData.js +408 -408
  215. package/src/js/modules/ResizeColumns/ResizeColumns.js +309 -309
  216. package/src/js/modules/ResizeRows/ResizeRows.js +111 -111
  217. package/src/js/modules/ResizeTable/ResizeTable.js +159 -159
  218. package/src/js/modules/ResponsiveLayout/ResponsiveLayout.js +348 -345
  219. package/src/js/modules/SelectRow/SelectRow.js +474 -444
  220. package/src/js/modules/Sort/Sort.js +470 -470
  221. package/src/js/modules/Sort/defaults/sorters/alphanum.js +43 -43
  222. package/src/js/modules/Sort/defaults/sorters/array.js +53 -53
  223. package/src/js/modules/Sort/defaults/sorters/boolean.js +6 -6
  224. package/src/js/modules/Sort/defaults/sorters/date.js +9 -9
  225. package/src/js/modules/Sort/defaults/sorters/datetime.js +43 -43
  226. package/src/js/modules/Sort/defaults/sorters/exists.js +6 -6
  227. package/src/js/modules/Sort/defaults/sorters/number.js +39 -39
  228. package/src/js/modules/Sort/defaults/sorters/string.js +33 -33
  229. package/src/js/modules/Sort/defaults/sorters/time.js +9 -9
  230. package/src/js/modules/Sort/defaults/sorters.js +20 -20
  231. package/src/js/modules/Tooltip/Tooltip.js +130 -130
  232. package/src/js/modules/Validate/Validate.js +305 -305
  233. package/src/js/modules/Validate/defaults/validators.js +138 -138
  234. package/src/scss/tabulator.scss +1496 -1467
  235. package/src/scss/themes/bootstrap/functions4.scss +118 -118
  236. package/src/scss/themes/bootstrap/functions5.scss +302 -302
  237. package/src/scss/themes/bootstrap/tabulator_bootstrap3.scss +288 -284
  238. package/src/scss/themes/bootstrap/tabulator_bootstrap4.scss +552 -544
  239. package/src/scss/themes/bootstrap/tabulator_bootstrap5.scss +584 -574
  240. package/src/scss/themes/bootstrap/variables3.scss +870 -870
  241. package/src/scss/themes/bootstrap/variables4.scss +930 -930
  242. package/src/scss/themes/bootstrap/variables5.scss +1641 -1641
  243. package/src/scss/themes/bulma/tabulator_bulma.scss +258 -252
  244. package/src/scss/themes/bulma/variables.scss +197 -197
  245. package/src/scss/themes/materialize/tabulator_materialize.scss +269 -265
  246. package/src/scss/themes/materialize/variables.scss +70 -70
  247. package/src/scss/themes/semanticui/tabulator_semanticui.scss +586 -561
  248. package/src/scss/themes/semanticui/variables.scss +839 -839
  249. package/src/scss/themes/semanticui/variables_table.scss +247 -247
  250. package/src/scss/themes/tabulator_midnight.scss +162 -158
  251. package/src/scss/themes/tabulator_modern.scss +239 -231
  252. package/src/scss/themes/tabulator_simple.scss +102 -102
  253. package/src/scss/themes/tabulator_site.scss +193 -189
@@ -1,173 +1,173 @@
1
- import Module from '../../core/Module.js';
2
-
3
- import defaultBindings from './defaults/bindings.js';
4
- import defaultActions from './defaults/actions.js';
5
-
6
- class Keybindings extends Module{
7
-
8
- constructor(table){
9
- super(table);
10
-
11
- this.watchKeys = null;
12
- this.pressedKeys = null;
13
- this.keyupBinding = false;
14
- this.keydownBinding = false;
15
-
16
- this.registerTableOption("keybindings", {}); //array for keybindings
17
- this.registerTableOption("tabEndNewRow", false); //create new row when tab to end of table
18
- }
19
-
20
- initialize(){
21
- var bindings = this.table.options.keybindings,
22
- mergedBindings = {};
23
-
24
- this.watchKeys = {};
25
- this.pressedKeys = [];
26
-
27
- if(bindings !== false){
28
- Object.assign(mergedBindings, Keybindings.bindings);
29
- Object.assign(mergedBindings, bindings);
30
-
31
- this.mapBindings(mergedBindings);
32
- this.bindEvents();
33
- }
34
-
35
- this.subscribe("table-destroy", this.clearBindings.bind(this));
36
- }
37
-
38
- mapBindings(bindings){
39
- for(let key in bindings){
40
- if(Keybindings.actions[key]){
41
- if(bindings[key]){
42
- if(typeof bindings[key] !== "object"){
43
- bindings[key] = [bindings[key]];
44
- }
45
-
46
- bindings[key].forEach((binding) => {
47
- var bindingList = Array.isArray(binding) ? binding : [binding];
48
-
49
- bindingList.forEach((item) => {
50
- this.mapBinding(key, item);
51
- });
52
- });
53
- }
54
- }else{
55
- console.warn("Key Binding Error - no such action:", key);
56
- }
57
- }
58
- }
59
-
60
- mapBinding(action, symbolsList){
61
- var binding = {
62
- action: Keybindings.actions[action],
63
- keys: [],
64
- ctrl: false,
65
- shift: false,
66
- meta: false,
67
- };
68
-
69
- var symbols = symbolsList.toString().toLowerCase().split(" ").join("").split("+");
70
-
71
- symbols.forEach((symbol) => {
72
- switch(symbol){
73
- case "ctrl":
74
- binding.ctrl = true;
75
- break;
76
-
77
- case "shift":
78
- binding.shift = true;
79
- break;
80
-
81
- case "meta":
82
- binding.meta = true;
83
- break;
84
-
85
- default:
86
- symbol = isNaN(symbol) ? symbol.toUpperCase().charCodeAt(0) : parseInt(symbol);
87
- binding.keys.push(symbol);
88
-
89
- if(!this.watchKeys[symbol]){
90
- this.watchKeys[symbol] = [];
91
- }
92
-
93
- this.watchKeys[symbol].push(binding);
94
- }
95
- });
96
- }
97
-
98
- bindEvents(){
99
- var self = this;
100
-
101
- this.keyupBinding = function(e){
102
- var code = e.keyCode;
103
- var bindings = self.watchKeys[code];
104
-
105
- if(bindings){
106
-
107
- self.pressedKeys.push(code);
108
-
109
- bindings.forEach(function(binding){
110
- self.checkBinding(e, binding);
111
- });
112
- }
113
- };
114
-
115
- this.keydownBinding = function(e){
116
- var code = e.keyCode;
117
- var bindings = self.watchKeys[code];
118
-
119
- if(bindings){
120
-
121
- var index = self.pressedKeys.indexOf(code);
122
-
123
- if(index > -1){
124
- self.pressedKeys.splice(index, 1);
125
- }
126
- }
127
- };
128
-
129
- this.table.element.addEventListener("keydown", this.keyupBinding);
130
-
131
- this.table.element.addEventListener("keyup", this.keydownBinding);
132
- }
133
-
134
- clearBindings(){
135
- if(this.keyupBinding){
136
- this.table.element.removeEventListener("keydown", this.keyupBinding);
137
- }
138
-
139
- if(this.keydownBinding){
140
- this.table.element.removeEventListener("keyup", this.keydownBinding);
141
- }
142
- }
143
-
144
- checkBinding(e, binding){
145
- var match = true;
146
-
147
- if(e.ctrlKey == binding.ctrl && e.shiftKey == binding.shift && e.metaKey == binding.meta){
148
- binding.keys.forEach((key) => {
149
- var index = this.pressedKeys.indexOf(key);
150
-
151
- if(index == -1){
152
- match = false;
153
- }
154
- });
155
-
156
- if(match){
157
- binding.action.call(this, e);
158
- }
159
-
160
- return true;
161
- }
162
-
163
- return false;
164
- }
165
- }
166
-
167
- Keybindings.moduleName = "keybindings";
168
-
169
- //load defaults
170
- Keybindings.bindings = defaultBindings;
171
- Keybindings.actions = defaultActions;
172
-
1
+ import Module from '../../core/Module.js';
2
+
3
+ import defaultBindings from './defaults/bindings.js';
4
+ import defaultActions from './defaults/actions.js';
5
+
6
+ class Keybindings extends Module{
7
+
8
+ constructor(table){
9
+ super(table);
10
+
11
+ this.watchKeys = null;
12
+ this.pressedKeys = null;
13
+ this.keyupBinding = false;
14
+ this.keydownBinding = false;
15
+
16
+ this.registerTableOption("keybindings", {}); //array for keybindings
17
+ this.registerTableOption("tabEndNewRow", false); //create new row when tab to end of table
18
+ }
19
+
20
+ initialize(){
21
+ var bindings = this.table.options.keybindings,
22
+ mergedBindings = {};
23
+
24
+ this.watchKeys = {};
25
+ this.pressedKeys = [];
26
+
27
+ if(bindings !== false){
28
+ Object.assign(mergedBindings, Keybindings.bindings);
29
+ Object.assign(mergedBindings, bindings);
30
+
31
+ this.mapBindings(mergedBindings);
32
+ this.bindEvents();
33
+ }
34
+
35
+ this.subscribe("table-destroy", this.clearBindings.bind(this));
36
+ }
37
+
38
+ mapBindings(bindings){
39
+ for(let key in bindings){
40
+ if(Keybindings.actions[key]){
41
+ if(bindings[key]){
42
+ if(typeof bindings[key] !== "object"){
43
+ bindings[key] = [bindings[key]];
44
+ }
45
+
46
+ bindings[key].forEach((binding) => {
47
+ var bindingList = Array.isArray(binding) ? binding : [binding];
48
+
49
+ bindingList.forEach((item) => {
50
+ this.mapBinding(key, item);
51
+ });
52
+ });
53
+ }
54
+ }else{
55
+ console.warn("Key Binding Error - no such action:", key);
56
+ }
57
+ }
58
+ }
59
+
60
+ mapBinding(action, symbolsList){
61
+ var binding = {
62
+ action: Keybindings.actions[action],
63
+ keys: [],
64
+ ctrl: false,
65
+ shift: false,
66
+ meta: false,
67
+ };
68
+
69
+ var symbols = symbolsList.toString().toLowerCase().split(" ").join("").split("+");
70
+
71
+ symbols.forEach((symbol) => {
72
+ switch(symbol){
73
+ case "ctrl":
74
+ binding.ctrl = true;
75
+ break;
76
+
77
+ case "shift":
78
+ binding.shift = true;
79
+ break;
80
+
81
+ case "meta":
82
+ binding.meta = true;
83
+ break;
84
+
85
+ default:
86
+ symbol = isNaN(symbol) ? symbol.toUpperCase().charCodeAt(0) : parseInt(symbol);
87
+ binding.keys.push(symbol);
88
+
89
+ if(!this.watchKeys[symbol]){
90
+ this.watchKeys[symbol] = [];
91
+ }
92
+
93
+ this.watchKeys[symbol].push(binding);
94
+ }
95
+ });
96
+ }
97
+
98
+ bindEvents(){
99
+ var self = this;
100
+
101
+ this.keyupBinding = function(e){
102
+ var code = e.keyCode;
103
+ var bindings = self.watchKeys[code];
104
+
105
+ if(bindings){
106
+
107
+ self.pressedKeys.push(code);
108
+
109
+ bindings.forEach(function(binding){
110
+ self.checkBinding(e, binding);
111
+ });
112
+ }
113
+ };
114
+
115
+ this.keydownBinding = function(e){
116
+ var code = e.keyCode;
117
+ var bindings = self.watchKeys[code];
118
+
119
+ if(bindings){
120
+
121
+ var index = self.pressedKeys.indexOf(code);
122
+
123
+ if(index > -1){
124
+ self.pressedKeys.splice(index, 1);
125
+ }
126
+ }
127
+ };
128
+
129
+ this.table.element.addEventListener("keydown", this.keyupBinding);
130
+
131
+ this.table.element.addEventListener("keyup", this.keydownBinding);
132
+ }
133
+
134
+ clearBindings(){
135
+ if(this.keyupBinding){
136
+ this.table.element.removeEventListener("keydown", this.keyupBinding);
137
+ }
138
+
139
+ if(this.keydownBinding){
140
+ this.table.element.removeEventListener("keyup", this.keydownBinding);
141
+ }
142
+ }
143
+
144
+ checkBinding(e, binding){
145
+ var match = true;
146
+
147
+ if(e.ctrlKey == binding.ctrl && e.shiftKey == binding.shift && e.metaKey == binding.meta){
148
+ binding.keys.forEach((key) => {
149
+ var index = this.pressedKeys.indexOf(key);
150
+
151
+ if(index == -1){
152
+ match = false;
153
+ }
154
+ });
155
+
156
+ if(match){
157
+ binding.action.call(this, e);
158
+ }
159
+
160
+ return true;
161
+ }
162
+
163
+ return false;
164
+ }
165
+ }
166
+
167
+ Keybindings.moduleName = "keybindings";
168
+
169
+ //load defaults
170
+ Keybindings.bindings = defaultBindings;
171
+ Keybindings.actions = defaultActions;
172
+
173
173
  export default Keybindings;
@@ -1,119 +1,119 @@
1
- export default {
2
- keyBlock:function(e){
3
- e.stopPropagation();
4
- e.preventDefault();
5
- },
6
- scrollPageUp:function(e){
7
- var rowManager = this.table.rowManager,
8
- newPos = rowManager.scrollTop - rowManager.element.clientHeight;
9
-
10
- e.preventDefault();
11
-
12
- if(rowManager.displayRowsCount){
13
- if(newPos >= 0){
14
- rowManager.element.scrollTop = newPos;
15
- }else{
16
- rowManager.scrollToRow(rowManager.getDisplayRows()[0]);
17
- }
18
- }
19
-
20
- this.table.element.focus();
21
- },
22
- scrollPageDown:function(e){
23
- var rowManager = this.table.rowManager,
24
- newPos = rowManager.scrollTop + rowManager.element.clientHeight,
25
- scrollMax = rowManager.element.scrollHeight;
26
-
27
- e.preventDefault();
28
-
29
- if(rowManager.displayRowsCount){
30
- if(newPos <= scrollMax){
31
- rowManager.element.scrollTop = newPos;
32
- }else{
33
- rowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);
34
- }
35
- }
36
-
37
- this.table.element.focus();
38
-
39
- },
40
- scrollToStart:function(e){
41
- var rowManager = this.table.rowManager;
42
-
43
- e.preventDefault();
44
-
45
- if(rowManager.displayRowsCount){
46
- rowManager.scrollToRow(rowManager.getDisplayRows()[0]);
47
- }
48
-
49
- this.table.element.focus();
50
- },
51
- scrollToEnd:function(e){
52
- var rowManager = this.table.rowManager;
53
-
54
- e.preventDefault();
55
-
56
- if(rowManager.displayRowsCount){
57
- rowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);
58
- }
59
-
60
- this.table.element.focus();
61
- },
62
- navPrev:function(e){
63
- this.dispatch("keybinding-nav-prev", e);
64
- },
65
-
66
- navNext:function(e){
67
- this.dispatch("keybinding-nav-next", e);
68
- },
69
-
70
- navLeft:function(e){
71
- this.dispatch("keybinding-nav-left", e);
72
- },
73
-
74
- navRight:function(e){
75
- this.dispatch("keybinding-nav-right", e);
76
- },
77
-
78
- navUp:function(e){
79
- this.dispatch("keybinding-nav-up", e);
80
- },
81
-
82
- navDown:function(e){
83
- this.dispatch("keybinding-nav-down", e);
84
- },
85
-
86
- undo:function(e){
87
- var cell = false;
88
- if(this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")){
89
-
90
- cell = this.table.modules.edit.currentCell;
91
-
92
- if(!cell){
93
- e.preventDefault();
94
- this.table.modules.history.undo();
95
- }
96
- }
97
- },
98
-
99
- redo:function(e){
100
- var cell = false;
101
- if(this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")){
102
-
103
- cell = this.table.modules.edit.currentCell;
104
-
105
- if(!cell){
106
- e.preventDefault();
107
- this.table.modules.history.redo();
108
- }
109
- }
110
- },
111
-
112
- copyToClipboard:function(e){
113
- if(!this.table.modules.edit.currentCell){
114
- if(this.table.modExists("clipboard", true)){
115
- this.table.modules.clipboard.copy(false, true);
116
- }
117
- }
118
- },
1
+ export default {
2
+ keyBlock:function(e){
3
+ e.stopPropagation();
4
+ e.preventDefault();
5
+ },
6
+ scrollPageUp:function(e){
7
+ var rowManager = this.table.rowManager,
8
+ newPos = rowManager.scrollTop - rowManager.element.clientHeight;
9
+
10
+ e.preventDefault();
11
+
12
+ if(rowManager.displayRowsCount){
13
+ if(newPos >= 0){
14
+ rowManager.element.scrollTop = newPos;
15
+ }else{
16
+ rowManager.scrollToRow(rowManager.getDisplayRows()[0]);
17
+ }
18
+ }
19
+
20
+ this.table.element.focus();
21
+ },
22
+ scrollPageDown:function(e){
23
+ var rowManager = this.table.rowManager,
24
+ newPos = rowManager.scrollTop + rowManager.element.clientHeight,
25
+ scrollMax = rowManager.element.scrollHeight;
26
+
27
+ e.preventDefault();
28
+
29
+ if(rowManager.displayRowsCount){
30
+ if(newPos <= scrollMax){
31
+ rowManager.element.scrollTop = newPos;
32
+ }else{
33
+ rowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);
34
+ }
35
+ }
36
+
37
+ this.table.element.focus();
38
+
39
+ },
40
+ scrollToStart:function(e){
41
+ var rowManager = this.table.rowManager;
42
+
43
+ e.preventDefault();
44
+
45
+ if(rowManager.displayRowsCount){
46
+ rowManager.scrollToRow(rowManager.getDisplayRows()[0]);
47
+ }
48
+
49
+ this.table.element.focus();
50
+ },
51
+ scrollToEnd:function(e){
52
+ var rowManager = this.table.rowManager;
53
+
54
+ e.preventDefault();
55
+
56
+ if(rowManager.displayRowsCount){
57
+ rowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);
58
+ }
59
+
60
+ this.table.element.focus();
61
+ },
62
+ navPrev:function(e){
63
+ this.dispatch("keybinding-nav-prev", e);
64
+ },
65
+
66
+ navNext:function(e){
67
+ this.dispatch("keybinding-nav-next", e);
68
+ },
69
+
70
+ navLeft:function(e){
71
+ this.dispatch("keybinding-nav-left", e);
72
+ },
73
+
74
+ navRight:function(e){
75
+ this.dispatch("keybinding-nav-right", e);
76
+ },
77
+
78
+ navUp:function(e){
79
+ this.dispatch("keybinding-nav-up", e);
80
+ },
81
+
82
+ navDown:function(e){
83
+ this.dispatch("keybinding-nav-down", e);
84
+ },
85
+
86
+ undo:function(e){
87
+ var cell = false;
88
+ if(this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")){
89
+
90
+ cell = this.table.modules.edit.currentCell;
91
+
92
+ if(!cell){
93
+ e.preventDefault();
94
+ this.table.modules.history.undo();
95
+ }
96
+ }
97
+ },
98
+
99
+ redo:function(e){
100
+ var cell = false;
101
+ if(this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")){
102
+
103
+ cell = this.table.modules.edit.currentCell;
104
+
105
+ if(!cell){
106
+ e.preventDefault();
107
+ this.table.modules.history.redo();
108
+ }
109
+ }
110
+ },
111
+
112
+ copyToClipboard:function(e){
113
+ if(!this.table.modules.edit.currentCell){
114
+ if(this.table.modExists("clipboard", true)){
115
+ this.table.modules.clipboard.copy(false, true);
116
+ }
117
+ }
118
+ },
119
119
  };
@@ -1,13 +1,13 @@
1
- export default {
2
- navPrev:"shift + 9",
3
- navNext:9,
4
- navUp:38,
5
- navDown:40,
6
- scrollPageUp:33,
7
- scrollPageDown:34,
8
- scrollToStart:36,
9
- scrollToEnd:35,
10
- undo:["ctrl + 90", "meta + 90"],
11
- redo:["ctrl + 89", "meta + 89"],
12
- copyToClipboard:["ctrl + 67", "meta + 89"],
1
+ export default {
2
+ navPrev:"shift + 9",
3
+ navNext:9,
4
+ navUp:38,
5
+ navDown:40,
6
+ scrollPageUp:33,
7
+ scrollPageDown:34,
8
+ scrollToStart:36,
9
+ scrollToEnd:35,
10
+ undo:["ctrl + 90", "meta + 90"],
11
+ redo:["ctrl + 89", "meta + 89"],
12
+ copyToClipboard:["ctrl + 67", "meta + 89"],
13
13
  };