| 
									
										
										
										
											2017-11-04 19:38:50 -04:00
										 |  |  | "use strict"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-09 12:06:15 -04:00
										 |  |  | const dragAndDropSetup = { | 
					
						
							|  |  |  |     autoExpandMS: 600, | 
					
						
							|  |  |  |     draggable: { // modify default jQuery draggable options
 | 
					
						
							|  |  |  |         zIndex: 1000, | 
					
						
							|  |  |  |         scroll: false, | 
					
						
							|  |  |  |         containment: "parent", | 
					
						
							|  |  |  |         revert: "invalid" | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     preventRecursiveMoves: true, // Prevent dropping nodes on own descendants
 | 
					
						
							|  |  |  |     preventVoidMoves: true, // Prevent dropping nodes 'before self', etc.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-09 18:53:11 -04:00
										 |  |  |     dragStart: (node, data) => { | 
					
						
							| 
									
										
										
										
											2017-09-09 12:06:15 -04:00
										 |  |  |         // This function MUST be defined to enable dragging for the tree.
 | 
					
						
							|  |  |  |         // Return false to cancel dragging of node.
 | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     }, | 
					
						
							| 
									
										
										
										
											2017-10-09 18:53:11 -04:00
										 |  |  |     dragEnter: (node, data) => { | 
					
						
							| 
									
										
										
										
											2017-09-09 12:06:15 -04:00
										 |  |  |         /* data.otherNode may be null for non-fancytree droppables. | 
					
						
							|  |  |  |         * Return false to disallow dropping on node. In this case | 
					
						
							|  |  |  |         * dragOver and dragLeave are not called. | 
					
						
							|  |  |  |         * Return 'over', 'before, or 'after' to force a hitMode. | 
					
						
							|  |  |  |         * Return ['before', 'after'] to restrict available hitModes. | 
					
						
							|  |  |  |         * Any other return value will calc the hitMode from the cursor position. | 
					
						
							|  |  |  |         */ | 
					
						
							|  |  |  |         // Prevent dropping a parent below another parent (only sort
 | 
					
						
							|  |  |  |         // nodes under the same parent):
 | 
					
						
							|  |  |  |         //    if(node.parent !== data.otherNode.parent){
 | 
					
						
							|  |  |  |         //      return false;
 | 
					
						
							|  |  |  |         //    }
 | 
					
						
							|  |  |  |         // Don't allow dropping *over* a node (would create a child). Just
 | 
					
						
							|  |  |  |         // allow changing the order:
 | 
					
						
							|  |  |  |         //    return ["before", "after"];
 | 
					
						
							|  |  |  |         // Accept everything:
 | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     }, | 
					
						
							| 
									
										
										
										
											2017-10-09 18:53:11 -04:00
										 |  |  |     dragExpand: (node, data) => { | 
					
						
							| 
									
										
										
										
											2017-09-09 12:06:15 -04:00
										 |  |  |         // return false to prevent auto-expanding data.node on hover
 | 
					
						
							|  |  |  |     }, | 
					
						
							| 
									
										
										
										
											2017-10-09 18:53:11 -04:00
										 |  |  |     dragOver: (node, data) => {}, | 
					
						
							|  |  |  |     dragLeave: (node, data) => {}, | 
					
						
							|  |  |  |     dragStop: (node, data) => {}, | 
					
						
							|  |  |  |     dragDrop: (node, data) => { | 
					
						
							| 
									
										
										
										
											2017-09-09 12:06:15 -04:00
										 |  |  |         // This function MUST be defined to enable dropping of items on the tree.
 | 
					
						
							|  |  |  |         // data.hitMode is 'before', 'after', or 'over'.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (data.hitMode === "before") { | 
					
						
							| 
									
										
										
										
											2017-11-04 22:10:41 -04:00
										 |  |  |             treeChanges.moveBeforeNode(data.otherNode, node); | 
					
						
							| 
									
										
										
										
											2017-09-09 12:06:15 -04:00
										 |  |  |         } | 
					
						
							|  |  |  |         else if (data.hitMode === "after") { | 
					
						
							| 
									
										
										
										
											2017-11-04 22:10:41 -04:00
										 |  |  |             treeChanges.moveAfterNode(data.otherNode, node); | 
					
						
							| 
									
										
										
										
											2017-09-09 12:06:15 -04:00
										 |  |  |         } | 
					
						
							|  |  |  |         else if (data.hitMode === "over") { | 
					
						
							| 
									
										
										
										
											2017-11-04 22:10:41 -04:00
										 |  |  |             treeChanges.moveToNode(data.otherNode, node); | 
					
						
							| 
									
										
										
										
											2017-09-09 12:06:15 -04:00
										 |  |  |         } | 
					
						
							|  |  |  |         else { | 
					
						
							|  |  |  |             throw new Exception("Unknown hitMode=" + data.hitMode); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | }; |