From e14fbd8e5c069abf1717e674712229c67b80d461 Mon Sep 17 00:00:00 2001 From: mauro-balades Date: Sat, 21 Sep 2024 16:58:20 +0200 Subject: [PATCH] Refactor ZenCompactMode to add event listeners and flashSidebar enhancements --- src/ZenCompactMode.mjs | 25 ++++++++++++++++++------- src/ZenSidebarManager.mjs | 2 ++ src/ZenWorkspaces.mjs | 2 ++ 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/ZenCompactMode.mjs b/src/ZenCompactMode.mjs index 4ddda13..c808cbb 100644 --- a/src/ZenCompactMode.mjs +++ b/src/ZenCompactMode.mjs @@ -1,5 +1,6 @@ var gZenCompactModeManager = { _flashSidebarTimeout: {}, + _evenListeners: [], init() { Services.prefs.addObserver('zen.view.compact', this._updateEvent.bind(this)); @@ -26,7 +27,12 @@ var gZenCompactModeManager = { return this._sidebar; }, + addEventListener(callback) { + this._evenListeners.push(callback); + }, + _updateEvent() { + this._evenListeners.forEach((callback) => callback()); Services.prefs.setBoolPref('zen.view.sidebar-expanded.on-hover', false); }, @@ -63,7 +69,7 @@ var gZenCompactModeManager = { ]; }, - flashSidebar(element = null, duration = null, id = null) { + flashSidebar(element = null, duration = null, id = null, forFlash = true) { if (!element) { element = this.sidebar; } @@ -74,18 +80,23 @@ var gZenCompactModeManager = { id = this.sidebar.id; } let tabPanels = document.getElementById('tabbrowser-tabpanels'); - if (element.matches(':hover') || tabPanels.matches("[zen-split-view='true']")) { + if (element.matches(':hover') || (forFlash && tabPanels.matches("[zen-split-view='true']"))) { return; } if (this._flashSidebarTimeout[id]) { clearTimeout(this._flashSidebarTimeout[id]); - } else { + } else if (forFlash) { window.requestAnimationFrame(() => element.setAttribute('flash-popup', '')); + } else { + window.requestAnimationFrame(() => element.setAttribute('zen-has-hover', 'true')); } this._flashSidebarTimeout[id] = setTimeout(() => { window.requestAnimationFrame(() => { - element.removeAttribute('flash-popup'); - element.removeAttribute('zen-has-hover'); + if (forFlash) { + element.removeAttribute('flash-popup'); + } else { + element.removeAttribute('zen-has-hover'); + } this._flashSidebarTimeout[id] = null; }); }, duration); @@ -95,12 +106,12 @@ var gZenCompactModeManager = { for (let i = 0; i < this.hoverableElements.length; i++) { this.hoverableElements[i].addEventListener('mouseenter', (event) => { let target = this.hoverableElements[i]; - target.setAttribute('zen-has-hover', 'true', target.id); + target.setAttribute('zen-has-hover', 'true'); }); this.hoverableElements[i].addEventListener('mouseleave', (event) => { let target = this.hoverableElements[i]; - this.flashSidebar(target, this.hideAfterHoverDuration, target.id); + this.flashSidebar(target, this.hideAfterHoverDuration, target.id, false); }); } }, diff --git a/src/ZenSidebarManager.mjs b/src/ZenSidebarManager.mjs index fbb2320..ea81268 100644 --- a/src/ZenSidebarManager.mjs +++ b/src/ZenSidebarManager.mjs @@ -133,6 +133,7 @@ var gZenBrowserManagerSidebar = { } const button = document.getElementById('zen-sidepanel-button'); + if (!button) return; if (Services.prefs.getBoolPref('zen.sidebar.enabled')) { button.removeAttribute('hidden'); } else { @@ -187,6 +188,7 @@ var gZenBrowserManagerSidebar = { _updateSidebarButton() { let button = document.getElementById('zen-sidepanel-button'); + if (!button) return; if (!document.getElementById('zen-sidebar-web-panel').hasAttribute('hidden')) { button.setAttribute('open', 'true'); } else { diff --git a/src/ZenWorkspaces.mjs b/src/ZenWorkspaces.mjs index 7281e9d..e2f23ce 100644 --- a/src/ZenWorkspaces.mjs +++ b/src/ZenWorkspaces.mjs @@ -515,6 +515,8 @@ var ZenWorkspaces = { icon?.removeAttribute('selected'); await this.createAndSaveWorkspace(workspaceName, false, icon?.label); document.getElementById('PanelUI-zen-workspaces').hidePopup(true); + await this._updateWorkspacesButton(); + await this._propagateWorkspaceData(); }, async saveWorkspaceFromEdit() {