From d6d8b64bb93fafb89c27850c22dc5fa26d1576a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Magnus=20=C3=85hall?= Date: Tue, 16 Jun 2026 09:59:01 +0200 Subject: [PATCH] Fixed recursive open of nodes, bumped to v29 --- main.go | 2 +- static/js/sidebar.mjs | 28 ++++++++++++++++++++++------ 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/main.go b/main.go index 5d8bf68..213d1ed 100644 --- a/main.go +++ b/main.go @@ -23,7 +23,7 @@ import ( "text/template" ) -const VERSION = "v28" +const VERSION = "v29" const CONTEXT_USER = 1 const SYNC_PAGINATION = 200 diff --git a/static/js/sidebar.mjs b/static/js/sidebar.mjs index 129b9d1..9c2b8c8 100644 --- a/static/js/sidebar.mjs +++ b/static/js/sidebar.mjs @@ -197,9 +197,8 @@ export class N2Sidebar extends CustomHTMLElement { this.expandedNodes[UUID] = false return this.expandedNodes[UUID] }//}}} - setNodeExpanded(node, value) {//{{{ + async setNodeExpanded(node, value) {//{{{ let expanded = this.expandedNodes[node.UUID] - if (expanded === undefined) { this.expandedNodes[node.UUID] = false expanded = false @@ -446,14 +445,20 @@ export class N2Sidebar extends CustomHTMLElement { return currNode }//}}} async recursiveExpand(node, state) {//{{{ + if (!state) { + await this.setNodeExpanded(node, false) + return + } + if (state) await this.setNodeExpanded(node, true) + // An expanded node needs to have its children fetched. + if (!node.hasFetchedChildren()) + await node.fetchChildren() + for (const child of node.Children) await this.recursiveExpand(child, state) - - if (!state) - await this.setNodeExpanded(node, false) }//}}} async makeVisible(node, providedAncestors, dontExpand) {// {{{ const treenode = this.treeNodeComponents[node.UUID] @@ -577,7 +582,7 @@ export class N2TreeNode extends CustomHTMLElement { this.rendered = false this.dragNode = null - this.elExpandToggle.addEventListener('click', () => this.sidebar.setNodeExpanded(this.node, !this.sidebar.getNodeExpanded(this.node.UUID))) + this.elExpandToggle.addEventListener('click', event => this.expandNode(event)) this.elName.addEventListener('click', () => _mbus.dispatch('TREE_NODE_SELECTED', this.node)) _mbus.subscribe(`NODE_EXPAND_${node.UUID}`, _state => { @@ -592,6 +597,7 @@ export class N2TreeNode extends CustomHTMLElement { this.elName.addEventListener('dragenter', event => this.dragEnter(event)) this.elName.addEventListener('dragleave', event => this.dragLeave(event)) }// }}} + dragStart(e) {// {{{ if (this.node.isModified()) { alert('Save note before moving it.') @@ -654,6 +660,16 @@ export class N2TreeNode extends CustomHTMLElement { _app.dragIcon.icon('') this.classList.remove('drag-target') }// }}} + + async expandNode(event) {// {{{ + const expanded = _app.sidebar.getNodeExpanded(this.node.UUID) + + if (event.shiftKey) { + _app.sidebar.recursiveExpand(this.node, !expanded) + } else { + _app.sidebar.setNodeExpanded(this.node, !expanded) + } + }// }}} async fetchChildren(force_fetch) {//{{{ if (this.children_populated && !force_fetch) return