jqtree 1.6.2 → 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 -12
- 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/{babel.config.json → config/babel.config.json} +0 -0
- package/{babel.coverage.config.json → config/babel.coverage.config.json} +0 -0
- package/{jest-jsdom.config.js → config/jest.config.js} +8 -3
- package/config/playwright.config.js +18 -0
- package/config/production +4 -0
- package/{rollup.config.js → config/rollup.config.js} +3 -3
- package/{jqtree.postcss → css/jqtree.postcss} +0 -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 +4 -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/{_entries → docs/_entries}/62_refresh.md +0 -0
- package/{_entries → docs/_entries}/63_reload.md +2 -2
- package/{_entries → docs/_entries}/64_removenode.md +0 -0
- package/{_entries → docs/_entries}/65_selectnode.md +0 -0
- package/{_entries → docs/_entries}/66_scrolltonode.md +0 -0
- package/{_entries → docs/_entries}/67_setoption.md +0 -0
- package/{_entries → docs/_entries}/68_setstate.md +0 -0
- package/{_entries → docs/_entries}/69_toggle.md +0 -0
- package/{_entries → docs/_entries}/70_tojson.md +0 -0
- package/{_entries → docs/_entries}/71_updatenode.md +1 -1
- package/{_entries → docs/_entries}/72_events.md +0 -0
- package/{_entries → docs/_entries}/73_tree-click.md +0 -0
- package/{_entries → docs/_entries}/74_tree-close.md +0 -0
- package/{_entries → docs/_entries}/75_tree-contextmenu.md +0 -0
- package/{_entries → docs/_entries}/76_tree-dblclick.md +0 -0
- package/{_entries → docs/_entries}/77_tree-init.md +0 -0
- package/{_entries → docs/_entries}/78_tree-load-data.md +0 -0
- package/{_entries → docs/_entries}/79_tree-loading-data.md +0 -0
- package/{_entries → docs/_entries}/80_tree-move.md +0 -0
- package/{_entries → docs/_entries}/81_tree-refresh.md +0 -0
- package/{_entries → docs/_entries}/82_tree-open.md +0 -0
- package/{_entries → docs/_entries}/83_tree-select.md +0 -0
- package/{_entries → docs/_entries}/84_multiple-selection.md +0 -0
- package/{_entries → docs/_entries}/85_add-to-selection.md +0 -0
- package/{_entries → docs/_entries}/86_get-selected-nodes.md +0 -0
- package/{_entries → docs/_entries}/87_is-node-selected.md +1 -1
- package/{_entries → docs/_entries}/88_remove-from-selection.md +0 -0
- package/{_entries → docs/_entries}/89_node-functions.md +0 -0
- package/{_entries → docs/_entries}/90_children.md +0 -0
- package/{_entries → docs/_entries}/91_getdata.md +2 -2
- package/{_entries → docs/_entries}/92_getlevel.md +0 -0
- package/{_entries → docs/_entries}/93_getnextnode.md +0 -0
- package/{_entries → docs/_entries}/94_getnextsibling.md +0 -0
- package/{_entries → docs/_entries}/95_getpreviousnode.md +0 -0
- package/{_entries → docs/_entries}/96_getprevioussibling.md +0 -0
- package/{_entries → 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/{_examples → docs/_examples}/14_filter.html +7 -9
- package/docs/_layouts/example.html +7 -0
- package/{_layouts/base.html → docs/_layouts/page.html} +4 -11
- 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/{static → docs/static}/bower.json +0 -1
- package/{static → docs/static}/bower_components/fontawesome/css/all.min.css +0 -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 +0 -0
- package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-brands-400.ttf +0 -0
- package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-brands-400.woff +0 -0
- package/{static → 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 +0 -0
- package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-regular-400.ttf +0 -0
- package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-regular-400.woff +0 -0
- package/{static → 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 +0 -0
- package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-solid-900.ttf +0 -0
- package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-solid-900.woff +0 -0
- package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-solid-900.woff2 +0 -0
- package/{static → docs/static}/bower_components/jquery/dist/jquery.js +0 -0
- package/{static → docs/static}/bower_components/jquery/dist/jquery.min.js +0 -0
- package/{static → docs/static}/bower_components/jquery-mockjax/dist/jquery.mockjax.js +0 -0
- package/docs/static/documentation.css +1313 -0
- package/docs/static/documentation.js +26 -0
- package/{static → docs/static}/example.css +5 -37
- package/{static → docs/static}/example.postcss +5 -35
- package/{static → docs/static}/example_data.js +0 -0
- 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/{static → docs/static}/examples/filter.js +2 -2
- 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/lib/dragAndDropHandler.js +8 -4
- package/lib/mouse.widget.js +3 -3
- package/lib/nodeElement.js +3 -3
- package/lib/playwright/coverage.js +140 -0
- package/lib/playwright/playwright.test.js +293 -201
- package/lib/playwright/testUtils.js +267 -0
- package/lib/test/jqTree/events.test.js +10 -9
- package/lib/test/jqTree/loadOnDemand.test.js +26 -21
- package/lib/test/jqTree/methods.test.js +84 -64
- package/lib/test/jqTree/options.test.js +41 -29
- package/lib/tree.jquery.js +4 -4
- package/package.json +48 -49
- package/src/dragAndDropHandler.ts +8 -4
- package/src/jqtreeOptions.ts +1 -1
- package/src/playwright/.eslintrc +2 -2
- package/src/playwright/coverage.ts +41 -0
- package/src/playwright/playwright.test.ts +50 -52
- 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/test/.eslintrc +13 -3
- package/src/test/jqTree/events.test.ts +10 -9
- package/src/test/jqTree/loadOnDemand.test.ts +10 -10
- package/src/test/jqTree/methods.test.ts +37 -45
- package/src/test/jqTree/options.test.ts +26 -28
- package/src/tree.jquery.d.ts +1 -1
- package/tree.jquery.debug.js +17 -14
- package/tree.jquery.debug.js.map +1 -1
- package/tree.jquery.js +3 -3
- package/tree.jquery.js.map +1 -1
- package/_entries/61_prependnode.md +0 -21
- package/_examples/13_drag_outside.html +0 -26
- package/_layouts/frontpage.html +0 -20
- package/_layouts/page.html +0 -7
- package/index.html +0 -48
- package/jest-browser.config.js +0 -15
- package/jest-playwright.config.js +0 -21
- package/jest.config.js +0 -8
- package/lib/playwright/testUtil.js +0 -459
- package/lib/playwright/visualRegression.js +0 -193
- 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 -170
- package/src/playwright/visualRegression.ts +0 -88
- 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/documentation.css +0 -171
- package/static/documentation.js +0 -48
package/tree.jquery.debug.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.jquery.debug.js","sources":["src/version.ts","src/node.ts","src/dragAndDropHandler.ts","src/util.ts","src/elementsRenderer.ts","src/dataLoader.ts","src/keyHandler.ts","src/simple.widget.ts","src/mouse.widget.ts","src/saveStateHandler.ts","src/scrollHandler.ts","src/selectNodeHandler.ts","src/nodeElement.ts","src/tree.jquery.ts"],"sourcesContent":["const version = \"1.6.2\";\n\nexport default version;\n","interface NodeRecordWithChildren extends NodeRecord {\n children: NodeData[];\n}\n\nexport enum Position {\n Before = 1,\n After,\n Inside,\n None,\n}\n\nconst positionNames: Record<string, Position> = {\n before: Position.Before,\n after: Position.After,\n inside: Position.Inside,\n none: Position.None,\n};\n\ntype IterateCallback = (node: Node, level: number) => boolean;\n\nexport const getPositionName = (position: Position): string => {\n for (const name in positionNames) {\n if (Object.prototype.hasOwnProperty.call(positionNames, name)) {\n if (positionNames[name] === position) {\n return name;\n }\n }\n }\n\n return \"\";\n};\n\nexport const getPosition = (name: string): Position | undefined =>\n positionNames[name];\n\nconst isNodeRecordWithChildren = (\n data: NodeData\n): data is NodeRecordWithChildren =>\n typeof data === \"object\" &&\n \"children\" in data &&\n data[\"children\"] instanceof Array;\n\nexport class Node implements INode {\n public id?: NodeId;\n public name: string;\n public children: Node[];\n public parent: Node | null;\n public idMapping: Map<NodeId, Node>;\n public tree?: Node;\n public nodeClass?: typeof Node;\n public load_on_demand: boolean;\n public is_open: boolean;\n public element: HTMLElement;\n public is_loading: boolean;\n public isEmptyFolder: boolean;\n\n [key: string]: unknown;\n\n constructor(o: NodeData | null = null, isRoot = false, nodeClass = Node) {\n this.name = \"\";\n this.isEmptyFolder = false;\n this.load_on_demand = false;\n\n this.setData(o);\n\n this.children = [];\n this.parent = null;\n\n if (isRoot) {\n this.idMapping = new Map<NodeId, Node>();\n this.tree = this;\n this.nodeClass = nodeClass;\n }\n }\n\n /*\n Set the data of this node.\n\n setData(string): set the name of the node\n setdata(object): set attributes of the node\n\n Examples:\n setdata('node1')\n\n setData({ name: 'node1', id: 1});\n\n setData({ name: 'node2', id: 2, color: 'green'});\n\n * This is an internal function; it is not in the docs\n * Does not remove existing node values\n */\n public setData(o: NodeData | null): void {\n if (!o) {\n return;\n } else if (typeof o === \"string\") {\n this.name = o;\n } else if (typeof o === \"object\") {\n for (const key in o) {\n if (Object.prototype.hasOwnProperty.call(o, key)) {\n const value = o[key];\n\n if (key === \"label\" || key === \"name\") {\n // You can use the 'label' key instead of 'name'; this is a legacy feature\n if (typeof value === \"string\") {\n this.name = value;\n }\n } else if (key !== \"children\" && key !== \"parent\") {\n // You can't update the children or the parent using this function\n this[key] = value;\n }\n }\n }\n }\n }\n\n /*\n Create tree from data.\n\n Structure of data is:\n [\n {\n name: 'node1',\n children: [\n { name: 'child1' },\n { name: 'child2' }\n ]\n },\n {\n name: 'node2'\n }\n ]\n */\n public loadFromData(data: NodeData[]): Node {\n this.removeChildren();\n\n for (const o of data) {\n const node = this.createNode(o);\n this.addChild(node);\n\n if (isNodeRecordWithChildren(o)) {\n if (o.children.length === 0) {\n node.isEmptyFolder = true;\n } else {\n node.loadFromData(o.children);\n }\n }\n }\n\n return this;\n }\n\n /*\n Add child.\n\n tree.addChild(\n new Node('child1')\n );\n */\n public addChild(node: Node): void {\n this.children.push(node);\n node.setParent(this);\n }\n\n /*\n Add child at position. Index starts at 0.\n\n tree.addChildAtPosition(\n new Node('abc'),\n 1\n );\n */\n public addChildAtPosition(node: Node, index: number): void {\n this.children.splice(index, 0, node);\n node.setParent(this);\n }\n\n /*\n Remove child. This also removes the children of the node.\n\n tree.removeChild(tree.children[0]);\n */\n public removeChild(node: Node): void {\n // remove children from the index\n node.removeChildren();\n\n this.doRemoveChild(node);\n }\n\n /*\n Get child index.\n\n var index = getChildIndex(node);\n */\n public getChildIndex(node: Node): number {\n return this.children.indexOf(node);\n }\n\n /*\n Does the tree have children?\n\n if (tree.hasChildren()) {\n //\n }\n */\n public hasChildren(): boolean {\n return this.children.length !== 0;\n }\n\n public isFolder(): boolean {\n return this.hasChildren() || this.load_on_demand;\n }\n\n /*\n Iterate over all the nodes in the tree.\n\n Calls callback with (node, level).\n\n The callback must return true to continue the iteration on current node.\n\n tree.iterate(\n function(node, level) {\n console.log(node.name);\n\n // stop iteration after level 2\n return (level <= 2);\n }\n );\n\n */\n public iterate(callback: IterateCallback): void {\n const _iterate = (node: Node, level: number): void => {\n if (node.children) {\n for (const child of node.children) {\n const result = callback(child, level);\n\n if (result && child.hasChildren()) {\n _iterate(child, level + 1);\n }\n }\n }\n };\n\n _iterate(this, 0);\n }\n\n /*\n Move node relative to another node.\n\n Argument position: Position.BEFORE, Position.AFTER or Position.Inside\n\n // move node1 after node2\n tree.moveNode(node1, node2, Position.AFTER);\n */\n public moveNode(\n movedNode: Node,\n targetNode: Node,\n position: Position\n ): boolean {\n if (!movedNode.parent || movedNode.isParentOf(targetNode)) {\n // - Node is parent of target node\n // - Or, parent is empty\n return false;\n } else {\n movedNode.parent.doRemoveChild(movedNode);\n\n switch (position) {\n case Position.After: {\n if (targetNode.parent) {\n targetNode.parent.addChildAtPosition(\n movedNode,\n targetNode.parent.getChildIndex(targetNode) + 1\n );\n return true;\n }\n return false;\n }\n\n case Position.Before: {\n if (targetNode.parent) {\n targetNode.parent.addChildAtPosition(\n movedNode,\n targetNode.parent.getChildIndex(targetNode)\n );\n return true;\n }\n return false;\n }\n\n case Position.Inside: {\n // move inside as first child\n targetNode.addChildAtPosition(movedNode, 0);\n return true;\n }\n\n default:\n return false;\n }\n }\n }\n\n /*\n Get the tree as data.\n */\n public getData(includeParent = false): NodeRecord[] {\n const getDataFromNodes = (nodes: Node[]): Record<string, unknown>[] => {\n return nodes.map((node) => {\n const tmpNode: Record<string, unknown> = {};\n\n for (const k in node) {\n if (\n [\n \"parent\",\n \"children\",\n \"element\",\n \"idMapping\",\n \"load_on_demand\",\n \"nodeClass\",\n \"tree\",\n \"isEmptyFolder\",\n ].indexOf(k) === -1 &&\n Object.prototype.hasOwnProperty.call(node, k)\n ) {\n const v = node[k];\n tmpNode[k] = v;\n }\n }\n\n if (node.hasChildren()) {\n tmpNode[\"children\"] = getDataFromNodes(node.children);\n }\n\n return tmpNode;\n });\n };\n\n if (includeParent) {\n return getDataFromNodes([this]);\n } else {\n return getDataFromNodes(this.children);\n }\n }\n\n public getNodeByName(name: string): Node | null {\n return this.getNodeByCallback((node: Node) => node.name === name);\n }\n\n public getNodeByNameMustExist(name: string): Node {\n const node = this.getNodeByCallback((n: Node) => n.name === name);\n\n if (!node) {\n throw `Node with name ${name} not found`;\n }\n\n return node;\n }\n\n public getNodeByCallback(callback: (node: Node) => boolean): Node | null {\n let result: Node | null = null;\n\n this.iterate((node: Node) => {\n if (result) {\n return false;\n } else if (callback(node)) {\n result = node;\n return false;\n } else {\n return true;\n }\n });\n\n return result;\n }\n\n public addAfter(nodeInfo: NodeData): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const node = this.createNode(nodeInfo);\n\n const childIndex = this.parent.getChildIndex(this);\n this.parent.addChildAtPosition(node, childIndex + 1);\n\n if (\n isNodeRecordWithChildren(nodeInfo) &&\n nodeInfo.children.length\n ) {\n node.loadFromData(nodeInfo.children);\n }\n\n return node;\n }\n }\n\n public addBefore(nodeInfo: NodeData): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const node = this.createNode(nodeInfo);\n\n const childIndex = this.parent.getChildIndex(this);\n this.parent.addChildAtPosition(node, childIndex);\n\n if (\n isNodeRecordWithChildren(nodeInfo) &&\n nodeInfo.children.length\n ) {\n node.loadFromData(nodeInfo.children);\n }\n\n return node;\n }\n }\n\n public addParent(nodeInfo: NodeData): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const newParent = this.createNode(nodeInfo);\n\n if (this.tree) {\n newParent.setParent(this.tree);\n }\n const originalParent = this.parent;\n\n for (const child of originalParent.children) {\n newParent.addChild(child);\n }\n\n originalParent.children = [];\n originalParent.addChild(newParent);\n return newParent;\n }\n }\n\n public remove(): void {\n if (this.parent) {\n this.parent.removeChild(this);\n this.parent = null;\n }\n }\n\n public append(nodeInfo: NodeData): Node {\n const node = this.createNode(nodeInfo);\n this.addChild(node);\n\n if (isNodeRecordWithChildren(nodeInfo) && nodeInfo.children.length) {\n node.loadFromData(nodeInfo.children);\n }\n\n return node;\n }\n\n public prepend(nodeInfo: NodeData): Node {\n const node = this.createNode(nodeInfo);\n this.addChildAtPosition(node, 0);\n\n if (isNodeRecordWithChildren(nodeInfo) && nodeInfo.children.length) {\n node.loadFromData(nodeInfo.children);\n }\n\n return node;\n }\n\n public isParentOf(node: Node): boolean {\n let parent = node.parent;\n\n while (parent) {\n if (parent === this) {\n return true;\n }\n\n parent = parent.parent;\n }\n\n return false;\n }\n\n public getLevel(): number {\n let level = 0;\n let node: Node = this; // eslint-disable-line @typescript-eslint/no-this-alias\n\n while (node.parent) {\n level += 1;\n node = node.parent;\n }\n\n return level;\n }\n\n public getNodeById(nodeId: NodeId): Node | null {\n return this.idMapping.get(nodeId) || null;\n }\n\n public addNodeToIndex(node: Node): void {\n if (node.id != null) {\n this.idMapping.set(node.id, node);\n }\n }\n\n public removeNodeFromIndex(node: Node): void {\n if (node.id != null) {\n this.idMapping.delete(node.id);\n }\n }\n\n public removeChildren(): void {\n this.iterate((child: Node) => {\n this.tree?.removeNodeFromIndex(child);\n return true;\n });\n\n this.children = [];\n }\n\n public getPreviousSibling(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const previousIndex = this.parent.getChildIndex(this) - 1;\n if (previousIndex >= 0) {\n return this.parent.children[previousIndex];\n } else {\n return null;\n }\n }\n }\n\n public getNextSibling(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const nextIndex = this.parent.getChildIndex(this) + 1;\n if (nextIndex < this.parent.children.length) {\n return this.parent.children[nextIndex];\n } else {\n return null;\n }\n }\n }\n\n public getNodesByProperty(key: string, value: unknown): Node[] {\n return this.filter((node: Node) => node[key] === value);\n }\n\n public filter(f: (node: Node) => boolean): Node[] {\n const result: Node[] = [];\n\n this.iterate((node: Node) => {\n if (f(node)) {\n result.push(node);\n }\n\n return true;\n });\n\n return result;\n }\n\n public getNextNode(includeChildren = true): Node | null {\n if (includeChildren && this.hasChildren() && this.is_open) {\n // First child\n return this.children[0];\n } else {\n if (!this.parent) {\n return null;\n } else {\n const nextSibling = this.getNextSibling();\n if (nextSibling) {\n // Next sibling\n return nextSibling;\n } else {\n // Next node of parent\n return this.parent.getNextNode(false);\n }\n }\n }\n }\n\n public getPreviousNode(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const previousSibling = this.getPreviousSibling();\n if (previousSibling) {\n if (\n !previousSibling.hasChildren() ||\n !previousSibling.is_open\n ) {\n // Previous sibling\n return previousSibling;\n } else {\n // Last child of previous sibling\n return previousSibling.getLastChild();\n }\n } else {\n return this.getParent();\n }\n }\n }\n\n public getParent(): Node | null {\n // Return parent except if it is the root node\n if (!this.parent) {\n return null;\n } else if (!this.parent.parent) {\n // Root node -> null\n return null;\n } else {\n return this.parent;\n }\n }\n\n public getLastChild(): Node | null {\n if (!this.hasChildren()) {\n return null;\n } else {\n const lastChild = this.children[this.children.length - 1];\n if (!(lastChild.hasChildren() && lastChild.is_open)) {\n return lastChild;\n } else {\n return lastChild.getLastChild();\n }\n }\n }\n\n // Init Node from data without making it the root of the tree\n public initFromData(data: NodeData): void {\n const addNode = (nodeData: NodeData): void => {\n this.setData(nodeData);\n\n if (\n isNodeRecordWithChildren(nodeData) &&\n nodeData.children.length\n ) {\n addChildren(nodeData.children);\n }\n };\n\n const addChildren = (childrenData: NodeData[]): void => {\n for (const child of childrenData) {\n const node = this.createNode();\n node.initFromData(child);\n this.addChild(node);\n }\n };\n\n addNode(data);\n }\n\n private setParent(parent: Node): void {\n this.parent = parent;\n this.tree = parent.tree;\n this.tree?.addNodeToIndex(this);\n }\n\n private doRemoveChild(node: Node): void {\n this.children.splice(this.getChildIndex(node), 1);\n this.tree?.removeNodeFromIndex(node);\n }\n\n private getNodeClass(): typeof Node {\n return this.nodeClass || this?.tree?.nodeClass || Node;\n }\n\n private createNode(nodeData?: NodeData): Node {\n const nodeClass = this.getNodeClass();\n return new nodeClass(nodeData);\n }\n}\n","import { getPositionName, Node, Position } from \"./node\";\nimport { DropHint, HitArea, PositionInfo } from \"./types\";\nimport { NodeElement } from \"./nodeElement\";\nimport { JqTreeWidget } from \"./tree.jquery\";\n\ninterface Dimensions {\n left: number;\n top: number;\n right: number;\n bottom: number;\n}\n\nexport class DragAndDropHandler {\n public hitAreas: HitArea[];\n public isDragging: boolean;\n public currentItem: NodeElement | null;\n public hoveredArea: HitArea | null;\n public positionInfo: PositionInfo | null;\n\n private treeWidget: JqTreeWidget;\n private dragElement: DragElement | null;\n private previousGhost: DropHint | null;\n private openFolderTimer: number | null;\n\n constructor(treeWidget: JqTreeWidget) {\n this.treeWidget = treeWidget;\n\n this.hoveredArea = null;\n this.hitAreas = [];\n this.isDragging = false;\n this.currentItem = null;\n this.positionInfo = null;\n }\n\n public mouseCapture(positionInfo: PositionInfo): boolean | null {\n const $element = jQuery(positionInfo.target);\n\n if (!this.mustCaptureElement($element)) {\n return null;\n }\n\n if (\n this.treeWidget.options.onIsMoveHandle &&\n !this.treeWidget.options.onIsMoveHandle($element)\n ) {\n return null;\n }\n\n let nodeElement = this.treeWidget._getNodeElement($element);\n\n if (nodeElement && this.treeWidget.options.onCanMove) {\n if (!this.treeWidget.options.onCanMove(nodeElement.node)) {\n nodeElement = null;\n }\n }\n\n this.currentItem = nodeElement;\n return this.currentItem != null;\n }\n\n public mouseStart(positionInfo: PositionInfo): boolean {\n if (\n !this.currentItem ||\n positionInfo.pageX === undefined ||\n positionInfo.pageY === undefined\n ) {\n return false;\n }\n\n this.refresh();\n\n const offset = jQuery(positionInfo.target).offset();\n const left = offset ? offset.left : 0;\n const top = offset ? offset.top : 0;\n\n const node = this.currentItem.node;\n\n this.dragElement = new DragElement(\n node.name,\n positionInfo.pageX - left,\n positionInfo.pageY - top,\n this.treeWidget.element,\n this.treeWidget.options.autoEscape ?? true\n );\n\n this.isDragging = true;\n this.positionInfo = positionInfo;\n this.currentItem.$element.addClass(\"jqtree-moving\");\n return true;\n }\n\n public mouseDrag(positionInfo: PositionInfo): boolean {\n if (\n !this.currentItem ||\n !this.dragElement ||\n positionInfo.pageX === undefined ||\n positionInfo.pageY === undefined\n ) {\n return false;\n }\n\n this.dragElement.move(positionInfo.pageX, positionInfo.pageY);\n this.positionInfo = positionInfo;\n\n const area = this.findHoveredArea(\n positionInfo.pageX,\n positionInfo.pageY\n );\n\n if (area && this.canMoveToArea(area)) {\n if (!area.node.isFolder()) {\n this.stopOpenFolderTimer();\n }\n\n if (this.hoveredArea !== area) {\n this.hoveredArea = area;\n\n // If this is a closed folder, start timer to open it\n if (this.mustOpenFolderTimer(area)) {\n this.startOpenFolderTimer(area.node);\n } else {\n this.stopOpenFolderTimer();\n }\n\n this.updateDropHint();\n }\n } else {\n this.removeDropHint();\n this.stopOpenFolderTimer();\n this.hoveredArea = area;\n }\n\n if (!area) {\n if (this.treeWidget.options.onDragMove) {\n this.treeWidget.options.onDragMove(\n this.currentItem.node,\n positionInfo.originalEvent\n );\n }\n }\n\n return true;\n }\n\n public mouseStop(positionInfo: PositionInfo): boolean {\n this.moveItem(positionInfo);\n this.clear();\n this.removeHover();\n this.removeDropHint();\n this.removeHitAreas();\n\n const currentItem = this.currentItem;\n\n if (this.currentItem) {\n this.currentItem.$element.removeClass(\"jqtree-moving\");\n this.currentItem = null;\n }\n\n this.isDragging = false;\n this.positionInfo = null;\n\n if (!this.hoveredArea && currentItem) {\n if (this.treeWidget.options.onDragStop) {\n this.treeWidget.options.onDragStop(\n currentItem.node,\n positionInfo.originalEvent\n );\n }\n }\n\n return false;\n }\n\n public refresh(): void {\n this.removeHitAreas();\n\n if (this.currentItem) {\n this.generateHitAreas();\n\n this.currentItem = this.treeWidget._getNodeElementForNode(\n this.currentItem.node\n );\n\n if (this.isDragging) {\n this.currentItem.$element.addClass(\"jqtree-moving\");\n }\n }\n }\n\n private generateHitAreas(): void {\n if (!this.currentItem) {\n this.hitAreas = [];\n } else {\n const hitAreasGenerator = new HitAreasGenerator(\n this.treeWidget.tree,\n this.currentItem.node,\n this.getTreeDimensions().bottom\n );\n this.hitAreas = hitAreasGenerator.generate();\n }\n }\n\n private mustCaptureElement($element: JQuery<HTMLElement>): boolean {\n return !$element.is(\"input,select,textarea\");\n }\n\n private canMoveToArea(area: HitArea): boolean {\n if (!this.treeWidget.options.onCanMoveTo) {\n return true;\n }\n\n if (!this.currentItem) {\n return false;\n }\n\n const positionName = getPositionName(area.position);\n\n return this.treeWidget.options.onCanMoveTo(\n this.currentItem.node,\n area.node,\n positionName\n );\n }\n\n private removeHitAreas(): void {\n this.hitAreas = [];\n }\n\n private clear(): void {\n if (this.dragElement) {\n this.dragElement.remove();\n this.dragElement = null;\n }\n }\n\n private removeDropHint(): void {\n if (this.previousGhost) {\n this.previousGhost.remove();\n }\n }\n\n private removeHover(): void {\n this.hoveredArea = null;\n }\n\n private findHoveredArea(x: number, y: number): HitArea | null {\n const dimensions = this.getTreeDimensions();\n\n if (\n x < dimensions.left ||\n y < dimensions.top ||\n x > dimensions.right ||\n y > dimensions.bottom\n ) {\n return null;\n }\n\n let low = 0;\n let high = this.hitAreas.length;\n while (low < high) {\n const mid = (low + high) >> 1;\n const area = this.hitAreas[mid];\n\n if (y < area.top) {\n high = mid;\n } else if (y > area.bottom) {\n low = mid + 1;\n } else {\n return area;\n }\n }\n\n return null;\n }\n\n private mustOpenFolderTimer(area: HitArea): boolean {\n const node = area.node;\n\n return (\n node.isFolder() &&\n !node.is_open &&\n area.position === Position.Inside\n );\n }\n\n private updateDropHint(): void {\n if (!this.hoveredArea) {\n return;\n }\n\n // remove previous drop hint\n this.removeDropHint();\n\n // add new drop hint\n const nodeElement = this.treeWidget._getNodeElementForNode(\n this.hoveredArea.node\n );\n this.previousGhost = nodeElement.addDropHint(this.hoveredArea.position);\n }\n\n private startOpenFolderTimer(folder: Node): void {\n const openFolder = (): void => {\n this.treeWidget._openNode(\n folder,\n this.treeWidget.options.slide,\n () => {\n this.refresh();\n this.updateDropHint();\n }\n );\n };\n\n this.stopOpenFolderTimer();\n\n this.openFolderTimer = window.setTimeout(\n openFolder,\n this.treeWidget.options.openFolderDelay\n );\n }\n\n private stopOpenFolderTimer(): void {\n if (this.openFolderTimer) {\n clearTimeout(this.openFolderTimer);\n this.openFolderTimer = null;\n }\n }\n\n private moveItem(positionInfo: PositionInfo): void {\n if (\n this.currentItem &&\n this.hoveredArea &&\n this.hoveredArea.position !== Position.None &&\n this.canMoveToArea(this.hoveredArea)\n ) {\n const movedNode = this.currentItem.node;\n const targetNode = this.hoveredArea.node;\n const position = this.hoveredArea.position;\n const previousParent = movedNode.parent;\n\n if (position === Position.Inside) {\n this.hoveredArea.node.is_open = true;\n }\n\n const doMove = (): void => {\n this.treeWidget.tree.moveNode(movedNode, targetNode, position);\n this.treeWidget.element.empty();\n this.treeWidget._refreshElements(null);\n };\n\n const event = this.treeWidget._triggerEvent(\"tree.move\", {\n move_info: {\n moved_node: movedNode,\n target_node: targetNode,\n position: getPositionName(position),\n previous_parent: previousParent,\n do_move: doMove,\n original_event: positionInfo.originalEvent,\n },\n });\n\n if (!event.isDefaultPrevented()) {\n doMove();\n }\n }\n }\n\n private getTreeDimensions(): Dimensions {\n // Return the dimensions of the tree. Add a margin to the bottom to allow\n // to drag-and-drop after the last element.\n const offset = this.treeWidget.element.offset();\n\n if (!offset) {\n return { left: 0, top: 0, right: 0, bottom: 0 };\n } else {\n const el = this.treeWidget.element;\n const width = el.width() || 0;\n const height = el.height() || 0;\n const left = offset.left + this.treeWidget._getScrollLeft();\n\n return {\n left,\n top: offset.top,\n right: left + width,\n bottom: offset.top + height + 16,\n };\n }\n }\n}\n\nabstract class VisibleNodeIterator {\n private tree: Node;\n\n constructor(tree: Node) {\n this.tree = tree;\n }\n\n protected iterate(): void {\n let isFirstNode = true;\n\n const _iterateNode = (node: Node, nextNode: Node | null): void => {\n let mustIterateInside =\n (node.is_open || !node.element) && node.hasChildren();\n\n let $element: JQuery<HTMLElement> | null = null;\n\n if (node.element) {\n $element = jQuery(node.element);\n\n if (!$element.is(\":visible\")) {\n return;\n }\n\n if (isFirstNode) {\n this.handleFirstNode(node);\n isFirstNode = false;\n }\n\n if (!node.hasChildren()) {\n this.handleNode(node, nextNode, $element);\n } else if (node.is_open) {\n if (!this.handleOpenFolder(node, $element)) {\n mustIterateInside = false;\n }\n } else {\n this.handleClosedFolder(node, nextNode, $element);\n }\n }\n\n if (mustIterateInside) {\n const childrenLength = node.children.length;\n node.children.forEach((_, i) => {\n if (i === childrenLength - 1) {\n _iterateNode(node.children[i], null);\n } else {\n _iterateNode(node.children[i], node.children[i + 1]);\n }\n });\n\n if (node.is_open && $element) {\n this.handleAfterOpenFolder(node, nextNode);\n }\n }\n };\n\n _iterateNode(this.tree, null);\n }\n\n protected abstract handleNode(\n node: Node,\n nextNode: Node | null,\n $element: JQuery\n ): void;\n\n /*\n override\n return\n - true: continue iterating\n - false: stop iterating\n */\n protected abstract handleOpenFolder(node: Node, $element: JQuery): boolean;\n\n protected abstract handleClosedFolder(\n node: Node,\n nextNode: Node | null,\n $element: JQuery\n ): void;\n\n protected abstract handleAfterOpenFolder(\n node: Node,\n nextNode: Node | null\n ): void;\n\n protected abstract handleFirstNode(node: Node): void;\n}\n\nexport class HitAreasGenerator extends VisibleNodeIterator {\n private currentNode: Node;\n private treeBottom: number;\n private positions: HitArea[];\n private lastTop: number;\n\n constructor(tree: Node, currentNode: Node, treeBottom: number) {\n super(tree);\n\n this.currentNode = currentNode;\n this.treeBottom = treeBottom;\n }\n\n public generate(): HitArea[] {\n this.positions = [];\n this.lastTop = 0;\n\n this.iterate();\n\n return this.generateHitAreas(this.positions);\n }\n\n protected generateHitAreas(positions: HitArea[]): HitArea[] {\n let previousTop = -1;\n let group = [];\n const hitAreas: HitArea[] = [];\n\n for (const position of positions) {\n if (position.top !== previousTop && group.length) {\n if (group.length) {\n this.generateHitAreasForGroup(\n hitAreas,\n group,\n previousTop,\n position.top\n );\n }\n\n previousTop = position.top;\n group = [];\n }\n\n group.push(position);\n }\n\n this.generateHitAreasForGroup(\n hitAreas,\n group,\n previousTop,\n this.treeBottom\n );\n\n return hitAreas;\n }\n\n protected handleOpenFolder(node: Node, $element: JQuery): boolean {\n if (node === this.currentNode) {\n // Cannot move inside current item\n // Stop iterating\n return false;\n }\n\n // Cannot move before current item\n if (node.children[0] !== this.currentNode) {\n this.addPosition(node, Position.Inside, this.getTop($element));\n }\n\n // Continue iterating\n return true;\n }\n\n protected handleClosedFolder(\n node: Node,\n nextNode: Node,\n $element: JQuery\n ): void {\n const top = this.getTop($element);\n\n if (node === this.currentNode) {\n // Cannot move after current item\n this.addPosition(node, Position.None, top);\n } else {\n this.addPosition(node, Position.Inside, top);\n\n // Cannot move before current item\n if (nextNode !== this.currentNode) {\n this.addPosition(node, Position.After, top);\n }\n }\n }\n\n protected handleFirstNode(node: Node): void {\n if (node !== this.currentNode) {\n this.addPosition(\n node,\n Position.Before,\n this.getTop(jQuery(node.element))\n );\n }\n }\n\n protected handleAfterOpenFolder(node: Node, nextNode: Node): void {\n if (node === this.currentNode || nextNode === this.currentNode) {\n // Cannot move before or after current item\n this.addPosition(node, Position.None, this.lastTop);\n } else {\n this.addPosition(node, Position.After, this.lastTop);\n }\n }\n\n protected handleNode(node: Node, nextNode: Node, $element: JQuery): void {\n const top = this.getTop($element);\n\n if (node === this.currentNode) {\n // Cannot move inside current item\n this.addPosition(node, Position.None, top);\n } else {\n this.addPosition(node, Position.Inside, top);\n }\n\n if (nextNode === this.currentNode || node === this.currentNode) {\n // Cannot move before or after current item\n this.addPosition(node, Position.None, top);\n } else {\n this.addPosition(node, Position.After, top);\n }\n }\n\n private getTop($element: JQuery<HTMLElement>): number {\n const offset = $element.offset();\n\n return offset ? offset.top : 0;\n }\n\n private addPosition(node: Node, position: number, top: number): void {\n const area = {\n top,\n bottom: 0,\n node,\n position,\n };\n\n this.positions.push(area);\n this.lastTop = top;\n }\n\n private generateHitAreasForGroup(\n hitAreas: HitArea[],\n positionsInGroup: HitArea[],\n top: number,\n bottom: number\n ): void {\n // limit positions in group\n const positionCount = Math.min(positionsInGroup.length, 4);\n\n const areaHeight = Math.round((bottom - top) / positionCount);\n let areaTop = top;\n\n let i = 0;\n while (i < positionCount) {\n const position = positionsInGroup[i];\n\n hitAreas.push({\n top: areaTop,\n bottom: areaTop + areaHeight,\n node: position.node,\n position: position.position,\n });\n\n areaTop += areaHeight;\n i += 1;\n }\n }\n}\n\nclass DragElement {\n private offsetX: number;\n private offsetY: number;\n private $element: JQuery;\n\n constructor(\n nodeName: string,\n offsetX: number,\n offsetY: number,\n $tree: JQuery,\n autoEscape: boolean\n ) {\n this.offsetX = offsetX;\n this.offsetY = offsetY;\n\n this.$element = jQuery(\"<span>\").addClass(\n \"jqtree-title jqtree-dragging\"\n );\n\n if (autoEscape) {\n this.$element.text(nodeName);\n } else {\n this.$element.html(nodeName);\n }\n\n this.$element.css(\"position\", \"absolute\");\n $tree.append(this.$element);\n }\n\n public move(pageX: number, pageY: number): void {\n this.$element.offset({\n left: pageX - this.offsetX,\n top: pageY - this.offsetY,\n });\n }\n\n public remove(): void {\n this.$element.remove();\n }\n}\n","export const isInt = (n: unknown): boolean =>\n typeof n === \"number\" && n % 1 === 0;\n\nexport const isFunction = (v: unknown): boolean => typeof v === \"function\";\n\nexport const getBoolString = (value: unknown): string =>\n value ? \"true\" : \"false\";\n","import { getBoolString } from \"./util\";\nimport { Node } from \"./node\";\nimport { JqTreeWidget } from \"./tree.jquery\";\n\ntype IconElement = Text | Element;\n\nexport default class ElementsRenderer {\n public openedIconElement: IconElement;\n public closedIconElement: IconElement;\n private treeWidget: JqTreeWidget;\n\n constructor(treeWidget: JqTreeWidget) {\n this.treeWidget = treeWidget;\n\n this.openedIconElement = this.createButtonElement(\n treeWidget.options.openedIcon || \"+\"\n );\n this.closedIconElement = this.createButtonElement(\n treeWidget.options.closedIcon || \"-\"\n );\n }\n\n public render(fromNode: Node | null): void {\n if (fromNode && fromNode.parent) {\n this.renderFromNode(fromNode);\n } else {\n this.renderFromRoot();\n }\n }\n\n public renderFromRoot(): void {\n const $element = this.treeWidget.element;\n $element.empty();\n\n this.createDomElements(\n $element[0],\n this.treeWidget.tree.children,\n true,\n 1\n );\n }\n\n public renderFromNode(node: Node): void {\n // remember current li\n const $previousLi = jQuery(node.element);\n\n // create element\n const li = this.createLi(node, node.getLevel());\n this.attachNodeData(node, li);\n\n // add element to dom\n $previousLi.after(li);\n\n // remove previous li\n $previousLi.remove();\n\n // create children\n if (node.children) {\n this.createDomElements(\n li,\n node.children,\n false,\n node.getLevel() + 1\n );\n }\n }\n\n private createDomElements(\n element: Element,\n children: Node[],\n isRootNode: boolean,\n level: number\n ): void {\n const ul = this.createUl(isRootNode);\n element.appendChild(ul);\n\n for (const child of children) {\n const li = this.createLi(child, level);\n ul.appendChild(li);\n\n this.attachNodeData(child, li);\n\n if (child.hasChildren()) {\n this.createDomElements(li, child.children, false, level + 1);\n }\n }\n }\n\n private attachNodeData(node: Node, li: HTMLElement): void {\n node.element = li;\n jQuery(li).data(\"node\", node);\n }\n\n private createUl(isRootNode: boolean): HTMLUListElement {\n let classString;\n let role;\n\n if (!isRootNode) {\n classString = \"\";\n role = \"group\";\n } else {\n classString = \"jqtree-tree\";\n role = \"tree\";\n\n if (this.treeWidget.options.rtl) {\n classString += \" jqtree-rtl\";\n }\n }\n\n if (this.treeWidget.options.dragAndDrop) {\n classString += \" jqtree-dnd\";\n }\n\n const ul = document.createElement(\"ul\");\n ul.className = `jqtree_common ${classString}`;\n\n ul.setAttribute(\"role\", role);\n\n return ul;\n }\n\n private createLi(node: Node, level: number): HTMLLIElement {\n const isSelected = Boolean(\n this.treeWidget.selectNodeHandler.isNodeSelected(node)\n );\n\n const mustShowFolder =\n node.isFolder() ||\n (node.isEmptyFolder && this.treeWidget.options.showEmptyFolder);\n\n const li = mustShowFolder\n ? this.createFolderLi(node, level, isSelected)\n : this.createNodeLi(node, level, isSelected);\n\n if (this.treeWidget.options.onCreateLi) {\n this.treeWidget.options.onCreateLi(node, jQuery(li), isSelected);\n }\n\n return li;\n }\n\n private createFolderLi(\n node: Node,\n level: number,\n isSelected: boolean\n ): HTMLLIElement {\n const buttonClasses = this.getButtonClasses(node);\n const folderClasses = this.getFolderClasses(node, isSelected);\n\n const iconElement = node.is_open\n ? this.openedIconElement\n : this.closedIconElement;\n\n // li\n const li = document.createElement(\"li\");\n li.className = `jqtree_common ${folderClasses}`;\n li.setAttribute(\"role\", \"presentation\");\n\n // div\n const div = document.createElement(\"div\");\n div.className = \"jqtree-element jqtree_common\";\n div.setAttribute(\"role\", \"presentation\");\n\n li.appendChild(div);\n\n // button link\n const buttonLink = document.createElement(\"a\");\n buttonLink.className = buttonClasses;\n\n buttonLink.appendChild(iconElement.cloneNode(true));\n\n buttonLink.setAttribute(\"role\", \"presentation\");\n buttonLink.setAttribute(\"aria-hidden\", \"true\");\n\n if (this.treeWidget.options.buttonLeft) {\n div.appendChild(buttonLink);\n }\n\n // title span\n div.appendChild(\n this.createTitleSpan(\n node.name,\n level,\n isSelected,\n node.is_open,\n true\n )\n );\n\n if (!this.treeWidget.options.buttonLeft) {\n div.appendChild(buttonLink);\n }\n\n return li;\n }\n\n private createNodeLi(\n node: Node,\n level: number,\n isSelected: boolean\n ): HTMLLIElement {\n const liClasses = [\"jqtree_common\"];\n\n if (isSelected) {\n liClasses.push(\"jqtree-selected\");\n }\n\n const classString = liClasses.join(\" \");\n\n // li\n const li = document.createElement(\"li\");\n li.className = classString;\n li.setAttribute(\"role\", \"presentation\");\n\n // div\n const div = document.createElement(\"div\");\n div.className = \"jqtree-element jqtree_common\";\n div.setAttribute(\"role\", \"presentation\");\n\n li.appendChild(div);\n\n // title span\n div.appendChild(\n this.createTitleSpan(\n node.name,\n level,\n isSelected,\n node.is_open,\n false\n )\n );\n\n return li;\n }\n\n private createTitleSpan(\n nodeName: string,\n level: number,\n isSelected: boolean,\n isOpen: boolean,\n isFolder: boolean\n ): HTMLSpanElement {\n const titleSpan = document.createElement(\"span\");\n\n let classes = \"jqtree-title jqtree_common\";\n\n if (isFolder) {\n classes += \" jqtree-title-folder\";\n }\n\n classes += ` jqtree-title-button-${\n this.treeWidget.options.buttonLeft ? \"left\" : \"right\"\n }`;\n\n titleSpan.className = classes;\n\n titleSpan.setAttribute(\"role\", \"treeitem\");\n titleSpan.setAttribute(\"aria-level\", `${level}`);\n\n titleSpan.setAttribute(\"aria-selected\", getBoolString(isSelected));\n titleSpan.setAttribute(\"aria-expanded\", getBoolString(isOpen));\n\n if (isSelected) {\n const tabIndex = this.treeWidget.options.tabIndex;\n\n if (tabIndex !== undefined) {\n titleSpan.setAttribute(\"tabindex\", `${tabIndex}`);\n }\n }\n\n if (this.treeWidget.options.autoEscape) {\n titleSpan.textContent = nodeName;\n } else {\n titleSpan.innerHTML = nodeName;\n }\n\n return titleSpan;\n }\n\n private getButtonClasses(node: Node): string {\n const classes = [\"jqtree-toggler\", \"jqtree_common\"];\n\n if (!node.is_open) {\n classes.push(\"jqtree-closed\");\n }\n\n if (this.treeWidget.options.buttonLeft) {\n classes.push(\"jqtree-toggler-left\");\n } else {\n classes.push(\"jqtree-toggler-right\");\n }\n\n return classes.join(\" \");\n }\n\n private getFolderClasses(node: Node, isSelected: boolean): string {\n const classes = [\"jqtree-folder\"];\n\n if (!node.is_open) {\n classes.push(\"jqtree-closed\");\n }\n\n if (isSelected) {\n classes.push(\"jqtree-selected\");\n }\n\n if (node.is_loading) {\n classes.push(\"jqtree-loading\");\n }\n\n return classes.join(\" \");\n }\n\n private createButtonElement(value: string | Element): IconElement {\n if (typeof value === \"string\") {\n // convert value to html\n const div = document.createElement(\"div\");\n div.innerHTML = value;\n\n return document.createTextNode(div.innerHTML);\n } else {\n return jQuery(value)[0];\n }\n }\n}\n","import { Node } from \"./node\";\nimport { JqTreeWidget } from \"./tree.jquery\";\n\nexport type HandleFinishedLoading = () => void;\n\nexport default class DataLoader {\n private treeWidget: JqTreeWidget;\n\n constructor(treeWidget: JqTreeWidget) {\n this.treeWidget = treeWidget;\n }\n\n public loadFromUrl(\n urlInfo: string | JQuery.AjaxSettings | null,\n parentNode: Node | null,\n onFinished: HandleFinishedLoading | null\n ): void {\n if (!urlInfo) {\n return;\n }\n\n const $el = this.getDomElement(parentNode);\n this.addLoadingClass($el);\n this.notifyLoading(true, parentNode, $el);\n\n const stopLoading = (): void => {\n this.removeLoadingClass($el);\n this.notifyLoading(false, parentNode, $el);\n };\n\n const handleSuccess = (data: string | NodeData[]): void => {\n stopLoading();\n this.treeWidget.loadData(this.parseData(data), parentNode);\n\n if (onFinished && typeof onFinished === \"function\") {\n onFinished();\n }\n };\n\n const handleError = (jqXHR: JQuery.jqXHR): void => {\n stopLoading();\n\n if (this.treeWidget.options.onLoadFailed) {\n this.treeWidget.options.onLoadFailed(jqXHR);\n }\n };\n\n this.submitRequest(urlInfo, handleSuccess, handleError);\n }\n\n private addLoadingClass($el: JQuery<HTMLElement>): void {\n if ($el) {\n $el.addClass(\"jqtree-loading\");\n }\n }\n\n private removeLoadingClass($el: JQuery<HTMLElement>): void {\n if ($el) {\n $el.removeClass(\"jqtree-loading\");\n }\n }\n\n private getDomElement(parentNode: Node | null): JQuery<HTMLElement> {\n if (parentNode) {\n return jQuery(parentNode.element);\n } else {\n return this.treeWidget.element;\n }\n }\n\n private notifyLoading(\n isLoading: boolean,\n node: Node | null,\n $el: JQuery\n ): void {\n if (this.treeWidget.options.onLoading) {\n this.treeWidget.options.onLoading(isLoading, node, $el);\n }\n\n this.treeWidget._triggerEvent(\"tree.loading_data\", {\n isLoading,\n node,\n $el,\n });\n }\n\n private submitRequest(\n urlInfoInput: string | JQuery.AjaxSettings,\n handleSuccess: JQuery.Ajax.SuccessCallback<any>,\n handleError: JQuery.Ajax.ErrorCallback<any>\n ): void {\n const urlInfo =\n typeof urlInfoInput === \"string\"\n ? { url: urlInfoInput }\n : urlInfoInput;\n\n const ajaxSettings: JQuery.AjaxSettings = {\n method: \"GET\",\n cache: false,\n dataType: \"json\",\n success: handleSuccess,\n error: handleError,\n ...urlInfo,\n };\n\n ajaxSettings.method = ajaxSettings.method?.toUpperCase() || \"GET\";\n\n void jQuery.ajax(ajaxSettings);\n }\n\n private parseData(data: string | NodeData[]): NodeData[] {\n const { dataFilter } = this.treeWidget.options;\n\n const getParsedData = () => {\n if (typeof data === \"string\") {\n return JSON.parse(data) as NodeData[];\n } else {\n return data;\n }\n };\n\n const parsedData = getParsedData();\n\n if (dataFilter) {\n return dataFilter(parsedData);\n } else {\n return parsedData;\n }\n }\n}\n","import { Node } from \"./node\";\nimport { JqTreeWidget } from \"./tree.jquery\";\n\nexport default class KeyHandler {\n private static LEFT = 37;\n private static UP = 38;\n private static RIGHT = 39;\n private static DOWN = 40;\n\n private treeWidget: JqTreeWidget;\n\n constructor(treeWidget: JqTreeWidget) {\n this.treeWidget = treeWidget;\n\n if (treeWidget.options.keyboardSupport) {\n jQuery(document).on(\"keydown.jqtree\", this.handleKeyDown);\n }\n }\n\n public deinit(): void {\n jQuery(document).off(\"keydown.jqtree\");\n }\n\n public moveDown(selectedNode: Node): boolean {\n return this.selectNode(selectedNode.getNextNode());\n }\n\n public moveUp(selectedNode: Node): boolean {\n return this.selectNode(selectedNode.getPreviousNode());\n }\n\n public moveRight(selectedNode: Node): boolean {\n if (!selectedNode.isFolder()) {\n return true;\n } else {\n // folder node\n if (selectedNode.is_open) {\n // Right moves to the first child of an open node\n return this.selectNode(selectedNode.getNextNode());\n } else {\n // Right expands a closed node\n this.treeWidget.openNode(selectedNode);\n return false;\n }\n }\n }\n\n public moveLeft(selectedNode: Node): boolean {\n if (selectedNode.isFolder() && selectedNode.is_open) {\n // Left on an open node closes the node\n this.treeWidget.closeNode(selectedNode);\n return false;\n } else {\n // Left on a closed or end node moves focus to the node's parent\n return this.selectNode(selectedNode.getParent());\n }\n }\n\n public selectNode(node: Node | null): boolean {\n if (!node) {\n return true;\n } else {\n this.treeWidget.selectNode(node);\n\n if (\n !this.treeWidget.scrollHandler.isScrolledIntoView(\n jQuery(node.element).find(\".jqtree-element\")\n )\n ) {\n this.treeWidget.scrollToNode(node);\n }\n\n return false;\n }\n }\n\n private handleKeyDown = (e: JQuery.Event): boolean => {\n if (!this.canHandleKeyboard()) {\n return true;\n }\n\n const selectedNode = this.treeWidget.getSelectedNode();\n if (!selectedNode) {\n return true;\n }\n\n const key = e.which;\n\n switch (key) {\n case KeyHandler.DOWN:\n return this.moveDown(selectedNode);\n\n case KeyHandler.UP:\n return this.moveUp(selectedNode);\n\n case KeyHandler.RIGHT:\n return this.moveRight(selectedNode);\n\n case KeyHandler.LEFT:\n return this.moveLeft(selectedNode);\n\n default:\n return true;\n }\n };\n\n private canHandleKeyboard(): boolean {\n return (\n (this.treeWidget.options.keyboardSupport || false) &&\n this.treeWidget.selectNodeHandler.isFocusOnTree()\n );\n }\n}\n","const register = (widgetClass: unknown, widgetName: string): void => {\n const getDataKey = (): string => `simple_widget_${widgetName}`;\n\n const getWidgetData = (\n el: HTMLElement,\n dataKey: string\n ): SimpleWidget<unknown> | null => {\n const widget = jQuery.data(el, dataKey) as unknown;\n\n if (widget && widget instanceof SimpleWidget) {\n return widget;\n } else {\n return null;\n }\n };\n\n const createWidget = ($el: JQuery, options: unknown): JQuery => {\n const dataKey = getDataKey();\n\n for (const el of $el.get()) {\n const existingWidget = getWidgetData(el, dataKey);\n\n if (!existingWidget) {\n const simpleWidgetClass = widgetClass as typeof SimpleWidget;\n const widget = new simpleWidgetClass(el, options);\n\n if (!jQuery.data(el, dataKey)) {\n jQuery.data(el, dataKey, widget);\n }\n\n // Call init after setting data, so we can call methods\n widget.init();\n }\n }\n\n return $el;\n };\n\n const destroyWidget = ($el: JQuery): void => {\n const dataKey = getDataKey();\n\n for (const el of $el.get()) {\n const widget = getWidgetData(el, dataKey);\n\n if (widget) {\n widget.destroy();\n }\n\n jQuery.removeData(el, dataKey);\n }\n };\n\n const callFunction = (\n $el: JQuery,\n functionName: string,\n args: unknown[]\n ): unknown => {\n let result = null;\n\n for (const el of $el.get()) {\n const widget = jQuery.data(el, getDataKey()) as unknown;\n\n if (widget && widget instanceof SimpleWidget) {\n const simpleWidget = widget as SimpleWidget<unknown>;\n const widgetFunction = simpleWidget[functionName];\n\n if (widgetFunction && typeof widgetFunction === \"function\") {\n result = widgetFunction.apply(widget, args) as unknown;\n }\n }\n }\n\n return result;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n (jQuery.fn as any)[widgetName] = function (\n this: JQuery,\n argument1: unknown,\n ...args: unknown[]\n ) {\n if (!argument1) {\n return createWidget(this, null);\n } else if (typeof argument1 === \"object\") {\n const options = argument1 as unknown;\n return createWidget(this, options);\n } else if (typeof argument1 === \"string\" && argument1[0] !== \"_\") {\n const functionName = argument1;\n\n if (functionName === \"destroy\") {\n return destroyWidget(this);\n } else if (functionName === \"get_widget_class\") {\n return widgetClass;\n } else {\n return callFunction(this, functionName, args);\n }\n }\n };\n};\n\nexport default class SimpleWidget<WidgetOptions> {\n public static register(widgetClass: unknown, widgetName: string): void {\n register(widgetClass, widgetName);\n }\n\n [key: string]: unknown;\n\n protected static defaults: unknown = {};\n\n public options: WidgetOptions;\n\n public $el: JQuery<HTMLElement>;\n\n constructor(el: HTMLElement, options: WidgetOptions) {\n this.$el = jQuery(el);\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const defaults = (this.constructor as any)[\"defaults\"] as WidgetOptions;\n this.options = { ...defaults, ...options };\n }\n\n public destroy(): void {\n this.deinit();\n }\n\n public init(): void {\n //\n }\n\n public deinit(): void {\n //\n }\n}\n","/*\nThis widget does the same a the mouse widget in jqueryui.\n*/\nimport SimpleWidget from \"./simple.widget\";\nimport { PositionInfo } from \"./types\";\n\nconst getPositionInfoFromMouseEvent = (e: MouseEvent): PositionInfo => ({\n pageX: e.pageX,\n pageY: e.pageY,\n target: e.target as HTMLElement,\n originalEvent: e,\n});\n\nconst getPositionInfoFromTouch = (\n touch: Touch,\n e: TouchEvent\n): PositionInfo => ({\n pageX: touch.pageX,\n pageY: touch.pageY,\n target: touch.target as HTMLElement,\n originalEvent: e,\n});\n\nabstract class MouseWidget<WidgetOptions> extends SimpleWidget<WidgetOptions> {\n protected isMouseStarted: boolean;\n protected mouseDownInfo: PositionInfo | null;\n private mouseDelayTimer: number | null;\n private isMouseDelayMet: boolean;\n\n public init(): void {\n const element = this.$el.get(0);\n\n if (element) {\n element.addEventListener(\"mousedown\", this.mouseDown, {\n passive: false,\n });\n element.addEventListener(\"touchstart\", this.touchStart, {\n passive: false,\n });\n }\n\n this.isMouseStarted = false;\n this.mouseDelayTimer = null;\n this.isMouseDelayMet = false;\n this.mouseDownInfo = null;\n }\n\n public deinit(): void {\n const el = this.$el.get(0);\n\n if (el) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n (el as any).removeEventListener(\"mousedown\", this.mouseDown, {\n passive: false,\n });\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n (el as any).removeEventListener(\"touchstart\", this.touchStart, {\n passive: false,\n });\n }\n\n this.removeMouseMoveEventListeners();\n }\n\n protected abstract mouseCapture(positionInfo: PositionInfo): boolean | null;\n\n protected abstract mouseStart(positionInfo: PositionInfo): boolean;\n\n protected abstract mouseDrag(positionInfo: PositionInfo): void;\n\n protected abstract mouseStop(positionInfo: PositionInfo): void;\n\n protected abstract getMouseDelay(): number;\n\n private mouseDown = (e: MouseEvent): void => {\n // Left mouse button?\n if (e.button !== 0) {\n return;\n }\n\n const result = this.handleMouseDown(getPositionInfoFromMouseEvent(e));\n\n if (result && e.cancelable) {\n e.preventDefault();\n }\n };\n\n private handleMouseDown(positionInfo: PositionInfo): boolean {\n // We may have missed mouseup (out of window)\n if (this.isMouseStarted) {\n this.handleMouseUp(positionInfo);\n }\n\n this.mouseDownInfo = positionInfo;\n\n if (!this.mouseCapture(positionInfo)) {\n return false;\n }\n\n this.handleStartMouse();\n\n return true;\n }\n\n private handleStartMouse(): void {\n document.addEventListener(\"mousemove\", this.mouseMove, {\n passive: false,\n });\n document.addEventListener(\"touchmove\", this.touchMove, {\n passive: false,\n });\n document.addEventListener(\"mouseup\", this.mouseUp, { passive: false });\n document.addEventListener(\"touchend\", this.touchEnd, {\n passive: false,\n });\n\n const mouseDelay = this.getMouseDelay();\n\n if (mouseDelay) {\n this.startMouseDelayTimer(mouseDelay);\n } else {\n this.isMouseDelayMet = true;\n }\n }\n\n private startMouseDelayTimer(mouseDelay: number): void {\n if (this.mouseDelayTimer) {\n clearTimeout(this.mouseDelayTimer);\n }\n\n this.mouseDelayTimer = window.setTimeout(() => {\n if (this.mouseDownInfo) {\n this.isMouseDelayMet = true;\n }\n }, mouseDelay);\n\n this.isMouseDelayMet = false;\n }\n\n private mouseMove = (e: MouseEvent): void => {\n this.handleMouseMove(e, getPositionInfoFromMouseEvent(e));\n };\n\n private handleMouseMove(\n e: MouseEvent | TouchEvent,\n positionInfo: PositionInfo\n ): void {\n if (this.isMouseStarted) {\n this.mouseDrag(positionInfo);\n\n if (e.cancelable) {\n e.preventDefault();\n }\n return;\n }\n\n if (!this.isMouseDelayMet) {\n return;\n }\n\n if (this.mouseDownInfo) {\n this.isMouseStarted = this.mouseStart(this.mouseDownInfo) !== false;\n }\n\n if (this.isMouseStarted) {\n this.mouseDrag(positionInfo);\n\n if (e.cancelable) {\n e.preventDefault();\n }\n } else {\n this.handleMouseUp(positionInfo);\n }\n }\n\n private mouseUp = (e: MouseEvent): void => {\n this.handleMouseUp(getPositionInfoFromMouseEvent(e));\n };\n\n private handleMouseUp(positionInfo: PositionInfo): void {\n this.removeMouseMoveEventListeners();\n this.isMouseDelayMet = false;\n this.mouseDownInfo = null;\n\n if (this.isMouseStarted) {\n this.isMouseStarted = false;\n this.mouseStop(positionInfo);\n }\n }\n\n private removeMouseMoveEventListeners() {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n (document as any).removeEventListener(\"mousemove\", this.mouseMove, {\n passive: false,\n });\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n (document as any).removeEventListener(\"touchmove\", this.touchMove, {\n passive: false,\n });\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n (document as any).removeEventListener(\"mouseup\", this.mouseUp, {\n passive: false,\n });\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n (document as any).removeEventListener(\"touchend\", this.touchEnd, {\n passive: false,\n });\n }\n\n private touchStart = (e: TouchEvent): void => {\n if (!e) {\n return;\n }\n\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.changedTouches[0];\n\n this.handleMouseDown(getPositionInfoFromTouch(touch, e));\n };\n\n private touchMove = (e: TouchEvent): void => {\n if (!e) {\n return;\n }\n\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.changedTouches[0];\n\n this.handleMouseMove(e, getPositionInfoFromTouch(touch, e));\n };\n\n private touchEnd = (e: TouchEvent): void => {\n if (!e) {\n return;\n }\n\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.changedTouches[0];\n\n this.handleMouseUp(getPositionInfoFromTouch(touch, e));\n };\n}\n\nexport default MouseWidget;\n","import { isInt } from \"./util\";\nimport { JqTreeWidget } from \"./tree.jquery\";\nimport { Node } from \"./node\";\n\nexport interface SavedState {\n open_nodes: NodeId[];\n selected_node: NodeId[];\n}\n\nexport default class SaveStateHandler {\n private treeWidget: JqTreeWidget;\n private _supportsLocalStorage: boolean | null;\n\n constructor(treeWidget: JqTreeWidget) {\n this.treeWidget = treeWidget;\n }\n\n public saveState(): void {\n const state = JSON.stringify(this.getState());\n\n if (this.treeWidget.options.onSetStateFromStorage) {\n this.treeWidget.options.onSetStateFromStorage(state);\n } else if (this.supportsLocalStorage()) {\n localStorage.setItem(this.getKeyName(), state);\n }\n }\n\n public getStateFromStorage(): SavedState | null {\n const jsonData = this.loadFromStorage();\n\n if (jsonData) {\n return this.parseState(jsonData) as unknown as SavedState;\n } else {\n return null;\n }\n }\n\n public getState(): SavedState {\n const getOpenNodeIds = (): NodeId[] => {\n const openNodes: NodeId[] = [];\n\n this.treeWidget.tree.iterate((node: Node) => {\n if (node.is_open && node.id && node.hasChildren()) {\n openNodes.push(node.id);\n }\n return true;\n });\n\n return openNodes;\n };\n\n const getSelectedNodeIds = (): NodeId[] => {\n const selectedNodeIds: NodeId[] = [];\n\n this.treeWidget.getSelectedNodes().forEach((node) => {\n if (node.id != null) {\n selectedNodeIds.push(node.id);\n }\n });\n\n return selectedNodeIds;\n };\n\n return {\n open_nodes: getOpenNodeIds(),\n selected_node: getSelectedNodeIds(),\n };\n }\n\n /*\n Set initial state\n Don't handle nodes that are loaded on demand\n\n result: must load on demand\n */\n public setInitialState(state: SavedState): boolean {\n if (!state) {\n return false;\n } else {\n let mustLoadOnDemand = false;\n\n if (state.open_nodes) {\n mustLoadOnDemand = this.openInitialNodes(state.open_nodes);\n }\n\n if (state.selected_node) {\n this.resetSelection();\n this.selectInitialNodes(state.selected_node);\n }\n\n return mustLoadOnDemand;\n }\n }\n\n public setInitialStateOnDemand(\n state: SavedState,\n cbFinished: () => void\n ): void {\n if (state) {\n this.doSetInitialStateOnDemand(\n state.open_nodes,\n state.selected_node,\n cbFinished\n );\n } else {\n cbFinished();\n }\n }\n\n public getNodeIdToBeSelected(): NodeId | null {\n const state = this.getStateFromStorage();\n\n if (state && state.selected_node) {\n return state.selected_node[0];\n } else {\n return null;\n }\n }\n\n private parseState(jsonData: string): SavedState {\n const state = JSON.parse(jsonData) as Record<string, unknown>;\n\n // Check if selected_node is an int (instead of an array)\n if (state && state.selected_node && isInt(state.selected_node)) {\n // Convert to array\n state.selected_node = [state.selected_node];\n }\n\n return state as unknown as SavedState;\n }\n\n private loadFromStorage(): string | null {\n if (this.treeWidget.options.onGetStateFromStorage) {\n return this.treeWidget.options.onGetStateFromStorage();\n } else if (this.supportsLocalStorage()) {\n return localStorage.getItem(this.getKeyName());\n } else {\n return null;\n }\n }\n\n private openInitialNodes(nodeIds: NodeId[]): boolean {\n let mustLoadOnDemand = false;\n\n for (const nodeId of nodeIds) {\n const node = this.treeWidget.getNodeById(nodeId);\n\n if (node) {\n if (!node.load_on_demand) {\n node.is_open = true;\n } else {\n mustLoadOnDemand = true;\n }\n }\n }\n\n return mustLoadOnDemand;\n }\n\n private selectInitialNodes(nodeIds: NodeId[]): boolean {\n let selectCount = 0;\n\n for (const nodeId of nodeIds) {\n const node = this.treeWidget.getNodeById(nodeId);\n\n if (node) {\n selectCount += 1;\n\n this.treeWidget.selectNodeHandler.addToSelection(node);\n }\n }\n\n return selectCount !== 0;\n }\n\n private resetSelection(): void {\n const selectNodeHandler = this.treeWidget.selectNodeHandler;\n\n const selectedNodes = selectNodeHandler.getSelectedNodes();\n\n selectedNodes.forEach((node) => {\n selectNodeHandler.removeFromSelection(node);\n });\n }\n\n private doSetInitialStateOnDemand(\n nodeIdsParam: NodeId[],\n selectedNodes: NodeId[],\n cbFinished: () => void\n ): void {\n let loadingCount = 0;\n let nodeIds = nodeIdsParam;\n\n const openNodes = (): void => {\n const newNodesIds = [];\n\n for (const nodeId of nodeIds) {\n const node = this.treeWidget.getNodeById(nodeId);\n\n if (!node) {\n newNodesIds.push(nodeId);\n } else {\n if (!node.is_loading) {\n if (node.load_on_demand) {\n loadAndOpenNode(node);\n } else {\n this.treeWidget._openNode(node, false, null);\n }\n }\n }\n }\n\n nodeIds = newNodesIds;\n\n if (this.selectInitialNodes(selectedNodes)) {\n this.treeWidget._refreshElements(null);\n }\n\n if (loadingCount === 0) {\n cbFinished();\n }\n };\n\n const loadAndOpenNode = (node: Node): void => {\n loadingCount += 1;\n this.treeWidget._openNode(node, false, () => {\n loadingCount -= 1;\n openNodes();\n });\n };\n\n openNodes();\n }\n\n private getKeyName(): string {\n if (typeof this.treeWidget.options.saveState === \"string\") {\n return this.treeWidget.options.saveState;\n } else {\n return \"tree\";\n }\n }\n\n private supportsLocalStorage(): boolean {\n const testSupport = (): boolean => {\n // Is local storage supported?\n if (localStorage == null) {\n return false;\n } else {\n // Check if it's possible to store an item. Safari does not allow this in private browsing mode.\n try {\n const key = \"_storage_test\";\n sessionStorage.setItem(key, \"value\");\n sessionStorage.removeItem(key);\n } catch (error) {\n return false;\n }\n\n return true;\n }\n };\n\n if (this._supportsLocalStorage == null) {\n this._supportsLocalStorage = testSupport();\n }\n\n return this._supportsLocalStorage;\n }\n}\n","import { JqTreeWidget } from \"./tree.jquery\";\nimport { HitArea, PositionInfo } from \"./types\";\n\nexport default class ScrollHandler {\n private treeWidget: JqTreeWidget;\n private previousTop: number;\n private isInitialized: boolean;\n private $scrollParent: JQuery | null;\n private scrollParentTop: number;\n\n constructor(treeWidget: JqTreeWidget) {\n this.treeWidget = treeWidget;\n this.previousTop = -1;\n this.isInitialized = false;\n }\n\n public checkScrolling(): void {\n this.ensureInit();\n this.checkVerticalScrolling();\n this.checkHorizontalScrolling();\n }\n\n public scrollToY(top: number): void {\n this.ensureInit();\n\n if (this.$scrollParent) {\n this.$scrollParent[0].scrollTop = top;\n } else {\n const offset = this.treeWidget.$el.offset();\n const treeTop = offset ? offset.top : 0;\n\n jQuery(document).scrollTop(top + treeTop);\n }\n }\n\n public isScrolledIntoView($element: JQuery): boolean {\n this.ensureInit();\n\n let elementBottom: number;\n let viewBottom: number;\n let elementTop: number;\n let viewTop: number;\n\n const elHeight = $element.height() || 0;\n\n if (this.$scrollParent) {\n viewTop = 0;\n viewBottom = this.$scrollParent.height() || 0;\n\n const offset = $element.offset();\n const originalTop = offset ? offset.top : 0;\n\n elementTop = originalTop - this.scrollParentTop;\n elementBottom = elementTop + elHeight;\n } else {\n viewTop = jQuery(window).scrollTop() || 0;\n\n const windowHeight = jQuery(window).height() || 0;\n viewBottom = viewTop + windowHeight;\n\n const offset = $element.offset();\n\n elementTop = offset ? offset.top : 0;\n elementBottom = elementTop + elHeight;\n }\n\n return elementBottom <= viewBottom && elementTop >= viewTop;\n }\n\n public getScrollLeft(): number {\n if (!this.$scrollParent) {\n return 0;\n } else {\n return this.$scrollParent.scrollLeft() || 0;\n }\n }\n\n private initScrollParent(): void {\n const getParentWithOverflow = (): JQuery | null => {\n const cssAttributes = [\"overflow\", \"overflow-y\"];\n\n const hasOverFlow = ($el: JQuery): boolean => {\n for (const attr of cssAttributes) {\n const overflowValue = $el.css(attr);\n if (\n overflowValue === \"auto\" ||\n overflowValue === \"scroll\"\n ) {\n return true;\n }\n }\n\n return false;\n };\n\n if (hasOverFlow(this.treeWidget.$el)) {\n return this.treeWidget.$el;\n }\n\n for (const el of this.treeWidget.$el.parents().get()) {\n const $el = jQuery(el);\n if (hasOverFlow($el)) {\n return $el;\n }\n }\n\n return null;\n };\n\n const setDocumentAsScrollParent = (): void => {\n this.scrollParentTop = 0;\n this.$scrollParent = null;\n };\n\n if (this.treeWidget.$el.css(\"position\") === \"fixed\") {\n setDocumentAsScrollParent();\n }\n\n const $scrollParent = getParentWithOverflow();\n\n if (\n $scrollParent &&\n $scrollParent.length &&\n $scrollParent[0].tagName !== \"HTML\"\n ) {\n this.$scrollParent = $scrollParent;\n\n const offset = this.$scrollParent.offset();\n this.scrollParentTop = offset ? offset.top : 0;\n } else {\n setDocumentAsScrollParent();\n }\n\n this.isInitialized = true;\n }\n\n private ensureInit(): void {\n if (!this.isInitialized) {\n this.initScrollParent();\n }\n }\n\n private handleVerticalScrollingWithScrollParent(area: HitArea): void {\n const scrollParent = this.$scrollParent && this.$scrollParent[0];\n\n if (!scrollParent) {\n return;\n }\n\n const distanceBottom =\n this.scrollParentTop + scrollParent.offsetHeight - area.bottom;\n\n if (distanceBottom < 20) {\n scrollParent.scrollTop += 20;\n this.treeWidget.refreshHitAreas();\n this.previousTop = -1;\n } else if (area.top - this.scrollParentTop < 20) {\n scrollParent.scrollTop -= 20;\n this.treeWidget.refreshHitAreas();\n this.previousTop = -1;\n }\n }\n\n private handleVerticalScrollingWithDocument(area: HitArea): void {\n const scrollTop = jQuery(document).scrollTop() || 0;\n const distanceTop = area.top - scrollTop;\n\n if (distanceTop < 20) {\n jQuery(document).scrollTop(scrollTop - 20);\n } else {\n const windowHeight = jQuery(window).height() || 0;\n\n if (windowHeight - (area.bottom - scrollTop) < 20) {\n jQuery(document).scrollTop(scrollTop + 20);\n }\n }\n }\n\n private checkVerticalScrolling(): void {\n const hoveredArea = this.treeWidget.dndHandler.hoveredArea;\n\n if (hoveredArea && hoveredArea.top !== this.previousTop) {\n this.previousTop = hoveredArea.top;\n\n if (this.$scrollParent) {\n this.handleVerticalScrollingWithScrollParent(hoveredArea);\n } else {\n this.handleVerticalScrollingWithDocument(hoveredArea);\n }\n }\n }\n\n private checkHorizontalScrolling(): void {\n const positionInfo = this.treeWidget.dndHandler.positionInfo;\n\n if (!positionInfo) {\n return;\n }\n\n if (this.$scrollParent) {\n this.handleHorizontalScrollingWithParent(positionInfo);\n } else {\n this.handleHorizontalScrollingWithDocument(positionInfo);\n }\n }\n\n private handleHorizontalScrollingWithParent(\n positionInfo: PositionInfo\n ): void {\n if (\n positionInfo.pageX === undefined ||\n positionInfo.pageY === undefined\n ) {\n return;\n }\n\n const $scrollParent = this.$scrollParent;\n const scrollParentOffset = $scrollParent && $scrollParent.offset();\n\n if (!($scrollParent && scrollParentOffset)) {\n return;\n }\n\n const scrollParent = $scrollParent[0];\n\n const canScrollRight =\n scrollParent.scrollLeft + scrollParent.clientWidth <\n scrollParent.scrollWidth;\n const canScrollLeft = scrollParent.scrollLeft > 0;\n\n const rightEdge = scrollParentOffset.left + scrollParent.clientWidth;\n const leftEdge = scrollParentOffset.left;\n const isNearRightEdge = positionInfo.pageX > rightEdge - 20;\n const isNearLeftEdge = positionInfo.pageX < leftEdge + 20;\n\n if (isNearRightEdge && canScrollRight) {\n scrollParent.scrollLeft = Math.min(\n scrollParent.scrollLeft + 20,\n scrollParent.scrollWidth\n );\n } else if (isNearLeftEdge && canScrollLeft) {\n scrollParent.scrollLeft = Math.max(scrollParent.scrollLeft - 20, 0);\n }\n }\n\n private handleHorizontalScrollingWithDocument(\n positionInfo: PositionInfo\n ): void {\n if (\n positionInfo.pageX === undefined ||\n positionInfo.pageY === undefined\n ) {\n return;\n }\n\n const $document = jQuery(document);\n\n const scrollLeft = $document.scrollLeft() || 0;\n const windowWidth = jQuery(window).width() || 0;\n\n const canScrollLeft = scrollLeft > 0;\n\n const isNearRightEdge = positionInfo.pageX > windowWidth - 20;\n const isNearLeftEdge = positionInfo.pageX - scrollLeft < 20;\n\n if (isNearRightEdge) {\n $document.scrollLeft(scrollLeft + 20);\n } else if (isNearLeftEdge && canScrollLeft) {\n $document.scrollLeft(Math.max(scrollLeft - 20, 0));\n }\n }\n}\n","import { Node } from \"./node\";\nimport { JqTreeWidget } from \"./tree.jquery\";\n\nexport default class SelectNodeHandler {\n private treeWidget: JqTreeWidget;\n private selectedNodes: Set<NodeId>;\n private selectedSingleNode: Node | null;\n\n constructor(treeWidget: JqTreeWidget) {\n this.treeWidget = treeWidget;\n this.selectedNodes = new Set<NodeId>();\n this.clear();\n }\n\n public getSelectedNode(): Node | false {\n const selectedNodes = this.getSelectedNodes();\n\n if (selectedNodes.length) {\n return selectedNodes[0];\n } else {\n return false;\n }\n }\n\n public getSelectedNodes(): Node[] {\n if (this.selectedSingleNode) {\n return [this.selectedSingleNode];\n } else {\n const selectedNodes: Node[] = [];\n\n this.selectedNodes.forEach((id) => {\n const node = this.treeWidget.getNodeById(id);\n if (node) {\n selectedNodes.push(node);\n }\n });\n\n return selectedNodes;\n }\n }\n\n public getSelectedNodesUnder(parent: Node): Node[] {\n if (this.selectedSingleNode) {\n if (parent.isParentOf(this.selectedSingleNode)) {\n return [this.selectedSingleNode];\n } else {\n return [];\n }\n } else {\n const selectedNodes = [];\n\n for (const id in this.selectedNodes) {\n if (\n Object.prototype.hasOwnProperty.call(this.selectedNodes, id)\n ) {\n const node = this.treeWidget.getNodeById(id);\n if (node && parent.isParentOf(node)) {\n selectedNodes.push(node);\n }\n }\n }\n\n return selectedNodes;\n }\n }\n\n public isNodeSelected(node: Node): boolean {\n if (node.id != null) {\n return this.selectedNodes.has(node.id);\n } else if (this.selectedSingleNode) {\n return this.selectedSingleNode.element === node.element;\n } else {\n return false;\n }\n }\n\n public clear(): void {\n this.selectedNodes.clear();\n this.selectedSingleNode = null;\n }\n\n public removeFromSelection(node: Node, includeChildren = false): void {\n if (node.id == null) {\n if (\n this.selectedSingleNode &&\n node.element === this.selectedSingleNode.element\n ) {\n this.selectedSingleNode = null;\n }\n } else {\n this.selectedNodes.delete(node.id);\n\n if (includeChildren) {\n node.iterate(() => {\n if (node.id != null) {\n this.selectedNodes.delete(node.id);\n }\n return true;\n });\n }\n }\n }\n\n public addToSelection(node: Node): void {\n if (node.id != null) {\n this.selectedNodes.add(node.id);\n } else {\n this.selectedSingleNode = node;\n }\n }\n\n public isFocusOnTree(): boolean {\n const activeElement = document.activeElement;\n\n return Boolean(\n activeElement &&\n activeElement.tagName === \"SPAN\" &&\n this.treeWidget._containsElement(activeElement as HTMLElement)\n );\n }\n}\n","import { Position, Node } from \"./node\";\nimport { JqTreeWidget } from \"./tree.jquery\";\nimport { DropHint } from \"./types\";\n\nexport type OnFinishOpenNode = (node: Node) => void;\n\nexport class NodeElement {\n public node: Node;\n public $element: JQuery<HTMLElement>;\n protected treeWidget: JqTreeWidget;\n\n constructor(node: Node, treeWidget: JqTreeWidget) {\n this.init(node, treeWidget);\n }\n\n public init(node: Node, treeWidget: JqTreeWidget): void {\n this.node = node;\n this.treeWidget = treeWidget;\n\n if (!node.element) {\n const element = this.treeWidget.element.get(0);\n\n if (element) {\n node.element = element;\n }\n }\n\n if (node.element) {\n this.$element = jQuery(node.element);\n }\n }\n\n public addDropHint(position: number): DropHint {\n if (this.mustShowBorderDropHint(position)) {\n return new BorderDropHint(\n this.$element,\n this.treeWidget._getScrollLeft()\n );\n } else {\n return new GhostDropHint(this.node, this.$element, position);\n }\n }\n\n public select(mustSetFocus: boolean): void {\n const $li = this.getLi();\n\n $li.addClass(\"jqtree-selected\");\n $li.attr(\"aria-selected\", \"true\");\n\n const $span = this.getSpan();\n $span.attr(\"tabindex\", this.treeWidget.options.tabIndex ?? null);\n\n if (mustSetFocus) {\n $span.trigger(\"focus\");\n }\n }\n\n public deselect(): void {\n const $li = this.getLi();\n\n $li.removeClass(\"jqtree-selected\");\n $li.attr(\"aria-selected\", \"false\");\n\n const $span = this.getSpan();\n $span.removeAttr(\"tabindex\");\n\n $span.blur();\n }\n\n protected getUl(): JQuery<HTMLElement> {\n return this.$element.children(\"ul:first\");\n }\n\n protected getSpan(): JQuery<HTMLElement> {\n return this.$element\n .children(\".jqtree-element\")\n .find(\"span.jqtree-title\");\n }\n\n protected getLi(): JQuery<HTMLElement> {\n return this.$element;\n }\n\n protected mustShowBorderDropHint(position: number): boolean {\n return position === Position.Inside;\n }\n}\n\nexport class FolderElement extends NodeElement {\n public open(\n onFinished: OnFinishOpenNode | null,\n slide = true,\n animationSpeed: JQuery.Duration | string = \"fast\"\n ): void {\n if (this.node.is_open) {\n return;\n }\n\n this.node.is_open = true;\n\n const $button = this.getButton();\n $button.removeClass(\"jqtree-closed\");\n $button.html(\"\");\n\n const buttonEl = $button.get(0);\n\n if (buttonEl) {\n const icon =\n this.treeWidget.renderer.openedIconElement.cloneNode(true);\n\n buttonEl.appendChild(icon);\n }\n\n const doOpen = (): void => {\n const $li = this.getLi();\n $li.removeClass(\"jqtree-closed\");\n\n const $span = this.getSpan();\n $span.attr(\"aria-expanded\", \"true\");\n\n if (onFinished) {\n onFinished(this.node);\n }\n\n this.treeWidget._triggerEvent(\"tree.open\", {\n node: this.node,\n });\n };\n\n if (slide) {\n this.getUl().slideDown(animationSpeed, doOpen);\n } else {\n this.getUl().show();\n doOpen();\n }\n }\n\n public close(\n slide = true,\n animationSpeed: JQuery.Duration | string = \"fast\"\n ): void {\n if (!this.node.is_open) {\n return;\n }\n\n this.node.is_open = false;\n\n const $button = this.getButton();\n $button.addClass(\"jqtree-closed\");\n $button.html(\"\");\n\n const buttonEl = $button.get(0);\n\n if (buttonEl) {\n const icon =\n this.treeWidget.renderer.closedIconElement.cloneNode(true);\n\n buttonEl.appendChild(icon);\n }\n\n const doClose = (): void => {\n const $li = this.getLi();\n $li.addClass(\"jqtree-closed\");\n\n const $span = this.getSpan();\n $span.attr(\"aria-expanded\", \"false\");\n\n this.treeWidget._triggerEvent(\"tree.close\", {\n node: this.node,\n });\n };\n\n if (slide) {\n this.getUl().slideUp(animationSpeed, doClose);\n } else {\n this.getUl().hide();\n doClose();\n }\n }\n\n protected mustShowBorderDropHint(position: number): boolean {\n return !this.node.is_open && position === Position.Inside;\n }\n\n private getButton(): JQuery {\n return this.$element\n .children(\".jqtree-element\")\n .find(\"a.jqtree-toggler\");\n }\n}\n\nexport class BorderDropHint implements DropHint {\n private $hint: JQuery<Element>;\n\n constructor($element: JQuery<Element>, scrollLeft: number) {\n const $div = $element.children(\".jqtree-element\");\n\n const elWidth = $element.width() || 0;\n const width = Math.max(elWidth + scrollLeft - 4, 0);\n\n const elHeight = $div.outerHeight() || 0;\n const height = Math.max(elHeight - 4, 0);\n\n this.$hint = jQuery('<span class=\"jqtree-border\"></span>');\n $div.append(this.$hint);\n\n this.$hint.css({ width, height });\n }\n\n public remove(): void {\n this.$hint.remove();\n }\n}\n\nclass GhostDropHint implements DropHint {\n private $element: JQuery<Element>;\n private node: Node;\n private $ghost: JQuery;\n\n constructor(node: Node, $element: JQuery<Element>, position: number) {\n this.$element = $element;\n\n this.node = node;\n this.$ghost = jQuery(\n `<li class=\"jqtree_common jqtree-ghost\"><span class=\"jqtree_common jqtree-circle\"></span>\n <span class=\"jqtree_common jqtree-line\"></span></li>`\n );\n\n if (position === Position.After) {\n this.moveAfter();\n } else if (position === Position.Before) {\n this.moveBefore();\n } else if (position === Position.Inside) {\n if (node.isFolder() && node.is_open) {\n this.moveInsideOpenFolder();\n } else {\n this.moveInside();\n }\n }\n }\n\n public remove(): void {\n this.$ghost.remove();\n }\n\n public moveAfter(): void {\n this.$element.after(this.$ghost);\n }\n\n public moveBefore(): void {\n this.$element.before(this.$ghost);\n }\n\n public moveInsideOpenFolder(): void {\n const childElement = this.node.children[0].element;\n\n if (childElement) {\n jQuery(childElement).before(this.$ghost);\n }\n }\n\n public moveInside(): void {\n this.$element.after(this.$ghost);\n this.$ghost.addClass(\"jqtree-inside\");\n }\n}\n","import __version__ from \"./version\";\nimport { DragAndDropHandler } from \"./dragAndDropHandler\";\nimport ElementsRenderer from \"./elementsRenderer\";\nimport DataLoader, { HandleFinishedLoading } from \"./dataLoader\";\nimport KeyHandler from \"./keyHandler\";\nimport MouseWidget from \"./mouse.widget\";\nimport { PositionInfo } from \"./types\";\nimport SaveStateHandler, { SavedState } from \"./saveStateHandler\";\nimport ScrollHandler from \"./scrollHandler\";\nimport SelectNodeHandler from \"./selectNodeHandler\";\nimport SimpleWidget from \"./simple.widget\";\nimport { Node, getPosition } from \"./node\";\nimport { isFunction } from \"./util\";\nimport { FolderElement, NodeElement, OnFinishOpenNode } from \"./nodeElement\";\nimport { JQTreeOptions } from \"./jqtreeOptions\";\n\ninterface ClickTarget {\n node: Node;\n type: \"button\" | \"label\";\n}\n\ninterface SelectNodeOptions {\n mustToggle?: boolean;\n mustSetFocus?: boolean;\n}\n\nconst NODE_PARAM_IS_EMPTY = \"Node parameter is empty\";\nconst PARAM_IS_EMPTY = \"Parameter is empty: \";\n\nexport class JqTreeWidget extends MouseWidget<JQTreeOptions> {\n protected static defaults: JQTreeOptions = {\n animationSpeed: \"fast\",\n autoEscape: true,\n autoOpen: false, // true / false / int (open n levels starting at 0)\n buttonLeft: true,\n // The symbol to use for a closed node - ► BLACK RIGHT-POINTING POINTER\n // http://www.fileformat.info/info/unicode/char/25ba/index.htm\n closedIcon: undefined,\n data: undefined,\n dataFilter: undefined,\n dataUrl: undefined,\n dragAndDrop: false,\n keyboardSupport: true,\n nodeClass: Node,\n onCanMove: undefined, // Can this node be moved?\n onCanMoveTo: undefined, // Can this node be moved to this position? function(moved_node, target_node, position)\n onCanSelectNode: undefined,\n onCreateLi: undefined,\n onDragMove: undefined,\n onDragStop: undefined,\n onGetStateFromStorage: undefined,\n onIsMoveHandle: undefined,\n onLoadFailed: undefined,\n onLoading: undefined,\n onSetStateFromStorage: undefined,\n openedIcon: \"▼\",\n openFolderDelay: 500, // The delay for opening a folder during drag and drop; the value is in milliseconds\n // The symbol to use for an open node - ▼ BLACK DOWN-POINTING TRIANGLE\n // http://www.fileformat.info/info/unicode/char/25bc/index.htm\n rtl: undefined, // right-to-left support; true / false (default)\n saveState: false, // true / false / string (cookie name)\n selectable: true,\n showEmptyFolder: false,\n slide: true, // must display slide animation?\n startDndDelay: 300, // The delay for starting dnd (in milliseconds)\n tabIndex: 0,\n useContextMenu: true,\n };\n\n public element: JQuery;\n public tree: Node;\n public dndHandler: DragAndDropHandler;\n public renderer: ElementsRenderer;\n public dataLoader: DataLoader;\n public scrollHandler: ScrollHandler;\n public selectNodeHandler: SelectNodeHandler;\n\n private isInitialized: boolean;\n private saveStateHandler: SaveStateHandler;\n private keyHandler: KeyHandler;\n\n public toggle(node: Node, slideParam: null | boolean = null): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n const slide = slideParam ?? this.options.slide;\n\n if (node.is_open) {\n this.closeNode(node, slide);\n } else {\n this.openNode(node, slide);\n }\n\n return this.element;\n }\n\n public getTree(): Node {\n return this.tree;\n }\n\n public selectNode(\n node: Node | null,\n optionsParam?: SelectNodeOptions\n ): JQuery {\n this.doSelectNode(node, optionsParam);\n return this.element;\n }\n\n public getSelectedNode(): Node | false {\n return this.selectNodeHandler.getSelectedNode();\n }\n\n public toJson(): string {\n return JSON.stringify(this.tree.getData());\n }\n\n public loadData(data: NodeData[], parentNode: Node | null): JQuery {\n this.doLoadData(data, parentNode);\n return this.element;\n }\n\n /*\n signatures:\n - loadDataFromUrl(url, parent_node=null, on_finished=null)\n loadDataFromUrl('/my_data');\n loadDataFromUrl('/my_data', node1);\n loadDataFromUrl('/my_data', node1, function() { console.log('finished'); });\n loadDataFromUrl('/my_data', null, function() { console.log('finished'); });\n\n - loadDataFromUrl(parent_node=null, on_finished=null)\n loadDataFromUrl();\n loadDataFromUrl(node1);\n loadDataFromUrl(null, function() { console.log('finished'); });\n loadDataFromUrl(node1, function() { console.log('finished'); });\n */\n public loadDataFromUrl(\n param1: string | null | Node,\n param2?: Node | null | HandleFinishedLoading,\n param3?: HandleFinishedLoading\n ): JQuery {\n if (typeof param1 === \"string\") {\n // first parameter is url\n this.doLoadDataFromUrl(\n param1,\n param2 as Node | null,\n param3 ?? null\n );\n } else {\n // first parameter is not url\n this.doLoadDataFromUrl(\n null,\n param1,\n param2 as HandleFinishedLoading | null\n );\n }\n\n return this.element;\n }\n\n public reload(onFinished: HandleFinishedLoading | null): JQuery {\n this.doLoadDataFromUrl(null, null, onFinished);\n return this.element;\n }\n\n public refresh(): JQuery {\n this._refreshElements(null);\n return this.element;\n }\n\n public getNodeById(nodeId: NodeId): Node | null {\n return this.tree.getNodeById(nodeId);\n }\n\n public getNodeByName(name: string): Node | null {\n return this.tree.getNodeByName(name);\n }\n\n public getNodeByNameMustExist(name: string): Node {\n return this.tree.getNodeByNameMustExist(name);\n }\n\n public getNodesByProperty(key: string, value: unknown): Node[] {\n return this.tree.getNodesByProperty(key, value);\n }\n\n public getNodeByHtmlElement(\n element: HTMLElement | JQuery<HTMLElement>\n ): Node | null {\n return this.getNode(jQuery(element));\n }\n\n public getNodeByCallback(callback: (node: Node) => boolean): Node | null {\n return this.tree.getNodeByCallback(callback);\n }\n\n public openNode(\n node: Node,\n param1?: boolean | OnFinishOpenNode,\n param2?: OnFinishOpenNode\n ): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n const parseParams = (): [boolean, OnFinishOpenNode | null] => {\n let onFinished: OnFinishOpenNode | null;\n let slide: boolean | null;\n\n if (isFunction(param1)) {\n onFinished = param1 as OnFinishOpenNode | null;\n slide = null;\n } else {\n slide = param1 as boolean;\n onFinished = param2 as OnFinishOpenNode;\n }\n\n if (slide == null) {\n slide = this.options.slide ?? false;\n }\n\n return [slide, onFinished];\n };\n\n const [slide, onFinished] = parseParams();\n\n this._openNode(node, slide, onFinished);\n return this.element;\n }\n\n public closeNode(node: Node, slideParam?: null | boolean): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n const slide = slideParam ?? this.options.slide;\n\n if (node.isFolder() || node.isEmptyFolder) {\n new FolderElement(node, this).close(\n slide,\n this.options.animationSpeed\n );\n\n this.saveState();\n }\n\n return this.element;\n }\n\n public isDragging(): boolean {\n return this.dndHandler.isDragging;\n }\n\n public refreshHitAreas(): JQuery {\n this.dndHandler.refresh();\n return this.element;\n }\n\n public addNodeAfter(\n newNodeInfo: NodeData,\n existingNode: Node\n ): Node | null {\n const newNode = existingNode.addAfter(newNodeInfo);\n\n if (newNode) {\n this._refreshElements(existingNode.parent);\n }\n\n return newNode;\n }\n\n public addNodeBefore(\n newNodeInfo: NodeData,\n existingNode: Node\n ): Node | null {\n if (!existingNode) {\n throw Error(PARAM_IS_EMPTY + \"existingNode\");\n }\n\n const newNode = existingNode.addBefore(newNodeInfo);\n\n if (newNode) {\n this._refreshElements(existingNode.parent);\n }\n\n return newNode;\n }\n\n public addParentNode(\n newNodeInfo: NodeData,\n existingNode: Node\n ): Node | null {\n if (!existingNode) {\n throw Error(PARAM_IS_EMPTY + \"existingNode\");\n }\n\n const newNode = existingNode.addParent(newNodeInfo);\n\n if (newNode) {\n this._refreshElements(newNode.parent);\n }\n\n return newNode;\n }\n\n public removeNode(node: Node): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n if (!node.parent) {\n throw Error(\"Node has no parent\");\n }\n\n this.selectNodeHandler.removeFromSelection(node, true); // including children\n\n const parent = node.parent;\n node.remove();\n this._refreshElements(parent);\n\n return this.element;\n }\n\n public appendNode(newNodeInfo: NodeData, parentNodeParam?: Node): Node {\n const parentNode = parentNodeParam || this.tree;\n\n const node = parentNode.append(newNodeInfo);\n\n this._refreshElements(parentNode);\n\n return node;\n }\n\n public prependNode(newNodeInfo: NodeData, parentNodeParam?: Node): Node {\n const parentNode = parentNodeParam ?? this.tree;\n\n const node = parentNode.prepend(newNodeInfo);\n\n this._refreshElements(parentNode);\n\n return node;\n }\n\n public updateNode(node: Node, data: NodeData): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n const idIsChanged =\n typeof data === \"object\" && data.id && data.id !== node.id;\n\n if (idIsChanged) {\n this.tree.removeNodeFromIndex(node);\n }\n\n node.setData(data);\n\n if (idIsChanged) {\n this.tree.addNodeToIndex(node);\n }\n\n if (\n typeof data === \"object\" &&\n data[\"children\"] &&\n data[\"children\"] instanceof Array\n ) {\n node.removeChildren();\n\n if (data.children.length) {\n node.loadFromData(data.children as Node[]);\n }\n }\n\n this._refreshElements(node);\n\n return this.element;\n }\n\n private isSelectedNodeInSubtree(subtree: Node): boolean {\n const selectedNode = this.getSelectedNode();\n\n if (!selectedNode) {\n return false;\n } else {\n return subtree === selectedNode || subtree.isParentOf(selectedNode);\n }\n }\n\n public moveNode(node: Node, targetNode: Node, position: string): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n if (!targetNode) {\n throw Error(PARAM_IS_EMPTY + \"targetNode\");\n }\n\n const positionIndex = getPosition(position);\n\n if (positionIndex !== undefined) {\n this.tree.moveNode(node, targetNode, positionIndex);\n this._refreshElements(null);\n }\n\n return this.element;\n }\n\n public getStateFromStorage(): SavedState | null {\n return this.saveStateHandler.getStateFromStorage();\n }\n\n public addToSelection(node: Node, mustSetFocus?: boolean): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n this.selectNodeHandler.addToSelection(node);\n\n this._getNodeElementForNode(node).select(\n mustSetFocus === undefined ? true : mustSetFocus\n );\n\n this.saveState();\n\n return this.element;\n }\n\n public getSelectedNodes(): Node[] {\n return this.selectNodeHandler.getSelectedNodes();\n }\n\n public isNodeSelected(node: Node): boolean {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n return this.selectNodeHandler.isNodeSelected(node);\n }\n\n public removeFromSelection(node: Node): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n this.selectNodeHandler.removeFromSelection(node);\n\n this._getNodeElementForNode(node).deselect();\n this.saveState();\n\n return this.element;\n }\n\n public scrollToNode(node: Node): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n const nodeOffset = jQuery(node.element).offset();\n const nodeTop = nodeOffset ? nodeOffset.top : 0;\n\n const treeOffset = this.$el.offset();\n const treeTop = treeOffset ? treeOffset.top : 0;\n\n const top = nodeTop - treeTop;\n\n this.scrollHandler.scrollToY(top);\n\n return this.element;\n }\n\n public getState(): SavedState | null {\n return this.saveStateHandler.getState();\n }\n\n public setState(state: SavedState): JQuery {\n this.saveStateHandler.setInitialState(state);\n this._refreshElements(null);\n\n return this.element;\n }\n\n public setOption(option: string, value: unknown): JQuery {\n (this.options as unknown as Record<string, unknown>)[option] = value;\n return this.element;\n }\n\n public moveDown(): JQuery {\n const selectedNode = this.getSelectedNode();\n if (selectedNode) {\n this.keyHandler.moveDown(selectedNode);\n }\n\n return this.element;\n }\n\n public moveUp(): JQuery {\n const selectedNode = this.getSelectedNode();\n if (selectedNode) {\n this.keyHandler.moveUp(selectedNode);\n }\n\n return this.element;\n }\n\n public getVersion(): string {\n return __version__;\n }\n\n public _triggerEvent(\n eventName: string,\n values?: Record<string, unknown>\n ): JQuery.Event {\n const event = jQuery.Event(eventName, values);\n this.element.trigger(event);\n return event;\n }\n\n public _openNode(\n node: Node,\n slide = true,\n onFinished: OnFinishOpenNode | null\n ): void {\n const doOpenNode = (\n _node: Node,\n _slide: boolean,\n _onFinished: OnFinishOpenNode | null\n ): void => {\n const folderElement = new FolderElement(_node, this);\n folderElement.open(\n _onFinished,\n _slide,\n this.options.animationSpeed\n );\n };\n\n if (node.isFolder() || node.isEmptyFolder) {\n if (node.load_on_demand) {\n this.loadFolderOnDemand(node, slide, onFinished);\n } else {\n let parent = node.parent;\n\n while (parent) {\n // nb: do not open root element\n if (parent.parent) {\n doOpenNode(parent, false, null);\n }\n parent = parent.parent;\n }\n\n doOpenNode(node, slide, onFinished);\n this.saveState();\n }\n }\n }\n\n /*\n Redraw the tree or part of the tree.\n from_node: redraw this subtree\n */\n public _refreshElements(fromNode: Node | null): void {\n const mustSetFocus = this.selectNodeHandler.isFocusOnTree();\n const mustSelect = fromNode\n ? this.isSelectedNodeInSubtree(fromNode)\n : false;\n\n this.renderer.render(fromNode);\n\n if (mustSelect) {\n this.selectCurrentNode(mustSetFocus);\n }\n\n this._triggerEvent(\"tree.refresh\");\n }\n\n public _getNodeElementForNode(node: Node): NodeElement {\n if (node.isFolder()) {\n return new FolderElement(node, this);\n } else {\n return new NodeElement(node, this);\n }\n }\n\n public _getNodeElement($element: JQuery<HTMLElement>): NodeElement | null {\n const node = this.getNode($element);\n if (node) {\n return this._getNodeElementForNode(node);\n } else {\n return null;\n }\n }\n\n public _containsElement(element: HTMLElement): boolean {\n const node = this.getNode(jQuery(element));\n\n return node != null && node.tree === this.tree;\n }\n\n public _getScrollLeft(): number {\n return this.scrollHandler.getScrollLeft();\n }\n\n public init(): void {\n super.init();\n\n this.element = this.$el;\n this.isInitialized = false;\n\n this.options.rtl = this.getRtlOption();\n\n if (this.options.closedIcon == null) {\n this.options.closedIcon = this.getDefaultClosedIcon();\n }\n\n this.renderer = new ElementsRenderer(this);\n this.dataLoader = new DataLoader(this);\n this.saveStateHandler = new SaveStateHandler(this);\n this.selectNodeHandler = new SelectNodeHandler(this);\n this.dndHandler = new DragAndDropHandler(this);\n this.scrollHandler = new ScrollHandler(this);\n this.keyHandler = new KeyHandler(this);\n\n this.initData();\n\n this.element.on(\"click\", this.handleClick);\n this.element.on(\"dblclick\", this.handleDblclick);\n\n if (this.options.useContextMenu) {\n this.element.on(\"contextmenu\", this.handleContextmenu);\n }\n }\n\n public deinit(): void {\n this.element.empty();\n this.element.off();\n\n this.keyHandler.deinit();\n\n this.tree = new Node({}, true);\n\n super.deinit();\n }\n\n protected mouseCapture(positionInfo: PositionInfo): boolean | null {\n if (this.options.dragAndDrop) {\n return this.dndHandler.mouseCapture(positionInfo);\n } else {\n return false;\n }\n }\n\n protected mouseStart(positionInfo: PositionInfo): boolean {\n if (this.options.dragAndDrop) {\n return this.dndHandler.mouseStart(positionInfo);\n } else {\n return false;\n }\n }\n\n protected mouseDrag(positionInfo: PositionInfo): boolean {\n if (this.options.dragAndDrop) {\n const result = this.dndHandler.mouseDrag(positionInfo);\n\n this.scrollHandler.checkScrolling();\n return result;\n } else {\n return false;\n }\n }\n\n protected mouseStop(positionInfo: PositionInfo): boolean {\n if (this.options.dragAndDrop) {\n return this.dndHandler.mouseStop(positionInfo);\n } else {\n return false;\n }\n }\n\n protected getMouseDelay(): number {\n return this.options.startDndDelay ?? 0;\n }\n\n private initData(): void {\n if (this.options.data) {\n this.doLoadData(this.options.data, null);\n } else {\n const dataUrl = this.getDataUrlInfo(null);\n\n if (dataUrl) {\n this.doLoadDataFromUrl(null, null, null);\n } else {\n this.doLoadData([], null);\n }\n }\n }\n\n private getDataUrlInfo(node: Node | null): JQuery.AjaxSettings | null {\n const dataUrl =\n this.options.dataUrl || (this.element.data(\"url\") as string | null);\n\n const getUrlFromString = (url: string): JQuery.AjaxSettings => {\n const urlInfo: JQuery.AjaxSettings = { url };\n\n setUrlInfoData(urlInfo);\n\n return urlInfo;\n };\n\n const setUrlInfoData = (urlInfo: JQuery.AjaxSettings): void => {\n if (node?.id) {\n // Load on demand of a subtree; add node parameter\n const data = { node: node.id };\n urlInfo[\"data\"] = data;\n } else {\n // Add selected_node parameter\n const selectedNodeId = this.getNodeIdToBeSelected();\n if (selectedNodeId) {\n const data = { selected_node: selectedNodeId };\n urlInfo[\"data\"] = data;\n }\n }\n };\n\n if (typeof dataUrl === \"function\") {\n return dataUrl(node);\n } else if (typeof dataUrl === \"string\") {\n return getUrlFromString(dataUrl);\n } else if (dataUrl && typeof dataUrl === \"object\") {\n setUrlInfoData(dataUrl);\n return dataUrl;\n } else {\n return null;\n }\n }\n\n private getNodeIdToBeSelected(): NodeId | null {\n if (this.options.saveState) {\n return this.saveStateHandler.getNodeIdToBeSelected();\n } else {\n return null;\n }\n }\n\n private initTree(data: NodeData[]): void {\n const doInit = (): void => {\n if (!this.isInitialized) {\n this.isInitialized = true;\n this._triggerEvent(\"tree.init\");\n }\n };\n\n if (!this.options.nodeClass) {\n return;\n }\n\n this.tree = new this.options.nodeClass(\n null,\n true,\n this.options.nodeClass\n );\n\n this.selectNodeHandler.clear();\n\n this.tree.loadFromData(data);\n\n const mustLoadOnDemand = this.setInitialState();\n\n this._refreshElements(null);\n\n if (!mustLoadOnDemand) {\n doInit();\n } else {\n // Load data on demand and then init the tree\n this.setInitialStateOnDemand(doInit);\n }\n }\n\n // Set initial state, either by restoring the state or auto-opening nodes\n // result: must load nodes on demand?\n private setInitialState(): boolean {\n const restoreState = (): boolean[] => {\n // result: is state restored, must load on demand?\n if (!this.options.saveState) {\n return [false, false];\n } else {\n const state = this.saveStateHandler.getStateFromStorage();\n\n if (!state) {\n return [false, false];\n } else {\n const mustLoadOnDemand =\n this.saveStateHandler.setInitialState(state);\n\n // return true: the state is restored\n return [true, mustLoadOnDemand];\n }\n }\n };\n\n const autoOpenNodes = (): boolean => {\n // result: must load on demand?\n if (this.options.autoOpen === false) {\n return false;\n }\n\n const maxLevel = this.getAutoOpenMaxLevel();\n let mustLoadOnDemand = false;\n\n this.tree.iterate((node: Node, level: number) => {\n if (node.load_on_demand) {\n mustLoadOnDemand = true;\n return false;\n } else if (!node.hasChildren()) {\n return false;\n } else {\n node.is_open = true;\n return level !== maxLevel;\n }\n });\n\n return mustLoadOnDemand;\n };\n\n let [isRestored, mustLoadOnDemand] = restoreState(); // eslint-disable-line prefer-const\n\n if (!isRestored) {\n mustLoadOnDemand = autoOpenNodes();\n }\n\n return mustLoadOnDemand;\n }\n\n // Set the initial state for nodes that are loaded on demand\n // Call cb_finished when done\n private setInitialStateOnDemand(cbFinished: () => void): void {\n const restoreState = (): boolean => {\n if (!this.options.saveState) {\n return false;\n } else {\n const state = this.saveStateHandler.getStateFromStorage();\n\n if (!state) {\n return false;\n } else {\n this.saveStateHandler.setInitialStateOnDemand(\n state,\n cbFinished\n );\n\n return true;\n }\n }\n };\n\n const autoOpenNodes = (): void => {\n const maxLevel = this.getAutoOpenMaxLevel();\n let loadingCount = 0;\n\n const loadAndOpenNode = (node: Node): void => {\n loadingCount += 1;\n this._openNode(node, false, () => {\n loadingCount -= 1;\n openNodes();\n });\n };\n\n const openNodes = (): void => {\n this.tree.iterate((node: Node, level: number) => {\n if (node.load_on_demand) {\n if (!node.is_loading) {\n loadAndOpenNode(node);\n }\n\n return false;\n } else {\n this._openNode(node, false, null);\n\n return level !== maxLevel;\n }\n });\n\n if (loadingCount === 0) {\n cbFinished();\n }\n };\n\n openNodes();\n };\n\n if (!restoreState()) {\n autoOpenNodes();\n }\n }\n\n private getAutoOpenMaxLevel(): number {\n if (this.options.autoOpen === true) {\n return -1;\n } else if (typeof this.options.autoOpen === \"number\") {\n return this.options.autoOpen;\n } else if (typeof this.options.autoOpen === \"string\") {\n return parseInt(this.options.autoOpen, 10);\n } else {\n return 0;\n }\n }\n\n private handleClick = (\n e: JQuery.ClickEvent<HTMLElement, any, HTMLElement, HTMLElement>\n ): void => {\n const clickTarget = this.getClickTarget(e.target);\n\n if (clickTarget) {\n if (clickTarget.type === \"button\") {\n this.toggle(clickTarget.node, this.options.slide);\n\n e.preventDefault();\n e.stopPropagation();\n } else if (clickTarget.type === \"label\") {\n const node = clickTarget.node;\n const event = this._triggerEvent(\"tree.click\", {\n node,\n click_event: e,\n });\n\n if (!event.isDefaultPrevented()) {\n this.doSelectNode(node);\n }\n }\n }\n };\n\n private handleDblclick = (\n e: JQuery.DoubleClickEvent<HTMLElement, any, HTMLElement, HTMLElement>\n ): void => {\n const clickTarget = this.getClickTarget(e.target);\n\n if (clickTarget?.type === \"label\") {\n this._triggerEvent(\"tree.dblclick\", {\n node: clickTarget.node,\n click_event: e,\n });\n }\n };\n\n private getClickTarget(element: EventTarget): ClickTarget | null {\n const $target = jQuery(element);\n\n const $button = $target.closest(\".jqtree-toggler\");\n\n if ($button.length) {\n const node = this.getNode($button as JQuery<HTMLElement>);\n\n if (node) {\n return {\n type: \"button\",\n node,\n };\n }\n } else {\n const $el = $target.closest(\".jqtree-element\");\n if ($el.length) {\n const node = this.getNode($el as JQuery<HTMLElement>);\n if (node) {\n return {\n type: \"label\",\n node,\n };\n }\n }\n }\n\n return null;\n }\n\n private getNode($element: JQuery<HTMLElement>): null | Node {\n const $li = $element.closest(\"li.jqtree_common\");\n if ($li.length === 0) {\n return null;\n } else {\n return $li.data(\"node\") as Node;\n }\n }\n\n private handleContextmenu = (\n e: JQuery.ContextMenuEvent<HTMLElement, any, HTMLElement, HTMLElement>\n ) => {\n const $div = jQuery(e.target).closest(\"ul.jqtree-tree .jqtree-element\");\n if ($div.length) {\n const node = this.getNode($div);\n if (node) {\n e.preventDefault();\n e.stopPropagation();\n\n this._triggerEvent(\"tree.contextmenu\", {\n node,\n click_event: e,\n });\n return false;\n }\n }\n\n return null;\n };\n\n private saveState(): void {\n if (this.options.saveState) {\n this.saveStateHandler.saveState();\n }\n }\n\n private selectCurrentNode(mustSetFocus: boolean): void {\n const node = this.getSelectedNode();\n if (node) {\n const nodeElement = this._getNodeElementForNode(node);\n if (nodeElement) {\n nodeElement.select(mustSetFocus);\n }\n }\n }\n\n private deselectCurrentNode(): void {\n const node = this.getSelectedNode();\n if (node) {\n this.removeFromSelection(node);\n }\n }\n\n private getDefaultClosedIcon(): string {\n if (this.options.rtl) {\n // triangle to the left\n return \"◀\";\n } else {\n // triangle to the right\n return \"►\";\n }\n }\n\n private getRtlOption(): boolean {\n if (this.options.rtl != null) {\n return this.options.rtl;\n } else {\n const dataRtl = this.element.data(\"rtl\") as unknown;\n\n if (\n dataRtl !== null &&\n dataRtl !== false &&\n dataRtl !== undefined\n ) {\n return true;\n } else {\n return false;\n }\n }\n }\n\n private doSelectNode(\n node: Node | null,\n optionsParam?: SelectNodeOptions\n ): void {\n const saveState = (): void => {\n if (this.options.saveState) {\n this.saveStateHandler.saveState();\n }\n };\n\n if (!node) {\n // Called with empty node -> deselect current node\n this.deselectCurrentNode();\n saveState();\n return;\n }\n const defaultOptions = { mustSetFocus: true, mustToggle: true };\n const selectOptions = { ...defaultOptions, ...(optionsParam || {}) };\n\n const canSelect = (): boolean => {\n if (this.options.onCanSelectNode) {\n return (\n this.options.selectable === true &&\n this.options.onCanSelectNode(node)\n );\n } else {\n return this.options.selectable === true;\n }\n };\n\n const openParents = (): void => {\n const parent = node.parent;\n\n if (parent && parent.parent && !parent.is_open) {\n this.openNode(parent, false);\n }\n };\n\n if (!canSelect()) {\n return;\n }\n\n if (this.selectNodeHandler.isNodeSelected(node)) {\n if (selectOptions.mustToggle) {\n this.deselectCurrentNode();\n this._triggerEvent(\"tree.select\", {\n node: null,\n previous_node: node,\n });\n }\n } else {\n const deselectedNode = this.getSelectedNode() || null;\n this.deselectCurrentNode();\n this.addToSelection(node, selectOptions.mustSetFocus);\n\n this._triggerEvent(\"tree.select\", {\n node,\n deselected_node: deselectedNode,\n });\n openParents();\n }\n\n saveState();\n }\n\n private doLoadData(data: NodeData[] | null, parentNode: Node | null): void {\n if (!data) {\n return;\n } else {\n this._triggerEvent(\"tree.load_data\", { tree_data: data });\n\n if (parentNode) {\n this.deselectNodes(parentNode);\n this.loadSubtree(data, parentNode);\n } else {\n this.initTree(data);\n }\n\n if (this.isDragging()) {\n this.dndHandler.refresh();\n }\n }\n }\n\n private deselectNodes(parentNode: Node): void {\n const selectedNodesUnderParent =\n this.selectNodeHandler.getSelectedNodesUnder(parentNode);\n for (const n of selectedNodesUnderParent) {\n this.selectNodeHandler.removeFromSelection(n);\n }\n }\n\n private loadSubtree(data: NodeData[], parentNode: Node): void {\n parentNode.loadFromData(data);\n\n parentNode.load_on_demand = false;\n parentNode.is_loading = false;\n\n this._refreshElements(parentNode);\n }\n\n private doLoadDataFromUrl(\n urlInfoParam: string | JQuery.AjaxSettings | null,\n parentNode: Node | null,\n onFinished: HandleFinishedLoading | null\n ): void {\n const urlInfo = urlInfoParam || this.getDataUrlInfo(parentNode);\n\n this.dataLoader.loadFromUrl(urlInfo, parentNode, onFinished);\n }\n\n private loadFolderOnDemand(\n node: Node,\n slide = true,\n onFinished: OnFinishOpenNode | null\n ): void {\n node.is_loading = true;\n\n this.doLoadDataFromUrl(null, node, () => {\n this._openNode(node, slide, onFinished);\n });\n }\n}\n\nSimpleWidget.register(JqTreeWidget, \"tree\");\n"],"names":["version","Position","positionNames","before","Before","after","After","inside","Inside","none","None","getPositionName","position","name","Object","prototype","hasOwnProperty","call","getPosition","isNodeRecordWithChildren","data","Array","Node","o","isRoot","nodeClass","isEmptyFolder","load_on_demand","setData","children","parent","idMapping","Map","tree","key","value","removeChildren","node","createNode","addChild","length","loadFromData","push","setParent","index","splice","doRemoveChild","indexOf","hasChildren","callback","_iterate","level","child","result","movedNode","targetNode","isParentOf","addChildAtPosition","getChildIndex","includeParent","getDataFromNodes","nodes","map","tmpNode","k","v","getNodeByCallback","n","iterate","nodeInfo","childIndex","newParent","originalParent","removeChild","nodeId","get","id","set","removeNodeFromIndex","previousIndex","nextIndex","filter","f","includeChildren","is_open","nextSibling","getNextSibling","getNextNode","previousSibling","getPreviousSibling","getLastChild","getParent","lastChild","addNode","nodeData","addChildren","childrenData","initFromData","addNodeToIndex","getNodeClass","DragAndDropHandler","treeWidget","hoveredArea","hitAreas","isDragging","currentItem","positionInfo","$element","jQuery","target","mustCaptureElement","options","onIsMoveHandle","nodeElement","_getNodeElement","onCanMove","pageX","undefined","pageY","refresh","offset","left","top","dragElement","DragElement","element","autoEscape","addClass","move","area","findHoveredArea","canMoveToArea","isFolder","stopOpenFolderTimer","mustOpenFolderTimer","startOpenFolderTimer","updateDropHint","removeDropHint","onDragMove","originalEvent","moveItem","clear","removeHover","removeHitAreas","removeClass","onDragStop","generateHitAreas","_getNodeElementForNode","hitAreasGenerator","HitAreasGenerator","getTreeDimensions","bottom","generate","is","onCanMoveTo","positionName","remove","previousGhost","x","y","dimensions","right","low","high","mid","addDropHint","folder","openFolder","_openNode","slide","openFolderTimer","window","setTimeout","openFolderDelay","clearTimeout","previousParent","doMove","moveNode","empty","_refreshElements","event","_triggerEvent","move_info","moved_node","target_node","previous_parent","do_move","original_event","isDefaultPrevented","el","width","height","_getScrollLeft","VisibleNodeIterator","isFirstNode","_iterateNode","nextNode","mustIterateInside","handleFirstNode","handleNode","handleOpenFolder","handleClosedFolder","childrenLength","forEach","_","i","handleAfterOpenFolder","currentNode","treeBottom","positions","lastTop","previousTop","group","generateHitAreasForGroup","addPosition","getTop","positionsInGroup","positionCount","Math","min","areaHeight","round","areaTop","nodeName","offsetX","offsetY","$tree","text","html","css","append","isInt","isFunction","getBoolString","ElementsRenderer","openedIconElement","createButtonElement","openedIcon","closedIconElement","closedIcon","fromNode","renderFromNode","renderFromRoot","createDomElements","$previousLi","li","createLi","getLevel","attachNodeData","isRootNode","ul","createUl","appendChild","classString","role","rtl","dragAndDrop","document","createElement","className","setAttribute","isSelected","Boolean","selectNodeHandler","isNodeSelected","mustShowFolder","showEmptyFolder","createFolderLi","createNodeLi","onCreateLi","buttonClasses","getButtonClasses","folderClasses","getFolderClasses","iconElement","div","buttonLink","cloneNode","buttonLeft","createTitleSpan","liClasses","join","isOpen","titleSpan","classes","tabIndex","textContent","innerHTML","is_loading","createTextNode","DataLoader","urlInfo","parentNode","onFinished","$el","getDomElement","addLoadingClass","notifyLoading","stopLoading","removeLoadingClass","handleSuccess","loadData","parseData","handleError","jqXHR","onLoadFailed","submitRequest","isLoading","onLoading","urlInfoInput","url","ajaxSettings","method","cache","dataType","success","error","toUpperCase","ajax","dataFilter","getParsedData","JSON","parse","parsedData","KeyHandler","e","canHandleKeyboard","selectedNode","getSelectedNode","which","DOWN","moveDown","UP","moveUp","RIGHT","moveRight","LEFT","moveLeft","keyboardSupport","on","handleKeyDown","off","selectNode","getPreviousNode","openNode","closeNode","scrollHandler","isScrolledIntoView","find","scrollToNode","isFocusOnTree","register","widgetClass","widgetName","getDataKey","getWidgetData","dataKey","widget","SimpleWidget","createWidget","existingWidget","simpleWidgetClass","init","destroyWidget","destroy","removeData","callFunction","functionName","args","simpleWidget","widgetFunction","apply","fn","argument1","defaults","constructor","deinit","getPositionInfoFromMouseEvent","getPositionInfoFromTouch","touch","MouseWidget","button","handleMouseDown","cancelable","preventDefault","handleMouseMove","handleMouseUp","touches","changedTouches","addEventListener","mouseDown","passive","touchStart","isMouseStarted","mouseDelayTimer","isMouseDelayMet","mouseDownInfo","removeEventListener","removeMouseMoveEventListeners","mouseCapture","handleStartMouse","mouseMove","touchMove","mouseUp","touchEnd","mouseDelay","getMouseDelay","startMouseDelayTimer","mouseDrag","mouseStart","mouseStop","SaveStateHandler","state","stringify","getState","onSetStateFromStorage","supportsLocalStorage","localStorage","setItem","getKeyName","jsonData","loadFromStorage","parseState","getOpenNodeIds","openNodes","getSelectedNodeIds","selectedNodeIds","getSelectedNodes","open_nodes","selected_node","mustLoadOnDemand","openInitialNodes","resetSelection","selectInitialNodes","cbFinished","doSetInitialStateOnDemand","getStateFromStorage","onGetStateFromStorage","getItem","nodeIds","getNodeById","selectCount","addToSelection","selectedNodes","removeFromSelection","nodeIdsParam","loadingCount","newNodesIds","loadAndOpenNode","saveState","testSupport","sessionStorage","removeItem","_supportsLocalStorage","ScrollHandler","isInitialized","ensureInit","checkVerticalScrolling","checkHorizontalScrolling","$scrollParent","scrollTop","treeTop","elementBottom","viewBottom","elementTop","viewTop","elHeight","originalTop","scrollParentTop","windowHeight","scrollLeft","getParentWithOverflow","cssAttributes","hasOverFlow","attr","overflowValue","parents","setDocumentAsScrollParent","tagName","initScrollParent","scrollParent","distanceBottom","offsetHeight","refreshHitAreas","distanceTop","dndHandler","handleVerticalScrollingWithScrollParent","handleVerticalScrollingWithDocument","handleHorizontalScrollingWithParent","handleHorizontalScrollingWithDocument","scrollParentOffset","canScrollRight","clientWidth","scrollWidth","canScrollLeft","rightEdge","leftEdge","isNearRightEdge","isNearLeftEdge","max","$document","windowWidth","SelectNodeHandler","Set","selectedSingleNode","has","add","activeElement","_containsElement","NodeElement","mustShowBorderDropHint","BorderDropHint","GhostDropHint","mustSetFocus","$li","getLi","$span","getSpan","trigger","removeAttr","blur","FolderElement","animationSpeed","$button","getButton","buttonEl","icon","renderer","doOpen","getUl","slideDown","show","doClose","slideUp","hide","$div","elWidth","outerHeight","$hint","$ghost","moveAfter","moveBefore","moveInsideOpenFolder","moveInside","childElement","NODE_PARAM_IS_EMPTY","PARAM_IS_EMPTY","JqTreeWidget","clickTarget","getClickTarget","type","toggle","stopPropagation","click_event","doSelectNode","closest","getNode","slideParam","Error","optionsParam","getData","doLoadData","param1","param2","param3","doLoadDataFromUrl","getNodeByName","getNodeByNameMustExist","getNodesByProperty","parseParams","close","newNodeInfo","existingNode","newNode","addAfter","addBefore","addParent","parentNodeParam","prepend","idIsChanged","subtree","positionIndex","saveStateHandler","select","deselect","nodeOffset","nodeTop","treeOffset","scrollToY","setInitialState","option","keyHandler","__version__","eventName","values","Event","doOpenNode","_node","_slide","_onFinished","folderElement","open","loadFolderOnDemand","mustSelect","isSelectedNodeInSubtree","render","selectCurrentNode","getScrollLeft","getRtlOption","getDefaultClosedIcon","dataLoader","initData","handleClick","handleDblclick","useContextMenu","handleContextmenu","checkScrolling","startDndDelay","dataUrl","getDataUrlInfo","getUrlFromString","setUrlInfoData","selectedNodeId","getNodeIdToBeSelected","doInit","setInitialStateOnDemand","restoreState","autoOpenNodes","autoOpen","maxLevel","getAutoOpenMaxLevel","isRestored","parseInt","$target","dataRtl","deselectCurrentNode","defaultOptions","mustToggle","selectOptions","canSelect","onCanSelectNode","selectable","openParents","previous_node","deselectedNode","deselected_node","tree_data","deselectNodes","loadSubtree","initTree","selectedNodesUnderParent","getSelectedNodesUnder","urlInfoParam","loadFromUrl"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tree.jquery.debug.js","sources":["src/version.ts","src/node.ts","src/dragAndDropHandler.ts","src/util.ts","src/elementsRenderer.ts","src/dataLoader.ts","src/keyHandler.ts","src/simple.widget.ts","src/mouse.widget.ts","src/saveStateHandler.ts","src/scrollHandler.ts","src/selectNodeHandler.ts","src/nodeElement.ts","src/tree.jquery.ts"],"sourcesContent":["const version = \"1.6.2\";\n\nexport default version;\n","interface NodeRecordWithChildren extends NodeRecord {\n children: NodeData[];\n}\n\nexport enum Position {\n Before = 1,\n After,\n Inside,\n None,\n}\n\nconst positionNames: Record<string, Position> = {\n before: Position.Before,\n after: Position.After,\n inside: Position.Inside,\n none: Position.None,\n};\n\ntype IterateCallback = (node: Node, level: number) => boolean;\n\nexport const getPositionName = (position: Position): string => {\n for (const name in positionNames) {\n if (Object.prototype.hasOwnProperty.call(positionNames, name)) {\n if (positionNames[name] === position) {\n return name;\n }\n }\n }\n\n return \"\";\n};\n\nexport const getPosition = (name: string): Position | undefined =>\n positionNames[name];\n\nconst isNodeRecordWithChildren = (\n data: NodeData\n): data is NodeRecordWithChildren =>\n typeof data === \"object\" &&\n \"children\" in data &&\n data[\"children\"] instanceof Array;\n\nexport class Node implements INode {\n public id?: NodeId;\n public name: string;\n public children: Node[];\n public parent: Node | null;\n public idMapping: Map<NodeId, Node>;\n public tree?: Node;\n public nodeClass?: typeof Node;\n public load_on_demand: boolean;\n public is_open: boolean;\n public element: HTMLElement;\n public is_loading: boolean;\n public isEmptyFolder: boolean;\n\n [key: string]: unknown;\n\n constructor(o: NodeData | null = null, isRoot = false, nodeClass = Node) {\n this.name = \"\";\n this.isEmptyFolder = false;\n this.load_on_demand = false;\n\n this.setData(o);\n\n this.children = [];\n this.parent = null;\n\n if (isRoot) {\n this.idMapping = new Map<NodeId, Node>();\n this.tree = this;\n this.nodeClass = nodeClass;\n }\n }\n\n /*\n Set the data of this node.\n\n setData(string): set the name of the node\n setdata(object): set attributes of the node\n\n Examples:\n setdata('node1')\n\n setData({ name: 'node1', id: 1});\n\n setData({ name: 'node2', id: 2, color: 'green'});\n\n * This is an internal function; it is not in the docs\n * Does not remove existing node values\n */\n public setData(o: NodeData | null): void {\n if (!o) {\n return;\n } else if (typeof o === \"string\") {\n this.name = o;\n } else if (typeof o === \"object\") {\n for (const key in o) {\n if (Object.prototype.hasOwnProperty.call(o, key)) {\n const value = o[key];\n\n if (key === \"label\" || key === \"name\") {\n // You can use the 'label' key instead of 'name'; this is a legacy feature\n if (typeof value === \"string\") {\n this.name = value;\n }\n } else if (key !== \"children\" && key !== \"parent\") {\n // You can't update the children or the parent using this function\n this[key] = value;\n }\n }\n }\n }\n }\n\n /*\n Create tree from data.\n\n Structure of data is:\n [\n {\n name: 'node1',\n children: [\n { name: 'child1' },\n { name: 'child2' }\n ]\n },\n {\n name: 'node2'\n }\n ]\n */\n public loadFromData(data: NodeData[]): Node {\n this.removeChildren();\n\n for (const o of data) {\n const node = this.createNode(o);\n this.addChild(node);\n\n if (isNodeRecordWithChildren(o)) {\n if (o.children.length === 0) {\n node.isEmptyFolder = true;\n } else {\n node.loadFromData(o.children);\n }\n }\n }\n\n return this;\n }\n\n /*\n Add child.\n\n tree.addChild(\n new Node('child1')\n );\n */\n public addChild(node: Node): void {\n this.children.push(node);\n node.setParent(this);\n }\n\n /*\n Add child at position. Index starts at 0.\n\n tree.addChildAtPosition(\n new Node('abc'),\n 1\n );\n */\n public addChildAtPosition(node: Node, index: number): void {\n this.children.splice(index, 0, node);\n node.setParent(this);\n }\n\n /*\n Remove child. This also removes the children of the node.\n\n tree.removeChild(tree.children[0]);\n */\n public removeChild(node: Node): void {\n // remove children from the index\n node.removeChildren();\n\n this.doRemoveChild(node);\n }\n\n /*\n Get child index.\n\n var index = getChildIndex(node);\n */\n public getChildIndex(node: Node): number {\n return this.children.indexOf(node);\n }\n\n /*\n Does the tree have children?\n\n if (tree.hasChildren()) {\n //\n }\n */\n public hasChildren(): boolean {\n return this.children.length !== 0;\n }\n\n public isFolder(): boolean {\n return this.hasChildren() || this.load_on_demand;\n }\n\n /*\n Iterate over all the nodes in the tree.\n\n Calls callback with (node, level).\n\n The callback must return true to continue the iteration on current node.\n\n tree.iterate(\n function(node, level) {\n console.log(node.name);\n\n // stop iteration after level 2\n return (level <= 2);\n }\n );\n\n */\n public iterate(callback: IterateCallback): void {\n const _iterate = (node: Node, level: number): void => {\n if (node.children) {\n for (const child of node.children) {\n const result = callback(child, level);\n\n if (result && child.hasChildren()) {\n _iterate(child, level + 1);\n }\n }\n }\n };\n\n _iterate(this, 0);\n }\n\n /*\n Move node relative to another node.\n\n Argument position: Position.BEFORE, Position.AFTER or Position.Inside\n\n // move node1 after node2\n tree.moveNode(node1, node2, Position.AFTER);\n */\n public moveNode(\n movedNode: Node,\n targetNode: Node,\n position: Position\n ): boolean {\n if (!movedNode.parent || movedNode.isParentOf(targetNode)) {\n // - Node is parent of target node\n // - Or, parent is empty\n return false;\n } else {\n movedNode.parent.doRemoveChild(movedNode);\n\n switch (position) {\n case Position.After: {\n if (targetNode.parent) {\n targetNode.parent.addChildAtPosition(\n movedNode,\n targetNode.parent.getChildIndex(targetNode) + 1\n );\n return true;\n }\n return false;\n }\n\n case Position.Before: {\n if (targetNode.parent) {\n targetNode.parent.addChildAtPosition(\n movedNode,\n targetNode.parent.getChildIndex(targetNode)\n );\n return true;\n }\n return false;\n }\n\n case Position.Inside: {\n // move inside as first child\n targetNode.addChildAtPosition(movedNode, 0);\n return true;\n }\n\n default:\n return false;\n }\n }\n }\n\n /*\n Get the tree as data.\n */\n public getData(includeParent = false): NodeRecord[] {\n const getDataFromNodes = (nodes: Node[]): Record<string, unknown>[] => {\n return nodes.map((node) => {\n const tmpNode: Record<string, unknown> = {};\n\n for (const k in node) {\n if (\n [\n \"parent\",\n \"children\",\n \"element\",\n \"idMapping\",\n \"load_on_demand\",\n \"nodeClass\",\n \"tree\",\n \"isEmptyFolder\",\n ].indexOf(k) === -1 &&\n Object.prototype.hasOwnProperty.call(node, k)\n ) {\n const v = node[k];\n tmpNode[k] = v;\n }\n }\n\n if (node.hasChildren()) {\n tmpNode[\"children\"] = getDataFromNodes(node.children);\n }\n\n return tmpNode;\n });\n };\n\n if (includeParent) {\n return getDataFromNodes([this]);\n } else {\n return getDataFromNodes(this.children);\n }\n }\n\n public getNodeByName(name: string): Node | null {\n return this.getNodeByCallback((node: Node) => node.name === name);\n }\n\n public getNodeByNameMustExist(name: string): Node {\n const node = this.getNodeByCallback((n: Node) => n.name === name);\n\n if (!node) {\n throw `Node with name ${name} not found`;\n }\n\n return node;\n }\n\n public getNodeByCallback(callback: (node: Node) => boolean): Node | null {\n let result: Node | null = null;\n\n this.iterate((node: Node) => {\n if (result) {\n return false;\n } else if (callback(node)) {\n result = node;\n return false;\n } else {\n return true;\n }\n });\n\n return result;\n }\n\n public addAfter(nodeInfo: NodeData): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const node = this.createNode(nodeInfo);\n\n const childIndex = this.parent.getChildIndex(this);\n this.parent.addChildAtPosition(node, childIndex + 1);\n\n if (\n isNodeRecordWithChildren(nodeInfo) &&\n nodeInfo.children.length\n ) {\n node.loadFromData(nodeInfo.children);\n }\n\n return node;\n }\n }\n\n public addBefore(nodeInfo: NodeData): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const node = this.createNode(nodeInfo);\n\n const childIndex = this.parent.getChildIndex(this);\n this.parent.addChildAtPosition(node, childIndex);\n\n if (\n isNodeRecordWithChildren(nodeInfo) &&\n nodeInfo.children.length\n ) {\n node.loadFromData(nodeInfo.children);\n }\n\n return node;\n }\n }\n\n public addParent(nodeInfo: NodeData): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const newParent = this.createNode(nodeInfo);\n\n if (this.tree) {\n newParent.setParent(this.tree);\n }\n const originalParent = this.parent;\n\n for (const child of originalParent.children) {\n newParent.addChild(child);\n }\n\n originalParent.children = [];\n originalParent.addChild(newParent);\n return newParent;\n }\n }\n\n public remove(): void {\n if (this.parent) {\n this.parent.removeChild(this);\n this.parent = null;\n }\n }\n\n public append(nodeInfo: NodeData): Node {\n const node = this.createNode(nodeInfo);\n this.addChild(node);\n\n if (isNodeRecordWithChildren(nodeInfo) && nodeInfo.children.length) {\n node.loadFromData(nodeInfo.children);\n }\n\n return node;\n }\n\n public prepend(nodeInfo: NodeData): Node {\n const node = this.createNode(nodeInfo);\n this.addChildAtPosition(node, 0);\n\n if (isNodeRecordWithChildren(nodeInfo) && nodeInfo.children.length) {\n node.loadFromData(nodeInfo.children);\n }\n\n return node;\n }\n\n public isParentOf(node: Node): boolean {\n let parent = node.parent;\n\n while (parent) {\n if (parent === this) {\n return true;\n }\n\n parent = parent.parent;\n }\n\n return false;\n }\n\n public getLevel(): number {\n let level = 0;\n let node: Node = this; // eslint-disable-line @typescript-eslint/no-this-alias\n\n while (node.parent) {\n level += 1;\n node = node.parent;\n }\n\n return level;\n }\n\n public getNodeById(nodeId: NodeId): Node | null {\n return this.idMapping.get(nodeId) || null;\n }\n\n public addNodeToIndex(node: Node): void {\n if (node.id != null) {\n this.idMapping.set(node.id, node);\n }\n }\n\n public removeNodeFromIndex(node: Node): void {\n if (node.id != null) {\n this.idMapping.delete(node.id);\n }\n }\n\n public removeChildren(): void {\n this.iterate((child: Node) => {\n this.tree?.removeNodeFromIndex(child);\n return true;\n });\n\n this.children = [];\n }\n\n public getPreviousSibling(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const previousIndex = this.parent.getChildIndex(this) - 1;\n if (previousIndex >= 0) {\n return this.parent.children[previousIndex];\n } else {\n return null;\n }\n }\n }\n\n public getNextSibling(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const nextIndex = this.parent.getChildIndex(this) + 1;\n if (nextIndex < this.parent.children.length) {\n return this.parent.children[nextIndex];\n } else {\n return null;\n }\n }\n }\n\n public getNodesByProperty(key: string, value: unknown): Node[] {\n return this.filter((node: Node) => node[key] === value);\n }\n\n public filter(f: (node: Node) => boolean): Node[] {\n const result: Node[] = [];\n\n this.iterate((node: Node) => {\n if (f(node)) {\n result.push(node);\n }\n\n return true;\n });\n\n return result;\n }\n\n public getNextNode(includeChildren = true): Node | null {\n if (includeChildren && this.hasChildren() && this.is_open) {\n // First child\n return this.children[0];\n } else {\n if (!this.parent) {\n return null;\n } else {\n const nextSibling = this.getNextSibling();\n if (nextSibling) {\n // Next sibling\n return nextSibling;\n } else {\n // Next node of parent\n return this.parent.getNextNode(false);\n }\n }\n }\n }\n\n public getPreviousNode(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const previousSibling = this.getPreviousSibling();\n if (previousSibling) {\n if (\n !previousSibling.hasChildren() ||\n !previousSibling.is_open\n ) {\n // Previous sibling\n return previousSibling;\n } else {\n // Last child of previous sibling\n return previousSibling.getLastChild();\n }\n } else {\n return this.getParent();\n }\n }\n }\n\n public getParent(): Node | null {\n // Return parent except if it is the root node\n if (!this.parent) {\n return null;\n } else if (!this.parent.parent) {\n // Root node -> null\n return null;\n } else {\n return this.parent;\n }\n }\n\n public getLastChild(): Node | null {\n if (!this.hasChildren()) {\n return null;\n } else {\n const lastChild = this.children[this.children.length - 1];\n if (!(lastChild.hasChildren() && lastChild.is_open)) {\n return lastChild;\n } else {\n return lastChild.getLastChild();\n }\n }\n }\n\n // Init Node from data without making it the root of the tree\n public initFromData(data: NodeData): void {\n const addNode = (nodeData: NodeData): void => {\n this.setData(nodeData);\n\n if (\n isNodeRecordWithChildren(nodeData) &&\n nodeData.children.length\n ) {\n addChildren(nodeData.children);\n }\n };\n\n const addChildren = (childrenData: NodeData[]): void => {\n for (const child of childrenData) {\n const node = this.createNode();\n node.initFromData(child);\n this.addChild(node);\n }\n };\n\n addNode(data);\n }\n\n private setParent(parent: Node): void {\n this.parent = parent;\n this.tree = parent.tree;\n this.tree?.addNodeToIndex(this);\n }\n\n private doRemoveChild(node: Node): void {\n this.children.splice(this.getChildIndex(node), 1);\n this.tree?.removeNodeFromIndex(node);\n }\n\n private getNodeClass(): typeof Node {\n return this.nodeClass || this?.tree?.nodeClass || Node;\n }\n\n private createNode(nodeData?: NodeData): Node {\n const nodeClass = this.getNodeClass();\n return new nodeClass(nodeData);\n }\n}\n","import { getPositionName, Node, Position } from \"./node\";\nimport { DropHint, HitArea, PositionInfo } from \"./types\";\nimport { NodeElement } from \"./nodeElement\";\nimport { JqTreeWidget } from \"./tree.jquery\";\n\ninterface Dimensions {\n left: number;\n top: number;\n right: number;\n bottom: number;\n}\n\nexport class DragAndDropHandler {\n public hitAreas: HitArea[];\n public isDragging: boolean;\n public currentItem: NodeElement | null;\n public hoveredArea: HitArea | null;\n public positionInfo: PositionInfo | null;\n\n private treeWidget: JqTreeWidget;\n private dragElement: DragElement | null;\n private previousGhost: DropHint | null;\n private openFolderTimer: number | null;\n\n constructor(treeWidget: JqTreeWidget) {\n this.treeWidget = treeWidget;\n\n this.hoveredArea = null;\n this.hitAreas = [];\n this.isDragging = false;\n this.currentItem = null;\n this.positionInfo = null;\n }\n\n public mouseCapture(positionInfo: PositionInfo): boolean | null {\n const $element = jQuery(positionInfo.target);\n\n if (!this.mustCaptureElement($element)) {\n return null;\n }\n\n if (\n this.treeWidget.options.onIsMoveHandle &&\n !this.treeWidget.options.onIsMoveHandle($element)\n ) {\n return null;\n }\n\n let nodeElement = this.treeWidget._getNodeElement($element);\n\n if (nodeElement && this.treeWidget.options.onCanMove) {\n if (!this.treeWidget.options.onCanMove(nodeElement.node)) {\n nodeElement = null;\n }\n }\n\n this.currentItem = nodeElement;\n return this.currentItem != null;\n }\n\n public mouseStart(positionInfo: PositionInfo): boolean {\n if (\n !this.currentItem ||\n positionInfo.pageX === undefined ||\n positionInfo.pageY === undefined\n ) {\n return false;\n }\n\n this.refresh();\n\n const offset = jQuery(positionInfo.target).offset();\n const left = offset ? offset.left : 0;\n const top = offset ? offset.top : 0;\n\n const node = this.currentItem.node;\n\n this.dragElement = new DragElement(\n node.name,\n positionInfo.pageX - left,\n positionInfo.pageY - top,\n this.treeWidget.element,\n this.treeWidget.options.autoEscape ?? true\n );\n\n this.isDragging = true;\n this.positionInfo = positionInfo;\n this.currentItem.$element.addClass(\"jqtree-moving\");\n return true;\n }\n\n public mouseDrag(positionInfo: PositionInfo): boolean {\n if (\n !this.currentItem ||\n !this.dragElement ||\n positionInfo.pageX === undefined ||\n positionInfo.pageY === undefined\n ) {\n return false;\n }\n\n this.dragElement.move(positionInfo.pageX, positionInfo.pageY);\n this.positionInfo = positionInfo;\n\n const area = this.findHoveredArea(\n positionInfo.pageX,\n positionInfo.pageY\n );\n\n if (area && this.canMoveToArea(area)) {\n if (!area.node.isFolder()) {\n this.stopOpenFolderTimer();\n }\n\n if (this.hoveredArea !== area) {\n this.hoveredArea = area;\n\n // If this is a closed folder, start timer to open it\n if (this.mustOpenFolderTimer(area)) {\n this.startOpenFolderTimer(area.node);\n } else {\n this.stopOpenFolderTimer();\n }\n\n this.updateDropHint();\n }\n } else {\n this.removeDropHint();\n this.stopOpenFolderTimer();\n this.hoveredArea = area;\n }\n\n if (!area) {\n if (this.treeWidget.options.onDragMove) {\n this.treeWidget.options.onDragMove(\n this.currentItem.node,\n positionInfo.originalEvent\n );\n }\n }\n\n return true;\n }\n\n public mouseStop(positionInfo: PositionInfo): boolean {\n this.moveItem(positionInfo);\n this.clear();\n this.removeHover();\n this.removeDropHint();\n this.removeHitAreas();\n\n const currentItem = this.currentItem;\n\n if (this.currentItem) {\n this.currentItem.$element.removeClass(\"jqtree-moving\");\n this.currentItem = null;\n }\n\n this.isDragging = false;\n this.positionInfo = null;\n\n if (!this.hoveredArea && currentItem) {\n if (this.treeWidget.options.onDragStop) {\n this.treeWidget.options.onDragStop(\n currentItem.node,\n positionInfo.originalEvent\n );\n }\n }\n\n return false;\n }\n\n public refresh(): void {\n this.removeHitAreas();\n\n if (this.currentItem) {\n this.generateHitAreas();\n\n this.currentItem = this.treeWidget._getNodeElementForNode(\n this.currentItem.node\n );\n\n if (this.isDragging) {\n this.currentItem.$element.addClass(\"jqtree-moving\");\n }\n }\n }\n\n private generateHitAreas(): void {\n if (!this.currentItem) {\n this.hitAreas = [];\n } else {\n const hitAreasGenerator = new HitAreasGenerator(\n this.treeWidget.tree,\n this.currentItem.node,\n this.getTreeDimensions().bottom\n );\n this.hitAreas = hitAreasGenerator.generate();\n }\n }\n\n private mustCaptureElement($element: JQuery<HTMLElement>): boolean {\n return !$element.is(\"input,select,textarea\");\n }\n\n private canMoveToArea(area: HitArea): boolean {\n if (!this.treeWidget.options.onCanMoveTo) {\n return true;\n }\n\n if (!this.currentItem) {\n return false;\n }\n\n const positionName = getPositionName(area.position);\n\n return this.treeWidget.options.onCanMoveTo(\n this.currentItem.node,\n area.node,\n positionName\n );\n }\n\n private removeHitAreas(): void {\n this.hitAreas = [];\n }\n\n private clear(): void {\n if (this.dragElement) {\n this.dragElement.remove();\n this.dragElement = null;\n }\n }\n\n private removeDropHint(): void {\n if (this.previousGhost) {\n this.previousGhost.remove();\n }\n }\n\n private removeHover(): void {\n this.hoveredArea = null;\n }\n\n private findHoveredArea(x: number, y: number): HitArea | null {\n const dimensions = this.getTreeDimensions();\n\n if (\n x < dimensions.left ||\n y < dimensions.top ||\n x > dimensions.right ||\n y > dimensions.bottom\n ) {\n return null;\n }\n\n let low = 0;\n let high = this.hitAreas.length;\n while (low < high) {\n const mid = (low + high) >> 1;\n const area = this.hitAreas[mid];\n\n if (y < area.top) {\n high = mid;\n } else if (y > area.bottom) {\n low = mid + 1;\n } else {\n return area;\n }\n }\n\n return null;\n }\n\n private mustOpenFolderTimer(area: HitArea): boolean {\n const node = area.node;\n\n return (\n node.isFolder() &&\n !node.is_open &&\n area.position === Position.Inside\n );\n }\n\n private updateDropHint(): void {\n if (!this.hoveredArea) {\n return;\n }\n\n // remove previous drop hint\n this.removeDropHint();\n\n // add new drop hint\n const nodeElement = this.treeWidget._getNodeElementForNode(\n this.hoveredArea.node\n );\n this.previousGhost = nodeElement.addDropHint(this.hoveredArea.position);\n }\n\n private startOpenFolderTimer(folder: Node): void {\n const openFolder = (): void => {\n this.treeWidget._openNode(\n folder,\n this.treeWidget.options.slide,\n () => {\n this.refresh();\n this.updateDropHint();\n }\n );\n };\n\n this.stopOpenFolderTimer();\n\n const openFolderDelay = this.treeWidget.options.openFolderDelay;\n\n if (openFolderDelay !== false) {\n this.openFolderTimer = window.setTimeout(\n openFolder,\n openFolderDelay\n );\n }\n }\n\n private stopOpenFolderTimer(): void {\n if (this.openFolderTimer) {\n clearTimeout(this.openFolderTimer);\n this.openFolderTimer = null;\n }\n }\n\n private moveItem(positionInfo: PositionInfo): void {\n if (\n this.currentItem &&\n this.hoveredArea &&\n this.hoveredArea.position !== Position.None &&\n this.canMoveToArea(this.hoveredArea)\n ) {\n const movedNode = this.currentItem.node;\n const targetNode = this.hoveredArea.node;\n const position = this.hoveredArea.position;\n const previousParent = movedNode.parent;\n\n if (position === Position.Inside) {\n this.hoveredArea.node.is_open = true;\n }\n\n const doMove = (): void => {\n this.treeWidget.tree.moveNode(movedNode, targetNode, position);\n this.treeWidget.element.empty();\n this.treeWidget._refreshElements(null);\n };\n\n const event = this.treeWidget._triggerEvent(\"tree.move\", {\n move_info: {\n moved_node: movedNode,\n target_node: targetNode,\n position: getPositionName(position),\n previous_parent: previousParent,\n do_move: doMove,\n original_event: positionInfo.originalEvent,\n },\n });\n\n if (!event.isDefaultPrevented()) {\n doMove();\n }\n }\n }\n\n private getTreeDimensions(): Dimensions {\n // Return the dimensions of the tree. Add a margin to the bottom to allow\n // to drag-and-drop after the last element.\n const offset = this.treeWidget.element.offset();\n\n if (!offset) {\n return { left: 0, top: 0, right: 0, bottom: 0 };\n } else {\n const el = this.treeWidget.element;\n const width = el.width() || 0;\n const height = el.height() || 0;\n const left = offset.left + this.treeWidget._getScrollLeft();\n\n return {\n left,\n top: offset.top,\n right: left + width,\n bottom: offset.top + height + 16,\n };\n }\n }\n}\n\nabstract class VisibleNodeIterator {\n private tree: Node;\n\n constructor(tree: Node) {\n this.tree = tree;\n }\n\n protected iterate(): void {\n let isFirstNode = true;\n\n const _iterateNode = (node: Node, nextNode: Node | null): void => {\n let mustIterateInside =\n (node.is_open || !node.element) && node.hasChildren();\n\n let $element: JQuery<HTMLElement> | null = null;\n\n if (node.element) {\n $element = jQuery(node.element);\n\n if (!$element.is(\":visible\")) {\n return;\n }\n\n if (isFirstNode) {\n this.handleFirstNode(node);\n isFirstNode = false;\n }\n\n if (!node.hasChildren()) {\n this.handleNode(node, nextNode, $element);\n } else if (node.is_open) {\n if (!this.handleOpenFolder(node, $element)) {\n mustIterateInside = false;\n }\n } else {\n this.handleClosedFolder(node, nextNode, $element);\n }\n }\n\n if (mustIterateInside) {\n const childrenLength = node.children.length;\n node.children.forEach((_, i) => {\n if (i === childrenLength - 1) {\n _iterateNode(node.children[i], null);\n } else {\n _iterateNode(node.children[i], node.children[i + 1]);\n }\n });\n\n if (node.is_open && $element) {\n this.handleAfterOpenFolder(node, nextNode);\n }\n }\n };\n\n _iterateNode(this.tree, null);\n }\n\n protected abstract handleNode(\n node: Node,\n nextNode: Node | null,\n $element: JQuery\n ): void;\n\n /*\n override\n return\n - true: continue iterating\n - false: stop iterating\n */\n protected abstract handleOpenFolder(node: Node, $element: JQuery): boolean;\n\n protected abstract handleClosedFolder(\n node: Node,\n nextNode: Node | null,\n $element: JQuery\n ): void;\n\n protected abstract handleAfterOpenFolder(\n node: Node,\n nextNode: Node | null\n ): void;\n\n protected abstract handleFirstNode(node: Node): void;\n}\n\nexport class HitAreasGenerator extends VisibleNodeIterator {\n private currentNode: Node;\n private treeBottom: number;\n private positions: HitArea[];\n private lastTop: number;\n\n constructor(tree: Node, currentNode: Node, treeBottom: number) {\n super(tree);\n\n this.currentNode = currentNode;\n this.treeBottom = treeBottom;\n }\n\n public generate(): HitArea[] {\n this.positions = [];\n this.lastTop = 0;\n\n this.iterate();\n\n return this.generateHitAreas(this.positions);\n }\n\n protected generateHitAreas(positions: HitArea[]): HitArea[] {\n let previousTop = -1;\n let group = [];\n const hitAreas: HitArea[] = [];\n\n for (const position of positions) {\n if (position.top !== previousTop && group.length) {\n if (group.length) {\n this.generateHitAreasForGroup(\n hitAreas,\n group,\n previousTop,\n position.top\n );\n }\n\n previousTop = position.top;\n group = [];\n }\n\n group.push(position);\n }\n\n this.generateHitAreasForGroup(\n hitAreas,\n group,\n previousTop,\n this.treeBottom\n );\n\n return hitAreas;\n }\n\n protected handleOpenFolder(node: Node, $element: JQuery): boolean {\n if (node === this.currentNode) {\n // Cannot move inside current item\n // Stop iterating\n return false;\n }\n\n // Cannot move before current item\n if (node.children[0] !== this.currentNode) {\n this.addPosition(node, Position.Inside, this.getTop($element));\n }\n\n // Continue iterating\n return true;\n }\n\n protected handleClosedFolder(\n node: Node,\n nextNode: Node,\n $element: JQuery\n ): void {\n const top = this.getTop($element);\n\n if (node === this.currentNode) {\n // Cannot move after current item\n this.addPosition(node, Position.None, top);\n } else {\n this.addPosition(node, Position.Inside, top);\n\n // Cannot move before current item\n if (nextNode !== this.currentNode) {\n this.addPosition(node, Position.After, top);\n }\n }\n }\n\n protected handleFirstNode(node: Node): void {\n if (node !== this.currentNode) {\n this.addPosition(\n node,\n Position.Before,\n this.getTop(jQuery(node.element))\n );\n }\n }\n\n protected handleAfterOpenFolder(node: Node, nextNode: Node): void {\n if (node === this.currentNode || nextNode === this.currentNode) {\n // Cannot move before or after current item\n this.addPosition(node, Position.None, this.lastTop);\n } else {\n this.addPosition(node, Position.After, this.lastTop);\n }\n }\n\n protected handleNode(node: Node, nextNode: Node, $element: JQuery): void {\n const top = this.getTop($element);\n\n if (node === this.currentNode) {\n // Cannot move inside current item\n this.addPosition(node, Position.None, top);\n } else {\n this.addPosition(node, Position.Inside, top);\n }\n\n if (nextNode === this.currentNode || node === this.currentNode) {\n // Cannot move before or after current item\n this.addPosition(node, Position.None, top);\n } else {\n this.addPosition(node, Position.After, top);\n }\n }\n\n private getTop($element: JQuery<HTMLElement>): number {\n const offset = $element.offset();\n\n return offset ? offset.top : 0;\n }\n\n private addPosition(node: Node, position: number, top: number): void {\n const area = {\n top,\n bottom: 0,\n node,\n position,\n };\n\n this.positions.push(area);\n this.lastTop = top;\n }\n\n private generateHitAreasForGroup(\n hitAreas: HitArea[],\n positionsInGroup: HitArea[],\n top: number,\n bottom: number\n ): void {\n // limit positions in group\n const positionCount = Math.min(positionsInGroup.length, 4);\n\n const areaHeight = Math.round((bottom - top) / positionCount);\n let areaTop = top;\n\n let i = 0;\n while (i < positionCount) {\n const position = positionsInGroup[i];\n\n hitAreas.push({\n top: areaTop,\n bottom: areaTop + areaHeight,\n node: position.node,\n position: position.position,\n });\n\n areaTop += areaHeight;\n i += 1;\n }\n }\n}\n\nclass DragElement {\n private offsetX: number;\n private offsetY: number;\n private $element: JQuery;\n\n constructor(\n nodeName: string,\n offsetX: number,\n offsetY: number,\n $tree: JQuery,\n autoEscape: boolean\n ) {\n this.offsetX = offsetX;\n this.offsetY = offsetY;\n\n this.$element = jQuery(\"<span>\").addClass(\n \"jqtree-title jqtree-dragging\"\n );\n\n if (autoEscape) {\n this.$element.text(nodeName);\n } else {\n this.$element.html(nodeName);\n }\n\n this.$element.css(\"position\", \"absolute\");\n $tree.append(this.$element);\n }\n\n public move(pageX: number, pageY: number): void {\n this.$element.offset({\n left: pageX - this.offsetX,\n top: pageY - this.offsetY,\n });\n }\n\n public remove(): void {\n this.$element.remove();\n }\n}\n","export const isInt = (n: unknown): boolean =>\n typeof n === \"number\" && n % 1 === 0;\n\nexport const isFunction = (v: unknown): boolean => typeof v === \"function\";\n\nexport const getBoolString = (value: unknown): string =>\n value ? \"true\" : \"false\";\n","import { getBoolString } from \"./util\";\nimport { Node } from \"./node\";\nimport { JqTreeWidget } from \"./tree.jquery\";\n\ntype IconElement = Text | Element;\n\nexport default class ElementsRenderer {\n public openedIconElement: IconElement;\n public closedIconElement: IconElement;\n private treeWidget: JqTreeWidget;\n\n constructor(treeWidget: JqTreeWidget) {\n this.treeWidget = treeWidget;\n\n this.openedIconElement = this.createButtonElement(\n treeWidget.options.openedIcon || \"+\"\n );\n this.closedIconElement = this.createButtonElement(\n treeWidget.options.closedIcon || \"-\"\n );\n }\n\n public render(fromNode: Node | null): void {\n if (fromNode && fromNode.parent) {\n this.renderFromNode(fromNode);\n } else {\n this.renderFromRoot();\n }\n }\n\n public renderFromRoot(): void {\n const $element = this.treeWidget.element;\n $element.empty();\n\n this.createDomElements(\n $element[0],\n this.treeWidget.tree.children,\n true,\n 1\n );\n }\n\n public renderFromNode(node: Node): void {\n // remember current li\n const $previousLi = jQuery(node.element);\n\n // create element\n const li = this.createLi(node, node.getLevel());\n this.attachNodeData(node, li);\n\n // add element to dom\n $previousLi.after(li);\n\n // remove previous li\n $previousLi.remove();\n\n // create children\n if (node.children) {\n this.createDomElements(\n li,\n node.children,\n false,\n node.getLevel() + 1\n );\n }\n }\n\n private createDomElements(\n element: Element,\n children: Node[],\n isRootNode: boolean,\n level: number\n ): void {\n const ul = this.createUl(isRootNode);\n element.appendChild(ul);\n\n for (const child of children) {\n const li = this.createLi(child, level);\n ul.appendChild(li);\n\n this.attachNodeData(child, li);\n\n if (child.hasChildren()) {\n this.createDomElements(li, child.children, false, level + 1);\n }\n }\n }\n\n private attachNodeData(node: Node, li: HTMLElement): void {\n node.element = li;\n jQuery(li).data(\"node\", node);\n }\n\n private createUl(isRootNode: boolean): HTMLUListElement {\n let classString;\n let role;\n\n if (!isRootNode) {\n classString = \"\";\n role = \"group\";\n } else {\n classString = \"jqtree-tree\";\n role = \"tree\";\n\n if (this.treeWidget.options.rtl) {\n classString += \" jqtree-rtl\";\n }\n }\n\n if (this.treeWidget.options.dragAndDrop) {\n classString += \" jqtree-dnd\";\n }\n\n const ul = document.createElement(\"ul\");\n ul.className = `jqtree_common ${classString}`;\n\n ul.setAttribute(\"role\", role);\n\n return ul;\n }\n\n private createLi(node: Node, level: number): HTMLLIElement {\n const isSelected = Boolean(\n this.treeWidget.selectNodeHandler.isNodeSelected(node)\n );\n\n const mustShowFolder =\n node.isFolder() ||\n (node.isEmptyFolder && this.treeWidget.options.showEmptyFolder);\n\n const li = mustShowFolder\n ? this.createFolderLi(node, level, isSelected)\n : this.createNodeLi(node, level, isSelected);\n\n if (this.treeWidget.options.onCreateLi) {\n this.treeWidget.options.onCreateLi(node, jQuery(li), isSelected);\n }\n\n return li;\n }\n\n private createFolderLi(\n node: Node,\n level: number,\n isSelected: boolean\n ): HTMLLIElement {\n const buttonClasses = this.getButtonClasses(node);\n const folderClasses = this.getFolderClasses(node, isSelected);\n\n const iconElement = node.is_open\n ? this.openedIconElement\n : this.closedIconElement;\n\n // li\n const li = document.createElement(\"li\");\n li.className = `jqtree_common ${folderClasses}`;\n li.setAttribute(\"role\", \"presentation\");\n\n // div\n const div = document.createElement(\"div\");\n div.className = \"jqtree-element jqtree_common\";\n div.setAttribute(\"role\", \"presentation\");\n\n li.appendChild(div);\n\n // button link\n const buttonLink = document.createElement(\"a\");\n buttonLink.className = buttonClasses;\n\n buttonLink.appendChild(iconElement.cloneNode(true));\n\n buttonLink.setAttribute(\"role\", \"presentation\");\n buttonLink.setAttribute(\"aria-hidden\", \"true\");\n\n if (this.treeWidget.options.buttonLeft) {\n div.appendChild(buttonLink);\n }\n\n // title span\n div.appendChild(\n this.createTitleSpan(\n node.name,\n level,\n isSelected,\n node.is_open,\n true\n )\n );\n\n if (!this.treeWidget.options.buttonLeft) {\n div.appendChild(buttonLink);\n }\n\n return li;\n }\n\n private createNodeLi(\n node: Node,\n level: number,\n isSelected: boolean\n ): HTMLLIElement {\n const liClasses = [\"jqtree_common\"];\n\n if (isSelected) {\n liClasses.push(\"jqtree-selected\");\n }\n\n const classString = liClasses.join(\" \");\n\n // li\n const li = document.createElement(\"li\");\n li.className = classString;\n li.setAttribute(\"role\", \"presentation\");\n\n // div\n const div = document.createElement(\"div\");\n div.className = \"jqtree-element jqtree_common\";\n div.setAttribute(\"role\", \"presentation\");\n\n li.appendChild(div);\n\n // title span\n div.appendChild(\n this.createTitleSpan(\n node.name,\n level,\n isSelected,\n node.is_open,\n false\n )\n );\n\n return li;\n }\n\n private createTitleSpan(\n nodeName: string,\n level: number,\n isSelected: boolean,\n isOpen: boolean,\n isFolder: boolean\n ): HTMLSpanElement {\n const titleSpan = document.createElement(\"span\");\n\n let classes = \"jqtree-title jqtree_common\";\n\n if (isFolder) {\n classes += \" jqtree-title-folder\";\n }\n\n classes += ` jqtree-title-button-${\n this.treeWidget.options.buttonLeft ? \"left\" : \"right\"\n }`;\n\n titleSpan.className = classes;\n\n titleSpan.setAttribute(\"role\", \"treeitem\");\n titleSpan.setAttribute(\"aria-level\", `${level}`);\n\n titleSpan.setAttribute(\"aria-selected\", getBoolString(isSelected));\n titleSpan.setAttribute(\"aria-expanded\", getBoolString(isOpen));\n\n if (isSelected) {\n const tabIndex = this.treeWidget.options.tabIndex;\n\n if (tabIndex !== undefined) {\n titleSpan.setAttribute(\"tabindex\", `${tabIndex}`);\n }\n }\n\n if (this.treeWidget.options.autoEscape) {\n titleSpan.textContent = nodeName;\n } else {\n titleSpan.innerHTML = nodeName;\n }\n\n return titleSpan;\n }\n\n private getButtonClasses(node: Node): string {\n const classes = [\"jqtree-toggler\", \"jqtree_common\"];\n\n if (!node.is_open) {\n classes.push(\"jqtree-closed\");\n }\n\n if (this.treeWidget.options.buttonLeft) {\n classes.push(\"jqtree-toggler-left\");\n } else {\n classes.push(\"jqtree-toggler-right\");\n }\n\n return classes.join(\" \");\n }\n\n private getFolderClasses(node: Node, isSelected: boolean): string {\n const classes = [\"jqtree-folder\"];\n\n if (!node.is_open) {\n classes.push(\"jqtree-closed\");\n }\n\n if (isSelected) {\n classes.push(\"jqtree-selected\");\n }\n\n if (node.is_loading) {\n classes.push(\"jqtree-loading\");\n }\n\n return classes.join(\" \");\n }\n\n private createButtonElement(value: string | Element): IconElement {\n if (typeof value === \"string\") {\n // convert value to html\n const div = document.createElement(\"div\");\n div.innerHTML = value;\n\n return document.createTextNode(div.innerHTML);\n } else {\n return jQuery(value)[0];\n }\n }\n}\n","import { Node } from \"./node\";\nimport { JqTreeWidget } from \"./tree.jquery\";\n\nexport type HandleFinishedLoading = () => void;\n\nexport default class DataLoader {\n private treeWidget: JqTreeWidget;\n\n constructor(treeWidget: JqTreeWidget) {\n this.treeWidget = treeWidget;\n }\n\n public loadFromUrl(\n urlInfo: string | JQuery.AjaxSettings | null,\n parentNode: Node | null,\n onFinished: HandleFinishedLoading | null\n ): void {\n if (!urlInfo) {\n return;\n }\n\n const $el = this.getDomElement(parentNode);\n this.addLoadingClass($el);\n this.notifyLoading(true, parentNode, $el);\n\n const stopLoading = (): void => {\n this.removeLoadingClass($el);\n this.notifyLoading(false, parentNode, $el);\n };\n\n const handleSuccess = (data: string | NodeData[]): void => {\n stopLoading();\n this.treeWidget.loadData(this.parseData(data), parentNode);\n\n if (onFinished && typeof onFinished === \"function\") {\n onFinished();\n }\n };\n\n const handleError = (jqXHR: JQuery.jqXHR): void => {\n stopLoading();\n\n if (this.treeWidget.options.onLoadFailed) {\n this.treeWidget.options.onLoadFailed(jqXHR);\n }\n };\n\n this.submitRequest(urlInfo, handleSuccess, handleError);\n }\n\n private addLoadingClass($el: JQuery<HTMLElement>): void {\n if ($el) {\n $el.addClass(\"jqtree-loading\");\n }\n }\n\n private removeLoadingClass($el: JQuery<HTMLElement>): void {\n if ($el) {\n $el.removeClass(\"jqtree-loading\");\n }\n }\n\n private getDomElement(parentNode: Node | null): JQuery<HTMLElement> {\n if (parentNode) {\n return jQuery(parentNode.element);\n } else {\n return this.treeWidget.element;\n }\n }\n\n private notifyLoading(\n isLoading: boolean,\n node: Node | null,\n $el: JQuery\n ): void {\n if (this.treeWidget.options.onLoading) {\n this.treeWidget.options.onLoading(isLoading, node, $el);\n }\n\n this.treeWidget._triggerEvent(\"tree.loading_data\", {\n isLoading,\n node,\n $el,\n });\n }\n\n private submitRequest(\n urlInfoInput: string | JQuery.AjaxSettings,\n handleSuccess: JQuery.Ajax.SuccessCallback<any>,\n handleError: JQuery.Ajax.ErrorCallback<any>\n ): void {\n const urlInfo =\n typeof urlInfoInput === \"string\"\n ? { url: urlInfoInput }\n : urlInfoInput;\n\n const ajaxSettings: JQuery.AjaxSettings = {\n method: \"GET\",\n cache: false,\n dataType: \"json\",\n success: handleSuccess,\n error: handleError,\n ...urlInfo,\n };\n\n ajaxSettings.method = ajaxSettings.method?.toUpperCase() || \"GET\";\n\n void jQuery.ajax(ajaxSettings);\n }\n\n private parseData(data: string | NodeData[]): NodeData[] {\n const { dataFilter } = this.treeWidget.options;\n\n const getParsedData = () => {\n if (typeof data === \"string\") {\n return JSON.parse(data) as NodeData[];\n } else {\n return data;\n }\n };\n\n const parsedData = getParsedData();\n\n if (dataFilter) {\n return dataFilter(parsedData);\n } else {\n return parsedData;\n }\n }\n}\n","import { Node } from \"./node\";\nimport { JqTreeWidget } from \"./tree.jquery\";\n\nexport default class KeyHandler {\n private static LEFT = 37;\n private static UP = 38;\n private static RIGHT = 39;\n private static DOWN = 40;\n\n private treeWidget: JqTreeWidget;\n\n constructor(treeWidget: JqTreeWidget) {\n this.treeWidget = treeWidget;\n\n if (treeWidget.options.keyboardSupport) {\n jQuery(document).on(\"keydown.jqtree\", this.handleKeyDown);\n }\n }\n\n public deinit(): void {\n jQuery(document).off(\"keydown.jqtree\");\n }\n\n public moveDown(selectedNode: Node): boolean {\n return this.selectNode(selectedNode.getNextNode());\n }\n\n public moveUp(selectedNode: Node): boolean {\n return this.selectNode(selectedNode.getPreviousNode());\n }\n\n public moveRight(selectedNode: Node): boolean {\n if (!selectedNode.isFolder()) {\n return true;\n } else {\n // folder node\n if (selectedNode.is_open) {\n // Right moves to the first child of an open node\n return this.selectNode(selectedNode.getNextNode());\n } else {\n // Right expands a closed node\n this.treeWidget.openNode(selectedNode);\n return false;\n }\n }\n }\n\n public moveLeft(selectedNode: Node): boolean {\n if (selectedNode.isFolder() && selectedNode.is_open) {\n // Left on an open node closes the node\n this.treeWidget.closeNode(selectedNode);\n return false;\n } else {\n // Left on a closed or end node moves focus to the node's parent\n return this.selectNode(selectedNode.getParent());\n }\n }\n\n public selectNode(node: Node | null): boolean {\n if (!node) {\n return true;\n } else {\n this.treeWidget.selectNode(node);\n\n if (\n !this.treeWidget.scrollHandler.isScrolledIntoView(\n jQuery(node.element).find(\".jqtree-element\")\n )\n ) {\n this.treeWidget.scrollToNode(node);\n }\n\n return false;\n }\n }\n\n private handleKeyDown = (e: JQuery.Event): boolean => {\n if (!this.canHandleKeyboard()) {\n return true;\n }\n\n const selectedNode = this.treeWidget.getSelectedNode();\n if (!selectedNode) {\n return true;\n }\n\n const key = e.which;\n\n switch (key) {\n case KeyHandler.DOWN:\n return this.moveDown(selectedNode);\n\n case KeyHandler.UP:\n return this.moveUp(selectedNode);\n\n case KeyHandler.RIGHT:\n return this.moveRight(selectedNode);\n\n case KeyHandler.LEFT:\n return this.moveLeft(selectedNode);\n\n default:\n return true;\n }\n };\n\n private canHandleKeyboard(): boolean {\n return (\n (this.treeWidget.options.keyboardSupport || false) &&\n this.treeWidget.selectNodeHandler.isFocusOnTree()\n );\n }\n}\n","const register = (widgetClass: unknown, widgetName: string): void => {\n const getDataKey = (): string => `simple_widget_${widgetName}`;\n\n const getWidgetData = (\n el: HTMLElement,\n dataKey: string\n ): SimpleWidget<unknown> | null => {\n const widget = jQuery.data(el, dataKey) as unknown;\n\n if (widget && widget instanceof SimpleWidget) {\n return widget;\n } else {\n return null;\n }\n };\n\n const createWidget = ($el: JQuery, options: unknown): JQuery => {\n const dataKey = getDataKey();\n\n for (const el of $el.get()) {\n const existingWidget = getWidgetData(el, dataKey);\n\n if (!existingWidget) {\n const simpleWidgetClass = widgetClass as typeof SimpleWidget;\n const widget = new simpleWidgetClass(el, options);\n\n if (!jQuery.data(el, dataKey)) {\n jQuery.data(el, dataKey, widget);\n }\n\n // Call init after setting data, so we can call methods\n widget.init();\n }\n }\n\n return $el;\n };\n\n const destroyWidget = ($el: JQuery): void => {\n const dataKey = getDataKey();\n\n for (const el of $el.get()) {\n const widget = getWidgetData(el, dataKey);\n\n if (widget) {\n widget.destroy();\n }\n\n jQuery.removeData(el, dataKey);\n }\n };\n\n const callFunction = (\n $el: JQuery,\n functionName: string,\n args: unknown[]\n ): unknown => {\n let result = null;\n\n for (const el of $el.get()) {\n const widget = jQuery.data(el, getDataKey()) as unknown;\n\n if (widget && widget instanceof SimpleWidget) {\n const simpleWidget = widget as SimpleWidget<unknown>;\n const widgetFunction = simpleWidget[functionName];\n\n if (widgetFunction && typeof widgetFunction === \"function\") {\n result = widgetFunction.apply(widget, args) as unknown;\n }\n }\n }\n\n return result;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n (jQuery.fn as any)[widgetName] = function (\n this: JQuery,\n argument1: unknown,\n ...args: unknown[]\n ) {\n if (!argument1) {\n return createWidget(this, null);\n } else if (typeof argument1 === \"object\") {\n const options = argument1 as unknown;\n return createWidget(this, options);\n } else if (typeof argument1 === \"string\" && argument1[0] !== \"_\") {\n const functionName = argument1;\n\n if (functionName === \"destroy\") {\n return destroyWidget(this);\n } else if (functionName === \"get_widget_class\") {\n return widgetClass;\n } else {\n return callFunction(this, functionName, args);\n }\n }\n };\n};\n\nexport default class SimpleWidget<WidgetOptions> {\n public static register(widgetClass: unknown, widgetName: string): void {\n register(widgetClass, widgetName);\n }\n\n [key: string]: unknown;\n\n protected static defaults: unknown = {};\n\n public options: WidgetOptions;\n\n public $el: JQuery<HTMLElement>;\n\n constructor(el: HTMLElement, options: WidgetOptions) {\n this.$el = jQuery(el);\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const defaults = (this.constructor as any)[\"defaults\"] as WidgetOptions;\n this.options = { ...defaults, ...options };\n }\n\n public destroy(): void {\n this.deinit();\n }\n\n public init(): void {\n //\n }\n\n public deinit(): void {\n //\n }\n}\n","/*\nThis widget does the same a the mouse widget in jqueryui.\n*/\nimport SimpleWidget from \"./simple.widget\";\nimport { PositionInfo } from \"./types\";\n\nconst getPositionInfoFromMouseEvent = (e: MouseEvent): PositionInfo => ({\n pageX: e.pageX,\n pageY: e.pageY,\n target: e.target as HTMLElement,\n originalEvent: e,\n});\n\nconst getPositionInfoFromTouch = (\n touch: Touch,\n e: TouchEvent\n): PositionInfo => ({\n pageX: touch.pageX,\n pageY: touch.pageY,\n target: touch.target as HTMLElement,\n originalEvent: e,\n});\n\nabstract class MouseWidget<WidgetOptions> extends SimpleWidget<WidgetOptions> {\n protected isMouseStarted: boolean;\n protected mouseDownInfo: PositionInfo | null;\n private mouseDelayTimer: number | null;\n private isMouseDelayMet: boolean;\n\n public init(): void {\n const element = this.$el.get(0);\n\n if (element) {\n element.addEventListener(\"mousedown\", this.mouseDown, {\n passive: false,\n });\n element.addEventListener(\"touchstart\", this.touchStart, {\n passive: false,\n });\n }\n\n this.isMouseStarted = false;\n this.mouseDelayTimer = null;\n this.isMouseDelayMet = false;\n this.mouseDownInfo = null;\n }\n\n public deinit(): void {\n const el = this.$el.get(0);\n\n if (el) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n (el as any).removeEventListener(\"mousedown\", this.mouseDown, {\n passive: false,\n });\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n (el as any).removeEventListener(\"touchstart\", this.touchStart, {\n passive: false,\n });\n }\n\n this.removeMouseMoveEventListeners();\n }\n\n protected abstract mouseCapture(positionInfo: PositionInfo): boolean | null;\n\n protected abstract mouseStart(positionInfo: PositionInfo): boolean;\n\n protected abstract mouseDrag(positionInfo: PositionInfo): void;\n\n protected abstract mouseStop(positionInfo: PositionInfo): void;\n\n protected abstract getMouseDelay(): number;\n\n private mouseDown = (e: MouseEvent): void => {\n // Left mouse button?\n if (e.button !== 0) {\n return;\n }\n\n const result = this.handleMouseDown(getPositionInfoFromMouseEvent(e));\n\n if (result && e.cancelable) {\n e.preventDefault();\n }\n };\n\n private handleMouseDown(positionInfo: PositionInfo): boolean {\n // We may have missed mouseup (out of window)\n if (this.isMouseStarted) {\n this.handleMouseUp(positionInfo);\n }\n\n this.mouseDownInfo = positionInfo;\n\n if (!this.mouseCapture(positionInfo)) {\n return false;\n }\n\n this.handleStartMouse();\n\n return true;\n }\n\n private handleStartMouse(): void {\n document.addEventListener(\"mousemove\", this.mouseMove, {\n passive: false,\n });\n document.addEventListener(\"touchmove\", this.touchMove, {\n passive: false,\n });\n document.addEventListener(\"mouseup\", this.mouseUp, { passive: false });\n document.addEventListener(\"touchend\", this.touchEnd, {\n passive: false,\n });\n\n const mouseDelay = this.getMouseDelay();\n\n if (mouseDelay) {\n this.startMouseDelayTimer(mouseDelay);\n } else {\n this.isMouseDelayMet = true;\n }\n }\n\n private startMouseDelayTimer(mouseDelay: number): void {\n if (this.mouseDelayTimer) {\n clearTimeout(this.mouseDelayTimer);\n }\n\n this.mouseDelayTimer = window.setTimeout(() => {\n if (this.mouseDownInfo) {\n this.isMouseDelayMet = true;\n }\n }, mouseDelay);\n\n this.isMouseDelayMet = false;\n }\n\n private mouseMove = (e: MouseEvent): void => {\n this.handleMouseMove(e, getPositionInfoFromMouseEvent(e));\n };\n\n private handleMouseMove(\n e: MouseEvent | TouchEvent,\n positionInfo: PositionInfo\n ): void {\n if (this.isMouseStarted) {\n this.mouseDrag(positionInfo);\n\n if (e.cancelable) {\n e.preventDefault();\n }\n return;\n }\n\n if (!this.isMouseDelayMet) {\n return;\n }\n\n if (this.mouseDownInfo) {\n this.isMouseStarted = this.mouseStart(this.mouseDownInfo) !== false;\n }\n\n if (this.isMouseStarted) {\n this.mouseDrag(positionInfo);\n\n if (e.cancelable) {\n e.preventDefault();\n }\n } else {\n this.handleMouseUp(positionInfo);\n }\n }\n\n private mouseUp = (e: MouseEvent): void => {\n this.handleMouseUp(getPositionInfoFromMouseEvent(e));\n };\n\n private handleMouseUp(positionInfo: PositionInfo): void {\n this.removeMouseMoveEventListeners();\n this.isMouseDelayMet = false;\n this.mouseDownInfo = null;\n\n if (this.isMouseStarted) {\n this.isMouseStarted = false;\n this.mouseStop(positionInfo);\n }\n }\n\n private removeMouseMoveEventListeners() {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n (document as any).removeEventListener(\"mousemove\", this.mouseMove, {\n passive: false,\n });\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n (document as any).removeEventListener(\"touchmove\", this.touchMove, {\n passive: false,\n });\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n (document as any).removeEventListener(\"mouseup\", this.mouseUp, {\n passive: false,\n });\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n (document as any).removeEventListener(\"touchend\", this.touchEnd, {\n passive: false,\n });\n }\n\n private touchStart = (e: TouchEvent): void => {\n if (!e) {\n return;\n }\n\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.changedTouches[0];\n\n this.handleMouseDown(getPositionInfoFromTouch(touch, e));\n };\n\n private touchMove = (e: TouchEvent): void => {\n if (!e) {\n return;\n }\n\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.changedTouches[0];\n\n this.handleMouseMove(e, getPositionInfoFromTouch(touch, e));\n };\n\n private touchEnd = (e: TouchEvent): void => {\n if (!e) {\n return;\n }\n\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.changedTouches[0];\n\n this.handleMouseUp(getPositionInfoFromTouch(touch, e));\n };\n}\n\nexport default MouseWidget;\n","import { isInt } from \"./util\";\nimport { JqTreeWidget } from \"./tree.jquery\";\nimport { Node } from \"./node\";\n\nexport interface SavedState {\n open_nodes: NodeId[];\n selected_node: NodeId[];\n}\n\nexport default class SaveStateHandler {\n private treeWidget: JqTreeWidget;\n private _supportsLocalStorage: boolean | null;\n\n constructor(treeWidget: JqTreeWidget) {\n this.treeWidget = treeWidget;\n }\n\n public saveState(): void {\n const state = JSON.stringify(this.getState());\n\n if (this.treeWidget.options.onSetStateFromStorage) {\n this.treeWidget.options.onSetStateFromStorage(state);\n } else if (this.supportsLocalStorage()) {\n localStorage.setItem(this.getKeyName(), state);\n }\n }\n\n public getStateFromStorage(): SavedState | null {\n const jsonData = this.loadFromStorage();\n\n if (jsonData) {\n return this.parseState(jsonData) as unknown as SavedState;\n } else {\n return null;\n }\n }\n\n public getState(): SavedState {\n const getOpenNodeIds = (): NodeId[] => {\n const openNodes: NodeId[] = [];\n\n this.treeWidget.tree.iterate((node: Node) => {\n if (node.is_open && node.id && node.hasChildren()) {\n openNodes.push(node.id);\n }\n return true;\n });\n\n return openNodes;\n };\n\n const getSelectedNodeIds = (): NodeId[] => {\n const selectedNodeIds: NodeId[] = [];\n\n this.treeWidget.getSelectedNodes().forEach((node) => {\n if (node.id != null) {\n selectedNodeIds.push(node.id);\n }\n });\n\n return selectedNodeIds;\n };\n\n return {\n open_nodes: getOpenNodeIds(),\n selected_node: getSelectedNodeIds(),\n };\n }\n\n /*\n Set initial state\n Don't handle nodes that are loaded on demand\n\n result: must load on demand\n */\n public setInitialState(state: SavedState): boolean {\n if (!state) {\n return false;\n } else {\n let mustLoadOnDemand = false;\n\n if (state.open_nodes) {\n mustLoadOnDemand = this.openInitialNodes(state.open_nodes);\n }\n\n if (state.selected_node) {\n this.resetSelection();\n this.selectInitialNodes(state.selected_node);\n }\n\n return mustLoadOnDemand;\n }\n }\n\n public setInitialStateOnDemand(\n state: SavedState,\n cbFinished: () => void\n ): void {\n if (state) {\n this.doSetInitialStateOnDemand(\n state.open_nodes,\n state.selected_node,\n cbFinished\n );\n } else {\n cbFinished();\n }\n }\n\n public getNodeIdToBeSelected(): NodeId | null {\n const state = this.getStateFromStorage();\n\n if (state && state.selected_node) {\n return state.selected_node[0];\n } else {\n return null;\n }\n }\n\n private parseState(jsonData: string): SavedState {\n const state = JSON.parse(jsonData) as Record<string, unknown>;\n\n // Check if selected_node is an int (instead of an array)\n if (state && state.selected_node && isInt(state.selected_node)) {\n // Convert to array\n state.selected_node = [state.selected_node];\n }\n\n return state as unknown as SavedState;\n }\n\n private loadFromStorage(): string | null {\n if (this.treeWidget.options.onGetStateFromStorage) {\n return this.treeWidget.options.onGetStateFromStorage();\n } else if (this.supportsLocalStorage()) {\n return localStorage.getItem(this.getKeyName());\n } else {\n return null;\n }\n }\n\n private openInitialNodes(nodeIds: NodeId[]): boolean {\n let mustLoadOnDemand = false;\n\n for (const nodeId of nodeIds) {\n const node = this.treeWidget.getNodeById(nodeId);\n\n if (node) {\n if (!node.load_on_demand) {\n node.is_open = true;\n } else {\n mustLoadOnDemand = true;\n }\n }\n }\n\n return mustLoadOnDemand;\n }\n\n private selectInitialNodes(nodeIds: NodeId[]): boolean {\n let selectCount = 0;\n\n for (const nodeId of nodeIds) {\n const node = this.treeWidget.getNodeById(nodeId);\n\n if (node) {\n selectCount += 1;\n\n this.treeWidget.selectNodeHandler.addToSelection(node);\n }\n }\n\n return selectCount !== 0;\n }\n\n private resetSelection(): void {\n const selectNodeHandler = this.treeWidget.selectNodeHandler;\n\n const selectedNodes = selectNodeHandler.getSelectedNodes();\n\n selectedNodes.forEach((node) => {\n selectNodeHandler.removeFromSelection(node);\n });\n }\n\n private doSetInitialStateOnDemand(\n nodeIdsParam: NodeId[],\n selectedNodes: NodeId[],\n cbFinished: () => void\n ): void {\n let loadingCount = 0;\n let nodeIds = nodeIdsParam;\n\n const openNodes = (): void => {\n const newNodesIds = [];\n\n for (const nodeId of nodeIds) {\n const node = this.treeWidget.getNodeById(nodeId);\n\n if (!node) {\n newNodesIds.push(nodeId);\n } else {\n if (!node.is_loading) {\n if (node.load_on_demand) {\n loadAndOpenNode(node);\n } else {\n this.treeWidget._openNode(node, false, null);\n }\n }\n }\n }\n\n nodeIds = newNodesIds;\n\n if (this.selectInitialNodes(selectedNodes)) {\n this.treeWidget._refreshElements(null);\n }\n\n if (loadingCount === 0) {\n cbFinished();\n }\n };\n\n const loadAndOpenNode = (node: Node): void => {\n loadingCount += 1;\n this.treeWidget._openNode(node, false, () => {\n loadingCount -= 1;\n openNodes();\n });\n };\n\n openNodes();\n }\n\n private getKeyName(): string {\n if (typeof this.treeWidget.options.saveState === \"string\") {\n return this.treeWidget.options.saveState;\n } else {\n return \"tree\";\n }\n }\n\n private supportsLocalStorage(): boolean {\n const testSupport = (): boolean => {\n // Is local storage supported?\n if (localStorage == null) {\n return false;\n } else {\n // Check if it's possible to store an item. Safari does not allow this in private browsing mode.\n try {\n const key = \"_storage_test\";\n sessionStorage.setItem(key, \"value\");\n sessionStorage.removeItem(key);\n } catch (error) {\n return false;\n }\n\n return true;\n }\n };\n\n if (this._supportsLocalStorage == null) {\n this._supportsLocalStorage = testSupport();\n }\n\n return this._supportsLocalStorage;\n }\n}\n","import { JqTreeWidget } from \"./tree.jquery\";\nimport { HitArea, PositionInfo } from \"./types\";\n\nexport default class ScrollHandler {\n private treeWidget: JqTreeWidget;\n private previousTop: number;\n private isInitialized: boolean;\n private $scrollParent: JQuery | null;\n private scrollParentTop: number;\n\n constructor(treeWidget: JqTreeWidget) {\n this.treeWidget = treeWidget;\n this.previousTop = -1;\n this.isInitialized = false;\n }\n\n public checkScrolling(): void {\n this.ensureInit();\n this.checkVerticalScrolling();\n this.checkHorizontalScrolling();\n }\n\n public scrollToY(top: number): void {\n this.ensureInit();\n\n if (this.$scrollParent) {\n this.$scrollParent[0].scrollTop = top;\n } else {\n const offset = this.treeWidget.$el.offset();\n const treeTop = offset ? offset.top : 0;\n\n jQuery(document).scrollTop(top + treeTop);\n }\n }\n\n public isScrolledIntoView($element: JQuery): boolean {\n this.ensureInit();\n\n let elementBottom: number;\n let viewBottom: number;\n let elementTop: number;\n let viewTop: number;\n\n const elHeight = $element.height() || 0;\n\n if (this.$scrollParent) {\n viewTop = 0;\n viewBottom = this.$scrollParent.height() || 0;\n\n const offset = $element.offset();\n const originalTop = offset ? offset.top : 0;\n\n elementTop = originalTop - this.scrollParentTop;\n elementBottom = elementTop + elHeight;\n } else {\n viewTop = jQuery(window).scrollTop() || 0;\n\n const windowHeight = jQuery(window).height() || 0;\n viewBottom = viewTop + windowHeight;\n\n const offset = $element.offset();\n\n elementTop = offset ? offset.top : 0;\n elementBottom = elementTop + elHeight;\n }\n\n return elementBottom <= viewBottom && elementTop >= viewTop;\n }\n\n public getScrollLeft(): number {\n if (!this.$scrollParent) {\n return 0;\n } else {\n return this.$scrollParent.scrollLeft() || 0;\n }\n }\n\n private initScrollParent(): void {\n const getParentWithOverflow = (): JQuery | null => {\n const cssAttributes = [\"overflow\", \"overflow-y\"];\n\n const hasOverFlow = ($el: JQuery): boolean => {\n for (const attr of cssAttributes) {\n const overflowValue = $el.css(attr);\n if (\n overflowValue === \"auto\" ||\n overflowValue === \"scroll\"\n ) {\n return true;\n }\n }\n\n return false;\n };\n\n if (hasOverFlow(this.treeWidget.$el)) {\n return this.treeWidget.$el;\n }\n\n for (const el of this.treeWidget.$el.parents().get()) {\n const $el = jQuery(el);\n if (hasOverFlow($el)) {\n return $el;\n }\n }\n\n return null;\n };\n\n const setDocumentAsScrollParent = (): void => {\n this.scrollParentTop = 0;\n this.$scrollParent = null;\n };\n\n if (this.treeWidget.$el.css(\"position\") === \"fixed\") {\n setDocumentAsScrollParent();\n }\n\n const $scrollParent = getParentWithOverflow();\n\n if (\n $scrollParent &&\n $scrollParent.length &&\n $scrollParent[0].tagName !== \"HTML\"\n ) {\n this.$scrollParent = $scrollParent;\n\n const offset = this.$scrollParent.offset();\n this.scrollParentTop = offset ? offset.top : 0;\n } else {\n setDocumentAsScrollParent();\n }\n\n this.isInitialized = true;\n }\n\n private ensureInit(): void {\n if (!this.isInitialized) {\n this.initScrollParent();\n }\n }\n\n private handleVerticalScrollingWithScrollParent(area: HitArea): void {\n const scrollParent = this.$scrollParent && this.$scrollParent[0];\n\n if (!scrollParent) {\n return;\n }\n\n const distanceBottom =\n this.scrollParentTop + scrollParent.offsetHeight - area.bottom;\n\n if (distanceBottom < 20) {\n scrollParent.scrollTop += 20;\n this.treeWidget.refreshHitAreas();\n this.previousTop = -1;\n } else if (area.top - this.scrollParentTop < 20) {\n scrollParent.scrollTop -= 20;\n this.treeWidget.refreshHitAreas();\n this.previousTop = -1;\n }\n }\n\n private handleVerticalScrollingWithDocument(area: HitArea): void {\n const scrollTop = jQuery(document).scrollTop() || 0;\n const distanceTop = area.top - scrollTop;\n\n if (distanceTop < 20) {\n jQuery(document).scrollTop(scrollTop - 20);\n } else {\n const windowHeight = jQuery(window).height() || 0;\n\n if (windowHeight - (area.bottom - scrollTop) < 20) {\n jQuery(document).scrollTop(scrollTop + 20);\n }\n }\n }\n\n private checkVerticalScrolling(): void {\n const hoveredArea = this.treeWidget.dndHandler.hoveredArea;\n\n if (hoveredArea && hoveredArea.top !== this.previousTop) {\n this.previousTop = hoveredArea.top;\n\n if (this.$scrollParent) {\n this.handleVerticalScrollingWithScrollParent(hoveredArea);\n } else {\n this.handleVerticalScrollingWithDocument(hoveredArea);\n }\n }\n }\n\n private checkHorizontalScrolling(): void {\n const positionInfo = this.treeWidget.dndHandler.positionInfo;\n\n if (!positionInfo) {\n return;\n }\n\n if (this.$scrollParent) {\n this.handleHorizontalScrollingWithParent(positionInfo);\n } else {\n this.handleHorizontalScrollingWithDocument(positionInfo);\n }\n }\n\n private handleHorizontalScrollingWithParent(\n positionInfo: PositionInfo\n ): void {\n if (\n positionInfo.pageX === undefined ||\n positionInfo.pageY === undefined\n ) {\n return;\n }\n\n const $scrollParent = this.$scrollParent;\n const scrollParentOffset = $scrollParent && $scrollParent.offset();\n\n if (!($scrollParent && scrollParentOffset)) {\n return;\n }\n\n const scrollParent = $scrollParent[0];\n\n const canScrollRight =\n scrollParent.scrollLeft + scrollParent.clientWidth <\n scrollParent.scrollWidth;\n const canScrollLeft = scrollParent.scrollLeft > 0;\n\n const rightEdge = scrollParentOffset.left + scrollParent.clientWidth;\n const leftEdge = scrollParentOffset.left;\n const isNearRightEdge = positionInfo.pageX > rightEdge - 20;\n const isNearLeftEdge = positionInfo.pageX < leftEdge + 20;\n\n if (isNearRightEdge && canScrollRight) {\n scrollParent.scrollLeft = Math.min(\n scrollParent.scrollLeft + 20,\n scrollParent.scrollWidth\n );\n } else if (isNearLeftEdge && canScrollLeft) {\n scrollParent.scrollLeft = Math.max(scrollParent.scrollLeft - 20, 0);\n }\n }\n\n private handleHorizontalScrollingWithDocument(\n positionInfo: PositionInfo\n ): void {\n if (\n positionInfo.pageX === undefined ||\n positionInfo.pageY === undefined\n ) {\n return;\n }\n\n const $document = jQuery(document);\n\n const scrollLeft = $document.scrollLeft() || 0;\n const windowWidth = jQuery(window).width() || 0;\n\n const canScrollLeft = scrollLeft > 0;\n\n const isNearRightEdge = positionInfo.pageX > windowWidth - 20;\n const isNearLeftEdge = positionInfo.pageX - scrollLeft < 20;\n\n if (isNearRightEdge) {\n $document.scrollLeft(scrollLeft + 20);\n } else if (isNearLeftEdge && canScrollLeft) {\n $document.scrollLeft(Math.max(scrollLeft - 20, 0));\n }\n }\n}\n","import { Node } from \"./node\";\nimport { JqTreeWidget } from \"./tree.jquery\";\n\nexport default class SelectNodeHandler {\n private treeWidget: JqTreeWidget;\n private selectedNodes: Set<NodeId>;\n private selectedSingleNode: Node | null;\n\n constructor(treeWidget: JqTreeWidget) {\n this.treeWidget = treeWidget;\n this.selectedNodes = new Set<NodeId>();\n this.clear();\n }\n\n public getSelectedNode(): Node | false {\n const selectedNodes = this.getSelectedNodes();\n\n if (selectedNodes.length) {\n return selectedNodes[0];\n } else {\n return false;\n }\n }\n\n public getSelectedNodes(): Node[] {\n if (this.selectedSingleNode) {\n return [this.selectedSingleNode];\n } else {\n const selectedNodes: Node[] = [];\n\n this.selectedNodes.forEach((id) => {\n const node = this.treeWidget.getNodeById(id);\n if (node) {\n selectedNodes.push(node);\n }\n });\n\n return selectedNodes;\n }\n }\n\n public getSelectedNodesUnder(parent: Node): Node[] {\n if (this.selectedSingleNode) {\n if (parent.isParentOf(this.selectedSingleNode)) {\n return [this.selectedSingleNode];\n } else {\n return [];\n }\n } else {\n const selectedNodes = [];\n\n for (const id in this.selectedNodes) {\n if (\n Object.prototype.hasOwnProperty.call(this.selectedNodes, id)\n ) {\n const node = this.treeWidget.getNodeById(id);\n if (node && parent.isParentOf(node)) {\n selectedNodes.push(node);\n }\n }\n }\n\n return selectedNodes;\n }\n }\n\n public isNodeSelected(node: Node): boolean {\n if (node.id != null) {\n return this.selectedNodes.has(node.id);\n } else if (this.selectedSingleNode) {\n return this.selectedSingleNode.element === node.element;\n } else {\n return false;\n }\n }\n\n public clear(): void {\n this.selectedNodes.clear();\n this.selectedSingleNode = null;\n }\n\n public removeFromSelection(node: Node, includeChildren = false): void {\n if (node.id == null) {\n if (\n this.selectedSingleNode &&\n node.element === this.selectedSingleNode.element\n ) {\n this.selectedSingleNode = null;\n }\n } else {\n this.selectedNodes.delete(node.id);\n\n if (includeChildren) {\n node.iterate(() => {\n if (node.id != null) {\n this.selectedNodes.delete(node.id);\n }\n return true;\n });\n }\n }\n }\n\n public addToSelection(node: Node): void {\n if (node.id != null) {\n this.selectedNodes.add(node.id);\n } else {\n this.selectedSingleNode = node;\n }\n }\n\n public isFocusOnTree(): boolean {\n const activeElement = document.activeElement;\n\n return Boolean(\n activeElement &&\n activeElement.tagName === \"SPAN\" &&\n this.treeWidget._containsElement(activeElement as HTMLElement)\n );\n }\n}\n","import { Position, Node } from \"./node\";\nimport { JqTreeWidget } from \"./tree.jquery\";\nimport { DropHint } from \"./types\";\n\nexport type OnFinishOpenNode = (node: Node) => void;\n\nexport class NodeElement {\n public node: Node;\n public $element: JQuery<HTMLElement>;\n protected treeWidget: JqTreeWidget;\n\n constructor(node: Node, treeWidget: JqTreeWidget) {\n this.init(node, treeWidget);\n }\n\n public init(node: Node, treeWidget: JqTreeWidget): void {\n this.node = node;\n this.treeWidget = treeWidget;\n\n if (!node.element) {\n const element = this.treeWidget.element.get(0);\n\n if (element) {\n node.element = element;\n }\n }\n\n if (node.element) {\n this.$element = jQuery(node.element);\n }\n }\n\n public addDropHint(position: number): DropHint {\n if (this.mustShowBorderDropHint(position)) {\n return new BorderDropHint(\n this.$element,\n this.treeWidget._getScrollLeft()\n );\n } else {\n return new GhostDropHint(this.node, this.$element, position);\n }\n }\n\n public select(mustSetFocus: boolean): void {\n const $li = this.getLi();\n\n $li.addClass(\"jqtree-selected\");\n $li.attr(\"aria-selected\", \"true\");\n\n const $span = this.getSpan();\n $span.attr(\"tabindex\", this.treeWidget.options.tabIndex ?? null);\n\n if (mustSetFocus) {\n $span.trigger(\"focus\");\n }\n }\n\n public deselect(): void {\n const $li = this.getLi();\n\n $li.removeClass(\"jqtree-selected\");\n $li.attr(\"aria-selected\", \"false\");\n\n const $span = this.getSpan();\n $span.removeAttr(\"tabindex\");\n\n $span.blur();\n }\n\n protected getUl(): JQuery<HTMLElement> {\n return this.$element.children(\"ul:first\");\n }\n\n protected getSpan(): JQuery<HTMLElement> {\n return this.$element\n .children(\".jqtree-element\")\n .find(\"span.jqtree-title\");\n }\n\n protected getLi(): JQuery<HTMLElement> {\n return this.$element;\n }\n\n protected mustShowBorderDropHint(position: number): boolean {\n return position === Position.Inside;\n }\n}\n\nexport class FolderElement extends NodeElement {\n public open(\n onFinished: OnFinishOpenNode | null,\n slide = true,\n animationSpeed: JQuery.Duration | string = \"fast\"\n ): void {\n if (this.node.is_open) {\n return;\n }\n\n this.node.is_open = true;\n\n const $button = this.getButton();\n $button.removeClass(\"jqtree-closed\");\n $button.html(\"\");\n\n const buttonEl = $button.get(0);\n\n if (buttonEl) {\n const icon =\n this.treeWidget.renderer.openedIconElement.cloneNode(true);\n\n buttonEl.appendChild(icon);\n }\n\n const doOpen = (): void => {\n const $li = this.getLi();\n $li.removeClass(\"jqtree-closed\");\n\n const $span = this.getSpan();\n $span.attr(\"aria-expanded\", \"true\");\n\n if (onFinished) {\n onFinished(this.node);\n }\n\n this.treeWidget._triggerEvent(\"tree.open\", {\n node: this.node,\n });\n };\n\n if (slide) {\n this.getUl().slideDown(animationSpeed, doOpen);\n } else {\n this.getUl().show();\n doOpen();\n }\n }\n\n public close(\n slide = true,\n animationSpeed: JQuery.Duration | string = \"fast\"\n ): void {\n if (!this.node.is_open) {\n return;\n }\n\n this.node.is_open = false;\n\n const $button = this.getButton();\n $button.addClass(\"jqtree-closed\");\n $button.html(\"\");\n\n const buttonEl = $button.get(0);\n\n if (buttonEl) {\n const icon =\n this.treeWidget.renderer.closedIconElement.cloneNode(true);\n\n buttonEl.appendChild(icon);\n }\n\n const doClose = (): void => {\n const $li = this.getLi();\n $li.addClass(\"jqtree-closed\");\n\n const $span = this.getSpan();\n $span.attr(\"aria-expanded\", \"false\");\n\n this.treeWidget._triggerEvent(\"tree.close\", {\n node: this.node,\n });\n };\n\n if (slide) {\n this.getUl().slideUp(animationSpeed, doClose);\n } else {\n this.getUl().hide();\n doClose();\n }\n }\n\n protected mustShowBorderDropHint(position: number): boolean {\n return !this.node.is_open && position === Position.Inside;\n }\n\n private getButton(): JQuery {\n return this.$element\n .children(\".jqtree-element\")\n .find(\"a.jqtree-toggler\");\n }\n}\n\nexport class BorderDropHint implements DropHint {\n private $hint: JQuery<Element>;\n\n constructor($element: JQuery<Element>, scrollLeft: number) {\n const $div = $element.children(\".jqtree-element\");\n\n const elWidth = $element.width() || 0;\n const width = Math.max(elWidth + scrollLeft - 4, 0);\n\n const elHeight = $div.outerHeight() || 0;\n const height = Math.max(elHeight - 4, 0);\n\n this.$hint = jQuery('<span class=\"jqtree-border\"></span>');\n $div.append(this.$hint);\n\n this.$hint.css({ width, height });\n }\n\n public remove(): void {\n this.$hint.remove();\n }\n}\n\nclass GhostDropHint implements DropHint {\n private $element: JQuery<Element>;\n private node: Node;\n private $ghost: JQuery;\n\n constructor(node: Node, $element: JQuery<Element>, position: number) {\n this.$element = $element;\n\n this.node = node;\n this.$ghost = jQuery(\n `<li class=\"jqtree_common jqtree-ghost\"><span class=\"jqtree_common jqtree-circle\"></span>\n <span class=\"jqtree_common jqtree-line\"></span></li>`\n );\n\n if (position === Position.After) {\n this.moveAfter();\n } else if (position === Position.Before) {\n this.moveBefore();\n } else if (position === Position.Inside) {\n if (node.isFolder() && node.is_open) {\n this.moveInsideOpenFolder();\n } else {\n this.moveInside();\n }\n }\n }\n\n public remove(): void {\n this.$ghost.remove();\n }\n\n public moveAfter(): void {\n this.$element.after(this.$ghost);\n }\n\n public moveBefore(): void {\n this.$element.before(this.$ghost);\n }\n\n public moveInsideOpenFolder(): void {\n const childElement = this.node.children[0].element;\n\n if (childElement) {\n jQuery(childElement).before(this.$ghost);\n }\n }\n\n public moveInside(): void {\n this.$element.after(this.$ghost);\n this.$ghost.addClass(\"jqtree-inside\");\n }\n}\n","import __version__ from \"./version\";\nimport { DragAndDropHandler } from \"./dragAndDropHandler\";\nimport ElementsRenderer from \"./elementsRenderer\";\nimport DataLoader, { HandleFinishedLoading } from \"./dataLoader\";\nimport KeyHandler from \"./keyHandler\";\nimport MouseWidget from \"./mouse.widget\";\nimport { PositionInfo } from \"./types\";\nimport SaveStateHandler, { SavedState } from \"./saveStateHandler\";\nimport ScrollHandler from \"./scrollHandler\";\nimport SelectNodeHandler from \"./selectNodeHandler\";\nimport SimpleWidget from \"./simple.widget\";\nimport { Node, getPosition } from \"./node\";\nimport { isFunction } from \"./util\";\nimport { FolderElement, NodeElement, OnFinishOpenNode } from \"./nodeElement\";\nimport { JQTreeOptions } from \"./jqtreeOptions\";\n\ninterface ClickTarget {\n node: Node;\n type: \"button\" | \"label\";\n}\n\ninterface SelectNodeOptions {\n mustToggle?: boolean;\n mustSetFocus?: boolean;\n}\n\nconst NODE_PARAM_IS_EMPTY = \"Node parameter is empty\";\nconst PARAM_IS_EMPTY = \"Parameter is empty: \";\n\nexport class JqTreeWidget extends MouseWidget<JQTreeOptions> {\n protected static defaults: JQTreeOptions = {\n animationSpeed: \"fast\",\n autoEscape: true,\n autoOpen: false, // true / false / int (open n levels starting at 0)\n buttonLeft: true,\n // The symbol to use for a closed node - ► BLACK RIGHT-POINTING POINTER\n // http://www.fileformat.info/info/unicode/char/25ba/index.htm\n closedIcon: undefined,\n data: undefined,\n dataFilter: undefined,\n dataUrl: undefined,\n dragAndDrop: false,\n keyboardSupport: true,\n nodeClass: Node,\n onCanMove: undefined, // Can this node be moved?\n onCanMoveTo: undefined, // Can this node be moved to this position? function(moved_node, target_node, position)\n onCanSelectNode: undefined,\n onCreateLi: undefined,\n onDragMove: undefined,\n onDragStop: undefined,\n onGetStateFromStorage: undefined,\n onIsMoveHandle: undefined,\n onLoadFailed: undefined,\n onLoading: undefined,\n onSetStateFromStorage: undefined,\n openedIcon: \"▼\",\n openFolderDelay: 500, // The delay for opening a folder during drag and drop; the value is in milliseconds\n // The symbol to use for an open node - ▼ BLACK DOWN-POINTING TRIANGLE\n // http://www.fileformat.info/info/unicode/char/25bc/index.htm\n rtl: undefined, // right-to-left support; true / false (default)\n saveState: false, // true / false / string (cookie name)\n selectable: true,\n showEmptyFolder: false,\n slide: true, // must display slide animation?\n startDndDelay: 300, // The delay for starting dnd (in milliseconds)\n tabIndex: 0,\n useContextMenu: true,\n };\n\n public element: JQuery;\n public tree: Node;\n public dndHandler: DragAndDropHandler;\n public renderer: ElementsRenderer;\n public dataLoader: DataLoader;\n public scrollHandler: ScrollHandler;\n public selectNodeHandler: SelectNodeHandler;\n\n private isInitialized: boolean;\n private saveStateHandler: SaveStateHandler;\n private keyHandler: KeyHandler;\n\n public toggle(node: Node, slideParam: null | boolean = null): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n const slide = slideParam ?? this.options.slide;\n\n if (node.is_open) {\n this.closeNode(node, slide);\n } else {\n this.openNode(node, slide);\n }\n\n return this.element;\n }\n\n public getTree(): Node {\n return this.tree;\n }\n\n public selectNode(\n node: Node | null,\n optionsParam?: SelectNodeOptions\n ): JQuery {\n this.doSelectNode(node, optionsParam);\n return this.element;\n }\n\n public getSelectedNode(): Node | false {\n return this.selectNodeHandler.getSelectedNode();\n }\n\n public toJson(): string {\n return JSON.stringify(this.tree.getData());\n }\n\n public loadData(data: NodeData[], parentNode: Node | null): JQuery {\n this.doLoadData(data, parentNode);\n return this.element;\n }\n\n /*\n signatures:\n - loadDataFromUrl(url, parent_node=null, on_finished=null)\n loadDataFromUrl('/my_data');\n loadDataFromUrl('/my_data', node1);\n loadDataFromUrl('/my_data', node1, function() { console.log('finished'); });\n loadDataFromUrl('/my_data', null, function() { console.log('finished'); });\n\n - loadDataFromUrl(parent_node=null, on_finished=null)\n loadDataFromUrl();\n loadDataFromUrl(node1);\n loadDataFromUrl(null, function() { console.log('finished'); });\n loadDataFromUrl(node1, function() { console.log('finished'); });\n */\n public loadDataFromUrl(\n param1: string | null | Node,\n param2?: Node | null | HandleFinishedLoading,\n param3?: HandleFinishedLoading\n ): JQuery {\n if (typeof param1 === \"string\") {\n // first parameter is url\n this.doLoadDataFromUrl(\n param1,\n param2 as Node | null,\n param3 ?? null\n );\n } else {\n // first parameter is not url\n this.doLoadDataFromUrl(\n null,\n param1,\n param2 as HandleFinishedLoading | null\n );\n }\n\n return this.element;\n }\n\n public reload(onFinished: HandleFinishedLoading | null): JQuery {\n this.doLoadDataFromUrl(null, null, onFinished);\n return this.element;\n }\n\n public refresh(): JQuery {\n this._refreshElements(null);\n return this.element;\n }\n\n public getNodeById(nodeId: NodeId): Node | null {\n return this.tree.getNodeById(nodeId);\n }\n\n public getNodeByName(name: string): Node | null {\n return this.tree.getNodeByName(name);\n }\n\n public getNodeByNameMustExist(name: string): Node {\n return this.tree.getNodeByNameMustExist(name);\n }\n\n public getNodesByProperty(key: string, value: unknown): Node[] {\n return this.tree.getNodesByProperty(key, value);\n }\n\n public getNodeByHtmlElement(\n element: HTMLElement | JQuery<HTMLElement>\n ): Node | null {\n return this.getNode(jQuery(element));\n }\n\n public getNodeByCallback(callback: (node: Node) => boolean): Node | null {\n return this.tree.getNodeByCallback(callback);\n }\n\n public openNode(\n node: Node,\n param1?: boolean | OnFinishOpenNode,\n param2?: OnFinishOpenNode\n ): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n const parseParams = (): [boolean, OnFinishOpenNode | null] => {\n let onFinished: OnFinishOpenNode | null;\n let slide: boolean | null;\n\n if (isFunction(param1)) {\n onFinished = param1 as OnFinishOpenNode | null;\n slide = null;\n } else {\n slide = param1 as boolean;\n onFinished = param2 as OnFinishOpenNode;\n }\n\n if (slide == null) {\n slide = this.options.slide ?? false;\n }\n\n return [slide, onFinished];\n };\n\n const [slide, onFinished] = parseParams();\n\n this._openNode(node, slide, onFinished);\n return this.element;\n }\n\n public closeNode(node: Node, slideParam?: null | boolean): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n const slide = slideParam ?? this.options.slide;\n\n if (node.isFolder() || node.isEmptyFolder) {\n new FolderElement(node, this).close(\n slide,\n this.options.animationSpeed\n );\n\n this.saveState();\n }\n\n return this.element;\n }\n\n public isDragging(): boolean {\n return this.dndHandler.isDragging;\n }\n\n public refreshHitAreas(): JQuery {\n this.dndHandler.refresh();\n return this.element;\n }\n\n public addNodeAfter(\n newNodeInfo: NodeData,\n existingNode: Node\n ): Node | null {\n const newNode = existingNode.addAfter(newNodeInfo);\n\n if (newNode) {\n this._refreshElements(existingNode.parent);\n }\n\n return newNode;\n }\n\n public addNodeBefore(\n newNodeInfo: NodeData,\n existingNode: Node\n ): Node | null {\n if (!existingNode) {\n throw Error(PARAM_IS_EMPTY + \"existingNode\");\n }\n\n const newNode = existingNode.addBefore(newNodeInfo);\n\n if (newNode) {\n this._refreshElements(existingNode.parent);\n }\n\n return newNode;\n }\n\n public addParentNode(\n newNodeInfo: NodeData,\n existingNode: Node\n ): Node | null {\n if (!existingNode) {\n throw Error(PARAM_IS_EMPTY + \"existingNode\");\n }\n\n const newNode = existingNode.addParent(newNodeInfo);\n\n if (newNode) {\n this._refreshElements(newNode.parent);\n }\n\n return newNode;\n }\n\n public removeNode(node: Node): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n if (!node.parent) {\n throw Error(\"Node has no parent\");\n }\n\n this.selectNodeHandler.removeFromSelection(node, true); // including children\n\n const parent = node.parent;\n node.remove();\n this._refreshElements(parent);\n\n return this.element;\n }\n\n public appendNode(newNodeInfo: NodeData, parentNodeParam?: Node): Node {\n const parentNode = parentNodeParam || this.tree;\n\n const node = parentNode.append(newNodeInfo);\n\n this._refreshElements(parentNode);\n\n return node;\n }\n\n public prependNode(newNodeInfo: NodeData, parentNodeParam?: Node): Node {\n const parentNode = parentNodeParam ?? this.tree;\n\n const node = parentNode.prepend(newNodeInfo);\n\n this._refreshElements(parentNode);\n\n return node;\n }\n\n public updateNode(node: Node, data: NodeData): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n const idIsChanged =\n typeof data === \"object\" && data.id && data.id !== node.id;\n\n if (idIsChanged) {\n this.tree.removeNodeFromIndex(node);\n }\n\n node.setData(data);\n\n if (idIsChanged) {\n this.tree.addNodeToIndex(node);\n }\n\n if (\n typeof data === \"object\" &&\n data[\"children\"] &&\n data[\"children\"] instanceof Array\n ) {\n node.removeChildren();\n\n if (data.children.length) {\n node.loadFromData(data.children as Node[]);\n }\n }\n\n this._refreshElements(node);\n\n return this.element;\n }\n\n private isSelectedNodeInSubtree(subtree: Node): boolean {\n const selectedNode = this.getSelectedNode();\n\n if (!selectedNode) {\n return false;\n } else {\n return subtree === selectedNode || subtree.isParentOf(selectedNode);\n }\n }\n\n public moveNode(node: Node, targetNode: Node, position: string): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n if (!targetNode) {\n throw Error(PARAM_IS_EMPTY + \"targetNode\");\n }\n\n const positionIndex = getPosition(position);\n\n if (positionIndex !== undefined) {\n this.tree.moveNode(node, targetNode, positionIndex);\n this._refreshElements(null);\n }\n\n return this.element;\n }\n\n public getStateFromStorage(): SavedState | null {\n return this.saveStateHandler.getStateFromStorage();\n }\n\n public addToSelection(node: Node, mustSetFocus?: boolean): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n this.selectNodeHandler.addToSelection(node);\n\n this._getNodeElementForNode(node).select(\n mustSetFocus === undefined ? true : mustSetFocus\n );\n\n this.saveState();\n\n return this.element;\n }\n\n public getSelectedNodes(): Node[] {\n return this.selectNodeHandler.getSelectedNodes();\n }\n\n public isNodeSelected(node: Node): boolean {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n return this.selectNodeHandler.isNodeSelected(node);\n }\n\n public removeFromSelection(node: Node): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n this.selectNodeHandler.removeFromSelection(node);\n\n this._getNodeElementForNode(node).deselect();\n this.saveState();\n\n return this.element;\n }\n\n public scrollToNode(node: Node): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n const nodeOffset = jQuery(node.element).offset();\n const nodeTop = nodeOffset ? nodeOffset.top : 0;\n\n const treeOffset = this.$el.offset();\n const treeTop = treeOffset ? treeOffset.top : 0;\n\n const top = nodeTop - treeTop;\n\n this.scrollHandler.scrollToY(top);\n\n return this.element;\n }\n\n public getState(): SavedState | null {\n return this.saveStateHandler.getState();\n }\n\n public setState(state: SavedState): JQuery {\n this.saveStateHandler.setInitialState(state);\n this._refreshElements(null);\n\n return this.element;\n }\n\n public setOption(option: string, value: unknown): JQuery {\n (this.options as unknown as Record<string, unknown>)[option] = value;\n return this.element;\n }\n\n public moveDown(): JQuery {\n const selectedNode = this.getSelectedNode();\n if (selectedNode) {\n this.keyHandler.moveDown(selectedNode);\n }\n\n return this.element;\n }\n\n public moveUp(): JQuery {\n const selectedNode = this.getSelectedNode();\n if (selectedNode) {\n this.keyHandler.moveUp(selectedNode);\n }\n\n return this.element;\n }\n\n public getVersion(): string {\n return __version__;\n }\n\n public _triggerEvent(\n eventName: string,\n values?: Record<string, unknown>\n ): JQuery.Event {\n const event = jQuery.Event(eventName, values);\n this.element.trigger(event);\n return event;\n }\n\n public _openNode(\n node: Node,\n slide = true,\n onFinished: OnFinishOpenNode | null\n ): void {\n const doOpenNode = (\n _node: Node,\n _slide: boolean,\n _onFinished: OnFinishOpenNode | null\n ): void => {\n const folderElement = new FolderElement(_node, this);\n folderElement.open(\n _onFinished,\n _slide,\n this.options.animationSpeed\n );\n };\n\n if (node.isFolder() || node.isEmptyFolder) {\n if (node.load_on_demand) {\n this.loadFolderOnDemand(node, slide, onFinished);\n } else {\n let parent = node.parent;\n\n while (parent) {\n // nb: do not open root element\n if (parent.parent) {\n doOpenNode(parent, false, null);\n }\n parent = parent.parent;\n }\n\n doOpenNode(node, slide, onFinished);\n this.saveState();\n }\n }\n }\n\n /*\n Redraw the tree or part of the tree.\n from_node: redraw this subtree\n */\n public _refreshElements(fromNode: Node | null): void {\n const mustSetFocus = this.selectNodeHandler.isFocusOnTree();\n const mustSelect = fromNode\n ? this.isSelectedNodeInSubtree(fromNode)\n : false;\n\n this.renderer.render(fromNode);\n\n if (mustSelect) {\n this.selectCurrentNode(mustSetFocus);\n }\n\n this._triggerEvent(\"tree.refresh\");\n }\n\n public _getNodeElementForNode(node: Node): NodeElement {\n if (node.isFolder()) {\n return new FolderElement(node, this);\n } else {\n return new NodeElement(node, this);\n }\n }\n\n public _getNodeElement($element: JQuery<HTMLElement>): NodeElement | null {\n const node = this.getNode($element);\n if (node) {\n return this._getNodeElementForNode(node);\n } else {\n return null;\n }\n }\n\n public _containsElement(element: HTMLElement): boolean {\n const node = this.getNode(jQuery(element));\n\n return node != null && node.tree === this.tree;\n }\n\n public _getScrollLeft(): number {\n return this.scrollHandler.getScrollLeft();\n }\n\n public init(): void {\n super.init();\n\n this.element = this.$el;\n this.isInitialized = false;\n\n this.options.rtl = this.getRtlOption();\n\n if (this.options.closedIcon == null) {\n this.options.closedIcon = this.getDefaultClosedIcon();\n }\n\n this.renderer = new ElementsRenderer(this);\n this.dataLoader = new DataLoader(this);\n this.saveStateHandler = new SaveStateHandler(this);\n this.selectNodeHandler = new SelectNodeHandler(this);\n this.dndHandler = new DragAndDropHandler(this);\n this.scrollHandler = new ScrollHandler(this);\n this.keyHandler = new KeyHandler(this);\n\n this.initData();\n\n this.element.on(\"click\", this.handleClick);\n this.element.on(\"dblclick\", this.handleDblclick);\n\n if (this.options.useContextMenu) {\n this.element.on(\"contextmenu\", this.handleContextmenu);\n }\n }\n\n public deinit(): void {\n this.element.empty();\n this.element.off();\n\n this.keyHandler.deinit();\n\n this.tree = new Node({}, true);\n\n super.deinit();\n }\n\n protected mouseCapture(positionInfo: PositionInfo): boolean | null {\n if (this.options.dragAndDrop) {\n return this.dndHandler.mouseCapture(positionInfo);\n } else {\n return false;\n }\n }\n\n protected mouseStart(positionInfo: PositionInfo): boolean {\n if (this.options.dragAndDrop) {\n return this.dndHandler.mouseStart(positionInfo);\n } else {\n return false;\n }\n }\n\n protected mouseDrag(positionInfo: PositionInfo): boolean {\n if (this.options.dragAndDrop) {\n const result = this.dndHandler.mouseDrag(positionInfo);\n\n this.scrollHandler.checkScrolling();\n return result;\n } else {\n return false;\n }\n }\n\n protected mouseStop(positionInfo: PositionInfo): boolean {\n if (this.options.dragAndDrop) {\n return this.dndHandler.mouseStop(positionInfo);\n } else {\n return false;\n }\n }\n\n protected getMouseDelay(): number {\n return this.options.startDndDelay ?? 0;\n }\n\n private initData(): void {\n if (this.options.data) {\n this.doLoadData(this.options.data, null);\n } else {\n const dataUrl = this.getDataUrlInfo(null);\n\n if (dataUrl) {\n this.doLoadDataFromUrl(null, null, null);\n } else {\n this.doLoadData([], null);\n }\n }\n }\n\n private getDataUrlInfo(node: Node | null): JQuery.AjaxSettings | null {\n const dataUrl =\n this.options.dataUrl || (this.element.data(\"url\") as string | null);\n\n const getUrlFromString = (url: string): JQuery.AjaxSettings => {\n const urlInfo: JQuery.AjaxSettings = { url };\n\n setUrlInfoData(urlInfo);\n\n return urlInfo;\n };\n\n const setUrlInfoData = (urlInfo: JQuery.AjaxSettings): void => {\n if (node?.id) {\n // Load on demand of a subtree; add node parameter\n const data = { node: node.id };\n urlInfo[\"data\"] = data;\n } else {\n // Add selected_node parameter\n const selectedNodeId = this.getNodeIdToBeSelected();\n if (selectedNodeId) {\n const data = { selected_node: selectedNodeId };\n urlInfo[\"data\"] = data;\n }\n }\n };\n\n if (typeof dataUrl === \"function\") {\n return dataUrl(node);\n } else if (typeof dataUrl === \"string\") {\n return getUrlFromString(dataUrl);\n } else if (dataUrl && typeof dataUrl === \"object\") {\n setUrlInfoData(dataUrl);\n return dataUrl;\n } else {\n return null;\n }\n }\n\n private getNodeIdToBeSelected(): NodeId | null {\n if (this.options.saveState) {\n return this.saveStateHandler.getNodeIdToBeSelected();\n } else {\n return null;\n }\n }\n\n private initTree(data: NodeData[]): void {\n const doInit = (): void => {\n if (!this.isInitialized) {\n this.isInitialized = true;\n this._triggerEvent(\"tree.init\");\n }\n };\n\n if (!this.options.nodeClass) {\n return;\n }\n\n this.tree = new this.options.nodeClass(\n null,\n true,\n this.options.nodeClass\n );\n\n this.selectNodeHandler.clear();\n\n this.tree.loadFromData(data);\n\n const mustLoadOnDemand = this.setInitialState();\n\n this._refreshElements(null);\n\n if (!mustLoadOnDemand) {\n doInit();\n } else {\n // Load data on demand and then init the tree\n this.setInitialStateOnDemand(doInit);\n }\n }\n\n // Set initial state, either by restoring the state or auto-opening nodes\n // result: must load nodes on demand?\n private setInitialState(): boolean {\n const restoreState = (): boolean[] => {\n // result: is state restored, must load on demand?\n if (!this.options.saveState) {\n return [false, false];\n } else {\n const state = this.saveStateHandler.getStateFromStorage();\n\n if (!state) {\n return [false, false];\n } else {\n const mustLoadOnDemand =\n this.saveStateHandler.setInitialState(state);\n\n // return true: the state is restored\n return [true, mustLoadOnDemand];\n }\n }\n };\n\n const autoOpenNodes = (): boolean => {\n // result: must load on demand?\n if (this.options.autoOpen === false) {\n return false;\n }\n\n const maxLevel = this.getAutoOpenMaxLevel();\n let mustLoadOnDemand = false;\n\n this.tree.iterate((node: Node, level: number) => {\n if (node.load_on_demand) {\n mustLoadOnDemand = true;\n return false;\n } else if (!node.hasChildren()) {\n return false;\n } else {\n node.is_open = true;\n return level !== maxLevel;\n }\n });\n\n return mustLoadOnDemand;\n };\n\n let [isRestored, mustLoadOnDemand] = restoreState(); // eslint-disable-line prefer-const\n\n if (!isRestored) {\n mustLoadOnDemand = autoOpenNodes();\n }\n\n return mustLoadOnDemand;\n }\n\n // Set the initial state for nodes that are loaded on demand\n // Call cb_finished when done\n private setInitialStateOnDemand(cbFinished: () => void): void {\n const restoreState = (): boolean => {\n if (!this.options.saveState) {\n return false;\n } else {\n const state = this.saveStateHandler.getStateFromStorage();\n\n if (!state) {\n return false;\n } else {\n this.saveStateHandler.setInitialStateOnDemand(\n state,\n cbFinished\n );\n\n return true;\n }\n }\n };\n\n const autoOpenNodes = (): void => {\n const maxLevel = this.getAutoOpenMaxLevel();\n let loadingCount = 0;\n\n const loadAndOpenNode = (node: Node): void => {\n loadingCount += 1;\n this._openNode(node, false, () => {\n loadingCount -= 1;\n openNodes();\n });\n };\n\n const openNodes = (): void => {\n this.tree.iterate((node: Node, level: number) => {\n if (node.load_on_demand) {\n if (!node.is_loading) {\n loadAndOpenNode(node);\n }\n\n return false;\n } else {\n this._openNode(node, false, null);\n\n return level !== maxLevel;\n }\n });\n\n if (loadingCount === 0) {\n cbFinished();\n }\n };\n\n openNodes();\n };\n\n if (!restoreState()) {\n autoOpenNodes();\n }\n }\n\n private getAutoOpenMaxLevel(): number {\n if (this.options.autoOpen === true) {\n return -1;\n } else if (typeof this.options.autoOpen === \"number\") {\n return this.options.autoOpen;\n } else if (typeof this.options.autoOpen === \"string\") {\n return parseInt(this.options.autoOpen, 10);\n } else {\n return 0;\n }\n }\n\n private handleClick = (\n e: JQuery.ClickEvent<HTMLElement, any, HTMLElement, HTMLElement>\n ): void => {\n const clickTarget = this.getClickTarget(e.target);\n\n if (clickTarget) {\n if (clickTarget.type === \"button\") {\n this.toggle(clickTarget.node, this.options.slide);\n\n e.preventDefault();\n e.stopPropagation();\n } else if (clickTarget.type === \"label\") {\n const node = clickTarget.node;\n const event = this._triggerEvent(\"tree.click\", {\n node,\n click_event: e,\n });\n\n if (!event.isDefaultPrevented()) {\n this.doSelectNode(node);\n }\n }\n }\n };\n\n private handleDblclick = (\n e: JQuery.DoubleClickEvent<HTMLElement, any, HTMLElement, HTMLElement>\n ): void => {\n const clickTarget = this.getClickTarget(e.target);\n\n if (clickTarget?.type === \"label\") {\n this._triggerEvent(\"tree.dblclick\", {\n node: clickTarget.node,\n click_event: e,\n });\n }\n };\n\n private getClickTarget(element: EventTarget): ClickTarget | null {\n const $target = jQuery(element);\n\n const $button = $target.closest(\".jqtree-toggler\");\n\n if ($button.length) {\n const node = this.getNode($button as JQuery<HTMLElement>);\n\n if (node) {\n return {\n type: \"button\",\n node,\n };\n }\n } else {\n const $el = $target.closest(\".jqtree-element\");\n if ($el.length) {\n const node = this.getNode($el as JQuery<HTMLElement>);\n if (node) {\n return {\n type: \"label\",\n node,\n };\n }\n }\n }\n\n return null;\n }\n\n private getNode($element: JQuery<HTMLElement>): null | Node {\n const $li = $element.closest(\"li.jqtree_common\");\n if ($li.length === 0) {\n return null;\n } else {\n return $li.data(\"node\") as Node;\n }\n }\n\n private handleContextmenu = (\n e: JQuery.ContextMenuEvent<HTMLElement, any, HTMLElement, HTMLElement>\n ) => {\n const $div = jQuery(e.target).closest(\"ul.jqtree-tree .jqtree-element\");\n if ($div.length) {\n const node = this.getNode($div);\n if (node) {\n e.preventDefault();\n e.stopPropagation();\n\n this._triggerEvent(\"tree.contextmenu\", {\n node,\n click_event: e,\n });\n return false;\n }\n }\n\n return null;\n };\n\n private saveState(): void {\n if (this.options.saveState) {\n this.saveStateHandler.saveState();\n }\n }\n\n private selectCurrentNode(mustSetFocus: boolean): void {\n const node = this.getSelectedNode();\n if (node) {\n const nodeElement = this._getNodeElementForNode(node);\n if (nodeElement) {\n nodeElement.select(mustSetFocus);\n }\n }\n }\n\n private deselectCurrentNode(): void {\n const node = this.getSelectedNode();\n if (node) {\n this.removeFromSelection(node);\n }\n }\n\n private getDefaultClosedIcon(): string {\n if (this.options.rtl) {\n // triangle to the left\n return \"◀\";\n } else {\n // triangle to the right\n return \"►\";\n }\n }\n\n private getRtlOption(): boolean {\n if (this.options.rtl != null) {\n return this.options.rtl;\n } else {\n const dataRtl = this.element.data(\"rtl\") as unknown;\n\n if (\n dataRtl !== null &&\n dataRtl !== false &&\n dataRtl !== undefined\n ) {\n return true;\n } else {\n return false;\n }\n }\n }\n\n private doSelectNode(\n node: Node | null,\n optionsParam?: SelectNodeOptions\n ): void {\n const saveState = (): void => {\n if (this.options.saveState) {\n this.saveStateHandler.saveState();\n }\n };\n\n if (!node) {\n // Called with empty node -> deselect current node\n this.deselectCurrentNode();\n saveState();\n return;\n }\n const defaultOptions = { mustSetFocus: true, mustToggle: true };\n const selectOptions = { ...defaultOptions, ...(optionsParam || {}) };\n\n const canSelect = (): boolean => {\n if (this.options.onCanSelectNode) {\n return (\n this.options.selectable === true &&\n this.options.onCanSelectNode(node)\n );\n } else {\n return this.options.selectable === true;\n }\n };\n\n const openParents = (): void => {\n const parent = node.parent;\n\n if (parent && parent.parent && !parent.is_open) {\n this.openNode(parent, false);\n }\n };\n\n if (!canSelect()) {\n return;\n }\n\n if (this.selectNodeHandler.isNodeSelected(node)) {\n if (selectOptions.mustToggle) {\n this.deselectCurrentNode();\n this._triggerEvent(\"tree.select\", {\n node: null,\n previous_node: node,\n });\n }\n } else {\n const deselectedNode = this.getSelectedNode() || null;\n this.deselectCurrentNode();\n this.addToSelection(node, selectOptions.mustSetFocus);\n\n this._triggerEvent(\"tree.select\", {\n node,\n deselected_node: deselectedNode,\n });\n openParents();\n }\n\n saveState();\n }\n\n private doLoadData(data: NodeData[] | null, parentNode: Node | null): void {\n if (!data) {\n return;\n } else {\n this._triggerEvent(\"tree.load_data\", { tree_data: data });\n\n if (parentNode) {\n this.deselectNodes(parentNode);\n this.loadSubtree(data, parentNode);\n } else {\n this.initTree(data);\n }\n\n if (this.isDragging()) {\n this.dndHandler.refresh();\n }\n }\n }\n\n private deselectNodes(parentNode: Node): void {\n const selectedNodesUnderParent =\n this.selectNodeHandler.getSelectedNodesUnder(parentNode);\n for (const n of selectedNodesUnderParent) {\n this.selectNodeHandler.removeFromSelection(n);\n }\n }\n\n private loadSubtree(data: NodeData[], parentNode: Node): void {\n parentNode.loadFromData(data);\n\n parentNode.load_on_demand = false;\n parentNode.is_loading = false;\n\n this._refreshElements(parentNode);\n }\n\n private doLoadDataFromUrl(\n urlInfoParam: string | JQuery.AjaxSettings | null,\n parentNode: Node | null,\n onFinished: HandleFinishedLoading | null\n ): void {\n const urlInfo = urlInfoParam || this.getDataUrlInfo(parentNode);\n\n this.dataLoader.loadFromUrl(urlInfo, parentNode, onFinished);\n }\n\n private loadFolderOnDemand(\n node: Node,\n slide = true,\n onFinished: OnFinishOpenNode | null\n ): void {\n node.is_loading = true;\n\n this.doLoadDataFromUrl(null, node, () => {\n this._openNode(node, slide, onFinished);\n });\n }\n}\n\nSimpleWidget.register(JqTreeWidget, \"tree\");\n"],"names":["version","Position","positionNames","before","Before","after","After","inside","Inside","none","None","getPositionName","position","name","Object","prototype","hasOwnProperty","call","getPosition","isNodeRecordWithChildren","data","Array","Node","o","isRoot","nodeClass","isEmptyFolder","load_on_demand","setData","children","parent","idMapping","Map","tree","key","value","removeChildren","node","createNode","addChild","length","loadFromData","push","setParent","index","splice","doRemoveChild","indexOf","hasChildren","callback","_iterate","level","child","result","movedNode","targetNode","isParentOf","addChildAtPosition","getChildIndex","includeParent","getDataFromNodes","nodes","map","tmpNode","k","v","getNodeByCallback","n","iterate","nodeInfo","childIndex","newParent","originalParent","removeChild","nodeId","get","id","set","removeNodeFromIndex","previousIndex","nextIndex","filter","f","includeChildren","is_open","nextSibling","getNextSibling","getNextNode","previousSibling","getPreviousSibling","getLastChild","getParent","lastChild","addNode","nodeData","addChildren","childrenData","initFromData","addNodeToIndex","getNodeClass","DragAndDropHandler","treeWidget","hoveredArea","hitAreas","isDragging","currentItem","positionInfo","$element","jQuery","target","mustCaptureElement","options","onIsMoveHandle","nodeElement","_getNodeElement","onCanMove","pageX","undefined","pageY","refresh","offset","left","top","dragElement","DragElement","element","autoEscape","addClass","move","area","findHoveredArea","canMoveToArea","isFolder","stopOpenFolderTimer","mustOpenFolderTimer","startOpenFolderTimer","updateDropHint","removeDropHint","onDragMove","originalEvent","moveItem","clear","removeHover","removeHitAreas","removeClass","onDragStop","generateHitAreas","_getNodeElementForNode","hitAreasGenerator","HitAreasGenerator","getTreeDimensions","bottom","generate","is","onCanMoveTo","positionName","remove","previousGhost","x","y","dimensions","right","low","high","mid","addDropHint","folder","openFolder","_openNode","slide","openFolderDelay","openFolderTimer","window","setTimeout","clearTimeout","previousParent","doMove","moveNode","empty","_refreshElements","event","_triggerEvent","move_info","moved_node","target_node","previous_parent","do_move","original_event","isDefaultPrevented","el","width","height","_getScrollLeft","VisibleNodeIterator","isFirstNode","_iterateNode","nextNode","mustIterateInside","handleFirstNode","handleNode","handleOpenFolder","handleClosedFolder","childrenLength","forEach","_","i","handleAfterOpenFolder","currentNode","treeBottom","positions","lastTop","previousTop","group","generateHitAreasForGroup","addPosition","getTop","positionsInGroup","positionCount","Math","min","areaHeight","round","areaTop","nodeName","offsetX","offsetY","$tree","text","html","css","append","isInt","isFunction","getBoolString","ElementsRenderer","openedIconElement","createButtonElement","openedIcon","closedIconElement","closedIcon","fromNode","renderFromNode","renderFromRoot","createDomElements","$previousLi","li","createLi","getLevel","attachNodeData","isRootNode","ul","createUl","appendChild","classString","role","rtl","dragAndDrop","document","createElement","className","setAttribute","isSelected","Boolean","selectNodeHandler","isNodeSelected","mustShowFolder","showEmptyFolder","createFolderLi","createNodeLi","onCreateLi","buttonClasses","getButtonClasses","folderClasses","getFolderClasses","iconElement","div","buttonLink","cloneNode","buttonLeft","createTitleSpan","liClasses","join","isOpen","titleSpan","classes","tabIndex","textContent","innerHTML","is_loading","createTextNode","DataLoader","urlInfo","parentNode","onFinished","$el","getDomElement","addLoadingClass","notifyLoading","stopLoading","removeLoadingClass","handleSuccess","loadData","parseData","handleError","jqXHR","onLoadFailed","submitRequest","isLoading","onLoading","urlInfoInput","url","ajaxSettings","_objectSpread","method","cache","dataType","success","error","toUpperCase","ajax","dataFilter","getParsedData","JSON","parse","parsedData","KeyHandler","e","canHandleKeyboard","selectedNode","getSelectedNode","which","DOWN","moveDown","UP","moveUp","RIGHT","moveRight","LEFT","moveLeft","keyboardSupport","on","handleKeyDown","off","selectNode","getPreviousNode","openNode","closeNode","scrollHandler","isScrolledIntoView","find","scrollToNode","isFocusOnTree","register","widgetClass","widgetName","getDataKey","getWidgetData","dataKey","widget","SimpleWidget","createWidget","existingWidget","simpleWidgetClass","init","destroyWidget","destroy","removeData","callFunction","functionName","args","simpleWidget","widgetFunction","apply","fn","argument1","defaults","constructor","deinit","getPositionInfoFromMouseEvent","getPositionInfoFromTouch","touch","MouseWidget","button","handleMouseDown","cancelable","preventDefault","handleMouseMove","handleMouseUp","touches","changedTouches","addEventListener","mouseDown","passive","touchStart","isMouseStarted","mouseDelayTimer","isMouseDelayMet","mouseDownInfo","removeEventListener","removeMouseMoveEventListeners","mouseCapture","handleStartMouse","mouseMove","touchMove","mouseUp","touchEnd","mouseDelay","getMouseDelay","startMouseDelayTimer","mouseDrag","mouseStart","mouseStop","SaveStateHandler","state","stringify","getState","onSetStateFromStorage","supportsLocalStorage","localStorage","setItem","getKeyName","jsonData","loadFromStorage","parseState","getOpenNodeIds","openNodes","getSelectedNodeIds","selectedNodeIds","getSelectedNodes","open_nodes","selected_node","mustLoadOnDemand","openInitialNodes","resetSelection","selectInitialNodes","cbFinished","doSetInitialStateOnDemand","getStateFromStorage","onGetStateFromStorage","getItem","nodeIds","getNodeById","selectCount","addToSelection","selectedNodes","removeFromSelection","nodeIdsParam","loadingCount","newNodesIds","loadAndOpenNode","saveState","testSupport","sessionStorage","removeItem","_supportsLocalStorage","ScrollHandler","isInitialized","ensureInit","checkVerticalScrolling","checkHorizontalScrolling","$scrollParent","scrollTop","treeTop","elementBottom","viewBottom","elementTop","viewTop","elHeight","originalTop","scrollParentTop","windowHeight","scrollLeft","getParentWithOverflow","cssAttributes","hasOverFlow","attr","overflowValue","parents","setDocumentAsScrollParent","tagName","initScrollParent","scrollParent","distanceBottom","offsetHeight","refreshHitAreas","distanceTop","dndHandler","handleVerticalScrollingWithScrollParent","handleVerticalScrollingWithDocument","handleHorizontalScrollingWithParent","handleHorizontalScrollingWithDocument","scrollParentOffset","canScrollRight","clientWidth","scrollWidth","canScrollLeft","rightEdge","leftEdge","isNearRightEdge","isNearLeftEdge","max","$document","windowWidth","SelectNodeHandler","Set","selectedSingleNode","has","add","activeElement","_containsElement","NodeElement","mustShowBorderDropHint","BorderDropHint","GhostDropHint","mustSetFocus","$li","getLi","$span","getSpan","trigger","removeAttr","blur","FolderElement","animationSpeed","$button","getButton","buttonEl","icon","renderer","doOpen","getUl","slideDown","show","doClose","slideUp","hide","$div","elWidth","outerHeight","$hint","$ghost","moveAfter","moveBefore","moveInsideOpenFolder","moveInside","childElement","NODE_PARAM_IS_EMPTY","PARAM_IS_EMPTY","JqTreeWidget","clickTarget","getClickTarget","type","toggle","stopPropagation","click_event","doSelectNode","closest","getNode","slideParam","Error","optionsParam","getData","doLoadData","param1","param2","param3","doLoadDataFromUrl","getNodeByName","getNodeByNameMustExist","getNodesByProperty","parseParams","close","newNodeInfo","existingNode","newNode","addAfter","addBefore","addParent","parentNodeParam","prepend","idIsChanged","subtree","positionIndex","saveStateHandler","select","deselect","nodeOffset","nodeTop","treeOffset","scrollToY","setInitialState","option","keyHandler","__version__","eventName","values","Event","doOpenNode","_node","_slide","_onFinished","folderElement","open","loadFolderOnDemand","mustSelect","isSelectedNodeInSubtree","render","selectCurrentNode","getScrollLeft","getRtlOption","getDefaultClosedIcon","dataLoader","initData","handleClick","handleDblclick","useContextMenu","handleContextmenu","checkScrolling","startDndDelay","dataUrl","getDataUrlInfo","getUrlFromString","setUrlInfoData","selectedNodeId","getNodeIdToBeSelected","doInit","setInitialStateOnDemand","restoreState","autoOpenNodes","autoOpen","maxLevel","getAutoOpenMaxLevel","isRestored","parseInt","$target","dataRtl","deselectCurrentNode","defaultOptions","mustToggle","selectOptions","canSelect","onCanSelectNode","selectable","openParents","previous_node","deselectedNode","deselected_node","tree_data","deselectNodes","loadSubtree","initTree","selectedNodesUnderParent","getSelectedNodesUnder","urlInfoParam","loadFromUrl"],"mappings":"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"}
|