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
package/.eslintrc CHANGED
@@ -34,6 +34,7 @@
34
34
  "jest/no-hooks": "off",
35
35
  "jest/no-identical-title": "off",
36
36
  "jest/prefer-strict-equal": "off",
37
+ "jest/require-hook": "off",
37
38
  "jest/require-top-level-describe": "off"
38
39
  },
39
40
  "parserOptions": {
package/_config.yml CHANGED
@@ -11,7 +11,7 @@ collections:
11
11
  examples:
12
12
  output: true
13
13
 
14
- jqtree_version: 1.6.1
14
+ jqtree_version: 1.6.2
15
15
 
16
16
  # Build settings
17
17
  markdown: kramdown
@@ -3,6 +3,11 @@ title: Changelog
3
3
  name: changelog
4
4
  ---
5
5
 
6
+ #### 1.6.2 (december 15 2021)
7
+
8
+ - Issue #662: fix left alignment for option buttonLeft: false (thanks to Odungern)
9
+ - Issue #669: restore focus after load on demand (thanks to Jaccoky)
10
+
6
11
  #### 1.6.1 (june 24 2021)
7
12
 
8
13
  - Issues #652 and #655: add filter example
@@ -13,28 +13,6 @@
13
13
  <link rel="stylesheet" href="{{ site.baseurl }}/jqtree.css" />
14
14
  <link rel="stylesheet" href="{{ site.baseurl }}/static/monokai.css" />
15
15
  <link rel="stylesheet" href="{{ site.baseurl }}/static/bower_components/fontawesome/css/all.min.css" />
16
-
17
- <script>
18
- ;(function(i, s, o, g, r, a, m) {
19
- i["GoogleAnalyticsObject"] = r
20
- ;(i[r] =
21
- i[r] ||
22
- function() {
23
- ;(i[r].q = i[r].q || []).push(arguments)
24
- }),
25
- (i[r].l = 1 * new Date())
26
- ;(a = s.createElement(o)), (m = s.getElementsByTagName(o)[0])
27
- a.async = 1
28
- a.src = g
29
- m.parentNode.insertBefore(a, m)
30
- })(window, document, "script", "//www.google-analytics.com/analytics.js", "ga")
31
-
32
- ga("create", "UA-33742133-1", "auto")
33
- ga("require", "displayfeatures")
34
- ga("require", "linkid", "linkid.js")
35
- ga("send", "pageview")
36
- </script>
37
-
38
16
  {% if page.css %}
39
17
  <link rel="stylesheet" href="{{ site.baseurl }}/static/{{ page.css }}" />
40
18
  {% endif %}
@@ -0,0 +1,11 @@
1
+ {
2
+ "presets": ["@babel/preset-typescript", "@babel/preset-env"],
3
+ "env": {
4
+ "test": {
5
+ "presets": [
6
+ "@babel/preset-typescript",
7
+ ["@babel/preset-env", { "targets": { "node": "current" } }]
8
+ ]
9
+ }
10
+ }
11
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "presets": ["@babel/preset-typescript", "@babel/preset-env"],
3
+ "plugins": ["istanbul"]
4
+ }
package/bower.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jqTree",
3
- "version": "1.6.1",
3
+ "version": "1.6.2",
4
4
  "main": ["jqtree.css", "jqtree-circle.png", "tree.jquery.js"],
5
5
  "dependencies": {
6
6
  "jquery": ">=1.9"
@@ -8,9 +8,6 @@ module.exports = {
8
8
  preset: "jest-playwright-preset",
9
9
  testRegex: "\\/src\\/playwright\\/.*\\.test\\.ts",
10
10
  setupFilesAfterEnv: ["expect-playwright", "givens/setup.js"],
11
- transform: {
12
- "^.+\\.ts$": "ts-jest",
13
- },
14
11
  coveragePathIgnorePatterns: [
15
12
  "<rootDir>/node_modules/",
16
13
  "<rootDir>/src/playwright/",
@@ -5,11 +5,10 @@ module.exports = {
5
5
  "<rootDir>/_site/",
6
6
  "<rootDir>/static/",
7
7
  ],
8
- preset: "ts-jest",
9
8
  setupFilesAfterEnv: [
10
9
  "<rootDir>/src/test/support/setupTests.ts",
11
10
  "givens/setup.js",
12
- "jest-extended",
11
+ "jest-extended/all",
13
12
  ],
14
13
  testEnvironment: "jsdom",
15
14
  testRegex: "\\/src\\/test\\/.*\\.test\\.ts",
package/jqtree.css CHANGED
@@ -60,10 +60,13 @@ ul.jqtree-tree {
60
60
  ul.jqtree-tree .jqtree-title {
61
61
  color: #1c4257;
62
62
  vertical-align: middle;
63
+ }
64
+
65
+ ul.jqtree-tree .jqtree-title-button-left {
63
66
  margin-left: 1.5em;
64
67
  }
65
68
 
66
- ul.jqtree-tree .jqtree-title.jqtree-title-folder {
69
+ ul.jqtree-tree .jqtree-title-button-left.jqtree-title-folder {
67
70
  margin-left: 0;
68
71
  }
69
72
 
package/jqtree.postcss CHANGED
@@ -59,6 +59,9 @@ ul.jqtree-tree {
59
59
  .jqtree-title {
60
60
  color: #1c4257;
61
61
  vertical-align: middle;
62
+ }
63
+
64
+ .jqtree-title-button-left {
62
65
  margin-left: 1.5em;
63
66
 
64
67
  &.jqtree-title-folder {
package/lib/dataLoader.js CHANGED
@@ -1,102 +1,150 @@
1
1
  "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = void 0;
7
+
8
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
9
+
10
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
11
+
12
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
13
+
14
+ 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); } }
15
+
16
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
17
+
18
+ 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; }
19
+
20
+ var DataLoader = /*#__PURE__*/function () {
21
+ function DataLoader(treeWidget) {
22
+ _classCallCheck(this, DataLoader);
23
+
24
+ _defineProperty(this, "treeWidget", void 0);
25
+
26
+ this.treeWidget = treeWidget;
27
+ }
28
+
29
+ _createClass(DataLoader, [{
30
+ key: "loadFromUrl",
31
+ value: function loadFromUrl(urlInfo, parentNode, onFinished) {
32
+ var _this = this;
33
+
34
+ if (!urlInfo) {
35
+ return;
36
+ }
37
+
38
+ var $el = this.getDomElement(parentNode);
39
+ this.addLoadingClass($el);
40
+ this.notifyLoading(true, parentNode, $el);
41
+
42
+ var stopLoading = function stopLoading() {
43
+ _this.removeLoadingClass($el);
44
+
45
+ _this.notifyLoading(false, parentNode, $el);
46
+ };
47
+
48
+ var handleSuccess = function handleSuccess(data) {
49
+ stopLoading();
50
+
51
+ _this.treeWidget.loadData(_this.parseData(data), parentNode);
52
+
53
+ if (onFinished && typeof onFinished === "function") {
54
+ onFinished();
8
55
  }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
- exports.__esModule = true;
14
- var DataLoader = /** @class */ (function () {
15
- function DataLoader(treeWidget) {
16
- this.treeWidget = treeWidget;
17
- }
18
- DataLoader.prototype.loadFromUrl = function (urlInfo, parentNode, onFinished) {
19
- var _this = this;
20
- if (!urlInfo) {
21
- return;
22
- }
23
- var $el = this.getDomElement(parentNode);
24
- this.addLoadingClass($el);
25
- this.notifyLoading(true, parentNode, $el);
26
- var stopLoading = function () {
27
- _this.removeLoadingClass($el);
28
- _this.notifyLoading(false, parentNode, $el);
29
- };
30
- var handleSuccess = function (data) {
31
- stopLoading();
32
- _this.treeWidget.loadData(_this.parseData(data), parentNode);
33
- if (onFinished && typeof onFinished === "function") {
34
- onFinished();
35
- }
36
- };
37
- var handleError = function (jqXHR) {
38
- stopLoading();
39
- if (_this.treeWidget.options.onLoadFailed) {
40
- _this.treeWidget.options.onLoadFailed(jqXHR);
41
- }
42
- };
43
- this.submitRequest(urlInfo, handleSuccess, handleError);
44
- };
45
- DataLoader.prototype.addLoadingClass = function ($el) {
46
- if ($el) {
47
- $el.addClass("jqtree-loading");
48
- }
49
- };
50
- DataLoader.prototype.removeLoadingClass = function ($el) {
51
- if ($el) {
52
- $el.removeClass("jqtree-loading");
53
- }
54
- };
55
- DataLoader.prototype.getDomElement = function (parentNode) {
56
- if (parentNode) {
57
- return jQuery(parentNode.element);
58
- }
59
- else {
60
- return this.treeWidget.element;
61
- }
62
- };
63
- DataLoader.prototype.notifyLoading = function (isLoading, node, $el) {
64
- if (this.treeWidget.options.onLoading) {
65
- this.treeWidget.options.onLoading(isLoading, node, $el);
66
- }
67
- this.treeWidget._triggerEvent("tree.loading_data", {
68
- isLoading: isLoading,
69
- node: node,
70
- $el: $el
71
- });
72
- };
73
- DataLoader.prototype.submitRequest = function (urlInfoInput, handleSuccess, handleError) {
74
- var _a;
75
- var urlInfo = typeof urlInfoInput === "string"
76
- ? { url: urlInfoInput }
77
- : urlInfoInput;
78
- var ajaxSettings = __assign({ method: "GET", cache: false, dataType: "json", success: handleSuccess, error: handleError }, urlInfo);
79
- ajaxSettings.method = ((_a = ajaxSettings.method) === null || _a === void 0 ? void 0 : _a.toUpperCase()) || "GET";
80
- void jQuery.ajax(ajaxSettings);
81
- };
82
- DataLoader.prototype.parseData = function (data) {
83
- var dataFilter = this.treeWidget.options.dataFilter;
84
- var getParsedData = function () {
85
- if (typeof data === "string") {
86
- return JSON.parse(data);
87
- }
88
- else {
89
- return data;
90
- }
91
- };
92
- var parsedData = getParsedData();
93
- if (dataFilter) {
94
- return dataFilter(parsedData);
56
+ };
57
+
58
+ var handleError = function handleError(jqXHR) {
59
+ stopLoading();
60
+
61
+ if (_this.treeWidget.options.onLoadFailed) {
62
+ _this.treeWidget.options.onLoadFailed(jqXHR);
95
63
  }
96
- else {
97
- return parsedData;
64
+ };
65
+
66
+ this.submitRequest(urlInfo, handleSuccess, handleError);
67
+ }
68
+ }, {
69
+ key: "addLoadingClass",
70
+ value: function addLoadingClass($el) {
71
+ if ($el) {
72
+ $el.addClass("jqtree-loading");
73
+ }
74
+ }
75
+ }, {
76
+ key: "removeLoadingClass",
77
+ value: function removeLoadingClass($el) {
78
+ if ($el) {
79
+ $el.removeClass("jqtree-loading");
80
+ }
81
+ }
82
+ }, {
83
+ key: "getDomElement",
84
+ value: function getDomElement(parentNode) {
85
+ if (parentNode) {
86
+ return jQuery(parentNode.element);
87
+ } else {
88
+ return this.treeWidget.element;
89
+ }
90
+ }
91
+ }, {
92
+ key: "notifyLoading",
93
+ value: function notifyLoading(isLoading, node, $el) {
94
+ if (this.treeWidget.options.onLoading) {
95
+ this.treeWidget.options.onLoading(isLoading, node, $el);
96
+ }
97
+
98
+ this.treeWidget._triggerEvent("tree.loading_data", {
99
+ isLoading: isLoading,
100
+ node: node,
101
+ $el: $el
102
+ });
103
+ }
104
+ }, {
105
+ key: "submitRequest",
106
+ value: function submitRequest(urlInfoInput, handleSuccess, handleError) {
107
+ var _ajaxSettings$method;
108
+
109
+ var urlInfo = typeof urlInfoInput === "string" ? {
110
+ url: urlInfoInput
111
+ } : urlInfoInput;
112
+
113
+ var ajaxSettings = _objectSpread({
114
+ method: "GET",
115
+ cache: false,
116
+ dataType: "json",
117
+ success: handleSuccess,
118
+ error: handleError
119
+ }, urlInfo);
120
+
121
+ ajaxSettings.method = ((_ajaxSettings$method = ajaxSettings.method) === null || _ajaxSettings$method === void 0 ? void 0 : _ajaxSettings$method.toUpperCase()) || "GET";
122
+ void jQuery.ajax(ajaxSettings);
123
+ }
124
+ }, {
125
+ key: "parseData",
126
+ value: function parseData(data) {
127
+ var dataFilter = this.treeWidget.options.dataFilter;
128
+
129
+ var getParsedData = function getParsedData() {
130
+ if (typeof data === "string") {
131
+ return JSON.parse(data);
132
+ } else {
133
+ return data;
98
134
  }
99
- };
100
- return DataLoader;
101
- }());
102
- exports["default"] = DataLoader;
135
+ };
136
+
137
+ var parsedData = getParsedData();
138
+
139
+ if (dataFilter) {
140
+ return dataFilter(parsedData);
141
+ } else {
142
+ return parsedData;
143
+ }
144
+ }
145
+ }]);
146
+
147
+ return DataLoader;
148
+ }();
149
+
150
+ exports["default"] = DataLoader;