| 
									
										
										
										
											2017-11-04 22:10:41 -04:00
										 |  |  | "use strict"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const treeChanges = (function() { | 
					
						
							| 
									
										
										
										
											2018-01-01 18:29:06 -05:00
										 |  |  |     async function moveBeforeNode(nodesToMove, beforeNode) { | 
					
						
							|  |  |  |         for (const nodeToMove of nodesToMove) { | 
					
						
							| 
									
										
										
										
											2018-01-01 22:28:19 -05:00
										 |  |  |             const resp = await server.put('notes/' + nodeToMove.data.note_tree_id + '/move-before/' + beforeNode.data.note_tree_id); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if (!resp.success) { | 
					
						
							|  |  |  |                 alert(resp.message); | 
					
						
							|  |  |  |                 return; | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2017-11-19 23:12:39 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-01 18:29:06 -05:00
										 |  |  |             changeNode(nodeToMove, node => node.moveTo(beforeNode, 'before')); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2017-11-04 22:10:41 -04:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-01 18:29:06 -05:00
										 |  |  |     async function moveAfterNode(nodesToMove, afterNode) { | 
					
						
							|  |  |  |         for (const nodeToMove of nodesToMove) { | 
					
						
							| 
									
										
										
										
											2018-01-01 22:28:19 -05:00
										 |  |  |             const resp = await server.put('notes/' + nodeToMove.data.note_tree_id + '/move-after/' + afterNode.data.note_tree_id); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if (!resp.success) { | 
					
						
							|  |  |  |                 alert(resp.message); | 
					
						
							|  |  |  |                 return; | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2017-11-19 23:12:39 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-01 18:29:06 -05:00
										 |  |  |             changeNode(nodeToMove, node => node.moveTo(afterNode, 'after')); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2017-11-04 22:10:41 -04:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-22 23:16:54 -05:00
										 |  |  |     // beware that first arg is noteId and second is noteTreeId!
 | 
					
						
							|  |  |  |     async function cloneNoteAfter(noteId, afterNoteTreeId) { | 
					
						
							| 
									
										
										
										
											2017-12-01 22:47:23 -05:00
										 |  |  |         const resp = await server.put('notes/' + noteId + '/clone-after/' + afterNoteTreeId); | 
					
						
							| 
									
										
										
										
											2017-11-22 23:16:54 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-23 20:49:24 -05:00
										 |  |  |         if (!resp.success) { | 
					
						
							|  |  |  |             alert(resp.message); | 
					
						
							|  |  |  |             return; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-22 23:16:54 -05:00
										 |  |  |         await noteTree.reload(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-01 18:29:06 -05:00
										 |  |  |     async function moveToNode(nodesToMove, toNode) { | 
					
						
							|  |  |  |         for (const nodeToMove of nodesToMove) { | 
					
						
							| 
									
										
										
										
											2018-01-01 22:28:19 -05:00
										 |  |  |             const resp = await server.put('notes/' + nodeToMove.data.note_tree_id + '/move-to/' + toNode.data.note_id); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if (!resp.success) { | 
					
						
							|  |  |  |                 alert(resp.message); | 
					
						
							|  |  |  |                 return; | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2017-11-04 22:10:41 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-01 18:29:06 -05:00
										 |  |  |             changeNode(nodeToMove, node => { | 
					
						
							|  |  |  |                 // first expand which will force lazy load and only then move the node
 | 
					
						
							|  |  |  |                 // if this is not expanded before moving, then lazy load won't happen because it already contains node
 | 
					
						
							| 
									
										
										
										
											2018-01-01 23:28:00 -05:00
										 |  |  |                 // this doesn't work if this isn't a folder yet, that's why we expand second time below
 | 
					
						
							| 
									
										
										
										
											2018-01-01 18:29:06 -05:00
										 |  |  |                 toNode.setExpanded(true); | 
					
						
							| 
									
										
										
										
											2017-11-04 22:10:41 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-01 18:29:06 -05:00
										 |  |  |                 node.moveTo(toNode); | 
					
						
							| 
									
										
										
										
											2017-12-27 22:44:27 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-01 18:29:06 -05:00
										 |  |  |                 toNode.folder = true; | 
					
						
							|  |  |  |                 toNode.renderTitle(); | 
					
						
							| 
									
										
										
										
											2018-01-01 23:28:00 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |                 // this expands the note in case it become the folder only after the move
 | 
					
						
							|  |  |  |                 toNode.setExpanded(true); | 
					
						
							| 
									
										
										
										
											2018-01-01 18:29:06 -05:00
										 |  |  |             }); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2017-11-19 23:12:39 -05:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-11-04 22:10:41 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-21 21:54:25 -05:00
										 |  |  |     async function cloneNoteTo(childNoteId, parentNoteId, prefix) { | 
					
						
							|  |  |  |         const resp = await server.put('notes/' + childNoteId + '/clone-to/' + parentNoteId, { | 
					
						
							|  |  |  |             prefix: prefix | 
					
						
							|  |  |  |         }); | 
					
						
							| 
									
										
										
										
											2017-11-22 23:16:54 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-23 20:49:24 -05:00
										 |  |  |         if (!resp.success) { | 
					
						
							|  |  |  |             alert(resp.message); | 
					
						
							|  |  |  |             return; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-22 23:16:54 -05:00
										 |  |  |         await noteTree.reload(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-19 23:12:39 -05:00
										 |  |  |     async function deleteNode(node) { | 
					
						
							| 
									
										
										
										
											2017-12-26 19:54:43 -05:00
										 |  |  |         if (!confirm('Are you sure you want to delete note "' + node.title + '" and all its sub-notes?')) { | 
					
						
							| 
									
										
										
										
											2017-11-19 23:12:39 -05:00
										 |  |  |             return; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2017-11-04 22:10:41 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-28 20:52:38 -05:00
										 |  |  |         await server.remove('notes/' + node.data.note_tree_id); | 
					
						
							| 
									
										
										
										
											2017-11-04 22:10:41 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-23 12:19:15 -05:00
										 |  |  |         if (!isTopLevelNode(node) && node.getParent().getChildren().length <= 1) { | 
					
						
							| 
									
										
										
										
											2017-11-19 23:12:39 -05:00
										 |  |  |             node.getParent().folder = false; | 
					
						
							|  |  |  |             node.getParent().renderTitle(); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2017-11-04 22:10:41 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-19 23:12:39 -05:00
										 |  |  |         let next = node.getNextSibling(); | 
					
						
							| 
									
										
										
										
											2017-12-14 22:53:25 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if (!next) { | 
					
						
							|  |  |  |             next = node.getPrevSibling(); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-23 12:19:15 -05:00
										 |  |  |         if (!next && !isTopLevelNode(node)) { | 
					
						
							| 
									
										
										
										
											2017-11-19 23:12:39 -05:00
										 |  |  |             next = node.getParent(); | 
					
						
							| 
									
										
										
										
											2017-11-04 22:10:41 -04:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2017-11-19 23:12:39 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |         node.remove(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-23 12:19:15 -05:00
										 |  |  |         if (next) { | 
					
						
							|  |  |  |             // activate next element after this one is deleted so we don't lose focus
 | 
					
						
							|  |  |  |             next.setActive(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             noteTree.setCurrentNotePathToHash(next); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2017-11-19 23:12:39 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-09 21:42:22 -05:00
										 |  |  |         noteTree.reload(); | 
					
						
							| 
									
										
										
										
											2017-12-26 19:54:43 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |         showMessage("Note has been deleted."); | 
					
						
							| 
									
										
										
										
											2017-11-04 22:10:41 -04:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-28 15:17:11 -05:00
										 |  |  |     async function moveNodeUpInHierarchy(node) { | 
					
						
							| 
									
										
										
										
											2017-12-23 12:19:15 -05:00
										 |  |  |         if (isTopLevelNode(node)) { | 
					
						
							| 
									
										
										
										
											2017-11-28 15:17:11 -05:00
										 |  |  |             return; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-01 22:28:19 -05:00
										 |  |  |         const resp = await server.put('notes/' + node.data.note_tree_id + '/move-after/' + node.getParent().data.note_tree_id); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (!resp.success) { | 
					
						
							|  |  |  |             alert(resp.message); | 
					
						
							|  |  |  |             return; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2017-11-28 15:17:11 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-23 12:19:15 -05:00
										 |  |  |         if (!isTopLevelNode(node) && node.getParent().getChildren().length <= 1) { | 
					
						
							| 
									
										
										
										
											2017-11-28 15:17:11 -05:00
										 |  |  |             node.getParent().folder = false; | 
					
						
							|  |  |  |             node.getParent().renderTitle(); | 
					
						
							| 
									
										
										
										
											2017-11-04 22:10:41 -04:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2017-11-28 15:17:11 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-17 16:28:13 -05:00
										 |  |  |         changeNode(node, node => node.moveTo(node.getParent(), 'after')); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function changeNode(node, func) { | 
					
						
							| 
									
										
										
										
											2017-12-23 12:19:15 -05:00
										 |  |  |         assertArguments(node.data.parent_note_id, node.data.note_id); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-19 21:40:48 -05:00
										 |  |  |         noteTree.removeParentChildRelation(node.data.parent_note_id, node.data.note_id); | 
					
						
							| 
									
										
										
										
											2017-12-17 16:28:13 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |         func(node); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-23 12:19:15 -05:00
										 |  |  |         node.data.parent_note_id = isTopLevelNode(node) ? 'root' : node.getParent().data.note_id; | 
					
						
							| 
									
										
										
										
											2017-12-17 16:28:13 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-19 21:40:48 -05:00
										 |  |  |         noteTree.setParentChildRelation(node.data.note_tree_id, node.data.parent_note_id, node.data.note_id); | 
					
						
							| 
									
										
										
										
											2017-11-28 15:17:11 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |         noteTree.setCurrentNotePathToHash(node); | 
					
						
							| 
									
										
										
										
											2017-11-04 22:10:41 -04:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return { | 
					
						
							|  |  |  |         moveBeforeNode, | 
					
						
							|  |  |  |         moveAfterNode, | 
					
						
							|  |  |  |         moveToNode, | 
					
						
							|  |  |  |         deleteNode, | 
					
						
							| 
									
										
										
										
											2017-11-28 15:17:11 -05:00
										 |  |  |         moveNodeUpInHierarchy, | 
					
						
							| 
									
										
										
										
											2017-11-22 23:16:54 -05:00
										 |  |  |         cloneNoteAfter, | 
					
						
							|  |  |  |         cloneNoteTo | 
					
						
							| 
									
										
										
										
											2017-11-04 22:10:41 -04:00
										 |  |  |     }; | 
					
						
							|  |  |  | })(); |