jqtree 1.9.0 → 1.9.1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"tree.jquery.debug.js","sources":["src/dataLoader.ts","src/positionUtils.ts","src/dragAndDropHandler/binarySearch.ts","src/dragAndDropHandler/dragElement.ts","src/dragAndDropHandler/iterateVisibleNodes.ts","src/dragAndDropHandler/generateHitAreas.ts","src/dragAndDropHandler/index.ts","src/util.ts","src/elementsRenderer.ts","src/keyHandler.ts","src/mouseUtils.ts","src/mouseHandler.ts","src/nodeUtils.ts","src/node.ts","src/nodeElement/borderDropHint.ts","src/nodeElement/ghostDropHint.ts","src/nodeElement/index.ts","src/animation.ts","src/nodeElement/folderElement.ts","src/saveStateHandler.ts","src/scrollHandler/scrollParent.ts","src/scrollHandler/containerScrollParent.ts","src/scrollHandler/documentScrollParent.ts","src/scrollHandler/createScrollParent.ts","src/scrollHandler.ts","src/selectNodeHandler.ts","src/simple.widget.ts","src/version.ts","src/tree.jquery.ts"],"sourcesContent":["import type { LoadData, TriggerEvent } from \"./jqtreeMethodTypes\";\nimport type { DataFilter, OnLoadFailed, OnLoading } from \"./jqtreeOptions\";\nimport type { Node } from \"./node\";\n\nexport type HandleFinishedLoading = () => void;\n\ninterface DataLoaderParams {\n dataFilter?: DataFilter;\n loadData: LoadData;\n onLoadFailed?: OnLoadFailed;\n onLoading?: OnLoading;\n treeElement: HTMLElement;\n triggerEvent: TriggerEvent;\n}\n\nexport default class DataLoader {\n private _dataFilter?: DataFilter;\n private _loadData: LoadData;\n private _onLoadFailed?: OnLoadFailed;\n private _onLoading?: OnLoading;\n private _treeElement: HTMLElement;\n private _triggerEvent: TriggerEvent;\n\n constructor({\n dataFilter,\n loadData,\n onLoadFailed,\n onLoading,\n treeElement,\n triggerEvent,\n }: DataLoaderParams) {\n this._dataFilter = dataFilter;\n this._loadData = loadData;\n this._onLoadFailed = onLoadFailed;\n this._onLoading = onLoading;\n this._treeElement = treeElement;\n this._triggerEvent = triggerEvent;\n }\n\n public loadFromUrl(\n urlInfo: JQuery.AjaxSettings | null | string,\n parentNode: Node | null,\n onFinished: HandleFinishedLoading | null,\n ): void {\n if (!urlInfo) {\n return;\n }\n\n const element = this._getDomElement(parentNode);\n this._addLoadingClass(element);\n this._notifyLoading(true, parentNode, element);\n\n const stopLoading = (): void => {\n this._removeLoadingClass(element);\n this._notifyLoading(false, parentNode, element);\n };\n\n const handleSuccess = (data: NodeData[]): void => {\n stopLoading();\n this._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._onLoadFailed) {\n this._onLoadFailed(jqXHR);\n }\n };\n\n this._submitRequest(urlInfo, handleSuccess, handleError);\n }\n\n private _addLoadingClass(element: HTMLElement): void {\n element.classList.add(\"jqtree-loading\");\n }\n\n private _getDomElement(parentNode: Node | null): HTMLElement {\n if (parentNode?.element) {\n return parentNode.element;\n } else {\n return this._treeElement;\n }\n }\n\n private _notifyLoading(\n isLoading: boolean,\n node: Node | null,\n element: HTMLElement,\n ): void {\n const $el = jQuery(element);\n\n if (this._onLoading) {\n this._onLoading(isLoading, node, $el);\n }\n\n this._triggerEvent(\"tree.loading_data\", {\n $el,\n isLoading,\n node,\n });\n }\n\n private _parseData(data: NodeData[]): NodeData[] {\n if (this._dataFilter) {\n return this._dataFilter(data);\n } else {\n return data;\n }\n }\n\n private _removeLoadingClass(element: HTMLElement): void {\n element.classList.remove(\"jqtree-loading\");\n }\n\n private _submitRequest(\n urlInfoInput: JQuery.AjaxSettings | string,\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 cache: false,\n dataType: \"json\",\n error: handleError,\n method: \"GET\",\n success: handleSuccess,\n ...urlInfo,\n };\n\n ajaxSettings.method = ajaxSettings.method?.toUpperCase() ?? \"GET\";\n\n void jQuery.ajax(ajaxSettings);\n }\n}\n","interface TopLeftPosition {\n left: number;\n top: number;\n}\n\n// Get the top position of the HTML element.\nexport const getOffsetTop = (element: HTMLElement): number =>\n getElementPosition(element).top;\n\n// Get the top left position of the HTML element.\nexport const getElementPosition = (element: HTMLElement): TopLeftPosition => {\n const rect = element.getBoundingClientRect();\n\n return {\n left: rect.x + window.scrollX,\n top: rect.y + window.scrollY,\n };\n};\n","function binarySearch<T>(items: T[], compareFn: (a: T) => number): null | T {\n let low = 0;\n let high = items.length;\n\n while (low < high) {\n const mid = (low + high) >> 1;\n const item = items[mid];\n\n if (item === undefined) {\n return null;\n }\n\n const compareResult = compareFn(item);\n\n if (compareResult > 0) {\n high = mid;\n } else if (compareResult < 0) {\n low = mid + 1;\n } else {\n return item;\n }\n }\n\n return null;\n}\n\nexport default binarySearch;\n","interface DragElementParams {\n autoEscape: boolean;\n nodeName: string;\n offsetX: number;\n offsetY: number;\n treeElement: HTMLElement;\n}\n\nclass DragElement {\n private _element: HTMLElement;\n private _offsetX: number;\n private _offsetY: number;\n\n constructor({\n autoEscape,\n nodeName,\n offsetX,\n offsetY,\n treeElement,\n }: DragElementParams) {\n this._offsetX = offsetX;\n this._offsetY = offsetY;\n\n this._element = this._createElement(nodeName, autoEscape);\n\n treeElement.appendChild(this._element);\n }\n\n public move(pageX: number, pageY: number): void {\n this._element.style.left = `${pageX - this._offsetX}px`;\n this._element.style.top = `${pageY - this._offsetY}px`;\n }\n\n public remove(): void {\n this._element.remove();\n }\n\n private _createElement(nodeName: string, autoEscape: boolean) {\n const element = document.createElement(\"span\");\n element.classList.add(\"jqtree-title\", \"jqtree-dragging\");\n\n if (autoEscape) {\n element.textContent = nodeName;\n } else {\n element.innerHTML = nodeName;\n }\n\n element.style.position = \"absolute\";\n\n return element;\n }\n}\n\nexport default DragElement;\n","import type { Node } from \"../node\";\n\ninterface Options {\n handleAfterOpenFolder: (node: Node, nextNode: Node | null) => void;\n handleClosedFolder: (\n node: Node,\n nextNode: Node | null,\n element: HTMLElement,\n ) => void;\n handleFirstNode: (node: Node) => void;\n handleNode: (\n node: Node,\n nextNode: Node | null,\n element: HTMLElement,\n ) => void;\n\n /*\n override\n return\n - true: continue iterating\n - false: stop iterating\n */\n handleOpenFolder: (node: Node, element: HTMLElement) => boolean;\n}\n\nconst iterateVisibleNodes = (\n tree: Node,\n {\n handleAfterOpenFolder,\n handleClosedFolder,\n handleFirstNode,\n handleNode,\n handleOpenFolder,\n }: Options,\n) => {\n let isFirstNode = true;\n\n const iterate = (node: Node, nextNode: Node | null): void => {\n let mustIterateInside =\n (node.is_open || !node.element) && node.hasChildren();\n\n let element: HTMLElement | null = null;\n\n // Is the element visible?\n if (node.element?.offsetParent) {\n element = node.element;\n\n if (isFirstNode) {\n handleFirstNode(node);\n isFirstNode = false;\n }\n\n if (!node.hasChildren()) {\n handleNode(node, nextNode, node.element);\n } else if (node.is_open) {\n if (!handleOpenFolder(node, node.element)) {\n mustIterateInside = false;\n }\n } else {\n handleClosedFolder(node, nextNode, element);\n }\n }\n\n if (mustIterateInside) {\n const childrenLength = node.children.length;\n node.children.forEach((_, i) => {\n const child = node.children[i];\n\n if (child) {\n if (i === childrenLength - 1) {\n iterate(child, null);\n } else {\n const nextChild = node.children[i + 1];\n\n if (nextChild) {\n iterate(child, nextChild);\n }\n }\n }\n });\n\n if (node.is_open && element) {\n handleAfterOpenFolder(node, nextNode);\n }\n }\n };\n\n iterate(tree, null);\n};\n\nexport default iterateVisibleNodes;\n","import type { Node, Position } from \"../node\";\nimport type { HitArea } from \"./types\";\n\nimport { getOffsetTop } from \"../positionUtils\";\nimport iterateVisibleNodes from \"./iterateVisibleNodes\";\n\ninterface HitPosition {\n node: Node;\n position: null | Position;\n top: number;\n}\n\nexport const generateHitPositions = (\n tree: Node,\n currentNode: Node,\n): HitPosition[] => {\n const hitPositions: HitPosition[] = [];\n let lastTop = 0;\n\n const addHitPosition = (\n node: Node,\n position: null | Position,\n top: number,\n ) => {\n hitPositions.push({\n node,\n position,\n top,\n });\n lastTop = top;\n };\n\n const handleAfterOpenFolder = (node: Node, nextNode: Node | null) => {\n if (node === currentNode || nextNode === currentNode) {\n // Cannot move before or after current item\n addHitPosition(node, null, lastTop);\n } else {\n addHitPosition(node, \"after\", lastTop);\n }\n };\n\n const handleClosedFolder = (\n node: Node,\n nextNode: Node | null,\n element: HTMLElement,\n ) => {\n const top = getOffsetTop(element);\n\n if (node === currentNode) {\n // Cannot move after current item\n addHitPosition(node, null, top);\n } else {\n addHitPosition(node, \"inside\", top);\n\n // Cannot move before current item\n if (nextNode !== currentNode) {\n addHitPosition(node, \"after\", top);\n }\n }\n };\n\n const handleFirstNode = (node: Node) => {\n if (node !== currentNode && node.element) {\n addHitPosition(node, \"before\", getOffsetTop(node.element));\n }\n };\n\n const handleNode = (\n node: Node,\n nextNode: Node | null,\n element: HTMLElement,\n ) => {\n const top = getOffsetTop(element);\n\n if (node === currentNode) {\n // Cannot move inside current item\n addHitPosition(node, null, top);\n } else {\n addHitPosition(node, \"inside\", top);\n }\n\n if (nextNode === currentNode || node === currentNode) {\n // Cannot move before or after current item\n addHitPosition(node, null, top);\n } else {\n addHitPosition(node, \"after\", top);\n }\n };\n\n const handleOpenFolder = (node: Node, element: HTMLElement) => {\n if (node === currentNode) {\n // Cannot move inside current item\n\n // Dnd over the current element is not possible: add a position with type None for the top and the bottom.\n const top = getOffsetTop(element);\n const height = element.clientHeight;\n addHitPosition(node, null, top);\n\n if (height > 5) {\n // Subtract 5 pixels to allow more space for the next element.\n addHitPosition(node, null, top + height - 5);\n }\n\n // Stop iterating\n return false;\n }\n\n // Cannot move before current item\n if (node.children[0] !== currentNode) {\n addHitPosition(node, \"inside\", getOffsetTop(element));\n }\n\n // Continue iterating\n return true;\n };\n\n iterateVisibleNodes(tree, {\n handleAfterOpenFolder,\n handleClosedFolder,\n handleFirstNode,\n handleNode,\n handleOpenFolder,\n });\n\n return hitPositions;\n};\n\nexport const generateHitAreasForGroup = (\n hitAreas: HitArea[],\n positionsInGroup: HitPosition[],\n top: number,\n bottom: number,\n) => {\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 for (let i = 0; i < positionCount; i++) {\n const position = positionsInGroup[i] as HitPosition;\n\n if (position.position) {\n hitAreas.push({\n bottom: areaTop + areaHeight,\n node: position.node,\n position: position.position,\n top: areaTop,\n });\n }\n\n areaTop += areaHeight;\n }\n};\n\nexport const generateHitAreasFromPositions = (\n hitPositions: HitPosition[],\n treeBottom: number,\n): HitArea[] => {\n if (!hitPositions.length) {\n return [];\n }\n\n let previousTop = (hitPositions[0] as HitPosition).top;\n let group: HitPosition[] = [];\n const hitAreas: HitArea[] = [];\n\n for (const position of hitPositions) {\n if (position.top !== previousTop && group.length) {\n generateHitAreasForGroup(\n hitAreas,\n group,\n previousTop,\n position.top,\n );\n\n previousTop = position.top;\n group = [];\n }\n\n group.push(position);\n }\n\n generateHitAreasForGroup(hitAreas, group, previousTop, treeBottom);\n\n return hitAreas;\n};\n\nconst generateHitAreas = (tree: Node, currentNode: Node, treeBottom: number) =>\n generateHitAreasFromPositions(\n generateHitPositions(tree, currentNode),\n treeBottom,\n );\n\nexport default generateHitAreas;\n","import type {\n GetScrollLeft,\n GetTree,\n OpenNode,\n RefreshElements,\n TriggerEvent,\n} from \"../jqtreeMethodTypes\";\nimport type {\n DragMethod,\n OnCanMove,\n OnCanMoveTo,\n OnIsMoveHandle,\n} from \"../jqtreeOptions\";\nimport type { PositionInfo } from \"../mouseUtils\";\nimport type { Node } from \"../node\";\nimport type NodeElement from \"../nodeElement\";\nimport type { DropHint, HitArea } from \"./types\";\n\nimport { getElementPosition } from \"../positionUtils\";\nimport binarySearch from \"./binarySearch\";\nimport DragElement from \"./dragElement\";\nimport generateHitAreas from \"./generateHitAreas\";\n\ninterface Dimensions {\n bottom: number;\n left: number;\n right: number;\n top: number;\n}\n\ninterface DragAndDropHandlerParams {\n autoEscape?: boolean;\n getNodeElement: GetNodeElement;\n getNodeElementForNode: GetNodeElementForNode;\n getScrollLeft: GetScrollLeft;\n getTree: GetTree;\n onCanMove?: OnCanMove;\n onCanMoveTo?: OnCanMoveTo;\n onDragMove?: DragMethod;\n onDragStop?: DragMethod;\n onIsMoveHandle?: OnIsMoveHandle;\n openFolderDelay: false | number;\n openNode: OpenNode;\n refreshElements: RefreshElements;\n slide: boolean;\n treeElement: HTMLElement;\n triggerEvent: TriggerEvent;\n}\ntype GetNodeElement = (element: HTMLElement) => NodeElement | null;\n\ntype GetNodeElementForNode = (node: Node) => NodeElement;\n\nexport class DragAndDropHandler {\n public currentItem: NodeElement | null;\n public hitAreas: HitArea[];\n public hoveredArea: HitArea | null;\n public isDragging: boolean;\n\n private _autoEscape?: boolean;\n private _dragElement: DragElement | null;\n private _getNodeElement: GetNodeElement;\n private _getNodeElementForNode: GetNodeElementForNode;\n private _getScrollLeft: GetScrollLeft;\n private _getTree: GetTree;\n private _onCanMove?: OnCanMove;\n private _onCanMoveTo?: OnCanMoveTo;\n private _onDragMove?: DragMethod;\n private _onDragStop?: DragMethod;\n private _onIsMoveHandle?: OnIsMoveHandle;\n private _openFolderDelay: false | number;\n private _openFolderTimer: null | number;\n private _openNode: OpenNode;\n private _previousGhost: DropHint | null;\n private _refreshElements: RefreshElements;\n private _slide: boolean;\n private _treeElement: HTMLElement;\n private _triggerEvent: TriggerEvent;\n\n constructor({\n autoEscape,\n getNodeElement,\n getNodeElementForNode,\n getScrollLeft,\n getTree,\n onCanMove,\n onCanMoveTo,\n onDragMove,\n onDragStop,\n onIsMoveHandle,\n openFolderDelay,\n openNode,\n refreshElements,\n slide,\n treeElement,\n triggerEvent,\n }: DragAndDropHandlerParams) {\n this._autoEscape = autoEscape;\n this._getNodeElement = getNodeElement;\n this._getNodeElementForNode = getNodeElementForNode;\n this._getScrollLeft = getScrollLeft;\n this._getTree = getTree;\n this._onCanMove = onCanMove;\n this._onCanMoveTo = onCanMoveTo;\n this._onDragMove = onDragMove;\n this._onDragStop = onDragStop;\n this._onIsMoveHandle = onIsMoveHandle;\n this._openFolderDelay = openFolderDelay;\n this._openNode = openNode;\n this._refreshElements = refreshElements;\n this._slide = slide;\n this._treeElement = treeElement;\n this._triggerEvent = triggerEvent;\n\n this.hoveredArea = null;\n this.hitAreas = [];\n this.isDragging = false;\n this.currentItem = null;\n }\n\n public mouseCapture(positionInfo: PositionInfo): boolean | null {\n const element = positionInfo.target;\n\n if (!this._mustCaptureElement(element)) {\n return null;\n }\n\n if (this._onIsMoveHandle && !this._onIsMoveHandle(jQuery(element))) {\n return null;\n }\n\n let nodeElement = this._getNodeElement(element);\n\n if (nodeElement && this._onCanMove) {\n if (!this._onCanMove(nodeElement.node)) {\n nodeElement = null;\n }\n }\n\n this.currentItem = nodeElement;\n return this.currentItem != null;\n }\n\n public mouseDrag(positionInfo: PositionInfo): boolean {\n if (!this.currentItem || !this._dragElement) {\n return false;\n }\n\n this._dragElement.move(positionInfo.pageX, positionInfo.pageY);\n\n const area = this._findHoveredArea(\n positionInfo.pageX,\n positionInfo.pageY,\n );\n\n if (area && this._canMoveToArea(area, this.currentItem)) {\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._onDragMove) {\n this._onDragMove(\n this.currentItem.node,\n positionInfo.originalEvent,\n );\n }\n }\n\n return true;\n }\n\n public mouseStart(positionInfo: PositionInfo): boolean {\n if (!this.currentItem) {\n return false;\n }\n\n this.refresh();\n\n const { left, top } = getElementPosition(positionInfo.target);\n\n const node = this.currentItem.node;\n\n this._dragElement = new DragElement({\n autoEscape: this._autoEscape ?? true,\n nodeName: node.name,\n offsetX: positionInfo.pageX - left,\n offsetY: positionInfo.pageY - top,\n treeElement: this._treeElement,\n });\n\n this.isDragging = true;\n this.currentItem.element.classList.add(\"jqtree-moving\");\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.classList.remove(\"jqtree-moving\");\n this.currentItem = null;\n }\n\n this.isDragging = false;\n\n if (!this.hoveredArea && currentItem) {\n if (this._onDragStop) {\n this._onDragStop(currentItem.node, positionInfo.originalEvent);\n }\n }\n\n return false;\n }\n\n public refresh(): void {\n this._removeHitAreas();\n\n if (this.currentItem) {\n const currentNode = this.currentItem.node;\n this._generateHitAreas(currentNode);\n this.currentItem = this._getNodeElementForNode(currentNode);\n\n if (this.isDragging) {\n this.currentItem.element.classList.add(\"jqtree-moving\");\n }\n }\n }\n\n private _canMoveToArea(area: HitArea, currentItem: NodeElement): boolean {\n if (!this._onCanMoveTo) {\n return true;\n }\n\n return this._onCanMoveTo(currentItem.node, area.node, area.position);\n }\n\n private _clear(): void {\n if (this._dragElement) {\n this._dragElement.remove();\n this._dragElement = null;\n }\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 return binarySearch<HitArea>(this.hitAreas, (area) => {\n if (y < area.top) {\n return 1;\n } else if (y > area.bottom) {\n return -1;\n } else {\n return 0;\n }\n });\n }\n\n private _generateHitAreas(currentNode: Node): void {\n const tree = this._getTree();\n\n if (!tree) {\n this.hitAreas = [];\n } else {\n this.hitAreas = generateHitAreas(\n tree,\n currentNode,\n this._getTreeDimensions().bottom,\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 treePosition = getElementPosition(this._treeElement);\n const left = treePosition.left + this._getScrollLeft();\n const top = treePosition.top;\n\n return {\n bottom: top + this._treeElement.clientHeight + 16,\n left,\n right: left + this._treeElement.clientWidth,\n top,\n };\n }\n\n /* Move the dragged node to the selected position in the tree. */\n private _moveItem(positionInfo: PositionInfo): void {\n if (\n this.currentItem &&\n this.hoveredArea?.position &&\n this._canMoveToArea(this.hoveredArea, this.currentItem)\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 === \"inside\") {\n this.hoveredArea.node.is_open = true;\n }\n\n const doMove = (): void => {\n const tree = this._getTree();\n\n if (tree) {\n tree.moveNode(movedNode, targetNode, position);\n\n this._treeElement.textContent = \"\";\n this._refreshElements(null);\n }\n };\n\n if (this._triggerEvent(\"tree.move\", {\n move_info: {\n do_move: doMove,\n moved_node: movedNode,\n original_event: positionInfo.originalEvent,\n position,\n previous_parent: previousParent,\n target_node: targetNode,\n },\n })) {\n doMove();\n }\n }\n }\n\n private _mustCaptureElement(element: HTMLElement): boolean {\n const nodeName = element.nodeName;\n\n return (\n nodeName !== \"INPUT\" &&\n nodeName !== \"SELECT\" &&\n nodeName !== \"TEXTAREA\"\n );\n }\n\n private _mustOpenFolderTimer(area: HitArea): boolean {\n const node = area.node;\n\n return node.isFolder() && !node.is_open && area.position === \"inside\";\n }\n\n private _removeDropHint(): void {\n if (this._previousGhost) {\n this._previousGhost.remove();\n }\n }\n\n private _removeHitAreas(): void {\n this.hitAreas = [];\n }\n\n private _removeHover(): void {\n this.hoveredArea = null;\n }\n\n private _startOpenFolderTimer(folder: Node): void {\n const openFolder = (): void => {\n this._openNode(folder, this._slide, () => {\n this.refresh();\n this._updateDropHint();\n });\n };\n\n this._stopOpenFolderTimer();\n\n const openFolderDelay = this._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 _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._getNodeElementForNode(this.hoveredArea.node);\n this._previousGhost = nodeElement.addDropHint(this.hoveredArea.position);\n }\n}\n","export const isInt = (n: unknown): boolean =>\n typeof n === \"number\" && n % 1 === 0;\n\nexport const getBoolString = (value: unknown): string =>\n value ? \"true\" : \"false\";\n","import type { GetTree, IsNodeSelected } from \"./jqtreeMethodTypes\";\nimport type { IconElement, OnCreateLi } from \"./jqtreeOptions\";\nimport type { Node } from \"./node\";\n\nimport { getBoolString } from \"./util\";\n\ninterface ElementsRendererParams {\n autoEscape: boolean;\n buttonLeft: boolean;\n closedIcon?: IconElement;\n dragAndDrop: boolean;\n getTree: GetTree;\n htmlElement: HTMLElement;\n isNodeSelected: IsNodeSelected;\n onCreateLi?: OnCreateLi;\n openedIcon?: IconElement;\n rtl?: boolean;\n showEmptyFolder: boolean;\n tabIndex?: number;\n}\n\nexport default class ElementsRenderer {\n public closedIconElement?: HTMLElement | Text;\n public openedIconElement?: HTMLElement | Text;\n private _autoEscape: boolean;\n private _buttonLeft: boolean;\n private _dragAndDrop: boolean;\n private _getTree: GetTree;\n private _htmlElement: HTMLElement;\n private _isNodeSelected: IsNodeSelected;\n private _onCreateLi?: OnCreateLi;\n private _rtl?: boolean;\n\n private _showEmptyFolder: boolean;\n private _tabIndex?: number;\n\n constructor({\n autoEscape,\n buttonLeft,\n closedIcon,\n dragAndDrop,\n getTree,\n htmlElement,\n isNodeSelected,\n onCreateLi,\n openedIcon,\n rtl,\n showEmptyFolder,\n tabIndex,\n }: ElementsRendererParams) {\n this._autoEscape = autoEscape;\n this._buttonLeft = buttonLeft;\n this._dragAndDrop = dragAndDrop;\n this._getTree = getTree;\n this._htmlElement = htmlElement;\n this._isNodeSelected = isNodeSelected;\n this._onCreateLi = onCreateLi;\n this._rtl = rtl;\n this._showEmptyFolder = showEmptyFolder;\n this._tabIndex = tabIndex;\n this.openedIconElement = this._createButtonElement(openedIcon ?? \"+\");\n this.closedIconElement = this._createButtonElement(closedIcon ?? \"-\");\n }\n\n public render(fromNode: Node | null): void {\n if (fromNode?.parent) {\n this.renderFromNode(fromNode);\n } else {\n this.renderFromRoot();\n }\n }\n\n public renderFromNode(node: Node): void {\n if (!node.element) {\n return;\n }\n\n const currentLi = node.element;\n const newLi = this._createLi(node, node.getLevel());\n currentLi.replaceWith(newLi);\n\n // create children\n this._createDomElements(newLi, node.children, false, node.getLevel() + 1);\n }\n\n public renderFromRoot(): void {\n this._htmlElement.textContent = '';\n\n const tree = this._getTree();\n\n if (tree) {\n this._createDomElements(this._htmlElement, tree.children, true, 1);\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 _createButtonElement(\n value: IconElement,\n ): HTMLElement | Text | undefined {\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 if ((value as HTMLElement).nodeType) {\n return value as HTMLElement;\n } else {\n return jQuery(value)[0];\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 if (child.hasChildren()) {\n this._createDomElements(li, child.children, false, level + 1);\n }\n }\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\", \"none\");\n\n // div\n const div = document.createElement(\"div\");\n div.className = \"jqtree-element jqtree_common\";\n div.setAttribute(\"role\", \"none\");\n\n li.appendChild(div);\n\n // button link\n const buttonLink = document.createElement(\"a\");\n buttonLink.className = buttonClasses;\n\n if (iconElement) {\n buttonLink.appendChild(iconElement.cloneNode(true));\n }\n\n if (this._buttonLeft) {\n div.appendChild(buttonLink);\n }\n\n // title span\n const titleSpan = this._createTitleSpan(\n node.name,\n isSelected,\n true,\n level,\n );\n titleSpan.setAttribute(\"aria-expanded\", getBoolString(node.is_open));\n div.appendChild(titleSpan);\n\n if (!this._buttonLeft) {\n div.appendChild(buttonLink);\n }\n\n return li;\n }\n\n /* Create the <li> element\n * Attach it to node.element.\n * Call onCreateLi\n */\n private _createLi(node: Node, level: number): HTMLLIElement {\n const isSelected = this._isNodeSelected(node);\n\n const mustShowFolder =\n node.isFolder() || (node.isEmptyFolder && this._showEmptyFolder);\n\n const li = mustShowFolder\n ? this._createFolderLi(node, level, isSelected)\n : this._createNodeLi(node, level, isSelected);\n\n this._attachNodeData(node, li);\n\n if (this._onCreateLi) {\n this._onCreateLi(node, jQuery(li), isSelected);\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\", \"none\");\n\n // div\n const div = document.createElement(\"div\");\n div.className = \"jqtree-element jqtree_common\";\n div.setAttribute(\"role\", \"none\");\n\n li.appendChild(div);\n\n // title span\n const titleSpan = this._createTitleSpan(\n node.name,\n isSelected,\n false,\n level,\n );\n div.appendChild(titleSpan);\n\n return li;\n }\n\n private _createTitleSpan(\n nodeName: string,\n isSelected: boolean,\n isFolder: boolean,\n level: number,\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-${this._buttonLeft ? \"left\" : \"right\"}`;\n\n titleSpan.className = classes;\n\n if (isSelected) {\n const tabIndex = this._tabIndex;\n\n if (tabIndex !== undefined) {\n titleSpan.setAttribute(\"tabindex\", `${tabIndex}`);\n }\n }\n\n this._setTreeItemAriaAttributes(titleSpan, nodeName, level, isSelected);\n\n if (this._autoEscape) {\n titleSpan.textContent = nodeName;\n } else {\n titleSpan.innerHTML = nodeName;\n }\n\n return titleSpan;\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._rtl) {\n classString += \" jqtree-rtl\";\n }\n }\n\n if (this._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 _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._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 _setTreeItemAriaAttributes(\n element: HTMLElement,\n name: string,\n level: number,\n isSelected: boolean,\n ) {\n element.setAttribute(\"aria-label\", name);\n element.setAttribute(\"aria-level\", `${level}`);\n element.setAttribute(\"aria-selected\", getBoolString(isSelected));\n element.setAttribute(\"role\", \"treeitem\");\n }\n}\n","import type {\n CloseNode,\n GetSelectedNode,\n IsFocusOnTree,\n OpenNode,\n SelectNode,\n} from \"./jqtreeMethodTypes\";\nimport type { Node } from \"./node\";\n\ninterface KeyHandlerParams {\n closeNode: CloseNode;\n getSelectedNode: GetSelectedNode;\n isFocusOnTree: IsFocusOnTree;\n keyboardSupport: boolean;\n openNode: OpenNode;\n selectNode: SelectNode;\n}\n\nexport default class KeyHandler {\n private _closeNode: CloseNode;\n private _getSelectedNode: GetSelectedNode;\n\n private _isFocusOnTree: IsFocusOnTree;\n\n private _keyboardSupport: boolean;\n private _openNode: OpenNode;\n private _originalSelectNode: SelectNode;\n constructor({\n closeNode,\n getSelectedNode,\n isFocusOnTree,\n keyboardSupport,\n openNode,\n selectNode,\n }: KeyHandlerParams) {\n this._closeNode = closeNode;\n this._getSelectedNode = getSelectedNode;\n this._isFocusOnTree = isFocusOnTree;\n this._keyboardSupport = keyboardSupport;\n this._openNode = openNode;\n this._originalSelectNode = selectNode;\n\n if (keyboardSupport) {\n document.addEventListener(\"keydown\", this._handleKeyDown);\n }\n }\n\n public deinit(): void {\n if (this._keyboardSupport) {\n document.removeEventListener(\"keydown\", this._handleKeyDown);\n }\n }\n\n public moveDown(selectedNode: Node): boolean {\n return this._selectNode(selectedNode.getNextVisibleNode());\n }\n\n public moveUp(selectedNode: Node): boolean {\n return this._selectNode(selectedNode.getPreviousVisibleNode());\n }\n\n private _canHandleKeyboard(): boolean {\n return this._keyboardSupport && this._isFocusOnTree();\n }\n\n private _handleKeyDown = (e: KeyboardEvent): void => {\n if (!this._canHandleKeyboard()) {\n return;\n }\n\n let isKeyHandled = false;\n\n const selectedNode = this._getSelectedNode();\n if (selectedNode) {\n switch (e.key) {\n case \"ArrowDown\":\n isKeyHandled = this.moveDown(selectedNode);\n break;\n\n case \"ArrowLeft\":\n isKeyHandled = this._moveLeft(selectedNode);\n break;\n\n case \"ArrowRight\":\n isKeyHandled = this._moveRight(selectedNode);\n break;\n\n case \"ArrowUp\":\n isKeyHandled = this.moveUp(selectedNode);\n break;\n }\n }\n\n if (isKeyHandled) {\n e.preventDefault();\n }\n };\n\n private _moveLeft(selectedNode: Node): boolean {\n if (selectedNode.isFolder() && selectedNode.is_open) {\n // Left on an open node closes the node\n this._closeNode(selectedNode);\n return true;\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 private _moveRight(selectedNode: Node): boolean {\n if (!selectedNode.isFolder()) {\n return false;\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.getNextVisibleNode());\n } else {\n // Right expands a closed node\n this._openNode(selectedNode);\n return true;\n }\n }\n }\n\n /* Select the node.\n * Don't do anything if the node is null.\n * Result: a different node was selected.\n */\n private _selectNode(node: Node | null): boolean {\n if (!node) {\n return false;\n } else {\n this._originalSelectNode(node);\n\n return true;\n }\n }\n}\n","export interface PositionInfo {\n originalEvent: Event;\n pageX: number;\n pageY: number;\n target: HTMLElement;\n}\n\nexport const getPositionInfoFromMouseEvent = (e: MouseEvent): PositionInfo => ({\n originalEvent: e,\n pageX: e.pageX,\n pageY: e.pageY,\n target: e.target as HTMLElement,\n});\n\nexport const getPositionInfoFromTouch = (\n touch: Touch,\n e: TouchEvent,\n): PositionInfo => ({\n originalEvent: e,\n pageX: touch.pageX,\n pageY: touch.pageY,\n target: touch.target as HTMLElement,\n});\n","import type { TriggerEvent } from \"./jqtreeMethodTypes\";\nimport type { PositionInfo } from \"./mouseUtils\";\nimport type { Node } from \"./node\";\n\nimport {\n getPositionInfoFromMouseEvent,\n getPositionInfoFromTouch,\n} from \"./mouseUtils\";\n\nexport type GetMouseDelay = () => number;\nexport type GetNode = (element: HTMLElement) => Node | null;\nexport type MouseCapture = (positionInfo: PositionInfo) => boolean | null;\nexport type MouseStart = (positionInfo: PositionInfo) => boolean;\n\ninterface ClickTarget {\n node: Node;\n type: \"button\" | \"label\";\n}\n\ninterface MouseHandlerParams {\n element: HTMLElement;\n getMouseDelay: () => number;\n getNode: GetNode;\n onClickButton: (node: Node) => void;\n onClickTitle: (node: Node) => void;\n onMouseCapture: MouseCapture;\n onMouseDrag: (positionInfo: PositionInfo) => void;\n onMouseStart: MouseStart;\n onMouseStop: (positionInfo: PositionInfo) => void;\n triggerEvent: TriggerEvent;\n useContextMenu: boolean;\n}\n\nclass MouseHandler {\n private _element: HTMLElement;\n private _getMouseDelay: GetMouseDelay;\n private _getNode: GetNode;\n\n private _isMouseDelayMet: boolean;\n\n private _isMouseStarted: boolean;\n\n private _mouseDelayTimer: null | number;\n\n private _mouseDownInfo: null | PositionInfo;\n private _onClickButton: (node: Node) => void;\n private _onClickTitle: (node: Node) => void;\n\n private _onMouseCapture: MouseCapture;\n\n private _onMouseDrag: (positionInfo: PositionInfo) => void;\n\n private _onMouseStart: MouseStart;\n\n private _onMouseStop: (positionInfo: PositionInfo) => void;\n\n private _triggerEvent: TriggerEvent;\n private _useContextMenu: boolean;\n constructor({\n element,\n getMouseDelay,\n getNode,\n onClickButton,\n onClickTitle,\n onMouseCapture,\n onMouseDrag,\n onMouseStart,\n onMouseStop,\n triggerEvent,\n useContextMenu,\n }: MouseHandlerParams) {\n this._element = element;\n this._getMouseDelay = getMouseDelay;\n this._getNode = getNode;\n this._onClickButton = onClickButton;\n this._onClickTitle = onClickTitle;\n this._onMouseCapture = onMouseCapture;\n this._onMouseDrag = onMouseDrag;\n this._onMouseStart = onMouseStart;\n this._onMouseStop = onMouseStop;\n this._triggerEvent = triggerEvent;\n this._useContextMenu = useContextMenu;\n\n element.addEventListener(\"click\", this._handleClick);\n element.addEventListener(\"dblclick\", this._handleDblclick);\n element.addEventListener(\"mousedown\", this._mouseDown, {\n passive: false,\n });\n element.addEventListener(\"touchstart\", this._touchStart, {\n passive: false,\n });\n\n if (useContextMenu) {\n element.addEventListener(\"contextmenu\", this._handleContextmenu);\n }\n\n this._isMouseStarted = false;\n this._mouseDelayTimer = null;\n this._isMouseDelayMet = false;\n this._mouseDownInfo = null;\n }\n public deinit(): void {\n this._element.removeEventListener(\"click\", this._handleClick);\n this._element.removeEventListener(\"dblclick\", this._handleDblclick);\n\n if (this._useContextMenu) {\n this._element.removeEventListener(\n \"contextmenu\",\n this._handleContextmenu,\n );\n }\n\n this._element.removeEventListener(\"mousedown\", this._mouseDown);\n this._element.removeEventListener(\"touchstart\", this._touchStart);\n this._removeMouseMoveEventListeners();\n }\n private _getClickTarget(element: HTMLElement): ClickTarget | null {\n const button = element.closest<HTMLElement>(\".jqtree-toggler\");\n\n if (button) {\n const node = this._getNode(button);\n\n if (node) {\n return {\n node,\n type: \"button\",\n };\n }\n } else {\n const jqTreeElement =\n element.closest<HTMLElement>(\".jqtree-element\");\n\n if (jqTreeElement) {\n const node = this._getNode(jqTreeElement);\n if (node) {\n return {\n node,\n type: \"label\",\n };\n }\n }\n }\n\n return null;\n }\n private _handleClick = (e: MouseEvent): void => {\n if (!e.target) {\n return;\n }\n\n const clickTarget = this._getClickTarget(e.target as HTMLElement);\n\n if (!clickTarget) {\n return;\n }\n\n switch (clickTarget.type) {\n case \"button\":\n this._onClickButton(clickTarget.node);\n\n e.preventDefault();\n e.stopPropagation();\n break;\n\n case \"label\": {\n if (this._triggerEvent(\"tree.click\", {\n click_event: e,\n node: clickTarget.node,\n })) {\n this._onClickTitle(clickTarget.node);\n }\n break;\n }\n }\n };\n\n private _handleContextmenu = (e: MouseEvent) => {\n if (!e.target) {\n return;\n }\n\n const div = (e.target as HTMLElement).closest<HTMLElement>(\n \"ul.jqtree-tree .jqtree-element\",\n );\n\n if (div) {\n const node = this._getNode(div);\n if (node) {\n e.preventDefault();\n e.stopPropagation();\n\n this._triggerEvent(\"tree.contextmenu\", {\n click_event: e,\n node,\n });\n return false;\n }\n }\n\n return null;\n };\n\n private _handleDblclick = (e: MouseEvent): void => {\n if (!e.target) {\n return;\n }\n\n const clickTarget = this._getClickTarget(e.target as HTMLElement);\n\n if (clickTarget?.type === \"label\") {\n this._triggerEvent(\"tree.dblclick\", {\n click_event: e,\n node: clickTarget.node,\n });\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._onMouseCapture(positionInfo)) {\n return false;\n }\n\n this._handleStartMouse();\n\n return true;\n }\n\n private _handleMouseMove(\n e: MouseEvent | TouchEvent,\n positionInfo: PositionInfo,\n ): void {\n if (this._isMouseStarted) {\n this._onMouseDrag(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._onMouseStart(this._mouseDownInfo);\n }\n\n if (this._isMouseStarted) {\n this._onMouseDrag(positionInfo);\n\n if (e.cancelable) {\n e.preventDefault();\n }\n } else {\n this._handleMouseUp(positionInfo);\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._onMouseStop(positionInfo);\n }\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 _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 _mouseMove = (e: MouseEvent): void => {\n this._handleMouseMove(e, getPositionInfoFromMouseEvent(e));\n };\n\n private _mouseUp = (e: MouseEvent): void => {\n this._handleMouseUp(getPositionInfoFromMouseEvent(e));\n };\n\n private _removeMouseMoveEventListeners() {\n document.removeEventListener(\"mousemove\", this._mouseMove);\n document.removeEventListener(\"touchmove\", this._touchMove);\n document.removeEventListener(\"mouseup\", this._mouseUp);\n document.removeEventListener(\"touchend\", this._touchEnd);\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 _touchEnd = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this._handleMouseUp(getPositionInfoFromTouch(touch, e));\n };\n\n private _touchMove = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this._handleMouseMove(e, getPositionInfoFromTouch(touch, e));\n };\n\n private _touchStart = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this._handleMouseDown(getPositionInfoFromTouch(touch, e));\n };\n}\n\nexport default MouseHandler;\n","interface NodeRecordWithChildren extends NodeRecord {\n children: NodeData[];\n}\n\nexport const isNodeRecordWithChildren = (\n data: NodeData,\n): data is NodeRecordWithChildren =>\n typeof data === \"object\" &&\n \"children\" in data &&\n data.children instanceof Array;\n","import { isNodeRecordWithChildren } from \"./nodeUtils\";\n\nexport type Position = \"after\" | \"before\" | \"inside\";\n\ntype IterateCallback = (node: Node, level: number) => boolean;\n\nexport class Node implements INode {\n [key: string]: unknown;\n\n public children: Node[];\n public element?: HTMLElement;\n public id?: NodeId;\n public idMapping: Map<NodeId, Node>;\n public is_loading: boolean;\n public is_open: boolean;\n public isEmptyFolder: boolean;\n public load_on_demand: boolean;\n public name: string;\n public nodeClass?: typeof Node;\n public parent: Node | null;\n public tree?: Node;\n\n constructor(\n nodeData: NodeData | null = null,\n isRoot = false,\n nodeClass = Node,\n ) {\n this.name = \"\";\n this.load_on_demand = false;\n\n this.isEmptyFolder =\n nodeData != null &&\n isNodeRecordWithChildren(nodeData) &&\n nodeData.children.length === 0;\n\n this.setData(nodeData);\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 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 node._loadChildrenFromData(nodeInfo);\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 node._loadChildrenFromData(nodeInfo);\n return node;\n }\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 public addNodeToIndex(node: Node): void {\n if (node.id != null) {\n this.idMapping.set(node.id, 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 append(nodeInfo: NodeData): Node {\n const node = this._createNode(nodeInfo);\n this.addChild(node);\n\n node._loadChildrenFromData(nodeInfo);\n return node;\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 /*\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 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 getLastChild(): Node | null {\n if (!this.hasChildren()) {\n return null;\n } else {\n const lastChild = this.children[this.children.length - 1] as Node;\n\n if (!(lastChild.hasChildren() && lastChild.is_open)) {\n return lastChild;\n } else {\n return lastChild.getLastChild();\n }\n }\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 getNextNode(includeChildren = true): Node | null {\n if (includeChildren && this.hasChildren()) {\n return this.children[0] ?? null;\n } else if (!this.parent) {\n return null;\n } else {\n const nextSibling = this.getNextSibling();\n\n if (nextSibling) {\n return nextSibling;\n } else {\n return this.parent.getNextNode(false);\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] ?? null;\n } else {\n return null;\n }\n }\n }\n\n public getNextVisibleNode(): Node | null {\n if (this.hasChildren() && this.is_open) {\n // First child\n return this.children[0] ?? null;\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 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 getNodeById(nodeId: NodeId): Node | null {\n return this.idMapping.get(nodeId) ?? null;\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 new Error(`Node with name ${name} not found`);\n }\n\n return node;\n }\n\n public getNodesByProperty(key: string, value: unknown): Node[] {\n return this.filter((node: Node) => node[key] === value);\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 getPreviousNode(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const previousSibling = this.getPreviousSibling();\n\n if (!previousSibling) {\n return this.getParent();\n } else if (previousSibling.hasChildren()) {\n return previousSibling.getLastChild();\n } else {\n return previousSibling;\n }\n }\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] ?? null;\n } else {\n return null;\n }\n }\n }\n\n public getPreviousVisibleNode(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const previousSibling = this.getPreviousSibling();\n\n if (!previousSibling) {\n return this.getParent();\n } else 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 }\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 // 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 public isFolder(): boolean {\n return this.hasChildren() || this.load_on_demand;\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 /*\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 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 _iterate(this, 0);\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[]): this {\n this.removeChildren();\n\n for (const childData of data) {\n const node = this._createNode(childData);\n this.addChild(node);\n\n if (isNodeRecordWithChildren(childData)) {\n node.loadFromData(childData.children);\n }\n }\n\n return this;\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 \"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 \"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 \"inside\": {\n // move inside as first child\n targetNode.addChildAtPosition(movedNode, 0);\n return true;\n }\n }\n }\n }\n\n public prepend(nodeInfo: NodeData): Node {\n const node = this._createNode(nodeInfo);\n this.addChildAtPosition(node, 0);\n\n node._loadChildrenFromData(nodeInfo);\n return node;\n }\n\n public remove(): void {\n if (this.parent) {\n this.parent.removeChild(this);\n this.parent = null;\n }\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 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 removeNodeFromIndex(node: Node): void {\n if (node.id != null) {\n this.idMapping.delete(node.id);\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 private _createNode(nodeData?: NodeData): Node {\n const nodeClass = this._getNodeClass();\n return new nodeClass(nodeData);\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 // Load children data from nodeInfo if it has children\n private _loadChildrenFromData(nodeInfo: NodeData) {\n if (isNodeRecordWithChildren(nodeInfo) && nodeInfo.children.length) {\n this.loadFromData(nodeInfo.children);\n }\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","import type { DropHint } from \"../dragAndDropHandler/types\";\n\nclass BorderDropHint implements DropHint {\n private _hint?: HTMLElement;\n\n constructor(element: HTMLElement, scrollLeft: number) {\n const div = element.querySelector(\":scope > .jqtree-element\");\n\n if (!div) {\n this._hint = undefined;\n return;\n }\n\n const width = Math.max(element.offsetWidth + scrollLeft - 4, 0);\n const height = Math.max(element.clientHeight - 4, 0);\n\n const hint = document.createElement(\"span\");\n hint.className = \"jqtree-border\";\n hint.style.width = `${width}px`;\n hint.style.height = `${height}px`;\n\n this._hint = hint;\n\n div.append(this._hint);\n }\n\n public remove(): void {\n this._hint?.remove();\n }\n}\n\nexport default BorderDropHint;\n","import type { DropHint } from \"../dragAndDropHandler/types\";\nimport type { Node, Position } from \"../node\";\n\nclass GhostDropHint implements DropHint {\n private _element: HTMLElement;\n private _ghost: HTMLElement;\n private _node: Node;\n\n constructor(node: Node, element: HTMLElement, position: Position) {\n this._element = element;\n this._node = node;\n this._ghost = this._createGhostElement();\n\n switch (position) {\n case \"after\":\n this._moveAfter();\n break;\n\n case \"before\":\n this._moveBefore();\n break;\n\n case \"inside\": {\n if (node.isFolder() && node.is_open) {\n this._moveInsideOpenFolder();\n } else {\n this._moveInside();\n }\n }\n }\n }\n\n public remove(): void {\n this._ghost.remove();\n }\n\n private _createGhostElement() {\n const ghost = document.createElement(\"li\");\n ghost.className = \"jqtree_common jqtree-ghost\";\n\n const circleSpan = document.createElement(\"span\");\n circleSpan.className = \"jqtree_common jqtree-circle\";\n ghost.append(circleSpan);\n\n const lineSpan = document.createElement(\"span\");\n lineSpan.className = \"jqtree_common jqtree-line\";\n ghost.append(lineSpan);\n\n return ghost;\n }\n\n private _moveAfter(): void {\n this._element.after(this._ghost);\n }\n\n private _moveBefore(): void {\n this._element.before(this._ghost);\n }\n\n private _moveInside(): void {\n this._element.after(this._ghost);\n this._ghost.classList.add(\"jqtree-inside\");\n }\n\n private _moveInsideOpenFolder(): void {\n const childElement = this._node.children[0]?.element;\n\n if (childElement) {\n childElement.before(this._ghost);\n }\n }\n}\n\nexport default GhostDropHint;\n","import type { DropHint } from \"../dragAndDropHandler/types\";\nimport type { GetScrollLeft } from \"../jqtreeMethodTypes\";\nimport type { Node, Position } from \"../node\";\n\nimport BorderDropHint from \"./borderDropHint\";\nimport GhostDropHint from \"./ghostDropHint\";\n\nexport interface NodeElementParams {\n getScrollLeft: GetScrollLeft;\n node: Node;\n tabIndex?: number;\n treeElement: HTMLElement;\n}\n\nclass NodeElement {\n public element: HTMLElement;\n public node: Node;\n private _getScrollLeft: GetScrollLeft;\n private _tabIndex?: number;\n private _treeElement: HTMLElement;\n\n constructor({\n getScrollLeft,\n node,\n tabIndex,\n treeElement,\n }: NodeElementParams) {\n this._getScrollLeft = getScrollLeft;\n this._tabIndex = tabIndex;\n this._treeElement = treeElement;\n\n this.init(node);\n }\n\n public addDropHint(position: Position): DropHint {\n if (this.mustShowBorderDropHint(position)) {\n return new BorderDropHint(this.element, this._getScrollLeft());\n } else {\n return new GhostDropHint(this.node, this.element, position);\n }\n }\n\n public deselect(): void {\n this.element.classList.remove(\"jqtree-selected\");\n\n const titleSpan = this.getTitleSpan();\n titleSpan.removeAttribute(\"tabindex\");\n titleSpan.setAttribute(\"aria-selected\", \"false\");\n\n titleSpan.blur();\n }\n\n public init(node: Node): void {\n this.node = node;\n\n node.element ??= this._treeElement;\n\n this.element = node.element;\n }\n\n public select(mustSetFocus: boolean): void {\n this.element.classList.add(\"jqtree-selected\");\n\n const titleSpan = this.getTitleSpan();\n const tabIndex = this._tabIndex;\n\n // Check for null or undefined\n if (tabIndex != null) {\n titleSpan.setAttribute(\"tabindex\", tabIndex.toString());\n }\n\n titleSpan.setAttribute(\"aria-selected\", \"true\");\n\n if (mustSetFocus) {\n titleSpan.focus();\n }\n }\n\n protected getTitleSpan(): HTMLSpanElement {\n return this.element.querySelector(\n \":scope > .jqtree-element > span.jqtree-title\",\n ) as HTMLSpanElement;\n }\n\n protected getUl(): HTMLUListElement {\n return this.element.querySelector(\":scope > ul\") as HTMLUListElement;\n }\n\n protected mustShowBorderDropHint(position: Position): boolean {\n return position === \"inside\";\n }\n}\n\nexport default NodeElement;\n","export type AnimationSpeed = \"fast\" | \"slow\" | number;\n\nexport const getAnimationDuration = (duration: AnimationSpeed): number => {\n if (typeof duration === \"number\") {\n return duration;\n }\n\n return duration === \"slow\" ? 600 : 200;\n};\n\nexport const slideDown = (\n element: HTMLElement,\n animationSpeed: AnimationSpeed,\n onFinished: () => void,\n): void => {\n element.style.display = \"block\";\n\n const animation = element.animate(\n [\n { height: \"0\", overflow: \"hidden\" },\n { height: `${element.scrollHeight}px`, overflow: \"hidden\" },\n ],\n { duration: getAnimationDuration(animationSpeed) },\n );\n\n animation.onfinish = () => {\n onFinished();\n };\n};\n\nexport const slideUp = (\n element: HTMLElement,\n animationSpeed: AnimationSpeed,\n onFinished: () => void,\n): void => {\n const animation = element.animate(\n [\n { height: `${element.scrollHeight}px`, overflow: \"hidden\" },\n { height: \"0\", overflow: \"hidden\" },\n ],\n { duration: getAnimationDuration(animationSpeed) },\n );\n\n animation.onfinish = () => {\n element.style.display = \"none\";\n onFinished();\n };\n};","import type { AnimationSpeed } from \"../animation\";\nimport type { OnFinishOpenNode, TriggerEvent } from \"../jqtreeMethodTypes\";\nimport type { Position } from \"../node\";\nimport type { NodeElementParams } from \"./index\";\n\nimport { slideDown, slideUp } from \"../animation\";\nimport NodeElement from \"./index\";\n\ninterface FolderElementParams extends NodeElementParams {\n closedIconElement?: HTMLElement | Text;\n openedIconElement?: HTMLElement | Text;\n triggerEvent: TriggerEvent;\n}\n\nclass FolderElement extends NodeElement {\n private _closedIconElement?: HTMLElement | Text;\n private _openedIconElement?: HTMLElement | Text;\n private _triggerEvent: TriggerEvent;\n\n constructor({\n closedIconElement,\n getScrollLeft,\n node,\n openedIconElement,\n tabIndex,\n treeElement,\n triggerEvent,\n }: FolderElementParams) {\n super({\n getScrollLeft,\n node,\n tabIndex,\n treeElement,\n });\n\n this._closedIconElement = closedIconElement;\n this._openedIconElement = openedIconElement;\n this._triggerEvent = triggerEvent;\n }\n\n public close(slide: boolean, animationSpeed: AnimationSpeed): 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.classList.add(\"jqtree-closed\");\n button.innerHTML = \"\";\n\n const closedIconElement = this._closedIconElement;\n\n if (closedIconElement) {\n const icon = closedIconElement.cloneNode(true);\n button.appendChild(icon);\n }\n\n const doClose = (): void => {\n this.element.classList.add(\"jqtree-closed\");\n\n const titleSpan = this.getTitleSpan();\n titleSpan.setAttribute(\"aria-expanded\", \"false\");\n\n this._triggerEvent(\"tree.close\", {\n node: this.node,\n });\n };\n\n const ul = this.getUl();\n\n if (slide) {\n slideUp(ul, animationSpeed, doClose);\n } else {\n ul.style.display = \"none\";\n doClose();\n }\n }\n\n public open(\n onFinished: OnFinishOpenNode | undefined,\n slide: boolean,\n animationSpeed: AnimationSpeed,\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.classList.remove(\"jqtree-closed\");\n button.innerHTML = \"\";\n\n const openedIconElement = this._openedIconElement;\n\n if (openedIconElement) {\n const icon = openedIconElement.cloneNode(true);\n button.appendChild(icon);\n }\n\n const doOpen = (): void => {\n this.element.classList.remove(\"jqtree-closed\");\n\n const titleSpan = this.getTitleSpan();\n titleSpan.setAttribute(\"aria-expanded\", \"true\");\n\n if (onFinished) {\n onFinished(this.node);\n }\n\n this._triggerEvent(\"tree.open\", {\n node: this.node,\n });\n };\n\n const ul = this.getUl();\n\n if (slide) {\n slideDown(ul, animationSpeed, doOpen);\n } else {\n ul.style.display = \"block\";\n doOpen();\n }\n }\n\n protected mustShowBorderDropHint(position: Position): boolean {\n return !this.node.is_open && position === \"inside\";\n }\n\n private _getButton(): HTMLLinkElement {\n return this.element.querySelector(\n \":scope > .jqtree-element > a.jqtree-toggler\",\n ) as HTMLLinkElement;\n }\n}\n\nexport default FolderElement;\n","import type {\n AddToSelection,\n GetNodeById,\n GetSelectedNodes,\n GetTree,\n OpenNode,\n RefreshElements,\n RemoveFromSelection,\n} from \"./jqtreeMethodTypes\";\nimport type { OnGetStateFromStorage, OnSetStateFromStorage } from \"./jqtreeOptions\";\nimport type { Node } from \"./node\";\n\nimport { isInt } from \"./util\";\n\nexport interface SavedState {\n open_nodes?: NodeId[];\n selected_node?: NodeId[];\n}\n\ninterface SaveStateHandlerParams {\n addToSelection: AddToSelection;\n getNodeById: GetNodeById;\n getSelectedNodes: GetSelectedNodes;\n getTree: GetTree;\n onGetStateFromStorage?: OnGetStateFromStorage;\n onSetStateFromStorage?: OnSetStateFromStorage;\n openNode: OpenNode;\n refreshElements: RefreshElements;\n removeFromSelection: RemoveFromSelection;\n saveState: boolean | string;\n}\n\nexport default class SaveStateHandler {\n private _addToSelection: AddToSelection;\n private _getNodeById: GetNodeById;\n private _getSelectedNodes: GetSelectedNodes;\n private _getTree: GetTree;\n private _onGetStateFromStorage?: OnGetStateFromStorage;\n private _onSetStateFromStorage?: OnSetStateFromStorage;\n private _openNode: OpenNode;\n private _refreshElements: RefreshElements;\n private _removeFromSelection: RemoveFromSelection;\n private _saveStateOption: boolean | string;\n\n constructor({\n addToSelection,\n getNodeById,\n getSelectedNodes,\n getTree,\n onGetStateFromStorage,\n onSetStateFromStorage,\n openNode,\n refreshElements,\n removeFromSelection,\n saveState,\n }: SaveStateHandlerParams) {\n this._addToSelection = addToSelection;\n this._getNodeById = getNodeById;\n this._getSelectedNodes = getSelectedNodes;\n this._getTree = getTree;\n this._onGetStateFromStorage = onGetStateFromStorage;\n this._onSetStateFromStorage = onSetStateFromStorage;\n this._openNode = openNode;\n this._refreshElements = refreshElements;\n this._removeFromSelection = removeFromSelection;\n this._saveStateOption = saveState;\n }\n\n public getNodeIdToBeSelected(): NodeId | null {\n const state = this.getStateFromStorage();\n\n if (state?.selected_node) {\n return state.selected_node[0] ?? null;\n } else {\n return null;\n }\n }\n\n public getState(): SavedState {\n const getOpenNodeIds = (): NodeId[] => {\n const openNodes: NodeId[] = [];\n\n this._getTree()?.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._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 public getStateFromStorage(): null | SavedState {\n const jsonData = this._loadFromStorage();\n\n if (jsonData) {\n return this._parseState(jsonData);\n } else {\n return null;\n }\n }\n\n public saveState(): void {\n const state = JSON.stringify(this.getState());\n\n if (this._onSetStateFromStorage) {\n this._onSetStateFromStorage(state);\n } else {\n localStorage.setItem(this._getKeyName(), state);\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 (boolean)\n */\n public setInitialState(state: SavedState): boolean {\n let mustLoadOnDemand = false;\n\n if (state.open_nodes) {\n mustLoadOnDemand = this._openInitialNodes(state.open_nodes);\n }\n\n this._resetSelection();\n\n if (state.selected_node) {\n this._selectInitialNodes(state.selected_node);\n }\n\n return mustLoadOnDemand;\n }\n\n public setInitialStateOnDemand(\n state: SavedState,\n cbFinished: () => void,\n ): void {\n let loadingCount = 0;\n let nodeIds = state.open_nodes;\n\n const openNodes = (): void => {\n if (!nodeIds) {\n return;\n }\n\n const newNodesIds = [];\n\n for (const nodeId of nodeIds) {\n const node = this._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._openNode(node, false);\n }\n }\n }\n }\n\n nodeIds = newNodesIds;\n\n if (state.selected_node) {\n if (this._selectInitialNodes(state.selected_node)) {\n this._refreshElements(null);\n }\n }\n\n if (loadingCount === 0) {\n cbFinished();\n }\n };\n\n const loadAndOpenNode = (node: Node): void => {\n loadingCount += 1;\n this._openNode(node, false, () => {\n loadingCount -= 1;\n openNodes();\n });\n };\n\n openNodes();\n }\n\n private _getKeyName(): string {\n if (typeof this._saveStateOption === \"string\") {\n return this._saveStateOption;\n } else {\n return \"tree\";\n }\n }\n\n private _loadFromStorage(): null | string {\n if (this._onGetStateFromStorage) {\n return this._onGetStateFromStorage();\n } else {\n return localStorage.getItem(this._getKeyName());\n }\n }\n\n private _openInitialNodes(nodeIds: NodeId[]): boolean {\n let mustLoadOnDemand = false;\n\n for (const nodeId of nodeIds) {\n const node = this._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 _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.selected_node && isInt(state.selected_node)) {\n // Convert to array\n state.selected_node = [state.selected_node];\n }\n\n return state;\n }\n\n private _resetSelection(): void {\n const selectedNodes = this._getSelectedNodes();\n\n selectedNodes.forEach((node) => {\n this._removeFromSelection(node);\n });\n }\n\n private _selectInitialNodes(nodeIds: NodeId[]): boolean {\n let selectCount = 0;\n\n for (const nodeId of nodeIds) {\n const node = this._getNodeById(nodeId);\n\n if (node) {\n selectCount += 1;\n\n this._addToSelection(node);\n }\n }\n\n return selectCount !== 0;\n }\n}\n","export type HorizontalScrollDirection = \"left\" | \"right\";\nexport type VerticalScrollDirection = \"bottom\" | \"top\";\n\ninterface ConstructorParams {\n container: HTMLElement;\n refreshHitAreas: () => void;\n}\n\nexport abstract class ScrollParent {\n protected container: HTMLElement;\n protected horizontalScrollDirection?: HorizontalScrollDirection;\n protected horizontalScrollTimeout?: number;\n\n protected refreshHitAreas: () => void;\n protected verticalScrollDirection?: VerticalScrollDirection;\n protected verticalScrollTimeout?: number;\n\n constructor({ container, refreshHitAreas }: ConstructorParams) {\n this.container = container;\n this.refreshHitAreas = refreshHitAreas;\n }\n\n public checkHorizontalScrolling(pageX: number): void {\n const newHorizontalScrollDirection =\n this.getNewHorizontalScrollDirection(pageX);\n\n if (this.horizontalScrollDirection !== newHorizontalScrollDirection) {\n this.horizontalScrollDirection = newHorizontalScrollDirection;\n\n if (this.horizontalScrollTimeout != null) {\n window.clearTimeout(this.horizontalScrollTimeout);\n }\n\n if (newHorizontalScrollDirection) {\n this.horizontalScrollTimeout = window.setTimeout(\n this.scrollHorizontally.bind(this),\n 40,\n );\n }\n }\n }\n\n public checkVerticalScrolling(pageY: number) {\n const newVerticalScrollDirection =\n this.getNewVerticalScrollDirection(pageY);\n\n if (this.verticalScrollDirection !== newVerticalScrollDirection) {\n this.verticalScrollDirection = newVerticalScrollDirection;\n\n if (this.verticalScrollTimeout != null) {\n window.clearTimeout(this.verticalScrollTimeout);\n this.verticalScrollTimeout = undefined;\n }\n\n if (newVerticalScrollDirection) {\n this.verticalScrollTimeout = window.setTimeout(\n this.scrollVertically.bind(this),\n 40,\n );\n }\n }\n }\n\n public getScrollLeft(): number {\n return this.container.scrollLeft;\n }\n\n public scrollToY(top: number): void {\n this.container.scrollTop = top;\n }\n\n public stopScrolling() {\n this.horizontalScrollDirection = undefined;\n this.verticalScrollDirection = undefined;\n }\n\n protected abstract getNewHorizontalScrollDirection(\n pageX: number,\n ): HorizontalScrollDirection | undefined;\n protected abstract getNewVerticalScrollDirection(\n pageY: number,\n ): undefined | VerticalScrollDirection;\n\n protected scrollHorizontally() {\n if (!this.horizontalScrollDirection) {\n return;\n }\n\n const distance = this.horizontalScrollDirection === \"left\" ? -20 : 20;\n this.container.scrollBy({\n behavior: \"instant\",\n left: distance,\n top: 0,\n });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollHorizontally.bind(this), 40);\n }\n\n protected scrollVertically() {\n if (!this.verticalScrollDirection) {\n return;\n }\n\n const distance = this.verticalScrollDirection === \"top\" ? -20 : 20;\n this.container.scrollBy({\n behavior: \"instant\",\n left: 0,\n top: distance,\n });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollVertically.bind(this), 40);\n }\n}\n","import type {\n HorizontalScrollDirection,\n VerticalScrollDirection,\n} from \"./scrollParent\";\n\nimport { getElementPosition, getOffsetTop } from \"../positionUtils\";\nimport { ScrollParent } from \"./scrollParent\";\n\n\nexport default class ContainerScrollParent extends ScrollParent {\n private _scrollParentBottom?: number;\n private _scrollParentTop?: number;\n\n public stopScrolling() {\n super.stopScrolling();\n\n this.horizontalScrollDirection = undefined;\n this.verticalScrollDirection = undefined;\n }\n\n protected getNewHorizontalScrollDirection(\n pageX: number,\n ): HorizontalScrollDirection | undefined {\n const scrollParentOffset = getElementPosition(this.container);\n const containerWidth = this.container.getBoundingClientRect().width;\n\n const rightEdge = scrollParentOffset.left + containerWidth;\n const leftEdge = scrollParentOffset.left;\n const isNearRightEdge = pageX > rightEdge - 20;\n const isNearLeftEdge = pageX < leftEdge + 20;\n\n if (isNearRightEdge) {\n return \"right\";\n } else if (isNearLeftEdge) {\n return \"left\";\n }\n\n return undefined;\n }\n\n protected getNewVerticalScrollDirection(\n pageY: number,\n ): undefined | VerticalScrollDirection {\n if (pageY < this._getScrollParentTop()) {\n return \"top\";\n }\n\n if (pageY > this._getScrollParentBottom()) {\n return \"bottom\";\n }\n\n return undefined;\n }\n\n private _getScrollParentBottom() {\n if (this._scrollParentBottom == null) {\n const containerHeight =\n this.container.getBoundingClientRect().height;\n this._scrollParentBottom =\n this._getScrollParentTop() + containerHeight;\n }\n\n return this._scrollParentBottom;\n }\n\n private _getScrollParentTop() {\n this._scrollParentTop ??= getOffsetTop(this.container);\n\n return this._scrollParentTop;\n }\n}\n","import type {\n HorizontalScrollDirection,\n VerticalScrollDirection,\n} from \"./scrollParent\";\n\nimport { getOffsetTop } from \"../positionUtils\";\nimport { ScrollParent } from \"./scrollParent\";\n\ninterface Params {\n refreshHitAreas: () => void;\n treeElement: HTMLElement;\n}\n\nexport default class DocumentScrollParent extends ScrollParent {\n private _documentScrollHeight?: number;\n private _documentScrollWidth?: number;\n private _treeElement: HTMLElement;\n\n constructor({ refreshHitAreas, treeElement }: Params) {\n super({ container: document.documentElement, refreshHitAreas });\n\n this._treeElement = treeElement;\n }\n\n public scrollToY(top: number): void {\n const treeTop = getOffsetTop(this._treeElement);\n\n super.scrollToY(top + treeTop);\n }\n\n public stopScrolling() {\n super.stopScrolling();\n\n this._documentScrollHeight = undefined;\n this._documentScrollWidth = undefined;\n }\n\n protected getNewHorizontalScrollDirection(\n pageX: number,\n ): HorizontalScrollDirection | undefined {\n const scrollLeft = this.container.scrollLeft;\n const windowWidth = window.innerWidth;\n\n const isNearRightEdge = pageX > windowWidth - 20;\n const isNearLeftEdge = pageX - scrollLeft < 20;\n\n if (isNearRightEdge && this._canScrollRight()) {\n return \"right\";\n }\n\n if (isNearLeftEdge) {\n return \"left\";\n }\n\n return undefined;\n }\n\n protected getNewVerticalScrollDirection(\n pageY: number,\n ): undefined | VerticalScrollDirection {\n const scrollTop = this.container.scrollTop;\n const distanceTop = pageY - scrollTop;\n\n if (distanceTop < 20) {\n return \"top\";\n }\n\n const windowHeight = window.innerHeight;\n\n if (windowHeight - (pageY - scrollTop) < 20 && this._canScrollDown()) {\n return \"bottom\";\n }\n\n return undefined;\n }\n\n private _canScrollDown() {\n return (\n this.container.scrollTop + this.container.clientHeight <\n this._getDocumentScrollHeight()\n );\n }\n\n private _canScrollRight() {\n return (\n this.container.scrollLeft + this.container.clientWidth <\n this._getDocumentScrollWidth()\n );\n }\n\n private _getDocumentScrollHeight() {\n // Store the original scroll height because the scroll height can increase when the drag element is moved beyond the scroll height.\n this._documentScrollHeight ??= this.container.scrollHeight;\n\n return this._documentScrollHeight;\n }\n\n private _getDocumentScrollWidth() {\n // Store the original scroll width because the scroll width can increase when the drag element is moved beyond the scroll width.\n this._documentScrollWidth ??= this.container.scrollWidth;\n\n return this._documentScrollWidth;\n }\n}\n","import type { ScrollParent } from \"./scrollParent\";\n\nimport ContainerScrollParent from \"./containerScrollParent\";\nimport DocumentScrollParent from \"./documentScrollParent\";\n\nconst isOverflow = (overflowValue: string) =>\n overflowValue === \"auto\" || overflowValue === \"scroll\";\n\nconst hasOverFlow = (element: HTMLElement): boolean => {\n const style = getComputedStyle(element);\n\n return isOverflow(style.overflowX) || isOverflow(style.overflowY);\n};\n\nconst getParentWithOverflow = (\n treeElement: HTMLElement,\n): HTMLElement | null => {\n if (hasOverFlow(treeElement)) {\n return treeElement;\n }\n\n let parent = treeElement.parentElement;\n\n while (parent) {\n if (hasOverFlow(parent)) {\n return parent;\n }\n\n parent = parent.parentElement;\n }\n\n return null;\n};\n\nconst createScrollParent = (\n treeElement: HTMLElement,\n refreshHitAreas: () => void,\n): ScrollParent => {\n const container = getParentWithOverflow(treeElement);\n\n if (container && container.tagName !== \"HTML\") {\n return new ContainerScrollParent({\n container,\n refreshHitAreas,\n });\n } else {\n return new DocumentScrollParent({ refreshHitAreas, treeElement });\n }\n};\n\nexport default createScrollParent;\n","import type { PositionInfo } from \"./mouseUtils\";\nimport type { ScrollParent } from \"./scrollHandler/scrollParent\";\n\nimport createScrollParent from \"./scrollHandler/createScrollParent\";\n\ninterface ScrollHandlerParams {\n refreshHitAreas: () => void;\n treeElement: HTMLElement;\n}\n\nexport default class ScrollHandler {\n private _refreshHitAreas: () => void;\n private _scrollParent?: ScrollParent;\n private _treeElement: HTMLElement;\n\n constructor({ refreshHitAreas, treeElement }: ScrollHandlerParams) {\n this._refreshHitAreas = refreshHitAreas;\n this._scrollParent = undefined;\n this._treeElement = treeElement;\n }\n\n public checkScrolling(positionInfo: PositionInfo): void {\n this._checkVerticalScrolling(positionInfo);\n this._checkHorizontalScrolling(positionInfo);\n }\n\n public getScrollLeft(): number {\n return this._getScrollParent().getScrollLeft();\n }\n\n public scrollToY(top: number): void {\n this._getScrollParent().scrollToY(top);\n }\n\n public stopScrolling() {\n this._getScrollParent().stopScrolling();\n }\n\n private _checkHorizontalScrolling(positionInfo: PositionInfo): void {\n this._getScrollParent().checkHorizontalScrolling(positionInfo.pageX);\n }\n\n private _checkVerticalScrolling(positionInfo: PositionInfo): void {\n this._getScrollParent().checkVerticalScrolling(positionInfo.pageY);\n }\n\n private _getScrollParent(): ScrollParent {\n this._scrollParent ??= createScrollParent(\n this._treeElement,\n this._refreshHitAreas,\n );\n\n return this._scrollParent;\n }\n}\n","import type { GetNodeById } from \"./jqtreeMethodTypes\";\nimport type { Node } from \"./node\";\n\ninterface SelectNodeHandlerParameters {\n getNodeById: GetNodeById;\n}\n\nexport default class SelectNodeHandler {\n private _getNodeById: GetNodeById;\n private _selectedNodes: Set<NodeId>;\n private _selectedSingleNode: Node | null;\n\n constructor({ getNodeById }: SelectNodeHandlerParameters) {\n this._getNodeById = getNodeById;\n this._selectedNodes = new Set<NodeId>();\n this.clear();\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 clear(): void {\n this._selectedNodes.clear();\n this._selectedSingleNode = null;\n }\n\n public getSelectedNode(): false | Node {\n const selectedNodes = this.getSelectedNodes();\n\n if (selectedNodes.length) {\n return selectedNodes[0] ?? false;\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._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: Node[] = [];\n\n this._selectedNodes.forEach((id) => {\n const node = this._getNodeById(id);\n if (node && parent.isParentOf(node)) {\n selectedNodes.push(node);\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 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","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 ): null | SimpleWidget<unknown> => {\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 (argument1 === \"destroy\") {\n destroyWidget(this);\n return undefined;\n } else {\n return callFunction(this, functionName, args);\n }\n } else {\n return undefined;\n }\n };\n};\n\nexport default class SimpleWidget<WidgetOptions> {\n [key: string]: unknown;\n\n protected static defaults: unknown = {};\n\n public $el: JQuery;\n\n public options: WidgetOptions;\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 static register(widgetClass: unknown, widgetName: string): void {\n register(widgetClass, widgetName);\n }\n\n public deinit(): void {\n //\n }\n\n public destroy(): void {\n this.deinit();\n }\n\n public init(): void {\n //\n }\n}\n","const version = \"1.9.0\";\n\nexport default version;\n","import type { HandleFinishedLoading } from \"./dataLoader\";\nimport type { OnFinishOpenNode } from \"./jqtreeMethodTypes\";\nimport type { JQTreeOptions } from \"./jqtreeOptions\";\nimport type { PositionInfo } from \"./mouseUtils\";\nimport type { Position } from \"./node\";\nimport type { SavedState } from \"./saveStateHandler\";\n\nimport DataLoader from \"./dataLoader\";\nimport { DragAndDropHandler } from \"./dragAndDropHandler\";\nimport ElementsRenderer from \"./elementsRenderer\";\nimport KeyHandler from \"./keyHandler\";\nimport MouseHandler from \"./mouseHandler\";\nimport { Node } from \"./node\";\nimport NodeElement from \"./nodeElement\";\nimport FolderElement from \"./nodeElement/folderElement\";\nimport { getOffsetTop } from \"./positionUtils\";\nimport SaveStateHandler from \"./saveStateHandler\";\nimport ScrollHandler from \"./scrollHandler\";\nimport SelectNodeHandler from \"./selectNodeHandler\";\nimport SimpleWidget from \"./simple.widget\";\nimport __version__ from \"./version\";\n\ninterface SelectNodeOptions {\n mustSetFocus?: boolean;\n mustToggle?: boolean;\n}\n\nconst NODE_PARAM_IS_EMPTY = \"Node parameter is empty\";\nconst PARAM_IS_EMPTY = \"Parameter is empty: \";\n\nexport class JqTreeWidget extends SimpleWidget<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: \"&#x25bc;\",\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 private _dataLoader: DataLoader;\n private _dndHandler: DragAndDropHandler;\n private _element: JQuery;\n private _htmlElement: HTMLElement;\n private _isInitialized: boolean;\n private _keyHandler: KeyHandler;\n private _mouseHandler: MouseHandler;\n private _renderer: ElementsRenderer;\n private _saveStateHandler: SaveStateHandler;\n private _scrollHandler: ScrollHandler;\n private _selectNodeHandler: SelectNodeHandler;\n private _tree: Node;\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 addToSelection(node?: Node, mustSetFocus?: boolean): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n this._selectNodeHandler.addToSelection(node);\n this._openParents(node);\n\n this._getNodeElementForNode(node).select(mustSetFocus ?? true);\n\n this._saveState();\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 closeNode(node?: Node, slideParam?: 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.isFolder() || node.isEmptyFolder) {\n this._createFolderElement(node).close(\n slide,\n this.options.animationSpeed,\n );\n\n this._saveState();\n }\n\n return this._element;\n }\n\n public deinit(): void {\n this._htmlElement.textContent = \"\";\n this._element.off();\n\n this._keyHandler.deinit();\n this._mouseHandler.deinit();\n\n this._tree = new Node({}, true);\n\n super.deinit();\n }\n\n public getNodeByCallback(callback: (node: Node) => boolean): Node | null {\n return this._tree.getNodeByCallback(callback);\n }\n\n public getNodeByHtmlElement(\n inputElement: HTMLElement | JQuery,\n ): Node | null {\n const element =\n inputElement instanceof HTMLElement\n ? inputElement\n : inputElement.get(0);\n\n if (!element) {\n return null;\n }\n\n return this._getNode(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 getSelectedNode(): false | Node {\n return this._selectNodeHandler.getSelectedNode();\n }\n\n public getSelectedNodes(): Node[] {\n return this._selectNodeHandler.getSelectedNodes();\n }\n\n public getState(): null | SavedState {\n return this._saveStateHandler.getState();\n }\n\n public getStateFromStorage(): null | SavedState {\n return this._saveStateHandler.getStateFromStorage();\n }\n\n public getTree(): Node {\n return this._tree;\n }\n\n public getVersion(): string {\n return __version__;\n }\n\n public init(): void {\n super.init();\n\n this._element = this.$el;\n this._htmlElement = this._element.get(0) as HTMLElement;\n this._isInitialized = false;\n\n this.options.dataUrl ??= this._element.data(\"url\");\n\n const dataRtl = this._element.data(\"rtl\") as unknown;\n this.options.rtl ??= dataRtl === '' ? true : Boolean(dataRtl);\n\n this.options.closedIcon ??= this._getDefaultClosedIcon();\n\n this._connectHandlers();\n this._initData();\n }\n\n public isDragging(): boolean {\n return this._dndHandler.isDragging;\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 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: Node | null | string,\n param2?: HandleFinishedLoading | Node | null,\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 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 moveNode(\n node?: Node,\n targetNode?: Node,\n position?: Position,\n ): 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 if (!position) {\n throw Error(PARAM_IS_EMPTY + \"position\");\n }\n\n this._tree.moveNode(node, targetNode, position);\n this._refreshElements(null);\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 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 | undefined] => {\n let onFinished: null | OnFinishOpenNode;\n let slide: boolean | null;\n\n if (typeof param1 === \"function\") {\n onFinished = param1;\n slide = null;\n } else {\n slide = param1 as boolean;\n onFinished = param2 as OnFinishOpenNode;\n }\n\n slide ??= this.options.slide;\n\n return [slide, onFinished];\n };\n\n const [slide, onFinished] = parseParams();\n\n this._openNodeInternal(node, slide, onFinished);\n return this._element;\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 refresh(): JQuery {\n this._refreshElements(null);\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 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 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 scrollToNode(node?: Node): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n if (!node.element) {\n return this._element;\n }\n\n const top =\n getOffsetTop(node.element) -\n getOffsetTop(this._htmlElement);\n\n this._scrollHandler.scrollToY(top);\n\n return this._element;\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 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 setState(state?: SavedState): JQuery {\n if (state) {\n this._saveStateHandler.setInitialState(state);\n this._refreshElements(null);\n }\n\n return this._element;\n }\n\n public toggle(node?: Node, slideParam: boolean | null = 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 toJson(): string {\n return JSON.stringify(this._tree.getData());\n }\n\n public updateNode(node?: Node, data?: NodeData): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n if (!data) {\n return this._element;\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);\n }\n }\n\n this._refreshElements(node);\n\n return this._element;\n }\n\n private _connectHandlers() {\n const {\n autoEscape,\n buttonLeft,\n closedIcon,\n dataFilter,\n dragAndDrop,\n keyboardSupport,\n onCanMove,\n onCanMoveTo,\n onCreateLi,\n onDragMove,\n onDragStop,\n onGetStateFromStorage,\n onIsMoveHandle,\n onLoadFailed,\n onLoading,\n onSetStateFromStorage,\n openedIcon,\n openFolderDelay,\n rtl,\n saveState,\n showEmptyFolder,\n slide,\n tabIndex,\n } = this.options;\n\n const closeNode = this.closeNode.bind(this);\n const getNodeElement = this._getNodeElement.bind(this);\n const getNodeElementForNode = this._getNodeElementForNode.bind(this);\n const getNodeById = this.getNodeById.bind(this);\n const getSelectedNode = this.getSelectedNode.bind(this);\n const getTree = this.getTree.bind(this);\n const isFocusOnTree = this._isFocusOnTree.bind(this);\n const loadData = this.loadData.bind(this);\n const openNode = this._openNodeInternal.bind(this);\n const refreshElements = this._refreshElements.bind(this);\n const selectNode = this.selectNode.bind(this);\n const treeElement = this._htmlElement;\n const triggerEvent = this._triggerEvent.bind(this);\n\n const selectNodeHandler = new SelectNodeHandler({\n getNodeById,\n });\n\n const addToSelection =\n selectNodeHandler.addToSelection.bind(selectNodeHandler);\n const getSelectedNodes =\n selectNodeHandler.getSelectedNodes.bind(selectNodeHandler);\n const isNodeSelected =\n selectNodeHandler.isNodeSelected.bind(selectNodeHandler);\n const removeFromSelection =\n selectNodeHandler.removeFromSelection.bind(selectNodeHandler);\n const getMouseDelay = () => this.options.startDndDelay ?? 0;\n\n const refreshHitAreas = () => {\n dndHandler.refresh();\n }\n\n const dataLoader = new DataLoader({\n dataFilter,\n loadData,\n onLoadFailed,\n onLoading,\n treeElement,\n triggerEvent,\n });\n\n const saveStateHandler = new SaveStateHandler({\n addToSelection,\n getNodeById,\n getSelectedNodes,\n getTree,\n onGetStateFromStorage,\n onSetStateFromStorage,\n openNode,\n refreshElements,\n removeFromSelection,\n saveState,\n });\n\n const scrollHandler = new ScrollHandler({\n refreshHitAreas,\n treeElement,\n });\n\n const getScrollLeft = scrollHandler.getScrollLeft.bind(scrollHandler);\n\n const dndHandler = new DragAndDropHandler({\n autoEscape,\n getNodeElement,\n getNodeElementForNode,\n getScrollLeft,\n getTree,\n onCanMove,\n onCanMoveTo,\n onDragMove,\n onDragStop,\n onIsMoveHandle,\n openFolderDelay,\n openNode,\n refreshElements,\n slide,\n treeElement,\n triggerEvent,\n });\n\n const keyHandler = new KeyHandler({\n closeNode,\n getSelectedNode,\n isFocusOnTree,\n keyboardSupport,\n openNode,\n selectNode,\n });\n\n const renderer = new ElementsRenderer({\n autoEscape,\n buttonLeft,\n closedIcon,\n dragAndDrop,\n getTree,\n htmlElement: treeElement,\n isNodeSelected,\n onCreateLi,\n openedIcon,\n rtl,\n showEmptyFolder,\n tabIndex,\n });\n\n const getNode = this._getNode.bind(this);\n const onMouseCapture = this._mouseCapture.bind(this);\n const onMouseDrag = this._mouseDrag.bind(this);\n const onMouseStart = this._mouseStart.bind(this);\n const onMouseStop = this._mouseStop.bind(this);\n\n const mouseHandler = new MouseHandler({\n element: treeElement,\n getMouseDelay,\n getNode,\n onClickButton: this.toggle.bind(this),\n onClickTitle: this._doSelectNode.bind(this),\n onMouseCapture,\n onMouseDrag,\n onMouseStart,\n onMouseStop,\n triggerEvent,\n useContextMenu: this.options.useContextMenu,\n });\n\n this._dataLoader = dataLoader;\n this._dndHandler = dndHandler;\n this._keyHandler = keyHandler;\n this._mouseHandler = mouseHandler;\n this._renderer = renderer;\n this._saveStateHandler = saveStateHandler;\n this._scrollHandler = scrollHandler;\n this._selectNodeHandler = selectNodeHandler;\n }\n\n private _containsElement(element: HTMLElement): boolean {\n const node = this._getNode(element);\n\n return node?.tree === this._tree;\n }\n\n private _createFolderElement(node: Node) {\n const closedIconElement = this._renderer.closedIconElement;\n const getScrollLeft = this._scrollHandler.getScrollLeft.bind(\n this._scrollHandler,\n );\n const openedIconElement = this._renderer.openedIconElement;\n const tabIndex = this.options.tabIndex;\n const triggerEvent = this._triggerEvent.bind(this);\n\n return new FolderElement({\n closedIconElement,\n getScrollLeft,\n node,\n openedIconElement,\n tabIndex,\n treeElement: this._htmlElement,\n triggerEvent,\n });\n }\n\n private _createNodeElement(node: Node) {\n const getScrollLeft = this._scrollHandler.getScrollLeft.bind(\n this._scrollHandler,\n );\n const tabIndex = this.options.tabIndex;\n\n return new NodeElement({\n getScrollLeft,\n node,\n tabIndex,\n treeElement: this._htmlElement\n });\n }\n\n private _deselectCurrentNode(): void {\n const node = this.getSelectedNode();\n if (node) {\n this.removeFromSelection(node);\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 _doLoadData(data: NodeData[] | null, parentNode: Node | null): void {\n if (data) {\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 this._triggerEvent(\"tree.load_data\", {\n parent_node: parentNode,\n tree_data: data,\n });\n }\n\n private _doLoadDataFromUrl(\n urlInfoParam: JQuery.AjaxSettings | null | string,\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 _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 &&\n this.options.onCanSelectNode(node)\n );\n } else {\n return this.options.selectable;\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 deselected_node: deselectedNode,\n node,\n });\n this._openParents(node);\n }\n\n saveState();\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 _getDataUrlInfo(node: Node | null): JQuery.AjaxSettings | null {\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 const dataUrl = this.options.dataUrl;\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 _getDefaultClosedIcon(): string {\n if (this.options.rtl) {\n // triangle to the left\n return \"&#x25c0;\";\n } else {\n // triangle to the right\n return \"&#x25ba;\";\n }\n }\n\n private _getNode(element: HTMLElement): Node | null {\n const liElement = element.closest(\"li.jqtree_common\");\n\n if (liElement) {\n return jQuery(liElement).data(\"node\") as Node;\n } else {\n return null;\n }\n }\n\n private _getNodeElement(element: 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 private _getNodeElementForNode(node: Node): NodeElement {\n if (node.isFolder()) {\n return this._createFolderElement(node);\n } else {\n return this._createNodeElement(node);\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 _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 _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 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 private _isFocusOnTree(): boolean {\n const activeElement = document.activeElement;\n\n return activeElement?.tagName === \"SPAN\" && this._containsElement(activeElement as HTMLElement);\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 private _loadFolderOnDemand(\n node: Node,\n slide = true,\n onFinished?: OnFinishOpenNode,\n ): void {\n node.is_loading = true;\n\n this._doLoadDataFromUrl(null, node, () => {\n this._openNodeInternal(node, slide, onFinished);\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 _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 private _mouseDrag(positionInfo: PositionInfo): boolean {\n if (this.options.dragAndDrop) {\n const result = this._dndHandler.mouseDrag(positionInfo);\n\n this._scrollHandler.checkScrolling(positionInfo);\n return result;\n } else {\n return false;\n }\n }\n\n private _mouseStart(positionInfo: PositionInfo): boolean {\n if (this.options.dragAndDrop) {\n return this._dndHandler.mouseStart(positionInfo);\n } else {\n return false;\n }\n }\n\n private _mouseStop(positionInfo: PositionInfo): boolean {\n if (this.options.dragAndDrop) {\n this._scrollHandler.stopScrolling();\n return this._dndHandler.mouseStop(positionInfo);\n } else {\n return false;\n }\n }\n\n private _openNodeInternal(\n node: Node,\n slide = true,\n onFinished?: OnFinishOpenNode,\n ): void {\n const doOpenNode = (\n _node: Node,\n _slide: boolean,\n _onFinished?: OnFinishOpenNode,\n ): void => {\n if (!node.children.length) {\n return;\n }\n\n const folderElement = this._createFolderElement(_node);\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);\n }\n parent = parent.parent;\n }\n\n doOpenNode(node, slide, onFinished);\n this._saveState();\n }\n }\n }\n\n private _openParents(node: Node) {\n const parent = node.parent;\n\n if (parent?.parent && !parent.is_open) {\n this.openNode(parent, false);\n }\n }\n\n /*\n Redraw the tree or part of the tree.\n from_node: redraw this subtree\n */\n private _refreshElements(fromNode: Node | null): void {\n const mustSetFocus = this._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 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 nodeElement.select(mustSetFocus);\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, 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._openNodeInternal(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._openNodeInternal(node, false);\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 _triggerEvent(\n eventName: string,\n values?: Record<string, unknown>,\n ): boolean {\n const event = jQuery.Event(eventName, values);\n this._element.trigger(event);\n return !event.isDefaultPrevented();\n }\n}\n\nSimpleWidget.register(JqTreeWidget, \"tree\");\n"],"names":["__version__"],"mappings":"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"}
1
+ {"version":3,"file":"tree.jquery.debug.js","sources":["src/dataLoader.ts","src/positionUtils.ts","src/dragAndDropHandler/binarySearch.ts","src/dragAndDropHandler/dragElement.ts","src/dragAndDropHandler/iterateVisibleNodes.ts","src/dragAndDropHandler/generateHitAreas.ts","src/dragAndDropHandler/index.ts","src/util.ts","src/elementsRenderer.ts","src/keyHandler.ts","src/mouseUtils.ts","src/mouseHandler.ts","src/nodeUtils.ts","src/node.ts","src/nodeElement/borderDropHint.ts","src/nodeElement/ghostDropHint.ts","src/nodeElement/index.ts","src/animation.ts","src/nodeElement/folderElement.ts","src/saveStateHandler.ts","src/scrollHandler/scrollParent.ts","src/scrollHandler/containerScrollParent.ts","src/scrollHandler/documentScrollParent.ts","src/scrollHandler/createScrollParent.ts","src/scrollHandler.ts","src/selectNodeHandler.ts","src/version.ts","src/tree.jquery.ts"],"sourcesContent":["import type { LoadData, TriggerEvent } from \"./jqtreeMethodTypes\";\nimport type { DataFilter, OnLoadFailed, OnLoading } from \"./jqtreeOptions\";\nimport type { Node } from \"./node\";\n\nexport type HandleFinishedLoading = () => void;\n\ninterface DataLoaderParams {\n dataFilter?: DataFilter;\n loadData: LoadData;\n onLoadFailed?: OnLoadFailed;\n onLoading?: OnLoading;\n treeElement: HTMLElement;\n triggerEvent: TriggerEvent;\n}\n\nexport default class DataLoader {\n private _dataFilter?: DataFilter;\n private _loadData: LoadData;\n private _onLoadFailed?: OnLoadFailed;\n private _onLoading?: OnLoading;\n private _treeElement: HTMLElement;\n private _triggerEvent: TriggerEvent;\n\n constructor({\n dataFilter,\n loadData,\n onLoadFailed,\n onLoading,\n treeElement,\n triggerEvent,\n }: DataLoaderParams) {\n this._dataFilter = dataFilter;\n this._loadData = loadData;\n this._onLoadFailed = onLoadFailed;\n this._onLoading = onLoading;\n this._treeElement = treeElement;\n this._triggerEvent = triggerEvent;\n }\n\n public loadFromUrl(\n urlInfo: JQuery.AjaxSettings | null | string,\n parentNode: Node | null,\n onFinished: HandleFinishedLoading | null,\n ): void {\n if (!urlInfo) {\n return;\n }\n\n const element = this._getDomElement(parentNode);\n this._addLoadingClass(element);\n this._notifyLoading(true, parentNode, element);\n\n const stopLoading = (): void => {\n this._removeLoadingClass(element);\n this._notifyLoading(false, parentNode, element);\n };\n\n const handleSuccess = (data: NodeData[]): void => {\n stopLoading();\n this._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._onLoadFailed) {\n this._onLoadFailed(jqXHR);\n }\n };\n\n this._submitRequest(urlInfo, handleSuccess, handleError);\n }\n\n private _addLoadingClass(element: HTMLElement): void {\n element.classList.add(\"jqtree-loading\");\n }\n\n private _getDomElement(parentNode: Node | null): HTMLElement {\n if (parentNode?.element) {\n return parentNode.element;\n } else {\n return this._treeElement;\n }\n }\n\n private _notifyLoading(\n isLoading: boolean,\n node: Node | null,\n element: HTMLElement,\n ): void {\n const $el = jQuery(element);\n\n if (this._onLoading) {\n this._onLoading(isLoading, node, $el);\n }\n\n this._triggerEvent(\"tree.loading_data\", {\n $el,\n isLoading,\n node,\n });\n }\n\n private _parseData(data: NodeData[]): NodeData[] {\n if (this._dataFilter) {\n return this._dataFilter(data);\n } else {\n return data;\n }\n }\n\n private _removeLoadingClass(element: HTMLElement): void {\n element.classList.remove(\"jqtree-loading\");\n }\n\n private _submitRequest(\n urlInfoInput: JQuery.AjaxSettings | string,\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 cache: false,\n dataType: \"json\",\n error: handleError,\n method: \"GET\",\n success: handleSuccess,\n ...urlInfo,\n };\n\n ajaxSettings.method = ajaxSettings.method?.toUpperCase() ?? \"GET\";\n\n void jQuery.ajax(ajaxSettings);\n }\n}\n","interface TopLeftPosition {\n left: number;\n top: number;\n}\n\n// Get the top position of the HTML element.\nexport const getOffsetTop = (element: HTMLElement): number =>\n getElementPosition(element).top;\n\n// Get the top left position of the HTML element.\nexport const getElementPosition = (element: HTMLElement): TopLeftPosition => {\n const rect = element.getBoundingClientRect();\n\n return {\n left: rect.x + window.scrollX,\n top: rect.y + window.scrollY,\n };\n};\n","function binarySearch<T>(items: T[], compareFn: (a: T) => number): null | T {\n let low = 0;\n let high = items.length;\n\n while (low < high) {\n const mid = (low + high) >> 1;\n const item = items[mid];\n\n if (item === undefined) {\n return null;\n }\n\n const compareResult = compareFn(item);\n\n if (compareResult > 0) {\n high = mid;\n } else if (compareResult < 0) {\n low = mid + 1;\n } else {\n return item;\n }\n }\n\n return null;\n}\n\nexport default binarySearch;\n","interface DragElementParams {\n autoEscape: boolean;\n nodeName: string;\n offsetX: number;\n offsetY: number;\n treeElement: HTMLElement;\n}\n\nclass DragElement {\n private _element: HTMLElement;\n private _offsetX: number;\n private _offsetY: number;\n\n constructor({\n autoEscape,\n nodeName,\n offsetX,\n offsetY,\n treeElement,\n }: DragElementParams) {\n this._offsetX = offsetX;\n this._offsetY = offsetY;\n\n this._element = this._createElement(nodeName, autoEscape);\n\n treeElement.appendChild(this._element);\n }\n\n public move(pageX: number, pageY: number): void {\n this._element.style.left = `${pageX - this._offsetX}px`;\n this._element.style.top = `${pageY - this._offsetY}px`;\n }\n\n public remove(): void {\n this._element.remove();\n }\n\n private _createElement(nodeName: string, autoEscape: boolean) {\n const element = document.createElement(\"span\");\n element.classList.add(\"jqtree-title\", \"jqtree-dragging\");\n\n if (autoEscape) {\n element.textContent = nodeName;\n } else {\n element.innerHTML = nodeName;\n }\n\n element.style.position = \"absolute\";\n\n return element;\n }\n}\n\nexport default DragElement;\n","import type { Node } from \"../node\";\n\ninterface Options {\n handleAfterOpenFolder: (node: Node, nextNode: Node | null) => void;\n handleClosedFolder: (\n node: Node,\n nextNode: Node | null,\n element: HTMLElement,\n ) => void;\n handleFirstNode: (node: Node) => void;\n handleNode: (\n node: Node,\n nextNode: Node | null,\n element: HTMLElement,\n ) => void;\n\n /*\n override\n return\n - true: continue iterating\n - false: stop iterating\n */\n handleOpenFolder: (node: Node, element: HTMLElement) => boolean;\n}\n\nconst iterateVisibleNodes = (\n tree: Node,\n {\n handleAfterOpenFolder,\n handleClosedFolder,\n handleFirstNode,\n handleNode,\n handleOpenFolder,\n }: Options,\n) => {\n let isFirstNode = true;\n\n const iterate = (node: Node, nextNode: Node | null): void => {\n let mustIterateInside =\n (node.is_open || !node.element) && node.hasChildren();\n\n let element: HTMLElement | null = null;\n\n // Is the element visible?\n if (node.element?.offsetParent) {\n element = node.element;\n\n if (isFirstNode) {\n handleFirstNode(node);\n isFirstNode = false;\n }\n\n if (!node.hasChildren()) {\n handleNode(node, nextNode, node.element);\n } else if (node.is_open) {\n if (!handleOpenFolder(node, node.element)) {\n mustIterateInside = false;\n }\n } else {\n handleClosedFolder(node, nextNode, element);\n }\n }\n\n if (mustIterateInside) {\n const childrenLength = node.children.length;\n node.children.forEach((_, i) => {\n const child = node.children[i];\n\n if (child) {\n if (i === childrenLength - 1) {\n iterate(child, null);\n } else {\n const nextChild = node.children[i + 1];\n\n if (nextChild) {\n iterate(child, nextChild);\n }\n }\n }\n });\n\n if (node.is_open && element) {\n handleAfterOpenFolder(node, nextNode);\n }\n }\n };\n\n iterate(tree, null);\n};\n\nexport default iterateVisibleNodes;\n","import type { Node, Position } from \"../node\";\nimport type { HitArea } from \"./types\";\n\nimport { getOffsetTop } from \"../positionUtils\";\nimport iterateVisibleNodes from \"./iterateVisibleNodes\";\n\ninterface HitPosition {\n node: Node;\n position: null | Position;\n top: number;\n}\n\nexport const generateHitPositions = (\n tree: Node,\n currentNode: Node,\n): HitPosition[] => {\n const hitPositions: HitPosition[] = [];\n let lastTop = 0;\n\n const addHitPosition = (\n node: Node,\n position: null | Position,\n top: number,\n ) => {\n hitPositions.push({\n node,\n position,\n top,\n });\n lastTop = top;\n };\n\n const handleAfterOpenFolder = (node: Node, nextNode: Node | null) => {\n if (node === currentNode || nextNode === currentNode) {\n // Cannot move before or after current item\n addHitPosition(node, null, lastTop);\n } else {\n addHitPosition(node, \"after\", lastTop);\n }\n };\n\n const handleClosedFolder = (\n node: Node,\n nextNode: Node | null,\n element: HTMLElement,\n ) => {\n const top = getOffsetTop(element);\n\n if (node === currentNode) {\n // Cannot move after current item\n addHitPosition(node, null, top);\n } else {\n addHitPosition(node, \"inside\", top);\n\n // Cannot move before current item\n if (nextNode !== currentNode) {\n addHitPosition(node, \"after\", top);\n }\n }\n };\n\n const handleFirstNode = (node: Node) => {\n if (node !== currentNode && node.element) {\n addHitPosition(node, \"before\", getOffsetTop(node.element));\n }\n };\n\n const handleNode = (\n node: Node,\n nextNode: Node | null,\n element: HTMLElement,\n ) => {\n const top = getOffsetTop(element);\n\n if (node === currentNode) {\n // Cannot move inside current item\n addHitPosition(node, null, top);\n } else {\n addHitPosition(node, \"inside\", top);\n }\n\n if (nextNode === currentNode || node === currentNode) {\n // Cannot move before or after current item\n addHitPosition(node, null, top);\n } else {\n addHitPosition(node, \"after\", top);\n }\n };\n\n const handleOpenFolder = (node: Node, element: HTMLElement) => {\n if (node === currentNode) {\n // Cannot move inside current item\n\n // Dnd over the current element is not possible: add a position with type None for the top and the bottom.\n const top = getOffsetTop(element);\n const height = element.clientHeight;\n addHitPosition(node, null, top);\n\n if (height > 5) {\n // Subtract 5 pixels to allow more space for the next element.\n addHitPosition(node, null, top + height - 5);\n }\n\n // Stop iterating\n return false;\n }\n\n // Cannot move before current item\n if (node.children[0] !== currentNode) {\n addHitPosition(node, \"inside\", getOffsetTop(element));\n }\n\n // Continue iterating\n return true;\n };\n\n iterateVisibleNodes(tree, {\n handleAfterOpenFolder,\n handleClosedFolder,\n handleFirstNode,\n handleNode,\n handleOpenFolder,\n });\n\n return hitPositions;\n};\n\nexport const generateHitAreasForGroup = (\n hitAreas: HitArea[],\n positionsInGroup: HitPosition[],\n top: number,\n bottom: number,\n) => {\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 for (let i = 0; i < positionCount; i++) {\n const position = positionsInGroup[i] as HitPosition;\n\n if (position.position) {\n hitAreas.push({\n bottom: areaTop + areaHeight,\n node: position.node,\n position: position.position,\n top: areaTop,\n });\n }\n\n areaTop += areaHeight;\n }\n};\n\nexport const generateHitAreasFromPositions = (\n hitPositions: HitPosition[],\n treeBottom: number,\n): HitArea[] => {\n if (!hitPositions.length) {\n return [];\n }\n\n let previousTop = (hitPositions[0] as HitPosition).top;\n let group: HitPosition[] = [];\n const hitAreas: HitArea[] = [];\n\n for (const position of hitPositions) {\n if (position.top !== previousTop && group.length) {\n generateHitAreasForGroup(\n hitAreas,\n group,\n previousTop,\n position.top,\n );\n\n previousTop = position.top;\n group = [];\n }\n\n group.push(position);\n }\n\n generateHitAreasForGroup(hitAreas, group, previousTop, treeBottom);\n\n return hitAreas;\n};\n\nconst generateHitAreas = (tree: Node, currentNode: Node, treeBottom: number) =>\n generateHitAreasFromPositions(\n generateHitPositions(tree, currentNode),\n treeBottom,\n );\n\nexport default generateHitAreas;\n","import type {\n GetScrollLeft,\n GetTree,\n OpenNode,\n RefreshElements,\n TriggerEvent,\n} from \"../jqtreeMethodTypes\";\nimport type {\n DragMethod,\n OnCanMove,\n OnCanMoveTo,\n OnIsMoveHandle,\n} from \"../jqtreeOptions\";\nimport type { PositionInfo } from \"../mouseUtils\";\nimport type { Node } from \"../node\";\nimport type NodeElement from \"../nodeElement\";\nimport type { DropHint, HitArea } from \"./types\";\n\nimport { getElementPosition } from \"../positionUtils\";\nimport binarySearch from \"./binarySearch\";\nimport DragElement from \"./dragElement\";\nimport generateHitAreas from \"./generateHitAreas\";\n\ninterface Dimensions {\n bottom: number;\n left: number;\n right: number;\n top: number;\n}\n\ninterface DragAndDropHandlerParams {\n autoEscape?: boolean;\n getNodeElement: GetNodeElement;\n getNodeElementForNode: GetNodeElementForNode;\n getScrollLeft: GetScrollLeft;\n getTree: GetTree;\n onCanMove?: OnCanMove;\n onCanMoveTo?: OnCanMoveTo;\n onDragMove?: DragMethod;\n onDragStop?: DragMethod;\n onIsMoveHandle?: OnIsMoveHandle;\n openFolderDelay: false | number;\n openNode: OpenNode;\n refreshElements: RefreshElements;\n slide: boolean;\n treeElement: HTMLElement;\n triggerEvent: TriggerEvent;\n}\ntype GetNodeElement = (element: HTMLElement) => NodeElement | null;\n\ntype GetNodeElementForNode = (node: Node) => NodeElement;\n\nexport class DragAndDropHandler {\n public currentItem: NodeElement | null;\n public hitAreas: HitArea[];\n public hoveredArea: HitArea | null;\n public isDragging: boolean;\n\n private _autoEscape?: boolean;\n private _dragElement: DragElement | null;\n private _getNodeElement: GetNodeElement;\n private _getNodeElementForNode: GetNodeElementForNode;\n private _getScrollLeft: GetScrollLeft;\n private _getTree: GetTree;\n private _onCanMove?: OnCanMove;\n private _onCanMoveTo?: OnCanMoveTo;\n private _onDragMove?: DragMethod;\n private _onDragStop?: DragMethod;\n private _onIsMoveHandle?: OnIsMoveHandle;\n private _openFolderDelay: false | number;\n private _openFolderTimer: null | number;\n private _openNode: OpenNode;\n private _previousGhost: DropHint | null;\n private _refreshElements: RefreshElements;\n private _slide: boolean;\n private _treeElement: HTMLElement;\n private _triggerEvent: TriggerEvent;\n\n constructor({\n autoEscape,\n getNodeElement,\n getNodeElementForNode,\n getScrollLeft,\n getTree,\n onCanMove,\n onCanMoveTo,\n onDragMove,\n onDragStop,\n onIsMoveHandle,\n openFolderDelay,\n openNode,\n refreshElements,\n slide,\n treeElement,\n triggerEvent,\n }: DragAndDropHandlerParams) {\n this._autoEscape = autoEscape;\n this._getNodeElement = getNodeElement;\n this._getNodeElementForNode = getNodeElementForNode;\n this._getScrollLeft = getScrollLeft;\n this._getTree = getTree;\n this._onCanMove = onCanMove;\n this._onCanMoveTo = onCanMoveTo;\n this._onDragMove = onDragMove;\n this._onDragStop = onDragStop;\n this._onIsMoveHandle = onIsMoveHandle;\n this._openFolderDelay = openFolderDelay;\n this._openNode = openNode;\n this._refreshElements = refreshElements;\n this._slide = slide;\n this._treeElement = treeElement;\n this._triggerEvent = triggerEvent;\n\n this.hoveredArea = null;\n this.hitAreas = [];\n this.isDragging = false;\n this.currentItem = null;\n }\n\n public mouseCapture(positionInfo: PositionInfo): boolean | null {\n const element = positionInfo.target;\n\n if (!this._mustCaptureElement(element)) {\n return null;\n }\n\n if (this._onIsMoveHandle && !this._onIsMoveHandle(jQuery(element))) {\n return null;\n }\n\n let nodeElement = this._getNodeElement(element);\n\n if (nodeElement && this._onCanMove) {\n if (!this._onCanMove(nodeElement.node)) {\n nodeElement = null;\n }\n }\n\n this.currentItem = nodeElement;\n return this.currentItem != null;\n }\n\n public mouseDrag(positionInfo: PositionInfo): boolean {\n if (!this.currentItem || !this._dragElement) {\n return false;\n }\n\n this._dragElement.move(positionInfo.pageX, positionInfo.pageY);\n\n const area = this._findHoveredArea(\n positionInfo.pageX,\n positionInfo.pageY,\n );\n\n if (area && this._canMoveToArea(area, this.currentItem)) {\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._onDragMove) {\n this._onDragMove(\n this.currentItem.node,\n positionInfo.originalEvent,\n );\n }\n }\n\n return true;\n }\n\n public mouseStart(positionInfo: PositionInfo): boolean {\n if (!this.currentItem) {\n return false;\n }\n\n this.refresh();\n\n const { left, top } = getElementPosition(positionInfo.target);\n\n const node = this.currentItem.node;\n\n this._dragElement = new DragElement({\n autoEscape: this._autoEscape ?? true,\n nodeName: node.name,\n offsetX: positionInfo.pageX - left,\n offsetY: positionInfo.pageY - top,\n treeElement: this._treeElement,\n });\n\n this.isDragging = true;\n this.currentItem.element.classList.add(\"jqtree-moving\");\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.classList.remove(\"jqtree-moving\");\n this.currentItem = null;\n }\n\n this.isDragging = false;\n\n if (!this.hoveredArea && currentItem) {\n if (this._onDragStop) {\n this._onDragStop(currentItem.node, positionInfo.originalEvent);\n }\n }\n\n return false;\n }\n\n public refresh(): void {\n this._removeHitAreas();\n\n if (this.currentItem) {\n const currentNode = this.currentItem.node;\n this._generateHitAreas(currentNode);\n this.currentItem = this._getNodeElementForNode(currentNode);\n\n if (this.isDragging) {\n this.currentItem.element.classList.add(\"jqtree-moving\");\n }\n }\n }\n\n private _canMoveToArea(area: HitArea, currentItem: NodeElement): boolean {\n if (!this._onCanMoveTo) {\n return true;\n }\n\n return this._onCanMoveTo(currentItem.node, area.node, area.position);\n }\n\n private _clear(): void {\n if (this._dragElement) {\n this._dragElement.remove();\n this._dragElement = null;\n }\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 return binarySearch<HitArea>(this.hitAreas, (area) => {\n if (y < area.top) {\n return 1;\n } else if (y > area.bottom) {\n return -1;\n } else {\n return 0;\n }\n });\n }\n\n private _generateHitAreas(currentNode: Node): void {\n const tree = this._getTree();\n\n if (!tree) {\n this.hitAreas = [];\n } else {\n this.hitAreas = generateHitAreas(\n tree,\n currentNode,\n this._getTreeDimensions().bottom,\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 treePosition = getElementPosition(this._treeElement);\n const left = treePosition.left + this._getScrollLeft();\n const top = treePosition.top;\n\n return {\n bottom: top + this._treeElement.clientHeight + 16,\n left,\n right: left + this._treeElement.clientWidth,\n top,\n };\n }\n\n /* Move the dragged node to the selected position in the tree. */\n private _moveItem(positionInfo: PositionInfo): void {\n if (\n this.currentItem &&\n this.hoveredArea?.position &&\n this._canMoveToArea(this.hoveredArea, this.currentItem)\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 === \"inside\") {\n this.hoveredArea.node.is_open = true;\n }\n\n const doMove = (): void => {\n const tree = this._getTree();\n\n if (tree) {\n tree.moveNode(movedNode, targetNode, position);\n\n this._treeElement.textContent = \"\";\n this._refreshElements(null);\n }\n };\n\n if (this._triggerEvent(\"tree.move\", {\n move_info: {\n do_move: doMove,\n moved_node: movedNode,\n original_event: positionInfo.originalEvent,\n position,\n previous_parent: previousParent,\n target_node: targetNode,\n },\n })) {\n doMove();\n }\n }\n }\n\n private _mustCaptureElement(element: HTMLElement): boolean {\n const nodeName = element.nodeName;\n\n return (\n nodeName !== \"INPUT\" &&\n nodeName !== \"SELECT\" &&\n nodeName !== \"TEXTAREA\"\n );\n }\n\n private _mustOpenFolderTimer(area: HitArea): boolean {\n const node = area.node;\n\n return node.isFolder() && !node.is_open && area.position === \"inside\";\n }\n\n private _removeDropHint(): void {\n if (this._previousGhost) {\n this._previousGhost.remove();\n }\n }\n\n private _removeHitAreas(): void {\n this.hitAreas = [];\n }\n\n private _removeHover(): void {\n this.hoveredArea = null;\n }\n\n private _startOpenFolderTimer(folder: Node): void {\n const openFolder = (): void => {\n this._openNode(folder, this._slide, () => {\n this.refresh();\n this._updateDropHint();\n });\n };\n\n this._stopOpenFolderTimer();\n\n const openFolderDelay = this._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 _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._getNodeElementForNode(this.hoveredArea.node);\n this._previousGhost = nodeElement.addDropHint(this.hoveredArea.position);\n }\n}\n","export const isInt = (n: unknown): boolean =>\n typeof n === \"number\" && n % 1 === 0;\n\nexport const getBoolString = (value: unknown): string =>\n value ? \"true\" : \"false\";\n","import type { GetTree, IsNodeSelected } from \"./jqtreeMethodTypes\";\nimport type { IconElement, OnCreateLi } from \"./jqtreeOptions\";\nimport type { Node } from \"./node\";\n\nimport { getBoolString } from \"./util\";\n\ninterface ElementsRendererParams {\n autoEscape: boolean;\n buttonLeft: boolean;\n closedIcon?: IconElement;\n dragAndDrop: boolean;\n getTree: GetTree;\n htmlElement: HTMLElement;\n isNodeSelected: IsNodeSelected;\n onCreateLi?: OnCreateLi;\n openedIcon?: IconElement;\n rtl?: boolean;\n showEmptyFolder: boolean;\n tabIndex?: number;\n}\n\nexport default class ElementsRenderer {\n public closedIconElement?: HTMLElement | Text;\n public openedIconElement?: HTMLElement | Text;\n private _autoEscape: boolean;\n private _buttonLeft: boolean;\n private _dragAndDrop: boolean;\n private _getTree: GetTree;\n private _htmlElement: HTMLElement;\n private _isNodeSelected: IsNodeSelected;\n private _onCreateLi?: OnCreateLi;\n private _rtl?: boolean;\n\n private _showEmptyFolder: boolean;\n private _tabIndex?: number;\n\n constructor({\n autoEscape,\n buttonLeft,\n closedIcon,\n dragAndDrop,\n getTree,\n htmlElement,\n isNodeSelected,\n onCreateLi,\n openedIcon,\n rtl,\n showEmptyFolder,\n tabIndex,\n }: ElementsRendererParams) {\n this._autoEscape = autoEscape;\n this._buttonLeft = buttonLeft;\n this._dragAndDrop = dragAndDrop;\n this._getTree = getTree;\n this._htmlElement = htmlElement;\n this._isNodeSelected = isNodeSelected;\n this._onCreateLi = onCreateLi;\n this._rtl = rtl;\n this._showEmptyFolder = showEmptyFolder;\n this._tabIndex = tabIndex;\n this.openedIconElement = this._createButtonElement(openedIcon ?? \"+\");\n this.closedIconElement = this._createButtonElement(closedIcon ?? \"-\");\n }\n\n public render(fromNode: Node | null): void {\n if (fromNode?.parent) {\n this.renderFromNode(fromNode);\n } else {\n this.renderFromRoot();\n }\n }\n\n public renderFromNode(node: Node): void {\n if (!node.element) {\n return;\n }\n\n const currentLi = node.element;\n const newLi = this._createLi(node, node.getLevel());\n currentLi.replaceWith(newLi);\n\n // create children\n this._createDomElements(newLi, node.children, false, node.getLevel() + 1);\n }\n\n public renderFromRoot(): void {\n this._htmlElement.textContent = '';\n\n const tree = this._getTree();\n\n if (tree) {\n this._createDomElements(this._htmlElement, tree.children, true, 1);\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 _createButtonElement(\n value: IconElement,\n ): HTMLElement | Text | undefined {\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 if ((value as HTMLElement).nodeType) {\n return value as HTMLElement;\n } else {\n return jQuery(value)[0];\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 if (child.hasChildren()) {\n this._createDomElements(li, child.children, false, level + 1);\n }\n }\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\", \"none\");\n\n // div\n const div = document.createElement(\"div\");\n div.className = \"jqtree-element jqtree_common\";\n div.setAttribute(\"role\", \"none\");\n\n li.appendChild(div);\n\n // button link\n const buttonLink = document.createElement(\"a\");\n buttonLink.className = buttonClasses;\n\n if (iconElement) {\n buttonLink.appendChild(iconElement.cloneNode(true));\n }\n\n if (this._buttonLeft) {\n div.appendChild(buttonLink);\n }\n\n // title span\n const titleSpan = this._createTitleSpan(\n node.name,\n isSelected,\n true,\n level,\n );\n titleSpan.setAttribute(\"aria-expanded\", getBoolString(node.is_open));\n div.appendChild(titleSpan);\n\n if (!this._buttonLeft) {\n div.appendChild(buttonLink);\n }\n\n return li;\n }\n\n /* Create the <li> element\n * Attach it to node.element.\n * Call onCreateLi\n */\n private _createLi(node: Node, level: number): HTMLLIElement {\n const isSelected = this._isNodeSelected(node);\n\n const mustShowFolder =\n node.isFolder() || (node.isEmptyFolder && this._showEmptyFolder);\n\n const li = mustShowFolder\n ? this._createFolderLi(node, level, isSelected)\n : this._createNodeLi(node, level, isSelected);\n\n this._attachNodeData(node, li);\n\n if (this._onCreateLi) {\n this._onCreateLi(node, jQuery(li), isSelected);\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\", \"none\");\n\n // div\n const div = document.createElement(\"div\");\n div.className = \"jqtree-element jqtree_common\";\n div.setAttribute(\"role\", \"none\");\n\n li.appendChild(div);\n\n // title span\n const titleSpan = this._createTitleSpan(\n node.name,\n isSelected,\n false,\n level,\n );\n div.appendChild(titleSpan);\n\n return li;\n }\n\n private _createTitleSpan(\n nodeName: string,\n isSelected: boolean,\n isFolder: boolean,\n level: number,\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-${this._buttonLeft ? \"left\" : \"right\"}`;\n\n titleSpan.className = classes;\n\n if (isSelected) {\n const tabIndex = this._tabIndex;\n\n if (tabIndex !== undefined) {\n titleSpan.setAttribute(\"tabindex\", `${tabIndex}`);\n }\n }\n\n this._setTreeItemAriaAttributes(titleSpan, nodeName, level, isSelected);\n\n if (this._autoEscape) {\n titleSpan.textContent = nodeName;\n } else {\n titleSpan.innerHTML = nodeName;\n }\n\n return titleSpan;\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._rtl) {\n classString += \" jqtree-rtl\";\n }\n }\n\n if (this._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 _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._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 _setTreeItemAriaAttributes(\n element: HTMLElement,\n name: string,\n level: number,\n isSelected: boolean,\n ) {\n element.setAttribute(\"aria-label\", name);\n element.setAttribute(\"aria-level\", `${level}`);\n element.setAttribute(\"aria-selected\", getBoolString(isSelected));\n element.setAttribute(\"role\", \"treeitem\");\n }\n}\n","import type {\n CloseNode,\n GetSelectedNode,\n IsFocusOnTree,\n OpenNode,\n SelectNode,\n} from \"./jqtreeMethodTypes\";\nimport type { Node } from \"./node\";\n\ninterface KeyHandlerParams {\n closeNode: CloseNode;\n getSelectedNode: GetSelectedNode;\n isFocusOnTree: IsFocusOnTree;\n keyboardSupport: boolean;\n openNode: OpenNode;\n selectNode: SelectNode;\n}\n\nexport default class KeyHandler {\n private _closeNode: CloseNode;\n private _getSelectedNode: GetSelectedNode;\n\n private _isFocusOnTree: IsFocusOnTree;\n\n private _keyboardSupport: boolean;\n private _openNode: OpenNode;\n private _originalSelectNode: SelectNode;\n constructor({\n closeNode,\n getSelectedNode,\n isFocusOnTree,\n keyboardSupport,\n openNode,\n selectNode,\n }: KeyHandlerParams) {\n this._closeNode = closeNode;\n this._getSelectedNode = getSelectedNode;\n this._isFocusOnTree = isFocusOnTree;\n this._keyboardSupport = keyboardSupport;\n this._openNode = openNode;\n this._originalSelectNode = selectNode;\n\n if (keyboardSupport) {\n document.addEventListener(\"keydown\", this._handleKeyDown);\n }\n }\n\n public deinit(): void {\n if (this._keyboardSupport) {\n document.removeEventListener(\"keydown\", this._handleKeyDown);\n }\n }\n\n public moveDown(selectedNode: Node): boolean {\n return this._selectNode(selectedNode.getNextVisibleNode());\n }\n\n public moveUp(selectedNode: Node): boolean {\n return this._selectNode(selectedNode.getPreviousVisibleNode());\n }\n\n private _canHandleKeyboard(): boolean {\n return this._keyboardSupport && this._isFocusOnTree();\n }\n\n private _handleKeyDown = (e: KeyboardEvent): void => {\n if (!this._canHandleKeyboard()) {\n return;\n }\n\n let isKeyHandled = false;\n\n const selectedNode = this._getSelectedNode();\n if (selectedNode) {\n switch (e.key) {\n case \"ArrowDown\":\n isKeyHandled = this.moveDown(selectedNode);\n break;\n\n case \"ArrowLeft\":\n isKeyHandled = this._moveLeft(selectedNode);\n break;\n\n case \"ArrowRight\":\n isKeyHandled = this._moveRight(selectedNode);\n break;\n\n case \"ArrowUp\":\n isKeyHandled = this.moveUp(selectedNode);\n break;\n }\n }\n\n if (isKeyHandled) {\n e.preventDefault();\n }\n };\n\n private _moveLeft(selectedNode: Node): boolean {\n if (selectedNode.isFolder() && selectedNode.is_open) {\n // Left on an open node closes the node\n this._closeNode(selectedNode);\n return true;\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 private _moveRight(selectedNode: Node): boolean {\n if (!selectedNode.isFolder()) {\n return false;\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.getNextVisibleNode());\n } else {\n // Right expands a closed node\n this._openNode(selectedNode);\n return true;\n }\n }\n }\n\n /* Select the node.\n * Don't do anything if the node is null.\n * Result: a different node was selected.\n */\n private _selectNode(node: Node | null): boolean {\n if (!node) {\n return false;\n } else {\n this._originalSelectNode(node);\n\n return true;\n }\n }\n}\n","export interface PositionInfo {\n originalEvent: Event;\n pageX: number;\n pageY: number;\n target: HTMLElement;\n}\n\nexport const getPositionInfoFromMouseEvent = (e: MouseEvent): PositionInfo => ({\n originalEvent: e,\n pageX: e.pageX,\n pageY: e.pageY,\n target: e.target as HTMLElement,\n});\n\nexport const getPositionInfoFromTouch = (\n touch: Touch,\n e: TouchEvent,\n): PositionInfo => ({\n originalEvent: e,\n pageX: touch.pageX,\n pageY: touch.pageY,\n target: touch.target as HTMLElement,\n});\n","import type { TriggerEvent } from \"./jqtreeMethodTypes\";\nimport type { PositionInfo } from \"./mouseUtils\";\nimport type { Node } from \"./node\";\n\nimport {\n getPositionInfoFromMouseEvent,\n getPositionInfoFromTouch,\n} from \"./mouseUtils\";\n\nexport type GetMouseDelay = () => number;\nexport type GetNode = (element: HTMLElement) => Node | null;\nexport type MouseCapture = (positionInfo: PositionInfo) => boolean | null;\nexport type MouseStart = (positionInfo: PositionInfo) => boolean;\n\ninterface ClickTarget {\n node: Node;\n type: \"button\" | \"label\";\n}\n\ninterface MouseHandlerParams {\n element: HTMLElement;\n getMouseDelay: () => number;\n getNode: GetNode;\n onClickButton: (node: Node) => void;\n onClickTitle: (node: Node) => void;\n onMouseCapture: MouseCapture;\n onMouseDrag: (positionInfo: PositionInfo) => void;\n onMouseStart: MouseStart;\n onMouseStop: (positionInfo: PositionInfo) => void;\n triggerEvent: TriggerEvent;\n useContextMenu: boolean;\n}\n\nclass MouseHandler {\n private _element: HTMLElement;\n private _getMouseDelay: GetMouseDelay;\n private _getNode: GetNode;\n\n private _isMouseDelayMet: boolean;\n\n private _isMouseStarted: boolean;\n\n private _mouseDelayTimer: null | number;\n\n private _mouseDownInfo: null | PositionInfo;\n private _onClickButton: (node: Node) => void;\n private _onClickTitle: (node: Node) => void;\n\n private _onMouseCapture: MouseCapture;\n\n private _onMouseDrag: (positionInfo: PositionInfo) => void;\n\n private _onMouseStart: MouseStart;\n\n private _onMouseStop: (positionInfo: PositionInfo) => void;\n\n private _triggerEvent: TriggerEvent;\n private _useContextMenu: boolean;\n constructor({\n element,\n getMouseDelay,\n getNode,\n onClickButton,\n onClickTitle,\n onMouseCapture,\n onMouseDrag,\n onMouseStart,\n onMouseStop,\n triggerEvent,\n useContextMenu,\n }: MouseHandlerParams) {\n this._element = element;\n this._getMouseDelay = getMouseDelay;\n this._getNode = getNode;\n this._onClickButton = onClickButton;\n this._onClickTitle = onClickTitle;\n this._onMouseCapture = onMouseCapture;\n this._onMouseDrag = onMouseDrag;\n this._onMouseStart = onMouseStart;\n this._onMouseStop = onMouseStop;\n this._triggerEvent = triggerEvent;\n this._useContextMenu = useContextMenu;\n\n element.addEventListener(\"click\", this._handleClick);\n element.addEventListener(\"dblclick\", this._handleDblclick);\n element.addEventListener(\"mousedown\", this._mouseDown, {\n passive: false,\n });\n element.addEventListener(\"touchstart\", this._touchStart, {\n passive: false,\n });\n\n if (useContextMenu) {\n element.addEventListener(\"contextmenu\", this._handleContextmenu);\n }\n\n this._isMouseStarted = false;\n this._mouseDelayTimer = null;\n this._isMouseDelayMet = false;\n this._mouseDownInfo = null;\n }\n public deinit(): void {\n this._element.removeEventListener(\"click\", this._handleClick);\n this._element.removeEventListener(\"dblclick\", this._handleDblclick);\n\n if (this._useContextMenu) {\n this._element.removeEventListener(\n \"contextmenu\",\n this._handleContextmenu,\n );\n }\n\n this._element.removeEventListener(\"mousedown\", this._mouseDown);\n this._element.removeEventListener(\"touchstart\", this._touchStart);\n this._removeMouseMoveEventListeners();\n }\n private _getClickTarget(element: HTMLElement): ClickTarget | null {\n const button = element.closest<HTMLElement>(\".jqtree-toggler\");\n\n if (button) {\n const node = this._getNode(button);\n\n if (node) {\n return {\n node,\n type: \"button\",\n };\n }\n } else {\n const jqTreeElement =\n element.closest<HTMLElement>(\".jqtree-element\");\n\n if (jqTreeElement) {\n const node = this._getNode(jqTreeElement);\n if (node) {\n return {\n node,\n type: \"label\",\n };\n }\n }\n }\n\n return null;\n }\n private _handleClick = (e: MouseEvent): void => {\n if (!e.target) {\n return;\n }\n\n const clickTarget = this._getClickTarget(e.target as HTMLElement);\n\n if (!clickTarget) {\n return;\n }\n\n switch (clickTarget.type) {\n case \"button\":\n this._onClickButton(clickTarget.node);\n\n e.preventDefault();\n e.stopPropagation();\n break;\n\n case \"label\": {\n if (this._triggerEvent(\"tree.click\", {\n click_event: e,\n node: clickTarget.node,\n })) {\n this._onClickTitle(clickTarget.node);\n }\n break;\n }\n }\n };\n\n private _handleContextmenu = (e: MouseEvent) => {\n if (!e.target) {\n return;\n }\n\n const div = (e.target as HTMLElement).closest<HTMLElement>(\n \"ul.jqtree-tree .jqtree-element\",\n );\n\n if (div) {\n const node = this._getNode(div);\n if (node) {\n e.preventDefault();\n e.stopPropagation();\n\n this._triggerEvent(\"tree.contextmenu\", {\n click_event: e,\n node,\n });\n return false;\n }\n }\n\n return null;\n };\n\n private _handleDblclick = (e: MouseEvent): void => {\n if (!e.target) {\n return;\n }\n\n const clickTarget = this._getClickTarget(e.target as HTMLElement);\n\n if (clickTarget?.type === \"label\") {\n this._triggerEvent(\"tree.dblclick\", {\n click_event: e,\n node: clickTarget.node,\n });\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._onMouseCapture(positionInfo)) {\n return false;\n }\n\n this._handleStartMouse();\n\n return true;\n }\n\n private _handleMouseMove(\n e: MouseEvent | TouchEvent,\n positionInfo: PositionInfo,\n ): void {\n if (this._isMouseStarted) {\n this._onMouseDrag(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._onMouseStart(this._mouseDownInfo);\n }\n\n if (this._isMouseStarted) {\n this._onMouseDrag(positionInfo);\n\n if (e.cancelable) {\n e.preventDefault();\n }\n } else {\n this._handleMouseUp(positionInfo);\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._onMouseStop(positionInfo);\n }\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 _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 _mouseMove = (e: MouseEvent): void => {\n this._handleMouseMove(e, getPositionInfoFromMouseEvent(e));\n };\n\n private _mouseUp = (e: MouseEvent): void => {\n this._handleMouseUp(getPositionInfoFromMouseEvent(e));\n };\n\n private _removeMouseMoveEventListeners() {\n document.removeEventListener(\"mousemove\", this._mouseMove);\n document.removeEventListener(\"touchmove\", this._touchMove);\n document.removeEventListener(\"mouseup\", this._mouseUp);\n document.removeEventListener(\"touchend\", this._touchEnd);\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 _touchEnd = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this._handleMouseUp(getPositionInfoFromTouch(touch, e));\n };\n\n private _touchMove = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this._handleMouseMove(e, getPositionInfoFromTouch(touch, e));\n };\n\n private _touchStart = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this._handleMouseDown(getPositionInfoFromTouch(touch, e));\n };\n}\n\nexport default MouseHandler;\n","interface NodeRecordWithChildren extends NodeRecord {\n children: NodeData[];\n}\n\nexport const isNodeRecordWithChildren = (\n data: NodeData,\n): data is NodeRecordWithChildren =>\n typeof data === \"object\" &&\n \"children\" in data &&\n data.children instanceof Array;\n","import { isNodeRecordWithChildren } from \"./nodeUtils\";\n\nexport type Position = \"after\" | \"before\" | \"inside\";\n\ntype IterateCallback = (node: Node, level: number) => boolean;\n\nexport class Node implements INode {\n [key: string]: unknown;\n\n public children: Node[];\n public element?: HTMLElement;\n public id?: NodeId;\n public idMapping: Map<NodeId, Node>;\n public is_loading: boolean;\n public is_open: boolean;\n public isEmptyFolder: boolean;\n public load_on_demand: boolean;\n public name: string;\n public nodeClass?: typeof Node;\n public parent: Node | null;\n public tree?: Node;\n\n constructor(\n nodeData: NodeData | null = null,\n isRoot = false,\n nodeClass = Node,\n ) {\n this.name = \"\";\n this.load_on_demand = false;\n\n this.isEmptyFolder =\n nodeData != null &&\n isNodeRecordWithChildren(nodeData) &&\n nodeData.children.length === 0;\n\n this.setData(nodeData);\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 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 node._loadChildrenFromData(nodeInfo);\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 node._loadChildrenFromData(nodeInfo);\n return node;\n }\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 public addNodeToIndex(node: Node): void {\n if (node.id != null) {\n this.idMapping.set(node.id, 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 append(nodeInfo: NodeData): Node {\n const node = this._createNode(nodeInfo);\n this.addChild(node);\n\n node._loadChildrenFromData(nodeInfo);\n return node;\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 /*\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 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 getLastChild(): Node | null {\n if (!this.hasChildren()) {\n return null;\n } else {\n const lastChild = this.children[this.children.length - 1] as Node;\n\n if (!(lastChild.hasChildren() && lastChild.is_open)) {\n return lastChild;\n } else {\n return lastChild.getLastChild();\n }\n }\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 getNextNode(includeChildren = true): Node | null {\n if (includeChildren && this.hasChildren()) {\n return this.children[0] ?? null;\n } else if (!this.parent) {\n return null;\n } else {\n const nextSibling = this.getNextSibling();\n\n if (nextSibling) {\n return nextSibling;\n } else {\n return this.parent.getNextNode(false);\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] ?? null;\n } else {\n return null;\n }\n }\n }\n\n public getNextVisibleNode(): Node | null {\n if (this.hasChildren() && this.is_open) {\n // First child\n return this.children[0] ?? null;\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 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 getNodeById(nodeId: NodeId): Node | null {\n return this.idMapping.get(nodeId) ?? null;\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 new Error(`Node with name ${name} not found`);\n }\n\n return node;\n }\n\n public getNodesByProperty(key: string, value: unknown): Node[] {\n return this.filter((node: Node) => node[key] === value);\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 getPreviousNode(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const previousSibling = this.getPreviousSibling();\n\n if (!previousSibling) {\n return this.getParent();\n } else if (previousSibling.hasChildren()) {\n return previousSibling.getLastChild();\n } else {\n return previousSibling;\n }\n }\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] ?? null;\n } else {\n return null;\n }\n }\n }\n\n public getPreviousVisibleNode(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const previousSibling = this.getPreviousSibling();\n\n if (!previousSibling) {\n return this.getParent();\n } else 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 }\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 // 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 public isFolder(): boolean {\n return this.hasChildren() || this.load_on_demand;\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 /*\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 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 _iterate(this, 0);\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[]): this {\n this.removeChildren();\n\n for (const childData of data) {\n const node = this._createNode(childData);\n this.addChild(node);\n\n if (isNodeRecordWithChildren(childData)) {\n node.loadFromData(childData.children);\n }\n }\n\n return this;\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 \"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 \"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 \"inside\": {\n // move inside as first child\n targetNode.addChildAtPosition(movedNode, 0);\n return true;\n }\n }\n }\n }\n\n public prepend(nodeInfo: NodeData): Node {\n const node = this._createNode(nodeInfo);\n this.addChildAtPosition(node, 0);\n\n node._loadChildrenFromData(nodeInfo);\n return node;\n }\n\n public remove(): void {\n if (this.parent) {\n this.parent.removeChild(this);\n this.parent = null;\n }\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 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 removeNodeFromIndex(node: Node): void {\n if (node.id != null) {\n this.idMapping.delete(node.id);\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 private _createNode(nodeData?: NodeData): Node {\n const nodeClass = this._getNodeClass();\n return new nodeClass(nodeData);\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 // Load children data from nodeInfo if it has children\n private _loadChildrenFromData(nodeInfo: NodeData) {\n if (isNodeRecordWithChildren(nodeInfo) && nodeInfo.children.length) {\n this.loadFromData(nodeInfo.children);\n }\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","import type { DropHint } from \"../dragAndDropHandler/types\";\n\nclass BorderDropHint implements DropHint {\n private _hint?: HTMLElement;\n\n constructor(element: HTMLElement, scrollLeft: number) {\n const div = element.querySelector(\":scope > .jqtree-element\");\n\n if (!div) {\n this._hint = undefined;\n return;\n }\n\n const width = Math.max(element.offsetWidth + scrollLeft - 4, 0);\n const height = Math.max(element.clientHeight - 4, 0);\n\n const hint = document.createElement(\"span\");\n hint.className = \"jqtree-border\";\n hint.style.width = `${width}px`;\n hint.style.height = `${height}px`;\n\n this._hint = hint;\n\n div.append(this._hint);\n }\n\n public remove(): void {\n this._hint?.remove();\n }\n}\n\nexport default BorderDropHint;\n","import type { DropHint } from \"../dragAndDropHandler/types\";\nimport type { Node, Position } from \"../node\";\n\nclass GhostDropHint implements DropHint {\n private _element: HTMLElement;\n private _ghost: HTMLElement;\n private _node: Node;\n\n constructor(node: Node, element: HTMLElement, position: Position) {\n this._element = element;\n this._node = node;\n this._ghost = this._createGhostElement();\n\n switch (position) {\n case \"after\":\n this._moveAfter();\n break;\n\n case \"before\":\n this._moveBefore();\n break;\n\n case \"inside\": {\n if (node.isFolder() && node.is_open) {\n this._moveInsideOpenFolder();\n } else {\n this._moveInside();\n }\n }\n }\n }\n\n public remove(): void {\n this._ghost.remove();\n }\n\n private _createGhostElement() {\n const ghost = document.createElement(\"li\");\n ghost.className = \"jqtree_common jqtree-ghost\";\n\n const circleSpan = document.createElement(\"span\");\n circleSpan.className = \"jqtree_common jqtree-circle\";\n ghost.append(circleSpan);\n\n const lineSpan = document.createElement(\"span\");\n lineSpan.className = \"jqtree_common jqtree-line\";\n ghost.append(lineSpan);\n\n return ghost;\n }\n\n private _moveAfter(): void {\n this._element.after(this._ghost);\n }\n\n private _moveBefore(): void {\n this._element.before(this._ghost);\n }\n\n private _moveInside(): void {\n this._element.after(this._ghost);\n this._ghost.classList.add(\"jqtree-inside\");\n }\n\n private _moveInsideOpenFolder(): void {\n const childElement = this._node.children[0]?.element;\n\n if (childElement) {\n childElement.before(this._ghost);\n }\n }\n}\n\nexport default GhostDropHint;\n","import type { DropHint } from \"../dragAndDropHandler/types\";\nimport type { GetScrollLeft } from \"../jqtreeMethodTypes\";\nimport type { Node, Position } from \"../node\";\n\nimport BorderDropHint from \"./borderDropHint\";\nimport GhostDropHint from \"./ghostDropHint\";\n\nexport interface NodeElementParams {\n getScrollLeft: GetScrollLeft;\n node: Node;\n tabIndex?: number;\n treeElement: HTMLElement;\n}\n\nclass NodeElement {\n public element: HTMLElement;\n public node: Node;\n private _getScrollLeft: GetScrollLeft;\n private _tabIndex?: number;\n private _treeElement: HTMLElement;\n\n constructor({\n getScrollLeft,\n node,\n tabIndex,\n treeElement,\n }: NodeElementParams) {\n this._getScrollLeft = getScrollLeft;\n this._tabIndex = tabIndex;\n this._treeElement = treeElement;\n\n this.init(node);\n }\n\n public addDropHint(position: Position): DropHint {\n if (this._mustShowBorderDropHint(position)) {\n return new BorderDropHint(this.element, this._getScrollLeft());\n } else {\n return new GhostDropHint(this.node, this.element, position);\n }\n }\n\n public deselect(): void {\n this.element.classList.remove(\"jqtree-selected\");\n\n const titleSpan = this._getTitleSpan();\n titleSpan.removeAttribute(\"tabindex\");\n titleSpan.setAttribute(\"aria-selected\", \"false\");\n\n titleSpan.blur();\n }\n\n public init(node: Node): void {\n this.node = node;\n\n node.element ??= this._treeElement;\n\n this.element = node.element;\n }\n\n public select(mustSetFocus: boolean): void {\n this.element.classList.add(\"jqtree-selected\");\n\n const titleSpan = this._getTitleSpan();\n const tabIndex = this._tabIndex;\n\n // Check for null or undefined\n if (tabIndex != null) {\n titleSpan.setAttribute(\"tabindex\", tabIndex.toString());\n }\n\n titleSpan.setAttribute(\"aria-selected\", \"true\");\n\n if (mustSetFocus) {\n titleSpan.focus();\n }\n }\n\n protected _getTitleSpan(): HTMLSpanElement {\n return this.element.querySelector(\n \":scope > .jqtree-element > span.jqtree-title\",\n ) as HTMLSpanElement;\n }\n\n protected _getUl(): HTMLUListElement {\n return this.element.querySelector(\":scope > ul\") as HTMLUListElement;\n }\n\n protected _mustShowBorderDropHint(position: Position): boolean {\n return position === \"inside\";\n }\n}\n\nexport default NodeElement;\n","export type AnimationSpeed = \"fast\" | \"slow\" | number;\n\nexport const getAnimationDuration = (duration: AnimationSpeed): number => {\n if (typeof duration === \"number\") {\n return duration;\n }\n\n return duration === \"slow\" ? 600 : 200;\n};\n\nexport const slideDown = (\n element: HTMLElement,\n animationSpeed: AnimationSpeed,\n onFinished: () => void,\n): void => {\n element.style.display = \"block\";\n\n const animation = element.animate(\n [\n { height: \"0\", overflow: \"hidden\" },\n { height: `${element.scrollHeight}px`, overflow: \"hidden\" },\n ],\n { duration: getAnimationDuration(animationSpeed) },\n );\n\n animation.onfinish = () => {\n onFinished();\n };\n};\n\nexport const slideUp = (\n element: HTMLElement,\n animationSpeed: AnimationSpeed,\n onFinished: () => void,\n): void => {\n const animation = element.animate(\n [\n { height: `${element.scrollHeight}px`, overflow: \"hidden\" },\n { height: \"0\", overflow: \"hidden\" },\n ],\n { duration: getAnimationDuration(animationSpeed) },\n );\n\n animation.onfinish = () => {\n element.style.display = \"none\";\n onFinished();\n };\n};","import type { AnimationSpeed } from \"../animation\";\nimport type { OnFinishOpenNode, TriggerEvent } from \"../jqtreeMethodTypes\";\nimport type { Position } from \"../node\";\nimport type { NodeElementParams } from \"./index\";\n\nimport { slideDown, slideUp } from \"../animation\";\nimport NodeElement from \"./index\";\n\ninterface FolderElementParams extends NodeElementParams {\n closedIconElement?: HTMLElement | Text;\n openedIconElement?: HTMLElement | Text;\n triggerEvent: TriggerEvent;\n}\n\nclass FolderElement extends NodeElement {\n private _closedIconElement?: HTMLElement | Text;\n private _openedIconElement?: HTMLElement | Text;\n private _triggerEvent: TriggerEvent;\n\n constructor({\n closedIconElement,\n getScrollLeft,\n node,\n openedIconElement,\n tabIndex,\n treeElement,\n triggerEvent,\n }: FolderElementParams) {\n super({\n getScrollLeft,\n node,\n tabIndex,\n treeElement,\n });\n\n this._closedIconElement = closedIconElement;\n this._openedIconElement = openedIconElement;\n this._triggerEvent = triggerEvent;\n }\n\n public close(slide: boolean, animationSpeed: AnimationSpeed): 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.classList.add(\"jqtree-closed\");\n button.innerHTML = \"\";\n\n const closedIconElement = this._closedIconElement;\n\n if (closedIconElement) {\n const icon = closedIconElement.cloneNode(true);\n button.appendChild(icon);\n }\n\n const doClose = (): void => {\n this.element.classList.add(\"jqtree-closed\");\n\n const titleSpan = this._getTitleSpan();\n titleSpan.setAttribute(\"aria-expanded\", \"false\");\n\n this._triggerEvent(\"tree.close\", {\n node: this.node,\n });\n };\n\n const ul = this._getUl();\n\n if (slide) {\n slideUp(ul, animationSpeed, doClose);\n } else {\n ul.style.display = \"none\";\n doClose();\n }\n }\n\n public open(\n onFinished: OnFinishOpenNode | undefined,\n slide: boolean,\n animationSpeed: AnimationSpeed,\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.classList.remove(\"jqtree-closed\");\n button.innerHTML = \"\";\n\n const openedIconElement = this._openedIconElement;\n\n if (openedIconElement) {\n const icon = openedIconElement.cloneNode(true);\n button.appendChild(icon);\n }\n\n const doOpen = (): void => {\n this.element.classList.remove(\"jqtree-closed\");\n\n const titleSpan = this._getTitleSpan();\n titleSpan.setAttribute(\"aria-expanded\", \"true\");\n\n if (onFinished) {\n onFinished(this.node);\n }\n\n this._triggerEvent(\"tree.open\", {\n node: this.node,\n });\n };\n\n const ul = this._getUl();\n\n if (slide) {\n slideDown(ul, animationSpeed, doOpen);\n } else {\n ul.style.display = \"block\";\n doOpen();\n }\n }\n\n protected _mustShowBorderDropHint(position: Position): boolean {\n return !this.node.is_open && position === \"inside\";\n }\n\n private _getButton(): HTMLLinkElement {\n return this.element.querySelector(\n \":scope > .jqtree-element > a.jqtree-toggler\",\n ) as HTMLLinkElement;\n }\n}\n\nexport default FolderElement;\n","import type {\n AddToSelection,\n GetNodeById,\n GetSelectedNodes,\n GetTree,\n OpenNode,\n RefreshElements,\n RemoveFromSelection,\n} from \"./jqtreeMethodTypes\";\nimport type { OnGetStateFromStorage, OnSetStateFromStorage } from \"./jqtreeOptions\";\nimport type { Node } from \"./node\";\n\nimport { isInt } from \"./util\";\n\nexport interface SavedState {\n open_nodes?: NodeId[];\n selected_node?: NodeId[];\n}\n\ninterface SaveStateHandlerParams {\n addToSelection: AddToSelection;\n getNodeById: GetNodeById;\n getSelectedNodes: GetSelectedNodes;\n getTree: GetTree;\n onGetStateFromStorage?: OnGetStateFromStorage;\n onSetStateFromStorage?: OnSetStateFromStorage;\n openNode: OpenNode;\n refreshElements: RefreshElements;\n removeFromSelection: RemoveFromSelection;\n saveState: boolean | string;\n}\n\nexport default class SaveStateHandler {\n private _addToSelection: AddToSelection;\n private _getNodeById: GetNodeById;\n private _getSelectedNodes: GetSelectedNodes;\n private _getTree: GetTree;\n private _onGetStateFromStorage?: OnGetStateFromStorage;\n private _onSetStateFromStorage?: OnSetStateFromStorage;\n private _openNode: OpenNode;\n private _refreshElements: RefreshElements;\n private _removeFromSelection: RemoveFromSelection;\n private _saveStateOption: boolean | string;\n\n constructor({\n addToSelection,\n getNodeById,\n getSelectedNodes,\n getTree,\n onGetStateFromStorage,\n onSetStateFromStorage,\n openNode,\n refreshElements,\n removeFromSelection,\n saveState,\n }: SaveStateHandlerParams) {\n this._addToSelection = addToSelection;\n this._getNodeById = getNodeById;\n this._getSelectedNodes = getSelectedNodes;\n this._getTree = getTree;\n this._onGetStateFromStorage = onGetStateFromStorage;\n this._onSetStateFromStorage = onSetStateFromStorage;\n this._openNode = openNode;\n this._refreshElements = refreshElements;\n this._removeFromSelection = removeFromSelection;\n this._saveStateOption = saveState;\n }\n\n public getNodeIdToBeSelected(): NodeId | null {\n const state = this.getStateFromStorage();\n\n if (state?.selected_node) {\n return state.selected_node[0] ?? null;\n } else {\n return null;\n }\n }\n\n public getState(): SavedState {\n const getOpenNodeIds = (): NodeId[] => {\n const openNodes: NodeId[] = [];\n\n this._getTree()?.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._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 public getStateFromStorage(): null | SavedState {\n const jsonData = this._loadFromStorage();\n\n if (jsonData) {\n return this._parseState(jsonData);\n } else {\n return null;\n }\n }\n\n public saveState(): void {\n const state = JSON.stringify(this.getState());\n\n if (this._onSetStateFromStorage) {\n this._onSetStateFromStorage(state);\n } else {\n localStorage.setItem(this._getKeyName(), state);\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 (boolean)\n */\n public setInitialState(state: SavedState): boolean {\n let mustLoadOnDemand = false;\n\n if (state.open_nodes) {\n mustLoadOnDemand = this._openInitialNodes(state.open_nodes);\n }\n\n this._resetSelection();\n\n if (state.selected_node) {\n this._selectInitialNodes(state.selected_node);\n }\n\n return mustLoadOnDemand;\n }\n\n public setInitialStateOnDemand(\n state: SavedState,\n cbFinished: () => void,\n ): void {\n let loadingCount = 0;\n let nodeIds = state.open_nodes;\n\n const openNodes = (): void => {\n if (!nodeIds) {\n return;\n }\n\n const newNodesIds = [];\n\n for (const nodeId of nodeIds) {\n const node = this._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._openNode(node, false);\n }\n }\n }\n }\n\n nodeIds = newNodesIds;\n\n if (state.selected_node) {\n if (this._selectInitialNodes(state.selected_node)) {\n this._refreshElements(null);\n }\n }\n\n if (loadingCount === 0) {\n cbFinished();\n }\n };\n\n const loadAndOpenNode = (node: Node): void => {\n loadingCount += 1;\n this._openNode(node, false, () => {\n loadingCount -= 1;\n openNodes();\n });\n };\n\n openNodes();\n }\n\n private _getKeyName(): string {\n if (typeof this._saveStateOption === \"string\") {\n return this._saveStateOption;\n } else {\n return \"tree\";\n }\n }\n\n private _loadFromStorage(): null | string {\n if (this._onGetStateFromStorage) {\n return this._onGetStateFromStorage();\n } else {\n return localStorage.getItem(this._getKeyName());\n }\n }\n\n private _openInitialNodes(nodeIds: NodeId[]): boolean {\n let mustLoadOnDemand = false;\n\n for (const nodeId of nodeIds) {\n const node = this._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 _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.selected_node && isInt(state.selected_node)) {\n // Convert to array\n state.selected_node = [state.selected_node];\n }\n\n return state;\n }\n\n private _resetSelection(): void {\n const selectedNodes = this._getSelectedNodes();\n\n selectedNodes.forEach((node) => {\n this._removeFromSelection(node);\n });\n }\n\n private _selectInitialNodes(nodeIds: NodeId[]): boolean {\n let selectCount = 0;\n\n for (const nodeId of nodeIds) {\n const node = this._getNodeById(nodeId);\n\n if (node) {\n selectCount += 1;\n\n this._addToSelection(node);\n }\n }\n\n return selectCount !== 0;\n }\n}\n","export type HorizontalScrollDirection = \"left\" | \"right\";\nexport type VerticalScrollDirection = \"bottom\" | \"top\";\n\ninterface ConstructorParams {\n container: HTMLElement;\n refreshHitAreas: () => void;\n}\n\nexport abstract class ScrollParent {\n protected _container: HTMLElement;\n protected _horizontalScrollDirection?: HorizontalScrollDirection;\n protected _horizontalScrollTimeout?: number;\n\n protected _refreshHitAreas: () => void;\n protected _verticalScrollDirection?: VerticalScrollDirection;\n protected _verticalScrollTimeout?: number;\n\n constructor({ container, refreshHitAreas }: ConstructorParams) {\n this._container = container;\n this._refreshHitAreas = refreshHitAreas;\n }\n\n public checkHorizontalScrolling(pageX: number): void {\n const newHorizontalScrollDirection =\n this._getNewHorizontalScrollDirection(pageX);\n\n if (this._horizontalScrollDirection !== newHorizontalScrollDirection) {\n this._horizontalScrollDirection = newHorizontalScrollDirection;\n\n if (this._horizontalScrollTimeout != null) {\n window.clearTimeout(this._horizontalScrollTimeout);\n }\n\n if (newHorizontalScrollDirection) {\n this._horizontalScrollTimeout = window.setTimeout(\n this._scrollHorizontally.bind(this),\n 40,\n );\n }\n }\n }\n\n public checkVerticalScrolling(pageY: number) {\n const newVerticalScrollDirection =\n this._getNewVerticalScrollDirection(pageY);\n\n if (this._verticalScrollDirection !== newVerticalScrollDirection) {\n this._verticalScrollDirection = newVerticalScrollDirection;\n\n if (this._verticalScrollTimeout != null) {\n window.clearTimeout(this._verticalScrollTimeout);\n this._verticalScrollTimeout = undefined;\n }\n\n if (newVerticalScrollDirection) {\n this._verticalScrollTimeout = window.setTimeout(\n this._scrollVertically.bind(this),\n 40,\n );\n }\n }\n }\n\n public getScrollLeft(): number {\n return this._container.scrollLeft;\n }\n\n public scrollToY(top: number): void {\n this._container.scrollTop = top;\n }\n\n public stopScrolling() {\n this._horizontalScrollDirection = undefined;\n this._verticalScrollDirection = undefined;\n }\n\n protected abstract _getNewHorizontalScrollDirection(\n pageX: number,\n ): HorizontalScrollDirection | undefined;\n protected abstract _getNewVerticalScrollDirection(\n pageY: number,\n ): undefined | VerticalScrollDirection;\n\n protected _scrollHorizontally() {\n if (!this._horizontalScrollDirection) {\n return;\n }\n\n const distance = this._horizontalScrollDirection === \"left\" ? -20 : 20;\n this._container.scrollBy({\n behavior: \"instant\",\n left: distance,\n top: 0,\n });\n\n this._refreshHitAreas();\n\n setTimeout(this._scrollHorizontally.bind(this), 40);\n }\n\n protected _scrollVertically() {\n if (!this._verticalScrollDirection) {\n return;\n }\n\n const distance = this._verticalScrollDirection === \"top\" ? -20 : 20;\n this._container.scrollBy({\n behavior: \"instant\",\n left: 0,\n top: distance,\n });\n\n this._refreshHitAreas();\n\n setTimeout(this._scrollVertically.bind(this), 40);\n }\n}\n","import type {\n HorizontalScrollDirection,\n VerticalScrollDirection,\n} from \"./scrollParent\";\n\nimport { getElementPosition, getOffsetTop } from \"../positionUtils\";\nimport { ScrollParent } from \"./scrollParent\";\n\n\nexport default class ContainerScrollParent extends ScrollParent {\n private _scrollParentBottom?: number;\n private _scrollParentTop?: number;\n\n public stopScrolling() {\n super.stopScrolling();\n\n this._horizontalScrollDirection = undefined;\n this._verticalScrollDirection = undefined;\n }\n\n protected _getNewHorizontalScrollDirection(\n pageX: number,\n ): HorizontalScrollDirection | undefined {\n const scrollParentOffset = getElementPosition(this._container);\n const containerWidth = this._container.getBoundingClientRect().width;\n\n const rightEdge = scrollParentOffset.left + containerWidth;\n const leftEdge = scrollParentOffset.left;\n const isNearRightEdge = pageX > rightEdge - 20;\n const isNearLeftEdge = pageX < leftEdge + 20;\n\n if (isNearRightEdge) {\n return \"right\";\n } else if (isNearLeftEdge) {\n return \"left\";\n }\n\n return undefined;\n }\n\n protected _getNewVerticalScrollDirection(\n pageY: number,\n ): undefined | VerticalScrollDirection {\n if (pageY < this._getScrollParentTop()) {\n return \"top\";\n }\n\n if (pageY > this._getScrollParentBottom()) {\n return \"bottom\";\n }\n\n return undefined;\n }\n\n private _getScrollParentBottom() {\n if (this._scrollParentBottom == null) {\n const containerHeight =\n this._container.getBoundingClientRect().height;\n this._scrollParentBottom =\n this._getScrollParentTop() + containerHeight;\n }\n\n return this._scrollParentBottom;\n }\n\n private _getScrollParentTop() {\n this._scrollParentTop ??= getOffsetTop(this._container);\n\n return this._scrollParentTop;\n }\n}\n","import type {\n HorizontalScrollDirection,\n VerticalScrollDirection,\n} from \"./scrollParent\";\n\nimport { getOffsetTop } from \"../positionUtils\";\nimport { ScrollParent } from \"./scrollParent\";\n\ninterface Params {\n refreshHitAreas: () => void;\n treeElement: HTMLElement;\n}\n\nexport default class DocumentScrollParent extends ScrollParent {\n private _documentScrollHeight?: number;\n private _documentScrollWidth?: number;\n private _treeElement: HTMLElement;\n\n constructor({ refreshHitAreas, treeElement }: Params) {\n super({ container: document.documentElement, refreshHitAreas });\n\n this._treeElement = treeElement;\n }\n\n public scrollToY(top: number): void {\n const treeTop = getOffsetTop(this._treeElement);\n\n super.scrollToY(top + treeTop);\n }\n\n public stopScrolling() {\n super.stopScrolling();\n\n this._documentScrollHeight = undefined;\n this._documentScrollWidth = undefined;\n }\n\n protected _getNewHorizontalScrollDirection(\n pageX: number,\n ): HorizontalScrollDirection | undefined {\n const scrollLeft = this._container.scrollLeft;\n const windowWidth = window.innerWidth;\n\n const isNearRightEdge = pageX > windowWidth - 20;\n const isNearLeftEdge = pageX - scrollLeft < 20;\n\n if (isNearRightEdge && this._canScrollRight()) {\n return \"right\";\n }\n\n if (isNearLeftEdge) {\n return \"left\";\n }\n\n return undefined;\n }\n\n protected _getNewVerticalScrollDirection(\n pageY: number,\n ): undefined | VerticalScrollDirection {\n const scrollTop = this._container.scrollTop;\n const distanceTop = pageY - scrollTop;\n\n if (distanceTop < 20) {\n return \"top\";\n }\n\n const windowHeight = window.innerHeight;\n\n if (windowHeight - (pageY - scrollTop) < 20 && this._canScrollDown()) {\n return \"bottom\";\n }\n\n return undefined;\n }\n\n private _canScrollDown() {\n return (\n this._container.scrollTop + this._container.clientHeight <\n this._getDocumentScrollHeight()\n );\n }\n\n private _canScrollRight() {\n return (\n this._container.scrollLeft + this._container.clientWidth <\n this._getDocumentScrollWidth()\n );\n }\n\n private _getDocumentScrollHeight() {\n // Store the original scroll height because the scroll height can increase when the drag element is moved beyond the scroll height.\n this._documentScrollHeight ??= this._container.scrollHeight;\n\n return this._documentScrollHeight;\n }\n\n private _getDocumentScrollWidth() {\n // Store the original scroll width because the scroll width can increase when the drag element is moved beyond the scroll width.\n this._documentScrollWidth ??= this._container.scrollWidth;\n\n return this._documentScrollWidth;\n }\n}\n","import type { ScrollParent } from \"./scrollParent\";\n\nimport ContainerScrollParent from \"./containerScrollParent\";\nimport DocumentScrollParent from \"./documentScrollParent\";\n\nconst isOverflow = (overflowValue: string) =>\n overflowValue === \"auto\" || overflowValue === \"scroll\";\n\nconst hasOverFlow = (element: HTMLElement): boolean => {\n const style = getComputedStyle(element);\n\n return isOverflow(style.overflowX) || isOverflow(style.overflowY);\n};\n\nconst getParentWithOverflow = (\n treeElement: HTMLElement,\n): HTMLElement | null => {\n if (hasOverFlow(treeElement)) {\n return treeElement;\n }\n\n let parent = treeElement.parentElement;\n\n while (parent) {\n if (hasOverFlow(parent)) {\n return parent;\n }\n\n parent = parent.parentElement;\n }\n\n return null;\n};\n\nconst createScrollParent = (\n treeElement: HTMLElement,\n refreshHitAreas: () => void,\n): ScrollParent => {\n const container = getParentWithOverflow(treeElement);\n\n if (container && container.tagName !== \"HTML\") {\n return new ContainerScrollParent({\n container,\n refreshHitAreas,\n });\n } else {\n return new DocumentScrollParent({ refreshHitAreas, treeElement });\n }\n};\n\nexport default createScrollParent;\n","import type { PositionInfo } from \"./mouseUtils\";\nimport type { ScrollParent } from \"./scrollHandler/scrollParent\";\n\nimport createScrollParent from \"./scrollHandler/createScrollParent\";\n\ninterface ScrollHandlerParams {\n refreshHitAreas: () => void;\n treeElement: HTMLElement;\n}\n\nexport default class ScrollHandler {\n private _refreshHitAreas: () => void;\n private _scrollParent?: ScrollParent;\n private _treeElement: HTMLElement;\n\n constructor({ refreshHitAreas, treeElement }: ScrollHandlerParams) {\n this._refreshHitAreas = refreshHitAreas;\n this._scrollParent = undefined;\n this._treeElement = treeElement;\n }\n\n public checkScrolling(positionInfo: PositionInfo): void {\n this._checkVerticalScrolling(positionInfo);\n this._checkHorizontalScrolling(positionInfo);\n }\n\n public getScrollLeft(): number {\n return this._getScrollParent().getScrollLeft();\n }\n\n public scrollToY(top: number): void {\n this._getScrollParent().scrollToY(top);\n }\n\n public stopScrolling() {\n this._getScrollParent().stopScrolling();\n }\n\n private _checkHorizontalScrolling(positionInfo: PositionInfo): void {\n this._getScrollParent().checkHorizontalScrolling(positionInfo.pageX);\n }\n\n private _checkVerticalScrolling(positionInfo: PositionInfo): void {\n this._getScrollParent().checkVerticalScrolling(positionInfo.pageY);\n }\n\n private _getScrollParent(): ScrollParent {\n this._scrollParent ??= createScrollParent(\n this._treeElement,\n this._refreshHitAreas,\n );\n\n return this._scrollParent;\n }\n}\n","import type { GetNodeById } from \"./jqtreeMethodTypes\";\nimport type { Node } from \"./node\";\n\ninterface SelectNodeHandlerParameters {\n getNodeById: GetNodeById;\n}\n\nexport default class SelectNodeHandler {\n private _getNodeById: GetNodeById;\n private _selectedNodes: Set<NodeId>;\n private _selectedSingleNode: Node | null;\n\n constructor({ getNodeById }: SelectNodeHandlerParameters) {\n this._getNodeById = getNodeById;\n this._selectedNodes = new Set<NodeId>();\n this.clear();\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 clear(): void {\n this._selectedNodes.clear();\n this._selectedSingleNode = null;\n }\n\n public getSelectedNode(): false | Node {\n const selectedNodes = this.getSelectedNodes();\n\n if (selectedNodes.length) {\n return selectedNodes[0] ?? false;\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._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: Node[] = [];\n\n this._selectedNodes.forEach((id) => {\n const node = this._getNodeById(id);\n if (node && parent.isParentOf(node)) {\n selectedNodes.push(node);\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 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","const version = \"1.9.1\";\n\nexport default version;\n","import type { HandleFinishedLoading } from \"./dataLoader\";\nimport type { OnFinishOpenNode } from \"./jqtreeMethodTypes\";\nimport type { JQTreeOptions } from \"./jqtreeOptions\";\nimport type { PositionInfo } from \"./mouseUtils\";\nimport type { Position } from \"./node\";\nimport type { SavedState } from \"./saveStateHandler\";\n\nimport DataLoader from \"./dataLoader\";\nimport { DragAndDropHandler } from \"./dragAndDropHandler\";\nimport ElementsRenderer from \"./elementsRenderer\";\nimport KeyHandler from \"./keyHandler\";\nimport MouseHandler from \"./mouseHandler\";\nimport { Node } from \"./node\";\nimport NodeElement from \"./nodeElement\";\nimport FolderElement from \"./nodeElement/folderElement\";\nimport { getOffsetTop } from \"./positionUtils\";\nimport SaveStateHandler from \"./saveStateHandler\";\nimport ScrollHandler from \"./scrollHandler\";\nimport SelectNodeHandler from \"./selectNodeHandler\";\nimport __version__ from \"./version\";\n\ninterface SelectNodeOptions {\n mustSetFocus?: boolean;\n mustToggle?: boolean;\n}\n\nconst 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: \"&#x25bc;\",\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\nconst NODE_PARAM_IS_EMPTY = \"Node parameter is empty\";\nconst PARAM_IS_EMPTY = \"Parameter is empty: \";\n\nexport class JqTreeWidget {\n [key: string]: unknown;\n\n private _dataLoader: DataLoader;\n private _dndHandler: DragAndDropHandler;\n private _element: JQuery;\n private _htmlElement: HTMLElement;\n private _isInitialized: boolean;\n private _keyHandler: KeyHandler;\n private _mouseHandler: MouseHandler;\n private _options: JQTreeOptions;\n private _renderer: ElementsRenderer;\n private _saveStateHandler: SaveStateHandler;\n private _scrollHandler: ScrollHandler;\n private _selectNodeHandler: SelectNodeHandler;\n private _tree: Node;\n\n constructor(el: HTMLElement, options: Partial<JQTreeOptions>) {\n this._htmlElement = el;\n this._element = jQuery(el);\n this._options = { ...defaults, ...options };\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 addToSelection(node?: Node, mustSetFocus?: boolean): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n this._selectNodeHandler.addToSelection(node);\n this._openParents(node);\n\n this._getNodeElementForNode(node).select(mustSetFocus ?? true);\n\n this._saveState();\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 closeNode(node?: Node, slideParam?: 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.isFolder() || node.isEmptyFolder) {\n this._createFolderElement(node).close(\n slide,\n this._options.animationSpeed,\n );\n\n this._saveState();\n }\n\n return this._element;\n }\n\n public deinit(): void {\n this._htmlElement.textContent = \"\";\n this._element.off();\n\n this._keyHandler.deinit();\n this._mouseHandler.deinit();\n\n this._tree = new Node({}, true);\n }\n\n public destroy(): void {\n this.deinit();\n }\n\n public getNodeByCallback(callback: (node: Node) => boolean): Node | null {\n return this._tree.getNodeByCallback(callback);\n }\n\n public getNodeByHtmlElement(\n inputElement: HTMLElement | JQuery,\n ): Node | null {\n const element =\n inputElement instanceof HTMLElement\n ? inputElement\n : inputElement.get(0);\n\n if (!element) {\n return null;\n }\n\n return this._getNode(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 getSelectedNode(): false | Node {\n return this._selectNodeHandler.getSelectedNode();\n }\n\n public getSelectedNodes(): Node[] {\n return this._selectNodeHandler.getSelectedNodes();\n }\n\n public getState(): null | SavedState {\n return this._saveStateHandler.getState();\n }\n\n public getStateFromStorage(): null | SavedState {\n return this._saveStateHandler.getStateFromStorage();\n }\n\n public getTree(): Node {\n return this._tree;\n }\n\n public getVersion(): string {\n return __version__;\n }\n\n public init(): void {\n const htmlElement = this._element.get(0) as HTMLElement;\n this._htmlElement = htmlElement;\n this._isInitialized = false;\n\n this._options.dataUrl ??= this._element.data(\"url\");\n\n const dataRtl = this._element.data(\"rtl\") as unknown;\n this._options.rtl ??= dataRtl === '' ? true : Boolean(dataRtl);\n\n this._options.closedIcon ??= this._getDefaultClosedIcon();\n\n this._connectHandlers();\n this._initData();\n }\n\n public isDragging(): boolean {\n return this._dndHandler.isDragging;\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 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: Node | null | string,\n param2?: HandleFinishedLoading | Node | null,\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 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 moveNode(\n node?: Node,\n targetNode?: Node,\n position?: Position,\n ): 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 if (!position) {\n throw Error(PARAM_IS_EMPTY + \"position\");\n }\n\n this._tree.moveNode(node, targetNode, position);\n this._refreshElements(null);\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 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 | undefined] => {\n let onFinished: null | OnFinishOpenNode;\n let slide: boolean | null;\n\n if (typeof param1 === \"function\") {\n onFinished = param1;\n slide = null;\n } else {\n slide = param1 as boolean;\n onFinished = param2 as OnFinishOpenNode;\n }\n\n slide ??= this._options.slide;\n\n return [slide, onFinished];\n };\n\n const [slide, onFinished] = parseParams();\n\n this._openNodeInternal(node, slide, onFinished);\n return this._element;\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 refresh(): JQuery {\n this._refreshElements(null);\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 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 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 scrollToNode(node?: Node): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n if (!node.element) {\n return this._element;\n }\n\n const top =\n getOffsetTop(node.element) -\n getOffsetTop(this._htmlElement);\n\n this._scrollHandler.scrollToY(top);\n\n return this._element;\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 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 setState(state?: SavedState): JQuery {\n if (state) {\n this._saveStateHandler.setInitialState(state);\n this._refreshElements(null);\n }\n\n return this._element;\n }\n\n public toggle(node?: Node, slideParam: boolean | null = 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 toJson(): string {\n return JSON.stringify(this._tree.getData());\n }\n\n public updateNode(node?: Node, data?: NodeData): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n if (!data) {\n return this._element;\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);\n }\n }\n\n this._refreshElements(node);\n\n return this._element;\n }\n\n private _connectHandlers() {\n const {\n autoEscape,\n buttonLeft,\n closedIcon,\n dataFilter,\n dragAndDrop,\n keyboardSupport,\n onCanMove,\n onCanMoveTo,\n onCreateLi,\n onDragMove,\n onDragStop,\n onGetStateFromStorage,\n onIsMoveHandle,\n onLoadFailed,\n onLoading,\n onSetStateFromStorage,\n openedIcon,\n openFolderDelay,\n rtl,\n saveState,\n showEmptyFolder,\n slide,\n tabIndex,\n } = this._options;\n\n const closeNode = this.closeNode.bind(this);\n const getNodeElement = this._getNodeElement.bind(this);\n const getNodeElementForNode = this._getNodeElementForNode.bind(this);\n const getNodeById = this.getNodeById.bind(this);\n const getSelectedNode = this.getSelectedNode.bind(this);\n const getTree = this.getTree.bind(this);\n const isFocusOnTree = this._isFocusOnTree.bind(this);\n const loadData = this.loadData.bind(this);\n const openNode = this._openNodeInternal.bind(this);\n const refreshElements = this._refreshElements.bind(this);\n const selectNode = this.selectNode.bind(this);\n const treeElement = this._htmlElement;\n const triggerEvent = this._triggerEvent.bind(this);\n\n const selectNodeHandler = new SelectNodeHandler({\n getNodeById,\n });\n\n const addToSelection =\n selectNodeHandler.addToSelection.bind(selectNodeHandler);\n const getSelectedNodes =\n selectNodeHandler.getSelectedNodes.bind(selectNodeHandler);\n const isNodeSelected =\n selectNodeHandler.isNodeSelected.bind(selectNodeHandler);\n const removeFromSelection =\n selectNodeHandler.removeFromSelection.bind(selectNodeHandler);\n const getMouseDelay = () => this._options.startDndDelay ?? 0;\n\n const refreshHitAreas = () => {\n dndHandler.refresh();\n }\n\n const dataLoader = new DataLoader({\n dataFilter,\n loadData,\n onLoadFailed,\n onLoading,\n treeElement,\n triggerEvent,\n });\n\n const saveStateHandler = new SaveStateHandler({\n addToSelection,\n getNodeById,\n getSelectedNodes,\n getTree,\n onGetStateFromStorage,\n onSetStateFromStorage,\n openNode,\n refreshElements,\n removeFromSelection,\n saveState,\n });\n\n const scrollHandler = new ScrollHandler({\n refreshHitAreas,\n treeElement,\n });\n\n const getScrollLeft = scrollHandler.getScrollLeft.bind(scrollHandler);\n\n const dndHandler = new DragAndDropHandler({\n autoEscape,\n getNodeElement,\n getNodeElementForNode,\n getScrollLeft,\n getTree,\n onCanMove,\n onCanMoveTo,\n onDragMove,\n onDragStop,\n onIsMoveHandle,\n openFolderDelay,\n openNode,\n refreshElements,\n slide,\n treeElement,\n triggerEvent,\n });\n\n const keyHandler = new KeyHandler({\n closeNode,\n getSelectedNode,\n isFocusOnTree,\n keyboardSupport,\n openNode,\n selectNode,\n });\n\n const renderer = new ElementsRenderer({\n autoEscape,\n buttonLeft,\n closedIcon,\n dragAndDrop,\n getTree,\n htmlElement: treeElement,\n isNodeSelected,\n onCreateLi,\n openedIcon,\n rtl,\n showEmptyFolder,\n tabIndex,\n });\n\n const getNode = this._getNode.bind(this);\n const onMouseCapture = this._mouseCapture.bind(this);\n const onMouseDrag = this._mouseDrag.bind(this);\n const onMouseStart = this._mouseStart.bind(this);\n const onMouseStop = this._mouseStop.bind(this);\n\n const mouseHandler = new MouseHandler({\n element: treeElement,\n getMouseDelay,\n getNode,\n onClickButton: this.toggle.bind(this),\n onClickTitle: this._doSelectNode.bind(this),\n onMouseCapture,\n onMouseDrag,\n onMouseStart,\n onMouseStop,\n triggerEvent,\n useContextMenu: this._options.useContextMenu,\n });\n\n this._dataLoader = dataLoader;\n this._dndHandler = dndHandler;\n this._keyHandler = keyHandler;\n this._mouseHandler = mouseHandler;\n this._renderer = renderer;\n this._saveStateHandler = saveStateHandler;\n this._scrollHandler = scrollHandler;\n this._selectNodeHandler = selectNodeHandler;\n }\n\n private _createFolderElement(node: Node) {\n const closedIconElement = this._renderer.closedIconElement;\n const getScrollLeft = this._scrollHandler.getScrollLeft.bind(\n this._scrollHandler,\n );\n const openedIconElement = this._renderer.openedIconElement;\n const tabIndex = this._options.tabIndex;\n const triggerEvent = this._triggerEvent.bind(this);\n\n return new FolderElement({\n closedIconElement,\n getScrollLeft,\n node,\n openedIconElement,\n tabIndex,\n treeElement: this._htmlElement,\n triggerEvent,\n });\n }\n\n private _createNodeElement(node: Node) {\n const getScrollLeft = this._scrollHandler.getScrollLeft.bind(\n this._scrollHandler,\n );\n const tabIndex = this._options.tabIndex;\n\n return new NodeElement({\n getScrollLeft,\n node,\n tabIndex,\n treeElement: this._htmlElement\n });\n }\n\n private _deselectCurrentNode(): void {\n const node = this.getSelectedNode();\n if (node) {\n this.removeFromSelection(node);\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 _doLoadData(data: NodeData[] | null, parentNode: Node | null): void {\n if (data) {\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 this._triggerEvent(\"tree.load_data\", {\n parent_node: parentNode,\n tree_data: data,\n });\n }\n\n private _doLoadDataFromUrl(\n urlInfoParam: JQuery.AjaxSettings | null | string,\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 _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 &&\n this._options.onCanSelectNode(node)\n );\n } else {\n return this._options.selectable;\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 deselected_node: deselectedNode,\n node,\n });\n this._openParents(node);\n }\n\n saveState();\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 _getDataUrlInfo(node: Node | null): JQuery.AjaxSettings | null {\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 const dataUrl = this._options.dataUrl;\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 _getDefaultClosedIcon(): string {\n if (this._options.rtl) {\n // triangle to the left\n return \"&#x25c0;\";\n } else {\n // triangle to the right\n return \"&#x25ba;\";\n }\n }\n\n private _getNode(element: HTMLElement): Node | null {\n const liElement = element.closest(\"li.jqtree_common\");\n\n if (liElement) {\n return jQuery(liElement).data(\"node\") as Node;\n } else {\n return null;\n }\n }\n\n private _getNodeElement(element: 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 private _getNodeElementForNode(node: Node): NodeElement {\n if (node.isFolder()) {\n return this._createFolderElement(node);\n } else {\n return this._createNodeElement(node);\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 _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 _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 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 // Load data on demand and then init the tree\n this._setInitialStateOnDemand(doInit);\n } else {\n doInit();\n }\n }\n\n // Does an element in the tree have the focus?\n private _isFocusOnTree(): boolean {\n const activeElement = document.activeElement;\n\n /* istanbul ignore if */\n if (!activeElement) {\n return false;\n }\n\n // The keyboard must still work for input elements.\n const tagName = activeElement.tagName;\n if (tagName !== \"A\" && tagName !== \"SPAN\") {\n return false;\n }\n\n const node = this._getNode(activeElement as HTMLElement);\n return node?.tree === this._tree;\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 private _loadFolderOnDemand(\n node: Node,\n slide = true,\n onFinished?: OnFinishOpenNode,\n ): void {\n node.is_loading = true;\n\n this._doLoadDataFromUrl(null, node, () => {\n this._openNodeInternal(node, slide, onFinished);\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 _mouseCapture(positionInfo: PositionInfo): boolean | null {\n if (!this._options.dragAndDrop) {\n return false;\n }\n\n return this._dndHandler.mouseCapture(positionInfo);\n }\n\n private _mouseDrag(positionInfo: PositionInfo): boolean {\n /* istanbul ignore if */\n if (!this._options.dragAndDrop) {\n return false;\n }\n\n const result = this._dndHandler.mouseDrag(positionInfo);\n this._scrollHandler.checkScrolling(positionInfo);\n return result;\n }\n\n private _mouseStart(positionInfo: PositionInfo): boolean {\n /* istanbul ignore if */\n if (!this._options.dragAndDrop) {\n return false;\n }\n\n return this._dndHandler.mouseStart(positionInfo);\n }\n\n private _mouseStop(positionInfo: PositionInfo): boolean {\n /* istanbul ignore if */\n if (!this._options.dragAndDrop) {\n return false;\n }\n\n this._scrollHandler.stopScrolling();\n return this._dndHandler.mouseStop(positionInfo);\n }\n\n private _openNodeInternal(\n node: Node,\n slide = true,\n onFinished?: OnFinishOpenNode,\n ): void {\n const doOpenNode = (\n _node: Node,\n _slide: boolean,\n _onFinished?: OnFinishOpenNode,\n ): void => {\n if (!node.children.length) {\n return;\n }\n\n const folderElement = this._createFolderElement(_node);\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);\n }\n parent = parent.parent;\n }\n\n doOpenNode(node, slide, onFinished);\n this._saveState();\n }\n }\n }\n\n private _openParents(node: Node) {\n const parent = node.parent;\n\n if (parent?.parent && !parent.is_open) {\n this.openNode(parent, false);\n }\n }\n\n /*\n Redraw the tree or part of the tree.\n from_node: redraw this subtree\n */\n private _refreshElements(fromNode: Node | null): void {\n const mustSetFocus = this._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 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 nodeElement.select(mustSetFocus);\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, 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 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 const autoOpenNodes = (): void => {\n const maxLevel = this._getAutoOpenMaxLevel();\n let loadingCount = 0;\n\n const loadAndOpenNode = (node: Node): void => {\n loadingCount += 1;\n this._openNodeInternal(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._openNodeInternal(node, false);\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 _triggerEvent(\n eventName: string,\n values?: Record<string, unknown>,\n ): boolean {\n const event = jQuery.Event(eventName, values);\n this._element.trigger(event);\n return !event.isDefaultPrevented();\n }\n}\n\nconst register = (): void => {\n const getWidgetData = (\n el: HTMLElement,\n dataKey: string,\n ): JqTreeWidget | null => {\n const widget = jQuery.data(el, dataKey) as unknown;\n\n if (widget && widget instanceof JqTreeWidget) {\n return widget;\n } else {\n return null;\n }\n };\n\n const createWidget = ($el: JQuery, options: null | Partial<JQTreeOptions>): JQuery => {\n for (const el of $el.get()) {\n const existingWidget = getWidgetData(el, \"jqtree\");\n\n if (!existingWidget) {\n const widget = new JqTreeWidget(el, options ?? {});\n\n if (!jQuery.data(el, \"jqtree\")) {\n jQuery.data(el, \"jqtree\", 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 for (const el of $el.get()) {\n const widget = getWidgetData(el, \"jqtree\");\n\n if (widget) {\n widget.destroy();\n }\n\n jQuery.removeData(el, \"jqtree\");\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, \"jqtree\") as unknown;\n\n if (widget && widget instanceof JqTreeWidget) {\n const widgetFunction = widget[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).tree = 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 as JQTreeOptions);\n } else if (typeof argument1 === \"string\" && argument1[0] !== \"_\") {\n const functionName = argument1;\n\n if (argument1 === \"destroy\") {\n destroyWidget(this);\n return undefined;\n } else {\n return callFunction(this, functionName, args);\n }\n } else {\n return undefined;\n }\n };\n};\n\nregister();\n"],"names":["__version__"],"mappings":"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"}