diff --git a/src/ZenCompactMode.mjs b/src/ZenCompactMode.mjs index c808cbb..6f53a7c 100644 --- a/src/ZenCompactMode.mjs +++ b/src/ZenCompactMode.mjs @@ -1,15 +1,25 @@ + +const lazyCompactMode = {}; + +XPCOMUtils.defineLazyPreferenceGetter( + lazyCompactMode, + "COMPACT_MODE_FLASH_DURATION", + "zen.view.compact.toolbar-flash-popup.duration", + 800 +); + var gZenCompactModeManager = { _flashSidebarTimeout: {}, _evenListeners: [], init() { Services.prefs.addObserver('zen.view.compact', this._updateEvent.bind(this)); - Services.prefs.addObserver('zen.view.compact.toolbar-flash-popup.duration', this._updatedSidebarFlashDuration.bind(this)); gZenUIManager.addPopupTrackingAttribute(this.sidebar); gZenUIManager.addPopupTrackingAttribute(document.getElementById('zen-appcontent-navbar-container')); this.addMouseActions(); + this.addContextMenu(); }, get prefefence() { @@ -18,6 +28,7 @@ var gZenCompactModeManager = { set preference(value) { Services.prefs.setBoolPref('zen.view.compact', value); + return value; }, get sidebar() { @@ -27,6 +38,63 @@ var gZenCompactModeManager = { return this._sidebar; }, + addContextMenu() { + const compactModeActive = Services.prefs.getBoolPref('zen.view.compact'); + const compactModeSidebar = Services.prefs.getBoolPref('zen.view.compact.hide-tabbar'); + const compactModeToolbar = Services.prefs.getBoolPref('zen.view.compact.hide-toolbar'); + const compactModeBoth = compactModeSidebar && compactModeToolbar; + const fragment = window.MozXULElement.parseXULToFragment(` + + + + + + + + + + `); + document.getElementById('viewToolbarsMenuSeparator').before(fragment); + }, + + contextMenuToggle() { + document.getElementById('zen-context-menu-compact-mode-toggle') + .setAttribute('checked', this.toggle()); + }, + + contextMenuHideSidebar() { + Services.prefs.setBoolPref('zen.view.compact.hide-tabbar', true); + Services.prefs.setBoolPref('zen.view.compact.hide-toolbar', false); + document.getElementById('zen-context-menu-compact-mode-hide-sidebar') + .setAttribute('checked', true); + document.getElementById('zen-context-menu-compact-mode-hide-toolbar') + .setAttribute('checked', false); + document.getElementById('zen-context-menu-compact-mode-hide-both') + .setAttribute('checked', false); + }, + + contextMenuHideToolbar() { + Services.prefs.setBoolPref('zen.view.compact.hide-toolbar', true); + Services.prefs.setBoolPref('zen.view.compact.hide-tabbar', false); + document.getElementById('zen-context-menu-compact-mode-hide-sidebar') + .setAttribute('checked', false); + document.getElementById('zen-context-menu-compact-mode-hide-toolbar') + .setAttribute('checked', true); + document.getElementById('zen-context-menu-compact-mode-hide-both') + .setAttribute('checked', false); + }, + + contextMenuHideBoth() { + Services.prefs.setBoolPref('zen.view.compact.hide-tabbar', true); + Services.prefs.setBoolPref('zen.view.compact.hide-toolbar', true); + document.getElementById('zen-context-menu-compact-mode-hide-sidebar') + .setAttribute('checked', false); + document.getElementById('zen-context-menu-compact-mode-hide-toolbar') + .setAttribute('checked', false); + document.getElementById('zen-context-menu-compact-mode-hide-both') + .setAttribute('checked', true); + }, + addEventListener(callback) { this._evenListeners.push(callback); }, @@ -37,24 +105,13 @@ var gZenCompactModeManager = { }, toggle() { - this.preference = !this.prefefence; - }, - - _updatedSidebarFlashDuration() { - this._flashSidebarDuration = Services.prefs.getIntPref('zen.view.compact.toolbar-flash-popup.duration'); + return this.preference = !this.prefefence; }, toggleSidebar() { this.sidebar.toggleAttribute('zen-user-show'); }, - get flashSidebarDuration() { - if (this._flashSidebarDuration) { - return this._flashSidebarDuration; - } - return Services.prefs.getIntPref('zen.view.compact.toolbar-flash-popup.duration'); - }, - get hideAfterHoverDuration() { if (this._hideAfterHoverDuration) { return this._hideAfterHoverDuration; @@ -74,7 +131,7 @@ var gZenCompactModeManager = { element = this.sidebar; } if (!duration) { - duration = this.flashSidebarDuration; + duration = lazyCompactMode.COMPACT_MODE_FLASH_DURATION; } if (!id) { id = this.sidebar.id;