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.
- package/.eslintrc +1 -0
- package/_config.yml +1 -1
- package/_entries/10_changelog.md +5 -0
- package/_layouts/base.html +0 -22
- package/babel.config.json +11 -0
- package/babel.coverage.config.json +4 -0
- package/bower.json +1 -1
- package/jest-browser.config.js +0 -3
- package/jest-jsdom.config.js +1 -2
- package/jqtree.css +4 -1
- package/jqtree.postcss +3 -0
- package/lib/dataLoader.js +146 -98
- package/lib/dragAndDropHandler.js +668 -472
- package/lib/elementsRenderer.js +282 -197
- package/lib/jqtreeOptions.js +1 -2
- package/lib/keyHandler.js +134 -87
- package/lib/mouse.widget.js +285 -186
- package/lib/node.js +691 -505
- package/lib/nodeElement.js +329 -207
- package/lib/playwright/playwright.test.js +216 -189
- package/lib/playwright/testUtil.js +429 -193
- package/lib/playwright/visualRegression.js +182 -117
- package/lib/saveStateHandler.js +311 -204
- package/lib/scrollHandler.js +293 -199
- package/lib/selectNodeHandler.js +140 -100
- package/lib/simple.widget.js +184 -109
- package/lib/test/global.d.js +3 -0
- package/lib/test/jqTree/create.test.js +44 -40
- package/lib/test/jqTree/events.test.js +185 -138
- package/lib/test/jqTree/keyboard.test.js +216 -199
- package/lib/test/jqTree/loadOnDemand.test.js +233 -157
- package/lib/test/jqTree/methods.test.js +1269 -1019
- package/lib/test/jqTree/options.test.js +467 -398
- package/lib/test/node.test.js +1036 -873
- package/lib/test/nodeUtil.test.js +21 -20
- package/lib/test/support/exampleData.js +35 -23
- package/lib/test/support/jqTreeMatchers.js +72 -54
- package/lib/test/support/matchers.d.js +1 -0
- package/lib/test/support/setupTests.js +9 -3
- package/lib/test/support/testUtil.js +35 -15
- package/lib/test/support/treeStructure.js +41 -32
- package/lib/test/util.test.js +21 -20
- package/lib/tree.jquery.d.js +1 -0
- package/lib/tree.jquery.js +1264 -892
- package/lib/types.js +1 -2
- package/lib/typings.d.js +2 -0
- package/lib/util.js +19 -8
- package/lib/version.js +8 -3
- package/package.json +42 -34
- package/production +4 -4
- package/rollup.config.js +16 -11
- package/src/dataLoader.ts +6 -6
- package/src/dragAndDropHandler.ts +0 -4
- package/src/elementsRenderer.ts +4 -0
- package/src/jqtreeOptions.ts +1 -1
- package/src/mouse.widget.ts +19 -15
- package/src/node.ts +27 -41
- package/src/nodeElement.ts +17 -9
- package/src/playwright/.eslintrc +5 -0
- package/src/playwright/playwright.test.ts +29 -29
- package/src/saveStateHandler.ts +11 -6
- package/src/selectNodeHandler.ts +1 -1
- package/src/simple.widget.ts +1 -1
- package/src/test/.eslintrc +4 -0
- package/src/test/jqTree/create.test.ts +0 -1
- package/src/test/jqTree/events.test.ts +0 -1
- package/src/test/jqTree/keyboard.test.ts +0 -1
- package/src/test/jqTree/loadOnDemand.test.ts +46 -1
- package/src/test/jqTree/methods.test.ts +35 -10
- package/src/test/jqTree/options.test.ts +4 -5
- package/src/test/node.test.ts +2 -2
- package/src/test/support/jqTreeMatchers.ts +8 -9
- package/src/test/support/matchers.d.ts +2 -4
- package/src/test/support/setupTests.ts +2 -1
- package/src/tree.jquery.d.ts +18 -12
- package/src/tree.jquery.ts +25 -21
- package/src/version.ts +1 -1
- package/static/example.postcss +13 -0
- package/static/example_data.js +33 -36
- package/tree.jquery.debug.js +4806 -3325
- package/tree.jquery.debug.js.map +1 -1
- package/tree.jquery.js +2 -2
- package/tree.jquery.js.map +1 -1
- package/tsconfig.json +1 -0
|
@@ -1,173 +1,249 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
-
function step(op) {
|
|
16
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
-
while (_) try {
|
|
18
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
-
switch (op[0]) {
|
|
21
|
-
case 0: case 1: t = op; break;
|
|
22
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
-
default:
|
|
26
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
-
if (t[2]) _.ops.pop();
|
|
31
|
-
_.trys.pop(); continue;
|
|
32
|
-
}
|
|
33
|
-
op = body.call(thisArg, _);
|
|
34
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
exports.__esModule = true;
|
|
39
|
-
var $ = require("jquery");
|
|
40
|
-
var givens_1 = require("givens");
|
|
41
|
-
var dom_1 = require("@testing-library/dom");
|
|
42
|
-
var msw_1 = require("msw");
|
|
43
|
-
var node_1 = require("msw/node");
|
|
2
|
+
|
|
3
|
+
var _givens = _interopRequireDefault(require("givens"));
|
|
4
|
+
|
|
5
|
+
var _dom = require("@testing-library/dom");
|
|
6
|
+
|
|
7
|
+
var _msw = require("msw");
|
|
8
|
+
|
|
9
|
+
var _node = require("msw/node");
|
|
10
|
+
|
|
44
11
|
require("../../tree.jquery");
|
|
45
|
-
|
|
12
|
+
|
|
13
|
+
var _testUtil = require("../support/testUtil");
|
|
14
|
+
|
|
15
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
16
|
+
|
|
17
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
18
|
+
|
|
19
|
+
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
20
|
+
|
|
46
21
|
var context = describe;
|
|
47
22
|
beforeEach(function () {
|
|
48
|
-
|
|
23
|
+
$("body").append('<div id="tree1"></div>');
|
|
49
24
|
});
|
|
50
25
|
afterEach(function () {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
26
|
+
var $tree = $("#tree1");
|
|
27
|
+
$tree.tree("destroy");
|
|
28
|
+
$tree.remove();
|
|
29
|
+
localStorage.clear();
|
|
55
30
|
});
|
|
56
31
|
context("when a node has load_on_demand in the data", function () {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
32
|
+
var given = (0, _givens["default"])();
|
|
33
|
+
given("autoOpen", function () {
|
|
34
|
+
return false;
|
|
35
|
+
});
|
|
36
|
+
given("$tree", function () {
|
|
37
|
+
return $("#tree1");
|
|
38
|
+
});
|
|
39
|
+
var initialData = [{
|
|
40
|
+
id: 1,
|
|
41
|
+
name: "parent-node",
|
|
42
|
+
load_on_demand: true
|
|
43
|
+
}];
|
|
44
|
+
var server = null;
|
|
45
|
+
beforeAll(function () {
|
|
46
|
+
server = (0, _node.setupServer)(_msw.rest.get("/tree/", function (request, response, ctx) {
|
|
47
|
+
var parentId = request.url.searchParams.get("node");
|
|
48
|
+
|
|
49
|
+
if (parentId === "1") {
|
|
50
|
+
return response(ctx.status(200), ctx.json([{
|
|
51
|
+
id: 2,
|
|
52
|
+
name: "loaded-on-demand"
|
|
53
|
+
}]));
|
|
54
|
+
} else {
|
|
55
|
+
return response(ctx.status(400));
|
|
56
|
+
}
|
|
57
|
+
}));
|
|
58
|
+
server.listen();
|
|
59
|
+
});
|
|
60
|
+
afterAll(function () {
|
|
61
|
+
var _server;
|
|
62
|
+
|
|
63
|
+
(_server = server) === null || _server === void 0 ? void 0 : _server.close();
|
|
64
|
+
});
|
|
65
|
+
beforeEach(function () {
|
|
66
|
+
if (given.savedState) {
|
|
67
|
+
localStorage.setItem("tree", given.savedState);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
given.$tree.tree({
|
|
71
|
+
autoOpen: given.autoOpen,
|
|
72
|
+
data: initialData,
|
|
73
|
+
dataUrl: "/tree/",
|
|
74
|
+
saveState: true
|
|
79
75
|
});
|
|
80
|
-
|
|
81
|
-
|
|
76
|
+
});
|
|
77
|
+
it("creates a parent node without children", function () {
|
|
78
|
+
expect(given.$tree).toHaveTreeStructure([expect.objectContaining({
|
|
79
|
+
children: [],
|
|
80
|
+
name: "parent-node",
|
|
81
|
+
open: false
|
|
82
|
+
})]);
|
|
83
|
+
});
|
|
84
|
+
context("when the node is opened", function () {
|
|
85
|
+
given("node", function () {
|
|
86
|
+
return given.$tree.tree("getNodeByNameMustExist", "parent-node");
|
|
82
87
|
});
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
88
|
+
it("loads the subtree", /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
|
|
89
|
+
return regeneratorRuntime.wrap(function _callee$(_context) {
|
|
90
|
+
while (1) {
|
|
91
|
+
switch (_context.prev = _context.next) {
|
|
92
|
+
case 0:
|
|
93
|
+
(0, _testUtil.togglerLink)(given.node.element).trigger("click");
|
|
94
|
+
_context.next = 3;
|
|
95
|
+
return _dom.screen.findByText("loaded-on-demand");
|
|
96
|
+
|
|
97
|
+
case 3:
|
|
98
|
+
expect(given.$tree).toHaveTreeStructure([expect.objectContaining({
|
|
99
|
+
name: "parent-node",
|
|
100
|
+
open: true,
|
|
101
|
+
children: [expect.objectContaining({
|
|
102
|
+
name: "loaded-on-demand"
|
|
103
|
+
})]
|
|
104
|
+
})]);
|
|
105
|
+
|
|
106
|
+
case 4:
|
|
107
|
+
case "end":
|
|
108
|
+
return _context.stop();
|
|
109
|
+
}
|
|
86
110
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
111
|
+
}, _callee);
|
|
112
|
+
})));
|
|
113
|
+
context("when the node is selected and has the focus", function () {
|
|
114
|
+
beforeEach(function () {
|
|
115
|
+
given.$tree.tree("selectNode", given.node);
|
|
116
|
+
});
|
|
117
|
+
it("keeps the node selected and focused", /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
|
|
118
|
+
return regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
119
|
+
while (1) {
|
|
120
|
+
switch (_context2.prev = _context2.next) {
|
|
121
|
+
case 0:
|
|
122
|
+
expect(given.node.element).toBeSelected();
|
|
123
|
+
expect(given.node.element).toBeFocused();
|
|
124
|
+
(0, _testUtil.togglerLink)(given.node.element).trigger("click");
|
|
125
|
+
_context2.next = 5;
|
|
126
|
+
return _dom.screen.findByText("loaded-on-demand");
|
|
127
|
+
|
|
128
|
+
case 5:
|
|
129
|
+
expect(given.node.element).toBeSelected();
|
|
130
|
+
expect(given.node.element).toBeFocused();
|
|
131
|
+
|
|
132
|
+
case 7:
|
|
133
|
+
case "end":
|
|
134
|
+
return _context2.stop();
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}, _callee2);
|
|
138
|
+
})));
|
|
93
139
|
});
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
140
|
+
context("when the node is not selected", function () {
|
|
141
|
+
it("doesn't select the node", /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3() {
|
|
142
|
+
return regeneratorRuntime.wrap(function _callee3$(_context3) {
|
|
143
|
+
while (1) {
|
|
144
|
+
switch (_context3.prev = _context3.next) {
|
|
145
|
+
case 0:
|
|
146
|
+
expect(given.node.element).not.toBeSelected();
|
|
147
|
+
(0, _testUtil.togglerLink)(given.node.element).trigger("click");
|
|
148
|
+
_context3.next = 4;
|
|
149
|
+
return _dom.screen.findByText("loaded-on-demand");
|
|
150
|
+
|
|
151
|
+
case 4:
|
|
152
|
+
expect(given.node.element).not.toBeSelected();
|
|
153
|
+
|
|
154
|
+
case 5:
|
|
155
|
+
case "end":
|
|
156
|
+
return _context3.stop();
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}, _callee3);
|
|
160
|
+
})));
|
|
102
161
|
});
|
|
103
|
-
context("when the node is
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
}
|
|
127
|
-
|
|
162
|
+
context("when the node is selected and doesn't have the focus", function () {
|
|
163
|
+
beforeEach(function () {
|
|
164
|
+
given.$tree.tree("selectNode", given.node);
|
|
165
|
+
document.activeElement.blur();
|
|
166
|
+
});
|
|
167
|
+
it("keeps the node selected and not focused", /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee4() {
|
|
168
|
+
return regeneratorRuntime.wrap(function _callee4$(_context4) {
|
|
169
|
+
while (1) {
|
|
170
|
+
switch (_context4.prev = _context4.next) {
|
|
171
|
+
case 0:
|
|
172
|
+
expect(given.node.element).toBeSelected();
|
|
173
|
+
expect(given.node.element).not.toBeFocused();
|
|
174
|
+
(0, _testUtil.togglerLink)(given.node.element).trigger("click");
|
|
175
|
+
_context4.next = 5;
|
|
176
|
+
return _dom.screen.findByText("loaded-on-demand");
|
|
177
|
+
|
|
178
|
+
case 5:
|
|
179
|
+
expect(given.node.element).toBeSelected();
|
|
180
|
+
expect(given.node.element).not.toBeFocused();
|
|
181
|
+
|
|
182
|
+
case 7:
|
|
183
|
+
case "end":
|
|
184
|
+
return _context4.stop();
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}, _callee4);
|
|
188
|
+
})));
|
|
128
189
|
});
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
switch (_a.label) {
|
|
134
|
-
case 0: return [4 /*yield*/, dom_1.screen.findByText("loaded-on-demand")];
|
|
135
|
-
case 1:
|
|
136
|
-
_a.sent();
|
|
137
|
-
expect(given.$tree).toHaveTreeStructure([
|
|
138
|
-
expect.objectContaining({
|
|
139
|
-
name: "parent-node",
|
|
140
|
-
open: true,
|
|
141
|
-
children: [
|
|
142
|
-
expect.objectContaining({ name: "loaded-on-demand" }),
|
|
143
|
-
]
|
|
144
|
-
}),
|
|
145
|
-
]);
|
|
146
|
-
return [2 /*return*/];
|
|
147
|
-
}
|
|
148
|
-
});
|
|
149
|
-
}); });
|
|
190
|
+
});
|
|
191
|
+
context("with autoOpen is true", function () {
|
|
192
|
+
given("autoOpen", function () {
|
|
193
|
+
return true;
|
|
150
194
|
});
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
195
|
+
it("loads the node on demand", /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee5() {
|
|
196
|
+
return regeneratorRuntime.wrap(function _callee5$(_context5) {
|
|
197
|
+
while (1) {
|
|
198
|
+
switch (_context5.prev = _context5.next) {
|
|
199
|
+
case 0:
|
|
200
|
+
_context5.next = 2;
|
|
201
|
+
return _dom.screen.findByText("loaded-on-demand");
|
|
202
|
+
|
|
203
|
+
case 2:
|
|
204
|
+
expect(given.$tree).toHaveTreeStructure([expect.objectContaining({
|
|
205
|
+
name: "parent-node",
|
|
206
|
+
open: true,
|
|
207
|
+
children: [expect.objectContaining({
|
|
208
|
+
name: "loaded-on-demand"
|
|
209
|
+
})]
|
|
210
|
+
})]);
|
|
211
|
+
|
|
212
|
+
case 3:
|
|
213
|
+
case "end":
|
|
214
|
+
return _context5.stop();
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}, _callee5);
|
|
218
|
+
})));
|
|
219
|
+
});
|
|
220
|
+
context("with a saved state with an opened node", function () {
|
|
221
|
+
given("savedState", function () {
|
|
222
|
+
return '{"open_nodes":[1],"selected_node":[]}';
|
|
172
223
|
});
|
|
173
|
-
|
|
224
|
+
it("opens the node and loads its children on demand", /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee6() {
|
|
225
|
+
return regeneratorRuntime.wrap(function _callee6$(_context6) {
|
|
226
|
+
while (1) {
|
|
227
|
+
switch (_context6.prev = _context6.next) {
|
|
228
|
+
case 0:
|
|
229
|
+
_context6.next = 2;
|
|
230
|
+
return _dom.screen.findByText("loaded-on-demand");
|
|
231
|
+
|
|
232
|
+
case 2:
|
|
233
|
+
expect(given.$tree).toHaveTreeStructure([expect.objectContaining({
|
|
234
|
+
name: "parent-node",
|
|
235
|
+
open: true,
|
|
236
|
+
children: [expect.objectContaining({
|
|
237
|
+
name: "loaded-on-demand"
|
|
238
|
+
})]
|
|
239
|
+
})]);
|
|
240
|
+
|
|
241
|
+
case 3:
|
|
242
|
+
case "end":
|
|
243
|
+
return _context6.stop();
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}, _callee6);
|
|
247
|
+
})));
|
|
248
|
+
});
|
|
249
|
+
});
|