diff --git a/TODO b/TODO index fd6550601..c235a2756 100644 --- a/TODO +++ b/TODO @@ -28,7 +28,7 @@ Encryption: Bugs: - deleting cloned nodes ends with 500 (probably only on folders) - Uncaught Error: cannot call methods on fancytree prior to initialization; attempted to call method 'getTree' -- recent changes sorts 1st october to the end +- FIXED: recent changes sorts 1st october to the end Others: - dates should be stored in UTC to work correctly with time zones diff --git a/src/templates/app.html b/src/templates/app.html index 568d13905..f5ab1a528 100644 --- a/src/templates/app.html +++ b/src/templates/app.html @@ -82,7 +82,15 @@ <div id="recentNotesDialog" title="Recent notes" style="display: none;"> <select id="recentNotesSelectBox" size="15" style="width: 100%"> - </select> + </select> + + <br/><br/> + + <p> + <button class="btn btn-sm" id="recentNotesJumpTo">Jump to</button> + + <button class="btn btn-sm" id="recentNotesAddLink">Add link</button> + </p> </div> <div id="insertLinkDialog" title="Insert link" style="display: none;"> diff --git a/static/js/add_link.js b/static/js/add_link.js index c06c77797..1b129561c 100644 --- a/static/js/add_link.js +++ b/static/js/add_link.js @@ -11,16 +11,7 @@ $(document).bind('keydown', 'alt+l', function() { }); function setDefaultLinkTitle(noteId) { - const note = getNodeByKey(noteId); - if (!note) { - return; - } - - let noteTitle = note.title; - - if (noteTitle.endsWith(" (clone)")) { - noteTitle = noteTitle.substr(0, noteTitle.length - 8); - } + const noteTitle = getNoteTitle(noteId); $("#linkTitle").val(noteTitle); } diff --git a/static/js/recent_notes.js b/static/js/recent_notes.js index 4e46db81a..01063ab9e 100644 --- a/static/js/recent_notes.js +++ b/static/js/recent_notes.js @@ -15,6 +15,8 @@ function addRecentNote(noteTreeId, noteContentId) { } $(document).bind('keydown', 'alt+q', function() { + $('#noteDetail').summernote('editor.saveRange'); + $("#recentNotesDialog").dialog({ modal: true, width: 500 @@ -47,23 +49,52 @@ $(document).bind('keydown', 'alt+q', function() { }); }); +function getSelectedNoteIdFromRecentNotes() { + return $("#recentNotesSelectBox option:selected").val(); +} + function setActiveNoteBasedOnRecentNotes() { - let noteId = $("#recentNotesSelectBox option:selected").val(); + const noteId = getSelectedNoteIdFromRecentNotes(); getNodeByKey(noteId).setActive(); $("#recentNotesDialog").dialog('close'); } +function addLinkBasedOnRecentNotes() { + const noteId = getSelectedNoteIdFromRecentNotes(); + + const linkTitle = getNoteTitle(noteId); + const noteDetail = $('#noteDetail'); + + $("#recentNotesDialog").dialog("close"); + + noteDetail.summernote('editor.restoreRange'); + + noteDetail.summernote('createLink', { + text: linkTitle, + url: 'app#' + noteId, + isNewWindow: true + }); +} + $('#recentNotesSelectBox').keydown(function(e) { - let key = e.which; + const key = e.which; if (key === 13)// the enter key code { setActiveNoteBasedOnRecentNotes(); } + else if (key === 76 /* l */) { + addLinkBasedOnRecentNotes(); + } + + e.preventDefault(); }); $('#recentNotesSelectBox').dblclick(function(e) { setActiveNoteBasedOnRecentNotes(); -}); \ No newline at end of file +}); + +$('#recentNotesJumpTo').click(setActiveNoteBasedOnRecentNotes); +$('#recentNotesAddLink').click(addLinkBasedOnRecentNotes); \ No newline at end of file diff --git a/static/js/tree_utils.js b/static/js/tree_utils.js index c9e444f43..a8af4d0c4 100644 --- a/static/js/tree_utils.js +++ b/static/js/tree_utils.js @@ -10,6 +10,21 @@ function getNodeByKey(noteId) { return globalTree.fancytree('getNodeByKey', noteId); } +function getNoteTitle(noteId) { + const note = getNodeByKey(noteId); + if (!note) { + return; + } + + let noteTitle = note.title; + + if (noteTitle.endsWith(" (clone)")) { + noteTitle = noteTitle.substr(0, noteTitle.length - 8); + } + + return noteTitle; +} + function getFullName(noteId) { let note = getNodeByKey(noteId);