jqtree 1.8.2 → 1.8.3

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 (222) hide show
  1. package/bower.json +1 -1
  2. package/package.json +20 -19
  3. package/src/dragAndDropHandler/generateHitAreas.ts +47 -43
  4. package/src/nodeElement/ghostDropHint.ts +3 -37
  5. package/src/nodeElement/index.ts +1 -1
  6. package/src/saveStateHandler.ts +43 -59
  7. package/src/version.ts +1 -1
  8. package/tree.jquery.debug.js +69 -106
  9. package/tree.jquery.debug.js.map +1 -1
  10. package/tree.jquery.js +2 -2
  11. package/tree.jquery.js.map +1 -1
  12. package/.editorconfig +0 -12
  13. package/.eslintrc +0 -48
  14. package/.github/workflows/ci.yml +0 -68
  15. package/.github/workflows/codeql-analysis.yml +0 -32
  16. package/.github/workflows/size.yml +0 -24
  17. package/.github/workflows/static.yml +0 -57
  18. package/.prettier +0 -3
  19. package/config/.postcssrc +0 -6
  20. package/config/babel.config.json +0 -11
  21. package/config/babel.coverage.config.json +0 -4
  22. package/config/jest.config.js +0 -24
  23. package/config/jest.polyfills.js +0 -14
  24. package/config/playwright.config.js +0 -18
  25. package/config/production +0 -6
  26. package/config/rollup.config.mjs +0 -71
  27. package/css/jqtree.postcss +0 -193
  28. package/devserver/devserver.js +0 -7
  29. package/devserver/devserver_scroll.js +0 -8
  30. package/devserver/index.html +0 -22
  31. package/devserver/test_index.html +0 -22
  32. package/devserver/test_scroll.html +0 -28
  33. package/devserver/test_scroll_container.html +0 -39
  34. package/docs/.ruby-version +0 -1
  35. package/docs/Gemfile +0 -5
  36. package/docs/Gemfile.lock +0 -82
  37. package/docs/_config.yml +0 -126
  38. package/docs/_entries/events/index.md +0 -6
  39. package/docs/_entries/events/tree-click.md +0 -37
  40. package/docs/_entries/events/tree-close.md +0 -15
  41. package/docs/_entries/events/tree-contextmenu.md +0 -21
  42. package/docs/_entries/events/tree-dblclick.md +0 -19
  43. package/docs/_entries/events/tree-init.md +0 -15
  44. package/docs/_entries/events/tree-load-data.md +0 -15
  45. package/docs/_entries/events/tree-loading-data.md +0 -27
  46. package/docs/_entries/events/tree-move.md +0 -73
  47. package/docs/_entries/events/tree-open.md +0 -15
  48. package/docs/_entries/events/tree-refresh.md +0 -12
  49. package/docs/_entries/events/tree-select.md +0 -28
  50. package/docs/_entries/functions/addnodeafter.md +0 -20
  51. package/docs/_entries/functions/addnodebefore.md +0 -8
  52. package/docs/_entries/functions/addparentnode.md +0 -20
  53. package/docs/_entries/functions/appendnode.md +0 -50
  54. package/docs/_entries/functions/closenode.md +0 -23
  55. package/docs/_entries/functions/destroy.md +0 -12
  56. package/docs/_entries/functions/getnodebycallback.md +0 -24
  57. package/docs/_entries/functions/getnodebyhtmlelement.md +0 -29
  58. package/docs/_entries/functions/getnodebyid.md +0 -21
  59. package/docs/_entries/functions/getselectednode.md +0 -10
  60. package/docs/_entries/functions/getstate.md +0 -19
  61. package/docs/_entries/functions/gettree.md +0 -12
  62. package/docs/_entries/functions/index.md +0 -6
  63. package/docs/_entries/functions/is-node-selected.md +0 -11
  64. package/docs/_entries/functions/isdragging.md +0 -12
  65. package/docs/_entries/functions/loaddata.md +0 -46
  66. package/docs/_entries/functions/loaddatafromurl.md +0 -55
  67. package/docs/_entries/functions/movedown.md +0 -8
  68. package/docs/_entries/functions/movenode.md +0 -15
  69. package/docs/_entries/functions/moveup.md +0 -8
  70. package/docs/_entries/functions/opennode.md +0 -44
  71. package/docs/_entries/functions/prependnode.md +0 -21
  72. package/docs/_entries/functions/refresh.md +0 -12
  73. package/docs/_entries/functions/reload.md +0 -22
  74. package/docs/_entries/functions/removenode.md +0 -12
  75. package/docs/_entries/functions/scrolltonode.md +0 -13
  76. package/docs/_entries/functions/selectnode.md +0 -45
  77. package/docs/_entries/functions/setoption.md +0 -12
  78. package/docs/_entries/functions/setstate.md +0 -8
  79. package/docs/_entries/functions/toggle.md +0 -25
  80. package/docs/_entries/functions/tojson.md +0 -13
  81. package/docs/_entries/functions/updatenode.md +0 -50
  82. package/docs/_entries/general/changelog.md +0 -434
  83. package/docs/_entries/general/demo.html +0 -28
  84. package/docs/_entries/general/downloads.md +0 -9
  85. package/docs/_entries/general/examples.md +0 -8
  86. package/docs/_entries/general/features.md +0 -15
  87. package/docs/_entries/general/index.md +0 -7
  88. package/docs/_entries/general/introduction.md +0 -9
  89. package/docs/_entries/general/requirements.md +0 -6
  90. package/docs/_entries/general/tutorial.md +0 -71
  91. package/docs/_entries/general/usecases.md +0 -15
  92. package/docs/_entries/multiple_selection/add-to-selection.md +0 -21
  93. package/docs/_entries/multiple_selection/get-selected-nodes.md +0 -10
  94. package/docs/_entries/multiple_selection/index.md +0 -9
  95. package/docs/_entries/multiple_selection/remove-from-selection.md +0 -11
  96. package/docs/_entries/node/children.md +0 -12
  97. package/docs/_entries/node/getdata.md +0 -17
  98. package/docs/_entries/node/getlevel.md +0 -13
  99. package/docs/_entries/node/getnextnode.md +0 -12
  100. package/docs/_entries/node/getnextsibling.md +0 -10
  101. package/docs/_entries/node/getnextvisiblenode.md +0 -15
  102. package/docs/_entries/node/getpreviousnode.md +0 -12
  103. package/docs/_entries/node/getprevioussibling.md +0 -10
  104. package/docs/_entries/node/getpreviousvisiblenode.md +0 -15
  105. package/docs/_entries/node/index.md +0 -13
  106. package/docs/_entries/node/parent.md +0 -10
  107. package/docs/_entries/options/animationspeed.md +0 -7
  108. package/docs/_entries/options/autoescape.md +0 -6
  109. package/docs/_entries/options/autoopen.md +0 -28
  110. package/docs/_entries/options/buttonleft.md +0 -12
  111. package/docs/_entries/options/closedicon.md +0 -26
  112. package/docs/_entries/options/data-url.md +0 -45
  113. package/docs/_entries/options/data.md +0 -46
  114. package/docs/_entries/options/datafilter.md +0 -17
  115. package/docs/_entries/options/draganddrop.md +0 -18
  116. package/docs/_entries/options/index.md +0 -6
  117. package/docs/_entries/options/keyboardsupport.md +0 -14
  118. package/docs/_entries/options/oncanmove.md +0 -22
  119. package/docs/_entries/options/oncanmoveto.md +0 -22
  120. package/docs/_entries/options/oncanselectnode.md +0 -26
  121. package/docs/_entries/options/oncreateli.md +0 -22
  122. package/docs/_entries/options/ondragmove.md +0 -20
  123. package/docs/_entries/options/ondragstop.md +0 -20
  124. package/docs/_entries/options/onismovehandle.md +0 -17
  125. package/docs/_entries/options/onloadfailed.md +0 -15
  126. package/docs/_entries/options/onloading.md +0 -22
  127. package/docs/_entries/options/openedicon.md +0 -26
  128. package/docs/_entries/options/openfolderdelay.md +0 -15
  129. package/docs/_entries/options/rtl.md +0 -18
  130. package/docs/_entries/options/savestate.md +0 -39
  131. package/docs/_entries/options/selectable.md +0 -18
  132. package/docs/_entries/options/showemptyfolder.md +0 -26
  133. package/docs/_entries/options/slide.md +0 -12
  134. package/docs/_entries/options/start_dnd_delay.md +0 -13
  135. package/docs/_entries/options/tabindex.md +0 -14
  136. package/docs/_entries/options/usecontextmenu.md +0 -14
  137. package/docs/_examples/01_load_json_data.html +0 -45
  138. package/docs/_examples/02_load_json_data_from_server.html +0 -29
  139. package/docs/_examples/03_drag_and_drop.html +0 -42
  140. package/docs/_examples/04_save_state.html +0 -46
  141. package/docs/_examples/05_load_on_demand.html +0 -68
  142. package/docs/_examples/06_autoescape.html +0 -45
  143. package/docs/_examples/07_autoscroll.html +0 -42
  144. package/docs/_examples/08_multiple_select.html +0 -60
  145. package/docs/_examples/09_custom_html.html +0 -61
  146. package/docs/_examples/10_icon_buttons.html +0 -26
  147. package/docs/_examples/11_right-to-left.html +0 -25
  148. package/docs/_examples/12_button_on_right.html +0 -26
  149. package/docs/_examples/13_drag_outside.html +0 -48
  150. package/docs/_examples/14_filter.html +0 -111
  151. package/docs/_layouts/example.html +0 -7
  152. package/docs/_layouts/page.html +0 -26
  153. package/docs/documentation.css +0 -3
  154. package/docs/index.html +0 -65
  155. package/docs/package.json +0 -22
  156. package/docs/pnpm-lock.yaml +0 -892
  157. package/docs/postcss.config.js +0 -7
  158. package/docs/static/bower.json +0 -8
  159. package/docs/static/bower_components/fontawesome/css/all.min.css +0 -9
  160. package/docs/static/bower_components/fontawesome/webfonts/fa-brands-400.ttf +0 -0
  161. package/docs/static/bower_components/fontawesome/webfonts/fa-brands-400.woff2 +0 -0
  162. package/docs/static/bower_components/fontawesome/webfonts/fa-regular-400.ttf +0 -0
  163. package/docs/static/bower_components/fontawesome/webfonts/fa-regular-400.woff2 +0 -0
  164. package/docs/static/bower_components/fontawesome/webfonts/fa-solid-900.ttf +0 -0
  165. package/docs/static/bower_components/fontawesome/webfonts/fa-solid-900.woff2 +0 -0
  166. package/docs/static/bower_components/fontawesome/webfonts/fa-v4compatibility.ttf +0 -0
  167. package/docs/static/bower_components/fontawesome/webfonts/fa-v4compatibility.woff2 +0 -0
  168. package/docs/static/bower_components/jquery/dist/jquery.js +0 -10704
  169. package/docs/static/bower_components/jquery/dist/jquery.min.js +0 -2
  170. package/docs/static/bower_components/jquery-mockjax/dist/jquery.mockjax.js +0 -1061
  171. package/docs/static/documentation.js +0 -26
  172. package/docs/static/example.postcss +0 -68
  173. package/docs/static/example_data.js +0 -122
  174. package/docs/static/examples/autoescape.js +0 -17
  175. package/docs/static/examples/autoscroll.js +0 -6
  176. package/docs/static/examples/button-on-right.js +0 -13
  177. package/docs/static/examples/custom_html.js +0 -27
  178. package/docs/static/examples/drag-outside.js +0 -37
  179. package/docs/static/examples/drag_and_drop.js +0 -13
  180. package/docs/static/examples/filter.js +0 -63
  181. package/docs/static/examples/icon_buttons.js +0 -12
  182. package/docs/static/examples/load_json_data.js +0 -16
  183. package/docs/static/examples/load_json_data_from_server.js +0 -9
  184. package/docs/static/examples/load_on_demand.js +0 -19
  185. package/docs/static/examples/multiple_select.js +0 -23
  186. package/docs/static/examples/right-to-left.js +0 -11
  187. package/docs/static/examples/save_state.js +0 -11
  188. package/docs/static/monokai.css +0 -70
  189. package/docs/static/spinner.gif +0 -0
  190. package/docs/tailwind.config.js +0 -16
  191. package/sitemap.txt +0 -14
  192. package/src/playwright/.eslintrc +0 -5
  193. package/src/playwright/coverage.ts +0 -38
  194. package/src/playwright/playwright.test.ts +0 -401
  195. package/src/playwright/playwright.test.ts-snapshots/with-dragAndDrop-moves-a-node-1-Chromium-darwin.png +0 -0
  196. package/src/playwright/playwright.test.ts-snapshots/with-dragAndDrop-moves-a-node-1-Chromium-linux.png +0 -0
  197. package/src/playwright/playwright.test.ts-snapshots/without-dragAndDrop-displays-a-tree-1-Chromium-darwin.png +0 -0
  198. package/src/playwright/playwright.test.ts-snapshots/without-dragAndDrop-displays-a-tree-1-Chromium-linux.png +0 -0
  199. package/src/playwright/playwright.test.ts-snapshots/without-dragAndDrop-selects-a-node-1-Chromium-darwin.png +0 -0
  200. package/src/playwright/playwright.test.ts-snapshots/without-dragAndDrop-selects-a-node-1-Chromium-linux.png +0 -0
  201. package/src/playwright/testUtils.ts +0 -153
  202. package/src/test/.eslintrc +0 -17
  203. package/src/test/global.d.ts +0 -1
  204. package/src/test/jqTree/accessibility.test.ts +0 -25
  205. package/src/test/jqTree/create.test.ts +0 -54
  206. package/src/test/jqTree/events.test.ts +0 -290
  207. package/src/test/jqTree/keyboard.test.ts +0 -247
  208. package/src/test/jqTree/loadOnDemand.test.ts +0 -198
  209. package/src/test/jqTree/methods.test.ts +0 -1491
  210. package/src/test/jqTree/mouse.test.ts +0 -82
  211. package/src/test/jqTree/options.test.ts +0 -595
  212. package/src/test/node.test.ts +0 -1396
  213. package/src/test/nodeUtils.test.ts +0 -21
  214. package/src/test/position.test.ts +0 -30
  215. package/src/test/support/exampleData.ts +0 -23
  216. package/src/test/support/jqTreeMatchers.ts +0 -68
  217. package/src/test/support/matchers.d.ts +0 -31
  218. package/src/test/support/setupTests.ts +0 -5
  219. package/src/test/support/testUtil.ts +0 -30
  220. package/src/test/support/treeStructure.ts +0 -39
  221. package/src/test/util.test.ts +0 -27
  222. package/tsconfig.json +0 -24
package/bower.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jqTree",
3
- "version": "1.8.2",
3
+ "version": "1.8.3",
4
4
  "main": [
5
5
  "jqtree.css",
6
6
  "jqtree-circle.png",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jqtree",
3
- "version": "1.8.2",
3
+ "version": "1.8.3",
4
4
  "description": "Tree widget for jQuery",
5
5
  "keywords": [
6
6
  "jquery-plugin",
@@ -35,11 +35,12 @@
35
35
  "jquery": "^3"
36
36
  },
37
37
  "devDependencies": {
38
- "@babel/cli": "^7.23.9",
39
- "@babel/core": "^7.23.9",
40
- "@babel/preset-env": "^7.23.9",
41
- "@babel/preset-typescript": "^7.23.3",
42
- "@playwright/test": "^1.41.2",
38
+ "@babel/cli": "^7.24.1",
39
+ "@babel/core": "^7.24.4",
40
+ "@babel/preset-env": "^7.24.4",
41
+ "@babel/preset-typescript": "^7.24.1",
42
+ "@codecov/rollup-plugin": "0.0.1-beta.5",
43
+ "@playwright/test": "^1.43.0",
43
44
  "@rollup/plugin-babel": "^6.0.4",
44
45
  "@rollup/plugin-node-resolve": "^15.2.3",
45
46
  "@rollup/plugin-terser": "^0.4.4",
@@ -49,17 +50,17 @@
49
50
  "@types/jest": "^29.5.12",
50
51
  "@types/jest-axe": "^3.5.9",
51
52
  "@types/jquery": "^3.5.29",
52
- "@types/node": "^20.11.19",
53
- "@typescript-eslint/eslint-plugin": "^7.0.1",
54
- "@typescript-eslint/parser": "^7.0.1",
55
- "autoprefixer": "^10.4.17",
53
+ "@types/node": "^20.12.5",
54
+ "@typescript-eslint/eslint-plugin": "^7.5.0",
55
+ "@typescript-eslint/parser": "^7.5.0",
56
+ "autoprefixer": "^10.4.19",
56
57
  "babel-jest": "^29.7.0",
57
58
  "babel-plugin-istanbul": "^6.1.1",
58
- "eslint": "^8.56.0",
59
+ "eslint": "^8.57.0",
59
60
  "eslint-import-resolver-typescript": "^3.6.1",
60
61
  "eslint-plugin-import": "^2.29.1",
61
62
  "eslint-plugin-jest": "^27.9.0",
62
- "eslint-plugin-playwright": "^1.1.2",
63
+ "eslint-plugin-playwright": "^1.5.4",
63
64
  "eslint-plugin-testing-library": "^6.2.0",
64
65
  "givens": "^1.3.9",
65
66
  "graphql": "^16.8.1",
@@ -68,18 +69,18 @@
68
69
  "jest-environment-jsdom": "^29.7.0",
69
70
  "jest-extended": "^4.0.2",
70
71
  "jsonfile": "^6.1.0",
71
- "lodash.template": "^4.5.0",
72
- "msw": "^2.2.1",
73
- "postcss": "^8.4.35",
72
+ "lodash": "^4.17.21",
73
+ "msw": "^2.2.13",
74
+ "postcss": "^8.4.38",
74
75
  "postcss-cli": "^11.0.0",
75
- "postcss-import": "^16.0.1",
76
+ "postcss-import": "^16.1.0",
76
77
  "postcss-load-config": "^5.0.3",
77
78
  "postcss-nested": "^6.0.1",
78
79
  "prettier": "^3.2.5",
79
- "rollup": "^4.12.0",
80
+ "rollup": "^4.14.0",
80
81
  "rollup-plugin-serve": "^3.0.0",
81
82
  "tslib": "^2.6.2",
82
- "typescript": "^5.3.3",
83
- "undici": "^5.28.3"
83
+ "typescript": "^5.4.4",
84
+ "undici": "^5.28.4"
84
85
  }
85
86
  }
@@ -4,28 +4,34 @@ import { Position } from "../position";
4
4
  import { getOffsetTop } from "../util";
5
5
  import iterateVisibleNodes from "./iterateVisibleNodes";
6
6
 
7
- const generatePositions = (tree: Node, currentNode: Node): HitArea[] => {
8
- const positions: HitArea[] = [];
7
+ interface HitPosition {
8
+ top: number;
9
+ node: Node;
10
+ position: Position;
11
+ }
12
+
13
+ export const generateHitPositions = (
14
+ tree: Node,
15
+ currentNode: Node,
16
+ ): HitPosition[] => {
17
+ const hitPositions: HitPosition[] = [];
9
18
  let lastTop = 0;
10
19
 
11
- const addPosition = (node: Node, position: number, top: number) => {
12
- const area = {
20
+ const addHitPosition = (node: Node, position: number, top: number) => {
21
+ hitPositions.push({
13
22
  top,
14
- bottom: 0,
15
23
  node,
16
24
  position,
17
- };
18
-
19
- positions.push(area);
25
+ });
20
26
  lastTop = top;
21
27
  };
22
28
 
23
29
  const handleAfterOpenFolder = (node: Node, nextNode: Node | null) => {
24
30
  if (node === currentNode || nextNode === currentNode) {
25
31
  // Cannot move before or after current item
26
- addPosition(node, Position.None, lastTop);
32
+ addHitPosition(node, Position.None, lastTop);
27
33
  } else {
28
- addPosition(node, Position.After, lastTop);
34
+ addHitPosition(node, Position.After, lastTop);
29
35
  }
30
36
  };
31
37
 
@@ -38,20 +44,20 @@ const generatePositions = (tree: Node, currentNode: Node): HitArea[] => {
38
44
 
39
45
  if (node === currentNode) {
40
46
  // Cannot move after current item
41
- addPosition(node, Position.None, top);
47
+ addHitPosition(node, Position.None, top);
42
48
  } else {
43
- addPosition(node, Position.Inside, top);
49
+ addHitPosition(node, Position.Inside, top);
44
50
 
45
51
  // Cannot move before current item
46
52
  if (nextNode !== currentNode) {
47
- addPosition(node, Position.After, top);
53
+ addHitPosition(node, Position.After, top);
48
54
  }
49
55
  }
50
56
  };
51
57
 
52
58
  const handleFirstNode = (node: Node) => {
53
59
  if (node !== currentNode) {
54
- addPosition(node, Position.Before, getOffsetTop(node.element));
60
+ addHitPosition(node, Position.Before, getOffsetTop(node.element));
55
61
  }
56
62
  };
57
63
 
@@ -64,16 +70,16 @@ const generatePositions = (tree: Node, currentNode: Node): HitArea[] => {
64
70
 
65
71
  if (node === currentNode) {
66
72
  // Cannot move inside current item
67
- addPosition(node, Position.None, top);
73
+ addHitPosition(node, Position.None, top);
68
74
  } else {
69
- addPosition(node, Position.Inside, top);
75
+ addHitPosition(node, Position.Inside, top);
70
76
  }
71
77
 
72
78
  if (nextNode === currentNode || node === currentNode) {
73
79
  // Cannot move before or after current item
74
- addPosition(node, Position.None, top);
80
+ addHitPosition(node, Position.None, top);
75
81
  } else {
76
- addPosition(node, Position.After, top);
82
+ addHitPosition(node, Position.After, top);
77
83
  }
78
84
  };
79
85
 
@@ -84,11 +90,11 @@ const generatePositions = (tree: Node, currentNode: Node): HitArea[] => {
84
90
  // Dnd over the current element is not possible: add a position with type None for the top and the bottom.
85
91
  const top = getOffsetTop(element);
86
92
  const height = element.clientHeight;
87
- addPosition(node, Position.None, top);
93
+ addHitPosition(node, Position.None, top);
88
94
 
89
95
  if (height > 5) {
90
96
  // Subtract 5 pixels to allow more space for the next element.
91
- addPosition(node, Position.None, top + height - 5);
97
+ addHitPosition(node, Position.None, top + height - 5);
92
98
  }
93
99
 
94
100
  // Stop iterating
@@ -97,7 +103,7 @@ const generatePositions = (tree: Node, currentNode: Node): HitArea[] => {
97
103
 
98
104
  // Cannot move before current item
99
105
  if (node.children[0] !== currentNode) {
100
- addPosition(node, Position.Inside, getOffsetTop(element));
106
+ addHitPosition(node, Position.Inside, getOffsetTop(element));
101
107
  }
102
108
 
103
109
  // Continue iterating
@@ -112,12 +118,12 @@ const generatePositions = (tree: Node, currentNode: Node): HitArea[] => {
112
118
  handleOpenFolder,
113
119
  });
114
120
 
115
- return positions;
121
+ return hitPositions;
116
122
  };
117
123
 
118
- const generateHitAreasForGroup = (
124
+ export const generateHitAreasForGroup = (
119
125
  hitAreas: HitArea[],
120
- positionsInGroup: HitArea[],
126
+ positionsInGroup: HitPosition[],
121
127
  top: number,
122
128
  bottom: number,
123
129
  ) => {
@@ -127,11 +133,10 @@ const generateHitAreasForGroup = (
127
133
  const areaHeight = Math.round((bottom - top) / positionCount);
128
134
  let areaTop = top;
129
135
 
130
- let i = 0;
131
- while (i < positionCount) {
132
- const position = positionsInGroup[i];
136
+ for (let i = 0; i < positionCount; i++) {
137
+ const position = positionsInGroup[i] as HitPosition;
133
138
 
134
- if (position && position.position !== Position.None) {
139
+ if (position.position !== Position.None) {
135
140
  hitAreas.push({
136
141
  top: areaTop,
137
142
  bottom: areaTop + areaHeight,
@@ -141,19 +146,22 @@ const generateHitAreasForGroup = (
141
146
  }
142
147
 
143
148
  areaTop += areaHeight;
144
- i += 1;
145
149
  }
146
150
  };
147
151
 
148
- const generateHitAreasFromPositions = (
149
- positions: HitArea[],
152
+ export const generateHitAreasFromPositions = (
153
+ hitPositions: HitPosition[],
150
154
  treeBottom: number,
151
155
  ): HitArea[] => {
152
- let previousTop = positions[0]?.top ?? 0;
153
- let group = [];
156
+ if (!hitPositions.length) {
157
+ return [];
158
+ }
159
+
160
+ let previousTop = (hitPositions[0] as HitPosition).top;
161
+ let group: HitPosition[] = [];
154
162
  const hitAreas: HitArea[] = [];
155
163
 
156
- for (const position of positions) {
164
+ for (const position of hitPositions) {
157
165
  if (position.top !== previousTop && group.length) {
158
166
  generateHitAreasForGroup(
159
167
  hitAreas,
@@ -174,14 +182,10 @@ const generateHitAreasFromPositions = (
174
182
  return hitAreas;
175
183
  };
176
184
 
177
- const generateHitAreas = (
178
- tree: Node,
179
- currentNode: Node,
180
- treeBottom: number,
181
- ) => {
182
- const positions = generatePositions(tree, currentNode);
183
-
184
- return generateHitAreasFromPositions(positions, treeBottom);
185
- };
185
+ const generateHitAreas = (tree: Node, currentNode: Node, treeBottom: number) =>
186
+ generateHitAreasFromPositions(
187
+ generateHitPositions(tree, currentNode),
188
+ treeBottom,
189
+ );
186
190
 
187
191
  export default generateHitAreas;
@@ -1,55 +1,21 @@
1
- import { Node } from "../node";
2
- import { Position } from "../position";
3
1
  import { DropHint } from "../dragAndDropHandler/types";
4
2
 
5
3
  class GhostDropHint implements DropHint {
6
4
  private element: HTMLElement;
7
- private node: Node;
8
5
  private ghost: HTMLElement;
9
6
 
10
- constructor(node: Node, element: HTMLElement, position: Position) {
7
+ constructor(element: HTMLElement) {
11
8
  this.element = element;
12
- this.node = node;
13
9
  this.ghost = this.createGhostElement();
14
10
 
15
- if (position === Position.After) {
16
- this.moveAfter();
17
- } else if (position === Position.Before) {
18
- this.moveBefore();
19
- } else if (position === Position.Inside) {
20
- if (node.isFolder() && node.is_open) {
21
- this.moveInsideOpenFolder();
22
- } else {
23
- this.moveInside();
24
- }
25
- }
11
+ this.element.after(this.ghost);
12
+ this.ghost.classList.add("jqtree-inside");
26
13
  }
27
14
 
28
15
  public remove(): void {
29
16
  this.ghost.remove();
30
17
  }
31
18
 
32
- private moveAfter(): void {
33
- this.element.after(this.ghost);
34
- }
35
-
36
- private moveBefore(): void {
37
- this.element.before(this.ghost);
38
- }
39
-
40
- private moveInsideOpenFolder(): void {
41
- const childElement = this.node.children[0]?.element;
42
-
43
- if (childElement) {
44
- childElement.before(this.ghost);
45
- }
46
- }
47
-
48
- private moveInside(): void {
49
- this.element.after(this.ghost);
50
- this.ghost.classList.add("jqtree-inside");
51
- }
52
-
53
19
  private createGhostElement() {
54
20
  const ghost = document.createElement("li");
55
21
  ghost.className = "jqtree_common jqtree-ghost";
@@ -52,7 +52,7 @@ class NodeElement {
52
52
  if (this.mustShowBorderDropHint(position)) {
53
53
  return new BorderDropHint(this.element, this.getScrollLeft());
54
54
  } else {
55
- return new GhostDropHint(this.node, this.element, position);
55
+ return new GhostDropHint(this.element);
56
56
  }
57
57
  }
58
58
 
@@ -147,21 +147,54 @@ export default class SaveStateHandler {
147
147
  state: SavedState,
148
148
  cbFinished: () => void,
149
149
  ): void {
150
- if (state) {
151
- this.doSetInitialStateOnDemand(
152
- state.open_nodes,
153
- state.selected_node,
154
- cbFinished,
155
- );
156
- } else {
157
- cbFinished();
158
- }
150
+ let loadingCount = 0;
151
+ let nodeIds = state.open_nodes;
152
+
153
+ const openNodes = (): void => {
154
+ const newNodesIds = [];
155
+
156
+ for (const nodeId of nodeIds) {
157
+ const node = this.getNodeById(nodeId);
158
+
159
+ if (!node) {
160
+ newNodesIds.push(nodeId);
161
+ } else {
162
+ if (!node.is_loading) {
163
+ if (node.load_on_demand) {
164
+ loadAndOpenNode(node);
165
+ } else {
166
+ this.openNode(node, false);
167
+ }
168
+ }
169
+ }
170
+ }
171
+
172
+ nodeIds = newNodesIds;
173
+
174
+ if (this.selectInitialNodes(state.selected_node)) {
175
+ this.refreshElements(null);
176
+ }
177
+
178
+ if (loadingCount === 0) {
179
+ cbFinished();
180
+ }
181
+ };
182
+
183
+ const loadAndOpenNode = (node: Node): void => {
184
+ loadingCount += 1;
185
+ this.openNode(node, false, () => {
186
+ loadingCount -= 1;
187
+ openNodes();
188
+ });
189
+ };
190
+
191
+ openNodes();
159
192
  }
160
193
 
161
194
  public getNodeIdToBeSelected(): NodeId | null {
162
195
  const state = this.getStateFromStorage();
163
196
 
164
- if (state && state.selected_node) {
197
+ if (state?.selected_node) {
165
198
  return state.selected_node[0] || null;
166
199
  } else {
167
200
  return null;
@@ -232,55 +265,6 @@ export default class SaveStateHandler {
232
265
  });
233
266
  }
234
267
 
235
- private doSetInitialStateOnDemand(
236
- nodeIdsParam: NodeId[],
237
- selectedNodes: NodeId[],
238
- cbFinished: () => void,
239
- ): void {
240
- let loadingCount = 0;
241
- let nodeIds = nodeIdsParam;
242
-
243
- const openNodes = (): void => {
244
- const newNodesIds = [];
245
-
246
- for (const nodeId of nodeIds) {
247
- const node = this.getNodeById(nodeId);
248
-
249
- if (!node) {
250
- newNodesIds.push(nodeId);
251
- } else {
252
- if (!node.is_loading) {
253
- if (node.load_on_demand) {
254
- loadAndOpenNode(node);
255
- } else {
256
- this.openNode(node, false);
257
- }
258
- }
259
- }
260
- }
261
-
262
- nodeIds = newNodesIds;
263
-
264
- if (this.selectInitialNodes(selectedNodes)) {
265
- this.refreshElements(null);
266
- }
267
-
268
- if (loadingCount === 0) {
269
- cbFinished();
270
- }
271
- };
272
-
273
- const loadAndOpenNode = (node: Node): void => {
274
- loadingCount += 1;
275
- this.openNode(node, false, () => {
276
- loadingCount -= 1;
277
- openNodes();
278
- });
279
- };
280
-
281
- openNodes();
282
- }
283
-
284
268
  private getKeyName(): string {
285
269
  if (typeof this.saveStateOption === "string") {
286
270
  return this.saveStateOption;
package/src/version.ts CHANGED
@@ -1,3 +1,3 @@
1
- const version = "1.8.2";
1
+ const version = "1.8.3";
2
2
 
3
3
  export default version;