jqtree 1.7.4 → 1.8.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 (94) hide show
  1. package/.eslintrc +5 -1
  2. package/bower.json +1 -1
  3. package/config/babel.config.json +1 -1
  4. package/config/production +2 -0
  5. package/devserver/devserver_scroll.js +8 -0
  6. package/devserver/test_scroll.html +28 -0
  7. package/devserver/test_scroll_container.html +39 -0
  8. package/docs/_config.yml +1 -1
  9. package/docs/_entries/general/changelog.md +12 -0
  10. package/docs/package.json +1 -1
  11. package/docs/pnpm-lock.yaml +30 -30
  12. package/package.json +31 -27
  13. package/src/dataLoader.ts +44 -19
  14. package/src/dragAndDropHandler/dragElement.ts +42 -0
  15. package/src/dragAndDropHandler/hitAreasGenerator.ts +175 -0
  16. package/src/dragAndDropHandler/index.ts +470 -0
  17. package/src/dragAndDropHandler/types.ts +12 -0
  18. package/src/dragAndDropHandler/visibleNodeIterator.ts +97 -0
  19. package/src/elementsRenderer.ts +75 -40
  20. package/src/jqtreeMethodTypes.ts +40 -0
  21. package/src/jqtreeOptions.ts +43 -25
  22. package/src/keyHandler.ts +59 -38
  23. package/src/mouse.widget.ts +3 -3
  24. package/src/mouseWidgetTypes.ts +6 -0
  25. package/src/node.ts +32 -48
  26. package/src/nodeElement/borderDropHint.ts +32 -0
  27. package/src/nodeElement/folderElement.ts +133 -0
  28. package/src/nodeElement/ghostDropHint.ts +68 -0
  29. package/src/nodeElement/index.ts +101 -0
  30. package/src/nodeUtils.ts +10 -0
  31. package/src/playwright/coverage.ts +1 -4
  32. package/src/playwright/playwright.test.ts +203 -15
  33. package/src/playwright/testUtils.ts +23 -15
  34. package/src/saveStateHandler.ts +75 -26
  35. package/src/scrollHandler/containerScrollParent.ts +177 -0
  36. package/src/scrollHandler/createScrollParent.ts +50 -0
  37. package/src/scrollHandler/documentScrollParent.ts +182 -0
  38. package/src/scrollHandler/types.ts +7 -0
  39. package/src/scrollHandler.ts +36 -248
  40. package/src/selectNodeHandler.ts +10 -16
  41. package/src/test/jqTree/keyboard.test.ts +18 -23
  42. package/src/test/jqTree/loadOnDemand.test.ts +2 -3
  43. package/src/test/jqTree/methods.test.ts +33 -4
  44. package/src/test/jqTree/options.test.ts +15 -4
  45. package/src/test/node.test.ts +85 -26
  46. package/src/test/nodeUtils.test.ts +21 -0
  47. package/src/tree.jquery.ts +262 -83
  48. package/src/util.ts +3 -0
  49. package/src/version.ts +1 -1
  50. package/tree.jquery.debug.js +1922 -2608
  51. package/tree.jquery.debug.js.map +1 -1
  52. package/tree.jquery.js +2 -2
  53. package/tree.jquery.js.map +1 -1
  54. package/lib/dataLoader.js +0 -124
  55. package/lib/dragAndDropHandler.js +0 -596
  56. package/lib/elementsRenderer.js +0 -268
  57. package/lib/jqtreeOptions.js +0 -1
  58. package/lib/keyHandler.js +0 -115
  59. package/lib/mouse.widget.js +0 -256
  60. package/lib/node.js +0 -717
  61. package/lib/nodeElement.js +0 -277
  62. package/lib/playwright/coverage.js +0 -96
  63. package/lib/playwright/playwright.test.js +0 -228
  64. package/lib/playwright/testUtils.js +0 -184
  65. package/lib/saveStateHandler.js +0 -278
  66. package/lib/scrollHandler.js +0 -250
  67. package/lib/selectNodeHandler.js +0 -129
  68. package/lib/simple.widget.js +0 -159
  69. package/lib/test/global.d.js +0 -3
  70. package/lib/test/jqTree/accessibility.test.js +0 -37
  71. package/lib/test/jqTree/create.test.js +0 -48
  72. package/lib/test/jqTree/events.test.js +0 -210
  73. package/lib/test/jqTree/keyboard.test.js +0 -225
  74. package/lib/test/jqTree/loadOnDemand.test.js +0 -218
  75. package/lib/test/jqTree/methods.test.js +0 -1347
  76. package/lib/test/jqTree/options.test.js +0 -548
  77. package/lib/test/node.test.js +0 -1160
  78. package/lib/test/nodeUtil.test.js +0 -27
  79. package/lib/test/support/exampleData.js +0 -36
  80. package/lib/test/support/jqTreeMatchers.js +0 -70
  81. package/lib/test/support/matchers.d.js +0 -1
  82. package/lib/test/support/setupTests.js +0 -7
  83. package/lib/test/support/testUtil.js +0 -32
  84. package/lib/test/support/treeStructure.js +0 -39
  85. package/lib/test/util.test.js +0 -26
  86. package/lib/tree.jquery.d.js +0 -1
  87. package/lib/tree.jquery.js +0 -1106
  88. package/lib/types.js +0 -1
  89. package/lib/typings.d.js +0 -2
  90. package/lib/util.js +0 -18
  91. package/lib/version.js +0 -9
  92. package/src/dragAndDropHandler.ts +0 -719
  93. package/src/nodeElement.ts +0 -272
  94. package/src/types.ts +0 -19
@@ -1,210 +0,0 @@
1
- "use strict";
2
-
3
- function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
4
- var _givens = _interopRequireDefault(require("givens"));
5
- var _msw = require("msw");
6
- var _node = require("msw/node");
7
- var _dom = require("@testing-library/dom");
8
- require("../../tree.jquery");
9
- var _exampleData = _interopRequireDefault(require("../support/exampleData"));
10
- var _testUtil = require("../support/testUtil");
11
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
12
- function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
13
- 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); } }
14
- 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); }); }; }
15
- var context = describe;
16
- var server = (0, _node.setupServer)();
17
- beforeAll(function () {
18
- return server.listen();
19
- });
20
- beforeEach(function () {
21
- $("body").append('<div id="tree1"></div>');
22
- });
23
- afterEach(function () {
24
- server.resetHandlers();
25
- var $tree = $("#tree1");
26
- $tree.tree("destroy");
27
- $tree.remove();
28
- });
29
- afterAll(function () {
30
- return server.close();
31
- });
32
- describe("tree.click", function () {
33
- var given = (0, _givens["default"])();
34
- given("node1", function () {
35
- return given.$tree.tree("getNodeByNameMustExist", "node1");
36
- });
37
- given("titleSpan", function () {
38
- return (0, _testUtil.titleSpan)(given.node1.element);
39
- });
40
- given("$tree", function () {
41
- return $("#tree1");
42
- });
43
- beforeEach(function () {
44
- given.$tree.tree({
45
- data: _exampleData["default"]
46
- });
47
- });
48
- it("fires tree.click", function () {
49
- var onClick = jest.fn();
50
- given.$tree.on("tree.click", onClick);
51
- given.titleSpan.trigger("click");
52
- expect(onClick).toHaveBeenCalledWith(expect.objectContaining({
53
- node: given.node1
54
- }));
55
- });
56
- });
57
- describe("tree.contextmenu", function () {
58
- var given = (0, _givens["default"])();
59
- given("node1", function () {
60
- return given.$tree.tree("getNodeByNameMustExist", "node1");
61
- });
62
- given("titleSpan", function () {
63
- return (0, _testUtil.titleSpan)(given.node1.element);
64
- });
65
- given("$tree", function () {
66
- return $("#tree1");
67
- });
68
- beforeEach(function () {
69
- given.$tree.tree({
70
- data: _exampleData["default"]
71
- });
72
- });
73
- it("fires tree.contextmenu", function () {
74
- var onContextMenu = jest.fn();
75
- given.$tree.on("tree.contextmenu", onContextMenu);
76
- given.titleSpan.trigger("contextmenu");
77
- expect(onContextMenu).toHaveBeenCalledWith(expect.objectContaining({
78
- node: given.node1
79
- }));
80
- });
81
- });
82
- describe("tree.dblclick", function () {
83
- var given = (0, _givens["default"])();
84
- given("node1", function () {
85
- return given.$tree.tree("getNodeByNameMustExist", "node1");
86
- });
87
- given("titleSpan", function () {
88
- return (0, _testUtil.titleSpan)(given.node1.element);
89
- });
90
- given("$tree", function () {
91
- return $("#tree1");
92
- });
93
- beforeEach(function () {
94
- given.$tree.tree({
95
- data: _exampleData["default"]
96
- });
97
- });
98
- it("fires tree.dblclick", function () {
99
- var onDoubleClick = jest.fn();
100
- given.$tree.on("tree.dblclick", onDoubleClick);
101
- given.titleSpan.trigger("dblclick");
102
- expect(onDoubleClick).toHaveBeenCalledWith(expect.objectContaining({
103
- node: given.node1
104
- }));
105
- });
106
- });
107
- describe("tree.init", function () {
108
- var given = (0, _givens["default"])();
109
- given("$tree", function () {
110
- return $("#tree1");
111
- });
112
- context("with json data", function () {
113
- it("is called", function () {
114
- var onInit = jest.fn();
115
- given.$tree.on("tree.init", onInit);
116
- given.$tree.tree({
117
- data: _exampleData["default"]
118
- });
119
-
120
- // eslint-disable-next-line jest/prefer-called-with
121
- expect(onInit).toHaveBeenCalled();
122
- });
123
- });
124
- context("with data loaded from an url", function () {
125
- beforeEach(function () {
126
- server.use(_msw.rest.get("/tree/", function (_request, response, ctx) {
127
- return response(ctx.status(200), ctx.json(_exampleData["default"]));
128
- }));
129
- });
130
- it("is called", /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
131
- var onInit;
132
- return _regeneratorRuntime().wrap(function _callee$(_context) {
133
- while (1) switch (_context.prev = _context.next) {
134
- case 0:
135
- onInit = jest.fn();
136
- given.$tree.on("tree.init", onInit);
137
- given.$tree.tree({
138
- dataUrl: "/tree/"
139
- });
140
- _context.next = 5;
141
- return (0, _dom.waitFor)(function () {
142
- // eslint-disable-next-line jest/prefer-called-with
143
- expect(onInit).toHaveBeenCalled();
144
- });
145
- case 5:
146
- case "end":
147
- return _context.stop();
148
- }
149
- }, _callee);
150
- })));
151
- });
152
- });
153
- describe("tree.load_data", function () {
154
- var given = (0, _givens["default"])();
155
- given("$tree", function () {
156
- return $("#tree1");
157
- });
158
- context("when the tree is initialized with data", function () {
159
- it("fires tree.load_data", function () {
160
- var onLoadData = jest.fn();
161
- given.$tree.on("tree.load_data", onLoadData);
162
- given.$tree.tree({
163
- data: _exampleData["default"]
164
- });
165
- expect(onLoadData).toHaveBeenCalledWith(expect.objectContaining({
166
- tree_data: _exampleData["default"]
167
- }));
168
- });
169
- });
170
- });
171
- describe("tree.select", function () {
172
- var given = (0, _givens["default"])();
173
- given("node1", function () {
174
- return given.$tree.tree("getNodeByNameMustExist", "node1");
175
- });
176
- given("titleSpan", function () {
177
- return (0, _testUtil.titleSpan)(given.node1.element);
178
- });
179
- given("$tree", function () {
180
- return $("#tree1");
181
- });
182
- beforeEach(function () {
183
- given.$tree.tree({
184
- data: _exampleData["default"]
185
- });
186
- });
187
- it("fires tree.select", function () {
188
- var onSelect = jest.fn();
189
- given.$tree.on("tree.select", onSelect);
190
- given.titleSpan.trigger("click");
191
- expect(onSelect).toHaveBeenCalledWith(expect.objectContaining({
192
- node: given.node1,
193
- deselected_node: null
194
- }));
195
- });
196
- context("when the node was selected", function () {
197
- beforeEach(function () {
198
- given.$tree.tree("selectNode", given.node1);
199
- });
200
- it("fires tree.select with node is null", function () {
201
- var onSelect = jest.fn();
202
- given.$tree.on("tree.select", onSelect);
203
- given.titleSpan.trigger("click");
204
- expect(onSelect).toHaveBeenCalledWith(expect.objectContaining({
205
- node: null,
206
- previous_node: given.node1
207
- }));
208
- });
209
- });
210
- });
@@ -1,225 +0,0 @@
1
- "use strict";
2
-
3
- var _givens = _interopRequireDefault(require("givens"));
4
- require("../../tree.jquery");
5
- var _exampleData = _interopRequireDefault(require("../support/exampleData"));
6
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
7
- var context = describe;
8
- beforeEach(function () {
9
- $("body").append('<div id="tree1"></div>');
10
- });
11
- afterEach(function () {
12
- var $tree = $("#tree1");
13
- $tree.tree("destroy");
14
- $tree.remove();
15
- });
16
- describe("keyboard support", function () {
17
- var KEY_DOWN = 40;
18
- var KEY_LEFT = 37;
19
- var KEY_RIGHT = 39;
20
- var KEY_UP = 38;
21
- var KEY_PAGE_UP = 33;
22
- var given = (0, _givens["default"])();
23
- given("autoOpen", function () {
24
- return false;
25
- });
26
- given("initialSelectedNode", function () {
27
- return null;
28
- });
29
- given("$tree", function () {
30
- return $("#tree1");
31
- });
32
- beforeEach(function () {
33
- given.$tree.tree({
34
- animationSpeed: 0,
35
- autoOpen: given.autoOpen,
36
- data: _exampleData["default"]
37
- });
38
- if (given.initialSelectedNode) {
39
- given.$tree.tree("selectNode", given.initialSelectedNode);
40
- }
41
- given.$tree.trigger($.Event("keydown", {
42
- which: given.pressedKey
43
- }));
44
- });
45
- context("with key down", function () {
46
- given("pressedKey", function () {
47
- return KEY_DOWN;
48
- });
49
- context("when a node is selected", function () {
50
- given("initialSelectedNode", function () {
51
- return given.$tree.tree("getNodeByNameMustExist", "node1");
52
- });
53
- it("selects the next node", function () {
54
- expect(given.$tree).toHaveTreeStructure([expect.objectContaining({
55
- name: "node1",
56
- selected: false
57
- }), expect.objectContaining({
58
- name: "node2",
59
- selected: true
60
- })]);
61
- });
62
- });
63
- context("when no node is selected", function () {
64
- it("does nothing", function () {
65
- expect(given.$tree.tree("getSelectedNode")).toBe(false);
66
- });
67
- });
68
- context("when the last node is selected", function () {
69
- given("initialSelectedNode", function () {
70
- return given.$tree.tree("getNodeByNameMustExist", "node2");
71
- });
72
- it("keeps the node selected", function () {
73
- expect(given.$tree.tree("getSelectedNode")).toMatchObject({
74
- name: "node2"
75
- });
76
- });
77
- });
78
- });
79
- context("with key up", function () {
80
- given("pressedKey", function () {
81
- return KEY_UP;
82
- });
83
- context("when a node is selected", function () {
84
- given("initialSelectedNode", function () {
85
- return given.$tree.tree("getNodeByNameMustExist", "node2");
86
- });
87
- it("selects the next node", function () {
88
- expect(given.$tree).toHaveTreeStructure([expect.objectContaining({
89
- name: "node1",
90
- selected: true
91
- }), expect.objectContaining({
92
- name: "node2",
93
- selected: false
94
- })]);
95
- });
96
- });
97
- context("when no node is selected", function () {
98
- it("does nothing", function () {
99
- expect(given.$tree.tree("getSelectedNode")).toBe(false);
100
- });
101
- });
102
- });
103
- context("with key right", function () {
104
- given("pressedKey", function () {
105
- return KEY_RIGHT;
106
- });
107
- context("when a closed folder is selected", function () {
108
- given("initialSelectedNode", function () {
109
- return given.$tree.tree("getNodeByNameMustExist", "node1");
110
- });
111
- it("opens the folder", function () {
112
- expect(given.$tree).toHaveTreeStructure([expect.objectContaining({
113
- name: "node1",
114
- open: true,
115
- selected: true
116
- }), expect.objectContaining({
117
- name: "node2",
118
- open: false,
119
- selected: false
120
- })]);
121
- });
122
- });
123
- context("when an open folder is selected", function () {
124
- given("autoOpen", function () {
125
- return true;
126
- });
127
- given("initialSelectedNode", function () {
128
- return given.$tree.tree("getNodeByNameMustExist", "node1");
129
- });
130
- it("selects the first child", function () {
131
- expect(given.$tree).toHaveTreeStructure([expect.objectContaining({
132
- name: "node1",
133
- open: true,
134
- selected: false,
135
- children: [expect.objectContaining({
136
- name: "child1",
137
- selected: true
138
- }), expect.objectContaining({
139
- name: "child2",
140
- selected: false
141
- })]
142
- }), expect.objectContaining({
143
- name: "node2",
144
- selected: false
145
- })]);
146
- });
147
- });
148
- context("when no node is selected", function () {
149
- it("does nothing", function () {
150
- expect(given.$tree.tree("getSelectedNode")).toBe(false);
151
- });
152
- });
153
- context("when a child is selected", function () {
154
- given("initialSelectedNode", function () {
155
- return given.$tree.tree("getNodeByNameMustExist", "child1");
156
- });
157
- it("does nothing", function () {
158
- expect(given.$tree.tree("getSelectedNode")).toMatchObject({
159
- name: "child1"
160
- });
161
- });
162
- });
163
- });
164
- context("with key left", function () {
165
- given("pressedKey", function () {
166
- return KEY_LEFT;
167
- });
168
- context("when a closed folder is selected", function () {
169
- given("initialSelectedNode", function () {
170
- return given.$tree.tree("getNodeByNameMustExist", "node3");
171
- });
172
- it("selects the previous node", function () {
173
- expect(given.$tree).toHaveTreeStructure([expect.objectContaining({
174
- name: "node1",
175
- selected: false
176
- }), expect.objectContaining({
177
- name: "node2",
178
- selected: true,
179
- children: [expect.objectContaining({
180
- name: "node3",
181
- open: false,
182
- selected: false
183
- })]
184
- })]);
185
- });
186
- });
187
- context("when an open folder is selected", function () {
188
- given("autoOpen", function () {
189
- return true;
190
- });
191
- given("initialSelectedNode", function () {
192
- return given.$tree.tree("getNodeByNameMustExist", "node2");
193
- });
194
- it("closes the folder", function () {
195
- expect(given.$tree).toHaveTreeStructure([expect.objectContaining({
196
- name: "node1",
197
- open: true,
198
- selected: false
199
- }), expect.objectContaining({
200
- name: "node2",
201
- open: false,
202
- selected: true
203
- })]);
204
- });
205
- });
206
- context("when no node is selected", function () {
207
- it("does nothing", function () {
208
- expect(given.$tree.tree("getSelectedNode")).toBe(false);
209
- });
210
- });
211
- });
212
- context("with page up key", function () {
213
- given("pressedKey", function () {
214
- return KEY_PAGE_UP;
215
- });
216
- given("initialSelectedNode", function () {
217
- return given.$tree.tree("getNodeByNameMustExist", "child1");
218
- });
219
- it("does nothing", function () {
220
- expect(given.$tree.tree("getSelectedNode")).toMatchObject({
221
- name: "child1"
222
- });
223
- });
224
- });
225
- });