From 0f0fec0c649f5435d4637d2663d5b5234b57ab6e Mon Sep 17 00:00:00 2001 From: Abe Jellinek Date: Wed, 5 Jun 2024 11:26:31 -0400 Subject: [PATCH] Persist pinned item pane section across restarts --- chrome/content/zotero/elements/itemDetails.js | 33 +++++++++++++++++-- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/chrome/content/zotero/elements/itemDetails.js b/chrome/content/zotero/elements/itemDetails.js index 039cf2b49e..cb1c4ea350 100644 --- a/chrome/content/zotero/elements/itemDetails.js +++ b/chrome/content/zotero/elements/itemDetails.js @@ -134,12 +134,13 @@ this._pendingPinnedPane = val; val = ''; } - this.setAttribute('pinnedPane', val); + this.setAttribute('pinnedPane', val || ''); if (val) { this._pendingPinnedPane = ''; this._pinnedPaneMinScrollHeight = this._getMinScrollHeightForPane(this.getEnabledPane(val)); } this.sidenav.updatePaneStatus(val); + this._savePinnedPane(); } get _minScrollHeight() { @@ -218,8 +219,9 @@ }); this._initIntersectionObserver(); - this._unregisterID = Zotero.Notifier.registerObserver( + this._notifierID = Zotero.Notifier.registerObserver( this, ['item', 'itempane', 'tab'], 'ItemDetails'); + this._prefsObserverID = Zotero.Prefs.registerObserver('pinnedPane', this._restorePinnedPane.bind(this)); this._disableScrollHandler = false; this._pinnedPaneMinScrollHeight = 0; @@ -239,7 +241,8 @@ this._paneHiddenOb.disconnect(); this._intersectionOb.disconnect(); - Zotero.Notifier.unregisterObserver(this._unregisterID); + Zotero.Notifier.unregisterObserver(this._notifierID); + Zotero.Prefs.unregisterObserver(this._prefsObserverID); } async render() { @@ -263,6 +266,7 @@ } this.renderCustomSections(); + this._restorePinnedPane(); let panes = this.getPanes(); for (let box of [this._header, ...panes]) { @@ -643,6 +647,29 @@ this.render(); } } + + _savePinnedPane() { + if (this.tabType !== 'library') { + return; + } + let pinnedPane = this.pinnedPane; + if (pinnedPane) { + Zotero.Prefs.set('pinnedPane', pinnedPane); + } + else { + Zotero.Prefs.clear('pinnedPane'); + } + } + + _restorePinnedPane() { + if (this.tabType !== 'library') { + return; + } + let pinnedPane = Zotero.Prefs.get('pinnedPane') || ''; + if (this.pinnedPane !== pinnedPane) { + this.pinnedPane = pinnedPane; + } + } } customElements.define("item-details", ItemDetails);