diff --git a/src/public/javascripts/services/search_notes.js b/src/public/javascripts/services/search_notes.js index 2145ea02e..a11cb29b8 100644 --- a/src/public/javascripts/services/search_notes.js +++ b/src/public/javascripts/services/search_notes.js @@ -142,6 +142,12 @@ async function refreshSearch() { toastService.showMessage("Saved search note refreshed."); } +function searchInSubtree(noteId) { + showSearch(); + + $searchInput.val(`@in=${noteId} @text*=*`); +} + function init() { const hashValue = document.location.hash ? document.location.hash.substr(1) : ""; // strip initial # @@ -178,5 +184,6 @@ export default { refreshSearch, doSearch, init, + searchInSubtree, getHelpText: () => helpText }; \ No newline at end of file diff --git a/src/public/javascripts/services/tree_context_menu.js b/src/public/javascripts/services/tree_context_menu.js index 6cb5fc320..50cf6b3d1 100644 --- a/src/public/javascripts/services/tree_context_menu.js +++ b/src/public/javascripts/services/tree_context_menu.js @@ -9,6 +9,7 @@ import hoistedNoteService from './hoisted_note.js'; import noteDetailService from './note_detail.js'; import clipboard from './clipboard.js'; import protectedSessionHolder from "./protected_session_holder.js"; +import searchNotesService from "./search_notes.js"; class TreeContextMenu { constructor(node) { @@ -55,6 +56,8 @@ class TreeContextMenu { { title: "Delete Delete", cmd: "delete", uiIcon: "trash", enabled: isNotRoot && !isHoisted && parentNotSearch }, { title: "----" }, + { title: "Search in subtree Ctrl+Shift+F", cmd: "searchInSubtree", uiIcon: "search", + enabled: notSearch && noSelectedNotes }, isHoisted ? null : { title: "Hoist note Ctrl-H", cmd: "hoist", uiIcon: "empty", enabled: noSelectedNotes && notSearch }, !isHoisted || !isNotRoot ? null : { title: "Unhoist note Ctrl-H", cmd: "unhoist", uiIcon: "arrow-up" }, { title: "Edit branch prefix F2", cmd: "editBranchPrefix", uiIcon: "empty", @@ -177,6 +180,9 @@ class TreeContextMenu { treeService.duplicateNote(this.node.data.noteId, branch.parentNoteId); } + else if (cmd === "searchInSubtree") { + searchNotesService.searchInSubtree(this.node.data.noteId); + } else { ws.logError("Unknown command: " + cmd); } diff --git a/src/public/javascripts/services/tree_keybindings.js b/src/public/javascripts/services/tree_keybindings.js index eb5d4b4f7..e93279f2e 100644 --- a/src/public/javascripts/services/tree_keybindings.js +++ b/src/public/javascripts/services/tree_keybindings.js @@ -4,6 +4,7 @@ import treeService from "./tree.js"; import hoistedNoteService from "./hoisted_note.js"; import clipboard from "./clipboard.js"; import treeCache from "./tree_cache.js"; +import searchNoteService from "./search_notes.js"; const keyBindings = { "del": node => { @@ -167,6 +168,11 @@ const keyBindings = { "down": node => { node.navigate($.ui.keyCode.DOWN, true).then(treeService.clearSelectedNodes); + return false; + }, + "ctrl+shift+f": node => { + searchNoteService.searchInSubtree(node.data.noteId); + return false; } };