From bb8d76ba6810d22fd5ca94a7768acb371540cfad Mon Sep 17 00:00:00 2001 From: aminomancer <33384265+aminomancer@users.noreply.github.com> Date: Wed, 9 Feb 2022 01:34:36 -0800 Subject: [PATCH] 3.1.4: new script and script updates. (JS) add new script: tabLoadingSpinner. the loading spinner icon functionality has been adjusted so it now requires this script. make sure to download it if you want the spinner. update urlbarMods.uc.js to 1.6.1 to fix a minor issue. update tabMods.uc.js to 1.3.2 to fix another minor issue. (CSS) minor changes related to the above JS changes. see the commit notes for more details. thanks again to my sponsor KleinByte! --- JS/tabLoadingSpinner.uc.js | 38 ++++++ JS/urlbarMods.uc.js | 10 +- README.md | 9 +- prefs/recommended.js | 1 - resources/script-override/tabMods.uc.js | 4 +- uc-extensions.css | 6 +- uc-misc.css | 7 ++ uc-tabs-bar.css | 6 +- uc-tabs.css | 155 +++++++++++------------- uc-urlbar-results.css | 8 +- uc-urlbar.css | 1 + userChrome.css | 2 +- 12 files changed, 144 insertions(+), 103 deletions(-) create mode 100644 JS/tabLoadingSpinner.uc.js diff --git a/JS/tabLoadingSpinner.uc.js b/JS/tabLoadingSpinner.uc.js new file mode 100644 index 00000000..1e85eb5e --- /dev/null +++ b/JS/tabLoadingSpinner.uc.js @@ -0,0 +1,38 @@ +// ==UserScript== +// @name Tab Loading Spinner Animation +// @version 1.0 +// @author aminomancer +// @homepage https://github.com/aminomancer/uc.css.js +// @description Required for duskFox's custom loading spinner animation. This isn't strictly necessary, since the spinner is implemented in CSS, but duskFox restricts the use of the spinner to conditions laid out by this script. This is done in order to allow the loading throbber icon to smoothly fade in and out without harming performance. Without this, the spinner would potentially reduce framerate and, for at least one user, would cause problems during startup. So if you don't install this script, you'll end up with Firefox's vanilla loading throbber icon rather than duskFox's spinner icon. +// @license This Source Code Form is subject to the terms of the Creative Commons Attribution-NonCommercial-ShareAlike International License, v. 4.0. If a copy of the CC BY-NC-SA 4.0 was not distributed with this file, You can obtain one at http://creativecommons.org/licenses/by-nc-sa/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. +// ==/UserScript== + +(function () { + document.documentElement.setAttribute("uc-loading-spinner", "true"); + function init() { + gBrowser.tabContainer.addEventListener("TabAttrModified", (e) => { + let changed = e.detail.changed; + if (!(changed && (changed.includes("busy") || changed.includes("progress")))) return; + let tab = e.target; + let throbber = tab.querySelector(".tab-throbber"); + if (tab.getAttribute("busy") == "true") { + throbber.setAttribute("throbber-loaded", "true"); + } else { + setTimeout( + tab.querySelector(".tab-throbber").removeAttribute("throbber-loaded"), + 850 + ); + } + }); + } + if (gBrowserInit.delayedStartupFinished) init(); + else { + let delayedListener = (subject, topic) => { + if (topic == "browser-delayed-startup-finished" && subject == window) { + Services.obs.removeObserver(delayedListener, topic); + init(); + } + }; + Services.obs.addObserver(delayedListener, "browser-delayed-startup-finished"); + } +})(); diff --git a/JS/urlbarMods.uc.js b/JS/urlbarMods.uc.js index 985b0812..d78b401a 100644 --- a/JS/urlbarMods.uc.js +++ b/JS/urlbarMods.uc.js @@ -1,6 +1,6 @@ // ==UserScript== // @name Urlbar Mods -// @version 1.6.0 +// @version 1.6.1 // @author aminomancer // @homepage https://github.com/aminomancer/uc.css.js // @description Make some minor modifications to the urlbar. See the code comments below for more details. @@ -566,8 +566,8 @@ class UrlbarMods { `$1 if (result.payload.engine) item.setAttribute("engine", result.payload.engine);` ) .replace( - /(item\.setAttribute\(\"type\", \"tabtosearch\"\);)\n } else {/, - `$1 if (result.payload.engine) item.setAttribute("engine", result.payload.engine);\n } else if (result.providerName == "TokenAliasEngines") {\n item.setAttribute("type", "tokenaliasengine");\n if (result.payload.engine) item.setAttribute("engine", result.payload.engine);\n } else {` + /(item\.setAttribute\(\"type\", \"tabtosearch\"\);)\n } else/, + `$1 if (result.payload.engine) item.setAttribute("engine", result.payload.engine);\n } else if (result.providerName == "TokenAliasEngines") {\n item.setAttribute("type", "tokenaliasengine");\n if (result.payload.engine) item.setAttribute("engine", result.payload.engine);\n } else` ) .replace( /(item\.setAttribute\(\"type\"\, \"remotetab\"\);)/, @@ -580,8 +580,8 @@ class UrlbarMods { `TabToSearch.startQuery = async function uc_startQuery` + src3 .replace(/async startQuery/, ``) - .replace(/makeResult/, "makeTTSResult") - .replace(/makeOnboardingResult/, "makeTTSOnboardingResult") + .replace(/makeResult/g, "makeTTSResult") + .replace(/makeOnboardingResult/g, "makeTTSOnboardingResult") ); } let css = `.urlbarView-row[type="remotetab"] .urlbarView-type-icon{background:var(--device-icon,url("chrome://browser/skin/sync.svg")) center/contain no-repeat;}.urlbarView-row[type="remotetab"][clientType="phone"]{--device-icon:url("chrome://browser/skin/device-phone.svg");}.urlbarView-row[type="remotetab"][clientType="tablet"]{--device-icon:url("chrome://browser/skin/device-tablet.svg");}.urlbarView-row[type="remotetab"][clientType="desktop"]{--device-icon:url("chrome://browser/skin/device-desktop.svg");}.urlbarView-row[type="remotetab"][clientType="tv"]{--device-icon:url("chrome://browser/skin/device-tv.svg");}.urlbarView-row[type="remotetab"][clientType="vr"]{--device-icon:url("chrome://browser/skin/device-vr.svg");}`; diff --git a/README.md b/README.md index af7ce419..37d5d0b2 100644 --- a/README.md +++ b/README.md @@ -160,7 +160,6 @@ I also recommend setting the following prefs in `about:config`. There are two pr | userChrome.panels.allow-height-flex | Boolean | false | If true, allow panels to flex down in height. Will cause stutters on weaker hardware | | userChrome.panels.vibrant-fxa-banner | Boolean | true | Highlight the profile button in the app menu with a vibrant background | | userChrome.tabs.all-tabs-menu.reverse-order | Boolean | true | Display the all tabs menu in reverse order (newer tabs on top, like history) | -| userChrome.tabs.new-loading-spinner-animation | Boolean | true | Replace the tab loading throbber with a spinning animation | | userChrome.tabs.pinned-tabs.close-buttons.disabled | Boolean | true | This controls whether close buttons are shown on pinned tabs | | userChrome.tabs.rounded-outer-corners.disabled | Boolean | false | This controls whether tabs have rounded bottom corners
| | userChrome.tabs.tooltip.always-show-lock-icon | Boolean | false | There's an icon in the tab tooltip representing page security. It's expanded by [this script](/JS/restoreTabSoundButton.uc.js) to show many security types. But by default, the icon is hidden on fully secure web pages. Setting this pref to true shows the icon on ALL pages | @@ -1058,6 +1057,14 @@ If you already use these hotkeys for something else, e.g., an extension, you can ✨ For some reason, Proton removes the checkmark shown on the selected sidebar in the sidebar switcher panel. (The one that pops up when you click the button at the top of the sidebar) This script simply restores the previous behavior of adding the [checked] attribute. On its own it won't do anything, since the CSS for adding checkmarks to the menu items has also been removed. You'll need [uc-sidebar.css](/uc-sidebar.css) and the radio icon from the [resources](/resources) folder for the actual styling, or you can just read it starting around [line 120](/uc-sidebar.css#L120) if you want to make your own styles. +#### [Tab Animation Workaround](/JS/tabAnimation.uc.js): + +✨ A tiny script to clean up transitions/animations on Firefox tabs' close buttons, favicons, etc. Required for duskFox. See the file description for more details. + +#### [Tab Loading Spinner Animation](/JS/tabLoadingSpinner.uc.js): + +✨ Required for duskFox's custom loading spinner animation. See the file description for more details. + #### [Tab Context Menu Navigation](/JS/tabContextMenuNavigation.uc.js): Add some new menuitems to the tab context menu for navigating tabs back/forward, reloading, or bookmarking them, without needing to open them.
💬 More details... diff --git a/prefs/recommended.js b/prefs/recommended.js index 33ff9e94..cf85fdba 100644 --- a/prefs/recommended.js +++ b/prefs/recommended.js @@ -125,7 +125,6 @@ user_pref("gfx.font_rendering.directwrite.use_gdi_table_loading", false); // these are just the ones I'm pretty certain 90% of users will want. // see the prefs list at https://github.com/aminomancer/uc.css.js -user_pref("userChrome.tabs.new-loading-spinner-animation", true); user_pref("userChrome.tabs.pinned-tabs.close-buttons.disabled", true); user_pref("userChrome.urlbar-results.hide-help-button", true); diff --git a/resources/script-override/tabMods.uc.js b/resources/script-override/tabMods.uc.js index 52907432..851139d8 100644 --- a/resources/script-override/tabMods.uc.js +++ b/resources/script-override/tabMods.uc.js @@ -1,6 +1,6 @@ // ==UserScript== // @name Tab Mods — tabbrowser-tab class definition mods -// @version 1.3.1 +// @version 1.3.2 // @author aminomancer // @homepage https://github.com/aminomancer/uc.css.js // @description Restore the tab sound button and other aspects of the tab that (imo) were better before Proton. @@ -26,7 +26,7 @@ - + diff --git a/uc-extensions.css b/uc-extensions.css index bc58c0e8..3c6e9d32 100644 --- a/uc-extensions.css +++ b/uc-extensions.css @@ -255,12 +255,8 @@ I was a beta tester and they never shut the beta off for some reason so this sti } .tabbrowser-tab[label$="Violentmonkey"] .tab-icon-image { - animation: none !important; - background-image: url(chrome://userchrome/content/devtools/command-console.svg) !important; - display: block !important; + content: url(chrome://userchrome/content/devtools/command-console.svg) !important; fill: currentColor !important; - padding-inline-end: 16px !important; - box-sizing: border-box !important; } /* stylus, for injecting inline CSS into content windows. diff --git a/uc-misc.css b/uc-misc.css index c094f08e..1f57497d 100644 --- a/uc-misc.css +++ b/uc-misc.css @@ -417,6 +417,7 @@ notification[value="keyword-uri-fixup"] { :is(.tab-icon-image, .toolbarbutton-icon) { padding-right: 16px !important; background: url(chrome://userchrome/content/notifications/persistent-storage.svg) center/contain !important; + box-sizing: border-box !important; } :is(#mainPopupSet, #browser, #navigator-toolbox) textbox { @@ -653,6 +654,12 @@ toolbar:not(#PersonalToolbar) .toolbarbutton-1:focus-visible > .toolbarbutton-ba } } +/* replace certain favicons */ +/* google */ +.tab-icon-image[src="data:image/x-icon;base64,AAABAAIAEBAAAAEAIABoBAAAJgAAACAgAAABACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///zD9/f2W/f392P39/fn9/f35/f391/39/ZT+/v4uAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7+Cf39/Zn///////////////////////////////////////////39/ZX///8IAAAAAAAAAAAAAAAA/v7+Cf39/cH/////+v35/7TZp/92ul3/WKs6/1iqOv9yuFn/rNWd//j79v///////f39v////wgAAAAAAAAAAP39/Zn/////7PXp/3G3WP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP+Or1j//vDo///////9/f2VAAAAAP///zD/////+vz5/3G3V/9TqDT/WKo6/6LQkf/U6cz/1urO/6rUm/+Zo0r/8IZB//adZ////v7///////7+/i79/f2Y/////4nWzf9Lqkj/Vqo4/9Xqzv///////////////////////ebY//SHRv/0hUL//NjD///////9/f2U/f392v////8sxPH/Ebzt/43RsP/////////////////////////////////4roL/9IVC//i1jf///////f391/39/fr/////Cr37/wW8+/+16/7/////////////////9IVC//SFQv/0hUL/9IVC//SFQv/3pnX///////39/fn9/f36/////wu++/8FvPv/tuz+//////////////////SFQv/0hUL/9IVC//SFQv/0hUL/96p7///////9/f35/f392/////81yfz/CrL5/2uk9v///////////////////////////////////////////////////////f392P39/Zn/////ks/7/zdS7P84Rur/0NT6///////////////////////9/f////////////////////////39/Zb+/v4y//////n5/v9WYu3/NUPq/ztJ6/+VnPT/z9L6/9HU+v+WnfT/Ul7t/+Hj/P////////////////////8wAAAAAP39/Z3/////6Or9/1hj7v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v9sdvD////////////9/f2YAAAAAAAAAAD///8K/f39w//////5+f7/paz2/11p7v88Suv/Okfq/1pm7v+iqfX/+fn+///////9/f3B/v7+CQAAAAAAAAAAAAAAAP///wr9/f2d///////////////////////////////////////////9/f2Z/v7+CQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/jL9/f2Z/f392/39/fr9/f36/f392v39/Zj///8wAAAAAAAAAAAAAAAAAAAAAPAPAADAAwAAgAEAAIABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIABAACAAQAAwAMAAPAPAAAoAAAAIAAAAEAAAAABACAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/g3+/v5X/f39mf39/cj9/f3q/f39+f39/fn9/f3q/f39yP39/Zn+/v5W////DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/iT9/f2c/f399f/////////////////////////////////////////////////////9/f31/f39mv7+/iMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/gn9/f2K/f39+////////////////////////////////////////////////////////////////////////////f39+v39/Yf///8IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/v4k/f390v////////////////////////////////////////////////////////////////////////////////////////////////39/dD///8iAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////MP39/er//////////////////////////+r05v+v16H/gsBs/2WxSf9Wqjj/Vqk3/2OwRv99vWX/pdKV/97u2P////////////////////////////39/ej+/v4vAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/iT9/f3q/////////////////////+v15/+Pxnv/VKk2/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/36+Z//d7tf///////////////////////39/ej///8iAAAAAAAAAAAAAAAAAAAAAAAAAAD///8K/f390//////////////////////E4bn/XKw+/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1apN/+x0pv///////////////////////39/dD///8IAAAAAAAAAAAAAAAAAAAAAP39/Yv/////////////////////sdij/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP9TqDT/YKU1/8qOPv/5wZ////////////////////////39/YcAAAAAAAAAAAAAAAD+/v4l/f39+////////////////8Lgt/9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP9utlT/n86N/7faqv+426v/pdKV/3u8ZP9UqDX/U6g0/3egN//jiUH/9IVC//SFQv/82MP//////////////////f39+v7+/iMAAAAAAAAAAP39/Z3////////////////q9Ob/W6w+/1OoNP9TqDT/U6g0/1OoNP9nskz/zOXC/////////////////////////////////+Dv2v+osWP/8YVC//SFQv/0hUL/9IVC//WQVP/++fb//////////////////f39mgAAAAD+/v4O/f399v///////////////4LHj/9TqDT/U6g0/1OoNP9TqDT/dblc//L58P/////////////////////////////////////////////8+v/3p3f/9IVC//SFQv/0hUL/9IVC//rIqf/////////////////9/f31////DP7+/ln////////////////f9v7/Cbz2/zOwhv9TqDT/U6g0/2KwRv/v9+z///////////////////////////////////////////////////////738//1kFT/9IVC//SFQv/0hUL/9plg///////////////////////+/v5W/f39nP///////////////4jf/f8FvPv/Bbz7/yG1s/9QqDz/vN2w//////////////////////////////////////////////////////////////////rHqP/0hUL/9IVC//SFQv/0hUL//vDn//////////////////39/Zn9/f3L////////////////R878/wW8+/8FvPv/Bbz7/y7C5P/7/fr//////////////////////////////////////////////////////////////////ere//SFQv/0hUL/9IVC//SFQv/718H//////////////////f39yP39/ez///////////////8cwvv/Bbz7/wW8+/8FvPv/WNL8///////////////////////////////////////0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//rIqv/////////////////9/f3q/f39+v///////////////we9+/8FvPv/Bbz7/wW8+/993P3///////////////////////////////////////SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/+cGf//////////////////39/fn9/f36////////////////B737/wW8+/8FvPv/Bbz7/33c/f//////////////////////////////////////9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/6xaX//////////////////f39+f39/e3///////////////8cwvv/Bbz7/wW8+/8FvPv/WdP8///////////////////////////////////////0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//vVv//////////////////9/f3q/f39y////////////////0bN/P8FvPv/Bbz7/wW8+/8hrvn/+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////39/cj9/f2c////////////////ht/9/wW8+/8FvPv/FZP1/zRJ6/+zuPf//////////////////////////////////////////////////////////////////////////////////////////////////////////////////f39mf7+/lr////////////////d9v7/B7n7/yB38f81Q+r/NUPq/0hV7P/u8P3////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v5X////D/39/ff///////////////9tkPT/NUPq/zVD6v81Q+r/NUPq/2Fs7//y8v7////////////////////////////////////////////09f7//////////////////////////////////////////////////f399f7+/g0AAAAA/f39n////////////////+Tm/P89Suv/NUPq/zVD6v81Q+r/NUPq/1Bc7f/IzPn/////////////////////////////////x8v5/0xY7P+MlPP////////////////////////////////////////////9/f2cAAAAAAAAAAD+/v4n/f39/P///////////////7W69/81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v9ZZe7/k5v0/6609/+vtff/lJv0/1pm7v81Q+r/NUPq/zVD6v+GjvL//v7//////////////////////////////f39+/7+/iQAAAAAAAAAAAAAAAD9/f2N/////////////////////6Cn9f81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v+BivL////////////////////////////9/f2KAAAAAAAAAAAAAAAAAAAAAP7+/gv9/f3V/////////////////////7W69/8+S+v/NUPq/zVD6v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v81Q+r/P0zr/7q/+P///////////////////////f390v7+/gkAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/ib9/f3r/////////////////////+Xn/P94gfH/NkTq/zVD6v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v81Q+r/NkTq/3Z/8f/l5/z///////////////////////39/er+/v4kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/jL9/f3r///////////////////////////k5vz/nqX1/2p08P9IVez/OEbq/zdF6v9GU+z/aHLv/5qh9f/i5Pz////////////////////////////9/f3q////MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/ib9/f3V/////////////////////////////////////////////////////////////////////////////////////////////////f390v7+/iQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wr9/f2N/f39/P///////////////////////////////////////////////////////////////////////////f39+/39/Yv+/v4JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/v4n/f39n/39/ff//////////////////////////////////////////////////////f399v39/Z3+/v4lAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7+Dv7+/lr9/f2c/f39y/39/e39/f36/f39+v39/ez9/f3L/f39nP7+/ln+/v4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/AA///AAD//AAAP/gAAB/wAAAP4AAAB8AAAAPAAAADgAAAAYAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABgAAAAcAAAAPAAAAD4AAAB/AAAA/4AAAf/AAAP/8AAP//wAP/"] { + content: url(chrome://userchrome/content/engines/google-color.svg) !important; +} + /* allow scrollbuttons to flow onto the menupopup border */ .menupopup-arrowscrollbox[overflowing="true"][orient="vertical"] { overflow: visible !important; diff --git a/uc-tabs-bar.css b/uc-tabs-bar.css index 46704fc4..aa443382 100644 --- a/uc-tabs-bar.css +++ b/uc-tabs-bar.css @@ -145,11 +145,13 @@ this sheet controls their appearance as well. */ margin: 0 !important; } -#tabs-newtab-button { +#tabs-newtab-button, +#newPrivateTab-button { display: none !important; } -#new-tab-button { +#new-tab-button, +#privateTab-button { display: -moz-box !important; } diff --git a/uc-tabs.css b/uc-tabs.css index 89b4b26a..5f58f1b7 100644 --- a/uc-tabs.css +++ b/uc-tabs.css @@ -693,7 +693,7 @@ so in other words it won't show if audio is playing until you hover the general display: none !important; } -.tabbrowser-tab .tab-throbber:not([busy], [progress]) { +.tabbrowser-tab .tab-throbber:not([busy]) { opacity: 0 !important; pointer-events: none !important; transform: translateX(-15px) scale(0.5) !important; @@ -716,99 +716,86 @@ so in other words it won't show if audio is playing until you hover the general } /* this pref enables a special loading throbber animation that spins instead of bouncing horizontally */ -@supports -moz-bool-pref("userChrome.tabs.new-loading-spinner-animation") { - @keyframes uc-tab-throbber-spinner { - to { - rotate: 360deg; - } - } - .tab-throbber[fadein] { - display: block !important; - position: relative !important; +@keyframes uc-tab-throbber-spinner { + to { + rotate: 360deg; } +} + +:root[sessionrestored] .tab-throbber[fadein] { + display: block !important; + position: relative !important; +} + +/* I made different versions of this animation to circumvent an SVG issue. if + you update Firefox and the throbber animation stops working, uncomment one of + the 2 alternate rules below. one of the 3 should work. you can do the same + thing with the all-tabs-menu loading icons in the next ruleset below. */ +:root[sessionrestored] .tab-throbber[throbber-loaded]::before { + content: "" !important; + display: -moz-box !important; + -moz-context-properties: fill, fill-opacity !important; + width: 16px !important; + height: 16px !important; + animation: none !important; + background-position: center !important; + background-repeat: no-repeat !important; + + /* ANIMATION METHOD #1: + this version of the animation is implemented by an tag. + it's the most efficient method but it has broken once for a couple days due to an erroneous nightly patch. */ + + background-image: url(chrome://userchrome/content/loading-spinner.svg) !important; + + /* ---------------------------------- */ + + /* ANIMATION METHOD #2: + the animation is written in a