| 
									
										
										
										
											2017-11-04 19:38:50 -04:00
										 |  |  | "use strict"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-04 13:39:26 -04:00
										 |  |  | const recentNotes = (function() { | 
					
						
							| 
									
										
										
										
											2018-02-10 08:44:34 -05:00
										 |  |  |     const $dialog = $("#recent-notes-dialog"); | 
					
						
							|  |  |  |     const $searchInput = $('#recent-notes-search-input'); | 
					
						
							| 
									
										
										
										
											2018-02-05 23:50:25 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-03 10:06:53 -05:00
										 |  |  |     // list of recent note paths
 | 
					
						
							| 
									
										
										
										
											2017-11-04 13:39:26 -04:00
										 |  |  |     let list = []; | 
					
						
							| 
									
										
										
										
											2017-09-09 12:06:15 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-03 10:42:23 -05:00
										 |  |  |     async function reload() { | 
					
						
							|  |  |  |         const result = await server.get('recent-notes'); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-28 19:30:14 -05:00
										 |  |  |         list = result.map(r => r.notePath); | 
					
						
							| 
									
										
										
										
											2017-12-03 10:42:23 -05:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-11-04 23:46:50 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-03 10:06:53 -05:00
										 |  |  |     function addRecentNote(noteTreeId, notePath) { | 
					
						
							| 
									
										
										
										
											2017-11-28 20:52:38 -05:00
										 |  |  |         setTimeout(async () => { | 
					
						
							| 
									
										
										
										
											2017-11-04 13:21:41 -04:00
										 |  |  |             // we include the note into recent list only if the user stayed on the note at least 5 seconds
 | 
					
						
							| 
									
										
										
										
											2017-11-24 00:09:53 -05:00
										 |  |  |             if (notePath && notePath === noteTree.getCurrentNotePath()) { | 
					
						
							| 
									
										
										
										
											2017-12-03 10:06:53 -05:00
										 |  |  |                 const result = await server.put('recent-notes/' + noteTreeId + '/' + encodeURIComponent(notePath)); | 
					
						
							| 
									
										
										
										
											2017-11-28 20:52:38 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-28 19:30:14 -05:00
										 |  |  |                 list = result.map(r => r.notePath); | 
					
						
							| 
									
										
										
										
											2017-11-04 13:21:41 -04:00
										 |  |  |             } | 
					
						
							|  |  |  |         }, 1500); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-09-09 12:06:15 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-04 13:39:26 -04:00
										 |  |  |     function showDialog() { | 
					
						
							| 
									
										
										
										
											2018-02-10 08:44:34 -05:00
										 |  |  |         glob.activeDialog = $dialog; | 
					
						
							| 
									
										
										
										
											2017-09-09 12:06:15 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-10 08:44:34 -05:00
										 |  |  |         $dialog.dialog({ | 
					
						
							| 
									
										
										
										
											2017-11-04 13:21:41 -04:00
										 |  |  |             modal: true, | 
					
						
							| 
									
										
										
										
											2018-02-05 23:50:25 -05:00
										 |  |  |             width: 800, | 
					
						
							| 
									
										
										
										
											2018-02-12 21:20:30 -05:00
										 |  |  |             height: 100, | 
					
						
							|  |  |  |             position: { my: "center top+100", at: "top", of: window } | 
					
						
							| 
									
										
										
										
											2017-11-04 13:21:41 -04:00
										 |  |  |         }); | 
					
						
							| 
									
										
										
										
											2017-09-09 12:06:15 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-10 08:44:34 -05:00
										 |  |  |         $searchInput.val(''); | 
					
						
							| 
									
										
										
										
											2017-09-09 12:06:15 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-04 13:21:41 -04:00
										 |  |  |         // remove the current note
 | 
					
						
							| 
									
										
										
										
											2017-11-19 12:06:48 -05:00
										 |  |  |         const recNotes = list.filter(note => note !== noteTree.getCurrentNotePath()); | 
					
						
							| 
									
										
										
										
											2017-09-09 12:06:15 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-10 08:44:34 -05:00
										 |  |  |         $searchInput.autocomplete({ | 
					
						
							| 
									
										
										
										
											2018-02-05 23:50:25 -05:00
										 |  |  |             source: recNotes.map(notePath => { | 
					
						
							| 
									
										
										
										
											2018-02-11 15:33:10 -05:00
										 |  |  |                 let noteTitle; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 try { | 
					
						
							|  |  |  |                     noteTitle = noteTree.getNotePathTitle(notePath); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 catch (e) { | 
					
						
							|  |  |  |                     noteTitle = "[error - can't find note title]"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                     messaging.logError("Could not find title for notePath=" + notePath + ", stack=" + e.stack); | 
					
						
							|  |  |  |                 } | 
					
						
							| 
									
										
										
										
											2018-02-05 23:50:25 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |                 return { | 
					
						
							|  |  |  |                     label: noteTitle, | 
					
						
							|  |  |  |                     value: notePath | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             }), | 
					
						
							|  |  |  |             minLength: 0, | 
					
						
							|  |  |  |             autoFocus: true, | 
					
						
							|  |  |  |             select: function (event, ui) { | 
					
						
							|  |  |  |                 noteTree.activateNode(ui.item.value); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-10 08:44:34 -05:00
										 |  |  |                 $searchInput.autocomplete('destroy'); | 
					
						
							|  |  |  |                 $dialog.dialog('close'); | 
					
						
							| 
									
										
										
										
											2018-02-05 23:50:25 -05:00
										 |  |  |             }, | 
					
						
							|  |  |  |             focus: function (event, ui) { | 
					
						
							|  |  |  |                 event.preventDefault(); | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |             close: function (event, ui) { | 
					
						
							| 
									
										
										
										
											2018-02-11 11:53:43 -05:00
										 |  |  |                 if (event.keyCode === 27) { // escape closes dialog
 | 
					
						
							|  |  |  |                     $searchInput.autocomplete('destroy'); | 
					
						
							|  |  |  |                     $dialog.dialog('close'); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 else { | 
					
						
							|  |  |  |                     // keep autocomplete open
 | 
					
						
							|  |  |  |                     // we're kind of abusing autocomplete to work in a way which it's not designed for
 | 
					
						
							|  |  |  |                     $searchInput.autocomplete("search", ""); | 
					
						
							|  |  |  |                 } | 
					
						
							| 
									
										
										
										
											2018-02-05 23:50:25 -05:00
										 |  |  |             }, | 
					
						
							| 
									
										
										
										
											2018-02-10 08:44:34 -05:00
										 |  |  |             create: () => $searchInput.autocomplete("search", ""), | 
					
						
							| 
									
										
										
										
											2018-02-05 23:50:25 -05:00
										 |  |  |             classes: { | 
					
						
							|  |  |  |                 "ui-autocomplete": "recent-notes-autocomplete" | 
					
						
							| 
									
										
										
										
											2017-11-04 13:21:41 -04:00
										 |  |  |             } | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-10-06 22:46:30 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-03 10:42:23 -05:00
										 |  |  |     reload(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-18 23:41:13 -05:00
										 |  |  |     $(document).bind('keydown', 'ctrl+e', e => { | 
					
						
							|  |  |  |         showDialog(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         e.preventDefault(); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2017-11-04 13:39:26 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-04 13:21:41 -04:00
										 |  |  |     return { | 
					
						
							| 
									
										
										
										
											2017-11-04 13:39:26 -04:00
										 |  |  |         showDialog, | 
					
						
							| 
									
										
										
										
											2017-12-03 10:42:23 -05:00
										 |  |  |         addRecentNote, | 
					
						
							|  |  |  |         reload | 
					
						
							| 
									
										
										
										
											2017-11-04 13:21:41 -04:00
										 |  |  |     }; | 
					
						
							|  |  |  | })(); |