diff options
author | New Tobin Paradigm <email@mattatobin.com> | 2018-04-13 13:21:09 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-04-13 13:21:09 -0400 |
commit | 314016db7f55d24ad9d23197ca56462e78bc9ecc (patch) | |
tree | 1bdd6ad32474a6ff8eaae6fd1348c56b58ffeacc /application/palemoon/base/content/browser-devtools-theme.js | |
parent | 4f82d4067af9e65dbfd33f3a8b445affddc7ced4 (diff) | |
parent | 96e396f3455e7d955d6907b3e57260aaa0ac2369 (diff) | |
download | UXP-314016db7f55d24ad9d23197ca56462e78bc9ecc.tar UXP-314016db7f55d24ad9d23197ca56462e78bc9ecc.tar.gz UXP-314016db7f55d24ad9d23197ca56462e78bc9ecc.tar.lz UXP-314016db7f55d24ad9d23197ca56462e78bc9ecc.tar.xz UXP-314016db7f55d24ad9d23197ca56462e78bc9ecc.zip |
Merge pull request #142 from janekptacijarabaci/pm_devtools_3_developer-toolbar
Fix: Developer Toolbar (the command: "cookie"; themes)
Diffstat (limited to 'application/palemoon/base/content/browser-devtools-theme.js')
-rw-r--r-- | application/palemoon/base/content/browser-devtools-theme.js | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/application/palemoon/base/content/browser-devtools-theme.js b/application/palemoon/base/content/browser-devtools-theme.js new file mode 100644 index 000000000..7b21ddedc --- /dev/null +++ b/application/palemoon/base/content/browser-devtools-theme.js @@ -0,0 +1,91 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/** + * Listeners for the DevTools theme. + */ +var DevToolsTheme = { + _devtoolsThemePrefName: "devtools.theme", + styleSheet: null, + initialized: false, + + get isStyleSheetEnabled() { + return this.styleSheet && !this.styleSheet.sheet.disabled; + }, + + init: function () { + this.initialized = true; + Services.prefs.addObserver(this._devtoolsThemePrefName, this, false); + Services.obs.addObserver(this, "lightweight-theme-styling-update", false); + Services.obs.addObserver(this, "lightweight-theme-window-updated", false); + this._updateDevtoolsThemeAttribute(); + }, + + observe: function (subject, topic, data) { + if (topic == "lightweight-theme-styling-update") { + let newTheme = JSON.parse(data); + this._toggleStyleSheet(); + } + + if (topic == "nsPref:changed" && data == this._devtoolsThemePrefName) { + this._updateDevtoolsThemeAttribute(); + } + }, + + _inferBrightness: function() { + ToolbarIconColor.inferFromText(); + // Get an inverted full screen button if the dark theme is applied. + if (this.isStyleSheetEnabled && + document.documentElement.getAttribute("devtoolstheme") == "dark") { + document.documentElement.setAttribute("brighttitlebarforeground", "true"); + } else { + document.documentElement.removeAttribute("brighttitlebarforeground"); + } + }, + + _updateDevtoolsThemeAttribute: function() { + // Set an attribute on root element to make it possible + // to change colors based on the selected devtools theme. + let devtoolsTheme = Services.prefs.getCharPref(this._devtoolsThemePrefName); + if (devtoolsTheme != "dark") { + devtoolsTheme = "light"; + } + document.documentElement.setAttribute("devtoolstheme", devtoolsTheme); + this._inferBrightness(); + }, + + handleEvent: function(e) { + if (e.type === "load") { + this.styleSheet.removeEventListener("load", this); + this.refreshBrowserDisplay(); + } + }, + + refreshBrowserDisplay: function() { + // Don't touch things on the browser if gBrowserInit.onLoad hasn't + // yet fired. + if (this.initialized) { + gBrowser.tabContainer._positionPinnedTabs(); + this._inferBrightness(); + } + }, + + _toggleStyleSheet: function() { + let wasEnabled = this.isStyleSheetEnabled; + if (wasEnabled) { + this.styleSheet.sheet.disabled = true; + this.refreshBrowserDisplay(); + } + }, + + uninit: function () { + Services.prefs.removeObserver(this._devtoolsThemePrefName, this); + Services.obs.removeObserver(this, "lightweight-theme-styling-update", false); + Services.obs.removeObserver(this, "lightweight-theme-window-updated", false); + if (this.styleSheet) { + this.styleSheet.removeEventListener("load", this); + } + this.styleSheet = null; + } +}; |