From afe4707c5a45f98990e95493b9bc7627229ed4c5 Mon Sep 17 00:00:00 2001 From: bdeshi Date: Sun, 19 Jul 2026 21:47:02 +0600 Subject: [PATCH] stop assuming leftRibbon is always there --- main.js | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/main.js b/main.js index 309c541..146d813 100644 --- a/main.js +++ b/main.js @@ -25,12 +25,21 @@ module.exports = class RibbonOrderLock extends Plugin { onunload() { this.observer?.disconnect(); - this.app.workspace.leftRibbon.onChange = this.originalOnChange; + const ribbon = this.getRibbon(); + if (ribbon) { + ribbon.onChange = this.originalOnChange; + } + } + + getRibbon() { + return this.app.workspace.leftRibbon ?? null; } observeRibbon() { - const ribbon = this.app.workspace.leftRibbon; + const ribbon = this.getRibbon(); + if (!ribbon) return; const containerEl = ribbon.ribbonItemsEl; + if (!containerEl) return; this.observer = new MutationObserver(() => this.debouncedEnforce()); this.observer.observe(containerEl, { childList: true }); @@ -39,7 +48,8 @@ module.exports = class RibbonOrderLock extends Plugin { // hook the ribbon's own onChange so drags and hide/show toggles update // our saved order automatically, same as Obsidian's native reorder does patchRibbon() { - const ribbon = this.app.workspace.leftRibbon; + const ribbon = this.getRibbon(); + if (!ribbon) return; const original = ribbon.onChange.bind(ribbon); this.originalOnChange = original; @@ -53,7 +63,8 @@ module.exports = class RibbonOrderLock extends Plugin { } enforceOrder() { - const ribbon = this.app.workspace.leftRibbon; + const ribbon = this.getRibbon(); + if (!ribbon) return; const order = this.settings.order; if (order.length === 0) {