diff --git a/src/public/javascripts/services/bootstrap.js b/src/public/javascripts/desktop.js similarity index 63% rename from src/public/javascripts/services/bootstrap.js rename to src/public/javascripts/desktop.js index 3410a1dd1..24ef4c151 100644 --- a/src/public/javascripts/services/bootstrap.js +++ b/src/public/javascripts/desktop.js @@ -1,41 +1,41 @@ -import addLinkDialog from '../dialogs/add_link.js'; -import jumpToNoteDialog from '../dialogs/jump_to_note.js'; -import attributesDialog from '../dialogs/attributes.js'; -import noteRevisionsDialog from '../dialogs/note_revisions.js'; -import noteSourceDialog from '../dialogs/note_source.js'; -import recentChangesDialog from '../dialogs/recent_changes.js'; -import optionsDialog from '../dialogs/options.js'; -import sqlConsoleDialog from '../dialogs/sql_console.js'; -import markdownImportDialog from '../dialogs/markdown_import.js'; -import exportDialog from '../dialogs/export.js'; +import addLinkDialog from './dialogs/add_link.js'; +import jumpToNoteDialog from './dialogs/jump_to_note.js'; +import attributesDialog from './dialogs/attributes.js'; +import noteRevisionsDialog from './dialogs/note_revisions.js'; +import noteSourceDialog from './dialogs/note_source.js'; +import recentChangesDialog from './dialogs/recent_changes.js'; +import optionsDialog from './dialogs/options.js'; +import sqlConsoleDialog from './dialogs/sql_console.js'; +import markdownImportDialog from './dialogs/markdown_import.js'; +import exportDialog from './dialogs/export.js'; -import cloning from './cloning.js'; -import contextMenu from './tree_context_menu.js'; -import dragAndDropSetup from './drag_and_drop.js'; -import exportService from './export.js'; -import link from './link.js'; -import messagingService from './messaging.js'; -import noteDetailService from './note_detail.js'; -import noteType from './note_type.js'; -import protected_session from './protected_session.js'; -import searchNotesService from './search_notes.js'; -import FrontendScriptApi from './frontend_script_api.js'; -import ScriptContext from './script_context.js'; -import sync from './sync.js'; -import treeService from './tree.js'; -import treeChanges from './branches.js'; -import treeUtils from './tree_utils.js'; -import utils from './utils.js'; -import server from './server.js'; -import entrypoints from './entrypoints.js'; -import noteTooltipService from './note_tooltip.js'; -import bundle from "./bundle.js"; -import treeCache from "./tree_cache.js"; -import libraryLoader from "./library_loader.js"; -import hoistedNoteService from './hoisted_note.js'; -import noteTypeService from './note_type.js'; -import linkService from './link.js'; -import noteAutocompleteService from './note_autocomplete.js'; +import cloning from './services/cloning.js'; +import contextMenu from './services/tree_context_menu.js'; +import dragAndDropSetup from './services/drag_and_drop.js'; +import exportService from './services/export.js'; +import link from './services/link.js'; +import messagingService from './services/messaging.js'; +import noteDetailService from './services/note_detail.js'; +import noteType from './services/note_type.js'; +import protected_session from './services/protected_session.js'; +import searchNotesService from './services/search_notes.js'; +import FrontendScriptApi from './services/frontend_script_api.js'; +import ScriptContext from './services/script_context.js'; +import sync from './services/sync.js'; +import treeService from './services/tree.js'; +import treeChanges from './services/branches.js'; +import treeUtils from './services/tree_utils.js'; +import utils from './services/utils.js'; +import server from './services/server.js'; +import entrypoints from './services/entrypoints.js'; +import noteTooltipService from './services/note_tooltip.js'; +import bundle from "./services/bundle.js"; +import treeCache from "./services/tree_cache.js"; +import libraryLoader from "./services/library_loader.js"; +import hoistedNoteService from './services/hoisted_note.js'; +import noteTypeService from './services/note_type.js'; +import linkService from './services/link.js'; +import noteAutocompleteService from './services/note_autocomplete.js'; // required for CKEditor image upload plugin window.glob.getCurrentNode = treeService.getCurrentNode; diff --git a/src/public/javascripts/services/mobile.js b/src/public/javascripts/mobile.js similarity index 64% rename from src/public/javascripts/services/mobile.js rename to src/public/javascripts/mobile.js index c35cffcb7..4dc7d5eda 100644 --- a/src/public/javascripts/services/mobile.js +++ b/src/public/javascripts/mobile.js @@ -1,15 +1,13 @@ -import treeService from "./tree.js"; -import noteDetailService from "./note_detail.js"; -import dragAndDropSetup from "./drag_and_drop.js"; -import treeCache from "./tree_cache.js"; -import treeBuilder from "./tree_builder.js"; -import contextMenuWidget from "./context_menu.js"; -import confirmDialog from "../dialogs/confirm.js"; -import server from "./server.js"; -import promptDialog from "../dialogs/prompt.js"; -import ContextMenuItemsContainer from "./context_menu_items_container.js"; -import treeChangesService from "./branches.js"; -import utils from "./utils.js"; +import treeService from "./services/tree.js"; +import noteDetailService from "./services/note_detail.js"; +import dragAndDropSetup from "./services/drag_and_drop.js"; +import treeCache from "./services/tree_cache.js"; +import treeBuilder from "./services/tree_builder.js"; +import contextMenuWidget from "./services/context_menu.js"; +import ContextMenuItemsContainer from "./services/context_menu_items_container.js"; +import treeChangesService from "./services/branches.js"; +import utils from "./services/utils.js"; +import treeUtils from "./services/tree_utils.js"; const $leftPane = $("#left-pane"); const $tree = $("#tree"); @@ -56,24 +54,6 @@ async function showTree() { }, clones: { highlightActiveClones: true - }, - renderNode: function (event, data) { - const node = data.node; - const $nodeSpan = $(node.span); - - // check if span of node already rendered - if (!$nodeSpan.data('rendered')) { - const addNoteButton = $(''); - - addNoteButton.click(() => { - alert("Add new note"); - }); - - $nodeSpan.append(addNoteButton); - - // span rendered - $nodeSpan.data('rendered', true); - } } }); } @@ -86,13 +66,26 @@ $("#note-menu-button").click(async e => { const isNotRoot = note.noteId !== 'root'; const itemsContainer = new ContextMenuItemsContainer([ - {title: "Delete note", cmd: "delete", uiIcon: "trash"} + {title: "Insert note after", cmd: "insertNoteAfter", uiIcon: "plus"}, + {title: "Insert child note", cmd: "insertChildNote", uiIcon: "plus"}, + {title: "Delete this note", cmd: "delete", uiIcon: "trash"} ]); + itemsContainer.enableItem("insertNoteAfter", isNotRoot && parentNote.type !== 'search'); + itemsContainer.enableItem("insertChildNote", note.type !== 'search'); itemsContainer.enableItem("delete", isNotRoot && parentNote.type !== 'search'); - alert("A"); + contextMenuWidget.initContextMenu(e, itemsContainer, (event, cmd) => { - if (cmd === "delete") { + if (cmd === "insertNoteAfter") { + const parentNoteId = node.data.parentNoteId; + const isProtected = treeUtils.getParentProtectedStatus(node); + + treeService.createNote(node, parentNoteId, 'after', isProtected); + } + else if (cmd === "insertChildNote") { + treeService.createNote(node, node.data.noteId, 'into'); + } + else if (cmd === "delete") { treeChangesService.deleteNodes([node]); // move to the tree diff --git a/src/public/javascripts/services/note_detail.js b/src/public/javascripts/services/note_detail.js index 14d41e1b9..ec275e0f3 100644 --- a/src/public/javascripts/services/note_detail.js +++ b/src/public/javascripts/services/note_detail.js @@ -90,11 +90,11 @@ async function reload() { await loadNoteDetail(getCurrentNoteId()); } -async function switchToNote(noteId, mobile) { +async function switchToNote(noteId) { if (getCurrentNoteId() !== noteId) { await saveNoteIfChanged(); - await loadNoteDetail(noteId, mobile); + await loadNoteDetail(noteId); } } diff --git a/src/public/javascripts/services/note_detail_code.js b/src/public/javascripts/services/note_detail_code.js index 555be8432..1f638d1e4 100644 --- a/src/public/javascripts/services/note_detail_code.js +++ b/src/public/javascripts/services/note_detail_code.js @@ -3,6 +3,7 @@ import bundleService from "./bundle.js"; import infoService from "./info.js"; import server from "./server.js"; import noteDetailService from "./note_detail.js"; +import utils from "./utils.js"; let codeEditor = null; @@ -94,7 +95,7 @@ function onNoteChange(func) { codeEditor.on('change', func); } -$(document).bind('keydown', "ctrl+return", executeCurrentNote); +utils.bindShortcut("ctrl+return", executeCurrentNote); $executeScriptButton.click(executeCurrentNote); diff --git a/src/public/javascripts/services/tree.js b/src/public/javascripts/services/tree.js index 3a50bcf2d..bd593dcc3 100644 --- a/src/public/javascripts/services/tree.js +++ b/src/public/javascripts/services/tree.js @@ -681,6 +681,7 @@ export default { setPrefix, createNewTopLevelNote, createNote, + createNoteInto, getSelectedNodes, clearSelectedNodes, sortAlphabetically, diff --git a/src/public/javascripts/services/tree_context_menu.js b/src/public/javascripts/services/tree_context_menu.js index 57cffdb8b..54d60997c 100644 --- a/src/public/javascripts/services/tree_context_menu.js +++ b/src/public/javascripts/services/tree_context_menu.js @@ -80,7 +80,7 @@ function cut(nodes) { } const contextMenuItems = [ - {title: "Insert note here Ctrl+O", cmd: "insertNoteHere", uiIcon: "plus"}, + {title: "Insert note after Ctrl+O", cmd: "insertNoteAfter", uiIcon: "plus"}, {title: "Insert child note Ctrl+P", cmd: "insertChildNote", uiIcon: "plus"}, {title: "Delete Delete", cmd: "delete", uiIcon: "trash"}, {title: "----"}, @@ -114,7 +114,7 @@ async function getContextMenuItems(event) { const itemsContainer = new ContextMenuItemsContainer(contextMenuItems); // Modify menu entries depending on node status - itemsContainer.enableItem("insertNoteHere", isNotRoot && parentNote.type !== 'search'); + itemsContainer.enableItem("insertNoteAfter", isNotRoot && parentNote.type !== 'search'); itemsContainer.enableItem("insertChildNote", note.type !== 'search'); itemsContainer.enableItem("delete", isNotRoot && parentNote.type !== 'search'); itemsContainer.enableItem("copy", isNotRoot); @@ -146,7 +146,7 @@ function selectContextMenuItem(event, cmd) { // context menu is always triggered on current node const node = treeService.getCurrentNode(); - if (cmd === "insertNoteHere") { + if (cmd === "insertNoteAfter") { const parentNoteId = node.data.parentNoteId; const isProtected = treeUtils.getParentProtectedStatus(node); diff --git a/src/public/stylesheets/desktop.css b/src/public/stylesheets/desktop.css index 7da33afc1..6ac8cdcea 100644 --- a/src/public/stylesheets/desktop.css +++ b/src/public/stylesheets/desktop.css @@ -53,4 +53,12 @@ padding: 10px 0 10px 0; margin: 0 10px 0 16px; border: 1px solid #ccc; +} + +#context-menu-container { + padding: 3px 0 0; +} + +#context-menu-container .dropdown-item { + padding: 0 7px 0 10px; } \ No newline at end of file diff --git a/src/public/stylesheets/style.css b/src/public/stylesheets/style.css index ef417ce96..d7434a917 100644 --- a/src/public/stylesheets/style.css +++ b/src/public/stylesheets/style.css @@ -514,14 +514,6 @@ table.promoted-attributes-in-tooltip td, table.promoted-attributes-in-tooltip th padding: 20px; } -#context-menu-container { - padding: 3px 0 0; -} - -#context-menu-container .dropdown-item { - padding: 0 7px 0 10px; -} - /* if modal height overflows, then only modal body scrolls */ .modal-body { max-height: calc(100vh - 200px); diff --git a/src/views/desktop.ejs b/src/views/desktop.ejs index c6fe35670..44437e3dc 100644 --- a/src/views/desktop.ejs +++ b/src/views/desktop.ejs @@ -238,7 +238,7 @@ - + diff --git a/src/views/mobile.ejs b/src/views/mobile.ejs index bf438bc85..177e8c1e4 100644 --- a/src/views/mobile.ejs +++ b/src/views/mobile.ejs @@ -88,7 +88,7 @@ - +