diff --git a/src/public/javascripts/bootstrap.js b/src/public/javascripts/bootstrap.js new file mode 100644 index 000000000..d858b0f12 --- /dev/null +++ b/src/public/javascripts/bootstrap.js @@ -0,0 +1,14 @@ +import searchTree from './search_tree.js'; + +const $toggleSearchButton = $("#toggle-search-button"); + +$toggleSearchButton.click(searchTree.toggleSearch); +bindShortcut('ctrl+s', searchTree.toggleSearch); + +function bindShortcut(keyboardShortcut, handler) { + $(document).bind('keydown', keyboardShortcut, e => { + handler(); + + e.preventDefault(); + }); +} \ No newline at end of file diff --git a/src/public/javascripts/search_tree.js b/src/public/javascripts/search_tree.js index 0b8a3ce93..d345c2609 100644 --- a/src/public/javascripts/search_tree.js +++ b/src/public/javascripts/search_tree.js @@ -1,83 +1,73 @@ "use strict"; -const searchTree = (function() { - const $tree = $("#tree"); - const $searchInput = $("input[name='search-text']"); - const $resetSearchButton = $("#reset-search-button"); - const $doSearchButton = $("#do-search-button"); - const $saveSearchButton = $("#save-search-button"); - const $searchBox = $("#search-box"); - const $toggleSearchButton = $("#toggle-search-button"); +const $tree = $("#tree"); +const $searchInput = $("input[name='search-text']"); +const $resetSearchButton = $("#reset-search-button"); +const $doSearchButton = $("#do-search-button"); +const $saveSearchButton = $("#save-search-button"); +const $searchBox = $("#search-box"); - $resetSearchButton.click(resetSearch); +function toggleSearch() { + if ($searchBox.is(":hidden")) { + $searchBox.show(); + $searchInput.focus(); + } + else { + resetSearch(); - function toggleSearch() { - if ($searchBox.is(":hidden")) { - $searchBox.show(); - $searchInput.focus(); - } - else { - resetSearch(); + $searchBox.hide(); + } +} - $searchBox.hide(); - } +function resetSearch() { + $searchInput.val(""); + + getTree().clearFilter(); +} + +function getTree() { + return $tree.fancytree('getTree'); +} + +async function doSearch() { + const searchText = $searchInput.val(); + + const noteIds = await server.get('search/' + encodeURIComponent(searchText)); + + for (const noteId of noteIds) { + await noteTree.expandToNote(noteId, {noAnimation: true, noEvents: true}); } - function resetSearch() { - $searchInput.val(""); + // Pass a string to perform case insensitive matching + getTree().filterBranches(node => noteIds.includes(node.data.noteId)); +} - getTree().clearFilter(); +async function saveSearch() { + const {noteId} = await server.post('search/' + encodeURIComponent($searchInput.val())); + + await noteTree.reload(); + + await noteTree.activateNode(noteId); +} + +$searchInput.keyup(e => { + const searchText = $searchInput.val(); + + if (e && e.which === $.ui.keyCode.ESCAPE || $.trim(searchText) === "") { + $resetSearchButton.click(); + return; } - function getTree() { - return $tree.fancytree('getTree'); + if (e && e.which === $.ui.keyCode.ENTER) { + doSearch(); } +}).focus(); - async function doSearch() { - const searchText = $searchInput.val(); +$doSearchButton.click(doSearch); +$resetSearchButton.click(resetSearch); - const noteIds = await server.get('search/' + encodeURIComponent(searchText)); +$saveSearchButton.click(saveSearch); - for (const noteId of noteIds) { - await noteTree.expandToNote(noteId, {noAnimation: true, noEvents: true}); - } - - // Pass a string to perform case insensitive matching - getTree().filterBranches(node => noteIds.includes(node.data.noteId)); - } - - $searchInput.keyup(e => { - const searchText = $searchInput.val(); - - if (e && e.which === $.ui.keyCode.ESCAPE || $.trim(searchText) === "") { - $resetSearchButton.click(); - return; - } - - if (e && e.which === $.ui.keyCode.ENTER) { - doSearch(); - } - }).focus(); - - $doSearchButton.click(doSearch); - - $saveSearchButton.click(async () => { - const {noteId} = await server.post('search/' + encodeURIComponent($searchInput.val())); - - await noteTree.reload(); - - await noteTree.activateNode(noteId); - }); - - $(document).bind('keydown', 'ctrl+s', e => { - toggleSearch(); - - e.preventDefault(); - }); - - $toggleSearchButton.click(toggleSearch); - - return { - toggleSearch - }; -})(); \ No newline at end of file +export default { + toggleSearch +}; \ No newline at end of file diff --git a/src/views/index.ejs b/src/views/index.ejs index ac3726777..e59d29930 100644 --- a/src/views/index.ejs +++ b/src/views/index.ejs @@ -519,6 +519,8 @@ + + @@ -530,7 +532,6 @@ -