jqtree 1.6.0 → 1.6.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/.eslintrc +3 -11
- package/.github/workflows/ci.yml +48 -23
- package/.github/workflows/codeql-analysis.yml +9 -5
- package/.prettier +3 -0
- package/README.md +11 -8
- package/bower.json +1 -1
- package/{.postcssrc → config/.postcssrc} +0 -0
- package/config/babel.config.json +11 -0
- package/config/babel.coverage.config.json +4 -0
- package/{jest-jsdom.config.js → config/jest.config.js} +9 -5
- package/config/playwright.config.js +18 -0
- package/config/production +4 -0
- package/{rollup.config.js → config/rollup.config.js} +19 -14
- package/{jqtree.postcss → css/jqtree.postcss} +3 -0
- package/devserver/index.html +1 -9
- package/docs/Gemfile +2 -0
- package/docs/Gemfile.lock +263 -0
- package/{_config.yml → docs/_config.yml} +8 -1
- package/{_entries → docs/_entries}/01_general.md +0 -0
- package/{_entries → docs/_entries}/02_introduction.md +0 -0
- package/{_entries → docs/_entries}/03_features.md +1 -1
- package/{_entries → docs/_entries}/04_demo.html +1 -7
- package/{_entries → docs/_entries}/05_requirements.md +0 -0
- package/{_entries → docs/_entries}/06_downloads.md +0 -0
- package/{_entries → docs/_entries}/07_tutorial.md +0 -0
- package/{_entries → docs/_entries}/08_examples.md +0 -0
- package/{_entries → docs/_entries}/09_usecases.md +0 -0
- package/{_entries → docs/_entries}/10_changelog.md +14 -0
- package/{_entries → docs/_entries}/11_options.md +0 -0
- package/{_entries → docs/_entries}/12_animationspeed.md +0 -0
- package/{_entries → docs/_entries}/13_autoescape.md +0 -0
- package/{_entries → docs/_entries}/14_autoopen.md +0 -0
- package/{_entries → docs/_entries}/15_buttonleft.md +0 -0
- package/{_entries → docs/_entries}/16_closedicon.md +0 -0
- package/{_entries → docs/_entries}/17_data.md +0 -0
- package/{_entries → docs/_entries}/18_datafilter.md +0 -0
- package/{_entries → docs/_entries}/19_data-url.md +0 -0
- package/{_entries → docs/_entries}/20_draganddrop.md +0 -0
- package/{_entries → docs/_entries}/21_keyboardsupport.md +0 -0
- package/{_entries → docs/_entries}/22_oncanmove.md +0 -0
- package/{_entries → docs/_entries}/23_oncanmoveto.md +2 -2
- package/{_entries → docs/_entries}/24_oncanselectnode.md +0 -0
- package/{_entries → docs/_entries}/25_oncreateli.md +2 -2
- package/{_entries → docs/_entries}/26_ondragmove.md +0 -0
- package/{_entries → docs/_entries}/27_ondragstop.md +0 -0
- package/{_entries → docs/_entries}/28_onismovehandle.md +0 -0
- package/{_entries → docs/_entries}/29_onloadfailed.md +0 -0
- package/{_entries → docs/_entries}/30_onloading.md +2 -2
- package/{_entries → docs/_entries}/31_openedicon.md +0 -0
- package/{_entries → docs/_entries}/32_openfolderdelay.md +2 -0
- package/{_entries → docs/_entries}/33_rtl.md +0 -0
- package/{_entries → docs/_entries}/34_savestate.md +0 -0
- package/{_entries → docs/_entries}/35_selectable.md +0 -0
- package/{_entries → docs/_entries}/36_showemptyfolder.md +0 -0
- package/{_entries → docs/_entries}/37_slide.md +0 -0
- package/{_entries → docs/_entries}/38_start_dnd_delay.md +0 -0
- package/{_entries → docs/_entries}/39_tabindex.md +0 -0
- package/{_entries → docs/_entries}/40_usecontextmenu.md +0 -0
- package/{_entries → docs/_entries}/41_functions.md +0 -0
- package/{_entries → docs/_entries}/42_addparentnode.md +1 -1
- package/{_entries → docs/_entries}/43_addnodeafter.md +1 -1
- package/{_entries → docs/_entries}/44_addnodebefore.md +1 -1
- package/{_entries → docs/_entries}/45_appendnode.md +5 -5
- package/{_entries → docs/_entries}/46_closenode.md +0 -0
- package/{_entries → docs/_entries}/47_destroy.md +0 -0
- package/{_entries → docs/_entries}/48_getnodebycallback.md +0 -0
- package/{_entries → docs/_entries}/49_getnodebyid.md +0 -0
- package/{_entries → docs/_entries}/50_getnodebyhtmlelement.md +2 -2
- package/{_entries → docs/_entries}/51_getselectednode.md +0 -0
- package/{_entries → docs/_entries}/52_getstate.md +0 -0
- package/{_entries → docs/_entries}/53_gettree.md +1 -1
- package/{_entries → docs/_entries}/54_isdragging.md +1 -1
- package/{_entries → docs/_entries}/55_loaddata.md +3 -3
- package/{_entries → docs/_entries}/56_loaddatafromurl.md +4 -4
- package/{_entries → docs/_entries}/57_movedown.md +0 -0
- package/{_entries → docs/_entries}/58_movenode.md +3 -3
- package/{_entries → docs/_entries}/59_moveup.md +0 -0
- package/{_entries → docs/_entries}/60_opennode.md +3 -3
- package/docs/_entries/61_prependnode.md +21 -0
- package/docs/_entries/62_refresh.md +12 -0
- package/{_entries/62_reload.md → docs/_entries/63_reload.md} +2 -2
- package/{_entries/63_removenode.md → docs/_entries/64_removenode.md} +0 -0
- package/{_entries/64_selectnode.md → docs/_entries/65_selectnode.md} +0 -0
- package/{_entries/65_scrolltonode.md → docs/_entries/66_scrolltonode.md} +0 -0
- package/{_entries/66_setoption.md → docs/_entries/67_setoption.md} +0 -0
- package/{_entries/67_setstate.md → docs/_entries/68_setstate.md} +0 -0
- package/{_entries/68_toggle.md → docs/_entries/69_toggle.md} +0 -0
- package/{_entries/69_tojson.md → docs/_entries/70_tojson.md} +0 -0
- package/{_entries/70_updatenode.md → docs/_entries/71_updatenode.md} +1 -1
- package/{_entries/71_events.md → docs/_entries/72_events.md} +0 -0
- package/{_entries/72_tree-click.md → docs/_entries/73_tree-click.md} +0 -0
- package/{_entries/73_tree-close.md → docs/_entries/74_tree-close.md} +0 -0
- package/{_entries/74_tree-contextmenu.md → docs/_entries/75_tree-contextmenu.md} +0 -0
- package/{_entries/75_tree-dblclick.md → docs/_entries/76_tree-dblclick.md} +0 -0
- package/{_entries/76_tree-init.md → docs/_entries/77_tree-init.md} +0 -0
- package/{_entries/77_tree-load-data.md → docs/_entries/78_tree-load-data.md} +0 -0
- package/{_entries/78_tree-loading-data.md → docs/_entries/79_tree-loading-data.md} +0 -0
- package/{_entries/79_tree-move.md → docs/_entries/80_tree-move.md} +0 -0
- package/{_entries/80_tree-refresh.md → docs/_entries/81_tree-refresh.md} +0 -0
- package/{_entries/81_tree-open.md → docs/_entries/82_tree-open.md} +0 -0
- package/{_entries/82_tree-select.md → docs/_entries/83_tree-select.md} +0 -0
- package/{_entries/83_multiple-selection.md → docs/_entries/84_multiple-selection.md} +0 -0
- package/{_entries/84_add-to-selection.md → docs/_entries/85_add-to-selection.md} +0 -0
- package/{_entries/85_get-selected-nodes.md → docs/_entries/86_get-selected-nodes.md} +0 -0
- package/{_entries/86_is-node-selected.md → docs/_entries/87_is-node-selected.md} +1 -1
- package/{_entries/87_remove-from-selection.md → docs/_entries/88_remove-from-selection.md} +0 -0
- package/{_entries/88_node-functions.md → docs/_entries/89_node-functions.md} +0 -0
- package/{_entries/89_children.md → docs/_entries/90_children.md} +0 -0
- package/{_entries/90_getdata.md → docs/_entries/91_getdata.md} +2 -2
- package/{_entries/91_getlevel.md → docs/_entries/92_getlevel.md} +0 -0
- package/{_entries/92_getnextnode.md → docs/_entries/93_getnextnode.md} +0 -0
- package/{_entries/93_getnextsibling.md → docs/_entries/94_getnextsibling.md} +0 -0
- package/{_entries/94_getpreviousnode.md → docs/_entries/95_getpreviousnode.md} +0 -0
- package/{_entries/95_getprevioussibling.md → docs/_entries/96_getprevioussibling.md} +0 -0
- package/{_entries/96_parent.md → docs/_entries/97_parent.md} +1 -1
- package/{_entries → docs/_entries}/insert.py +0 -0
- package/{_entries → docs/_entries}/renumber.py +0 -0
- package/{_examples → docs/_examples}/01_load_json_data.html +3 -5
- package/{_examples → docs/_examples}/02_load_json_data_from_server.html +3 -5
- package/{_examples → docs/_examples}/03_drag_and_drop.html +3 -5
- package/{_examples → docs/_examples}/04_save_state.html +3 -5
- package/{_examples → docs/_examples}/05_load_on_demand.html +3 -5
- package/{_examples → docs/_examples}/06_autoescape.html +3 -5
- package/{_examples → docs/_examples}/07_autoscroll.html +3 -5
- package/{_examples → docs/_examples}/08_multiple_select.html +3 -5
- package/{_examples → docs/_examples}/09_custom_html.html +3 -5
- package/{_examples → docs/_examples}/10_icon_buttons.html +3 -5
- package/{_examples → docs/_examples}/11_right-to-left.html +3 -5
- package/{_examples → docs/_examples}/12_button_on_right.html +3 -5
- package/docs/_examples/13_drag_outside.html +48 -0
- package/docs/_examples/14_filter.html +111 -0
- package/docs/_layouts/example.html +7 -0
- package/docs/_layouts/page.html +26 -0
- package/docs/documentation.css +3 -0
- package/docs/index.html +65 -0
- package/docs/jqtree.css +189 -0
- package/docs/package.json +22 -0
- package/docs/pnpm-lock.yaml +768 -0
- package/docs/postcss.config.js +7 -0
- package/docs/static/bower.json +8 -0
- package/docs/static/bower_components/fontawesome/css/all.min.css +5 -0
- package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-brands-400.eot +0 -0
- package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-brands-400.svg +774 -627
- package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-brands-400.ttf +0 -0
- package/docs/static/bower_components/fontawesome/webfonts/fa-brands-400.woff +0 -0
- package/docs/static/bower_components/fontawesome/webfonts/fa-brands-400.woff2 +0 -0
- package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-regular-400.eot +0 -0
- package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-regular-400.svg +93 -95
- package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-regular-400.ttf +0 -0
- package/docs/static/bower_components/fontawesome/webfonts/fa-regular-400.woff +0 -0
- package/docs/static/bower_components/fontawesome/webfonts/fa-regular-400.woff2 +0 -0
- package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-solid-900.eot +0 -0
- package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-solid-900.svg +1164 -1074
- package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-solid-900.ttf +0 -0
- package/docs/static/bower_components/fontawesome/webfonts/fa-solid-900.woff +0 -0
- package/docs/static/bower_components/fontawesome/webfonts/fa-solid-900.woff2 +0 -0
- package/{static → docs/static}/bower_components/jquery/dist/jquery.js +118 -109
- package/docs/static/bower_components/jquery/dist/jquery.min.js +2 -0
- package/{static → docs/static}/bower_components/jquery-mockjax/dist/jquery.mockjax.js +15 -9
- package/docs/static/documentation.css +1313 -0
- package/docs/static/documentation.js +26 -0
- package/{static → docs/static}/example.css +14 -33
- package/{static → docs/static}/example.postcss +15 -32
- package/{static → docs/static}/example_data.js +33 -36
- package/{static → docs/static}/examples/autoescape.js +0 -0
- package/{static → docs/static}/examples/autoscroll.js +0 -0
- package/{static → docs/static}/examples/button-on-right.js +0 -0
- package/{static → docs/static}/examples/custom_html.js +5 -9
- package/{static → docs/static}/examples/drag-outside.js +0 -0
- package/{static → docs/static}/examples/drag_and_drop.js +0 -0
- package/docs/static/examples/filter.js +63 -0
- package/{static → docs/static}/examples/icon_buttons.js +0 -0
- package/{static → docs/static}/examples/load_json_data.js +0 -0
- package/{static → docs/static}/examples/load_json_data_from_server.js +0 -0
- package/{static → docs/static}/examples/load_on_demand.js +0 -0
- package/{static → docs/static}/examples/multiple_select.js +0 -0
- package/{static → docs/static}/examples/right-to-left.js +0 -0
- package/{static → docs/static}/examples/save_state.js +0 -0
- package/{static → docs/static}/monokai.css +0 -0
- package/{static → docs/static}/spinner.gif +0 -0
- package/docs/tailwind.config.js +16 -0
- package/docs/tree.jquery.js +21 -0
- package/jqtree.css +4 -1
- package/lib/dataLoader.js +146 -98
- package/lib/dragAndDropHandler.js +672 -470
- package/lib/elementsRenderer.js +282 -197
- package/lib/jqtreeOptions.js +1 -2
- package/lib/keyHandler.js +134 -87
- package/lib/mouse.widget.js +285 -184
- package/lib/node.js +691 -505
- package/lib/nodeElement.js +329 -205
- package/lib/playwright/coverage.js +140 -0
- package/lib/playwright/playwright.test.js +298 -179
- package/lib/playwright/testUtils.js +267 -0
- package/lib/saveStateHandler.js +311 -204
- package/lib/scrollHandler.js +293 -199
- package/lib/selectNodeHandler.js +140 -100
- package/lib/simple.widget.js +184 -109
- package/lib/test/global.d.js +3 -0
- package/lib/test/jqTree/create.test.js +44 -40
- package/lib/test/jqTree/events.test.js +186 -138
- package/lib/test/jqTree/keyboard.test.js +216 -199
- package/lib/test/jqTree/loadOnDemand.test.js +238 -157
- package/lib/test/jqTree/methods.test.js +1289 -1019
- package/lib/test/jqTree/options.test.js +491 -410
- package/lib/test/node.test.js +1036 -873
- package/lib/test/nodeUtil.test.js +21 -20
- package/lib/test/support/exampleData.js +35 -23
- package/lib/test/support/jqTreeMatchers.js +72 -54
- package/lib/test/support/matchers.d.js +1 -0
- package/lib/test/support/setupTests.js +9 -3
- package/lib/test/support/testUtil.js +35 -15
- package/lib/test/support/treeStructure.js +41 -32
- package/lib/test/util.test.js +21 -20
- package/lib/tree.jquery.d.js +1 -0
- package/lib/tree.jquery.js +1264 -886
- package/lib/types.js +1 -2
- package/lib/typings.d.js +2 -0
- package/lib/util.js +19 -8
- package/lib/version.js +8 -3
- package/package.json +54 -47
- package/src/dataLoader.ts +6 -6
- package/src/dragAndDropHandler.ts +8 -8
- package/src/elementsRenderer.ts +4 -0
- package/src/jqtreeOptions.ts +2 -2
- package/src/mouse.widget.ts +19 -15
- package/src/node.ts +27 -41
- package/src/nodeElement.ts +17 -9
- package/src/playwright/.eslintrc +5 -0
- package/src/playwright/coverage.ts +41 -0
- package/src/playwright/playwright.test.ts +75 -77
- 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 +122 -0
- package/src/saveStateHandler.ts +11 -6
- package/src/selectNodeHandler.ts +1 -1
- package/src/simple.widget.ts +1 -1
- package/src/test/.eslintrc +14 -0
- package/src/test/jqTree/create.test.ts +0 -1
- package/src/test/jqTree/events.test.ts +10 -10
- package/src/test/jqTree/keyboard.test.ts +0 -1
- package/src/test/jqTree/loadOnDemand.test.ts +56 -11
- package/src/test/jqTree/methods.test.ts +72 -55
- package/src/test/jqTree/options.test.ts +30 -33
- package/src/test/node.test.ts +2 -2
- package/src/test/support/jqTreeMatchers.ts +8 -9
- package/src/test/support/matchers.d.ts +2 -4
- package/src/test/support/setupTests.ts +2 -1
- package/src/tree.jquery.d.ts +19 -13
- package/src/tree.jquery.ts +35 -28
- package/src/version.ts +1 -1
- package/tree.jquery.debug.js +4810 -3325
- package/tree.jquery.debug.js.map +1 -1
- package/tree.jquery.js +3 -3
- package/tree.jquery.js.map +1 -1
- package/tsconfig.json +1 -0
- package/_entries/61_prependnode.md +0 -21
- package/_examples/13_drag_outside.html +0 -25
- package/_layouts/base.html +0 -55
- package/_layouts/frontpage.html +0 -20
- package/_layouts/page.html +0 -7
- package/index.html +0 -48
- package/jest-browser.config.js +0 -18
- package/jest-playwright.config.js +0 -21
- package/jest.config.js +0 -8
- package/lib/playwright/testUtil.js +0 -223
- package/lib/playwright/visualRegression.js +0 -128
- package/production +0 -5
- package/src/playwright/screenshots/displays_a_tree_Desktop.png +0 -0
- package/src/playwright/screenshots/displays_a_tree_iPhone 6.png +0 -0
- package/src/playwright/screenshots/moves_a_node_Desktop.png +0 -0
- package/src/playwright/screenshots/moves_a_node_iPhone 6.png +0 -0
- package/src/playwright/screenshots/opens_a_node_Desktop.png +0 -0
- package/src/playwright/screenshots/opens_a_node_iPhone 6.png +0 -0
- package/src/playwright/screenshots/selects_a_node_Desktop.png +0 -0
- package/src/playwright/screenshots/selects_a_node_iPhone 6.png +0 -0
- package/src/playwright/testUtil.ts +0 -171
- package/src/playwright/visualRegression.ts +0 -88
- package/static/bower.json +0 -9
- package/static/bower_components/bootstrap/dist/css/bootstrap-theme.min.css +0 -6
- package/static/bower_components/bootstrap/dist/css/bootstrap.min.css +0 -6
- package/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.eot +0 -0
- package/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.svg +0 -288
- package/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf +0 -0
- package/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff +0 -0
- package/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2 +0 -0
- package/static/bower_components/bootstrap/dist/js/bootstrap.min.js +0 -6
- package/static/bower_components/fontawesome/css/all.min.css +0 -5
- package/static/bower_components/fontawesome/webfonts/fa-brands-400.woff +0 -0
- package/static/bower_components/fontawesome/webfonts/fa-brands-400.woff2 +0 -0
- package/static/bower_components/fontawesome/webfonts/fa-regular-400.woff +0 -0
- package/static/bower_components/fontawesome/webfonts/fa-regular-400.woff2 +0 -0
- package/static/bower_components/fontawesome/webfonts/fa-solid-900.woff +0 -0
- package/static/bower_components/fontawesome/webfonts/fa-solid-900.woff2 +0 -0
- package/static/bower_components/jquery/dist/jquery.min.js +0 -2
- package/static/documentation.css +0 -171
- package/static/documentation.js +0 -48
package/lib/types.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
exports.__esModule = true;
|
|
1
|
+
"use strict";
|
package/lib/typings.d.js
ADDED
package/lib/util.js
CHANGED
|
@@ -1,13 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.isInt = exports.isFunction = exports.getBoolString = void 0;
|
|
7
|
+
|
|
8
|
+
var isInt = function isInt(n) {
|
|
9
|
+
return typeof n === "number" && n % 1 === 0;
|
|
6
10
|
};
|
|
11
|
+
|
|
7
12
|
exports.isInt = isInt;
|
|
8
|
-
|
|
13
|
+
|
|
14
|
+
var isFunction = function isFunction(v) {
|
|
15
|
+
return typeof v === "function";
|
|
16
|
+
};
|
|
17
|
+
|
|
9
18
|
exports.isFunction = isFunction;
|
|
10
|
-
|
|
11
|
-
|
|
19
|
+
|
|
20
|
+
var getBoolString = function getBoolString(value) {
|
|
21
|
+
return value ? "true" : "false";
|
|
12
22
|
};
|
|
13
|
-
|
|
23
|
+
|
|
24
|
+
exports.getBoolString = getBoolString;
|
package/lib/version.js
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = void 0;
|
|
7
|
+
var version = "1.6.2";
|
|
8
|
+
var _default = version;
|
|
9
|
+
exports["default"] = _default;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "jqtree",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.3",
|
|
4
4
|
"description": "Tree widget for jQuery",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"jquery-plugin",
|
|
@@ -14,61 +14,68 @@
|
|
|
14
14
|
"url": "https://github.com/mbraak/jqtree"
|
|
15
15
|
},
|
|
16
16
|
"scripts": {
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"
|
|
17
|
+
"ci": "pnpm lint && pnpm tsc && pnpm test",
|
|
18
|
+
"jest": "jest --coverage --no-cache --verbose --config ./config/jest.config.js",
|
|
19
|
+
"jest-watch": "jest --watch",
|
|
20
20
|
"lint": "eslint src/ --ext .ts,.tsx",
|
|
21
|
-
"production": "./production",
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"prettier": "prettier src/*.ts src_test/*.ts --write --tab-width 4",
|
|
21
|
+
"production": "./config/production",
|
|
22
|
+
"devserver": "SERVE=true rollup --config config/rollup.config.js --watch",
|
|
23
|
+
"devserver-with-coverage": "COVERAGE=true SERVE=true rollup --config config/rollup.config.js",
|
|
24
|
+
"build-with-coverage": "COVERAGE=true rollup --config config/rollup.config.js",
|
|
25
|
+
"prettier": "prettier src/*.ts --write --tab-width 4",
|
|
27
26
|
"coveralls": "nyc report --reporter=text-lcov | coveralls",
|
|
28
27
|
"tsc": "tsc --noEmit --project tsconfig.json",
|
|
29
28
|
"merge-coverage": "cp jest-coverage/coverage-final.json .nyc_output/coverage_jsdom.json",
|
|
30
|
-
"clean-coverage": "rm -rf
|
|
31
|
-
"print-coverage": "nyc report"
|
|
29
|
+
"clean-coverage": "rm -rf .nyc_output && jest --clearCache",
|
|
30
|
+
"print-coverage": "nyc report",
|
|
31
|
+
"playwright": "pnpm build-with-coverage && playwright test --config config/playwright.config.js",
|
|
32
|
+
"test": "pnpm jest && pnpm playwright"
|
|
32
33
|
},
|
|
33
34
|
"dependencies": {
|
|
34
|
-
"jquery": "
|
|
35
|
+
"jquery": "^3.6.0"
|
|
35
36
|
},
|
|
36
37
|
"devDependencies": {
|
|
37
|
-
"@
|
|
38
|
-
"@
|
|
39
|
-
"@
|
|
40
|
-
"@
|
|
41
|
-
"@
|
|
42
|
-
"@
|
|
43
|
-
"@
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"eslint-plugin
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
"jest": "^
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"
|
|
38
|
+
"@babel/cli": "^7.18.10",
|
|
39
|
+
"@babel/core": "^7.18.10",
|
|
40
|
+
"@babel/preset-env": "^7.18.10",
|
|
41
|
+
"@babel/preset-typescript": "^7.18.6",
|
|
42
|
+
"@playwright/test": "^1.24.2",
|
|
43
|
+
"@rollup/plugin-babel": "^5.3.1",
|
|
44
|
+
"@rollup/plugin-node-resolve": "^13.3.0",
|
|
45
|
+
"@testing-library/dom": "^8.16.1",
|
|
46
|
+
"@types/debug": "^4.1.7",
|
|
47
|
+
"@types/jest": "^28.1.6",
|
|
48
|
+
"@types/jquery": "^3.5.14",
|
|
49
|
+
"@typescript-eslint/eslint-plugin": "^5.32.0",
|
|
50
|
+
"@typescript-eslint/parser": "^5.32.0",
|
|
51
|
+
"autoprefixer": "^10.4.8",
|
|
52
|
+
"babel-jest": "^28.1.3",
|
|
53
|
+
"babel-plugin-istanbul": "^6.1.1",
|
|
54
|
+
"coveralls": "^3.1.1",
|
|
55
|
+
"eslint": "^8.21.0",
|
|
56
|
+
"eslint-plugin-import": "^2.26.0",
|
|
57
|
+
"eslint-plugin-jest": "^26.7.0",
|
|
58
|
+
"eslint-plugin-playwright": "^0.10.0",
|
|
59
|
+
"eslint-plugin-testing-library": "^5.6.0",
|
|
60
|
+
"givens": "^1.3.9",
|
|
61
|
+
"jest": "^28.1.3",
|
|
62
|
+
"jest-environment-jsdom": "^28.1.3",
|
|
63
|
+
"jest-extended": "^3.0.2",
|
|
64
|
+
"jsonfile": "^6.1.0",
|
|
55
65
|
"lodash.template": "^4.5.0",
|
|
56
|
-
"msw": "^0.
|
|
57
|
-
"
|
|
58
|
-
"playwright": "^1.
|
|
59
|
-
"
|
|
60
|
-
"postcss": "^
|
|
61
|
-
"postcss-
|
|
62
|
-
"postcss-load-config": "^
|
|
63
|
-
"postcss-nested": "^5.0.
|
|
64
|
-
"prettier": "^2.
|
|
65
|
-
"rollup": "^2.
|
|
66
|
-
"rollup-plugin-
|
|
67
|
-
"rollup-plugin-serve": "^1.0.4",
|
|
66
|
+
"msw": "^0.44.2",
|
|
67
|
+
"nyc": "^15.1.0",
|
|
68
|
+
"playwright": "^1.24.2",
|
|
69
|
+
"postcss": "^8.4.16",
|
|
70
|
+
"postcss-cli": "^10.0.0",
|
|
71
|
+
"postcss-import": "^14.1.0",
|
|
72
|
+
"postcss-load-config": "^4.0.1",
|
|
73
|
+
"postcss-nested": "^5.0.6",
|
|
74
|
+
"prettier": "^2.7.1",
|
|
75
|
+
"rollup": "^2.77.2",
|
|
76
|
+
"rollup-plugin-serve": "^2.0.0",
|
|
68
77
|
"rollup-plugin-terser": "^7.0.2",
|
|
69
|
-
"
|
|
70
|
-
"
|
|
71
|
-
"tslib": "^2.0.1",
|
|
72
|
-
"typescript": "^4.1.2"
|
|
78
|
+
"tslib": "^2.4.0",
|
|
79
|
+
"typescript": "^4.7.4"
|
|
73
80
|
}
|
|
74
81
|
}
|
package/src/dataLoader.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Node } from "./node";
|
|
2
2
|
import { JqTreeWidget } from "./tree.jquery";
|
|
3
3
|
|
|
4
4
|
export type HandleFinishedLoading = () => void;
|
|
@@ -28,7 +28,7 @@ export default class DataLoader {
|
|
|
28
28
|
this.notifyLoading(false, parentNode, $el);
|
|
29
29
|
};
|
|
30
30
|
|
|
31
|
-
const handleSuccess = (data:
|
|
31
|
+
const handleSuccess = (data: string | NodeData[]): void => {
|
|
32
32
|
stopLoading();
|
|
33
33
|
this.treeWidget.loadData(this.parseData(data), parentNode);
|
|
34
34
|
|
|
@@ -108,12 +108,12 @@ export default class DataLoader {
|
|
|
108
108
|
void jQuery.ajax(ajaxSettings);
|
|
109
109
|
}
|
|
110
110
|
|
|
111
|
-
private parseData(data: NodeData): NodeData[] {
|
|
111
|
+
private parseData(data: string | NodeData[]): NodeData[] {
|
|
112
112
|
const { dataFilter } = this.treeWidget.options;
|
|
113
113
|
|
|
114
|
-
const getParsedData = ()
|
|
114
|
+
const getParsedData = () => {
|
|
115
115
|
if (typeof data === "string") {
|
|
116
|
-
return JSON.parse(data) as
|
|
116
|
+
return JSON.parse(data) as NodeData[];
|
|
117
117
|
} else {
|
|
118
118
|
return data;
|
|
119
119
|
}
|
|
@@ -124,7 +124,7 @@ export default class DataLoader {
|
|
|
124
124
|
if (dataFilter) {
|
|
125
125
|
return dataFilter(parsedData);
|
|
126
126
|
} else {
|
|
127
|
-
return parsedData
|
|
127
|
+
return parsedData;
|
|
128
128
|
}
|
|
129
129
|
}
|
|
130
130
|
}
|
|
@@ -1,12 +1,8 @@
|
|
|
1
|
-
import * as jQueryProxy from "jquery";
|
|
2
1
|
import { getPositionName, Node, Position } from "./node";
|
|
3
2
|
import { DropHint, HitArea, PositionInfo } from "./types";
|
|
4
3
|
import { NodeElement } from "./nodeElement";
|
|
5
4
|
import { JqTreeWidget } from "./tree.jquery";
|
|
6
5
|
|
|
7
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access
|
|
8
|
-
const jQuery: JQueryStatic = (<any>jQueryProxy).default || jQueryProxy;
|
|
9
|
-
|
|
10
6
|
interface Dimensions {
|
|
11
7
|
left: number;
|
|
12
8
|
top: number;
|
|
@@ -316,10 +312,14 @@ export class DragAndDropHandler {
|
|
|
316
312
|
|
|
317
313
|
this.stopOpenFolderTimer();
|
|
318
314
|
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
315
|
+
const openFolderDelay = this.treeWidget.options.openFolderDelay;
|
|
316
|
+
|
|
317
|
+
if (openFolderDelay !== false) {
|
|
318
|
+
this.openFolderTimer = window.setTimeout(
|
|
319
|
+
openFolder,
|
|
320
|
+
openFolderDelay
|
|
321
|
+
);
|
|
322
|
+
}
|
|
323
323
|
}
|
|
324
324
|
|
|
325
325
|
private stopOpenFolderTimer(): void {
|
package/src/elementsRenderer.ts
CHANGED
|
@@ -248,6 +248,10 @@ export default class ElementsRenderer {
|
|
|
248
248
|
classes += " jqtree-title-folder";
|
|
249
249
|
}
|
|
250
250
|
|
|
251
|
+
classes += ` jqtree-title-button-${
|
|
252
|
+
this.treeWidget.options.buttonLeft ? "left" : "right"
|
|
253
|
+
}`;
|
|
254
|
+
|
|
251
255
|
titleSpan.className = classes;
|
|
252
256
|
|
|
253
257
|
titleSpan.setAttribute("role", "treeitem");
|
package/src/jqtreeOptions.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Node
|
|
1
|
+
import { Node } from "./node";
|
|
2
2
|
|
|
3
3
|
type CanMoveNodeTo = (
|
|
4
4
|
node: Node,
|
|
@@ -40,7 +40,7 @@ export interface JQTreeOptions {
|
|
|
40
40
|
onLoading: HandleLoadingMethod | undefined;
|
|
41
41
|
onSetStateFromStorage: ((data: string) => void) | undefined;
|
|
42
42
|
openedIcon: string | Element;
|
|
43
|
-
openFolderDelay: number;
|
|
43
|
+
openFolderDelay: number | false;
|
|
44
44
|
rtl: boolean | undefined;
|
|
45
45
|
selectable: boolean;
|
|
46
46
|
saveState: boolean | string;
|
package/src/mouse.widget.ts
CHANGED
|
@@ -22,7 +22,6 @@ const getPositionInfoFromTouch = (
|
|
|
22
22
|
});
|
|
23
23
|
|
|
24
24
|
abstract class MouseWidget<WidgetOptions> extends SimpleWidget<WidgetOptions> {
|
|
25
|
-
public $el: JQuery<HTMLElement>;
|
|
26
25
|
protected isMouseStarted: boolean;
|
|
27
26
|
protected mouseDownInfo: PositionInfo | null;
|
|
28
27
|
private mouseDelayTimer: number | null;
|
|
@@ -30,12 +29,15 @@ abstract class MouseWidget<WidgetOptions> extends SimpleWidget<WidgetOptions> {
|
|
|
30
29
|
|
|
31
30
|
public init(): void {
|
|
32
31
|
const element = this.$el.get(0);
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
32
|
+
|
|
33
|
+
if (element) {
|
|
34
|
+
element.addEventListener("mousedown", this.mouseDown, {
|
|
35
|
+
passive: false,
|
|
36
|
+
});
|
|
37
|
+
element.addEventListener("touchstart", this.touchStart, {
|
|
38
|
+
passive: false,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
39
41
|
|
|
40
42
|
this.isMouseStarted = false;
|
|
41
43
|
this.mouseDelayTimer = null;
|
|
@@ -46,15 +48,17 @@ abstract class MouseWidget<WidgetOptions> extends SimpleWidget<WidgetOptions> {
|
|
|
46
48
|
public deinit(): void {
|
|
47
49
|
const el = this.$el.get(0);
|
|
48
50
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
51
|
+
if (el) {
|
|
52
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
|
|
53
|
+
(el as any).removeEventListener("mousedown", this.mouseDown, {
|
|
54
|
+
passive: false,
|
|
55
|
+
});
|
|
53
56
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
57
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
|
|
58
|
+
(el as any).removeEventListener("touchstart", this.touchStart, {
|
|
59
|
+
passive: false,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
58
62
|
|
|
59
63
|
this.removeMouseMoveEventListeners();
|
|
60
64
|
}
|
package/src/node.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export type NodeData = string | DefaultRecord;
|
|
1
|
+
interface NodeRecordWithChildren extends NodeRecord {
|
|
2
|
+
children: NodeData[];
|
|
3
|
+
}
|
|
5
4
|
|
|
6
5
|
export enum Position {
|
|
7
6
|
Before = 1,
|
|
@@ -34,6 +33,13 @@ export const getPositionName = (position: Position): string => {
|
|
|
34
33
|
export const getPosition = (name: string): Position | undefined =>
|
|
35
34
|
positionNames[name];
|
|
36
35
|
|
|
36
|
+
const isNodeRecordWithChildren = (
|
|
37
|
+
data: NodeData
|
|
38
|
+
): data is NodeRecordWithChildren =>
|
|
39
|
+
typeof data === "object" &&
|
|
40
|
+
"children" in data &&
|
|
41
|
+
data["children"] instanceof Array;
|
|
42
|
+
|
|
37
43
|
export class Node implements INode {
|
|
38
44
|
public id?: NodeId;
|
|
39
45
|
public name: string;
|
|
@@ -131,15 +137,11 @@ export class Node implements INode {
|
|
|
131
137
|
const node = this.createNode(o);
|
|
132
138
|
this.addChild(node);
|
|
133
139
|
|
|
134
|
-
if (
|
|
135
|
-
|
|
136
|
-
o["children"] &&
|
|
137
|
-
o["children"] instanceof Array
|
|
138
|
-
) {
|
|
139
|
-
if (o["children"].length === 0) {
|
|
140
|
+
if (isNodeRecordWithChildren(o)) {
|
|
141
|
+
if (o.children.length === 0) {
|
|
140
142
|
node.isEmptyFolder = true;
|
|
141
143
|
} else {
|
|
142
|
-
node.loadFromData(o
|
|
144
|
+
node.loadFromData(o.children);
|
|
143
145
|
}
|
|
144
146
|
}
|
|
145
147
|
}
|
|
@@ -299,7 +301,7 @@ export class Node implements INode {
|
|
|
299
301
|
/*
|
|
300
302
|
Get the tree as data.
|
|
301
303
|
*/
|
|
302
|
-
public getData(includeParent = false):
|
|
304
|
+
public getData(includeParent = false): NodeRecord[] {
|
|
303
305
|
const getDataFromNodes = (nodes: Node[]): Record<string, unknown>[] => {
|
|
304
306
|
return nodes.map((node) => {
|
|
305
307
|
const tmpNode: Record<string, unknown> = {};
|
|
@@ -379,12 +381,10 @@ export class Node implements INode {
|
|
|
379
381
|
this.parent.addChildAtPosition(node, childIndex + 1);
|
|
380
382
|
|
|
381
383
|
if (
|
|
382
|
-
|
|
383
|
-
nodeInfo
|
|
384
|
-
nodeInfo["children"] instanceof Array &&
|
|
385
|
-
nodeInfo["children"].length
|
|
384
|
+
isNodeRecordWithChildren(nodeInfo) &&
|
|
385
|
+
nodeInfo.children.length
|
|
386
386
|
) {
|
|
387
|
-
node.loadFromData(nodeInfo
|
|
387
|
+
node.loadFromData(nodeInfo.children);
|
|
388
388
|
}
|
|
389
389
|
|
|
390
390
|
return node;
|
|
@@ -401,12 +401,10 @@ export class Node implements INode {
|
|
|
401
401
|
this.parent.addChildAtPosition(node, childIndex);
|
|
402
402
|
|
|
403
403
|
if (
|
|
404
|
-
|
|
405
|
-
nodeInfo
|
|
406
|
-
nodeInfo["children"] instanceof Array &&
|
|
407
|
-
nodeInfo["children"].length
|
|
404
|
+
isNodeRecordWithChildren(nodeInfo) &&
|
|
405
|
+
nodeInfo.children.length
|
|
408
406
|
) {
|
|
409
|
-
node.loadFromData(nodeInfo
|
|
407
|
+
node.loadFromData(nodeInfo.children);
|
|
410
408
|
}
|
|
411
409
|
|
|
412
410
|
return node;
|
|
@@ -445,13 +443,8 @@ export class Node implements INode {
|
|
|
445
443
|
const node = this.createNode(nodeInfo);
|
|
446
444
|
this.addChild(node);
|
|
447
445
|
|
|
448
|
-
if (
|
|
449
|
-
|
|
450
|
-
nodeInfo["children"] &&
|
|
451
|
-
nodeInfo["children"] instanceof Array &&
|
|
452
|
-
nodeInfo["children"].length
|
|
453
|
-
) {
|
|
454
|
-
node.loadFromData(nodeInfo["children"]);
|
|
446
|
+
if (isNodeRecordWithChildren(nodeInfo) && nodeInfo.children.length) {
|
|
447
|
+
node.loadFromData(nodeInfo.children);
|
|
455
448
|
}
|
|
456
449
|
|
|
457
450
|
return node;
|
|
@@ -461,13 +454,8 @@ export class Node implements INode {
|
|
|
461
454
|
const node = this.createNode(nodeInfo);
|
|
462
455
|
this.addChildAtPosition(node, 0);
|
|
463
456
|
|
|
464
|
-
if (
|
|
465
|
-
|
|
466
|
-
nodeInfo["children"] &&
|
|
467
|
-
nodeInfo["children"] instanceof Array &&
|
|
468
|
-
nodeInfo["children"].length
|
|
469
|
-
) {
|
|
470
|
-
node.loadFromData(nodeInfo["children"]);
|
|
457
|
+
if (isNodeRecordWithChildren(nodeInfo) && nodeInfo.children.length) {
|
|
458
|
+
node.loadFromData(nodeInfo.children);
|
|
471
459
|
}
|
|
472
460
|
|
|
473
461
|
return node;
|
|
@@ -641,12 +629,10 @@ export class Node implements INode {
|
|
|
641
629
|
this.setData(nodeData);
|
|
642
630
|
|
|
643
631
|
if (
|
|
644
|
-
|
|
645
|
-
nodeData
|
|
646
|
-
nodeData["children"] instanceof Array &&
|
|
647
|
-
nodeData["children"].length
|
|
632
|
+
isNodeRecordWithChildren(nodeData) &&
|
|
633
|
+
nodeData.children.length
|
|
648
634
|
) {
|
|
649
|
-
addChildren(nodeData
|
|
635
|
+
addChildren(nodeData.children);
|
|
650
636
|
}
|
|
651
637
|
};
|
|
652
638
|
|
package/src/nodeElement.ts
CHANGED
|
@@ -18,10 +18,16 @@ export class NodeElement {
|
|
|
18
18
|
this.treeWidget = treeWidget;
|
|
19
19
|
|
|
20
20
|
if (!node.element) {
|
|
21
|
-
|
|
21
|
+
const element = this.treeWidget.element.get(0);
|
|
22
|
+
|
|
23
|
+
if (element) {
|
|
24
|
+
node.element = element;
|
|
25
|
+
}
|
|
22
26
|
}
|
|
23
27
|
|
|
24
|
-
|
|
28
|
+
if (node.element) {
|
|
29
|
+
this.$element = jQuery(node.element);
|
|
30
|
+
}
|
|
25
31
|
}
|
|
26
32
|
|
|
27
33
|
public addDropHint(position: number): DropHint {
|
|
@@ -99,9 +105,8 @@ export class FolderElement extends NodeElement {
|
|
|
99
105
|
const buttonEl = $button.get(0);
|
|
100
106
|
|
|
101
107
|
if (buttonEl) {
|
|
102
|
-
const icon =
|
|
103
|
-
true
|
|
104
|
-
);
|
|
108
|
+
const icon =
|
|
109
|
+
this.treeWidget.renderer.openedIconElement.cloneNode(true);
|
|
105
110
|
|
|
106
111
|
buttonEl.appendChild(icon);
|
|
107
112
|
}
|
|
@@ -147,9 +152,8 @@ export class FolderElement extends NodeElement {
|
|
|
147
152
|
const buttonEl = $button.get(0);
|
|
148
153
|
|
|
149
154
|
if (buttonEl) {
|
|
150
|
-
const icon =
|
|
151
|
-
true
|
|
152
|
-
);
|
|
155
|
+
const icon =
|
|
156
|
+
this.treeWidget.renderer.closedIconElement.cloneNode(true);
|
|
153
157
|
|
|
154
158
|
buttonEl.appendChild(icon);
|
|
155
159
|
}
|
|
@@ -248,7 +252,11 @@ class GhostDropHint implements DropHint {
|
|
|
248
252
|
}
|
|
249
253
|
|
|
250
254
|
public moveInsideOpenFolder(): void {
|
|
251
|
-
|
|
255
|
+
const childElement = this.node.children[0].element;
|
|
256
|
+
|
|
257
|
+
if (childElement) {
|
|
258
|
+
jQuery(childElement).before(this.$ghost);
|
|
259
|
+
}
|
|
252
260
|
}
|
|
253
261
|
|
|
254
262
|
public moveInside(): void {
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import crypto from "crypto";
|
|
4
|
+
import { BrowserContext } from "@playwright/test";
|
|
5
|
+
|
|
6
|
+
const istanbulCLIOutput = path.join(process.cwd(), ".nyc_output");
|
|
7
|
+
|
|
8
|
+
const generateUUID = () => crypto.randomBytes(16).toString("hex");
|
|
9
|
+
|
|
10
|
+
export const initCoverage = async (context: BrowserContext) => {
|
|
11
|
+
await fs.promises.mkdir(istanbulCLIOutput, { recursive: true });
|
|
12
|
+
|
|
13
|
+
await context.exposeFunction(
|
|
14
|
+
"collectIstanbulCoverage",
|
|
15
|
+
(coverageJSON: string) => {
|
|
16
|
+
if (!coverageJSON) {
|
|
17
|
+
console.log("No coverage");
|
|
18
|
+
} else {
|
|
19
|
+
const filename = path.join(
|
|
20
|
+
istanbulCLIOutput,
|
|
21
|
+
`playwright_coverage_${generateUUID()}.json`
|
|
22
|
+
);
|
|
23
|
+
console.log(`Writing coverage to ${filename}`);
|
|
24
|
+
fs.writeFileSync(filename, coverageJSON);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
);
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export const saveCoverage = async (context: BrowserContext) => {
|
|
31
|
+
for (const page of context.pages()) {
|
|
32
|
+
await page.evaluate(() => {
|
|
33
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
34
|
+
const anyWindow = window as any;
|
|
35
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access
|
|
36
|
+
const coverageData = anyWindow.__coverage__;
|
|
37
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
|
|
38
|
+
anyWindow.collectIstanbulCoverage(JSON.stringify(coverageData));
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
};
|