jqtree 1.8.2 → 1.8.4
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 +31 -29
- package/src/dragAndDropHandler/generateHitAreas.ts +47 -43
- 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 +69 -106
- 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 -434
- 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.4",
|
|
4
4
|
"description": "Tree widget for jQuery",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"jquery-plugin",
|
|
@@ -35,51 +35,53 @@
|
|
|
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.8",
|
|
39
|
+
"@babel/core": "^7.24.9",
|
|
40
|
+
"@babel/preset-env": "^7.24.8",
|
|
41
|
+
"@babel/preset-typescript": "^7.24.7",
|
|
42
|
+
"@codecov/rollup-plugin": "0.0.1-beta.10",
|
|
43
|
+
"@playwright/test": "^1.45.2",
|
|
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",
|
|
46
|
-
"@testing-library/dom": "^
|
|
47
|
+
"@testing-library/dom": "^10.3.2",
|
|
47
48
|
"@testing-library/user-event": "^14.5.2",
|
|
48
49
|
"@types/debug": "^4.1.12",
|
|
49
50
|
"@types/jest": "^29.5.12",
|
|
50
51
|
"@types/jest-axe": "^3.5.9",
|
|
51
|
-
"@types/jquery": "^3.5.
|
|
52
|
-
"@types/node": "^20.11
|
|
53
|
-
"@typescript-eslint/eslint-plugin": "^7.
|
|
54
|
-
"@typescript-eslint/parser": "^7.
|
|
55
|
-
"autoprefixer": "^10.4.
|
|
52
|
+
"@types/jquery": "^3.5.30",
|
|
53
|
+
"@types/node": "^20.14.11",
|
|
54
|
+
"@typescript-eslint/eslint-plugin": "^7.16.1",
|
|
55
|
+
"@typescript-eslint/parser": "^7.16.1",
|
|
56
|
+
"autoprefixer": "^10.4.19",
|
|
56
57
|
"babel-jest": "^29.7.0",
|
|
57
|
-
"babel-plugin-istanbul": "^
|
|
58
|
-
"eslint": "^8.
|
|
58
|
+
"babel-plugin-istanbul": "^7.0.0",
|
|
59
|
+
"eslint": "^8.57.0",
|
|
59
60
|
"eslint-import-resolver-typescript": "^3.6.1",
|
|
61
|
+
"eslint-plugin-deprecation": "^3.0.0",
|
|
60
62
|
"eslint-plugin-import": "^2.29.1",
|
|
61
|
-
"eslint-plugin-jest": "^
|
|
62
|
-
"eslint-plugin-playwright": "^1.
|
|
63
|
-
"eslint-plugin-testing-library": "^6.2.
|
|
63
|
+
"eslint-plugin-jest": "^28.6.0",
|
|
64
|
+
"eslint-plugin-playwright": "^1.6.2",
|
|
65
|
+
"eslint-plugin-testing-library": "^6.2.2",
|
|
64
66
|
"givens": "^1.3.9",
|
|
65
|
-
"graphql": "^16.
|
|
67
|
+
"graphql": "^16.9.0",
|
|
66
68
|
"jest": "^29.7.0",
|
|
67
|
-
"jest-axe": "^
|
|
69
|
+
"jest-axe": "^9.0.0",
|
|
68
70
|
"jest-environment-jsdom": "^29.7.0",
|
|
69
71
|
"jest-extended": "^4.0.2",
|
|
70
72
|
"jsonfile": "^6.1.0",
|
|
71
|
-
"lodash
|
|
72
|
-
"msw": "^2.2
|
|
73
|
-
"postcss": "^8.4.
|
|
73
|
+
"lodash": "^4.17.21",
|
|
74
|
+
"msw": "^2.3.2",
|
|
75
|
+
"postcss": "^8.4.39",
|
|
74
76
|
"postcss-cli": "^11.0.0",
|
|
75
|
-
"postcss-import": "^16.0
|
|
76
|
-
"postcss-load-config": "^
|
|
77
|
+
"postcss-import": "^16.1.0",
|
|
78
|
+
"postcss-load-config": "^6.0.1",
|
|
77
79
|
"postcss-nested": "^6.0.1",
|
|
78
|
-
"prettier": "^3.
|
|
79
|
-
"rollup": "^4.
|
|
80
|
+
"prettier": "^3.3.3",
|
|
81
|
+
"rollup": "^4.18.1",
|
|
80
82
|
"rollup-plugin-serve": "^3.0.0",
|
|
81
|
-
"tslib": "^2.6.
|
|
82
|
-
"typescript": "^5.
|
|
83
|
-
"undici": "^5.28.
|
|
83
|
+
"tslib": "^2.6.3",
|
|
84
|
+
"typescript": "^5.5.3",
|
|
85
|
+
"undici": "^5.28.4"
|
|
84
86
|
}
|
|
85
87
|
}
|
|
@@ -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,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
|
-
|
|
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
|
|
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
121
|
+
return hitPositions;
|
|
116
122
|
};
|
|
117
123
|
|
|
118
|
-
const generateHitAreasForGroup = (
|
|
124
|
+
export const generateHitAreasForGroup = (
|
|
119
125
|
hitAreas: HitArea[],
|
|
120
|
-
positionsInGroup:
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
152
|
+
export const generateHitAreasFromPositions = (
|
|
153
|
+
hitPositions: HitPosition[],
|
|
150
154
|
treeBottom: number,
|
|
151
155
|
): HitArea[] => {
|
|
152
|
-
|
|
153
|
-
|
|
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
|
|
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
|
-
|
|
179
|
-
|
|
180
|
-
|
|
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(
|
|
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