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) {