jqtree 1.8.10 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bower.json +3 -10
- package/eslint.config.mjs +47 -9
- package/package.json +50 -53
- package/pnpm-workspace.yaml +4 -0
- package/src/animation.ts +48 -0
- package/src/dataLoader.ts +38 -48
- package/src/dragAndDropHandler/dragElement.ts +11 -11
- package/src/dragAndDropHandler/generateHitAreas.ts +4 -3
- package/src/dragAndDropHandler/index.ts +119 -120
- package/src/dragAndDropHandler/iterateVisibleNodes.ts +1 -1
- package/src/dragAndDropHandler/types.ts +1 -1
- package/src/elementsRenderer.ts +71 -78
- package/src/jqtreeMethodTypes.ts +2 -2
- package/src/jqtreeOptions.ts +3 -2
- package/src/keyHandler.ts +34 -34
- package/src/mouseHandler.ts +125 -123
- package/src/node.ts +23 -27
- package/src/nodeElement/borderDropHint.ts +6 -6
- package/src/nodeElement/folderElement.ts +30 -22
- package/src/nodeElement/ghostDropHint.ts +24 -24
- package/src/nodeElement/index.ts +13 -14
- package/src/positionUtils.ts +18 -0
- package/src/saveStateHandler.ts +56 -55
- package/src/scrollHandler/containerScrollParent.ts +27 -124
- package/src/scrollHandler/createScrollParent.ts +1 -1
- package/src/scrollHandler/documentScrollParent.ts +43 -125
- package/src/scrollHandler/scrollParent.ts +117 -0
- package/src/scrollHandler.ts +24 -25
- package/src/selectNodeHandler.ts +28 -28
- package/src/simple.widget.ts +1 -3
- package/src/tree.jquery.ts +253 -279
- package/src/util.ts +0 -14
- package/src/version.ts +1 -1
- package/tree.jquery.debug.js +1044 -998
- package/tree.jquery.debug.js.map +1 -1
- package/tree.jquery.js +3 -3
- package/tree.jquery.js.map +1 -1
- package/.tool-versions +0 -2
- package/src/scrollHandler/types.ts +0 -7
package/tree.jquery.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*
|
|
2
|
-
JqTree 1.
|
|
2
|
+
JqTree 1.9.0
|
|
3
3
|
|
|
4
|
-
Copyright
|
|
4
|
+
Copyright 2026 Marco Braak
|
|
5
5
|
|
|
6
6
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
7
|
you may not use this file except in compliance with the License.
|
|
@@ -17,5 +17,5 @@ limitations under the License.
|
|
|
17
17
|
@license
|
|
18
18
|
|
|
19
19
|
*/
|
|
20
|
-
var jqtree=function(e){"use strict";class t{constructor(e){let{dataFilter:t,loadData:o,onLoadFailed:n,onLoading:r,treeElement:s,triggerEvent:i}=e;this.dataFilter=t,this.loadData=o,this.onLoadFailed=n,this.onLoading=r,this.treeElement=s,this.triggerEvent=i}loadFromUrl(e,t,o){if(!e)return;const n=this.getDomElement(t);this.addLoadingClass(n),this.notifyLoading(!0,t,n);const r=()=>{this.removeLoadingClass(n),this.notifyLoading(!1,t,n)};this.submitRequest(e,(e=>{r(),this.loadData(this.parseData(e),t),o&&"function"==typeof o&&o()}),(e=>{r(),this.onLoadFailed&&this.onLoadFailed(e)}))}addLoadingClass(e){e.classList.add("jqtree-loading")}getDomElement(e){return e?.element?e.element:this.treeElement}notifyLoading(e,t,o){const n=jQuery(o);this.onLoading&&this.onLoading(e,t,n),this.triggerEvent("tree.loading_data",{$el:n,isLoading:e,node:t})}parseData(e){const t="string"==typeof e?JSON.parse(e):e;return this.dataFilter?this.dataFilter(t):t}removeLoadingClass(e){e.classList.remove("jqtree-loading")}submitRequest(e,t,o){const n={cache:!1,dataType:"json",error:o,method:"GET",success:t,..."string"==typeof e?{url:e}:e};n.method=n.method?.toUpperCase()??"GET",jQuery.ajax(n)}}const o=e=>e?"true":"false",n=e=>r(e).top,r=e=>{const t=e.getBoundingClientRect();return{left:t.x+window.scrollX,top:t.y+window.scrollY}};class s{constructor(e){let{autoEscape:t,nodeName:o,offsetX:n,offsetY:r,treeElement:s}=e;this.offsetX=n,this.offsetY=r,this.element=this.createElement(o,t),s.appendChild(this.element)}move(e,t){this.element.style.left=e-this.offsetX+"px",this.element.style.top=t-this.offsetY+"px"}remove(){this.element.remove()}createElement(e,t){const o=document.createElement("span");return o.classList.add("jqtree-title","jqtree-dragging"),t?o.textContent=e:o.innerHTML=e,o.style.position="absolute",o}}const i=(e,t,o,n)=>{const r=Math.min(t.length,4),s=Math.round((n-o)/r);let i=o;for(let o=0;o<r;o++){const n=t[o];n.position&&e.push({bottom:i+s,node:n.node,position:n.position,top:i}),i+=s}},l=(e,t,o)=>((e,t)=>{if(!e.length)return[];let o=e[0].top,n=[];const r=[];for(const t of e)t.top!==o&&n.length&&(i(r,n,o,t.top),o=t.top,n=[]),n.push(t);return i(r,n,o,t),r})(((e,t)=>{const o=[];let r=0;const s=(e,t,n)=>{o.push({node:e,position:t,top:n}),r=n};return((e,t)=>{let{handleAfterOpenFolder:o,handleClosedFolder:n,handleFirstNode:r,handleNode:s,handleOpenFolder:i}=t,l=!0;const d=(e,t)=>{let a=(e.is_open||!e.element)&&e.hasChildren(),h=null;if(e.element?.offsetParent&&(h=e.element,l&&(r(e),l=!1),e.hasChildren()?e.is_open?i(e,e.element)||(a=!1):n(e,t,h):s(e,t,e.element)),a){const n=e.children.length;e.children.forEach(((t,o)=>{const r=e.children[o];if(r)if(o===n-1)d(r,null);else{const t=e.children[o+1];t&&d(r,t)}})),e.is_open&&h&&o(e,t)}};d(e,null)})(e,{handleAfterOpenFolder:(e,o)=>{s(e,e===t||o===t?null:"after",r)},handleClosedFolder:(e,o,r)=>{const i=n(r);e===t?s(e,null,i):(s(e,"inside",i),o!==t&&s(e,"after",i))},handleFirstNode:e=>{e!==t&&e.element&&s(e,"before",n(e.element))},handleNode:(e,o,r)=>{const i=n(r);s(e,e===t?null:"inside",i),s(e,o===t||e===t?null:"after",i)},handleOpenFolder:(e,o)=>{if(e===t){const t=n(o),r=o.clientHeight;return s(e,null,t),r>5&&s(e,null,t+r-5),!1}return e.children[0]!==t&&s(e,"inside",n(o)),!0}}),o})(e,t),o);class d{constructor(e){let{autoEscape:t,getNodeElement:o,getNodeElementForNode:n,getScrollLeft:r,getTree:s,onCanMove:i,onCanMoveTo:l,onDragMove:d,onDragStop:a,onIsMoveHandle:h,openFolderDelay:c,openNode:u,refreshElements:m,slide:g,treeElement:p,triggerEvent:f}=e;this.autoEscape=t,this.getNodeElement=o,this.getNodeElementForNode=n,this.getScrollLeft=r,this.getTree=s,this.onCanMove=i,this.onCanMoveTo=l,this.onDragMove=d,this.onDragStop=a,this.onIsMoveHandle=h,this.openFolderDelay=c,this.openNode=u,this.refreshElements=m,this.slide=g,this.treeElement=p,this.triggerEvent=f,this.hoveredArea=null,this.hitAreas=[],this.isDragging=!1,this.currentItem=null}mouseCapture(e){const t=e.target;if(!this.mustCaptureElement(t))return null;if(this.onIsMoveHandle&&!this.onIsMoveHandle(jQuery(t)))return null;let o=this.getNodeElement(t);return o&&this.onCanMove&&(this.onCanMove(o.node)||(o=null)),this.currentItem=o,null!=this.currentItem}mouseDrag(e){if(!this.currentItem||!this.dragElement)return!1;this.dragElement.move(e.pageX,e.pageY);const t=this.findHoveredArea(e.pageX,e.pageY);return t&&this.canMoveToArea(t,this.currentItem)?(t.node.isFolder()||this.stopOpenFolderTimer(),this.hoveredArea!==t&&(this.hoveredArea=t,this.mustOpenFolderTimer(t)?this.startOpenFolderTimer(t.node):this.stopOpenFolderTimer(),this.updateDropHint())):(this.removeDropHint(),this.stopOpenFolderTimer(),this.hoveredArea=t),t||this.onDragMove&&this.onDragMove(this.currentItem.node,e.originalEvent),!0}mouseStart(e){if(!this.currentItem)return!1;this.refresh();const{left:t,top:o}=r(e.target),n=this.currentItem.node;return this.dragElement=new s({autoEscape:this.autoEscape??!0,nodeName:n.name,offsetX:e.pageX-t,offsetY:e.pageY-o,treeElement:this.treeElement}),this.isDragging=!0,this.currentItem.element.classList.add("jqtree-moving"),!0}mouseStop(e){this.moveItem(e),this.clear(),this.removeHover(),this.removeDropHint(),this.removeHitAreas();const t=this.currentItem;return this.currentItem&&(this.currentItem.element.classList.remove("jqtree-moving"),this.currentItem=null),this.isDragging=!1,!this.hoveredArea&&t&&this.onDragStop&&this.onDragStop(t.node,e.originalEvent),!1}refresh(){if(this.removeHitAreas(),this.currentItem){const e=this.currentItem.node;this.generateHitAreas(e),this.currentItem=this.getNodeElementForNode(e),this.isDragging&&this.currentItem.element.classList.add("jqtree-moving")}}canMoveToArea(e,t){return!this.onCanMoveTo||this.onCanMoveTo(t.node,e.node,e.position)}clear(){this.dragElement&&(this.dragElement.remove(),this.dragElement=null)}findHoveredArea(e,t){const o=this.getTreeDimensions();return e<o.left||t<o.top||e>o.right||t>o.bottom?null:function(e,t){let o=0,n=e.length;for(;o<n;){const r=o+n>>1,s=e[r];if(void 0===s)return null;const i=t(s);if(i>0)n=r;else{if(!(i<0))return s;o=r+1}}return null}(this.hitAreas,(e=>t<e.top?1:t>e.bottom?-1:0))}generateHitAreas(e){const t=this.getTree();this.hitAreas=t?l(t,e,this.getTreeDimensions().bottom):[]}getTreeDimensions(){const e=r(this.treeElement),t=e.left+this.getScrollLeft(),o=e.top;return{bottom:o+this.treeElement.clientHeight+16,left:t,right:t+this.treeElement.clientWidth,top:o}}moveItem(e){if(this.currentItem&&this.hoveredArea?.position&&this.canMoveToArea(this.hoveredArea,this.currentItem)){const t=this.currentItem.node,o=this.hoveredArea.node,n=this.hoveredArea.position,r=t.parent;"inside"===n&&(this.hoveredArea.node.is_open=!0);const s=()=>{const e=this.getTree();e&&(e.moveNode(t,o,n),this.treeElement.textContent="",this.refreshElements(null))};this.triggerEvent("tree.move",{move_info:{do_move:s,moved_node:t,original_event:e.originalEvent,position:n,previous_parent:r,target_node:o}}).isDefaultPrevented()||s()}}mustCaptureElement(e){const t=e.nodeName;return"INPUT"!==t&&"SELECT"!==t&&"TEXTAREA"!==t}mustOpenFolderTimer(e){const t=e.node;return t.isFolder()&&!t.is_open&&"inside"===e.position}removeDropHint(){this.previousGhost&&this.previousGhost.remove()}removeHitAreas(){this.hitAreas=[]}removeHover(){this.hoveredArea=null}startOpenFolderTimer(e){const t=()=>{this.openNode(e,this.slide,(()=>{this.refresh(),this.updateDropHint()}))};this.stopOpenFolderTimer();const o=this.openFolderDelay;!1!==o&&(this.openFolderTimer=window.setTimeout(t,o))}stopOpenFolderTimer(){this.openFolderTimer&&(clearTimeout(this.openFolderTimer),this.openFolderTimer=null)}updateDropHint(){if(!this.hoveredArea)return;this.removeDropHint();const e=this.getNodeElementForNode(this.hoveredArea.node);this.previousGhost=e.addDropHint(this.hoveredArea.position)}}class a{constructor(e){let{$element:t,autoEscape:o,buttonLeft:n,closedIcon:r,dragAndDrop:s,getTree:i,isNodeSelected:l,onCreateLi:d,openedIcon:a,rtl:h,showEmptyFolder:c,tabIndex:u}=e;this.autoEscape=o,this.buttonLeft=n,this.dragAndDrop=s,this.$element=t,this.getTree=i,this.isNodeSelected=l,this.onCreateLi=d,this.rtl=h,this.showEmptyFolder=c,this.tabIndex=u,this.openedIconElement=this.createButtonElement(a??"+"),this.closedIconElement=this.createButtonElement(r??"-")}render(e){e?.parent?this.renderFromNode(e):this.renderFromRoot()}renderFromNode(e){if(!e.element)return;const t=jQuery(e.element),o=this.createLi(e,e.getLevel());t.after(o),t.remove(),this.createDomElements(o,e.children,!1,e.getLevel()+1)}renderFromRoot(){this.$element.empty();const e=this.getTree();this.$element[0]&&e&&this.createDomElements(this.$element[0],e.children,!0,1)}attachNodeData(e,t){e.element=t,jQuery(t).data("node",e)}createButtonElement(e){if("string"==typeof e){const t=document.createElement("div");return t.innerHTML=e,document.createTextNode(t.innerHTML)}return e.nodeType?e:jQuery(e)[0]}createDomElements(e,t,o,n){const r=this.createUl(o);e.appendChild(r);for(const e of t){const t=this.createLi(e,n);r.appendChild(t),e.hasChildren()&&this.createDomElements(t,e.children,!1,n+1)}}createFolderLi(e,t,n){const r=this.getButtonClasses(e),s=this.getFolderClasses(e,n),i=e.is_open?this.openedIconElement:this.closedIconElement,l=document.createElement("li");l.className=`jqtree_common ${s}`,l.setAttribute("role","none");const d=document.createElement("div");d.className="jqtree-element jqtree_common",d.setAttribute("role","none"),l.appendChild(d);const a=document.createElement("a");a.className=r,i&&a.appendChild(i.cloneNode(!0)),this.buttonLeft&&d.appendChild(a);const h=this.createTitleSpan(e.name,n,!0,t);return h.setAttribute("aria-expanded",o(e.is_open)),d.appendChild(h),this.buttonLeft||d.appendChild(a),l}createLi(e,t){const o=Boolean(this.isNodeSelected(e)),n=e.isFolder()||e.isEmptyFolder&&this.showEmptyFolder?this.createFolderLi(e,t,o):this.createNodeLi(e,t,o);return this.attachNodeData(e,n),this.onCreateLi&&this.onCreateLi(e,jQuery(n),o),n}createNodeLi(e,t,o){const n=["jqtree_common"];o&&n.push("jqtree-selected");const r=n.join(" "),s=document.createElement("li");s.className=r,s.setAttribute("role","none");const i=document.createElement("div");i.className="jqtree-element jqtree_common",i.setAttribute("role","none"),s.appendChild(i);const l=this.createTitleSpan(e.name,o,!1,t);return i.appendChild(l),s}createTitleSpan(e,t,o,n){const r=document.createElement("span");let s="jqtree-title jqtree_common";if(o&&(s+=" jqtree-title-folder"),s+=" jqtree-title-button-"+(this.buttonLeft?"left":"right"),r.className=s,t){const e=this.tabIndex;void 0!==e&&r.setAttribute("tabindex",`${e}`)}return this.setTreeItemAriaAttributes(r,e,n,t),this.autoEscape?r.textContent=e:r.innerHTML=e,r}createUl(e){let t,o;e?(t="jqtree-tree",o="tree",this.rtl&&(t+=" jqtree-rtl")):(t="",o="group"),this.dragAndDrop&&(t+=" jqtree-dnd");const n=document.createElement("ul");return n.className=`jqtree_common ${t}`,n.setAttribute("role",o),n}getButtonClasses(e){const t=["jqtree-toggler","jqtree_common"];return e.is_open||t.push("jqtree-closed"),this.buttonLeft?t.push("jqtree-toggler-left"):t.push("jqtree-toggler-right"),t.join(" ")}getFolderClasses(e,t){const o=["jqtree-folder"];return e.is_open||o.push("jqtree-closed"),t&&o.push("jqtree-selected"),e.is_loading&&o.push("jqtree-loading"),o.join(" ")}setTreeItemAriaAttributes(e,t,n,r){e.setAttribute("aria-label",t),e.setAttribute("aria-level",`${n}`),e.setAttribute("aria-selected",o(r)),e.setAttribute("role","treeitem")}}class h{constructor(e){let{closeNode:t,getSelectedNode:o,isFocusOnTree:n,keyboardSupport:r,openNode:s,selectNode:i}=e;this.closeNode=t,this.getSelectedNode=o,this.isFocusOnTree=n,this.keyboardSupport=r,this.openNode=s,this.originalSelectNode=i,r&&document.addEventListener("keydown",this.handleKeyDown)}deinit(){this.keyboardSupport&&document.removeEventListener("keydown",this.handleKeyDown)}moveDown(e){return this.selectNode(e.getNextVisibleNode())}moveUp(e){return this.selectNode(e.getPreviousVisibleNode())}canHandleKeyboard(){return this.keyboardSupport&&this.isFocusOnTree()}handleKeyDown=e=>{if(!this.canHandleKeyboard())return;let t=!1;const o=this.getSelectedNode();if(o)switch(e.key){case"ArrowDown":t=this.moveDown(o);break;case"ArrowLeft":t=this.moveLeft(o);break;case"ArrowRight":t=this.moveRight(o);break;case"ArrowUp":t=this.moveUp(o)}t&&e.preventDefault()};moveLeft(e){return e.isFolder()&&e.is_open?(this.closeNode(e),!0):this.selectNode(e.getParent())}moveRight(e){return!!e.isFolder()&&(e.is_open?this.selectNode(e.getNextVisibleNode()):(this.openNode(e),!0))}selectNode(e){return!!e&&(this.originalSelectNode(e),!0)}}const c=e=>({originalEvent:e,pageX:e.pageX,pageY:e.pageY,target:e.target}),u=(e,t)=>({originalEvent:t,pageX:e.pageX,pageY:e.pageY,target:e.target});class m{constructor(e){let{element:t,getMouseDelay:o,getNode:n,onClickButton:r,onClickTitle:s,onMouseCapture:i,onMouseDrag:l,onMouseStart:d,onMouseStop:a,triggerEvent:h,useContextMenu:c}=e;this.element=t,this.getMouseDelay=o,this.getNode=n,this.onClickButton=r,this.onClickTitle=s,this.onMouseCapture=i,this.onMouseDrag=l,this.onMouseStart=d,this.onMouseStop=a,this.triggerEvent=h,this.useContextMenu=c,t.addEventListener("click",this.handleClick),t.addEventListener("dblclick",this.handleDblclick),t.addEventListener("mousedown",this.mouseDown,{passive:!1}),t.addEventListener("touchstart",this.touchStart,{passive:!1}),c&&t.addEventListener("contextmenu",this.handleContextmenu),this.isMouseStarted=!1,this.mouseDelayTimer=null,this.isMouseDelayMet=!1,this.mouseDownInfo=null}deinit(){this.element.removeEventListener("click",this.handleClick),this.element.removeEventListener("dblclick",this.handleDblclick),this.useContextMenu&&this.element.removeEventListener("contextmenu",this.handleContextmenu),this.element.removeEventListener("mousedown",this.mouseDown),this.element.removeEventListener("touchstart",this.touchStart),this.removeMouseMoveEventListeners()}getClickTarget(e){const t=e.closest(".jqtree-toggler");if(t){const e=this.getNode(t);if(e)return{node:e,type:"button"}}else{const t=e.closest(".jqtree-element");if(t){const e=this.getNode(t);if(e)return{node:e,type:"label"}}}return null}handleClick=e=>{if(!e.target)return;const t=this.getClickTarget(e.target);if(t)switch(t.type){case"button":this.onClickButton(t.node),e.preventDefault(),e.stopPropagation();break;case"label":this.triggerEvent("tree.click",{click_event:e,node:t.node}).isDefaultPrevented()||this.onClickTitle(t.node);break}};handleContextmenu=e=>{if(!e.target)return;const t=e.target.closest("ul.jqtree-tree .jqtree-element");if(t){const o=this.getNode(t);if(o)return e.preventDefault(),e.stopPropagation(),this.triggerEvent("tree.contextmenu",{click_event:e,node:o}),!1}return null};handleDblclick=e=>{if(!e.target)return;const t=this.getClickTarget(e.target);"label"===t?.type&&this.triggerEvent("tree.dblclick",{click_event:e,node:t.node})};handleMouseDown(e){return this.isMouseStarted&&this.handleMouseUp(e),this.mouseDownInfo=e,!!this.onMouseCapture(e)&&(this.handleStartMouse(),!0)}handleMouseMove(e,t){if(this.isMouseStarted)return this.onMouseDrag(t),void(e.cancelable&&e.preventDefault());this.isMouseDelayMet&&(this.mouseDownInfo&&(this.isMouseStarted=this.onMouseStart(this.mouseDownInfo)),this.isMouseStarted?(this.onMouseDrag(t),e.cancelable&&e.preventDefault()):this.handleMouseUp(t))}handleMouseUp(e){this.removeMouseMoveEventListeners(),this.isMouseDelayMet=!1,this.mouseDownInfo=null,this.isMouseStarted&&(this.isMouseStarted=!1,this.onMouseStop(e))}handleStartMouse(){document.addEventListener("mousemove",this.mouseMove,{passive:!1}),document.addEventListener("touchmove",this.touchMove,{passive:!1}),document.addEventListener("mouseup",this.mouseUp,{passive:!1}),document.addEventListener("touchend",this.touchEnd,{passive:!1});const e=this.getMouseDelay();e?this.startMouseDelayTimer(e):this.isMouseDelayMet=!0}mouseDown=e=>{if(0!==e.button)return;this.handleMouseDown(c(e))&&e.cancelable&&e.preventDefault()};mouseMove=e=>{this.handleMouseMove(e,c(e))};mouseUp=e=>{this.handleMouseUp(c(e))};removeMouseMoveEventListeners(){document.removeEventListener("mousemove",this.mouseMove),document.removeEventListener("touchmove",this.touchMove),document.removeEventListener("mouseup",this.mouseUp),document.removeEventListener("touchend",this.touchEnd)}startMouseDelayTimer(e){this.mouseDelayTimer&&clearTimeout(this.mouseDelayTimer),this.mouseDelayTimer=window.setTimeout((()=>{this.mouseDownInfo&&(this.isMouseDelayMet=!0)}),e),this.isMouseDelayMet=!1}touchEnd=e=>{if(e.touches.length>1)return;const t=e.touches[0];t&&this.handleMouseUp(u(t,e))};touchMove=e=>{if(e.touches.length>1)return;const t=e.touches[0];t&&this.handleMouseMove(e,u(t,e))};touchStart=e=>{if(e.touches.length>1)return;const t=e.touches[0];t&&this.handleMouseDown(u(t,e))}}const g=e=>"object"==typeof e&&"children"in e&&e.children instanceof Array;class p{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:p;this.name="",this.load_on_demand=!1,this.isEmptyFolder=null!=e&&g(e)&&0===e.children.length,this.setData(e),this.children=[],this.parent=null,t&&(this.idMapping=new Map,this.tree=this,this.nodeClass=o)}addAfter(e){if(this.parent){const t=this.createNode(e),o=this.parent.getChildIndex(this);return this.parent.addChildAtPosition(t,o+1),t.loadChildrenFromData(e),t}return null}addBefore(e){if(this.parent){const t=this.createNode(e),o=this.parent.getChildIndex(this);return this.parent.addChildAtPosition(t,o),t.loadChildrenFromData(e),t}return null}addChild(e){this.children.push(e),e.setParent(this)}addChildAtPosition(e,t){this.children.splice(t,0,e),e.setParent(this)}addNodeToIndex(e){null!=e.id&&this.idMapping.set(e.id,e)}addParent(e){if(this.parent){const t=this.createNode(e);this.tree&&t.setParent(this.tree);const o=this.parent;for(const e of o.children)t.addChild(e);return o.children=[],o.addChild(t),t}return null}append(e){const t=this.createNode(e);return this.addChild(t),t.loadChildrenFromData(e),t}filter(e){const t=[];return this.iterate((o=>(e(o)&&t.push(o),!0))),t}getChildIndex(e){return this.children.indexOf(e)}getData(){const e=t=>t.map((t=>{const o={};for(const e in t)if(-1===["parent","children","element","idMapping","load_on_demand","nodeClass","tree","isEmptyFolder"].indexOf(e)&&Object.prototype.hasOwnProperty.call(t,e)){const n=t[e];o[e]=n}return t.hasChildren()&&(o.children=e(t.children)),o}));return e(arguments.length>0&&void 0!==arguments[0]&&arguments[0]?[this]:this.children)}getLastChild(){if(this.hasChildren()){const e=this.children[this.children.length-1];return e?e.hasChildren()&&e.is_open?e.getLastChild():e:null}return null}getLevel(){let e=0,t=this;for(;t.parent;)e+=1,t=t.parent;return e}getNextNode(){if((!(arguments.length>0&&void 0!==arguments[0])||arguments[0])&&this.hasChildren())return this.children[0]??null;if(this.parent){const e=this.getNextSibling();return e||this.parent.getNextNode(!1)}return null}getNextSibling(){if(this.parent){const e=this.parent.getChildIndex(this)+1;return e<this.parent.children.length?this.parent.children[e]??null:null}return null}getNextVisibleNode(){if(this.hasChildren()&&this.is_open)return this.children[0]??null;if(this.parent){const e=this.getNextSibling();return e||this.parent.getNextNode(!1)}return null}getNodeByCallback(e){let t=null;return this.iterate((o=>!t&&(!e(o)||(t=o,!1)))),t}getNodeById(e){return this.idMapping.get(e)??null}getNodeByName(e){return this.getNodeByCallback((t=>t.name===e))}getNodeByNameMustExist(e){const t=this.getNodeByCallback((t=>t.name===e));if(!t)throw new Error(`Node with name ${e} not found`);return t}getNodesByProperty(e,t){return this.filter((o=>o[e]===t))}getParent(){return this.parent&&this.parent.parent?this.parent:null}getPreviousNode(){if(this.parent){const e=this.getPreviousSibling();return e?e.hasChildren()?e.getLastChild():e:this.getParent()}return null}getPreviousSibling(){if(this.parent){const e=this.parent.getChildIndex(this)-1;return e>=0?this.parent.children[e]??null:null}return null}getPreviousVisibleNode(){if(this.parent){const e=this.getPreviousSibling();return e?e.hasChildren()&&e.is_open?e.getLastChild():e:this.getParent()}return null}hasChildren(){return 0!==this.children.length}initFromData(e){const t=e=>{for(const t of e){const e=this.createNode();e.initFromData(t),this.addChild(e)}};(e=>{this.setData(e),g(e)&&e.children.length&&t(e.children)})(e)}isFolder(){return this.hasChildren()||this.load_on_demand}isParentOf(e){let t=e.parent;for(;t;){if(t===this)return!0;t=t.parent}return!1}iterate(e){const t=(o,n)=>{for(const r of o.children){e(r,n)&&r.hasChildren()&&t(r,n+1)}};t(this,0)}loadFromData(e){this.removeChildren();for(const t of e){const e=this.createNode(t);this.addChild(e),g(t)&&e.loadFromData(t.children)}return this}moveNode(e,t,o){if(!e.parent||e.isParentOf(t))return!1;switch(e.parent.doRemoveChild(e),o){case"after":return!!t.parent&&(t.parent.addChildAtPosition(e,t.parent.getChildIndex(t)+1),!0);case"before":return!!t.parent&&(t.parent.addChildAtPosition(e,t.parent.getChildIndex(t)),!0);case"inside":return t.addChildAtPosition(e,0),!0}}prepend(e){const t=this.createNode(e);return this.addChildAtPosition(t,0),t.loadChildrenFromData(e),t}remove(){this.parent&&(this.parent.removeChild(this),this.parent=null)}removeChild(e){e.removeChildren(),this.doRemoveChild(e)}removeChildren(){this.iterate((e=>(this.tree?.removeNodeFromIndex(e),!0))),this.children=[]}removeNodeFromIndex(e){null!=e.id&&this.idMapping.delete(e.id)}setData(e){if(e)if("string"==typeof e)this.name=e;else if("object"==typeof e)for(const t in e)if(Object.prototype.hasOwnProperty.call(e,t)){const o=e[t];"label"===t||"name"===t?"string"==typeof o&&(this.name=o):"children"!==t&&"parent"!==t&&(this[t]=o)}}createNode(e){return new(this.getNodeClass())(e)}doRemoveChild(e){this.children.splice(this.getChildIndex(e),1),this.tree?.removeNodeFromIndex(e)}getNodeClass(){return this.nodeClass??this.tree?.nodeClass??p}loadChildrenFromData(e){g(e)&&e.children.length&&this.loadFromData(e.children)}setParent(e){this.parent=e,this.tree=e.tree,this.tree?.addNodeToIndex(this)}}class f{constructor(e,t){const o=e.querySelector(":scope > .jqtree-element");if(!o)return void(this.hint=void 0);const n=Math.max(e.offsetWidth+t-4,0),r=Math.max(e.clientHeight-4,0),s=document.createElement("span");s.className="jqtree-border",s.style.width=`${n}px`,s.style.height=`${r}px`,this.hint=s,o.append(this.hint)}remove(){this.hint?.remove()}}class v{constructor(e,t,o){switch(this.element=t,this.node=e,this.ghost=this.createGhostElement(),o){case"after":this.moveAfter();break;case"before":this.moveBefore();break;case"inside":e.isFolder()&&e.is_open?this.moveInsideOpenFolder():this.moveInside()}}remove(){this.ghost.remove()}createGhostElement(){const e=document.createElement("li");e.className="jqtree_common jqtree-ghost";const t=document.createElement("span");t.className="jqtree_common jqtree-circle",e.append(t);const o=document.createElement("span");return o.className="jqtree_common jqtree-line",e.append(o),e}moveAfter(){this.element.after(this.ghost)}moveBefore(){this.element.before(this.ghost)}moveInside(){this.element.after(this.ghost),this.ghost.classList.add("jqtree-inside")}moveInsideOpenFolder(){const e=this.node.children[0]?.element;e&&e.before(this.ghost)}}class S{constructor(e){let{getScrollLeft:t,node:o,tabIndex:n,treeElement:r}=e;this.getScrollLeft=t,this.tabIndex=n,this.treeElement=r,this.init(o)}addDropHint(e){return this.mustShowBorderDropHint(e)?new f(this.element,this.getScrollLeft()):new v(this.node,this.element,e)}deselect(){this.element.classList.remove("jqtree-selected");const e=this.getTitleSpan();e.removeAttribute("tabindex"),e.setAttribute("aria-selected","false"),e.blur()}init(e){this.node=e,e.element||(e.element=this.treeElement),this.element=e.element}select(e){this.element.classList.add("jqtree-selected");const t=this.getTitleSpan(),o=this.tabIndex;null!=o&&t.setAttribute("tabindex",o.toString()),t.setAttribute("aria-selected","true"),e&&t.focus()}getTitleSpan(){return this.element.querySelector(":scope > .jqtree-element > span.jqtree-title")}getUl(){return this.element.querySelector(":scope > ul")}mustShowBorderDropHint(e){return"inside"===e}}class N extends S{constructor(e){let{closedIconElement:t,getScrollLeft:o,node:n,openedIconElement:r,tabIndex:s,treeElement:i,triggerEvent:l}=e;super({getScrollLeft:o,node:n,tabIndex:s,treeElement:i}),this.closedIconElement=t,this.openedIconElement=r,this.triggerEvent=l}close(e,t){if(!this.node.is_open)return;this.node.is_open=!1;const o=this.getButton();o.classList.add("jqtree-closed"),o.innerHTML="";const n=this.closedIconElement;if(n){const e=n.cloneNode(!0);o.appendChild(e)}const r=()=>{this.element.classList.add("jqtree-closed");this.getTitleSpan().setAttribute("aria-expanded","false"),this.triggerEvent("tree.close",{node:this.node})};e?jQuery(this.getUl()).slideUp(t,r):(jQuery(this.getUl()).hide(),r())}open(e,t,o){if(this.node.is_open)return;this.node.is_open=!0;const n=this.getButton();n.classList.remove("jqtree-closed"),n.innerHTML="";const r=this.openedIconElement;if(r){const e=r.cloneNode(!0);n.appendChild(e)}const s=()=>{this.element.classList.remove("jqtree-closed");this.getTitleSpan().setAttribute("aria-expanded","true"),e&&e(this.node),this.triggerEvent("tree.open",{node:this.node})};t?jQuery(this.getUl()).slideDown(o,s):(jQuery(this.getUl()).show(),s())}mustShowBorderDropHint(e){return!this.node.is_open&&"inside"===e}getButton(){return this.element.querySelector(":scope > .jqtree-element > a.jqtree-toggler")}}class E{constructor(e){let{addToSelection:t,getNodeById:o,getSelectedNodes:n,getTree:r,onGetStateFromStorage:s,onSetStateFromStorage:i,openNode:l,refreshElements:d,removeFromSelection:a,saveState:h}=e;this.addToSelection=t,this.getNodeById=o,this.getSelectedNodes=n,this.getTree=r,this.onGetStateFromStorage=s,this.onSetStateFromStorage=i,this.openNode=l,this.refreshElements=d,this.removeFromSelection=a,this.saveStateOption=h}getNodeIdToBeSelected(){const e=this.getStateFromStorage();return e?.selected_node?e.selected_node[0]??null:null}getState(){return{open_nodes:(()=>{const e=[];return this.getTree()?.iterate((t=>(t.is_open&&t.id&&t.hasChildren()&&e.push(t.id),!0))),e})(),selected_node:(()=>{const e=[];return this.getSelectedNodes().forEach((t=>{null!=t.id&&e.push(t.id)})),e})()}}getStateFromStorage(){const e=this.loadFromStorage();return e?this.parseState(e):null}saveState(){const e=JSON.stringify(this.getState());this.onSetStateFromStorage?this.onSetStateFromStorage(e):localStorage.setItem(this.getKeyName(),e)}setInitialState(e){let t=!1;return e.open_nodes&&(t=this.openInitialNodes(e.open_nodes)),this.resetSelection(),e.selected_node&&this.selectInitialNodes(e.selected_node),t}setInitialStateOnDemand(e,t){let o=0,n=e.open_nodes;const r=()=>{if(!n)return;const r=[];for(const e of n){const t=this.getNodeById(e);t?t.is_loading||(t.load_on_demand?s(t):this.openNode(t,!1)):r.push(e)}n=r,e.selected_node&&this.selectInitialNodes(e.selected_node)&&this.refreshElements(null),0===o&&t()},s=e=>{o+=1,this.openNode(e,!1,(()=>{o-=1,r()}))};r()}getKeyName(){return"string"==typeof this.saveStateOption?this.saveStateOption:"tree"}loadFromStorage(){return this.onGetStateFromStorage?this.onGetStateFromStorage():localStorage.getItem(this.getKeyName())}openInitialNodes(e){let t=!1;for(const o of e){const e=this.getNodeById(o);e&&(e.load_on_demand?t=!0:e.is_open=!0)}return t}parseState(e){const t=JSON.parse(e);var o;return t.selected_node&&("number"==typeof(o=t.selected_node)&&o%1==0)&&(t.selected_node=[t.selected_node]),t}resetSelection(){this.getSelectedNodes().forEach((e=>{this.removeFromSelection(e)}))}selectInitialNodes(e){let t=0;for(const o of e){const e=this.getNodeById(o);e&&(t+=1,this.addToSelection(e))}return 0!==t}}class D{constructor(e){let{container:t,refreshHitAreas:o}=e;this.container=t,this.refreshHitAreas=o}checkHorizontalScrolling(e){const t=this.getNewHorizontalScrollDirection(e);this.horizontalScrollDirection!==t&&(this.horizontalScrollDirection=t,null!=this.horizontalScrollTimeout&&window.clearTimeout(this.verticalScrollTimeout),t&&(this.horizontalScrollTimeout=window.setTimeout(this.scrollHorizontally.bind(this),40)))}checkVerticalScrolling(e){const t=this.getNewVerticalScrollDirection(e);this.verticalScrollDirection!==t&&(this.verticalScrollDirection=t,null!=this.verticalScrollTimeout&&(window.clearTimeout(this.verticalScrollTimeout),this.verticalScrollTimeout=void 0),t&&(this.verticalScrollTimeout=window.setTimeout(this.scrollVertically.bind(this),40)))}getScrollLeft(){return this.container.scrollLeft}scrollToY(e){this.container.scrollTop=e}stopScrolling(){this.horizontalScrollDirection=void 0,this.verticalScrollDirection=void 0,this.scrollParentTop=void 0,this.scrollParentBottom=void 0}getNewHorizontalScrollDirection(e){const t=r(this.container),o=t.left+this.container.clientWidth,n=t.left;return e>o-20?"right":e<n+20?"left":void 0}getNewVerticalScrollDirection(e){return e<this.getScrollParentTop()?"top":e>this.getScrollParentBottom()?"bottom":void 0}getScrollParentBottom(){return null==this.scrollParentBottom&&(this.scrollParentBottom=this.getScrollParentTop()+this.container.clientHeight),this.scrollParentBottom}getScrollParentTop(){return null==this.scrollParentTop&&(this.scrollParentTop=n(this.container)),this.scrollParentTop}scrollHorizontally(){if(!this.horizontalScrollDirection)return;const e="left"===this.horizontalScrollDirection?-20:20;this.container.scrollBy({behavior:"instant",left:e,top:0}),this.refreshHitAreas(),setTimeout(this.scrollHorizontally.bind(this),40)}scrollVertically(){if(!this.verticalScrollDirection)return;const e="top"===this.verticalScrollDirection?-20:20;this.container.scrollBy({behavior:"instant",left:0,top:e}),this.refreshHitAreas(),setTimeout(this.scrollVertically.bind(this),40)}}class y{constructor(e){let{refreshHitAreas:t,treeElement:o}=e;this.refreshHitAreas=t,this.treeElement=o}checkHorizontalScrolling(e){const t=this.getNewHorizontalScrollDirection(e);this.horizontalScrollDirection!==t&&(this.horizontalScrollDirection=t,null!=this.horizontalScrollTimeout&&window.clearTimeout(this.horizontalScrollTimeout),t&&(this.horizontalScrollTimeout=window.setTimeout(this.scrollHorizontally.bind(this),40)))}checkVerticalScrolling(e){const t=this.getNewVerticalScrollDirection(e);this.verticalScrollDirection!==t&&(this.verticalScrollDirection=t,null!=this.verticalScrollTimeout&&(window.clearTimeout(this.verticalScrollTimeout),this.verticalScrollTimeout=void 0),t&&(this.verticalScrollTimeout=window.setTimeout(this.scrollVertically.bind(this),40)))}getScrollLeft(){return document.documentElement.scrollLeft}scrollToY(e){const t=n(this.treeElement);document.documentElement.scrollTop=e+t}stopScrolling(){this.horizontalScrollDirection=void 0,this.verticalScrollDirection=void 0,this.documentScrollHeight=void 0,this.documentScrollWidth=void 0}canScrollDown(){const e=document.documentElement;return e.scrollTop+e.clientHeight<this.getDocumentScrollHeight()}canScrollRight(){const e=document.documentElement;return e.scrollLeft+e.clientWidth<this.getDocumentScrollWidth()}getDocumentScrollHeight(){return null==this.documentScrollHeight&&(this.documentScrollHeight=document.documentElement.scrollHeight),this.documentScrollHeight}getDocumentScrollWidth(){return null==this.documentScrollWidth&&(this.documentScrollWidth=document.documentElement.scrollWidth),this.documentScrollWidth}getNewHorizontalScrollDirection(e){const t=e-document.documentElement.scrollLeft<20;return e>window.innerWidth-20&&this.canScrollRight()?"right":t?"left":void 0}getNewVerticalScrollDirection(e){const t=jQuery(document).scrollTop()??0;if(e-t<20)return"top";return window.innerHeight-(e-t)<20&&this.canScrollDown()?"bottom":void 0}scrollHorizontally(){if(!this.horizontalScrollDirection)return;const e="left"===this.horizontalScrollDirection?-20:20;window.scrollBy({behavior:"instant",left:e,top:0}),this.refreshHitAreas(),setTimeout(this.scrollHorizontally.bind(this),40)}scrollVertically(){if(!this.verticalScrollDirection)return;const e="top"===this.verticalScrollDirection?-20:20;window.scrollBy({behavior:"instant",left:0,top:e}),this.refreshHitAreas(),setTimeout(this.scrollVertically.bind(this),40)}}const b=e=>"auto"===e||"scroll"===e,C=e=>{const t=getComputedStyle(e);return b(t.overflowX)||b(t.overflowY)},F=(e,t)=>{const o=(e=>{if(C(e))return e;let t=e.parentElement;for(;t;){if(C(t))return t;t=t.parentElement}return null})(e);return o&&"HTML"!==o.tagName?new D({container:o,refreshHitAreas:t}):new y({refreshHitAreas:t,treeElement:e})};class T{constructor(e){let{refreshHitAreas:t,treeElement:o}=e;this.refreshHitAreas=t,this.scrollParent=void 0,this.treeElement=o}checkScrolling(e){this.checkVerticalScrolling(e),this.checkHorizontalScrolling(e)}getScrollLeft(){return this.getScrollParent().getScrollLeft()}scrollToY(e){this.getScrollParent().scrollToY(e)}stopScrolling(){this.getScrollParent().stopScrolling()}checkHorizontalScrolling(e){this.getScrollParent().checkHorizontalScrolling(e.pageX)}checkVerticalScrolling(e){this.getScrollParent().checkVerticalScrolling(e.pageY)}getScrollParent(){return this.scrollParent||(this.scrollParent=F(this.treeElement,this.refreshHitAreas)),this.scrollParent}}class I{constructor(e){let{getNodeById:t}=e;this.getNodeById=t,this.selectedNodes=new Set,this.clear()}addToSelection(e){null!=e.id?this.selectedNodes.add(e.id):this.selectedSingleNode=e}clear(){this.selectedNodes.clear(),this.selectedSingleNode=null}getSelectedNode(){const e=this.getSelectedNodes();return!!e.length&&(e[0]??!1)}getSelectedNodes(){if(this.selectedSingleNode)return[this.selectedSingleNode];{const e=[];return this.selectedNodes.forEach((t=>{const o=this.getNodeById(t);o&&e.push(o)})),e}}getSelectedNodesUnder(e){if(this.selectedSingleNode)return e.isParentOf(this.selectedSingleNode)?[this.selectedSingleNode]:[];{const t=[];return this.selectedNodes.forEach((o=>{const n=this.getNodeById(o);n&&e.isParentOf(n)&&t.push(n)})),t}}isNodeSelected(e){return null!=e.id?this.selectedNodes.has(e.id):!!this.selectedSingleNode&&this.selectedSingleNode.element===e.element}removeFromSelection(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];null==e.id?this.selectedSingleNode&&e.element===this.selectedSingleNode.element&&(this.selectedSingleNode=null):(this.selectedNodes.delete(e.id),t&&e.iterate((()=>(null!=e.id&&this.selectedNodes.delete(e.id),!0))))}}const L=(e,t)=>{const o=()=>`simple_widget_${t}`,n=(e,t)=>{const o=jQuery.data(e,t);return o&&o instanceof w?o:null},r=(t,r)=>{const s=o();for(const o of t.get()){if(!n(o,s)){const t=new e(o,r);jQuery.data(o,s)||jQuery.data(o,s,t),t.init()}}return t};jQuery.fn[t]=function(t){if(!t)return r(this,null);if("object"==typeof t){return r(this,t)}if("string"==typeof t&&"_"!==t[0]){const r=t;if("destroy"===r)return void(e=>{const t=o();for(const o of e.get()){const e=n(o,t);e&&e.destroy(),jQuery.removeData(o,t)}})(this);if("get_widget_class"===r)return e;for(var s=arguments.length,i=new Array(s>1?s-1:0),l=1;l<s;l++)i[l-1]=arguments[l];return((e,t,n)=>{let r=null;for(const s of e.get()){const e=jQuery.data(s,o());if(e&&e instanceof w){const o=e[t];o&&"function"==typeof o&&(r=o.apply(e,n))}}return r})(this,r,i)}}};class w{static defaults={};constructor(e,t){this.$el=jQuery(e);const o=this.constructor.defaults;this.options={...o,...t}}static register(e,t){L(e,t)}deinit(){}destroy(){this.deinit()}init(){}}const M="Node parameter is empty",H="Parameter is empty: ";class A extends w{static defaults=(()=>({animationSpeed:"fast",autoEscape:!0,autoOpen:!1,buttonLeft:!0,closedIcon:void 0,data:void 0,dataFilter:void 0,dataUrl:void 0,dragAndDrop:!1,keyboardSupport:!0,nodeClass:p,onCanMove:void 0,onCanMoveTo:void 0,onCanSelectNode:void 0,onCreateLi:void 0,onDragMove:void 0,onDragStop:void 0,onGetStateFromStorage:void 0,onIsMoveHandle:void 0,onLoadFailed:void 0,onLoading:void 0,onSetStateFromStorage:void 0,openedIcon:"▼",openFolderDelay:500,rtl:void 0,saveState:!1,selectable:!0,showEmptyFolder:!1,slide:!0,startDndDelay:300,tabIndex:0,useContextMenu:!0}))();addNodeAfter(e,t){const o=t.addAfter(e);return o&&this.refreshElements(t.parent),o}addNodeBefore(e,t){if(!t)throw Error(H+"existingNode");const o=t.addBefore(e);return o&&this.refreshElements(t.parent),o}addParentNode(e,t){if(!t)throw Error(H+"existingNode");const o=t.addParent(e);return o&&this.refreshElements(o.parent),o}addToSelection(e,t){if(!e)throw Error(M);return this.selectNodeHandler.addToSelection(e),this.openParents(e),this.getNodeElementForNode(e).select(t??!0),this.saveState(),this.element}appendNode(e,t){const o=t??this.tree,n=o.append(e);return this.refreshElements(o),n}closeNode(e,t){if(!e)throw Error(M);const o=t??this.options.slide;return(e.isFolder()||e.isEmptyFolder)&&(this.createFolderElement(e).close(o,this.options.animationSpeed),this.saveState()),this.element}deinit(){this.element.empty(),this.element.off(),this.keyHandler.deinit(),this.mouseHandler.deinit(),this.tree=new p({},!0),super.deinit()}getNodeByCallback(e){return this.tree.getNodeByCallback(e)}getNodeByHtmlElement(e){const t=e instanceof HTMLElement?e:e[0];return t?this.getNode(t):null}getNodeById(e){return this.tree.getNodeById(e)}getNodeByName(e){return this.tree.getNodeByName(e)}getNodeByNameMustExist(e){return this.tree.getNodeByNameMustExist(e)}getNodesByProperty(e,t){return this.tree.getNodesByProperty(e,t)}getSelectedNode(){return this.selectNodeHandler.getSelectedNode()}getSelectedNodes(){return this.selectNodeHandler.getSelectedNodes()}getState(){return this.saveStateHandler.getState()}getStateFromStorage(){return this.saveStateHandler.getStateFromStorage()}getTree(){return this.tree}getVersion(){return"1.8.10"}init(){super.init(),this.element=this.$el,this.isInitialized=!1,this.options.rtl=this.getRtlOption(),null==this.options.closedIcon&&(this.options.closedIcon=this.getDefaultClosedIcon()),this.connectHandlers(),this.initData()}isDragging(){return this.dndHandler.isDragging}isNodeSelected(e){if(!e)throw Error(M);return this.selectNodeHandler.isNodeSelected(e)}loadData(e,t){return this.doLoadData(e,t),this.element}loadDataFromUrl(e,t,o){return"string"==typeof e?this.doLoadDataFromUrl(e,t,o??null):this.doLoadDataFromUrl(null,e,t),this.element}moveDown(){const e=this.getSelectedNode();return e&&this.keyHandler.moveDown(e),this.element}moveNode(e,t,o){if(!e)throw Error(M);if(!t)throw Error(H+"targetNode");if(!o)throw Error(H+"position");return this.tree.moveNode(e,t,o),this.refreshElements(null),this.element}moveUp(){const e=this.getSelectedNode();return e&&this.keyHandler.moveUp(e),this.element}openNode(e,t,o){if(!e)throw Error(M);const[n,r]=(()=>{let e,n;return"function"==typeof t?(e=t,n=null):(n=t,e=o),null==n&&(n=this.options.slide),[n,e]})();return this.openNodeInternal(e,n,r),this.element}prependNode(e,t){const o=t??this.tree,n=o.prepend(e);return this.refreshElements(o),n}refresh(){return this.refreshElements(null),this.element}refreshHitAreas(){return this.dndHandler.refresh(),this.element}reload(e){return this.doLoadDataFromUrl(null,null,e),this.element}removeFromSelection(e){if(!e)throw Error(M);return this.selectNodeHandler.removeFromSelection(e),this.getNodeElementForNode(e).deselect(),this.saveState(),this.element}removeNode(e){if(!e)throw Error(M);if(!e.parent)throw Error("Node has no parent");this.selectNodeHandler.removeFromSelection(e,!0);const t=e.parent;return e.remove(),this.refreshElements(t),this.element}scrollToNode(e){if(!e)throw Error(M);if(!e.element)return this.element;const t=n(e.element)-n(this.$el.get(0));return this.scrollHandler.scrollToY(t),this.element}selectNode(e,t){return this.doSelectNode(e,t),this.element}setOption(e,t){return this.options[e]=t,this.element}setState(e){return e&&(this.saveStateHandler.setInitialState(e),this.refreshElements(null)),this.element}toggle(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(!e)throw Error(M);const o=t??this.options.slide;return e.is_open?this.closeNode(e,o):this.openNode(e,o),this.element}toJson(){return JSON.stringify(this.tree.getData())}updateNode(e,t){if(!e)throw Error(M);if(!t)return this.element;const o="object"==typeof t&&t.id&&t.id!==e.id;return o&&this.tree.removeNodeFromIndex(e),e.setData(t),o&&this.tree.addNodeToIndex(e),"object"==typeof t&&t.children&&t.children instanceof Array&&(e.removeChildren(),t.children.length&&e.loadFromData(t.children)),this.refreshElements(e),this.element}connectHandlers(){const{autoEscape:e,buttonLeft:o,closedIcon:n,dataFilter:r,dragAndDrop:s,keyboardSupport:i,onCanMove:l,onCanMoveTo:c,onCreateLi:u,onDragMove:g,onDragStop:p,onGetStateFromStorage:f,onIsMoveHandle:v,onLoadFailed:S,onLoading:N,onSetStateFromStorage:D,openedIcon:y,openFolderDelay:b,rtl:C,saveState:F,showEmptyFolder:L,slide:w,tabIndex:M}=this.options,H=this.closeNode.bind(this),A=this.getNodeElement.bind(this),_=this.getNodeElementForNode.bind(this),j=this.getNodeById.bind(this),x=this.getSelectedNode.bind(this),P=this.getTree.bind(this),B=this.isFocusOnTree.bind(this),k=this.loadData.bind(this),q=this.openNodeInternal.bind(this),O=this.refreshElements.bind(this),U=this.refreshHitAreas.bind(this),z=this.selectNode.bind(this),Q=this.element,V=this.element.get(0),Y=this.triggerEvent.bind(this),$=new I({getNodeById:j}),R=$.addToSelection.bind($),X=$.getSelectedNodes.bind($),G=$.isNodeSelected.bind($),W=$.removeFromSelection.bind($),K=new t({dataFilter:r,loadData:k,onLoadFailed:S,onLoading:N,treeElement:V,triggerEvent:Y}),J=new E({addToSelection:R,getNodeById:j,getSelectedNodes:X,getTree:P,onGetStateFromStorage:f,onSetStateFromStorage:D,openNode:q,refreshElements:O,removeFromSelection:W,saveState:F}),Z=new T({refreshHitAreas:U,treeElement:V}),ee=Z.getScrollLeft.bind(Z),te=new d({autoEscape:e,getNodeElement:A,getNodeElementForNode:_,getScrollLeft:ee,getTree:P,onCanMove:l,onCanMoveTo:c,onDragMove:g,onDragStop:p,onIsMoveHandle:v,openFolderDelay:b,openNode:q,refreshElements:O,slide:w,treeElement:V,triggerEvent:Y}),oe=new h({closeNode:H,getSelectedNode:x,isFocusOnTree:B,keyboardSupport:i,openNode:q,selectNode:z}),ne=new a({$element:Q,autoEscape:e,buttonLeft:o,closedIcon:n,dragAndDrop:s,getTree:P,isNodeSelected:G,onCreateLi:u,openedIcon:y,rtl:C,showEmptyFolder:L,tabIndex:M}),re=this.getNode.bind(this),se=this.mouseCapture.bind(this),ie=this.mouseDrag.bind(this),le=this.mouseStart.bind(this),de=this.mouseStop.bind(this),ae=new m({element:V,getMouseDelay:()=>this.options.startDndDelay??0,getNode:re,onClickButton:this.toggle.bind(this),onClickTitle:this.doSelectNode.bind(this),onMouseCapture:se,onMouseDrag:ie,onMouseStart:le,onMouseStop:de,triggerEvent:Y,useContextMenu:this.options.useContextMenu});this.dataLoader=K,this.dndHandler=te,this.keyHandler=oe,this.mouseHandler=ae,this.renderer=ne,this.saveStateHandler=J,this.scrollHandler=Z,this.selectNodeHandler=$}containsElement(e){const t=this.getNode(e);return null!=t&&t.tree===this.tree}createFolderElement(e){const t=this.renderer.closedIconElement,o=this.scrollHandler.getScrollLeft.bind(this.scrollHandler),n=this.renderer.openedIconElement,r=this.options.tabIndex,s=this.element.get(0),i=this.triggerEvent.bind(this);return new N({closedIconElement:t,getScrollLeft:o,node:e,openedIconElement:n,tabIndex:r,treeElement:s,triggerEvent:i})}createNodeElement(e){const t=this.scrollHandler.getScrollLeft.bind(this.scrollHandler),o=this.options.tabIndex,n=this.element.get(0);return new S({getScrollLeft:t,node:e,tabIndex:o,treeElement:n})}deselectCurrentNode(){const e=this.getSelectedNode();e&&this.removeFromSelection(e)}deselectNodes(e){const t=this.selectNodeHandler.getSelectedNodesUnder(e);for(const e of t)this.selectNodeHandler.removeFromSelection(e)}doLoadData(e,t){e&&(t?(this.deselectNodes(t),this.loadSubtree(e,t)):this.initTree(e),this.isDragging()&&this.dndHandler.refresh()),this.triggerEvent("tree.load_data",{parent_node:t,tree_data:e})}doLoadDataFromUrl(e,t,o){const n=e??this.getDataUrlInfo(t);this.dataLoader.loadFromUrl(n,t,o)}doSelectNode(e,t){const o=()=>{this.options.saveState&&this.saveStateHandler.saveState()};if(!e)return this.deselectCurrentNode(),void o();const n={mustSetFocus:!0,mustToggle:!0,...t??{}};if((()=>this.options.onCanSelectNode?this.options.selectable&&this.options.onCanSelectNode(e):this.options.selectable)()){if(this.selectNodeHandler.isNodeSelected(e))n.mustToggle&&(this.deselectCurrentNode(),this.triggerEvent("tree.select",{node:null,previous_node:e}));else{const t=this.getSelectedNode()||null;this.deselectCurrentNode(),this.addToSelection(e,n.mustSetFocus),this.triggerEvent("tree.select",{deselected_node:t,node:e}),this.openParents(e)}o()}}getAutoOpenMaxLevel(){return!0===this.options.autoOpen?-1:"number"==typeof this.options.autoOpen?this.options.autoOpen:"string"==typeof this.options.autoOpen?parseInt(this.options.autoOpen,10):0}getDataUrlInfo(e){const t=this.options.dataUrl??this.element.data("url"),o=t=>{if(e?.id){const o={node:e.id};t.data=o}else{const e=this.getNodeIdToBeSelected();if(e){const o={selected_node:e};t.data=o}}};return"function"==typeof t?t(e):"string"==typeof t?(e=>{const t={url:e};return o(t),t})(t):t&&"object"==typeof t?(o(t),t):null}getDefaultClosedIcon(){return this.options.rtl?"◀":"►"}getNode(e){const t=e.closest("li.jqtree_common");return t?jQuery(t).data("node"):null}getNodeElement(e){const t=this.getNode(e);return t?this.getNodeElementForNode(t):null}getNodeElementForNode(e){return e.isFolder()?this.createFolderElement(e):this.createNodeElement(e)}getNodeIdToBeSelected(){return this.options.saveState?this.saveStateHandler.getNodeIdToBeSelected():null}getRtlOption(){if(null!=this.options.rtl)return this.options.rtl;{const e=this.element.data("rtl");return null!==e&&!1!==e&&void 0!==e}}initData(){if(this.options.data)this.doLoadData(this.options.data,null);else{this.getDataUrlInfo(null)?this.doLoadDataFromUrl(null,null,null):this.doLoadData([],null)}}initTree(e){const t=()=>{this.isInitialized||(this.isInitialized=!0,this.triggerEvent("tree.init"))};this.tree=new this.options.nodeClass(null,!0,this.options.nodeClass),this.selectNodeHandler.clear(),this.tree.loadFromData(e);const o=this.setInitialState();this.refreshElements(null),o?this.setInitialStateOnDemand(t):t()}isFocusOnTree(){const e=document.activeElement;return Boolean(e&&"SPAN"===e.tagName&&this.containsElement(e))}isSelectedNodeInSubtree(e){const t=this.getSelectedNode();return!!t&&(e===t||e.isParentOf(t))}loadFolderOnDemand(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],o=arguments.length>2?arguments[2]:void 0;e.is_loading=!0,this.doLoadDataFromUrl(null,e,(()=>{this.openNodeInternal(e,t,o)}))}loadSubtree(e,t){t.loadFromData(e),t.load_on_demand=!1,t.is_loading=!1,this.refreshElements(t)}mouseCapture(e){return!!this.options.dragAndDrop&&this.dndHandler.mouseCapture(e)}mouseDrag(e){if(this.options.dragAndDrop){const t=this.dndHandler.mouseDrag(e);return this.scrollHandler.checkScrolling(e),t}return!1}mouseStart(e){return!!this.options.dragAndDrop&&this.dndHandler.mouseStart(e)}mouseStop(e){return!!this.options.dragAndDrop&&(this.scrollHandler.stopScrolling(),this.dndHandler.mouseStop(e))}openNodeInternal(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],o=arguments.length>2?arguments[2]:void 0;const n=(t,o,n)=>{if(!e.children.length)return;this.createFolderElement(t).open(n,o,this.options.animationSpeed)};if(e.isFolder()||e.isEmptyFolder)if(e.load_on_demand)this.loadFolderOnDemand(e,t,o);else{let r=e.parent;for(;r;)r.parent&&n(r,!1),r=r.parent;n(e,t,o),this.saveState()}}openParents(e){const t=e.parent;t?.parent&&!t.is_open&&this.openNode(t,!1)}refreshElements(e){const t=this.isFocusOnTree(),o=!!e&&this.isSelectedNodeInSubtree(e);this.renderer.render(e),o&&this.selectCurrentNode(t),this.triggerEvent("tree.refresh")}saveState(){this.options.saveState&&this.saveStateHandler.saveState()}selectCurrentNode(e){const t=this.getSelectedNode();if(t){this.getNodeElementForNode(t).select(e)}}setInitialState(){const e=()=>{if(!1===this.options.autoOpen)return!1;const e=this.getAutoOpenMaxLevel();let t=!1;return this.tree.iterate(((o,n)=>o.load_on_demand?(t=!0,!1):!!o.hasChildren()&&(o.is_open=!0,n!==e))),t};let[t,o]=(()=>{if(this.options.saveState){const e=this.saveStateHandler.getStateFromStorage();if(e){return[!0,this.saveStateHandler.setInitialState(e)]}return[!1,!1]}return[!1,!1]})();return t||(o=e()),o}setInitialStateOnDemand(e){const t=()=>{const t=this.getAutoOpenMaxLevel();let o=0;const n=e=>{o+=1,this.openNodeInternal(e,!1,(()=>{o-=1,r()}))},r=()=>{this.tree.iterate(((e,o)=>e.load_on_demand?(e.is_loading||n(e),!1):(this.openNodeInternal(e,!1),o!==t))),0===o&&e()};r()};(()=>{if(this.options.saveState){const t=this.saveStateHandler.getStateFromStorage();return!!t&&(this.saveStateHandler.setInitialStateOnDemand(t,e),!0)}return!1})()||t()}triggerEvent(e,t){const o=jQuery.Event(e,t);return this.element.trigger(o),o}}return w.register(A,"tree"),e.JqTreeWidget=A,e}({});
|
|
20
|
+
var jqtree=function(t){"use strict";class e{t;i;o;h;l;u;constructor({dataFilter:t,loadData:e,onLoadFailed:s,onLoading:i,treeElement:o,triggerEvent:n}){this.t=t,this.i=e,this.o=s,this.h=i,this.l=o,this.u=n}loadFromUrl(t,e,s){if(!t)return;const i=this.m(e);this._(i),this.p(!0,e,i);const o=()=>{this.v(i),this.p(!1,e,i)};this.S(t,t=>{o(),this.i(this.N(t),e),s&&"function"==typeof s&&s()},t=>{o(),this.o&&this.o(t)})}_(t){t.classList.add("jqtree-loading")}m(t){return t?.element?t.element:this.l}p(t,e,s){const i=jQuery(s);this.h&&this.h(t,e,i),this.u("tree.loading_data",{$el:i,isLoading:t,node:e})}N(t){return this.t?this.t(t):t}v(t){t.classList.remove("jqtree-loading")}S(t,e,s){const i={cache:!1,dataType:"json",error:s,method:"GET",success:e,..."string"==typeof t?{url:t}:t};i.method=i.method?.toUpperCase()??"GET",jQuery.ajax(i)}}const s=t=>i(t).top,i=t=>{const e=t.getBoundingClientRect();return{left:e.x+window.scrollX,top:e.y+window.scrollY}};class o{j;D;F;constructor({autoEscape:t,nodeName:e,offsetX:s,offsetY:i,treeElement:o}){this.D=s,this.F=i,this.j=this.M(e,t),o.appendChild(this.j)}move(t,e){this.j.style.left=t-this.D+"px",this.j.style.top=e-this.F+"px"}remove(){this.j.remove()}M(t,e){const s=document.createElement("span");return s.classList.add("jqtree-title","jqtree-dragging"),e?s.textContent=t:s.innerHTML=t,s.style.position="absolute",s}}const n=(t,e,s,i)=>{const o=Math.min(e.length,4),n=Math.round((i-s)/o);let r=s;for(let s=0;s<o;s++){const i=e[s];i.position&&t.push({bottom:r+n,node:i.node,position:i.position,top:r}),r+=n}},r=(t,e,i)=>((t,e)=>{if(!t.length)return[];let s=t[0].top,i=[];const o=[];for(const e of t)e.top!==s&&i.length&&(n(o,i,s,e.top),s=e.top,i=[]),i.push(e);return n(o,i,s,e),o})(((t,e)=>{const i=[];let o=0;const n=(t,e,s)=>{i.push({node:t,position:e,top:s}),o=s};return((t,{handleAfterOpenFolder:e,handleClosedFolder:s,handleFirstNode:i,handleNode:o,handleOpenFolder:n})=>{let r=!0;const h=(t,l)=>{let c=(t.is_open||!t.element)&&t.hasChildren(),d=null;if(t.element?.offsetParent&&(d=t.element,r&&(i(t),r=!1),t.hasChildren()?t.is_open?n(t,t.element)||(c=!1):s(t,l,d):o(t,l,t.element)),c){const s=t.children.length;t.children.forEach((e,i)=>{const o=t.children[i];if(o)if(i===s-1)h(o,null);else{const e=t.children[i+1];e&&h(o,e)}}),t.is_open&&d&&e(t,l)}};h(t,null)})(t,{handleAfterOpenFolder:(t,s)=>{n(t,t===e||s===e?null:"after",o)},handleClosedFolder:(t,i,o)=>{const r=s(o);t===e?n(t,null,r):(n(t,"inside",r),i!==e&&n(t,"after",r))},handleFirstNode:t=>{t!==e&&t.element&&n(t,"before",s(t.element))},handleNode:(t,i,o)=>{const r=s(o);n(t,t===e?null:"inside",r),n(t,i===e||t===e?null:"after",r)},handleOpenFolder:(t,i)=>{if(t===e){const e=s(i),o=i.clientHeight;return n(t,null,e),o>5&&n(t,null,e+o-5),!1}return t.children[0]!==e&&n(t,"inside",s(i)),!0}}),i})(t,e),i);class h{currentItem;hitAreas;hoveredArea;isDragging;T;I;C;q;L;k;H;A;B;O;P;U;$;G;V;Y;R;l;u;constructor({autoEscape:t,getNodeElement:e,getNodeElementForNode:s,getScrollLeft:i,getTree:o,onCanMove:n,onCanMoveTo:r,onDragMove:h,onDragStop:l,onIsMoveHandle:c,openFolderDelay:d,openNode:a,refreshElements:u,slide:m,treeElement:f,triggerEvent:g}){this.T=t,this.C=e,this.q=s,this.L=i,this.k=o,this.H=n,this.A=r,this.B=h,this.O=l,this.P=c,this.U=d,this.G=a,this.Y=u,this.R=m,this.l=f,this.u=g,this.hoveredArea=null,this.hitAreas=[],this.isDragging=!1,this.currentItem=null}mouseCapture(t){const e=t.target;if(!this.X(e))return null;if(this.P&&!this.P(jQuery(e)))return null;let s=this.C(e);return s&&this.H&&(this.H(s.node)||(s=null)),this.currentItem=s,null!=this.currentItem}mouseDrag(t){if(!this.currentItem||!this.I)return!1;this.I.move(t.pageX,t.pageY);const e=this.J(t.pageX,t.pageY);return e&&this.K(e,this.currentItem)?(e.node.isFolder()||this.W(),this.hoveredArea!==e&&(this.hoveredArea=e,this.Z(e)?this.tt(e.node):this.W(),this.et())):(this.st(),this.W(),this.hoveredArea=e),e||this.B&&this.B(this.currentItem.node,t.originalEvent),!0}mouseStart(t){if(!this.currentItem)return!1;this.refresh();const{left:e,top:s}=i(t.target),n=this.currentItem.node;return this.I=new o({autoEscape:this.T??!0,nodeName:n.name,offsetX:t.pageX-e,offsetY:t.pageY-s,treeElement:this.l}),this.isDragging=!0,this.currentItem.element.classList.add("jqtree-moving"),!0}mouseStop(t){this.it(t),this.ot(),this.nt(),this.st(),this.rt();const e=this.currentItem;return this.currentItem&&(this.currentItem.element.classList.remove("jqtree-moving"),this.currentItem=null),this.isDragging=!1,!this.hoveredArea&&e&&this.O&&this.O(e.node,t.originalEvent),!1}refresh(){if(this.rt(),this.currentItem){const t=this.currentItem.node;this.ht(t),this.currentItem=this.q(t),this.isDragging&&this.currentItem.element.classList.add("jqtree-moving")}}K(t,e){return!this.A||this.A(e.node,t.node,t.position)}ot(){this.I&&(this.I.remove(),this.I=null)}J(t,e){const s=this.lt();return t<s.left||e<s.top||t>s.right||e>s.bottom?null:function(t,e){let s=0,i=t.length;for(;s<i;){const o=s+i>>1,n=t[o];if(void 0===n)return null;const r=e(n);if(r>0)i=o;else{if(!(r<0))return n;s=o+1}}return null}(this.hitAreas,t=>e<t.top?1:e>t.bottom?-1:0)}ht(t){const e=this.k();this.hitAreas=e?r(e,t,this.lt().bottom):[]}lt(){const t=i(this.l),e=t.left+this.L(),s=t.top;return{bottom:s+this.l.clientHeight+16,left:e,right:e+this.l.clientWidth,top:s}}it(t){if(this.currentItem&&this.hoveredArea?.position&&this.K(this.hoveredArea,this.currentItem)){const e=this.currentItem.node,s=this.hoveredArea.node,i=this.hoveredArea.position,o=e.parent;"inside"===i&&(this.hoveredArea.node.is_open=!0);const n=()=>{const t=this.k();t&&(t.moveNode(e,s,i),this.l.textContent="",this.Y(null))};this.u("tree.move",{move_info:{do_move:n,moved_node:e,original_event:t.originalEvent,position:i,previous_parent:o,target_node:s}})&&n()}}X(t){const e=t.nodeName;return"INPUT"!==e&&"SELECT"!==e&&"TEXTAREA"!==e}Z(t){const e=t.node;return e.isFolder()&&!e.is_open&&"inside"===t.position}st(){this.V&&this.V.remove()}rt(){this.hitAreas=[]}nt(){this.hoveredArea=null}tt(t){const e=()=>{this.G(t,this.R,()=>{this.refresh(),this.et()})};this.W();const s=this.U;!1!==s&&(this.$=window.setTimeout(e,s))}W(){this.$&&(clearTimeout(this.$),this.$=null)}et(){if(!this.hoveredArea)return;this.st();const t=this.q(this.hoveredArea.node);this.V=t.addDropHint(this.hoveredArea.position)}}const l=t=>t?"true":"false";class c{closedIconElement;openedIconElement;T;ct;dt;k;ut;ft;gt;_t;vt;St;constructor({autoEscape:t,buttonLeft:e,closedIcon:s,dragAndDrop:i,getTree:o,htmlElement:n,isNodeSelected:r,onCreateLi:h,openedIcon:l,rtl:c,showEmptyFolder:d,tabIndex:a}){this.T=t,this.ct=e,this.dt=i,this.k=o,this.ut=n,this.ft=r,this.gt=h,this._t=c,this.vt=d,this.St=a,this.openedIconElement=this.Nt(l??"+"),this.closedIconElement=this.Nt(s??"-")}render(t){t?.parent?this.renderFromNode(t):this.renderFromRoot()}renderFromNode(t){if(!t.element)return;const e=t.element,s=this.Et(t,t.getLevel());e.replaceWith(s),this.yt(s,t.children,!1,t.getLevel()+1)}renderFromRoot(){this.ut.textContent="";const t=this.k();t&&this.yt(this.ut,t.children,!0,1)}wt(t,e){t.element=e,jQuery(e).data("node",t)}Nt(t){if("string"==typeof t){const e=document.createElement("div");return e.innerHTML=t,document.createTextNode(e.innerHTML)}return t.nodeType?t:jQuery(t)[0]}yt(t,e,s,i){const o=this.bt(s);t.appendChild(o);for(const t of e){const e=this.Et(t,i);o.appendChild(e),t.hasChildren()&&this.yt(e,t.children,!1,i+1)}}jt(t,e,s){const i=this.Dt(t),o=this.Ft(t,s),n=t.is_open?this.openedIconElement:this.closedIconElement,r=document.createElement("li");r.className=`jqtree_common ${o}`,r.setAttribute("role","none");const h=document.createElement("div");h.className="jqtree-element jqtree_common",h.setAttribute("role","none"),r.appendChild(h);const c=document.createElement("a");c.className=i,n&&c.appendChild(n.cloneNode(!0)),this.ct&&h.appendChild(c);const d=this.Mt(t.name,s,!0,e);return d.setAttribute("aria-expanded",l(t.is_open)),h.appendChild(d),this.ct||h.appendChild(c),r}Et(t,e){const s=this.ft(t),i=t.isFolder()||t.isEmptyFolder&&this.vt?this.jt(t,e,s):this.Tt(t,e,s);return this.wt(t,i),this.gt&&this.gt(t,jQuery(i),s),i}Tt(t,e,s){const i=["jqtree_common"];s&&i.push("jqtree-selected");const o=i.join(" "),n=document.createElement("li");n.className=o,n.setAttribute("role","none");const r=document.createElement("div");r.className="jqtree-element jqtree_common",r.setAttribute("role","none"),n.appendChild(r);const h=this.Mt(t.name,s,!1,e);return r.appendChild(h),n}Mt(t,e,s,i){const o=document.createElement("span");let n="jqtree-title jqtree_common";if(s&&(n+=" jqtree-title-folder"),n+=" jqtree-title-button-"+(this.ct?"left":"right"),o.className=n,e){const t=this.St;void 0!==t&&o.setAttribute("tabindex",`${t}`)}return this.It(o,t,i,e),this.T?o.textContent=t:o.innerHTML=t,o}bt(t){let e,s;t?(e="jqtree-tree",s="tree",this._t&&(e+=" jqtree-rtl")):(e="",s="group"),this.dt&&(e+=" jqtree-dnd");const i=document.createElement("ul");return i.className=`jqtree_common ${e}`,i.setAttribute("role",s),i}Dt(t){const e=["jqtree-toggler","jqtree_common"];return t.is_open||e.push("jqtree-closed"),this.ct?e.push("jqtree-toggler-left"):e.push("jqtree-toggler-right"),e.join(" ")}Ft(t,e){const s=["jqtree-folder"];return t.is_open||s.push("jqtree-closed"),e&&s.push("jqtree-selected"),t.is_loading&&s.push("jqtree-loading"),s.join(" ")}It(t,e,s,i){t.setAttribute("aria-label",e),t.setAttribute("aria-level",`${s}`),t.setAttribute("aria-selected",l(i)),t.setAttribute("role","treeitem")}}class d{Ct;qt;Lt;xt;G;kt;constructor({closeNode:t,getSelectedNode:e,isFocusOnTree:s,keyboardSupport:i,openNode:o,selectNode:n}){this.Ct=t,this.qt=e,this.Lt=s,this.xt=i,this.G=o,this.kt=n,i&&document.addEventListener("keydown",this.Ht)}deinit(){this.xt&&document.removeEventListener("keydown",this.Ht)}moveDown(t){return this.At(t.getNextVisibleNode())}moveUp(t){return this.At(t.getPreviousVisibleNode())}Bt(){return this.xt&&this.Lt()}Ht=t=>{if(!this.Bt())return;let e=!1;const s=this.qt();if(s)switch(t.key){case"ArrowDown":e=this.moveDown(s);break;case"ArrowLeft":e=this.Ot(s);break;case"ArrowRight":e=this.Pt(s);break;case"ArrowUp":e=this.moveUp(s)}e&&t.preventDefault()};Ot(t){return t.isFolder()&&t.is_open?(this.Ct(t),!0):this.At(t.getParent())}Pt(t){return!!t.isFolder()&&(t.is_open?this.At(t.getNextVisibleNode()):(this.G(t),!0))}At(t){return!!t&&(this.kt(t),!0)}}const a=t=>({originalEvent:t,pageX:t.pageX,pageY:t.pageY,target:t.target}),u=(t,e)=>({originalEvent:e,pageX:t.pageX,pageY:t.pageY,target:t.target});class m{j;Qt;Ut;$t;Gt;zt;Vt;Yt;Rt;Xt;Jt;Kt;Wt;u;Zt;constructor({element:t,getMouseDelay:e,getNode:s,onClickButton:i,onClickTitle:o,onMouseCapture:n,onMouseDrag:r,onMouseStart:h,onMouseStop:l,triggerEvent:c,useContextMenu:d}){this.j=t,this.Qt=e,this.Ut=s,this.Yt=i,this.Rt=o,this.Xt=n,this.Jt=r,this.Kt=h,this.Wt=l,this.u=c,this.Zt=d,t.addEventListener("click",this.te),t.addEventListener("dblclick",this.ee),t.addEventListener("mousedown",this.se,{passive:!1}),t.addEventListener("touchstart",this.ie,{passive:!1}),d&&t.addEventListener("contextmenu",this.oe),this.Gt=!1,this.zt=null,this.$t=!1,this.Vt=null}deinit(){this.j.removeEventListener("click",this.te),this.j.removeEventListener("dblclick",this.ee),this.Zt&&this.j.removeEventListener("contextmenu",this.oe),this.j.removeEventListener("mousedown",this.se),this.j.removeEventListener("touchstart",this.ie),this.ne()}re(t){const e=t.closest(".jqtree-toggler");if(e){const t=this.Ut(e);if(t)return{node:t,type:"button"}}else{const e=t.closest(".jqtree-element");if(e){const t=this.Ut(e);if(t)return{node:t,type:"label"}}}return null}te=t=>{if(!t.target)return;const e=this.re(t.target);if(e)switch(e.type){case"button":this.Yt(e.node),t.preventDefault(),t.stopPropagation();break;case"label":this.u("tree.click",{click_event:t,node:e.node})&&this.Rt(e.node)}};oe=t=>{if(!t.target)return;const e=t.target.closest("ul.jqtree-tree .jqtree-element");if(e){const s=this.Ut(e);if(s)return t.preventDefault(),t.stopPropagation(),this.u("tree.contextmenu",{click_event:t,node:s}),!1}return null};ee=t=>{if(!t.target)return;const e=this.re(t.target);"label"===e?.type&&this.u("tree.dblclick",{click_event:t,node:e.node})};he(t){return this.Gt&&this.le(t),this.Vt=t,!!this.Xt(t)&&(this.ce(),!0)}de(t,e){if(this.Gt)return this.Jt(e),void(t.cancelable&&t.preventDefault());this.$t&&(this.Vt&&(this.Gt=this.Kt(this.Vt)),this.Gt?(this.Jt(e),t.cancelable&&t.preventDefault()):this.le(e))}le(t){this.ne(),this.$t=!1,this.Vt=null,this.Gt&&(this.Gt=!1,this.Wt(t))}ce(){document.addEventListener("mousemove",this.ae,{passive:!1}),document.addEventListener("touchmove",this.ue,{passive:!1}),document.addEventListener("mouseup",this.me,{passive:!1}),document.addEventListener("touchend",this.fe,{passive:!1});const t=this.Qt();t?this.ge(t):this.$t=!0}se=t=>{if(0!==t.button)return;this.he(a(t))&&t.cancelable&&t.preventDefault()};ae=t=>{this.de(t,a(t))};me=t=>{this.le(a(t))};ne(){document.removeEventListener("mousemove",this.ae),document.removeEventListener("touchmove",this.ue),document.removeEventListener("mouseup",this.me),document.removeEventListener("touchend",this.fe)}ge(t){this.zt&&clearTimeout(this.zt),this.zt=window.setTimeout(()=>{this.Vt&&(this.$t=!0)},t),this.$t=!1}fe=t=>{if(t.touches.length>1)return;const e=t.touches[0];e&&this.le(u(e,t))};ue=t=>{if(t.touches.length>1)return;const e=t.touches[0];e&&this.de(t,u(e,t))};ie=t=>{if(t.touches.length>1)return;const e=t.touches[0];e&&this.he(u(e,t))}}const f=t=>"object"==typeof t&&"children"in t&&t.children instanceof Array;class g{children;element;id;idMapping;is_loading;is_open;isEmptyFolder;load_on_demand;name;nodeClass;parent;tree;constructor(t=null,e=!1,s=g){this.name="",this.load_on_demand=!1,this.isEmptyFolder=null!=t&&f(t)&&0===t.children.length,this.setData(t),this.children=[],this.parent=null,e&&(this.idMapping=new Map,this.tree=this,this.nodeClass=s)}addAfter(t){if(this.parent){const e=this._e(t),s=this.parent.getChildIndex(this);return this.parent.addChildAtPosition(e,s+1),e.pe(t),e}return null}addBefore(t){if(this.parent){const e=this._e(t),s=this.parent.getChildIndex(this);return this.parent.addChildAtPosition(e,s),e.pe(t),e}return null}addChild(t){this.children.push(t),t.ve(this)}addChildAtPosition(t,e){this.children.splice(e,0,t),t.ve(this)}addNodeToIndex(t){null!=t.id&&this.idMapping.set(t.id,t)}addParent(t){if(this.parent){const e=this._e(t);this.tree&&e.ve(this.tree);const s=this.parent;for(const t of s.children)e.addChild(t);return s.children=[],s.addChild(e),e}return null}append(t){const e=this._e(t);return this.addChild(e),e.pe(t),e}filter(t){const e=[];return this.iterate(s=>(t(s)&&e.push(s),!0)),e}getChildIndex(t){return this.children.indexOf(t)}getData(t=!1){const e=t=>t.map(t=>{const s={};for(const e in t)if(-1===["parent","children","element","idMapping","load_on_demand","nodeClass","tree","isEmptyFolder"].indexOf(e)&&Object.prototype.hasOwnProperty.call(t,e)){const i=t[e];s[e]=i}return t.hasChildren()&&(s.children=e(t.children)),s});return e(t?[this]:this.children)}getLastChild(){if(this.hasChildren()){const t=this.children[this.children.length-1];return t.hasChildren()&&t.is_open?t.getLastChild():t}return null}getLevel(){let t=0,e=this;for(;e.parent;)t+=1,e=e.parent;return t}getNextNode(t=!0){if(t&&this.hasChildren())return this.children[0]??null;if(this.parent){const t=this.getNextSibling();return t||this.parent.getNextNode(!1)}return null}getNextSibling(){if(this.parent){const t=this.parent.getChildIndex(this)+1;return t<this.parent.children.length?this.parent.children[t]??null:null}return null}getNextVisibleNode(){if(this.hasChildren()&&this.is_open)return this.children[0]??null;if(this.parent){const t=this.getNextSibling();return t||this.parent.getNextNode(!1)}return null}getNodeByCallback(t){let e=null;return this.iterate(s=>!e&&(!t(s)||(e=s,!1))),e}getNodeById(t){return this.idMapping.get(t)??null}getNodeByName(t){return this.getNodeByCallback(e=>e.name===t)}getNodeByNameMustExist(t){const e=this.getNodeByCallback(e=>e.name===t);if(!e)throw new Error(`Node with name ${t} not found`);return e}getNodesByProperty(t,e){return this.filter(s=>s[t]===e)}getParent(){return this.parent&&this.parent.parent?this.parent:null}getPreviousNode(){if(this.parent){const t=this.getPreviousSibling();return t?t.hasChildren()?t.getLastChild():t:this.getParent()}return null}getPreviousSibling(){if(this.parent){const t=this.parent.getChildIndex(this)-1;return t>=0?this.parent.children[t]??null:null}return null}getPreviousVisibleNode(){if(this.parent){const t=this.getPreviousSibling();return t?t.hasChildren()&&t.is_open?t.getLastChild():t:this.getParent()}return null}hasChildren(){return 0!==this.children.length}initFromData(t){const e=t=>{for(const e of t){const t=this._e();t.initFromData(e),this.addChild(t)}};(t=>{this.setData(t),f(t)&&t.children.length&&e(t.children)})(t)}isFolder(){return this.hasChildren()||this.load_on_demand}isParentOf(t){let e=t.parent;for(;e;){if(e===this)return!0;e=e.parent}return!1}iterate(t){const e=(s,i)=>{for(const o of s.children){t(o,i)&&o.hasChildren()&&e(o,i+1)}};e(this,0)}loadFromData(t){this.removeChildren();for(const e of t){const t=this._e(e);this.addChild(t),f(e)&&t.loadFromData(e.children)}return this}moveNode(t,e,s){if(!t.parent||t.isParentOf(e))return!1;switch(t.parent.Se(t),s){case"after":return!!e.parent&&(e.parent.addChildAtPosition(t,e.parent.getChildIndex(e)+1),!0);case"before":return!!e.parent&&(e.parent.addChildAtPosition(t,e.parent.getChildIndex(e)),!0);case"inside":return e.addChildAtPosition(t,0),!0}}prepend(t){const e=this._e(t);return this.addChildAtPosition(e,0),e.pe(t),e}remove(){this.parent&&(this.parent.removeChild(this),this.parent=null)}removeChild(t){t.removeChildren(),this.Se(t)}removeChildren(){this.iterate(t=>(this.tree?.removeNodeFromIndex(t),!0)),this.children=[]}removeNodeFromIndex(t){null!=t.id&&this.idMapping.delete(t.id)}setData(t){if(t)if("string"==typeof t)this.name=t;else if("object"==typeof t)for(const e in t)if(Object.prototype.hasOwnProperty.call(t,e)){const s=t[e];"label"===e||"name"===e?"string"==typeof s&&(this.name=s):"children"!==e&&"parent"!==e&&(this[e]=s)}}_e(t){return new(this.Ne())(t)}Se(t){this.children.splice(this.getChildIndex(t),1),this.tree?.removeNodeFromIndex(t)}Ne(){return this.nodeClass??this.tree?.nodeClass??g}pe(t){f(t)&&t.children.length&&this.loadFromData(t.children)}ve(t){this.parent=t,this.tree=t.tree,this.tree?.addNodeToIndex(this)}}class _{Ee;constructor(t,e){const s=t.querySelector(":scope > .jqtree-element");if(!s)return void(this.Ee=void 0);const i=Math.max(t.offsetWidth+e-4,0),o=Math.max(t.clientHeight-4,0),n=document.createElement("span");n.className="jqtree-border",n.style.width=`${i}px`,n.style.height=`${o}px`,this.Ee=n,s.append(this.Ee)}remove(){this.Ee?.remove()}}class p{j;ye;we;constructor(t,e,s){switch(this.j=e,this.we=t,this.ye=this.be(),s){case"after":this.je();break;case"before":this.De();break;case"inside":t.isFolder()&&t.is_open?this.Fe():this.Me()}}remove(){this.ye.remove()}be(){const t=document.createElement("li");t.className="jqtree_common jqtree-ghost";const e=document.createElement("span");e.className="jqtree_common jqtree-circle",t.append(e);const s=document.createElement("span");return s.className="jqtree_common jqtree-line",t.append(s),t}je(){this.j.after(this.ye)}De(){this.j.before(this.ye)}Me(){this.j.after(this.ye),this.ye.classList.add("jqtree-inside")}Fe(){const t=this.we.children[0]?.element;t&&t.before(this.ye)}}class v{element;node;L;St;l;constructor({getScrollLeft:t,node:e,tabIndex:s,treeElement:i}){this.L=t,this.St=s,this.l=i,this.init(e)}addDropHint(t){return this.mustShowBorderDropHint(t)?new _(this.element,this.L()):new p(this.node,this.element,t)}deselect(){this.element.classList.remove("jqtree-selected");const t=this.getTitleSpan();t.removeAttribute("tabindex"),t.setAttribute("aria-selected","false"),t.blur()}init(t){this.node=t,t.element??=this.l,this.element=t.element}select(t){this.element.classList.add("jqtree-selected");const e=this.getTitleSpan(),s=this.St;null!=s&&e.setAttribute("tabindex",s.toString()),e.setAttribute("aria-selected","true"),t&&e.focus()}getTitleSpan(){return this.element.querySelector(":scope > .jqtree-element > span.jqtree-title")}getUl(){return this.element.querySelector(":scope > ul")}mustShowBorderDropHint(t){return"inside"===t}}const S=t=>"number"==typeof t?t:"slow"===t?600:200;class N extends v{Te;Ie;u;constructor({closedIconElement:t,getScrollLeft:e,node:s,openedIconElement:i,tabIndex:o,treeElement:n,triggerEvent:r}){super({getScrollLeft:e,node:s,tabIndex:o,treeElement:n}),this.Te=t,this.Ie=i,this.u=r}close(t,e){if(!this.node.is_open)return;this.node.is_open=!1;const s=this.Ce();s.classList.add("jqtree-closed"),s.innerHTML="";const i=this.Te;if(i){const t=i.cloneNode(!0);s.appendChild(t)}const o=()=>{this.element.classList.add("jqtree-closed");this.getTitleSpan().setAttribute("aria-expanded","false"),this.u("tree.close",{node:this.node})},n=this.getUl();t?((t,e,s)=>{t.animate([{height:`${t.scrollHeight}px`,overflow:"hidden"},{height:"0",overflow:"hidden"}],{duration:S(e)}).onfinish=()=>{t.style.display="none",s()}})(n,e,o):(n.style.display="none",o())}open(t,e,s){if(this.node.is_open)return;this.node.is_open=!0;const i=this.Ce();i.classList.remove("jqtree-closed"),i.innerHTML="";const o=this.Ie;if(o){const t=o.cloneNode(!0);i.appendChild(t)}const n=()=>{this.element.classList.remove("jqtree-closed");this.getTitleSpan().setAttribute("aria-expanded","true"),t&&t(this.node),this.u("tree.open",{node:this.node})},r=this.getUl();e?((t,e,s)=>{t.style.display="block",t.animate([{height:"0",overflow:"hidden"},{height:`${t.scrollHeight}px`,overflow:"hidden"}],{duration:S(e)}).onfinish=()=>{s()}})(r,s,n):(r.style.display="block",n())}mustShowBorderDropHint(t){return!this.node.is_open&&"inside"===t}Ce(){return this.element.querySelector(":scope > .jqtree-element > a.jqtree-toggler")}}class E{qe;Le;xe;k;ke;He;G;Y;Ae;Be;constructor({addToSelection:t,getNodeById:e,getSelectedNodes:s,getTree:i,onGetStateFromStorage:o,onSetStateFromStorage:n,openNode:r,refreshElements:h,removeFromSelection:l,saveState:c}){this.qe=t,this.Le=e,this.xe=s,this.k=i,this.ke=o,this.He=n,this.G=r,this.Y=h,this.Ae=l,this.Be=c}getNodeIdToBeSelected(){const t=this.getStateFromStorage();return t?.selected_node?t.selected_node[0]??null:null}getState(){return{open_nodes:(()=>{const t=[];return this.k()?.iterate(e=>(e.is_open&&e.id&&e.hasChildren()&&t.push(e.id),!0)),t})(),selected_node:(()=>{const t=[];return this.xe().forEach(e=>{null!=e.id&&t.push(e.id)}),t})()}}getStateFromStorage(){const t=this.Oe();return t?this.Pe(t):null}saveState(){const t=JSON.stringify(this.getState());this.He?this.He(t):localStorage.setItem(this.Qe(),t)}setInitialState(t){let e=!1;return t.open_nodes&&(e=this.Ue(t.open_nodes)),this.$e(),t.selected_node&&this.Ge(t.selected_node),e}setInitialStateOnDemand(t,e){let s=0,i=t.open_nodes;const o=()=>{if(!i)return;const o=[];for(const t of i){const e=this.Le(t);e?e.is_loading||(e.load_on_demand?n(e):this.G(e,!1)):o.push(t)}i=o,t.selected_node&&this.Ge(t.selected_node)&&this.Y(null),0===s&&e()},n=t=>{s+=1,this.G(t,!1,()=>{s-=1,o()})};o()}Qe(){return"string"==typeof this.Be?this.Be:"tree"}Oe(){return this.ke?this.ke():localStorage.getItem(this.Qe())}Ue(t){let e=!1;for(const s of t){const t=this.Le(s);t&&(t.load_on_demand?e=!0:t.is_open=!0)}return e}Pe(t){const e=JSON.parse(t);var s;return e.selected_node&&("number"==typeof(s=e.selected_node)&&s%1==0)&&(e.selected_node=[e.selected_node]),e}$e(){this.xe().forEach(t=>{this.Ae(t)})}Ge(t){let e=0;for(const s of t){const t=this.Le(s);t&&(e+=1,this.qe(t))}return 0!==e}}class y{container;horizontalScrollDirection;horizontalScrollTimeout;refreshHitAreas;verticalScrollDirection;verticalScrollTimeout;constructor({container:t,refreshHitAreas:e}){this.container=t,this.refreshHitAreas=e}checkHorizontalScrolling(t){const e=this.getNewHorizontalScrollDirection(t);this.horizontalScrollDirection!==e&&(this.horizontalScrollDirection=e,null!=this.horizontalScrollTimeout&&window.clearTimeout(this.horizontalScrollTimeout),e&&(this.horizontalScrollTimeout=window.setTimeout(this.scrollHorizontally.bind(this),40)))}checkVerticalScrolling(t){const e=this.getNewVerticalScrollDirection(t);this.verticalScrollDirection!==e&&(this.verticalScrollDirection=e,null!=this.verticalScrollTimeout&&(window.clearTimeout(this.verticalScrollTimeout),this.verticalScrollTimeout=void 0),e&&(this.verticalScrollTimeout=window.setTimeout(this.scrollVertically.bind(this),40)))}getScrollLeft(){return this.container.scrollLeft}scrollToY(t){this.container.scrollTop=t}stopScrolling(){this.horizontalScrollDirection=void 0,this.verticalScrollDirection=void 0}scrollHorizontally(){if(!this.horizontalScrollDirection)return;const t="left"===this.horizontalScrollDirection?-20:20;this.container.scrollBy({behavior:"instant",left:t,top:0}),this.refreshHitAreas(),setTimeout(this.scrollHorizontally.bind(this),40)}scrollVertically(){if(!this.verticalScrollDirection)return;const t="top"===this.verticalScrollDirection?-20:20;this.container.scrollBy({behavior:"instant",left:0,top:t}),this.refreshHitAreas(),setTimeout(this.scrollVertically.bind(this),40)}}class w extends y{ze;Ve;stopScrolling(){super.stopScrolling(),this.horizontalScrollDirection=void 0,this.verticalScrollDirection=void 0}getNewHorizontalScrollDirection(t){const e=i(this.container),s=this.container.getBoundingClientRect().width,o=e.left+s,n=e.left;return t>o-20?"right":t<n+20?"left":void 0}getNewVerticalScrollDirection(t){return t<this.Ye()?"top":t>this.Re()?"bottom":void 0}Re(){if(null==this.ze){const t=this.container.getBoundingClientRect().height;this.ze=this.Ye()+t}return this.ze}Ye(){return this.Ve??=s(this.container),this.Ve}}class b extends y{Xe;Je;l;constructor({refreshHitAreas:t,treeElement:e}){super({container:document.documentElement,refreshHitAreas:t}),this.l=e}scrollToY(t){const e=s(this.l);super.scrollToY(t+e)}stopScrolling(){super.stopScrolling(),this.Xe=void 0,this.Je=void 0}getNewHorizontalScrollDirection(t){const e=t-this.container.scrollLeft<20;return t>window.innerWidth-20&&this.Ke()?"right":e?"left":void 0}getNewVerticalScrollDirection(t){const e=this.container.scrollTop;if(t-e<20)return"top";return window.innerHeight-(t-e)<20&&this.We()?"bottom":void 0}We(){return this.container.scrollTop+this.container.clientHeight<this.Ze()}Ke(){return this.container.scrollLeft+this.container.clientWidth<this.ts()}Ze(){return this.Xe??=this.container.scrollHeight,this.Xe}ts(){return this.Je??=this.container.scrollWidth,this.Je}}const j=t=>"auto"===t||"scroll"===t,D=t=>{const e=getComputedStyle(t);return j(e.overflowX)||j(e.overflowY)},F=(t,e)=>{const s=(t=>{if(D(t))return t;let e=t.parentElement;for(;e;){if(D(e))return e;e=e.parentElement}return null})(t);return s&&"HTML"!==s.tagName?new w({container:s,refreshHitAreas:e}):new b({refreshHitAreas:e,treeElement:t})};class M{es;ss;l;constructor({refreshHitAreas:t,treeElement:e}){this.es=t,this.ss=void 0,this.l=e}checkScrolling(t){this.ns(t),this.rs(t)}getScrollLeft(){return this.hs().getScrollLeft()}scrollToY(t){this.hs().scrollToY(t)}stopScrolling(){this.hs().stopScrolling()}rs(t){this.hs().checkHorizontalScrolling(t.pageX)}ns(t){this.hs().checkVerticalScrolling(t.pageY)}hs(){return this.ss??=F(this.l,this.es),this.ss}}class T{Le;ls;cs;constructor({getNodeById:t}){this.Le=t,this.ls=new Set,this.clear()}addToSelection(t){null!=t.id?this.ls.add(t.id):this.cs=t}clear(){this.ls.clear(),this.cs=null}getSelectedNode(){const t=this.getSelectedNodes();return!!t.length&&(t[0]??!1)}getSelectedNodes(){if(this.cs)return[this.cs];{const t=[];return this.ls.forEach(e=>{const s=this.Le(e);s&&t.push(s)}),t}}getSelectedNodesUnder(t){if(this.cs)return t.isParentOf(this.cs)?[this.cs]:[];{const e=[];return this.ls.forEach(s=>{const i=this.Le(s);i&&t.isParentOf(i)&&e.push(i)}),e}}isNodeSelected(t){return null!=t.id?this.ls.has(t.id):!!this.cs&&this.cs.element===t.element}removeFromSelection(t,e=!1){null==t.id?this.cs&&t.element===this.cs.element&&(this.cs=null):(this.ls.delete(t.id),e&&t.iterate(()=>(null!=t.id&&this.ls.delete(t.id),!0)))}}const I=(t,e)=>{const s=()=>`simple_widget_${e}`,i=(t,e)=>{const s=jQuery.data(t,e);return s&&s instanceof C?s:null},o=(e,o)=>{const n=s();for(const s of e.get()){if(!i(s,n)){const e=new t(s,o);jQuery.data(s,n)||jQuery.data(s,n,e),e.init()}}return e};jQuery.fn[e]=function(t,...e){if(!t)return o(this,null);if("object"==typeof t){return o(this,t)}if("string"==typeof t&&"_"!==t[0]){const o=t;return"destroy"===t?void(t=>{const e=s();for(const s of t.get()){const t=i(s,e);t&&t.destroy(),jQuery.removeData(s,e)}})(this):((t,e,i)=>{let o=null;for(const n of t.get()){const t=jQuery.data(n,s());if(t&&t instanceof C){const s=t[e];s&&"function"==typeof s&&(o=s.apply(t,i))}}return o})(this,o,e)}}};class C{static defaults={};$el;options;constructor(t,e){this.$el=jQuery(t);const s=this.constructor.defaults;this.options={...s,...e}}static register(t,e){I(t,e)}deinit(){}destroy(){this.deinit()}init(){}}const q="Node parameter is empty",L="Parameter is empty: ";class x extends C{static defaults={animationSpeed:"fast",autoEscape:!0,autoOpen:!1,buttonLeft:!0,closedIcon:void 0,data:void 0,dataFilter:void 0,dataUrl:void 0,dragAndDrop:!1,keyboardSupport:!0,nodeClass:g,onCanMove:void 0,onCanMoveTo:void 0,onCanSelectNode:void 0,onCreateLi:void 0,onDragMove:void 0,onDragStop:void 0,onGetStateFromStorage:void 0,onIsMoveHandle:void 0,onLoadFailed:void 0,onLoading:void 0,onSetStateFromStorage:void 0,openedIcon:"▼",openFolderDelay:500,rtl:void 0,saveState:!1,selectable:!0,showEmptyFolder:!1,slide:!0,startDndDelay:300,tabIndex:0,useContextMenu:!0};ds;us;j;ut;fs;gs;_s;ps;vs;Ss;Ns;Es;addNodeAfter(t,e){const s=e.addAfter(t);return s&&this.Y(e.parent),s}addNodeBefore(t,e){if(!e)throw Error(L+"existingNode");const s=e.addBefore(t);return s&&this.Y(e.parent),s}addParentNode(t,e){if(!e)throw Error(L+"existingNode");const s=e.addParent(t);return s&&this.Y(s.parent),s}addToSelection(t,e){if(!t)throw Error(q);return this.Ns.addToSelection(t),this.ys(t),this.q(t).select(e??!0),this.ws(),this.j}appendNode(t,e){const s=e??this.Es,i=s.append(t);return this.Y(s),i}closeNode(t,e){if(!t)throw Error(q);const s=e??this.options.slide;return(t.isFolder()||t.isEmptyFolder)&&(this.bs(t).close(s,this.options.animationSpeed),this.ws()),this.j}deinit(){this.ut.textContent="",this.j.off(),this.gs.deinit(),this._s.deinit(),this.Es=new g({},!0),super.deinit()}getNodeByCallback(t){return this.Es.getNodeByCallback(t)}getNodeByHtmlElement(t){const e=t instanceof HTMLElement?t:t.get(0);return e?this.Ut(e):null}getNodeById(t){return this.Es.getNodeById(t)}getNodeByName(t){return this.Es.getNodeByName(t)}getNodeByNameMustExist(t){return this.Es.getNodeByNameMustExist(t)}getNodesByProperty(t,e){return this.Es.getNodesByProperty(t,e)}getSelectedNode(){return this.Ns.getSelectedNode()}getSelectedNodes(){return this.Ns.getSelectedNodes()}getState(){return this.vs.getState()}getStateFromStorage(){return this.vs.getStateFromStorage()}getTree(){return this.Es}getVersion(){return"1.9.0"}init(){super.init(),this.j=this.$el,this.ut=this.j.get(0),this.fs=!1,this.options.dataUrl??=this.j.data("url");const t=this.j.data("rtl");this.options.rtl??=""===t||Boolean(t),this.options.closedIcon??=this.js(),this.Ds(),this.Fs()}isDragging(){return this.us.isDragging}isNodeSelected(t){if(!t)throw Error(q);return this.Ns.isNodeSelected(t)}loadData(t,e){return this.Ms(t,e),this.j}loadDataFromUrl(t,e,s){return"string"==typeof t?this.Ts(t,e,s??null):this.Ts(null,t,e),this.j}moveDown(){const t=this.getSelectedNode();return t&&this.gs.moveDown(t),this.j}moveNode(t,e,s){if(!t)throw Error(q);if(!e)throw Error(L+"targetNode");if(!s)throw Error(L+"position");return this.Es.moveNode(t,e,s),this.Y(null),this.j}moveUp(){const t=this.getSelectedNode();return t&&this.gs.moveUp(t),this.j}openNode(t,e,s){if(!t)throw Error(q);const[i,o]=(()=>{let t,i;return"function"==typeof e?(t=e,i=null):(i=e,t=s),i??=this.options.slide,[i,t]})();return this.Is(t,i,o),this.j}prependNode(t,e){const s=e??this.Es,i=s.prepend(t);return this.Y(s),i}refresh(){return this.Y(null),this.j}reload(t){return this.Ts(null,null,t),this.j}removeFromSelection(t){if(!t)throw Error(q);return this.Ns.removeFromSelection(t),this.q(t).deselect(),this.ws(),this.j}removeNode(t){if(!t)throw Error(q);if(!t.parent)throw Error("Node has no parent");this.Ns.removeFromSelection(t,!0);const e=t.parent;return t.remove(),this.Y(e),this.j}scrollToNode(t){if(!t)throw Error(q);if(!t.element)return this.j;const e=s(t.element)-s(this.ut);return this.Ss.scrollToY(e),this.j}selectNode(t,e){return this.Cs(t,e),this.j}setOption(t,e){return this.options[t]=e,this.j}setState(t){return t&&(this.vs.setInitialState(t),this.Y(null)),this.j}toggle(t,e=null){if(!t)throw Error(q);const s=e??this.options.slide;return t.is_open?this.closeNode(t,s):this.openNode(t,s),this.j}toJson(){return JSON.stringify(this.Es.getData())}updateNode(t,e){if(!t)throw Error(q);if(!e)return this.j;const s="object"==typeof e&&e.id&&e.id!==t.id;return s&&this.Es.removeNodeFromIndex(t),t.setData(e),s&&this.Es.addNodeToIndex(t),"object"==typeof e&&e.children&&e.children instanceof Array&&(t.removeChildren(),e.children.length&&t.loadFromData(e.children)),this.Y(t),this.j}Ds(){const{autoEscape:t,buttonLeft:s,closedIcon:i,dataFilter:o,dragAndDrop:n,keyboardSupport:r,onCanMove:l,onCanMoveTo:a,onCreateLi:u,onDragMove:f,onDragStop:g,onGetStateFromStorage:_,onIsMoveHandle:p,onLoadFailed:v,onLoading:S,onSetStateFromStorage:N,openedIcon:y,openFolderDelay:w,rtl:b,saveState:j,showEmptyFolder:D,slide:F,tabIndex:I}=this.options,C=this.closeNode.bind(this),q=this.C.bind(this),L=this.q.bind(this),x=this.getNodeById.bind(this),k=this.getSelectedNode.bind(this),H=this.getTree.bind(this),A=this.Lt.bind(this),B=this.loadData.bind(this),O=this.Is.bind(this),P=this.Y.bind(this),Q=this.selectNode.bind(this),U=this.ut,$=this.u.bind(this),G=new T({getNodeById:x}),z=G.addToSelection.bind(G),V=G.getSelectedNodes.bind(G),Y=G.isNodeSelected.bind(G),R=G.removeFromSelection.bind(G),X=new e({dataFilter:o,loadData:B,onLoadFailed:v,onLoading:S,treeElement:U,triggerEvent:$}),J=new E({addToSelection:z,getNodeById:x,getSelectedNodes:V,getTree:H,onGetStateFromStorage:_,onSetStateFromStorage:N,openNode:O,refreshElements:P,removeFromSelection:R,saveState:j}),K=new M({refreshHitAreas:()=>{Z.refresh()},treeElement:U}),W=K.getScrollLeft.bind(K),Z=new h({autoEscape:t,getNodeElement:q,getNodeElementForNode:L,getScrollLeft:W,getTree:H,onCanMove:l,onCanMoveTo:a,onDragMove:f,onDragStop:g,onIsMoveHandle:p,openFolderDelay:w,openNode:O,refreshElements:P,slide:F,treeElement:U,triggerEvent:$}),tt=new d({closeNode:C,getSelectedNode:k,isFocusOnTree:A,keyboardSupport:r,openNode:O,selectNode:Q}),et=new c({autoEscape:t,buttonLeft:s,closedIcon:i,dragAndDrop:n,getTree:H,htmlElement:U,isNodeSelected:Y,onCreateLi:u,openedIcon:y,rtl:b,showEmptyFolder:D,tabIndex:I}),st=this.Ut.bind(this),it=this.qs.bind(this),ot=this.Ls.bind(this),nt=this.xs.bind(this),rt=this.ks.bind(this),ht=new m({element:U,getMouseDelay:()=>this.options.startDndDelay??0,getNode:st,onClickButton:this.toggle.bind(this),onClickTitle:this.Cs.bind(this),onMouseCapture:it,onMouseDrag:ot,onMouseStart:nt,onMouseStop:rt,triggerEvent:$,useContextMenu:this.options.useContextMenu});this.ds=X,this.us=Z,this.gs=tt,this._s=ht,this.ps=et,this.vs=J,this.Ss=K,this.Ns=G}Hs(t){const e=this.Ut(t);return e?.tree===this.Es}bs(t){const e=this.ps.closedIconElement,s=this.Ss.getScrollLeft.bind(this.Ss),i=this.ps.openedIconElement,o=this.options.tabIndex,n=this.u.bind(this);return new N({closedIconElement:e,getScrollLeft:s,node:t,openedIconElement:i,tabIndex:o,treeElement:this.ut,triggerEvent:n})}As(t){const e=this.Ss.getScrollLeft.bind(this.Ss),s=this.options.tabIndex;return new v({getScrollLeft:e,node:t,tabIndex:s,treeElement:this.ut})}Bs(){const t=this.getSelectedNode();t&&this.removeFromSelection(t)}Os(t){const e=this.Ns.getSelectedNodesUnder(t);for(const t of e)this.Ns.removeFromSelection(t)}Ms(t,e){t&&(e?(this.Os(e),this.Ps(t,e)):this.Qs(t),this.isDragging()&&this.us.refresh()),this.u("tree.load_data",{parent_node:e,tree_data:t})}Ts(t,e,s){const i=t??this.Us(e);this.ds.loadFromUrl(i,e,s)}Cs(t,e){const s=()=>{this.options.saveState&&this.vs.saveState()};if(!t)return this.Bs(),void s();const i={mustSetFocus:!0,mustToggle:!0,...e??{}};if((()=>this.options.onCanSelectNode?this.options.selectable&&this.options.onCanSelectNode(t):this.options.selectable)()){if(this.Ns.isNodeSelected(t))i.mustToggle&&(this.Bs(),this.u("tree.select",{node:null,previous_node:t}));else{const e=this.getSelectedNode()||null;this.Bs(),this.addToSelection(t,i.mustSetFocus),this.u("tree.select",{deselected_node:e,node:t}),this.ys(t)}s()}}$s(){return!0===this.options.autoOpen?-1:"number"==typeof this.options.autoOpen?this.options.autoOpen:"string"==typeof this.options.autoOpen?parseInt(this.options.autoOpen,10):0}Us(t){const e=e=>{if(t?.id){const s={node:t.id};e.data=s}else{const t=this.Gs();if(t){const s={selected_node:t};e.data=s}}},s=this.options.dataUrl;return"function"==typeof s?s(t):"string"==typeof s?(t=>{const s={url:t};return e(s),s})(s):s&&"object"==typeof s?(e(s),s):null}js(){return this.options.rtl?"◀":"►"}Ut(t){const e=t.closest("li.jqtree_common");return e?jQuery(e).data("node"):null}C(t){const e=this.Ut(t);return e?this.q(e):null}q(t){return t.isFolder()?this.bs(t):this.As(t)}Gs(){return this.options.saveState?this.vs.getNodeIdToBeSelected():null}Fs(){if(this.options.data)this.Ms(this.options.data,null);else{this.Us(null)?this.Ts(null,null,null):this.Ms([],null)}}Qs(t){const e=()=>{this.fs||(this.fs=!0,this.u("tree.init"))};this.Es=new this.options.nodeClass(null,!0,this.options.nodeClass),this.Ns.clear(),this.Es.loadFromData(t);const s=this.zs();this.Y(null),s?this.Vs(e):e()}Lt(){const t=document.activeElement;return"SPAN"===t?.tagName&&this.Hs(t)}Ys(t){const e=this.getSelectedNode();return!!e&&(t===e||t.isParentOf(e))}Rs(t,e=!0,s){t.is_loading=!0,this.Ts(null,t,()=>{this.Is(t,e,s)})}Ps(t,e){e.loadFromData(t),e.load_on_demand=!1,e.is_loading=!1,this.Y(e)}qs(t){return!!this.options.dragAndDrop&&this.us.mouseCapture(t)}Ls(t){if(this.options.dragAndDrop){const e=this.us.mouseDrag(t);return this.Ss.checkScrolling(t),e}return!1}xs(t){return!!this.options.dragAndDrop&&this.us.mouseStart(t)}ks(t){return!!this.options.dragAndDrop&&(this.Ss.stopScrolling(),this.us.mouseStop(t))}Is(t,e=!0,s){const i=(e,s,i)=>{if(!t.children.length)return;this.bs(e).open(i,s,this.options.animationSpeed)};if(t.isFolder()||t.isEmptyFolder)if(t.load_on_demand)this.Rs(t,e,s);else{let o=t.parent;for(;o;)o.parent&&i(o,!1),o=o.parent;i(t,e,s),this.ws()}}ys(t){const e=t.parent;e?.parent&&!e.is_open&&this.openNode(e,!1)}Y(t){const e=this.Lt(),s=!!t&&this.Ys(t);this.ps.render(t),s&&this.Xs(e),this.u("tree.refresh")}ws(){this.options.saveState&&this.vs.saveState()}Xs(t){const e=this.getSelectedNode();if(e){this.q(e).select(t)}}zs(){const t=()=>{if(!1===this.options.autoOpen)return!1;const t=this.$s();let e=!1;return this.Es.iterate((s,i)=>s.load_on_demand?(e=!0,!1):!!s.hasChildren()&&(s.is_open=!0,i!==t)),e};let[e,s]=(()=>{if(this.options.saveState){const t=this.vs.getStateFromStorage();if(t){return[!0,this.vs.setInitialState(t)]}return[!1,!1]}return[!1,!1]})();return e||(s=t()),s}Vs(t){const e=()=>{const e=this.$s();let s=0;const i=t=>{s+=1,this.Is(t,!1,()=>{s-=1,o()})},o=()=>{this.Es.iterate((t,s)=>t.load_on_demand?(t.is_loading||i(t),!1):(this.Is(t,!1),s!==e)),0===s&&t()};o()};(()=>{if(this.options.saveState){const e=this.vs.getStateFromStorage();return!!e&&(this.vs.setInitialStateOnDemand(e,t),!0)}return!1})()||e()}u(t,e){const s=jQuery.Event(t,e);return this.j.trigger(s),!s.isDefaultPrevented()}}return C.register(x,"tree"),t.JqTreeWidget=x,t}({});
|
|
21
21
|
//# sourceMappingURL=tree.jquery.js.map
|