From bae85516523a1a8e0bb61e0f3252350012e5aa57 Mon Sep 17 00:00:00 2001 From: zadam Date: Mon, 24 May 2021 21:05:44 +0200 Subject: [PATCH] open the pane on the correct position --- src/public/app/layouts/desktop_layout.js | 94 +------------------ src/public/app/services/link.js | 2 +- src/public/app/services/tab_manager.js | 21 ++++- src/public/app/widgets/basic_widget.js | 9 ++ src/public/app/widgets/button_widget.js | 14 ++- .../app/widgets/containers/pane_container.js | 14 ++- 6 files changed, 55 insertions(+), 99 deletions(-) diff --git a/src/public/app/layouts/desktop_layout.js b/src/public/app/layouts/desktop_layout.js index 8707b9086..984617e2e 100644 --- a/src/public/app/layouts/desktop_layout.js +++ b/src/public/app/layouts/desktop_layout.js @@ -31,98 +31,6 @@ import ProtectedSessionStatusWidget from "../widgets/protected_session_status.js import PaneContainer from "../widgets/containers/pane_container.js"; import SidebarToggleWidget from "../widgets/sidebar_toggle.js"; -const RIGHT_PANE_CSS = ` -`; - export default class DesktopLayout { constructor(customWidgets) { this.customWidgets = customWidgets; @@ -186,7 +94,7 @@ export default class DesktopLayout { .icon("bx-window-open bx-rotate-90") .title("Create new pane") .titlePlacement("bottom") - .command("openNewPane") + .onClick(widget => widget.triggerCommand("openNewPane", { ntxId: widget.getNtxId() })) ) ) .child( diff --git a/src/public/app/services/link.js b/src/public/app/services/link.js index 71625f37c..91950aeee 100644 --- a/src/public/app/services/link.js +++ b/src/public/app/services/link.js @@ -81,7 +81,7 @@ function goToLink(e) { appContext.tabManager.openTabWithNoteWithHoisting(notePath); } else if (e.which === 1) { - const ntxId = $(e.target).closest("[data-tab-id]").attr("data-tab-id"); + const ntxId = $(e.target).closest("[data-ntx-id]").attr("data-ntx-id"); const noteContext = ntxId ? appContext.tabManager.getNoteContextById(ntxId) diff --git a/src/public/app/services/tab_manager.js b/src/public/app/services/tab_manager.js index 2c4e0c4b7..5d391fa1f 100644 --- a/src/public/app/services/tab_manager.js +++ b/src/public/app/services/tab_manager.js @@ -329,8 +329,25 @@ export default class TabManager extends Component { tabReorderEvent({ntxIdsInOrder}) { const order = {}; - for (const i in ntxIdsInOrder) { - order[ntxIdsInOrder[i]] = i; + let i = 0; + + for (const ntxId in ntxIdsInOrder) { + for (const noteContext of this.noteContexts[ntxId].getSubContexts()) { + order[noteContext.ntxId] = i++; + } + } + + this.children.sort((a, b) => order[a.ntxId] < order[b.ntxId] ? -1 : 1); + + this.tabsUpdate.scheduleUpdate(); + } + + noteContextReorderEvent({ntxIdsInOrder}) { + const order = {}; + let i = 0; + + for (const ntxId in ntxIdsInOrder) { + order[ntxId] = i++; } this.children.sort((a, b) => order[a.ntxId] < order[b.ntxId] ? -1 : 1); diff --git a/src/public/app/widgets/basic_widget.js b/src/public/app/widgets/basic_widget.js index 6d3f6462d..7a540e83e 100644 --- a/src/public/app/widgets/basic_widget.js +++ b/src/public/app/widgets/basic_widget.js @@ -123,6 +123,15 @@ class BasicWidget extends Component { } } + getNtxId() { + if (this.$widget) { + return this.$widget.closest("[data-ntx-id]").attr("data-ntx-id"); + } + else { + return null; + } + } + cleanup() {} } diff --git a/src/public/app/widgets/button_widget.js b/src/public/app/widgets/button_widget.js index 495acb8c2..52f06f894 100644 --- a/src/public/app/widgets/button_widget.js +++ b/src/public/app/widgets/button_widget.js @@ -21,7 +21,14 @@ export default class ButtonWidget extends BasicWidget { this.$widget = $(TPL); this.overflowing(); - this.$widget.on("click", () => this.triggerCommand(this.settings.command)); + if (this.settings.command) { + this.$widget.on("click", () => this.triggerCommand(this.settings.command)); + } + + if (this.settings.onClick) { + this.$widget.on("click", () => this.settings.onClick(this)); + } + this.$widget.attr("data-placement", this.settings.titlePlacement); this.$widget.tooltip({ @@ -64,4 +71,9 @@ export default class ButtonWidget extends BasicWidget { this.settings.command = command; return this; } + + onClick(handler) { + this.settings.onClick = handler; + return this; + } } diff --git a/src/public/app/widgets/containers/pane_container.js b/src/public/app/widgets/containers/pane_container.js index 162ace07a..4f6b46277 100644 --- a/src/public/app/widgets/containers/pane_container.js +++ b/src/public/app/widgets/containers/pane_container.js @@ -17,7 +17,7 @@ export default class PaneContainer extends FlexContainer { const $renderedWidget = widget.render(); - $renderedWidget.attr("data-tab-id", noteContext.ntxId); + $renderedWidget.attr("data-ntx-id", noteContext.ntxId); $renderedWidget.on('click', () => appContext.tabManager.activateNoteContext(noteContext.ntxId)); @@ -34,9 +34,19 @@ export default class PaneContainer extends FlexContainer { this.child(widget); } - async openNewPaneCommand() { + async openNewPaneCommand({ntxId}) { const noteContext = await appContext.tabManager.openEmptyTab(null, 'root', appContext.tabManager.getActiveContext().ntxId); + const ntxIds = appContext.tabManager.children.map(c => c.ntxId) + .filter(id => id !== noteContext.ntxId); + + ntxIds.splice(ntxIds.indexOf(ntxId) + 1, 0, noteContext.ntxId); + + this.triggerCommand("noteContextReorder", ntxIds); + + this.$widget.find(`[data-ntx-id="${noteContext.ntxId}"]`) + .insertAfter(this.$widget.find(`[data-ntx-id="${ntxId}"]`)) + await appContext.tabManager.activateNoteContext(noteContext.ntxId); await noteContext.setEmpty();