jqtree 1.8.1 → 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.
- package/bower.json +1 -1
- package/package.json +20 -19
- package/src/dragAndDropHandler/generateHitAreas.ts +56 -41
- package/src/nodeElement/ghostDropHint.ts +3 -37
- package/src/nodeElement/index.ts +1 -1
- package/src/saveStateHandler.ts +43 -59
- package/src/version.ts +1 -1
- package/tree.jquery.debug.js +77 -104
- package/tree.jquery.debug.js.map +1 -1
- package/tree.jquery.js +2 -2
- package/tree.jquery.js.map +1 -1
- package/.editorconfig +0 -12
- package/.eslintrc +0 -48
- package/.github/workflows/ci.yml +0 -68
- package/.github/workflows/codeql-analysis.yml +0 -32
- package/.github/workflows/size.yml +0 -24
- package/.github/workflows/static.yml +0 -57
- package/.prettier +0 -3
- package/config/.postcssrc +0 -6
- package/config/babel.config.json +0 -11
- package/config/babel.coverage.config.json +0 -4
- package/config/jest.config.js +0 -24
- package/config/jest.polyfills.js +0 -14
- package/config/playwright.config.js +0 -18
- package/config/production +0 -6
- package/config/rollup.config.mjs +0 -71
- package/css/jqtree.postcss +0 -193
- package/devserver/devserver.js +0 -7
- package/devserver/devserver_scroll.js +0 -8
- package/devserver/index.html +0 -22
- package/devserver/test_index.html +0 -22
- package/devserver/test_scroll.html +0 -28
- package/devserver/test_scroll_container.html +0 -39
- package/docs/.ruby-version +0 -1
- package/docs/Gemfile +0 -5
- package/docs/Gemfile.lock +0 -82
- package/docs/_config.yml +0 -126
- package/docs/_entries/events/index.md +0 -6
- package/docs/_entries/events/tree-click.md +0 -37
- package/docs/_entries/events/tree-close.md +0 -15
- package/docs/_entries/events/tree-contextmenu.md +0 -21
- package/docs/_entries/events/tree-dblclick.md +0 -19
- package/docs/_entries/events/tree-init.md +0 -15
- package/docs/_entries/events/tree-load-data.md +0 -15
- package/docs/_entries/events/tree-loading-data.md +0 -27
- package/docs/_entries/events/tree-move.md +0 -73
- package/docs/_entries/events/tree-open.md +0 -15
- package/docs/_entries/events/tree-refresh.md +0 -12
- package/docs/_entries/events/tree-select.md +0 -28
- package/docs/_entries/functions/addnodeafter.md +0 -20
- package/docs/_entries/functions/addnodebefore.md +0 -8
- package/docs/_entries/functions/addparentnode.md +0 -20
- package/docs/_entries/functions/appendnode.md +0 -50
- package/docs/_entries/functions/closenode.md +0 -23
- package/docs/_entries/functions/destroy.md +0 -12
- package/docs/_entries/functions/getnodebycallback.md +0 -24
- package/docs/_entries/functions/getnodebyhtmlelement.md +0 -29
- package/docs/_entries/functions/getnodebyid.md +0 -21
- package/docs/_entries/functions/getselectednode.md +0 -10
- package/docs/_entries/functions/getstate.md +0 -19
- package/docs/_entries/functions/gettree.md +0 -12
- package/docs/_entries/functions/index.md +0 -6
- package/docs/_entries/functions/is-node-selected.md +0 -11
- package/docs/_entries/functions/isdragging.md +0 -12
- package/docs/_entries/functions/loaddata.md +0 -46
- package/docs/_entries/functions/loaddatafromurl.md +0 -55
- package/docs/_entries/functions/movedown.md +0 -8
- package/docs/_entries/functions/movenode.md +0 -15
- package/docs/_entries/functions/moveup.md +0 -8
- package/docs/_entries/functions/opennode.md +0 -44
- package/docs/_entries/functions/prependnode.md +0 -21
- package/docs/_entries/functions/refresh.md +0 -12
- package/docs/_entries/functions/reload.md +0 -22
- package/docs/_entries/functions/removenode.md +0 -12
- package/docs/_entries/functions/scrolltonode.md +0 -13
- package/docs/_entries/functions/selectnode.md +0 -45
- package/docs/_entries/functions/setoption.md +0 -12
- package/docs/_entries/functions/setstate.md +0 -8
- package/docs/_entries/functions/toggle.md +0 -25
- package/docs/_entries/functions/tojson.md +0 -13
- package/docs/_entries/functions/updatenode.md +0 -50
- package/docs/_entries/general/changelog.md +0 -430
- package/docs/_entries/general/demo.html +0 -28
- package/docs/_entries/general/downloads.md +0 -9
- package/docs/_entries/general/examples.md +0 -8
- package/docs/_entries/general/features.md +0 -15
- package/docs/_entries/general/index.md +0 -7
- package/docs/_entries/general/introduction.md +0 -9
- package/docs/_entries/general/requirements.md +0 -6
- package/docs/_entries/general/tutorial.md +0 -71
- package/docs/_entries/general/usecases.md +0 -15
- package/docs/_entries/multiple_selection/add-to-selection.md +0 -21
- package/docs/_entries/multiple_selection/get-selected-nodes.md +0 -10
- package/docs/_entries/multiple_selection/index.md +0 -9
- package/docs/_entries/multiple_selection/remove-from-selection.md +0 -11
- package/docs/_entries/node/children.md +0 -12
- package/docs/_entries/node/getdata.md +0 -17
- package/docs/_entries/node/getlevel.md +0 -13
- package/docs/_entries/node/getnextnode.md +0 -12
- package/docs/_entries/node/getnextsibling.md +0 -10
- package/docs/_entries/node/getnextvisiblenode.md +0 -15
- package/docs/_entries/node/getpreviousnode.md +0 -12
- package/docs/_entries/node/getprevioussibling.md +0 -10
- package/docs/_entries/node/getpreviousvisiblenode.md +0 -15
- package/docs/_entries/node/index.md +0 -13
- package/docs/_entries/node/parent.md +0 -10
- package/docs/_entries/options/animationspeed.md +0 -7
- package/docs/_entries/options/autoescape.md +0 -6
- package/docs/_entries/options/autoopen.md +0 -28
- package/docs/_entries/options/buttonleft.md +0 -12
- package/docs/_entries/options/closedicon.md +0 -26
- package/docs/_entries/options/data-url.md +0 -45
- package/docs/_entries/options/data.md +0 -46
- package/docs/_entries/options/datafilter.md +0 -17
- package/docs/_entries/options/draganddrop.md +0 -18
- package/docs/_entries/options/index.md +0 -6
- package/docs/_entries/options/keyboardsupport.md +0 -14
- package/docs/_entries/options/oncanmove.md +0 -22
- package/docs/_entries/options/oncanmoveto.md +0 -22
- package/docs/_entries/options/oncanselectnode.md +0 -26
- package/docs/_entries/options/oncreateli.md +0 -22
- package/docs/_entries/options/ondragmove.md +0 -20
- package/docs/_entries/options/ondragstop.md +0 -20
- package/docs/_entries/options/onismovehandle.md +0 -17
- package/docs/_entries/options/onloadfailed.md +0 -15
- package/docs/_entries/options/onloading.md +0 -22
- package/docs/_entries/options/openedicon.md +0 -26
- package/docs/_entries/options/openfolderdelay.md +0 -15
- package/docs/_entries/options/rtl.md +0 -18
- package/docs/_entries/options/savestate.md +0 -39
- package/docs/_entries/options/selectable.md +0 -18
- package/docs/_entries/options/showemptyfolder.md +0 -26
- package/docs/_entries/options/slide.md +0 -12
- package/docs/_entries/options/start_dnd_delay.md +0 -13
- package/docs/_entries/options/tabindex.md +0 -14
- package/docs/_entries/options/usecontextmenu.md +0 -14
- package/docs/_examples/01_load_json_data.html +0 -45
- package/docs/_examples/02_load_json_data_from_server.html +0 -29
- package/docs/_examples/03_drag_and_drop.html +0 -42
- package/docs/_examples/04_save_state.html +0 -46
- package/docs/_examples/05_load_on_demand.html +0 -68
- package/docs/_examples/06_autoescape.html +0 -45
- package/docs/_examples/07_autoscroll.html +0 -42
- package/docs/_examples/08_multiple_select.html +0 -60
- package/docs/_examples/09_custom_html.html +0 -61
- package/docs/_examples/10_icon_buttons.html +0 -26
- package/docs/_examples/11_right-to-left.html +0 -25
- package/docs/_examples/12_button_on_right.html +0 -26
- package/docs/_examples/13_drag_outside.html +0 -48
- package/docs/_examples/14_filter.html +0 -111
- package/docs/_layouts/example.html +0 -7
- package/docs/_layouts/page.html +0 -26
- package/docs/documentation.css +0 -3
- package/docs/index.html +0 -65
- package/docs/package.json +0 -22
- package/docs/pnpm-lock.yaml +0 -892
- package/docs/postcss.config.js +0 -7
- package/docs/static/bower.json +0 -8
- package/docs/static/bower_components/fontawesome/css/all.min.css +0 -9
- package/docs/static/bower_components/fontawesome/webfonts/fa-brands-400.ttf +0 -0
- package/docs/static/bower_components/fontawesome/webfonts/fa-brands-400.woff2 +0 -0
- package/docs/static/bower_components/fontawesome/webfonts/fa-regular-400.ttf +0 -0
- package/docs/static/bower_components/fontawesome/webfonts/fa-regular-400.woff2 +0 -0
- package/docs/static/bower_components/fontawesome/webfonts/fa-solid-900.ttf +0 -0
- package/docs/static/bower_components/fontawesome/webfonts/fa-solid-900.woff2 +0 -0
- package/docs/static/bower_components/fontawesome/webfonts/fa-v4compatibility.ttf +0 -0
- package/docs/static/bower_components/fontawesome/webfonts/fa-v4compatibility.woff2 +0 -0
- package/docs/static/bower_components/jquery/dist/jquery.js +0 -10704
- package/docs/static/bower_components/jquery/dist/jquery.min.js +0 -2
- package/docs/static/bower_components/jquery-mockjax/dist/jquery.mockjax.js +0 -1061
- package/docs/static/documentation.js +0 -26
- package/docs/static/example.postcss +0 -68
- package/docs/static/example_data.js +0 -122
- package/docs/static/examples/autoescape.js +0 -17
- package/docs/static/examples/autoscroll.js +0 -6
- package/docs/static/examples/button-on-right.js +0 -13
- package/docs/static/examples/custom_html.js +0 -27
- package/docs/static/examples/drag-outside.js +0 -37
- package/docs/static/examples/drag_and_drop.js +0 -13
- package/docs/static/examples/filter.js +0 -63
- package/docs/static/examples/icon_buttons.js +0 -12
- package/docs/static/examples/load_json_data.js +0 -16
- package/docs/static/examples/load_json_data_from_server.js +0 -9
- package/docs/static/examples/load_on_demand.js +0 -19
- package/docs/static/examples/multiple_select.js +0 -23
- package/docs/static/examples/right-to-left.js +0 -11
- package/docs/static/examples/save_state.js +0 -11
- package/docs/static/monokai.css +0 -70
- package/docs/static/spinner.gif +0 -0
- package/docs/tailwind.config.js +0 -16
- package/sitemap.txt +0 -14
- package/src/playwright/.eslintrc +0 -5
- package/src/playwright/coverage.ts +0 -38
- package/src/playwright/playwright.test.ts +0 -401
- package/src/playwright/playwright.test.ts-snapshots/with-dragAndDrop-moves-a-node-1-Chromium-darwin.png +0 -0
- package/src/playwright/playwright.test.ts-snapshots/with-dragAndDrop-moves-a-node-1-Chromium-linux.png +0 -0
- package/src/playwright/playwright.test.ts-snapshots/without-dragAndDrop-displays-a-tree-1-Chromium-darwin.png +0 -0
- package/src/playwright/playwright.test.ts-snapshots/without-dragAndDrop-displays-a-tree-1-Chromium-linux.png +0 -0
- package/src/playwright/playwright.test.ts-snapshots/without-dragAndDrop-selects-a-node-1-Chromium-darwin.png +0 -0
- package/src/playwright/playwright.test.ts-snapshots/without-dragAndDrop-selects-a-node-1-Chromium-linux.png +0 -0
- package/src/playwright/testUtils.ts +0 -153
- package/src/test/.eslintrc +0 -17
- package/src/test/global.d.ts +0 -1
- package/src/test/jqTree/accessibility.test.ts +0 -25
- package/src/test/jqTree/create.test.ts +0 -54
- package/src/test/jqTree/events.test.ts +0 -290
- package/src/test/jqTree/keyboard.test.ts +0 -247
- package/src/test/jqTree/loadOnDemand.test.ts +0 -198
- package/src/test/jqTree/methods.test.ts +0 -1491
- package/src/test/jqTree/mouse.test.ts +0 -82
- package/src/test/jqTree/options.test.ts +0 -595
- package/src/test/node.test.ts +0 -1396
- package/src/test/nodeUtils.test.ts +0 -21
- package/src/test/position.test.ts +0 -30
- package/src/test/support/exampleData.ts +0 -23
- package/src/test/support/jqTreeMatchers.ts +0 -68
- package/src/test/support/matchers.d.ts +0 -31
- package/src/test/support/setupTests.ts +0 -5
- package/src/test/support/testUtil.ts +0 -30
- package/src/test/support/treeStructure.ts +0 -39
- package/src/test/util.test.ts +0 -27
- package/tsconfig.json +0 -24
package/bower.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "jqtree",
|
|
3
|
-
"version": "1.8.
|
|
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.
|
|
39
|
-
"@babel/core": "^7.
|
|
40
|
-
"@babel/preset-env": "^7.
|
|
41
|
-
"@babel/preset-typescript": "^7.
|
|
42
|
-
"@
|
|
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.
|
|
53
|
-
"@typescript-eslint/eslint-plugin": "^7.0
|
|
54
|
-
"@typescript-eslint/parser": "^7.0
|
|
55
|
-
"autoprefixer": "^10.4.
|
|
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.
|
|
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.
|
|
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
|
|
72
|
-
"msw": "^2.2.
|
|
73
|
-
"postcss": "^8.4.
|
|
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
|
|
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.
|
|
80
|
+
"rollup": "^4.14.0",
|
|
80
81
|
"rollup-plugin-serve": "^3.0.0",
|
|
81
82
|
"tslib": "^2.6.2",
|
|
82
|
-
"typescript": "^5.
|
|
83
|
-
"undici": "^5.28.
|
|
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
|
-
|
|
8
|
-
|
|
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
|
|
12
|
-
|
|
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
|
-
|
|
32
|
+
addHitPosition(node, Position.None, lastTop);
|
|
27
33
|
} else {
|
|
28
|
-
|
|
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
|
-
|
|
47
|
+
addHitPosition(node, Position.None, top);
|
|
42
48
|
} else {
|
|
43
|
-
|
|
49
|
+
addHitPosition(node, Position.Inside, top);
|
|
44
50
|
|
|
45
51
|
// Cannot move before current item
|
|
46
52
|
if (nextNode !== currentNode) {
|
|
47
|
-
|
|
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
|
-
|
|
60
|
+
addHitPosition(node, Position.Before, getOffsetTop(node.element));
|
|
55
61
|
}
|
|
56
62
|
};
|
|
57
63
|
|
|
@@ -64,29 +70,40 @@ const generatePositions = (tree: Node, currentNode: Node): HitArea[] => {
|
|
|
64
70
|
|
|
65
71
|
if (node === currentNode) {
|
|
66
72
|
// Cannot move inside current item
|
|
67
|
-
|
|
73
|
+
addHitPosition(node, Position.None, top);
|
|
68
74
|
} else {
|
|
69
|
-
|
|
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
|
-
|
|
80
|
+
addHitPosition(node, Position.None, top);
|
|
75
81
|
} else {
|
|
76
|
-
|
|
82
|
+
addHitPosition(node, Position.After, top);
|
|
77
83
|
}
|
|
78
84
|
};
|
|
79
85
|
|
|
80
86
|
const handleOpenFolder = (node: Node, element: HTMLElement) => {
|
|
81
87
|
if (node === currentNode) {
|
|
82
88
|
// Cannot move inside current item
|
|
89
|
+
|
|
90
|
+
// Dnd over the current element is not possible: add a position with type None for the top and the bottom.
|
|
91
|
+
const top = getOffsetTop(element);
|
|
92
|
+
const height = element.clientHeight;
|
|
93
|
+
addHitPosition(node, Position.None, top);
|
|
94
|
+
|
|
95
|
+
if (height > 5) {
|
|
96
|
+
// Subtract 5 pixels to allow more space for the next element.
|
|
97
|
+
addHitPosition(node, Position.None, top + height - 5);
|
|
98
|
+
}
|
|
99
|
+
|
|
83
100
|
// Stop iterating
|
|
84
101
|
return false;
|
|
85
102
|
}
|
|
86
103
|
|
|
87
104
|
// Cannot move before current item
|
|
88
105
|
if (node.children[0] !== currentNode) {
|
|
89
|
-
|
|
106
|
+
addHitPosition(node, Position.Inside, getOffsetTop(element));
|
|
90
107
|
}
|
|
91
108
|
|
|
92
109
|
// Continue iterating
|
|
@@ -101,12 +118,12 @@ const generatePositions = (tree: Node, currentNode: Node): HitArea[] => {
|
|
|
101
118
|
handleOpenFolder,
|
|
102
119
|
});
|
|
103
120
|
|
|
104
|
-
return
|
|
121
|
+
return hitPositions;
|
|
105
122
|
};
|
|
106
123
|
|
|
107
|
-
const generateHitAreasForGroup = (
|
|
124
|
+
export const generateHitAreasForGroup = (
|
|
108
125
|
hitAreas: HitArea[],
|
|
109
|
-
positionsInGroup:
|
|
126
|
+
positionsInGroup: HitPosition[],
|
|
110
127
|
top: number,
|
|
111
128
|
bottom: number,
|
|
112
129
|
) => {
|
|
@@ -116,11 +133,10 @@ const generateHitAreasForGroup = (
|
|
|
116
133
|
const areaHeight = Math.round((bottom - top) / positionCount);
|
|
117
134
|
let areaTop = top;
|
|
118
135
|
|
|
119
|
-
let i = 0;
|
|
120
|
-
|
|
121
|
-
const position = positionsInGroup[i];
|
|
136
|
+
for (let i = 0; i < positionCount; i++) {
|
|
137
|
+
const position = positionsInGroup[i] as HitPosition;
|
|
122
138
|
|
|
123
|
-
if (position) {
|
|
139
|
+
if (position.position !== Position.None) {
|
|
124
140
|
hitAreas.push({
|
|
125
141
|
top: areaTop,
|
|
126
142
|
bottom: areaTop + areaHeight,
|
|
@@ -130,19 +146,22 @@ const generateHitAreasForGroup = (
|
|
|
130
146
|
}
|
|
131
147
|
|
|
132
148
|
areaTop += areaHeight;
|
|
133
|
-
i += 1;
|
|
134
149
|
}
|
|
135
150
|
};
|
|
136
151
|
|
|
137
|
-
const generateHitAreasFromPositions = (
|
|
138
|
-
|
|
152
|
+
export const generateHitAreasFromPositions = (
|
|
153
|
+
hitPositions: HitPosition[],
|
|
139
154
|
treeBottom: number,
|
|
140
155
|
): HitArea[] => {
|
|
141
|
-
|
|
142
|
-
|
|
156
|
+
if (!hitPositions.length) {
|
|
157
|
+
return [];
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
let previousTop = (hitPositions[0] as HitPosition).top;
|
|
161
|
+
let group: HitPosition[] = [];
|
|
143
162
|
const hitAreas: HitArea[] = [];
|
|
144
163
|
|
|
145
|
-
for (const position of
|
|
164
|
+
for (const position of hitPositions) {
|
|
146
165
|
if (position.top !== previousTop && group.length) {
|
|
147
166
|
generateHitAreasForGroup(
|
|
148
167
|
hitAreas,
|
|
@@ -163,14 +182,10 @@ const generateHitAreasFromPositions = (
|
|
|
163
182
|
return hitAreas;
|
|
164
183
|
};
|
|
165
184
|
|
|
166
|
-
const generateHitAreas = (
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
)
|
|
171
|
-
const positions = generatePositions(tree, currentNode);
|
|
172
|
-
|
|
173
|
-
return generateHitAreasFromPositions(positions, treeBottom);
|
|
174
|
-
};
|
|
185
|
+
const generateHitAreas = (tree: Node, currentNode: Node, treeBottom: number) =>
|
|
186
|
+
generateHitAreasFromPositions(
|
|
187
|
+
generateHitPositions(tree, currentNode),
|
|
188
|
+
treeBottom,
|
|
189
|
+
);
|
|
175
190
|
|
|
176
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(
|
|
7
|
+
constructor(element: HTMLElement) {
|
|
11
8
|
this.element = element;
|
|
12
|
-
this.node = node;
|
|
13
9
|
this.ghost = this.createGhostElement();
|
|
14
10
|
|
|
15
|
-
|
|
16
|
-
|
|
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";
|
package/src/nodeElement/index.ts
CHANGED
|
@@ -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.
|
|
55
|
+
return new GhostDropHint(this.element);
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
|
package/src/saveStateHandler.ts
CHANGED
|
@@ -147,21 +147,54 @@ export default class SaveStateHandler {
|
|
|
147
147
|
state: SavedState,
|
|
148
148
|
cbFinished: () => void,
|
|
149
149
|
): void {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
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
|
|
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