| 
									
										
										
										
											2017-11-04 19:38:50 -04:00
										 |  |  | "use strict"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-04 17:54:27 -04:00
										 |  |  | const noteEditor = (function() { | 
					
						
							|  |  |  |     const noteTitleEl = $("#note-title"); | 
					
						
							|  |  |  |     const noteDetailEl = $('#note-detail'); | 
					
						
							| 
									
										
										
										
											2017-11-14 22:21:56 -05:00
										 |  |  |     const protectButton = $("#protect-button"); | 
					
						
							|  |  |  |     const unprotectButton = $("#unprotect-button"); | 
					
						
							| 
									
										
										
										
											2017-11-04 17:54:27 -04:00
										 |  |  |     const noteDetailWrapperEl = $("#note-detail-wrapper"); | 
					
						
							| 
									
										
										
										
											2017-12-02 10:37:12 -05:00
										 |  |  |     let editor = null; | 
					
						
							| 
									
										
										
										
											2017-11-04 17:54:27 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     let currentNote = null; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     let noteChangeDisabled = false; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     let isNoteChanged = false; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function getCurrentNote() { | 
					
						
							|  |  |  |         return currentNote; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function getCurrentNoteId() { | 
					
						
							|  |  |  |         return currentNote ? currentNote.detail.note_id : null; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function noteChanged() { | 
					
						
							| 
									
										
										
										
											2017-12-02 10:37:12 -05:00
										 |  |  |         console.log("CHANGED!!!"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-04 17:54:27 -04:00
										 |  |  |         if (noteChangeDisabled) { | 
					
						
							|  |  |  |             return; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         isNoteChanged = true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-05 10:06:49 -05:00
										 |  |  |     async function reload() { | 
					
						
							|  |  |  |         // no saving here
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         await loadNoteToEditor(getCurrentNoteId()); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     async function switchToNote(noteId) { | 
					
						
							|  |  |  |         if (getCurrentNoteId() !== noteId) { | 
					
						
							|  |  |  |             await saveNoteIfChanged(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             await loadNoteToEditor(noteId); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-04 17:54:27 -04:00
										 |  |  |     async function saveNoteIfChanged() { | 
					
						
							|  |  |  |         if (!isNoteChanged) { | 
					
						
							|  |  |  |             return; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         const note = noteEditor.getCurrentNote(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         updateNoteFromInputs(note); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         await saveNoteToServer(note); | 
					
						
							| 
									
										
										
										
											2017-11-14 22:50:56 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if (note.detail.is_protected) { | 
					
						
							|  |  |  |             protected_session.touchProtectedSession(); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2017-11-04 17:54:27 -04:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function updateNoteFromInputs(note) { | 
					
						
							| 
									
										
										
										
											2017-12-02 10:37:12 -05:00
										 |  |  |         note.detail.note_text = editor.getData(); | 
					
						
							| 
									
										
										
										
											2017-11-04 17:54:27 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |         const title = noteTitleEl.val(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         note.detail.note_title = title; | 
					
						
							| 
									
										
										
										
											2017-11-22 19:58:56 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-28 19:38:33 -05:00
										 |  |  |         noteTree.setNoteTitle(note.detail.note_id, title); | 
					
						
							| 
									
										
										
										
											2017-11-04 17:54:27 -04:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     async function saveNoteToServer(note) { | 
					
						
							| 
									
										
										
										
											2017-11-28 20:52:38 -05:00
										 |  |  |         await server.put('notes/' + note.detail.note_id, note); | 
					
						
							| 
									
										
										
										
											2017-11-04 17:54:27 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |         isNoteChanged = false; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-08 22:33:08 -05:00
										 |  |  |         showMessage("Saved!"); | 
					
						
							| 
									
										
										
										
											2017-11-04 17:54:27 -04:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-14 22:21:56 -05:00
										 |  |  |     function setNoteBackgroundIfProtected(note) { | 
					
						
							| 
									
										
										
										
											2017-11-14 21:54:12 -05:00
										 |  |  |         if (note.detail.is_protected) { | 
					
						
							| 
									
										
										
										
											2017-11-14 22:21:56 -05:00
										 |  |  |             $(".note-editable").addClass("protected"); | 
					
						
							|  |  |  |             protectButton.hide(); | 
					
						
							|  |  |  |             unprotectButton.show(); | 
					
						
							| 
									
										
										
										
											2017-11-04 17:54:27 -04:00
										 |  |  |         } | 
					
						
							|  |  |  |         else { | 
					
						
							| 
									
										
										
										
											2017-11-14 22:21:56 -05:00
										 |  |  |             $(".note-editable").removeClass("protected"); | 
					
						
							|  |  |  |             protectButton.show(); | 
					
						
							|  |  |  |             unprotectButton.hide(); | 
					
						
							| 
									
										
										
										
											2017-11-04 17:54:27 -04:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-18 17:05:50 -05:00
										 |  |  |         noteTree.setCurrentNoteTreeBasedOnProtectedStatus(); | 
					
						
							| 
									
										
										
										
											2017-11-04 17:54:27 -04:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-23 19:40:47 -05:00
										 |  |  |     let isNewNoteCreated = false; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function newNoteCreated() { | 
					
						
							|  |  |  |         isNewNoteCreated = true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-04 17:54:27 -04:00
										 |  |  |     async function loadNoteToEditor(noteId) { | 
					
						
							| 
									
										
										
										
											2017-11-28 20:52:38 -05:00
										 |  |  |         currentNote = await server.get('notes/' + noteId); | 
					
						
							| 
									
										
										
										
											2017-11-04 17:54:27 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-23 19:40:47 -05:00
										 |  |  |         if (isNewNoteCreated) { | 
					
						
							|  |  |  |             isNewNoteCreated = false; | 
					
						
							| 
									
										
										
										
											2017-11-04 17:54:27 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |             noteTitleEl.focus().select(); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-14 22:36:36 -05:00
										 |  |  |         await protected_session.ensureProtectedSession(currentNote.detail.is_protected, false); | 
					
						
							| 
									
										
										
										
											2017-11-04 17:54:27 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-14 22:50:56 -05:00
										 |  |  |         if (currentNote.detail.is_protected) { | 
					
						
							|  |  |  |             protected_session.touchProtectedSession(); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-15 00:10:11 -05:00
										 |  |  |         // this might be important if we focused on protected note when not in protected note and we got a dialog
 | 
					
						
							|  |  |  |         // to login, but we chose instead to come to another node - at that point the dialog is still visible and this will close it.
 | 
					
						
							|  |  |  |         protected_session.ensureDialogIsClosed(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-04 17:54:27 -04:00
										 |  |  |         noteDetailWrapperEl.show(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         noteChangeDisabled = true; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-29 21:13:12 -05:00
										 |  |  |         noteTitleEl.val(currentNote.detail.note_title); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-04 17:54:27 -04:00
										 |  |  |         // Clear contents and remove all stored history. This is to prevent undo from going across notes
 | 
					
						
							| 
									
										
										
										
											2017-12-02 10:37:12 -05:00
										 |  |  |         //noteDetailEl.summernote('reset');
 | 
					
						
							| 
									
										
										
										
											2017-11-04 17:54:27 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-02 10:37:12 -05:00
										 |  |  |         editor.setData(currentNote.detail.note_text); | 
					
						
							| 
									
										
										
										
											2017-11-04 17:54:27 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |         noteChangeDisabled = false; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-14 22:21:56 -05:00
										 |  |  |         setNoteBackgroundIfProtected(currentNote); | 
					
						
							| 
									
										
										
										
											2017-11-06 22:21:11 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |         showAppIfHidden(); | 
					
						
							| 
									
										
										
										
											2017-11-04 17:54:27 -04:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     async function loadNote(noteId) { | 
					
						
							| 
									
										
										
										
											2017-11-28 20:52:38 -05:00
										 |  |  |         return await server.get('notes/' + noteId); | 
					
						
							| 
									
										
										
										
											2017-11-04 17:54:27 -04:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $(document).ready(() => { | 
					
						
							| 
									
										
										
										
											2017-11-29 21:13:12 -05:00
										 |  |  |         noteTitleEl.on('input', () => { | 
					
						
							|  |  |  |             noteChanged(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             const title = noteTitleEl.val(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             noteTree.setNoteTitle(getCurrentNoteId(), title); | 
					
						
							|  |  |  |         }); | 
					
						
							| 
									
										
										
										
											2017-11-04 17:54:27 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-02 10:37:12 -05:00
										 |  |  |         BalloonEditor | 
					
						
							|  |  |  |             .create(document.querySelector('#note-detail'), { | 
					
						
							|  |  |  |             }) | 
					
						
							|  |  |  |             .then(edit => { | 
					
						
							|  |  |  |                 editor = edit; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 editor.document.on('change', () => noteChanged); | 
					
						
							|  |  |  |             }) | 
					
						
							|  |  |  |             .catch(error => { | 
					
						
							|  |  |  |                 console.error(error); | 
					
						
							|  |  |  |             }); | 
					
						
							| 
									
										
										
										
											2017-11-04 17:54:27 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |         // so that tab jumps from note title (which has tabindex 1)
 | 
					
						
							| 
									
										
										
										
											2017-12-02 10:37:12 -05:00
										 |  |  |         noteDetailEl.attr("tabindex", 2); | 
					
						
							| 
									
										
										
										
											2017-11-04 17:54:27 -04:00
										 |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     setInterval(saveNoteIfChanged, 5000); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return { | 
					
						
							| 
									
										
										
										
											2017-11-05 10:06:49 -05:00
										 |  |  |         reload, | 
					
						
							|  |  |  |         switchToNote, | 
					
						
							| 
									
										
										
										
											2017-11-04 17:54:27 -04:00
										 |  |  |         saveNoteIfChanged, | 
					
						
							|  |  |  |         updateNoteFromInputs, | 
					
						
							|  |  |  |         saveNoteToServer, | 
					
						
							| 
									
										
										
										
											2017-11-14 22:21:56 -05:00
										 |  |  |         setNoteBackgroundIfProtected, | 
					
						
							| 
									
										
										
										
											2017-11-04 17:54:27 -04:00
										 |  |  |         loadNote, | 
					
						
							|  |  |  |         getCurrentNote, | 
					
						
							|  |  |  |         getCurrentNoteId, | 
					
						
							| 
									
										
										
										
											2017-11-23 19:40:47 -05:00
										 |  |  |         newNoteCreated | 
					
						
							| 
									
										
										
										
											2017-11-04 17:54:27 -04:00
										 |  |  |     }; | 
					
						
							|  |  |  | })(); |