jqtree 1.6.1 → 1.6.2

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 (84) hide show
  1. package/.eslintrc +1 -0
  2. package/_config.yml +1 -1
  3. package/_entries/10_changelog.md +5 -0
  4. package/_layouts/base.html +0 -22
  5. package/babel.config.json +11 -0
  6. package/babel.coverage.config.json +4 -0
  7. package/bower.json +1 -1
  8. package/jest-browser.config.js +0 -3
  9. package/jest-jsdom.config.js +1 -2
  10. package/jqtree.css +4 -1
  11. package/jqtree.postcss +3 -0
  12. package/lib/dataLoader.js +146 -98
  13. package/lib/dragAndDropHandler.js +668 -472
  14. package/lib/elementsRenderer.js +282 -197
  15. package/lib/jqtreeOptions.js +1 -2
  16. package/lib/keyHandler.js +134 -87
  17. package/lib/mouse.widget.js +285 -186
  18. package/lib/node.js +691 -505
  19. package/lib/nodeElement.js +329 -207
  20. package/lib/playwright/playwright.test.js +216 -189
  21. package/lib/playwright/testUtil.js +429 -193
  22. package/lib/playwright/visualRegression.js +182 -117
  23. package/lib/saveStateHandler.js +311 -204
  24. package/lib/scrollHandler.js +293 -199
  25. package/lib/selectNodeHandler.js +140 -100
  26. package/lib/simple.widget.js +184 -109
  27. package/lib/test/global.d.js +3 -0
  28. package/lib/test/jqTree/create.test.js +44 -40
  29. package/lib/test/jqTree/events.test.js +185 -138
  30. package/lib/test/jqTree/keyboard.test.js +216 -199
  31. package/lib/test/jqTree/loadOnDemand.test.js +233 -157
  32. package/lib/test/jqTree/methods.test.js +1269 -1019
  33. package/lib/test/jqTree/options.test.js +467 -398
  34. package/lib/test/node.test.js +1036 -873
  35. package/lib/test/nodeUtil.test.js +21 -20
  36. package/lib/test/support/exampleData.js +35 -23
  37. package/lib/test/support/jqTreeMatchers.js +72 -54
  38. package/lib/test/support/matchers.d.js +1 -0
  39. package/lib/test/support/setupTests.js +9 -3
  40. package/lib/test/support/testUtil.js +35 -15
  41. package/lib/test/support/treeStructure.js +41 -32
  42. package/lib/test/util.test.js +21 -20
  43. package/lib/tree.jquery.d.js +1 -0
  44. package/lib/tree.jquery.js +1264 -892
  45. package/lib/types.js +1 -2
  46. package/lib/typings.d.js +2 -0
  47. package/lib/util.js +19 -8
  48. package/lib/version.js +8 -3
  49. package/package.json +42 -34
  50. package/production +4 -4
  51. package/rollup.config.js +16 -11
  52. package/src/dataLoader.ts +6 -6
  53. package/src/dragAndDropHandler.ts +0 -4
  54. package/src/elementsRenderer.ts +4 -0
  55. package/src/jqtreeOptions.ts +1 -1
  56. package/src/mouse.widget.ts +19 -15
  57. package/src/node.ts +27 -41
  58. package/src/nodeElement.ts +17 -9
  59. package/src/playwright/.eslintrc +5 -0
  60. package/src/playwright/playwright.test.ts +29 -29
  61. package/src/saveStateHandler.ts +11 -6
  62. package/src/selectNodeHandler.ts +1 -1
  63. package/src/simple.widget.ts +1 -1
  64. package/src/test/.eslintrc +4 -0
  65. package/src/test/jqTree/create.test.ts +0 -1
  66. package/src/test/jqTree/events.test.ts +0 -1
  67. package/src/test/jqTree/keyboard.test.ts +0 -1
  68. package/src/test/jqTree/loadOnDemand.test.ts +46 -1
  69. package/src/test/jqTree/methods.test.ts +35 -10
  70. package/src/test/jqTree/options.test.ts +4 -5
  71. package/src/test/node.test.ts +2 -2
  72. package/src/test/support/jqTreeMatchers.ts +8 -9
  73. package/src/test/support/matchers.d.ts +2 -4
  74. package/src/test/support/setupTests.ts +2 -1
  75. package/src/tree.jquery.d.ts +18 -12
  76. package/src/tree.jquery.ts +25 -21
  77. package/src/version.ts +1 -1
  78. package/static/example.postcss +13 -0
  79. package/static/example_data.js +33 -36
  80. package/tree.jquery.debug.js +4806 -3325
  81. package/tree.jquery.debug.js.map +1 -1
  82. package/tree.jquery.js +2 -2
  83. package/tree.jquery.js.map +1 -1
  84. package/tsconfig.json +1 -0
@@ -1,220 +1,327 @@
1
1
  "use strict";
2
- exports.__esModule = true;
3
- var util_1 = require("./util");
4
- var SaveStateHandler = /** @class */ (function () {
5
- function SaveStateHandler(treeWidget) {
6
- this.treeWidget = treeWidget;
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = void 0;
7
+
8
+ var _util = require("./util");
9
+
10
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
11
+
12
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
13
+
14
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
15
+
16
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
17
+
18
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
19
+
20
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
21
+
22
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
23
+
24
+ var SaveStateHandler = /*#__PURE__*/function () {
25
+ function SaveStateHandler(treeWidget) {
26
+ _classCallCheck(this, SaveStateHandler);
27
+
28
+ _defineProperty(this, "treeWidget", void 0);
29
+
30
+ _defineProperty(this, "_supportsLocalStorage", void 0);
31
+
32
+ this.treeWidget = treeWidget;
33
+ }
34
+
35
+ _createClass(SaveStateHandler, [{
36
+ key: "saveState",
37
+ value: function saveState() {
38
+ var state = JSON.stringify(this.getState());
39
+
40
+ if (this.treeWidget.options.onSetStateFromStorage) {
41
+ this.treeWidget.options.onSetStateFromStorage(state);
42
+ } else if (this.supportsLocalStorage()) {
43
+ localStorage.setItem(this.getKeyName(), state);
44
+ }
45
+ }
46
+ }, {
47
+ key: "getStateFromStorage",
48
+ value: function getStateFromStorage() {
49
+ var jsonData = this.loadFromStorage();
50
+
51
+ if (jsonData) {
52
+ return this.parseState(jsonData);
53
+ } else {
54
+ return null;
55
+ }
56
+ }
57
+ }, {
58
+ key: "getState",
59
+ value: function getState() {
60
+ var _this = this;
61
+
62
+ var getOpenNodeIds = function getOpenNodeIds() {
63
+ var openNodes = [];
64
+
65
+ _this.treeWidget.tree.iterate(function (node) {
66
+ if (node.is_open && node.id && node.hasChildren()) {
67
+ openNodes.push(node.id);
68
+ }
69
+
70
+ return true;
71
+ });
72
+
73
+ return openNodes;
74
+ };
75
+
76
+ var getSelectedNodeIds = function getSelectedNodeIds() {
77
+ var selectedNodeIds = [];
78
+
79
+ _this.treeWidget.getSelectedNodes().forEach(function (node) {
80
+ if (node.id != null) {
81
+ selectedNodeIds.push(node.id);
82
+ }
83
+ });
84
+
85
+ return selectedNodeIds;
86
+ };
87
+
88
+ return {
89
+ open_nodes: getOpenNodeIds(),
90
+ selected_node: getSelectedNodeIds()
91
+ };
7
92
  }
8
- SaveStateHandler.prototype.saveState = function () {
9
- var state = JSON.stringify(this.getState());
10
- if (this.treeWidget.options.onSetStateFromStorage) {
11
- this.treeWidget.options.onSetStateFromStorage(state);
12
- }
13
- else if (this.supportsLocalStorage()) {
14
- localStorage.setItem(this.getKeyName(), state);
15
- }
16
- };
17
- SaveStateHandler.prototype.getStateFromStorage = function () {
18
- var jsonData = this.loadFromStorage();
19
- if (jsonData) {
20
- return this.parseState(jsonData);
21
- }
22
- else {
23
- return null;
24
- }
25
- };
26
- SaveStateHandler.prototype.getState = function () {
27
- var _this = this;
28
- var getOpenNodeIds = function () {
29
- var openNodes = [];
30
- _this.treeWidget.tree.iterate(function (node) {
31
- if (node.is_open && node.id && node.hasChildren()) {
32
- openNodes.push(node.id);
33
- }
34
- return true;
35
- });
36
- return openNodes;
37
- };
38
- var getSelectedNodeIds = function () {
39
- var selectedNodeIds = [];
40
- _this.treeWidget.getSelectedNodes().forEach(function (node) {
41
- if (node.id != null) {
42
- selectedNodeIds.push(node.id);
43
- }
44
- });
45
- return selectedNodeIds;
46
- };
47
- return {
48
- open_nodes: getOpenNodeIds(),
49
- selected_node: getSelectedNodeIds()
50
- };
51
- };
52
93
  /*
53
94
  Set initial state
54
95
  Don't handle nodes that are loaded on demand
55
-
56
- result: must load on demand
96
+ result: must load on demand
57
97
  */
58
- SaveStateHandler.prototype.setInitialState = function (state) {
59
- if (!state) {
60
- return false;
61
- }
62
- else {
63
- var mustLoadOnDemand = false;
64
- if (state.open_nodes) {
65
- mustLoadOnDemand = this.openInitialNodes(state.open_nodes);
66
- }
67
- if (state.selected_node) {
68
- this.resetSelection();
69
- this.selectInitialNodes(state.selected_node);
70
- }
71
- return mustLoadOnDemand;
72
- }
73
- };
74
- SaveStateHandler.prototype.setInitialStateOnDemand = function (state, cbFinished) {
75
- if (state) {
76
- this.doSetInitialStateOnDemand(state.open_nodes, state.selected_node, cbFinished);
77
- }
78
- else {
79
- cbFinished();
80
- }
81
- };
82
- SaveStateHandler.prototype.getNodeIdToBeSelected = function () {
83
- var state = this.getStateFromStorage();
84
- if (state && state.selected_node) {
85
- return state.selected_node[0];
86
- }
87
- else {
88
- return null;
89
- }
90
- };
91
- SaveStateHandler.prototype.parseState = function (jsonData) {
92
- var state = JSON.parse(jsonData);
93
- // Check if selected_node is an int (instead of an array)
94
- if (state && state.selected_node && util_1.isInt(state.selected_node)) {
95
- // Convert to array
96
- state.selected_node = [state.selected_node];
97
- }
98
- return state;
99
- };
100
- SaveStateHandler.prototype.loadFromStorage = function () {
101
- if (this.treeWidget.options.onGetStateFromStorage) {
102
- return this.treeWidget.options.onGetStateFromStorage();
103
- }
104
- else if (this.supportsLocalStorage()) {
105
- return localStorage.getItem(this.getKeyName());
106
- }
107
- else {
108
- return null;
109
- }
110
- };
111
- SaveStateHandler.prototype.openInitialNodes = function (nodeIds) {
98
+
99
+ }, {
100
+ key: "setInitialState",
101
+ value: function setInitialState(state) {
102
+ if (!state) {
103
+ return false;
104
+ } else {
112
105
  var mustLoadOnDemand = false;
113
- for (var _i = 0, nodeIds_1 = nodeIds; _i < nodeIds_1.length; _i++) {
114
- var nodeDd = nodeIds_1[_i];
115
- var node = this.treeWidget.getNodeById(nodeDd);
116
- if (node) {
117
- if (!node.load_on_demand) {
118
- node.is_open = true;
119
- }
120
- else {
121
- mustLoadOnDemand = true;
122
- }
123
- }
106
+
107
+ if (state.open_nodes) {
108
+ mustLoadOnDemand = this.openInitialNodes(state.open_nodes);
124
109
  }
110
+
111
+ if (state.selected_node) {
112
+ this.resetSelection();
113
+ this.selectInitialNodes(state.selected_node);
114
+ }
115
+
125
116
  return mustLoadOnDemand;
126
- };
127
- SaveStateHandler.prototype.selectInitialNodes = function (nodeIds) {
128
- var selectCount = 0;
129
- for (var _i = 0, nodeIds_2 = nodeIds; _i < nodeIds_2.length; _i++) {
130
- var nodeId = nodeIds_2[_i];
131
- var node = this.treeWidget.getNodeById(nodeId);
132
- if (node) {
133
- selectCount += 1;
134
- this.treeWidget.selectNodeHandler.addToSelection(node);
117
+ }
118
+ }
119
+ }, {
120
+ key: "setInitialStateOnDemand",
121
+ value: function setInitialStateOnDemand(state, cbFinished) {
122
+ if (state) {
123
+ this.doSetInitialStateOnDemand(state.open_nodes, state.selected_node, cbFinished);
124
+ } else {
125
+ cbFinished();
126
+ }
127
+ }
128
+ }, {
129
+ key: "getNodeIdToBeSelected",
130
+ value: function getNodeIdToBeSelected() {
131
+ var state = this.getStateFromStorage();
132
+
133
+ if (state && state.selected_node) {
134
+ return state.selected_node[0];
135
+ } else {
136
+ return null;
137
+ }
138
+ }
139
+ }, {
140
+ key: "parseState",
141
+ value: function parseState(jsonData) {
142
+ var state = JSON.parse(jsonData); // Check if selected_node is an int (instead of an array)
143
+
144
+ if (state && state.selected_node && (0, _util.isInt)(state.selected_node)) {
145
+ // Convert to array
146
+ state.selected_node = [state.selected_node];
147
+ }
148
+
149
+ return state;
150
+ }
151
+ }, {
152
+ key: "loadFromStorage",
153
+ value: function loadFromStorage() {
154
+ if (this.treeWidget.options.onGetStateFromStorage) {
155
+ return this.treeWidget.options.onGetStateFromStorage();
156
+ } else if (this.supportsLocalStorage()) {
157
+ return localStorage.getItem(this.getKeyName());
158
+ } else {
159
+ return null;
160
+ }
161
+ }
162
+ }, {
163
+ key: "openInitialNodes",
164
+ value: function openInitialNodes(nodeIds) {
165
+ var mustLoadOnDemand = false;
166
+
167
+ var _iterator = _createForOfIteratorHelper(nodeIds),
168
+ _step;
169
+
170
+ try {
171
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
172
+ var nodeId = _step.value;
173
+ var node = this.treeWidget.getNodeById(nodeId);
174
+
175
+ if (node) {
176
+ if (!node.load_on_demand) {
177
+ node.is_open = true;
178
+ } else {
179
+ mustLoadOnDemand = true;
135
180
  }
181
+ }
136
182
  }
137
- return selectCount !== 0;
138
- };
139
- SaveStateHandler.prototype.resetSelection = function () {
140
- var selectNodeHandler = this.treeWidget.selectNodeHandler;
141
- var selectedNodes = selectNodeHandler.getSelectedNodes();
142
- selectedNodes.forEach(function (node) {
143
- selectNodeHandler.removeFromSelection(node);
144
- });
145
- };
146
- SaveStateHandler.prototype.doSetInitialStateOnDemand = function (nodeIdsParam, selectedNodes, cbFinished) {
147
- var _this = this;
148
- var loadingCount = 0;
149
- var nodeIds = nodeIdsParam;
150
- var openNodes = function () {
151
- var newNodesIds = [];
152
- for (var _i = 0, nodeIds_3 = nodeIds; _i < nodeIds_3.length; _i++) {
153
- var nodeId = nodeIds_3[_i];
154
- var node = _this.treeWidget.getNodeById(nodeId);
155
- if (!node) {
156
- newNodesIds.push(nodeId);
157
- }
158
- else {
159
- if (!node.is_loading) {
160
- if (node.load_on_demand) {
161
- loadAndOpenNode(node);
162
- }
163
- else {
164
- _this.treeWidget._openNode(node, false, null);
165
- }
166
- }
183
+ } catch (err) {
184
+ _iterator.e(err);
185
+ } finally {
186
+ _iterator.f();
187
+ }
188
+
189
+ return mustLoadOnDemand;
190
+ }
191
+ }, {
192
+ key: "selectInitialNodes",
193
+ value: function selectInitialNodes(nodeIds) {
194
+ var selectCount = 0;
195
+
196
+ var _iterator2 = _createForOfIteratorHelper(nodeIds),
197
+ _step2;
198
+
199
+ try {
200
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
201
+ var nodeId = _step2.value;
202
+ var node = this.treeWidget.getNodeById(nodeId);
203
+
204
+ if (node) {
205
+ selectCount += 1;
206
+ this.treeWidget.selectNodeHandler.addToSelection(node);
207
+ }
208
+ }
209
+ } catch (err) {
210
+ _iterator2.e(err);
211
+ } finally {
212
+ _iterator2.f();
213
+ }
214
+
215
+ return selectCount !== 0;
216
+ }
217
+ }, {
218
+ key: "resetSelection",
219
+ value: function resetSelection() {
220
+ var selectNodeHandler = this.treeWidget.selectNodeHandler;
221
+ var selectedNodes = selectNodeHandler.getSelectedNodes();
222
+ selectedNodes.forEach(function (node) {
223
+ selectNodeHandler.removeFromSelection(node);
224
+ });
225
+ }
226
+ }, {
227
+ key: "doSetInitialStateOnDemand",
228
+ value: function doSetInitialStateOnDemand(nodeIdsParam, selectedNodes, cbFinished) {
229
+ var _this2 = this;
230
+
231
+ var loadingCount = 0;
232
+ var nodeIds = nodeIdsParam;
233
+
234
+ var openNodes = function openNodes() {
235
+ var newNodesIds = [];
236
+
237
+ var _iterator3 = _createForOfIteratorHelper(nodeIds),
238
+ _step3;
239
+
240
+ try {
241
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
242
+ var nodeId = _step3.value;
243
+
244
+ var node = _this2.treeWidget.getNodeById(nodeId);
245
+
246
+ if (!node) {
247
+ newNodesIds.push(nodeId);
248
+ } else {
249
+ if (!node.is_loading) {
250
+ if (node.load_on_demand) {
251
+ loadAndOpenNode(node);
252
+ } else {
253
+ _this2.treeWidget._openNode(node, false, null);
167
254
  }
255
+ }
168
256
  }
169
- nodeIds = newNodesIds;
170
- if (_this.selectInitialNodes(selectedNodes)) {
171
- _this.treeWidget._refreshElements(null);
172
- }
173
- if (loadingCount === 0) {
174
- cbFinished();
175
- }
176
- };
177
- var loadAndOpenNode = function (node) {
178
- loadingCount += 1;
179
- _this.treeWidget._openNode(node, false, function () {
180
- loadingCount -= 1;
181
- openNodes();
182
- });
183
- };
184
- openNodes();
185
- };
186
- SaveStateHandler.prototype.getKeyName = function () {
187
- if (typeof this.treeWidget.options.saveState === "string") {
188
- return this.treeWidget.options.saveState;
257
+ }
258
+ } catch (err) {
259
+ _iterator3.e(err);
260
+ } finally {
261
+ _iterator3.f();
189
262
  }
190
- else {
191
- return "tree";
263
+
264
+ nodeIds = newNodesIds;
265
+
266
+ if (_this2.selectInitialNodes(selectedNodes)) {
267
+ _this2.treeWidget._refreshElements(null);
192
268
  }
193
- };
194
- SaveStateHandler.prototype.supportsLocalStorage = function () {
195
- var testSupport = function () {
196
- // Is local storage supported?
197
- if (localStorage == null) {
198
- return false;
199
- }
200
- else {
201
- // Check if it's possible to store an item. Safari does not allow this in private browsing mode.
202
- try {
203
- var key = "_storage_test";
204
- sessionStorage.setItem(key, "value");
205
- sessionStorage.removeItem(key);
206
- }
207
- catch (error) {
208
- return false;
209
- }
210
- return true;
211
- }
212
- };
213
- if (this._supportsLocalStorage == null) {
214
- this._supportsLocalStorage = testSupport();
269
+
270
+ if (loadingCount === 0) {
271
+ cbFinished();
272
+ }
273
+ };
274
+
275
+ var loadAndOpenNode = function loadAndOpenNode(node) {
276
+ loadingCount += 1;
277
+
278
+ _this2.treeWidget._openNode(node, false, function () {
279
+ loadingCount -= 1;
280
+ openNodes();
281
+ });
282
+ };
283
+
284
+ openNodes();
285
+ }
286
+ }, {
287
+ key: "getKeyName",
288
+ value: function getKeyName() {
289
+ if (typeof this.treeWidget.options.saveState === "string") {
290
+ return this.treeWidget.options.saveState;
291
+ } else {
292
+ return "tree";
293
+ }
294
+ }
295
+ }, {
296
+ key: "supportsLocalStorage",
297
+ value: function supportsLocalStorage() {
298
+ var testSupport = function testSupport() {
299
+ // Is local storage supported?
300
+ if (localStorage == null) {
301
+ return false;
302
+ } else {
303
+ // Check if it's possible to store an item. Safari does not allow this in private browsing mode.
304
+ try {
305
+ var key = "_storage_test";
306
+ sessionStorage.setItem(key, "value");
307
+ sessionStorage.removeItem(key);
308
+ } catch (error) {
309
+ return false;
310
+ }
311
+
312
+ return true;
215
313
  }
216
- return this._supportsLocalStorage;
217
- };
218
- return SaveStateHandler;
219
- }());
220
- exports["default"] = SaveStateHandler;
314
+ };
315
+
316
+ if (this._supportsLocalStorage == null) {
317
+ this._supportsLocalStorage = testSupport();
318
+ }
319
+
320
+ return this._supportsLocalStorage;
321
+ }
322
+ }]);
323
+
324
+ return SaveStateHandler;
325
+ }();
326
+
327
+ exports["default"] = SaveStateHandler;