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 @@
-
+