Merge branch 'dev' into new-color-picker
@@ -75,15 +75,13 @@ pref("app.update.checkInstallTime.days", 6);
|
||||
|
||||
// CUSTOM ZEN PREFS
|
||||
|
||||
pref('zen.welcome-screen.enabled', true, sticky);
|
||||
pref('zen.welcome-screen.seen', false);
|
||||
pref('zen.welcome-screen.seen', false, sticky);
|
||||
|
||||
pref('zen.tabs.vertical', true);
|
||||
pref('zen.tabs.vertical.right-side', false);
|
||||
pref('zen.tabs.rename-tabs', true);
|
||||
pref('zen.theme.accent-color', "#ffb787");
|
||||
pref('zen.theme.content-element-separation', 6); // In pixels
|
||||
pref('zen.theme.pill-button', false);
|
||||
pref('zen.theme.gradient', true);
|
||||
pref('zen.theme.gradient.show-custom-colors', false);
|
||||
pref('zen.theme.essentials-favicon-bg', true);
|
||||
|
@@ -36,6 +36,8 @@
|
||||
gZenVerticalTabsManager.init();
|
||||
gZenUIManager.init();
|
||||
|
||||
this._checkForWelcomePage();
|
||||
|
||||
document.l10n.setAttributes(document.getElementById('tabs-newtab-button'), 'tabs-toolbar-new-tab');
|
||||
} catch (e) {
|
||||
console.error('ZenThemeModifier: Error initializing browser layout', e);
|
||||
@@ -117,6 +119,13 @@
|
||||
gURLBar._initPasteAndGo();
|
||||
gURLBar._initStripOnShare();
|
||||
},
|
||||
|
||||
_checkForWelcomePage() {
|
||||
if (!Services.prefs.getBoolPref('zen.welcome-screen.seen', false)) {
|
||||
Services.prefs.setBoolPref('zen.welcome-screen.seen', true);
|
||||
Services.scriptloader.loadSubScript('chrome://browser/content/zen-components/ZenWelcome.mjs', window);
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
ZenStartup.init();
|
||||
|
@@ -246,7 +246,7 @@ var gZenUIManager = {
|
||||
const toast = this._createToastElement(messageId, options);
|
||||
this._toastContainer.removeAttribute('hidden');
|
||||
this._toastContainer.appendChild(toast);
|
||||
await this.motion.animate(toast, { opacity: [0, 1], scale: [0.8, 1] }, { type: 'spring', bounce: 0.4 });
|
||||
await this.motion.animate(toast, { opacity: [0, 1], scale: [0.8, 1] }, { type: 'spring', bounce: 0.5, duration: 0.5 });
|
||||
await new Promise((resolve) => setTimeout(resolve, 3000));
|
||||
await this.motion.animate(toast, { opacity: [1, 0], scale: [1, 0.9] }, { duration: 0.2, bounce: 0 });
|
||||
const toastHeight = toast.getBoundingClientRect().height;
|
||||
@@ -665,7 +665,7 @@ var gZenVerticalTabsManager = {
|
||||
target.appendChild(child);
|
||||
},
|
||||
|
||||
renameTabKeydown(event) {
|
||||
async renameTabKeydown(event) {
|
||||
if (event.key === 'Enter') {
|
||||
let label = this._tabEdited.querySelector('.tab-label-container-editing');
|
||||
let input = this._tabEdited.querySelector('#tab-label-input');
|
||||
@@ -681,6 +681,10 @@ var gZenVerticalTabsManager = {
|
||||
} else {
|
||||
gBrowser.setTabTitle(this._tabEdited);
|
||||
}
|
||||
if (this._tabEdited.getAttribute('zen-pin-id')) {
|
||||
// Update pin title in storage
|
||||
await gZenPinnedTabManager.updatePinTitle(this._tabEdited, this._tabEdited.label, !!newName);
|
||||
}
|
||||
|
||||
// Maybe add some confetti here?!?
|
||||
gZenUIManager.motion.animate(
|
||||
|
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js
|
||||
index 019b168c1aeae7e1c97a3ae58c99a48a27f54134..1f051e8a1e8a58e8bb721196deecfa36f4089dd6 100644
|
||||
index 019b168c1aeae7e1c97a3ae58c99a48a27f54134..5225d0539aa7dabf81a8fd60af3e839f203d296c 100644
|
||||
--- a/browser/base/content/browser.js
|
||||
+++ b/browser/base/content/browser.js
|
||||
@@ -32,6 +32,7 @@ ChromeUtils.defineESModuleGetters(this, {
|
||||
@@ -10,23 +10,7 @@ index 019b168c1aeae7e1c97a3ae58c99a48a27f54134..1f051e8a1e8a58e8bb721196deecfa36
|
||||
DevToolsSocketStatus:
|
||||
"resource://devtools/shared/security/DevToolsSocketStatus.sys.mjs",
|
||||
DownloadUtils: "resource://gre/modules/DownloadUtils.sys.mjs",
|
||||
@@ -632,6 +633,15 @@ XPCOMUtils.defineLazyPreferenceGetter(
|
||||
false
|
||||
);
|
||||
|
||||
+const ZEN_WELCOME_PATH = "zen-welcome";
|
||||
+const ZEN_WELCOME_ELEMENT_ATTR = "zen-dialog-welcome-element";
|
||||
+XPCOMUtils.defineLazyServiceGetter(
|
||||
+ this,
|
||||
+ "ProfileService",
|
||||
+ "@mozilla.org/toolkit/profile-service;1",
|
||||
+ "nsIToolkitProfileService"
|
||||
+);
|
||||
+
|
||||
customElements.setElementCreationCallback("screenshots-buttons", () => {
|
||||
Services.scriptloader.loadSubScript(
|
||||
"chrome://browser/content/screenshots/screenshots-buttons.js",
|
||||
@@ -3440,6 +3450,10 @@ var XULBrowserWindow = {
|
||||
@@ -3440,6 +3441,10 @@ var XULBrowserWindow = {
|
||||
AboutReaderParent.updateReaderButton(gBrowser.selectedBrowser);
|
||||
TranslationsParent.onLocationChange(gBrowser.selectedBrowser);
|
||||
|
||||
@@ -37,7 +21,7 @@ index 019b168c1aeae7e1c97a3ae58c99a48a27f54134..1f051e8a1e8a58e8bb721196deecfa36
|
||||
PictureInPicture.updateUrlbarToggle(gBrowser.selectedBrowser);
|
||||
|
||||
if (!gMultiProcessBrowser) {
|
||||
@@ -4435,7 +4449,7 @@ nsBrowserAccess.prototype = {
|
||||
@@ -4435,7 +4440,7 @@ nsBrowserAccess.prototype = {
|
||||
// Passing a null-URI to only create the content window,
|
||||
// and pass true for aSkipLoad to prevent loading of
|
||||
// about:blank
|
||||
@@ -46,7 +30,7 @@ index 019b168c1aeae7e1c97a3ae58c99a48a27f54134..1f051e8a1e8a58e8bb721196deecfa36
|
||||
null,
|
||||
aParams,
|
||||
aWhere,
|
||||
@@ -4443,6 +4457,10 @@ nsBrowserAccess.prototype = {
|
||||
@@ -4443,6 +4448,10 @@ nsBrowserAccess.prototype = {
|
||||
aName,
|
||||
true
|
||||
);
|
||||
@@ -57,16 +41,3 @@ index 019b168c1aeae7e1c97a3ae58c99a48a27f54134..1f051e8a1e8a58e8bb721196deecfa36
|
||||
},
|
||||
|
||||
openURIInFrame: function browser_openURIInFrame(
|
||||
@@ -7285,6 +7303,12 @@ var gDialogBox = {
|
||||
parentElement.showModal();
|
||||
this._didOpenHTMLDialog = true;
|
||||
|
||||
+ if (uri.includes(ZEN_WELCOME_PATH)) {
|
||||
+ parentElement.setAttribute(ZEN_WELCOME_ELEMENT_ATTR, true);
|
||||
+ } else if (parentElement.hasAttribute(ZEN_WELCOME_ELEMENT_ATTR)) {
|
||||
+ parentElement.removeAttribute(ZEN_WELCOME_ELEMENT_ATTR);
|
||||
+ }
|
||||
+
|
||||
// Disable menus and shortcuts.
|
||||
this._updateMenuAndCommandState(false /* to disable */);
|
||||
|
||||
|
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/base/content/navigator-toolbox.inc.xhtml b/browser/base/content/navigator-toolbox.inc.xhtml
|
||||
index a0a382643a2f74b6d789f3641ef300eed202d5e9..7a2be5fe6cdecb771ce3326008085ae402a465de 100644
|
||||
index a0a382643a2f74b6d789f3641ef300eed202d5e9..a962e155f1452362a2a35df89c8f56e1c0d9968c 100644
|
||||
--- a/browser/base/content/navigator-toolbox.inc.xhtml
|
||||
+++ b/browser/base/content/navigator-toolbox.inc.xhtml
|
||||
@@ -2,7 +2,7 @@
|
||||
@@ -11,16 +11,20 @@ index a0a382643a2f74b6d789f3641ef300eed202d5e9..7a2be5fe6cdecb771ce3326008085ae4
|
||||
<script src="chrome://browser/content/navigator-toolbox.js" />
|
||||
|
||||
<!-- Menu -->
|
||||
@@ -19,7 +19,7 @@
|
||||
@@ -17,9 +17,11 @@
|
||||
#include browser-menubar.inc
|
||||
</toolbaritem>
|
||||
<spacer flex="1" skipintoolbarset="true" style="order: 1000;"/>
|
||||
+#if 0
|
||||
#include titlebar-items.inc.xhtml
|
||||
+#endif
|
||||
</toolbar>
|
||||
-
|
||||
+<hbox id="titlebar">
|
||||
<toolbar id="TabsToolbar"
|
||||
class="browser-toolbar browser-titlebar"
|
||||
fullscreentoolbar="true"
|
||||
@@ -32,7 +32,7 @@
|
||||
@@ -32,7 +34,7 @@
|
||||
|
||||
<hbox class="titlebar-spacer" type="pre-tabs"/>
|
||||
|
||||
@@ -29,7 +33,7 @@ index a0a382643a2f74b6d789f3641ef300eed202d5e9..7a2be5fe6cdecb771ce3326008085ae4
|
||||
<toolbartabstop/>
|
||||
<hbox id="TabsToolbar-customization-target" flex="1">
|
||||
<toolbarbutton id="firefox-view-button"
|
||||
@@ -40,9 +40,9 @@
|
||||
@@ -40,9 +42,9 @@
|
||||
data-l10n-id="toolbar-button-firefox-view-2"
|
||||
role="button"
|
||||
aria-pressed="false"
|
||||
@@ -40,7 +44,7 @@ index a0a382643a2f74b6d789f3641ef300eed202d5e9..7a2be5fe6cdecb771ce3326008085ae4
|
||||
<tabs id="tabbrowser-tabs"
|
||||
is="tabbrowser-tabs"
|
||||
aria-multiselectable="true"
|
||||
@@ -50,6 +50,10 @@
|
||||
@@ -50,6 +52,10 @@
|
||||
tooltip="tabbrowser-tab-tooltip"
|
||||
orient="horizontal"
|
||||
stopwatchid="FX_TAB_CLICK_MS">
|
||||
@@ -51,7 +55,7 @@ index a0a382643a2f74b6d789f3641ef300eed202d5e9..7a2be5fe6cdecb771ce3326008085ae4
|
||||
<hbox class="tab-drop-indicator" hidden="true"/>
|
||||
# If the name (tabbrowser-arrowscrollbox) or structure of this changes
|
||||
# significantly, there is an optimization in
|
||||
@@ -57,7 +61,7 @@
|
||||
@@ -57,7 +63,7 @@
|
||||
# the current structure that we may want to revisit.
|
||||
<html:div id="vertical-pinned-tabs-container" tabindex="-1"></html:div>
|
||||
<html:div id="vertical-pinned-tabs-container-separator"></html:div>
|
||||
@@ -60,7 +64,7 @@ index a0a382643a2f74b6d789f3641ef300eed202d5e9..7a2be5fe6cdecb771ce3326008085ae4
|
||||
<tab is="tabbrowser-tab" class="tabbrowser-tab" selected="true" visuallyselected="" fadein=""/>
|
||||
<hbox id="tabbrowser-arrowscrollbox-periphery">
|
||||
<toolbartabstop/>
|
||||
@@ -75,6 +79,8 @@
|
||||
@@ -75,6 +81,8 @@
|
||||
tooltip="dynamic-shortcut-tooltip"
|
||||
data-l10n-id="tabs-toolbar-new-tab"/>
|
||||
<html:span id="tabbrowser-tab-a11y-desc" hidden="true"/>
|
||||
@@ -69,7 +73,7 @@ index a0a382643a2f74b6d789f3641ef300eed202d5e9..7a2be5fe6cdecb771ce3326008085ae4
|
||||
</tabs>
|
||||
|
||||
<toolbarbutton id="new-tab-button"
|
||||
@@ -100,11 +106,12 @@
|
||||
@@ -100,11 +108,12 @@
|
||||
#include private-browsing-indicator.inc.xhtml
|
||||
<toolbarbutton id="content-analysis-indicator"
|
||||
class="toolbarbutton-1 content-analysis-indicator-icon"/>
|
||||
@@ -85,7 +89,7 @@ index a0a382643a2f74b6d789f3641ef300eed202d5e9..7a2be5fe6cdecb771ce3326008085ae4
|
||||
<toolbar id="nav-bar"
|
||||
class="browser-toolbar chromeclass-location"
|
||||
data-l10n-id="navbar-accessible"
|
||||
@@ -490,10 +497,12 @@
|
||||
@@ -490,10 +499,12 @@
|
||||
consumeanchor="PanelUI-button"
|
||||
data-l10n-id="appmenu-menu-button-closed2"/>
|
||||
</toolbaritem>
|
||||
|
@@ -24,6 +24,8 @@
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-compact-mode.css" />
|
||||
<link rel="stylesheet" type="text/css" href="chrome://browser/skin/zen-icons/icons.css" />
|
||||
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-branding.css" />
|
||||
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-welcome.css" />
|
||||
</linkset>
|
||||
|
||||
# Scripts used all over the browser
|
||||
|
@@ -24,6 +24,7 @@
|
||||
content/browser/zen-components/ZenActorsManager.mjs (zen-components/ZenActorsManager.mjs)
|
||||
content/browser/zen-components/ZenRices.mjs (zen-components/ZenRices.mjs)
|
||||
content/browser/zen-components/ZenEmojies.mjs (zen-components/ZenEmojies.mjs)
|
||||
content/browser/zen-components/ZenWelcome.mjs (zen-components/ZenWelcome.mjs)
|
||||
|
||||
content/browser/zen-styles/zen-theme.css (content/zen-styles/zen-theme.css)
|
||||
content/browser/zen-styles/zen-buttons.css (content/zen-styles/zen-buttons.css)
|
||||
@@ -47,11 +48,12 @@
|
||||
content/browser/zen-styles/zen-gradient-generator.css (content/zen-styles/zen-gradient-generator.css)
|
||||
content/browser/zen-styles/zen-rices.css (content/zen-styles/zen-rices.css)
|
||||
content/browser/zen-styles/zen-branding.css (content/zen-styles/zen-branding.css)
|
||||
content/browser/zen-styles/zen-welcome.css (content/zen-styles/zen-welcome.css)
|
||||
|
||||
content/browser/zen-styles/zen-panels/bookmarks.css (content/zen-styles/zen-panels/bookmarks.css)
|
||||
content/browser/zen-styles/zen-panels/extensions.css (content/zen-styles/zen-panels/extensions.css)
|
||||
content/browser/zen-styles/zen-panels/print.css (content/zen-styles/zen-panels/print.css)
|
||||
content/browser/zen-styles/zen-panels/welcome.css (content/zen-styles/zen-panels/welcome.css)
|
||||
content/browser/zen-styles/zen-panels/dialog.css (content/zen-styles/zen-panels/dialog.css)
|
||||
|
||||
* content/browser/zen-styles/zen-compact-mode.css (content/zen-styles/zen-compact-mode.css)
|
||||
|
||||
@@ -62,6 +64,7 @@
|
||||
content/browser/zen-images/layouts/collapsed.png (content/zen-images/layouts/collapsed.png)
|
||||
content/browser/zen-images/layouts/multiple-toolbar.png (content/zen-images/layouts/multiple-toolbar.png)
|
||||
content/browser/zen-images/layouts/single-toolbar.png (content/zen-images/layouts/single-toolbar.png)
|
||||
content/browser/zen-images/grain-bg.png (content/zen-images/grain-bg.png)
|
||||
|
||||
# Actors
|
||||
content/browser/zen-components/actors/ZenThemeMarketplaceParent.sys.mjs (zen-components/actors/ZenThemeMarketplaceParent.sys.mjs)
|
||||
|
BIN
src/browser/base/content/zen-images/grain-bg.png
Normal file
After Width: | Height: | Size: 29 KiB |
@@ -31,9 +31,9 @@ xul|button:is(.expander-down) {
|
||||
border-radius: 6px !important;
|
||||
}
|
||||
|
||||
@media (-moz-bool-pref: 'zen.theme.pill-button') {
|
||||
:host(:is(.anonymous-content-host, notification-message)),
|
||||
:root {
|
||||
--zen-button-border-radius: 20px;
|
||||
.footer-button {
|
||||
transition: scale 0.2s;
|
||||
&:active {
|
||||
scale: 0.98;
|
||||
}
|
||||
}
|
||||
|
@@ -120,6 +120,20 @@
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
&::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background-image: url(chrome://browser/content/zen-images/grain-bg.png);
|
||||
pointer-events: none;
|
||||
z-index: 0;
|
||||
opacity: var(--zen-grainy-background-opacity, 0);
|
||||
mix-blend-mode: overlay;
|
||||
}
|
||||
}
|
||||
|
||||
#navigator-toolbox:hover,
|
||||
|
@@ -7,7 +7,7 @@ panel[type='arrow'][animate][animate='open']::part(content) {
|
||||
animation: zen-jello-animation 0.35s ease;
|
||||
|
||||
@media (-moz-platform: macos) {
|
||||
animation: zen-jello-animation-alt 0.35s ease;
|
||||
animation: zen-jello-animation-alt 0.2s ease-out;
|
||||
}
|
||||
}
|
||||
|
||||
|
11
src/browser/base/content/zen-styles/zen-panels/dialog.css
Normal file
@@ -0,0 +1,11 @@
|
||||
/*
|
||||
* 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/.
|
||||
*/
|
||||
/* Zen Welcome idalog override */
|
||||
@media (prefers-color-scheme: dark) {
|
||||
.dialogBox:not(.spotlightBox) {
|
||||
border: 1px solid var(--zen-colors-border);
|
||||
}
|
||||
}
|
@@ -1,33 +0,0 @@
|
||||
/*
|
||||
* 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/.
|
||||
*/
|
||||
/* Zen Welcome idalog override */
|
||||
@media (prefers-color-scheme: dark) {
|
||||
.dialogBox:not(.spotlightBox) {
|
||||
border: 1px solid var(--zen-colors-border);
|
||||
}
|
||||
}
|
||||
|
||||
#window-modal-dialog[zen-dialog-welcome-element='true'] .dialogBox:not(.spotlightBox) {
|
||||
margin: 0 !important;
|
||||
}
|
||||
|
||||
#window-modal-dialog[zen-dialog-welcome-element='true'],
|
||||
#window-modal-dialog[zen-dialog-welcome-element='true'] .dialogOverlay,
|
||||
#window-modal-dialog[zen-dialog-welcome-element='true'] .dialogFrame,
|
||||
#window-modal-dialog[zen-dialog-welcome-element='true'] .dialogBox {
|
||||
width: 100% !important;
|
||||
height: 100% !important;
|
||||
max-height: none !important;
|
||||
max-width: none !important;
|
||||
}
|
||||
|
||||
#window-modal-dialog[zen-dialog-welcome-element='true'] {
|
||||
--zen-welcome-dialog-space: 7px;
|
||||
margin: 0 auto !important;
|
||||
max-width: calc(100% - calc(var(--zen-welcome-dialog-space) * 2)) !important;
|
||||
max-height: calc(100% - calc(var(--zen-welcome-dialog-space) * 2)) !important;
|
||||
margin-top: var(--zen-welcome-dialog-space) !important;
|
||||
}
|
@@ -6,7 +6,7 @@
|
||||
@import url('chrome://browser/content/zen-styles/zen-panels/bookmarks.css');
|
||||
@import url('chrome://browser/content/zen-styles/zen-panels/extensions.css');
|
||||
@import url('chrome://browser/content/zen-styles/zen-panels/print.css');
|
||||
@import url('chrome://browser/content/zen-styles/zen-panels/welcome.css');
|
||||
@import url('chrome://browser/content/zen-styles/zen-panels/dialog.css');
|
||||
|
||||
:root {
|
||||
--panel-subview-body-padding: 2px 0;
|
||||
@@ -358,6 +358,8 @@ menuitem {
|
||||
right: calc(var(--zen-element-separation) * 2);
|
||||
z-index: 1000;
|
||||
gap: 1rem;
|
||||
display: flex;
|
||||
align-items: end;
|
||||
|
||||
& .zen-toast {
|
||||
padding: 0.9rem 0.8rem;
|
||||
@@ -366,6 +368,7 @@ menuitem {
|
||||
color: var(--button-primary-color);
|
||||
box-shadow: var(--zen-big-shadow);
|
||||
display: flex;
|
||||
font-weight: 600;
|
||||
gap: 5px;
|
||||
flex-direction: column;
|
||||
gap: 2px;
|
||||
|
@@ -69,3 +69,8 @@
|
||||
body > #confetti {
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
/* Bookmarks */
|
||||
#PersonalToolbar:not([collapsed='true']) {
|
||||
min-height: 30px;
|
||||
}
|
||||
|
@@ -428,7 +428,7 @@
|
||||
|
||||
:root[zen-single-toolbar='true'] & {
|
||||
& #urlbar:not([breakout-extend='true']) .urlbar-input-container {
|
||||
padding-left: 4px;
|
||||
padding-left: 8px;
|
||||
padding-right: 4px;
|
||||
}
|
||||
}
|
||||
@@ -955,7 +955,8 @@
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#zen-essentials-container > .tabbrowser-tab {
|
||||
#zen-essentials-container > .tabbrowser-tab,
|
||||
#zen-welcome-initial-essentials-browser-sidebar-essentials .tabbrowser-tab {
|
||||
--toolbarbutton-inner-padding: 0;
|
||||
max-width: unset;
|
||||
width: 100% !important;
|
||||
@@ -1010,11 +1011,12 @@
|
||||
background: transparent;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
--zen-essential-bg-margin: 2px;
|
||||
|
||||
&::before {
|
||||
background: light-dark(rgba(255, 255, 255, 0.85), rgba(68, 64, 64, 0.85));
|
||||
margin: 2px;
|
||||
border-radius: calc(var(--border-radius-medium) - 2px);
|
||||
margin: var(--zen-essential-bg-margin);
|
||||
border-radius: calc(var(--border-radius-medium) - var(--zen-essential-bg-margin));
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
z-index: 0;
|
||||
|
@@ -104,7 +104,7 @@
|
||||
--zen-button-border-radius: 5px;
|
||||
--zen-button-padding: 0.6rem 1.2rem;
|
||||
|
||||
--zen-toolbar-element-bg: light-dark(rgba(0, 0, 0, 0.07), rgba(255, 255, 255, 0.11));
|
||||
--zen-toolbar-element-bg: light-dark(rgba(89, 89, 89, 0.1), rgba(255, 255, 255, 0.125));
|
||||
|
||||
/* Toolbar */
|
||||
--zen-toolbar-height: 38px;
|
||||
@@ -163,7 +163,7 @@
|
||||
background: transparent;
|
||||
--zen-themed-toolbar-bg-transparent: transparent;
|
||||
@media (-moz-bool-pref: 'zen.widget.windows.acrylic') {
|
||||
--zen-themed-toolbar-bg-transparent: color-mix(in srgb, var(--zen-themed-toolbar-bg) 85%, transparent 15%);
|
||||
--zen-themed-toolbar-bg-transparent: color-mix(in srgb, var(--zen-themed-toolbar-bg) 80%, transparent 20%);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -71,10 +71,6 @@
|
||||
padding-inline-start: 8px !important;
|
||||
}
|
||||
|
||||
#identity-box.chromeUI:not([pageproxystate='invalid']) #identity-icon-box {
|
||||
margin-right: 0 !important;
|
||||
}
|
||||
|
||||
#urlbar:not([extend='true']) #identity-box #identity-icon-box {
|
||||
position: relative;
|
||||
}
|
||||
@@ -132,8 +128,11 @@
|
||||
|
||||
:root[zen-single-toolbar='true'] {
|
||||
.urlbar-page-action:not([open]),
|
||||
.identity-box-button:not([open]),
|
||||
#tracking-protection-icon-container {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#identity-icon-box:not([open]) {
|
||||
margin-inline-end: calc(-8px - 2 * var(--urlbar-icon-padding)) !important;
|
||||
opacity: 0;
|
||||
transition: all 0.1s ease;
|
||||
@@ -143,32 +142,30 @@
|
||||
visibility: collapse;
|
||||
}
|
||||
|
||||
#urlbar[open] :is(#tracking-protection-icon-container, .urlbar-page-action, .identity-box-button),
|
||||
#urlbar:hover :is(#tracking-protection-icon-container, .urlbar-page-action, .identity-box-button),
|
||||
.urlbar-page-action[open],
|
||||
.identity-box-button[open],
|
||||
#tracking-protection-icon-container[open] {
|
||||
#urlbar[open] :is(#tracking-protection-icon-container, .urlbar-page-action, .identity-box-button):not([hidden='true']),
|
||||
#urlbar:hover #identity-icon-box {
|
||||
opacity: 1;
|
||||
margin-inline-end: 0 !important;
|
||||
display: flex;
|
||||
transition: 0;
|
||||
}
|
||||
|
||||
#urlbar:not([open]):hover #identity-box {
|
||||
margin-inline-end: 0 !important;
|
||||
}
|
||||
|
||||
#urlbar:not([open]) {
|
||||
#identity-box {
|
||||
order: 9;
|
||||
}
|
||||
}
|
||||
|
||||
#identity-permission-box:not([open]),
|
||||
#notification-popup-box:not([open]) {
|
||||
margin-inline-start: calc(-10px - 2 * var(--urlbar-icon-padding));
|
||||
opacity: 0;
|
||||
transition: all 0.2s;
|
||||
}
|
||||
|
||||
#urlbar[open] #identity-permission-box,
|
||||
#urlbar[open] #notification-popup-box,
|
||||
#urlbar:hover #identity-permission-box,
|
||||
#urlbar:hover #notification-popup-box,
|
||||
#identity-permission-box[open],
|
||||
#notification-popup-box[open] {
|
||||
opacity: 1;
|
||||
margin-inline-start: 0 !important;
|
||||
}
|
||||
|
||||
#notification-popup-box {
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
238
src/browser/base/content/zen-styles/zen-welcome.css
Normal file
@@ -0,0 +1,238 @@
|
||||
#zen-welcome,
|
||||
#zen-welcome-start,
|
||||
#zen-welcome-pages {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
-moz-window-dragging: drag;
|
||||
}
|
||||
|
||||
:root[zen-welcome-stage] #zen-sidebar-splitter {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#zen-welcome-start {
|
||||
flex-direction: column;
|
||||
-moz-window-dragging: drag;
|
||||
|
||||
--zen-primary-color: light-dark(black, white);
|
||||
|
||||
#zen-welcome-start-button {
|
||||
opacity: 0;
|
||||
list-style-image: url(chrome://browser/skin/zen-icons/forward.svg);
|
||||
position: absolute;
|
||||
bottom: 10%;
|
||||
|
||||
.button-icon {
|
||||
filter: invert(1);
|
||||
}
|
||||
}
|
||||
|
||||
#zen-welcome-title {
|
||||
text-align: center;
|
||||
font-size: 5rem;
|
||||
line-height: 1.1;
|
||||
max-width: 50%;
|
||||
font-weight: 500;
|
||||
white-space: nowrap;
|
||||
|
||||
& > span {
|
||||
display: block;
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#zen-welcome-pages {
|
||||
opacity: 0;
|
||||
justify-content: start;
|
||||
align-items: start;
|
||||
display: none;
|
||||
background: var(--zen-branding-bg);
|
||||
border-radius: 1em;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
width: 60%;
|
||||
height: 60%;
|
||||
box-shadow: var(--zen-big-shadow);
|
||||
|
||||
#zen-welcome-page-sidebar {
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
padding: 3.8rem;
|
||||
width: 40%;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
|
||||
& #zen-welcome-heart {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
opacity: 0;
|
||||
color: var(--zen-primary-color);
|
||||
fill: var(--zen-primary-color);
|
||||
background-image: url(chrome://browser/skin/zen-icons/essential-add.svg);
|
||||
background-size: 15%;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
}
|
||||
}
|
||||
|
||||
#zen-welcome-page-sidebar-buttons {
|
||||
flex-direction: column;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
#zen-welcome-page-sidebar-content {
|
||||
& h1 {
|
||||
font-size: xx-large;
|
||||
font-weight: 600;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
& p {
|
||||
margin: 0 0 1.1rem 0;
|
||||
color: light-dark(rgba(0, 0, 0, 0.6), rgba(255, 255, 255, 0.6));
|
||||
}
|
||||
|
||||
& > * {
|
||||
transform: translate(300%);
|
||||
}
|
||||
}
|
||||
|
||||
& button {
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
transform: translate(300%);
|
||||
}
|
||||
|
||||
#zen-welcome-page-content {
|
||||
background: light-dark(rgba(0, 0, 0, 0.1), rgba(255, 255, 255, 0.1));
|
||||
width: 60%;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1.6rem;
|
||||
|
||||
& label {
|
||||
opacity: 0;
|
||||
transition:
|
||||
scale 0.1s,
|
||||
box-shadow 0.1s;
|
||||
padding: 1.5rem 1.1rem;
|
||||
border-radius: 0.6rem;
|
||||
width: 50%;
|
||||
gap: 0.8rem;
|
||||
display: flex;
|
||||
border: 2px solid var(--zen-colors-border);
|
||||
background: light-dark(rgba(255, 255, 255, 0.7), rgba(0, 0, 0, 0.4));
|
||||
align-items: center;
|
||||
|
||||
&:hover {
|
||||
box-shadow: var(--zen-big-shadow);
|
||||
}
|
||||
|
||||
&:has(:checked) {
|
||||
box-shadow: var(--zen-big-shadow);
|
||||
border: 2px solid var(--zen-primary-color);
|
||||
scale: 1.03;
|
||||
}
|
||||
}
|
||||
|
||||
#zen-welcome-initial-essentials-browser {
|
||||
width: 70%;
|
||||
height: 80%;
|
||||
display: flex;
|
||||
margin-left: auto;
|
||||
margin-top: auto;
|
||||
border-top-left-radius: 1.2em;
|
||||
box-shadow: var(--zen-big-shadow);
|
||||
background: light-dark(rgba(255, 255, 255, 0.5), rgba(0, 0, 0, 0.2));
|
||||
padding-right: 20%;
|
||||
overflow: hidden;
|
||||
opacity: 0;
|
||||
border: 1px solid var(--zen-colors-border);
|
||||
border-bottom-width: 0;
|
||||
border-right-width: 0;
|
||||
|
||||
#zen-welcome-initial-essentials-browser-sidebar {
|
||||
width: 100%;
|
||||
padding: 1.4rem;
|
||||
gap: 1.2rem;
|
||||
background: light-dark(rgba(255, 255, 255, 0.7), rgba(0, 0, 0, 0.4));
|
||||
|
||||
#zen-welcome-initial-essentials-browser-sidebar-win-buttons {
|
||||
gap: 0.5rem;
|
||||
align-items: center;
|
||||
|
||||
& > div {
|
||||
width: 15px;
|
||||
height: 15px;
|
||||
border-radius: 50%;
|
||||
background: var(--zen-toolbar-element-bg);
|
||||
}
|
||||
}
|
||||
|
||||
#zen-welcome-initial-essentials-browser-sidebar-essentials {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0.8rem;
|
||||
visibility: visible;
|
||||
|
||||
& * {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
& .extra-tab {
|
||||
width: 100%;
|
||||
height: 3rem;
|
||||
border-radius: 0.8rem;
|
||||
margin-top: 0.5rem;
|
||||
background: var(--zen-toolbar-element-bg);
|
||||
}
|
||||
|
||||
& .tabbrowser-tab {
|
||||
--tab-min-height: 5rem !important;
|
||||
min-width: 5rem !important;
|
||||
transition: transform 0.1s;
|
||||
position: relative;
|
||||
|
||||
&::after {
|
||||
position: absolute;
|
||||
content: '';
|
||||
width: 1.6rem;
|
||||
height: 1.6rem;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
background: var(--zen-tab-icon);
|
||||
background-position: center;
|
||||
background-size: cover;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
--border-radius-medium: 1rem;
|
||||
|
||||
&[visuallyselected] {
|
||||
transform: scale(1.04);
|
||||
|
||||
& .tab-background {
|
||||
--zen-essential-bg-margin: 3px;
|
||||
box-shadow: var(--zen-big-shadow);
|
||||
}
|
||||
}
|
||||
|
||||
& .tab-background::after {
|
||||
filter: blur(30px) !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -455,12 +455,12 @@
|
||||
}
|
||||
|
||||
.zen-current-workspace-indicator {
|
||||
padding: 15px calc(4px + var(--tab-inline-padding));
|
||||
padding: 15px calc(6px + var(--tab-inline-padding));
|
||||
font-weight: 600;
|
||||
position: absolute;
|
||||
max-height: var(--zen-workspace-indicator-height);
|
||||
min-height: var(--zen-workspace-indicator-height);
|
||||
gap: 12px;
|
||||
gap: 10px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
|
@@ -462,7 +462,7 @@
|
||||
let owner = tab.owner;
|
||||
return (
|
||||
owner &&
|
||||
owner.getAttribute('zen-essential') === 'true' &&
|
||||
owner.pinned &&
|
||||
this._lazyPref.SHOULD_OPEN_EXTERNAL_TABS_IN_GLANCE &&
|
||||
owner.linkedBrowser?.docShellIsActive &&
|
||||
owner.linkedBrowser?.browsingContext?.isAppTab &&
|
||||
@@ -485,7 +485,16 @@
|
||||
}
|
||||
}
|
||||
|
||||
fullyOpenGlance() {
|
||||
finishOpeningGlance() {
|
||||
this.browserWrapper.removeAttribute('animate-full');
|
||||
this.overlay.classList.remove('zen-glance-overlay');
|
||||
this.browserWrapper.removeAttribute('style');
|
||||
this.animatingFullOpen = false;
|
||||
this.closeGlance({ noAnimation: true });
|
||||
this.#glances.delete(this.#currentGlanceID);
|
||||
}
|
||||
|
||||
async fullyOpenGlance() {
|
||||
this.animatingFullOpen = true;
|
||||
gBrowser._insertTabAtIndex(this.#currentTab, {
|
||||
index: this.getTabPosition(this.#currentTab),
|
||||
@@ -501,8 +510,11 @@
|
||||
this.#currentParentTab.linkedBrowser.closest('.browserSidebarContainer').classList.remove('zen-glance-background');
|
||||
this.#currentParentTab._visuallySelected = false;
|
||||
this.hideSidebarButtons();
|
||||
gZenUIManager.motion
|
||||
.animate(
|
||||
if (gReduceMotion) {
|
||||
this.finishOpeningGlance();
|
||||
return;
|
||||
}
|
||||
await gZenUIManager.motion.animate(
|
||||
this.browserWrapper,
|
||||
{
|
||||
width: ['85%', '100%'],
|
||||
@@ -512,15 +524,8 @@
|
||||
duration: 0.4,
|
||||
type: 'spring',
|
||||
}
|
||||
)
|
||||
.then(() => {
|
||||
this.browserWrapper.removeAttribute('animate-full');
|
||||
this.overlay.classList.remove('zen-glance-overlay');
|
||||
this.browserWrapper.removeAttribute('style');
|
||||
this.animatingFullOpen = false;
|
||||
this.closeGlance({ noAnimation: true });
|
||||
this.#glances.delete(this.#currentGlanceID);
|
||||
});
|
||||
);
|
||||
this.finishOpeningGlance();
|
||||
}
|
||||
|
||||
openGlanceForBookmark(event) {
|
||||
|
@@ -802,7 +802,7 @@
|
||||
// Reactivate the transition after the animation
|
||||
appWrapper.removeAttribute('post-animating');
|
||||
}, 100);
|
||||
}, 200);
|
||||
}, 300);
|
||||
});
|
||||
}
|
||||
|
||||
|
@@ -70,7 +70,7 @@
|
||||
}
|
||||
|
||||
if (onInit) {
|
||||
await this._refreshPinnedTabs(newWorkspace, { init: onInit });
|
||||
await this._refreshPinnedTabs({ init: onInit });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,9 +98,9 @@
|
||||
return this._enabled;
|
||||
}
|
||||
|
||||
async _refreshPinnedTabs(currentWorkspace, { init = false } = {}) {
|
||||
async _refreshPinnedTabs({ init = false } = {}) {
|
||||
await this._initializePinsCache();
|
||||
await this._initializePinnedTabs(init, currentWorkspace);
|
||||
await this._initializePinnedTabs(init);
|
||||
}
|
||||
|
||||
async _initializePinsCache() {
|
||||
@@ -141,14 +141,12 @@
|
||||
return this._pinsCache;
|
||||
}
|
||||
|
||||
async _initializePinnedTabs(init = false, currentWorkspace) {
|
||||
async _initializePinnedTabs(init = false) {
|
||||
const pins = this._pinsCache;
|
||||
if (!pins?.length) {
|
||||
return;
|
||||
}
|
||||
|
||||
const workspaces = await ZenWorkspaces._workspaces();
|
||||
|
||||
const activeTab = gBrowser.selectedTab;
|
||||
const pinnedTabsByUUID = new Map();
|
||||
const pinsToCreate = new Set(pins.map((p) => p.uuid));
|
||||
@@ -174,7 +172,21 @@
|
||||
}
|
||||
}
|
||||
|
||||
// Second pass: create new tabs for pins that don't have tabs
|
||||
// Second pass: For every existing tab, update its label
|
||||
// and set 'zen-has-static-label' attribute if it's been edited
|
||||
for (let pin of pins) {
|
||||
const tab = pinnedTabsByUUID.get(pin.uuid);
|
||||
if (!tab) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (pin.title && pin.editedTitle) {
|
||||
gBrowser._setTabLabel(tab, pin.title);
|
||||
tab.setAttribute('zen-has-static-label', 'true');
|
||||
}
|
||||
}
|
||||
|
||||
// Third pass: create new tabs for pins that don't have tabs
|
||||
for (let pin of pins) {
|
||||
if (!pinsToCreate.has(pin.uuid)) {
|
||||
continue; // Skip pins that already have tabs
|
||||
@@ -213,6 +225,10 @@
|
||||
newTab.setAttribute('zen-essential', 'true');
|
||||
}
|
||||
|
||||
if (pin.editedTitle) {
|
||||
newTab.setAttribute('zen-has-static-label', 'true');
|
||||
}
|
||||
|
||||
// Initialize browser state if needed
|
||||
if (!newTab.linkedBrowser._remoteAutoRemoved) {
|
||||
let state = {
|
||||
@@ -349,7 +365,7 @@
|
||||
|
||||
await ZenPinnedTabsStorage.savePin(pin);
|
||||
const currentWorkspace = await ZenWorkspaces.getActiveWorkspace();
|
||||
await this._refreshPinnedTabs(currentWorkspace);
|
||||
await this._refreshPinnedTabs();
|
||||
}
|
||||
|
||||
async _setPinnedAttributes(tab) {
|
||||
@@ -386,7 +402,7 @@
|
||||
return;
|
||||
}
|
||||
const currentWorkspace = await ZenWorkspaces.getActiveWorkspace();
|
||||
await this._refreshPinnedTabs(currentWorkspace);
|
||||
await this._refreshPinnedTabs();
|
||||
}
|
||||
|
||||
async _removePinnedAttributes(tab, isClosing = false) {
|
||||
@@ -411,7 +427,7 @@
|
||||
}
|
||||
}
|
||||
const currentWorkspace = await ZenWorkspaces.getActiveWorkspace();
|
||||
await this._refreshPinnedTabs(currentWorkspace);
|
||||
await this._refreshPinnedTabs();
|
||||
}
|
||||
|
||||
_initClosePinnedTabShortcut() {
|
||||
@@ -707,6 +723,33 @@
|
||||
return document.documentElement.getAttribute('zen-sidebar-expanded') === 'true';
|
||||
}
|
||||
|
||||
async updatePinTitle(tab, newTitle, isEdited = true, notifyObservers = true) {
|
||||
const uuid = tab.getAttribute('zen-pin-id');
|
||||
await ZenPinnedTabsStorage.updatePinTitle(uuid, newTitle, isEdited, notifyObservers);
|
||||
|
||||
await this._refreshPinnedTabs();
|
||||
|
||||
const browsers = Services.wm.getEnumerator('navigator:browser');
|
||||
|
||||
// update the label for the same pin across all windows
|
||||
for (const browser of browsers) {
|
||||
const tabs = browser.gBrowser.tabs;
|
||||
for (let i = 0; i < tabs.length; i++) {
|
||||
const tabToEdit = tabs[i];
|
||||
if (tabToEdit.getAttribute('zen-pin-id') === uuid && tabToEdit !== tab) {
|
||||
tabToEdit.removeAttribute('zen-has-static-label');
|
||||
if (isEdited) {
|
||||
gBrowser._setTabLabel(tabToEdit, newTitle);
|
||||
tabToEdit.setAttribute('zen-has-static-label', 'true');
|
||||
} else {
|
||||
gBrowser.setTabTitle(tabToEdit);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
applyDragoverClass(event, draggedTab) {
|
||||
const pinnedTabsTarget = event.target.closest('#vertical-pinned-tabs-container');
|
||||
const essentialTabsTarget = event.target.closest('#zen-essentials-container');
|
||||
|
@@ -24,6 +24,19 @@ var ZenPinnedTabsStorage = {
|
||||
)
|
||||
`);
|
||||
|
||||
const columns = await db.execute(`PRAGMA table_info(zen_pins)`);
|
||||
const columnNames = columns.map((row) => row.getResultByName('name'));
|
||||
|
||||
// Helper function to add column if it doesn't exist
|
||||
const addColumnIfNotExists = async (columnName, definition) => {
|
||||
if (!columnNames.includes(columnName)) {
|
||||
await db.execute(`ALTER TABLE zen_pins ADD COLUMN ${columnName} ${definition}`);
|
||||
}
|
||||
};
|
||||
|
||||
// Add edited_title column if it doesn't exist
|
||||
await addColumnIfNotExists('edited_title', 'BOOLEAN NOT NULL DEFAULT 0');
|
||||
|
||||
// Create indices
|
||||
await db.execute(`
|
||||
CREATE INDEX IF NOT EXISTS idx_zen_pins_uuid ON zen_pins(uuid)
|
||||
@@ -152,6 +165,7 @@ var ZenPinnedTabsStorage = {
|
||||
isEssential: Boolean(row.getResultByName('is_essential')),
|
||||
isGroup: Boolean(row.getResultByName('is_group')),
|
||||
parentUuid: row.getResultByName('parent_uuid'),
|
||||
editedTitle: Boolean(row.getResultByName('edited_title')),
|
||||
}));
|
||||
},
|
||||
|
||||
@@ -176,6 +190,7 @@ var ZenPinnedTabsStorage = {
|
||||
isEssential: Boolean(row.getResultByName('is_essential')),
|
||||
isGroup: Boolean(row.getResultByName('is_group')),
|
||||
parentUuid: row.getResultByName('parent_uuid'),
|
||||
editedTitle: Boolean(row.getResultByName('edited_title')),
|
||||
}));
|
||||
},
|
||||
|
||||
@@ -351,6 +366,60 @@ var ZenPinnedTabsStorage = {
|
||||
this._notifyPinsChanged('zen-pin-updated', Array.from(changedUUIDs));
|
||||
},
|
||||
|
||||
async updatePinTitle(uuid, newTitle, isEdited = true, notifyObservers = true) {
|
||||
if (!uuid || typeof newTitle !== 'string') {
|
||||
throw new Error('Invalid parameters: uuid and newTitle are required');
|
||||
}
|
||||
|
||||
const changedUUIDs = new Set();
|
||||
|
||||
await PlacesUtils.withConnectionWrapper('ZenPinnedTabsStorage.updatePinTitle', async (db) => {
|
||||
await db.executeTransaction(async () => {
|
||||
const now = Date.now();
|
||||
|
||||
// Update the pin's title and edited_title flag
|
||||
const result = await db.execute(
|
||||
`
|
||||
UPDATE zen_pins
|
||||
SET title = :newTitle,
|
||||
edited_title = :isEdited,
|
||||
updated_at = :now
|
||||
WHERE uuid = :uuid
|
||||
`,
|
||||
{
|
||||
uuid,
|
||||
newTitle,
|
||||
isEdited,
|
||||
now,
|
||||
}
|
||||
);
|
||||
|
||||
// Only proceed with change tracking if a row was actually updated
|
||||
if (result.rowsAffected > 0) {
|
||||
changedUUIDs.add(uuid);
|
||||
|
||||
// Record the change
|
||||
await db.execute(
|
||||
`
|
||||
INSERT OR REPLACE INTO zen_pins_changes (uuid, timestamp)
|
||||
VALUES (:uuid, :timestamp)
|
||||
`,
|
||||
{
|
||||
uuid,
|
||||
timestamp: Math.floor(now / 1000),
|
||||
}
|
||||
);
|
||||
|
||||
await this.updateLastChangeTimestamp(db);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
if (notifyObservers && changedUUIDs.size > 0) {
|
||||
this._notifyPinsChanged('zen-pin-updated', Array.from(changedUUIDs));
|
||||
}
|
||||
},
|
||||
|
||||
async __dropTables() {
|
||||
await PlacesUtils.withConnectionWrapper('ZenPinnedTabsStorage.__dropTables', async (db) => {
|
||||
await db.execute(`DROP TABLE IF EXISTS zen_pins`);
|
||||
|
475
src/browser/base/zen-components/ZenWelcome.mjs
Normal file
@@ -0,0 +1,475 @@
|
||||
{
|
||||
function clearBrowserElements() {
|
||||
for (const element of document.getElementById('browser').children) {
|
||||
element.style.display = 'none';
|
||||
}
|
||||
}
|
||||
|
||||
function getMotion() {
|
||||
return gZenUIManager.motion;
|
||||
}
|
||||
|
||||
async function animate(...args) {
|
||||
return getMotion().animate(...args);
|
||||
}
|
||||
|
||||
function initializeZenWelcome() {
|
||||
document.documentElement.setAttribute('zen-welcome-stage', 'true');
|
||||
const XUL = `
|
||||
<html:div id="zen-welcome">
|
||||
<html:div id="zen-welcome-start">
|
||||
<html:h1 class="zen-branding-title" id="zen-welcome-title"></html:h1>
|
||||
<button class="footer-button primary" id="zen-welcome-start-button">
|
||||
</button>
|
||||
</html:div>
|
||||
<hbox id="zen-welcome-pages">
|
||||
<vbox id="zen-welcome-page-sidebar">
|
||||
<vbox id="zen-welcome-page-sidebar-content">
|
||||
</vbox>
|
||||
<vbox id="zen-welcome-page-sidebar-buttons">
|
||||
</vbox>
|
||||
</vbox>
|
||||
<html:div id="zen-welcome-page-content">
|
||||
</html:div>
|
||||
</hbox>
|
||||
</html:div>
|
||||
`;
|
||||
const fragment = window.MozXULElement.parseXULToFragment(XUL);
|
||||
document.getElementById('browser').appendChild(fragment);
|
||||
window.MozXULElement.insertFTLIfNeeded('browser/zen-welcome.ftl');
|
||||
}
|
||||
|
||||
class ZenWelcomePages {
|
||||
constructor(pages) {
|
||||
this._currentPage = -1;
|
||||
this._pages = pages;
|
||||
this.init();
|
||||
this.next();
|
||||
}
|
||||
|
||||
init() {
|
||||
document.getElementById('zen-welcome-pages').style.display = 'flex';
|
||||
document.getElementById('zen-welcome-start').remove();
|
||||
window.maximize();
|
||||
animate('#zen-welcome-pages', { opacity: [0, 1] }, { delay: 0.1 });
|
||||
}
|
||||
|
||||
async fadeInTitles(page) {
|
||||
const [title1, description1, description2] = await document.l10n.formatValues(page.text);
|
||||
const titleElement = document.getElementById('zen-welcome-page-sidebar-content');
|
||||
titleElement.innerHTML =
|
||||
`<html:h1>${title1}</html:h1><html:p>${description1}</html:p>` +
|
||||
(description2 ? `<html:p>${description2}</html:p>` : '');
|
||||
await animate(
|
||||
'#zen-welcome-page-sidebar-content > *',
|
||||
{ x: ['150%', 0] },
|
||||
{
|
||||
delay: getMotion().stagger(0.05),
|
||||
type: 'spring',
|
||||
bounce: 0.2,
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
async fadeInButtons(page) {
|
||||
const buttons = document.getElementById('zen-welcome-page-sidebar-buttons');
|
||||
let i = 0;
|
||||
for (const button of page.buttons) {
|
||||
const buttonElement = document.createXULElement('button');
|
||||
document.l10n.setAttributes(buttonElement, button.l10n);
|
||||
if (i++ === 0) {
|
||||
buttonElement.classList.add('primary');
|
||||
}
|
||||
buttonElement.classList.add('footer-button');
|
||||
buttonElement.addEventListener('click', async () => {
|
||||
const shouldSkip = await button.onclick();
|
||||
if (shouldSkip) {
|
||||
this.next();
|
||||
}
|
||||
});
|
||||
buttons.appendChild(buttonElement);
|
||||
}
|
||||
await animate(
|
||||
'#zen-welcome-page-sidebar-buttons button',
|
||||
{ x: ['150%', 0] },
|
||||
{
|
||||
delay: getMotion().stagger(0.1, { startDelay: 0.4 }),
|
||||
type: 'spring',
|
||||
bounce: 0.2,
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
async fadeInContent() {
|
||||
await animate(
|
||||
'#zen-welcome-page-content > *',
|
||||
{ opacity: [0, 1] },
|
||||
{
|
||||
delay: getMotion().stagger(0.1),
|
||||
type: 'spring',
|
||||
bounce: 0.2,
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
async fadeOutButtons() {
|
||||
await animate(
|
||||
'#zen-welcome-page-sidebar-buttons button',
|
||||
{ x: [0, '-150%'] },
|
||||
{
|
||||
type: 'spring',
|
||||
bounce: 0,
|
||||
delay: getMotion().stagger(0.1, { startDelay: 0.4 }),
|
||||
}
|
||||
);
|
||||
document.getElementById('zen-welcome-page-sidebar-buttons').innerHTML = '';
|
||||
document.getElementById('zen-welcome-page-sidebar-content').innerHTML = '';
|
||||
}
|
||||
|
||||
async fadeOutTitles() {
|
||||
await animate(
|
||||
'#zen-welcome-page-sidebar-content > *',
|
||||
{ x: [0, '-150%'] },
|
||||
{
|
||||
delay: getMotion().stagger(0.05, { startDelay: 0.3 }),
|
||||
type: 'spring',
|
||||
bounce: 0,
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
async fadeOutContent() {
|
||||
await animate(
|
||||
'#zen-welcome-page-content > *',
|
||||
{ opacity: [1, 0] },
|
||||
{
|
||||
delay: getMotion().stagger(0.05, { startDelay: 0.3 }),
|
||||
type: 'spring',
|
||||
bounce: 0,
|
||||
duration: 0.2,
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
async next() {
|
||||
if (this._currentPage !== -1) {
|
||||
const previousPage = this._pages[this._currentPage];
|
||||
await Promise.all([this.fadeOutTitles(), this.fadeOutButtons(), this.fadeOutContent()]);
|
||||
await previousPage.fadeOut();
|
||||
document.getElementById('zen-welcome-page-content').innerHTML = '';
|
||||
}
|
||||
this._currentPage++;
|
||||
const currentPage = this._pages[this._currentPage];
|
||||
if (!currentPage) {
|
||||
this.finish();
|
||||
return;
|
||||
}
|
||||
await Promise.all([this.fadeInTitles(currentPage), this.fadeInButtons(currentPage)]);
|
||||
currentPage.fadeIn();
|
||||
await this.fadeInContent();
|
||||
}
|
||||
|
||||
async finish() {
|
||||
await animate('#zen-welcome-page-content', { x: [0, '100%'] }, { bounce: 0 });
|
||||
document.getElementById('zen-welcome-page-content').remove();
|
||||
await this.animHeart();
|
||||
await animate('#zen-welcome-pages', { opacity: [1, 0] });
|
||||
document.getElementById('zen-welcome').remove();
|
||||
document.documentElement.removeAttribute('zen-welcome-stage');
|
||||
for (const element of document.getElementById('browser').children) {
|
||||
element.style.opacity = 0;
|
||||
element.style.removeProperty('display');
|
||||
}
|
||||
await animate('#browser > *', { opacity: [0, 1] });
|
||||
gZenUIManager.showToast('zen-welcome-finished');
|
||||
}
|
||||
|
||||
async animHeart() {
|
||||
const heart = document.createElement('div');
|
||||
heart.id = 'zen-welcome-heart';
|
||||
const sidebar = document.getElementById('zen-welcome-page-sidebar');
|
||||
sidebar.style.width = '100%';
|
||||
sidebar.appendChild(heart);
|
||||
await animate(
|
||||
'#zen-welcome-heart',
|
||||
{ opacity: [0, 1, 1, 1, 0], scale: [0.5, 1, 1.2, 1, 1.2] },
|
||||
{
|
||||
duration: 1.5,
|
||||
delay: 0.2,
|
||||
bounce: 0,
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
function getWelcomePages() {
|
||||
return [
|
||||
{
|
||||
text: [
|
||||
{
|
||||
id: 'zen-welcome-import-title',
|
||||
},
|
||||
{
|
||||
id: 'zen-welcome-import-description-1',
|
||||
},
|
||||
{
|
||||
id: 'zen-welcome-import-description-2',
|
||||
},
|
||||
],
|
||||
buttons: [
|
||||
{
|
||||
l10n: 'zen-welcome-import-button',
|
||||
onclick: async () => {
|
||||
MigrationUtils.showMigrationWizard(window, {
|
||||
isStartupMigration: true,
|
||||
});
|
||||
document.querySelector('#zen-welcome-page-sidebar-buttons button').remove();
|
||||
const newButton = document.querySelector('#zen-welcome-page-sidebar-buttons button');
|
||||
newButton.classList.add('primary');
|
||||
document.l10n.setAttributes(newButton, 'zen-welcome-next-action');
|
||||
return false;
|
||||
},
|
||||
},
|
||||
{
|
||||
l10n: 'zen-welcome-skip-button',
|
||||
onclick: async () => {
|
||||
return true;
|
||||
},
|
||||
},
|
||||
],
|
||||
fadeIn() {
|
||||
const xul = `
|
||||
<html:label for="zen-welcome-set-default-browser">
|
||||
<html:input type="radio" id="zen-welcome-set-default-browser" name="zen-welcome-set-default-browser"></html:input>
|
||||
<html:span data-l10n-id="zen-welcome-set-default-browser"></html:span>
|
||||
</html:label>
|
||||
<html:label for="zen-welcome-dont-set-default-browser">
|
||||
<html:input checked="true" type="radio" id="zen-welcome-dont-set-default-browser" name="zen-welcome-set-default-browser"></html:input>
|
||||
<html:span data-l10n-id="zen-welcome-dont-set-default-browser"></html:span>
|
||||
</html:label>
|
||||
`;
|
||||
const fragment = window.MozXULElement.parseXULToFragment(xul);
|
||||
document.getElementById('zen-welcome-page-content').appendChild(fragment);
|
||||
},
|
||||
async fadeOut() {
|
||||
const shouldSetDefault = document.getElementById('zen-welcome-set-default-browser').checked;
|
||||
if (AppConstants.HAVE_SHELL_SERVICE && shouldSetDefault) {
|
||||
let shellSvc = getShellService();
|
||||
if (!shellSvc) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
await shellSvc.setDefaultBrowser(false);
|
||||
} catch (ex) {
|
||||
console.error(ex);
|
||||
return;
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
text: [
|
||||
{
|
||||
id: 'zen-welcome-workspace-colors-title',
|
||||
},
|
||||
{
|
||||
id: 'zen-welcome-workspace-colors-description',
|
||||
},
|
||||
],
|
||||
buttons: [
|
||||
{
|
||||
l10n: 'zen-welcome-next-action',
|
||||
onclick: async () => {
|
||||
return true;
|
||||
},
|
||||
},
|
||||
],
|
||||
fadeIn() {},
|
||||
fadeOut() {},
|
||||
},
|
||||
{
|
||||
text: [
|
||||
{
|
||||
id: 'zen-welcome-initial-essentials-title',
|
||||
},
|
||||
{
|
||||
id: 'zen-welcome-initial-essentials-description-1',
|
||||
},
|
||||
{
|
||||
id: 'zen-welcome-initial-essentials-description-2',
|
||||
},
|
||||
],
|
||||
buttons: [
|
||||
{
|
||||
l10n: 'zen-welcome-next-action',
|
||||
onclick: async () => {
|
||||
return true;
|
||||
},
|
||||
},
|
||||
],
|
||||
fadeIn() {
|
||||
const xul = `
|
||||
<hbox id="zen-welcome-initial-essentials-browser">
|
||||
<vbox id="zen-welcome-initial-essentials-browser-sidebar">
|
||||
<hbox id="zen-welcome-initial-essentials-browser-sidebar-win-buttons">
|
||||
<html:div></html:div>
|
||||
<html:div></html:div>
|
||||
<html:div></html:div>
|
||||
</hbox>
|
||||
<html:div id="zen-welcome-initial-essentials-browser-sidebar-essentials">
|
||||
<html:div class="tabbrowser-tab" fadein="" visuallyselected="" data-url="https://web.whatsapp.com" style="--zen-tab-icon: url('https://web.whatsapp.com/favicon.ico');">
|
||||
<stack class="tab-stack">
|
||||
<html:div class="tab-background"></html:div>
|
||||
</stack>
|
||||
</html:div>
|
||||
<html:div class="tabbrowser-tab" fadein="" visuallyselected="" data-url="https://discord.com" style="--zen-tab-icon: url('http://www.google.com/s2/favicons?domain=discord.com');">
|
||||
<stack class="tab-stack">
|
||||
<html:div class="tab-background"></html:div>
|
||||
</stack>
|
||||
</html:div>
|
||||
<html:div class="tabbrowser-tab" fadein="" data-url="https://reddit.com" style="--zen-tab-icon: url('https://www.redditstatic.com/desktop2x/img/favicon/favicon-96x96.png');">
|
||||
<stack class="tab-stack">
|
||||
<html:div class="tab-background"></html:div>
|
||||
</stack>
|
||||
</html:div>
|
||||
<html:div class="tabbrowser-tab" fadein="" data-url="https://slack.com/" style="--zen-tab-icon: url('https://a.slack-edge.com/80588/marketing/img/meta/favicon-32.png');">
|
||||
<stack class="tab-stack">
|
||||
<html:div class="tab-background"></html:div>
|
||||
</stack>
|
||||
</html:div>
|
||||
<html:div class="tabbrowser-tab" fadein="" visuallyselected="" data-url="https://google.com" style="--zen-tab-icon: url('https://www.google.com/s2/favicons?domain=google.com');">
|
||||
<stack class="tab-stack">
|
||||
<html:div class="tab-background"></html:div>
|
||||
</stack>
|
||||
</html:div>
|
||||
<html:div class="tabbrowser-tab" fadein="" data-url="https://twitter.com" style="--zen-tab-icon: url('https://abs.twimg.com/favicons/twitter.ico');">
|
||||
<stack class="tab-stack">
|
||||
<html:div class="tab-background"></html:div>
|
||||
</stack>
|
||||
</html:div>
|
||||
<html:div class="tabbrowser-tab" fadein="" data-url="https://notion.com" style="--zen-tab-icon: url('https://www.notion.so/front-static/favicon.ico');">
|
||||
<stack class="tab-stack">
|
||||
<html:div class="tab-background"></html:div>
|
||||
</stack>
|
||||
</html:div>
|
||||
<html:div class="tabbrowser-tab" fadein="" data-url="https://instagram.com" style="--zen-tab-icon: url('https://www.instagram.com/static/images/ico/favicon-192.png/68d99ba29cc8.png');">
|
||||
<stack class="tab-stack">
|
||||
<html:div class="tab-background"></html:div>
|
||||
</stack>
|
||||
</html:div>
|
||||
<html:div class="tabbrowser-tab" fadein="" visuallyselected="" data-url="https://element.io" style="--zen-tab-icon: url('http://www.google.com/s2/favicons?domain=element.io');">
|
||||
<stack class="tab-stack">
|
||||
<html:div class="tab-background"></html:div>
|
||||
</stack>
|
||||
</html:div>
|
||||
<html:div class="extra-tab"></html:div>
|
||||
<html:div class="extra-tab"></html:div>
|
||||
</html:div>
|
||||
</vbox>
|
||||
</hbox>
|
||||
`;
|
||||
const fragment = window.MozXULElement.parseXULToFragment(xul);
|
||||
document.getElementById('zen-welcome-page-content').appendChild(fragment);
|
||||
document
|
||||
.getElementById('zen-welcome-initial-essentials-browser-sidebar-essentials')
|
||||
.addEventListener('click', async (event) => {
|
||||
const tab = event.target.closest('.tabbrowser-tab');
|
||||
if (!tab) {
|
||||
return;
|
||||
}
|
||||
tab.toggleAttribute('visuallyselected');
|
||||
});
|
||||
},
|
||||
fadeOut() {},
|
||||
},
|
||||
{
|
||||
text: [
|
||||
{
|
||||
id: 'zen-welcome-start-browsing-title',
|
||||
},
|
||||
{
|
||||
id: 'zen-welcome-start-browsing-description-1',
|
||||
},
|
||||
],
|
||||
buttons: [
|
||||
{
|
||||
l10n: 'zen-welcome-start-browsing',
|
||||
onclick: async () => {
|
||||
return true;
|
||||
},
|
||||
},
|
||||
],
|
||||
fadeIn() {},
|
||||
fadeOut() {},
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
async function animateInitialStage() {
|
||||
const [title1, title2] = await document.l10n.formatValues([
|
||||
{ id: 'zen-welcome-title-line1' },
|
||||
{ id: 'zen-welcome-title-line2' },
|
||||
]);
|
||||
const titleElement = document.getElementById('zen-welcome-title');
|
||||
titleElement.innerHTML = `<html:span>${title1}</html:span><html:span>${title2}</html:span>`;
|
||||
await animate(
|
||||
'#zen-welcome-title span',
|
||||
{ opacity: [0, 1], y: [20, 0], filter: ['blur(2px)', 'blur(0px)'] },
|
||||
{
|
||||
delay: getMotion().stagger(0.6, { startDelay: 0.2 }),
|
||||
type: 'spring',
|
||||
stiffness: 300,
|
||||
damping: 20,
|
||||
mass: 1.8,
|
||||
}
|
||||
);
|
||||
const button = document.getElementById('zen-welcome-start-button');
|
||||
await animate(
|
||||
button,
|
||||
{ opacity: [0, 1], y: [20, 0], filter: ['blur(2px)', 'blur(0px)'] },
|
||||
{
|
||||
delay: 0.1,
|
||||
type: 'spring',
|
||||
stiffness: 300,
|
||||
damping: 20,
|
||||
mass: 1.8,
|
||||
}
|
||||
);
|
||||
button.addEventListener('click', async () => {
|
||||
await animate(
|
||||
'#zen-welcome-title span, #zen-welcome-start-button',
|
||||
{ opacity: [1, 0], y: [0, -10], filter: ['blur(0px)', 'blur(2px)'] },
|
||||
{
|
||||
type: 'spring',
|
||||
ease: [0.755, 0.05, 0.855, 0.06],
|
||||
bounce: 0.4,
|
||||
delay: getMotion().stagger(0.4),
|
||||
}
|
||||
);
|
||||
new ZenWelcomePages(getWelcomePages());
|
||||
});
|
||||
}
|
||||
|
||||
function centerWindowOnScreen() {
|
||||
window.addEventListener(
|
||||
'MozAfterPaint',
|
||||
function () {
|
||||
window.resizeTo(875, 560);
|
||||
window.focus();
|
||||
const appWin = window.docShell.treeOwner.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIAppWindow);
|
||||
appWin.rollupAllPopups();
|
||||
},
|
||||
{ once: true }
|
||||
);
|
||||
}
|
||||
|
||||
function startZenWelcome() {
|
||||
clearBrowserElements();
|
||||
centerWindowOnScreen();
|
||||
initializeZenWelcome();
|
||||
animateInitialStage();
|
||||
}
|
||||
|
||||
startZenWelcome();
|
||||
}
|
@@ -154,7 +154,7 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
|
||||
}
|
||||
|
||||
get tabboxChildren() {
|
||||
return this.activeWorkspaceStrip.children;
|
||||
return this.activeWorkspaceStrip?.children || [];
|
||||
}
|
||||
|
||||
get pinnedTabsContainer() {
|
||||
@@ -393,17 +393,23 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
|
||||
const delta = event.delta * 300;
|
||||
const delta = event.delta * 300 + 1;
|
||||
const stripWidth = document.getElementById('tabbrowser-tabs').scrollWidth;
|
||||
let translateX = this._swipeState.lastDelta + delta;
|
||||
// Add a force multiplier as we are translating the strip depending on how close to the edge we are
|
||||
let forceMultiplier = Math.min(1, 1 - Math.abs(translateX) / (stripWidth * 1.5));
|
||||
if (forceMultiplier > 0.5) {
|
||||
translateX *= forceMultiplier;
|
||||
this._swipeState.lastDelta = delta;
|
||||
} else {
|
||||
translateX = this._swipeState.lastDelta;
|
||||
}
|
||||
|
||||
if (Math.abs(delta) > 1) {
|
||||
this._swipeState.direction = delta > 0 ? 'left' : 'right';
|
||||
}
|
||||
|
||||
// Apply a translateX to the tab strip to give the user feedback on the swipe
|
||||
const stripWidth = document.getElementById('tabbrowser-tabs').scrollWidth;
|
||||
const translateX = Math.max(-stripWidth, Math.min(delta, stripWidth));
|
||||
|
||||
const currentWorkspace = this.activeWorkspace;
|
||||
this._organizeWorkspaceStripLocations({ uuid: currentWorkspace }, true, translateX);
|
||||
}
|
||||
@@ -1337,10 +1343,18 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
|
||||
return;
|
||||
}
|
||||
tab.setAttribute('zen-workspace-id', workspaceID);
|
||||
const parent = tab.pinned ? '#zen-browser-tabs-pinned ' : '#zen-browser-tabs ';
|
||||
const container = document.querySelector(parent + '.zen-workspace-tabs-section');
|
||||
if (tab.hasAttribute('zen-essential')) {
|
||||
return;
|
||||
}
|
||||
const parent = tab.pinned ? '#vertical-pinned-tabs-container ' : '#tabbrowser-arrowscrollbox ';
|
||||
const container = document.querySelector(parent + `.zen-workspace-tabs-section[zen-workspace-id="${workspaceID}"]`);
|
||||
if (container) {
|
||||
container.insertBefore(tab, container.firstChild);
|
||||
container.insertBefore(tab, container.lastChild);
|
||||
}
|
||||
// also change glance tab if it's the same tab
|
||||
const glanceTab = tab.querySelector('.tabbrowser-tab[zen-glance-tab]');
|
||||
if (glanceTab) {
|
||||
glanceTab.setAttribute('zen-workspace-id', workspaceID);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1493,7 +1507,6 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
|
||||
const newTransform = -(workspaceIndex - workspaces.workspaces.indexOf(otherWorkspace)) * 100;
|
||||
for (const container of document.querySelectorAll(selector)) {
|
||||
container.style.transform = `translateX(${newTransform + offsetPixels / 2}%)`;
|
||||
container.style.opacity = offsetPixels ? 1 : !newTransform;
|
||||
if (!offsetPixels && !container.hasAttribute('active')) {
|
||||
container.setAttribute('hidden', 'true');
|
||||
} else {
|
||||
@@ -1542,16 +1555,11 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
|
||||
const isCurrent = offset === 0;
|
||||
if (shouldAnimate) {
|
||||
element.removeAttribute('hidden');
|
||||
if (isCurrent) {
|
||||
element.style.opacity = 1;
|
||||
}
|
||||
animations.push(
|
||||
gZenUIManager.motion.animate(
|
||||
element,
|
||||
{
|
||||
transform: existingTransform ? [existingTransform, newTransform] : newTransform,
|
||||
// -0 to convert to number
|
||||
opacity: !isCurrent ? [!!offset - 0, !offset - 0] : [1, 1],
|
||||
},
|
||||
{
|
||||
type: 'spring',
|
||||
@@ -2009,6 +2017,8 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
|
||||
delete this._lastSelectedWorkspaceTabs[previousWorkspaceID];
|
||||
}
|
||||
}
|
||||
// Make sure we select the last tab in the new workspace
|
||||
this._lastSelectedWorkspaceTabs[workspaceID] = tabs[tabs.length - 1];
|
||||
const workspaces = await this._workspaces();
|
||||
await this.changeWorkspace(workspaces.workspaces.find((workspace) => workspace.uuid === workspaceID));
|
||||
}
|
||||
|
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/components/BrowserGlue.sys.mjs b/browser/components/BrowserGlue.sys.mjs
|
||||
index b888a753a7f23a9800fe04da51a4e6b898314ff2..35eea774e1ea4b1807ec65ebc767f423d81602bd 100644
|
||||
index b888a753a7f23a9800fe04da51a4e6b898314ff2..a6a01cf035253b05ea7b20b434cf2002ff115d96 100644
|
||||
--- a/browser/components/BrowserGlue.sys.mjs
|
||||
+++ b/browser/components/BrowserGlue.sys.mjs
|
||||
@@ -121,6 +121,7 @@ ChromeUtils.defineESModuleGetters(lazy, {
|
||||
@@ -18,28 +18,3 @@ index b888a753a7f23a9800fe04da51a4e6b898314ff2..35eea774e1ea4b1807ec65ebc767f423
|
||||
// A channel for "remote troubleshooting" code...
|
||||
let channel = new lazy.WebChannel(
|
||||
"remote-troubleshooting",
|
||||
@@ -4761,6 +4763,7 @@ BrowserGlue.prototype = {
|
||||
},
|
||||
|
||||
async _maybeShowDefaultBrowserPrompt() {
|
||||
+ this._ZenMaybeShowWelcomeScreen();
|
||||
// Highest priority is about:welcome window modal experiment
|
||||
// Second highest priority is the upgrade dialog, which can include a "primary
|
||||
// browser" request and is limited in various ways, e.g., major upgrades.
|
||||
@@ -5302,6 +5305,16 @@ BrowserGlue.prototype = {
|
||||
"nsIObserver",
|
||||
"nsISupportsWeakReference",
|
||||
]),
|
||||
+
|
||||
+ _ZenMaybeShowWelcomeScreen() {
|
||||
+ const welcomeEnabled = Services.prefs.getBoolPref("zen.welcome-screen.enabled", true)
|
||||
+ const welcomeSeen = Services.prefs.getBoolPref("zen.welcome-screen.seen", false)
|
||||
+ if (welcomeEnabled && !welcomeSeen) {
|
||||
+ lazy.BrowserWindowTracker.getTopWindow().gDialogBox.open(
|
||||
+ "chrome://browser/content/zen-welcome/welcome.html"
|
||||
+ );
|
||||
+ }
|
||||
+ },
|
||||
};
|
||||
|
||||
var ContentBlockingCategoriesPrefs = {
|
||||
|
@@ -1,38 +0,0 @@
|
||||
diff --git a/browser/components/migration/MigrationUtils.sys.mjs b/browser/components/migration/MigrationUtils.sys.mjs
|
||||
index 000b471ee6c93815dde61127b8974774d0abafb1..32ba8d40bab5e609fc76dfe97a952d5a7a300a71 100644
|
||||
--- a/browser/components/migration/MigrationUtils.sys.mjs
|
||||
+++ b/browser/components/migration/MigrationUtils.sys.mjs
|
||||
@@ -576,12 +576,15 @@ class MigrationUtils {
|
||||
* True if the source selection page of the wizard should be skipped.
|
||||
* @param {string} [aOptions.profileId]
|
||||
* An identifier for the profile to use when migrating.
|
||||
+ * @param {boolean} [aOptions.zenBlocking=false]
|
||||
+ * True if the migration wizard should block the main thread.
|
||||
* @returns {Promise<undefined>}
|
||||
* If an about:preferences tab can be opened, this will resolve when
|
||||
* that tab has been switched to. Otherwise, this will resolve
|
||||
* just after opening the top-level dialog window.
|
||||
*/
|
||||
showMigrationWizard(aOpener, aOptions) {
|
||||
+ let zenShouldBlock = aOptions.zenBlocking || false;
|
||||
// When migration is kicked off from about:welcome, there are
|
||||
// a few different behaviors that we want to test, controlled
|
||||
// by a preference that is instrumented for Nimbus. The pref
|
||||
@@ -648,7 +651,7 @@ class MigrationUtils {
|
||||
if (aboutWelcomeBehavior == "autoclose") {
|
||||
return aOpener.openPreferences("general-migrate-autoclose");
|
||||
} else if (aboutWelcomeBehavior == "standalone") {
|
||||
- openStandaloneWindow(false /* blocking */);
|
||||
+ openStandaloneWindow(zenShouldBlock /* blocking */);
|
||||
return Promise.resolve();
|
||||
}
|
||||
}
|
||||
@@ -657,7 +660,7 @@ class MigrationUtils {
|
||||
|
||||
// If somehow we failed to open about:preferences, fall back to opening
|
||||
// the top-level window.
|
||||
- openStandaloneWindow(false /* blocking */);
|
||||
+ openStandaloneWindow(zenShouldBlock /* blocking */);
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
@@ -1,12 +0,0 @@
|
||||
diff --git a/browser/components/moz.build b/browser/components/moz.build
|
||||
index 6cbb7ce0037c1457eeae5c331a996719691ebd6b..611707852198740c9b4103f5e2a66e8ee4099a21 100644
|
||||
--- a/browser/components/moz.build
|
||||
+++ b/browser/components/moz.build
|
||||
@@ -27,6 +27,7 @@ with Files("controlcenter/**"):
|
||||
|
||||
|
||||
DIRS += [
|
||||
+ "zen-welcome",
|
||||
"about",
|
||||
"aboutlogins",
|
||||
"aboutwelcome",
|
@@ -939,11 +939,6 @@ Preferences.addAll([
|
||||
type: 'bool',
|
||||
default: true,
|
||||
},
|
||||
{
|
||||
id: 'zen.theme.pill-button',
|
||||
type: 'bool',
|
||||
default: true,
|
||||
},
|
||||
{
|
||||
id: 'zen.workspaces.hide-default-container-indicator',
|
||||
type: 'bool',
|
||||
|
@@ -81,13 +81,6 @@
|
||||
</hbox>
|
||||
|
||||
<groupbox id="zenThemeGroup" data-category="paneZenLooks" hidden="true" class="highlighting-group">
|
||||
<label><html:h2 data-l10n-id="zen-look-and-feel-buttons-header"/></label>
|
||||
<description class="description-deemphasized" data-l10n-id="zen-look-and-feel-buttons-description" />
|
||||
|
||||
<checkbox id="zenLooksAndFeelPilledButtons"
|
||||
data-l10n-id="zen-look-and-feel-pilled-buttons"
|
||||
preference="zen.theme.pill-button"/>
|
||||
|
||||
<label><html:h2 data-l10n-id="zen-look-and-feel-urlbar-header"/></label>
|
||||
<description class="description-deemphasized" data-l10n-id="zen-look-and-feel-urlbar-description" />
|
||||
|
||||
|
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/components/sessionstore/TabState.sys.mjs b/browser/components/sessionstore/TabState.sys.mjs
|
||||
index 8f7ed557e6aa61e7e16ed4a8d785ad5fe651b3d8..dc0fdf17952df397a684f8a1da2f71739d007350 100644
|
||||
index 8f7ed557e6aa61e7e16ed4a8d785ad5fe651b3d8..83bf443ca158c07e05075777da02b7f228d83dff 100644
|
||||
--- a/browser/components/sessionstore/TabState.sys.mjs
|
||||
+++ b/browser/components/sessionstore/TabState.sys.mjs
|
||||
@@ -84,6 +84,14 @@ class _TabState {
|
||||
@@ -84,6 +84,13 @@ class _TabState {
|
||||
tabData.groupId = tab.group.id;
|
||||
}
|
||||
|
||||
@@ -12,7 +12,6 @@ index 8f7ed557e6aa61e7e16ed4a8d785ad5fe651b3d8..dc0fdf17952df397a684f8a1da2f7173
|
||||
+ tabData.zenDefaultUserContextId = tab.getAttribute("zenDefaultUserContextId");
|
||||
+ tabData.zenPinnedEntry = tab.getAttribute("zen-pinned-entry");
|
||||
+ tabData.zenPinnedIcon = tab.getAttribute("zen-pinned-icon");
|
||||
+ tabData.zenHasStaticLabel = tab.getAttribute("zen-has-static-label");
|
||||
+
|
||||
tabData.searchMode = tab.ownerGlobal.gURLBar.getSearchMode(browser, true);
|
||||
|
||||
|
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/components/tabbrowser/content/tabbrowser.js b/browser/components/tabbrowser/content/tabbrowser.js
|
||||
index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..8f2cd9ecd708e58a6b162740bb21dafeda43b085 100644
|
||||
index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..e06b7ffb6c7769ad3f29e2c5aa05156a34fd7933 100644
|
||||
--- a/browser/components/tabbrowser/content/tabbrowser.js
|
||||
+++ b/browser/components/tabbrowser/content/tabbrowser.js
|
||||
@@ -406,11 +406,52 @@
|
||||
@@ -369,17 +369,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..8f2cd9ecd708e58a6b162740bb21dafe
|
||||
if (forceStandaloneTab && neighbor.group) {
|
||||
neighbor = neighbor.group;
|
||||
}
|
||||
@@ -5727,6 +5835,9 @@
|
||||
this.tabContainer.insertBefore(aTab, neighbor);
|
||||
}
|
||||
});
|
||||
+ if (aTab.hasAttribute("glance-id")) {
|
||||
+ this.moveTabTo(aTab.querySelector("tab[glance-id]"), aIndex, options);
|
||||
+ }
|
||||
}
|
||||
|
||||
moveTabToGroup(aTab, aGroup) {
|
||||
@@ -5802,7 +5913,7 @@
|
||||
@@ -5802,7 +5910,7 @@
|
||||
createLazyBrowser,
|
||||
};
|
||||
|
||||
@@ -388,7 +378,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..8f2cd9ecd708e58a6b162740bb21dafe
|
||||
if (aIndex < numPinned || (aTab.pinned && aIndex == numPinned)) {
|
||||
params.pinned = true;
|
||||
}
|
||||
@@ -7443,6 +7554,7 @@
|
||||
@@ -7443,6 +7551,7 @@
|
||||
aWebProgress.isTopLevel
|
||||
) {
|
||||
this.mTab.setAttribute("busy", "true");
|
||||
@@ -396,7 +386,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..8f2cd9ecd708e58a6b162740bb21dafe
|
||||
gBrowser._tabAttrModified(this.mTab, ["busy"]);
|
||||
this.mTab._notselectedsinceload = !this.mTab.selected;
|
||||
gBrowser.syncThrobberAnimations(this.mTab);
|
||||
@@ -8411,7 +8523,7 @@ var TabContextMenu = {
|
||||
@@ -8411,7 +8520,7 @@ var TabContextMenu = {
|
||||
);
|
||||
contextUnpinSelectedTabs.hidden =
|
||||
!this.contextTab.pinned || !multiselectionContext;
|
||||
@@ -405,7 +395,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..8f2cd9ecd708e58a6b162740bb21dafe
|
||||
// Move Tab items
|
||||
let contextMoveTabOptions = document.getElementById(
|
||||
"context_moveTabOptions"
|
||||
@@ -8444,7 +8556,7 @@ var TabContextMenu = {
|
||||
@@ -8444,7 +8553,7 @@ var TabContextMenu = {
|
||||
let contextMoveTabToStart = document.getElementById("context_moveToStart");
|
||||
let isFirstTab =
|
||||
tabsToMove[0] == visibleTabs[0] ||
|
||||
@@ -414,7 +404,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..8f2cd9ecd708e58a6b162740bb21dafe
|
||||
contextMoveTabToStart.disabled = isFirstTab && allSelectedTabsAdjacent;
|
||||
|
||||
document.getElementById("context_openTabInWindow").disabled =
|
||||
@@ -8677,6 +8789,7 @@ var TabContextMenu = {
|
||||
@@ -8677,6 +8786,7 @@ var TabContextMenu = {
|
||||
if (this.contextTab.multiselected) {
|
||||
gBrowser.removeMultiSelectedTabs();
|
||||
} else {
|
||||
|
@@ -1,7 +0,0 @@
|
||||
# Important notes!
|
||||
|
||||
Inside browser.js, we hardcoded-ly detect the path name for `zen-welcome` so we can add special attributes to the welcome page. If this path name changes, the welcome page will not work properly.
|
||||
|
||||
Make sure to update the path name in browser.js if you change the path name of `zen-welcome`.
|
||||
|
||||
The constant that contains this path name is `ZEN_WELCOME_PATH`.
|
@@ -1,9 +0,0 @@
|
||||
# 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/.
|
||||
|
||||
browser.jar:
|
||||
% content browser %content/browser/ contentaccessible=yes
|
||||
content/browser/zen-welcome/welcome.html (welcome.html)
|
||||
content/browser/zen-welcome/welcome.css (welcome.css)
|
||||
content/browser/zen-welcome/welcome.js (welcome.js)
|
@@ -1,4 +0,0 @@
|
||||
# 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/.
|
||||
JAR_MANIFESTS += ["jar.mn"]
|
@@ -1,451 +0,0 @@
|
||||
/*
|
||||
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/.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--noise: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEEAAABBCAMAAAC5KTl3AAAAgVBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtFS1lAAAAK3RSTlMWi3QSa1uQOKBWCTwcb6V4gWInTWYOqQSGfa6XLyszmyABlFFJXySxQ0BGn2PQBgAAC4NJREFUWMMV1kWO5UAQRdFk5kwzs/33v8Cunr7ZUehKAdaRUAse99ozDjF5BqswrPKm7btzJ2tRziN3rMYXC236humIV5Our7nHWnVdFOBojW2XVnkeu1IZHNJH5OPHj9TjgVxBGBwAAmp60WoA1gBBvg3XMFhxUQ4KuLqx0CritYZPPXinsOqB7I76+OHaZlPzLEcftrqOlOwjeXvuEuH6t6emkaofgVUDIb4fEZB6CmRAeFCTq11lxbAgUyx4rXkqlH9I4bTUDRRVD1xjbqb9HyUBn7rhtr1x+x9Y0e3BdX31/loYvZaLxqnjbRuokz+pPG7WebnSNKE3yE6Tka4aDEDMVYr6Neq126c+ZR2nzzm3yyiC7PGWG/1uueqZudrVGYNdsgOMDvt1cI8CXu63QIcPvYNY8z870WwYazTS7DqpDEknZqS0AFXObWUxTaw0q5pnHlq4oQImakpLfJkmErdvAfhsc7lod0DVT4tuob25C0tQjzdiFObCz7U7eaKGP3s6yQVgQ/y+q+nY6K5dfV75iXzcNlGIP38aj22sVwtWWKMRb7B5HoHPaBvI1Ve5TSXATi66vV6utxsV+aZNFu+93VvlrG/oj8Wp67YT8l+Oq6PjwdGatFm7SEAP13kE0y9CEcf9qhtEWCMIq5AGq71moEAI9vrmFcmO8+7ZyDnmRN/VUaFkM2ce8KuBGFzDMmY6myLfQGra2ofgHhbJRXuRDZ4H+HmliWBHXQ0ysLGfv6FetbxtxzRgIZWjIsGVFl5imPXeyvVyayNek+dSWzjXd4t310YBdaF8sXeKs481PjsXbAtIru2+wHbv3GVh3sQY6Dnu6pF3pZ714VYdDi9A5GkXR/6xgaZN/tpQ8wVV3zeBuB+njoBNE4wjc+uA523ysXGd/P2sntmOb3OdHNWP5OVrxD3eJHdtH8QVkEIAqCor3hReR96yqt6PkTQfenllooQ447h6tOrnnuzwA8fMpq+jqg1oW8fTYYIncAYpVeTvkEFr/khQSbjoE8ykx9049OkE5MQEO9lC24tT7DwThQgf4Fhf8nGgAo3GYaON3crODpOr2pu5dBABz69t7F5yJBBo+r6QJdeLDWEoO7r1tceR3haA7gc7eZrCvpxSXXeKpo4P+hRixo9DeOFbqQVjKyWfBg9pnrEZKzK7R437YTTwhfoySG/YOCt3fs4aXlU3FjKortqQ6XyXaD0+Y/8VoqpyU9TRW45eN4oBxAH8Y/jLnNXfELJW+/p/MgO9Z+mBli2qqAP7dV/Arc2+YZRZwtBW8/p32y5ZsEuCS4O5AAgfR7Dde7zhiGfgvurQkfAXIrUG61rmxc2EZo18ph4vaWZI+QM0JdsbNlBJlPlwf9uguujQJy0j7TgTHdtRnjybTg55Hkk9S6l2rpYahumSewKHVosa1bh2Y6r9JGkdKvIDN/eeAwScrfjoLkCxWJuFZQ53FNP5w9XbQd1HhgHcVB/0fATG3sUUid1RTfc2+7pZVKldFSsaEK0v4k90tapQOk2HIbMhaJQtrUEL5+3sDanh8sOpbYRoQoqXWu6SQcUTQL9jzOrXNPWCJwXge4U7tlU1hkF012cAmvp8llQxf1IEMcw14pURxVOWATz4ITnYQjuF+vDXg5hgoiqXzO6mS91FQUBheURHIJxUeU1i3P0WOMpsm7vFYk0JJi/Ev+X3FwYD69cARPuP5GIc0PxoAFjcLRbNur0iMTrQmBBNYJ2ngU4x7SWfdTRl52Bqv7LmYW3C1CyTCPTHeWWIAM/Whm32COHsaj+2UQ739XB9t6NV0o9E9b7CW3XNiXzi9e0KiE+3rntukdIDBWrU2jsfQWuyFJRANxq8StHVv1JPy2C3Byco7qdNbASrnNXZ8G0L/Wp/pif4Ai9aEZ9Bb+TRx+REBdGlkF/s0dUdMSMr+6YCbuGxqPWdzcdqutvqkBzCksFcwAtjf55TeuH79M6AQa7r5PLeXxMFIlQKrXP9VJ275WGX+ptpf+tvTDBsecPnYQAlAWrVbRVJ7K2pRHwIjtSpbX96Y/lbKk6ZWXlBmh15r8yAWQsYxXgBOXYMAfHnUXF+rDqnB8bXDRtAn7bCziIqetSboK3NexMePvsCRLvmsoREA+kH8j4HWFpnNEaWgOmR7xyXHfTaz3slHc/YA6H6tl/L8d5tPcIwwD0tjvRaq3Y5BmYBSDClpv0VIX4s8D0XK3sPdpAb94HjPLkgboEz9EdZATW6ZdcmQvtKUwoWw+nAVKA7IcdY1UHnvNnIBplKci+knzewLz5/GGnzkGuuGky+0LTjtGBGR85EQICDqKChnm5pH3Z44nnWAk1YRdyu3g7QoFZ0h8jkr2ffjKmi+Qvsp+9GvNGZHmgW+YQAGUw7PPt8IPKbdy432vhKtRJjKWcSqq7helj81o3nfmaxVZ7Sqie8OOBk9WsyTD/ab7fQ5aWwQeJvnH6+ayo4IdIkOSBJjzXkgr+1TPhAx1AXDsxtCCj3TzQTLA1p782f7a8vdgPfwwrXmZxxbqo2h+6Zlo6mcMY4V7cFBOLm17VCvx9Qa2tAnkxEB+KYyQgbgAAnmNDOdOO6y2Cb+lke1MWQc9o+EMdQf7ubIG3Ek8GZ4k1PtGjbhwgOMPp5Em59JMVk/jU8/aF73Xcrd3UBNZyueQu0/xz2aGtZT8CRziOax2BWFXaeDzgZNV7oRtUzFoijoETf3xkAFFk3OMb7SgPh5wxU1+MygDIp9gZChH2qEcpgLh8pBIK90PXT1ZSU+ZExFK4Vm4GL/J7+K13lS5dQkW4HQwl6GX4yLqu8GhGWS2k75yel5IZIfFNdAL0NpKr2N5dQesBnxa42DLgJd6agS1jJsp1mO1dip7PU4P6diLLoTsZ4m3Q0QweiqeFfIGPLgF6v6mSVv6xe85VBD/1Mpe3AurRbcJ9SEo8NszNVy8rOCEexyIFcJRvYAlI/wk2I7r3p60FFLQXoH2q9xri/m41svRPbW0/EnPn2DWsmk0IiPpB60aa3+hiFfWuC8ZvWKEd9LxAk3HcOof6d77RewPaPsGw5lQAHcZN2vx1448u9pLfMLGQ3BSRRjBzRhKt7HcCw/7aqjtCDs5q76b4ZGphxN2th1WeXYlfnozX3ebKtX4Te11hf1tZP1diiGjIDAB1cR4Sb9rcFPC/nBARjlgDxd+tCBb1t91j71xJcgGjT3g/dUFnXXNiDrxkyoHANPk58ACPUa42hj8tgGrhiXOCmygxFZBiT2wyAJTDJ4wJEPmp6JIrDaSWYNqv4xH2wwdSTGYb3E0pXnS39nmLUsqoVZxzSoegqzd0o06wdbTXsaHGL+IF4JtIcXddTcD/dCd8hVf+fWPSV553kjMmMEULLS8HcgmptDO955dLGX78PjiDA6IsTHPm5IA6bc5ha0gaGkoEttXuxU11B2dOJ65/Q08tEF1+Y9cr2Nh/VECfQ33GyvR/gsdN1LuIeLpKMCAF2yRr769g9/4aJLZNRI71m2S91+Kp+Q0zubTcxoG2/6gm1Q79wkMj2XNO2ui7nWw8ULtu27CCvqTGX2PffD+xcwgh/TrOKvGZMM5jRFGDTn4NO/lwnDR/GY/waDZtkWDUPI0O8ztcFVqp6r2ZW+2bvkJ3raptYagFqu95VdIaml2CIp6CKets34x+fH2C+zH4cVFO7vj+6k2FU39PtRhWluYeZ3gDz1TLB9K2v7SD9gJU1qDxoRDrAWcrFGLyndhdtd0505+gEP79adK8fmFCWNYC+ahzVNcRH79E8dA1iqX/N0qq22xcOc20ALxLDspEj4QCFBQMgaIwoKbxr0Bd7Sbws6GiRK6tqoPfpiCle23axejRLyO1I+ahsEpWrzT5ZsCyS5RcY9jMfENFxSnhKsrfW8JHH6/rdQUMfmQPT3Uz9gY0C/pu1yuCnrPUvio0a1qMEosA/EwIzzid7cqsAAAAASUVORK5CYII=');
|
||||
}
|
||||
|
||||
html {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
body {
|
||||
display: flex;
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
body {
|
||||
background: var(--zen-branding-bg);
|
||||
}
|
||||
|
||||
#main-view {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
width: fit-content;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
#welcome .zen-branding-title,
|
||||
#thanks .zen-branding-title {
|
||||
text-align: center;
|
||||
font-size: 7rem;
|
||||
}
|
||||
|
||||
#buttons-footer {
|
||||
margin-top: auto;
|
||||
padding: 20px 0;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
z-index: 2;
|
||||
|
||||
& button {
|
||||
opacity: 0;
|
||||
animation: fadeIn 0.5s ease-in-out forwards;
|
||||
animation-delay: 0.8s;
|
||||
}
|
||||
|
||||
& button:nth-child(2) {
|
||||
animation-delay: 1s;
|
||||
}
|
||||
}
|
||||
|
||||
body:has(:is(#welcome, #thanks):not([hidden='true'])) {
|
||||
& #buttons-footer {
|
||||
justify-content: center;
|
||||
position: fixed;
|
||||
bottom: 40px;
|
||||
margin: 0 auto;
|
||||
|
||||
& button {
|
||||
background: var(--zen-branding-paper) !important;
|
||||
color: var(--zen-branding-dark) !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
:is(#theme, #search) > div:nth-child(2) {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#main-view:has(:is(#welcome, #thanks):not([hidden='true'])) {
|
||||
width: 100%;
|
||||
|
||||
& #back {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
button {
|
||||
padding: 8px;
|
||||
border-radius: 999px;
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
button.primary {
|
||||
background: var(--zen-branding-bg-reverse) !important;
|
||||
color: var(--zen-branding-bg) !important;
|
||||
transition: background 0.2s ease-in-out;
|
||||
|
||||
&:hover {
|
||||
background: color-mix(in srgb, var(--zen-branding-bg-reverse) 80%, transparent 20%) !important;
|
||||
}
|
||||
}
|
||||
|
||||
.page {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
width: -moz-available;
|
||||
align-items: center;
|
||||
margin: 32px;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 17px;
|
||||
font-weight: 600;
|
||||
margin: 35px 0 20px 0;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.page-split:not([hidden='true']) {
|
||||
flex-direction: column;
|
||||
margin: auto;
|
||||
justify-content: start;
|
||||
}
|
||||
|
||||
.page-split:not(#import, #theme) > div:first-child {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
:not(#theme) .card h3 {
|
||||
margin: auto;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#theme {
|
||||
& > div:first-child p {
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
}
|
||||
|
||||
#theme .card[disabled='true'] {
|
||||
opacity: 0.7;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.cardGroup {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: stretch;
|
||||
gap: 8px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.cardGroup .card {
|
||||
width: 140px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
align-content: space-between;
|
||||
border: 2px solid transparent !important;
|
||||
transition: all 0.1s ease-in-out !important;
|
||||
margin: 0 10px;
|
||||
border-radius: 7px;
|
||||
outline: none !important;
|
||||
cursor: auto;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.cardGroup .card.selected {
|
||||
border: 2px solid var(--zen-colors-primary) !important;
|
||||
transform: scale(1.1);
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 32px;
|
||||
font-weight: 700;
|
||||
margin: 16px 0 5px 0;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.page > div:nth-child(2) h1 {
|
||||
margin-bottom: 15px;
|
||||
margin-top: 10px;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
p {
|
||||
font-size: 16px;
|
||||
opacity: 0.8;
|
||||
margin: 0;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
#zen-logo {
|
||||
-moz-context-properties: fill;
|
||||
fill: currentColor;
|
||||
display: inline-block;
|
||||
height: 42px;
|
||||
width: 42px;
|
||||
position: absolute;
|
||||
top: 40px;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
}
|
||||
|
||||
.asset {
|
||||
width: 500px;
|
||||
padding-bottom: 32px;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: light) {
|
||||
.dark-only {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
.light-only {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
input[type='checkbox'] {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
#importNext {
|
||||
margin-left: 30px;
|
||||
color: var(--in-content-primary-button-background);
|
||||
}
|
||||
|
||||
#themeNext,
|
||||
#searchNext,
|
||||
#thanksNext {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.page[hidden='true'] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.page:not([hidden='true']) {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.page:not([hidden='true']) > *:not(:has(.delay-animation)),
|
||||
.delay-animation,
|
||||
.delay-animation-2 {
|
||||
opacity: 0;
|
||||
animation: fadeIn 0.5s ease-in-out forwards;
|
||||
}
|
||||
|
||||
#importBrowser {
|
||||
width: 100%;
|
||||
background: transparent !important;
|
||||
border: 1px solid var(--zen-branding-bg-reverse);
|
||||
color: var(--zen-branding-bg-reverse);
|
||||
padding: 16px;
|
||||
border-radius: 8px;
|
||||
margin-bottom: 20px;
|
||||
justify-content: start;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
#layout {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#layoutList {
|
||||
display: flex;
|
||||
gap: 20px;
|
||||
|
||||
& > [layout] {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 3px;
|
||||
font-weight: 600;
|
||||
cursor: pointer;
|
||||
|
||||
&[disabled='true'] {
|
||||
opacity: 0.7;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
& img {
|
||||
width: 250px;
|
||||
border-radius: 10px;
|
||||
border: 4px solid transparent;
|
||||
}
|
||||
|
||||
&.selected img {
|
||||
border: 4px solid var(--zen-colors-primary);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes fadeIn {
|
||||
from {
|
||||
opacity: 0;
|
||||
transform: translate3d(0, 40px, 0);
|
||||
filter: blur(15px);
|
||||
}
|
||||
|
||||
to {
|
||||
opacity: 1;
|
||||
filter: blur(0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
/* There should be no more than 5 elements in a page */
|
||||
.page:not([hidden='true']) > *:nth-child(2):not(:has(.delay-animation)) {
|
||||
animation-delay: 0.2s;
|
||||
}
|
||||
.page:not([hidden='true']) > *:nth-child(3),
|
||||
.delay-animation:nth-child(1) {
|
||||
animation-delay: 0.4s;
|
||||
}
|
||||
.page:not([hidden='true']) > *:nth-child(4),
|
||||
.delay-animation:nth-child(2) {
|
||||
animation-delay: 0.6s;
|
||||
}
|
||||
.page:not([hidden='true']) > *:nth-child(5),
|
||||
.delay-animation:nth-child(3),
|
||||
.delay-animation-2:nth-child(1) {
|
||||
animation-delay: 0.8s;
|
||||
}
|
||||
|
||||
.page:not([hidden='true']) > *:nth-child(6),
|
||||
.delay-animation:nth-child(4),
|
||||
.delay-animation-2:nth-child(2) {
|
||||
animation-delay: 1s;
|
||||
}
|
||||
|
||||
#welcome {
|
||||
& h1 {
|
||||
animation-duration: 0.8s !important;
|
||||
}
|
||||
}
|
||||
|
||||
.card h3 {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
#circular-progress {
|
||||
--size: 220px;
|
||||
--half-size: calc(var(--size) / 2);
|
||||
--stroke-width: 20px;
|
||||
--radius: calc((var(--size) - var(--stroke-width)) / 2);
|
||||
--circumference: calc(var(--radius) * pi * 2);
|
||||
--dash: calc((var(--progress) * var(--circumference)) / 100);
|
||||
position: absolute;
|
||||
top: 15px;
|
||||
right: 10px;
|
||||
width: 55px;
|
||||
height: 40px;
|
||||
}
|
||||
|
||||
#circular-progress circle {
|
||||
cx: var(--half-size);
|
||||
cy: var(--half-size);
|
||||
r: var(--radius);
|
||||
stroke-width: var(--stroke-width);
|
||||
fill: none;
|
||||
stroke-linecap: round;
|
||||
}
|
||||
|
||||
#circular-progress circle.bg {
|
||||
stroke: transparent;
|
||||
}
|
||||
|
||||
#circular-progress circle.fg {
|
||||
transform: rotate(-90deg);
|
||||
transform-origin: var(--half-size) var(--half-size);
|
||||
stroke-dasharray: var(--dash) calc(var(--circumference) - var(--dash));
|
||||
transition: stroke-dasharray 0.3s linear 0s;
|
||||
stroke: var(--zen-branding-coral);
|
||||
}
|
||||
|
||||
#colorListWrapper {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
#colorListWrapper > div {
|
||||
border-radius: 999px;
|
||||
height: 20px;
|
||||
width: 20px;
|
||||
border: 3px solid transparent;
|
||||
margin: 0 5px;
|
||||
}
|
||||
|
||||
#colorListWrapper > div.selected {
|
||||
border: 3px solid light-dark(#000, #fff);
|
||||
}
|
||||
|
||||
#welcome,
|
||||
#thanks {
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
#themeList {
|
||||
display: flex;
|
||||
flex-wrap: nowrap;
|
||||
}
|
||||
|
||||
#themeList > svg {
|
||||
border: 3px solid transparent;
|
||||
border-radius: 15px;
|
||||
height: -moz-available;
|
||||
}
|
||||
|
||||
#themeList > svg.selected {
|
||||
border: 3px solid var(--zen-colors-primary);
|
||||
}
|
||||
|
||||
#searchList.cardGroup {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 15px;
|
||||
}
|
||||
|
||||
#searchList .card {
|
||||
width: -moz-available !important;
|
||||
margin: 0;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
border-radius: 15px;
|
||||
|
||||
& h3 {
|
||||
text-align: start;
|
||||
margin: 0;
|
||||
margin-left: 20px;
|
||||
}
|
||||
|
||||
&.selected {
|
||||
transform: scale(1.01);
|
||||
}
|
||||
|
||||
& img {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
border-radius: 15px;
|
||||
}
|
||||
}
|
@@ -1,186 +0,0 @@
|
||||
<!--
|
||||
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/.
|
||||
-->
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta name="color-scheme" content="light dark">
|
||||
<meta name="referrer" content="no-referrer" />
|
||||
|
||||
<linkset>
|
||||
<link
|
||||
rel="stylesheet"
|
||||
type="text/css"
|
||||
href="chrome://global/skin/in-content/common.css"
|
||||
/>
|
||||
<link rel="stylesheet" href="chrome://global/skin/global.css" />
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="chrome://browser/content/zen-welcome/welcome.css"
|
||||
/>
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="chrome://browser/content/zen-styles/zen-branding.css"
|
||||
/>
|
||||
|
||||
<link rel="localization" href="branding/brand.ftl" />
|
||||
<link rel="localization" href="browser/zen-welcome.ftl" />
|
||||
</linkset>
|
||||
|
||||
<script src="chrome://browser/content/zenThemeModifier.js"></script>
|
||||
</head>
|
||||
<body class="gradient-background">
|
||||
<img id="zen-logo" src="chrome://branding/content/about-logo.png" />
|
||||
<div id="main-view">
|
||||
<div class="page" id="welcome">
|
||||
<h1 class="zen-branding-title" data-l10n-id="welcome-dialog-welcome-title-part-1"></h1>
|
||||
<h1 class="zen-branding-title" data-l10n-id="welcome-dialog-welcome-title-part-2"></h1>
|
||||
</div>
|
||||
|
||||
<div class="page page-split" id="import">
|
||||
<div>
|
||||
<h1 data-l10n-id="welcome-dialog-import"></h1>
|
||||
<p data-l10n-id="welcome-dialog-import-subtext"></p>
|
||||
</div>
|
||||
<button
|
||||
id="importBrowser"
|
||||
data-l10n-id="welcome-dialog-import-action"
|
||||
></button>
|
||||
</div>
|
||||
|
||||
<div class="page page-split" id="theme">
|
||||
<div>
|
||||
<h1 data-l10n-id="welcome-dialog-theme"></h1>
|
||||
<p data-l10n-id="welcome-dialog-theme-subtext"></p>
|
||||
</div>
|
||||
<div>
|
||||
<h2 data-l10n-id="welcome-dialog-theme-header-1" class="delay-animation"></h2>
|
||||
<div id="colorListWrapper" class="delay-animation">
|
||||
</div>
|
||||
<h2 data-l10n-id="welcome-dialog-theme-header-2" class="delay-animation"></h2>
|
||||
<div id="themeList" class="cardGroup">
|
||||
<svg viewBox="0 0 700 700" fill="none" xmlns="http://www.w3.org/2000/svg" class="delay-animation-2">
|
||||
<g clip-path="url(#clip0_404_2706)">
|
||||
<rect width="700" height="700" fill="#F4F4F4"/>
|
||||
<g filter="url(#filter0_d_404_2706)">
|
||||
<path d="M107 130C107 103.49 128.49 82 155 82H700V738H107V130Z" fill="white"/>
|
||||
<path d="M155 82.5H699.5V737.5H107.5V130C107.5 103.766 128.766 82.5 155 82.5Z" stroke="black" stroke-opacity="0.2"/>
|
||||
</g>
|
||||
<mask id="path-3-inside-1_404_2706" fill="white">
|
||||
<path d="M257 83H700V701H257V83Z"/>
|
||||
</mask>
|
||||
<path d="M257 83H700V701H257V83Z" fill="#F1F1F1"/>
|
||||
<path d="M258 701V83H256V701H258Z" fill="black" fill-opacity="0.1" mask="url(#path-3-inside-1_404_2706)"/>
|
||||
</g>
|
||||
<defs>
|
||||
<filter id="filter0_d_404_2706" x="103" y="82" width="601" height="664" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset dy="4"/>
|
||||
<feGaussianBlur stdDeviation="2"/>
|
||||
<feComposite in2="hardAlpha" operator="out"/>
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/>
|
||||
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_404_2706"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_404_2706" result="shape"/>
|
||||
</filter>
|
||||
<clipPath id="clip0_404_2706">
|
||||
<rect width="700" height="700" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
<svg viewBox="0 0 700 700" fill="none" xmlns="http://www.w3.org/2000/svg" class="delay-animation-2">
|
||||
<g clip-path="url(#clip0_404_2709)">
|
||||
<rect width="700" height="700" fill="#515151"/>
|
||||
<g filter="url(#filter0_d_404_2709)">
|
||||
<path d="M107 130C107 103.49 128.49 82 155 82H700V727H107V130Z" fill="#717171"/>
|
||||
<path d="M155 82.5H699.5V726.5H107.5V130C107.5 103.766 128.766 82.5 155 82.5Z" stroke="white" stroke-opacity="0.57"/>
|
||||
</g>
|
||||
<mask id="path-3-inside-1_404_2709" fill="white">
|
||||
<path d="M257 83H700V701H257V83Z"/>
|
||||
</mask>
|
||||
<path d="M257 83H700V701H257V83Z" fill="#565656"/>
|
||||
<path d="M258 701V83H256V701H258Z" fill="black" fill-opacity="0.1" mask="url(#path-3-inside-1_404_2709)"/>
|
||||
</g>
|
||||
<defs>
|
||||
<filter id="filter0_d_404_2709" x="103" y="82" width="601" height="653" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset dy="4"/>
|
||||
<feGaussianBlur stdDeviation="2"/>
|
||||
<feComposite in2="hardAlpha" operator="out"/>
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/>
|
||||
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_404_2709"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_404_2709" result="shape"/>
|
||||
</filter>
|
||||
<clipPath id="clip0_404_2709">
|
||||
<rect width="700" height="700" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="page page-split" id="layout">
|
||||
<div>
|
||||
<h1 data-l10n-id="welcome-dialog-layout"></h1>
|
||||
<p data-l10n-id="welcome-dialog-layout-subtext"></p>
|
||||
</div>
|
||||
<div id="layoutList" class="cardGroup">
|
||||
<hbox layout="single" class="selected delay-animation">
|
||||
<img src="chrome://browser/content/zen-images/layouts/single-toolbar.png" />
|
||||
<p data-l10n-id="welcome-dialog-layout-single-toolbar"></p>
|
||||
</hbox>
|
||||
<hbox layout="multiple" class="delay-animation">
|
||||
<img src="chrome://browser/content/zen-images/layouts/multiple-toolbar.png" />
|
||||
<p data-l10n-id="welcome-dialog-layout-multiple-toolbar"></p>
|
||||
</hbox>
|
||||
<hbox layout="collapsed" class="delay-animation">
|
||||
<img src="chrome://browser/content/zen-images/layouts/collapsed.png" />
|
||||
<p data-l10n-id="welcome-dialog-layout-collapsed-toolbar"></p>
|
||||
</hbox>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="page page-split" id="search">
|
||||
<div>
|
||||
<h1 data-l10n-id="welcome-dialog-search"></h1>
|
||||
<p data-l10n-id="welcome-dialog-search-subtext"></p>
|
||||
</div>
|
||||
<div>
|
||||
<div id="searchList" class="cardGroup"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="page" id="thanks">
|
||||
<h1 class="zen-branding-title" data-l10n-id="welcome-dialog-thanks-title-part-1"></h1>
|
||||
<h1 class="zen-branding-title" data-l10n-id="welcome-dialog-thanks-title-part-2"></h1>
|
||||
</div>
|
||||
<div id="buttons-footer">
|
||||
<button
|
||||
id="back"
|
||||
data-l10n-id="welcome-dialog-back-action"
|
||||
disabled
|
||||
></button>
|
||||
<button
|
||||
id="next"
|
||||
class="primary"
|
||||
data-l10n-id="welcome-dialog-next-action"
|
||||
></button>
|
||||
</div>
|
||||
</div>
|
||||
<svg
|
||||
width="250" height="250" viewBox="0 0 250 250"
|
||||
id="circular-progress" style="--progress: 50"
|
||||
>
|
||||
<circle class="bg"></circle>
|
||||
<circle class="fg"></circle>
|
||||
</svg>
|
||||
|
||||
<script src="./welcome.js"></script>
|
||||
<script src="chrome://browser/content/contentTheme.js"></script>
|
||||
</body>
|
||||
</html>
|
@@ -1,354 +0,0 @@
|
||||
// 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/.
|
||||
const { XPCOMUtils } = ChromeUtils.import('resource://gre/modules/XPCOMUtils.jsm');
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetters(this, {
|
||||
AddonManager: 'resource://gre/modules/AddonManager.jsm',
|
||||
MigrationUtils: 'resource:///modules/MigrationUtils.jsm',
|
||||
});
|
||||
|
||||
ChromeUtils.defineModuleGetter(this, 'ExtensionSettingsStore', 'resource://gre/modules/ExtensionSettingsStore.jsm');
|
||||
|
||||
Services.scriptloader.loadSubScript('chrome://browser/content/ZenUIManager.mjs');
|
||||
|
||||
const kWelcomeSeenPref = 'zen.welcome-screen.seen';
|
||||
|
||||
// =============================================================================
|
||||
// Util stuff copied from browser/components/preferences/search.js
|
||||
|
||||
class EngineStore {
|
||||
constructor() {
|
||||
this._engines = [];
|
||||
}
|
||||
|
||||
async init() {
|
||||
const visibleEngines = await Services.search.getVisibleEngines();
|
||||
this.initSpecificEngine(visibleEngines);
|
||||
}
|
||||
|
||||
getEngine() {
|
||||
return this._engines;
|
||||
}
|
||||
|
||||
initSpecificEngine(engines) {
|
||||
for (const engine of engines) {
|
||||
try {
|
||||
this._engines.push(this._cloneEngine(engine));
|
||||
} catch (e) {
|
||||
// Ignore engines that throw an exception when cloning.
|
||||
console.error(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
getEngineByName(name) {
|
||||
return this._engines.find((engine) => engine.name == name);
|
||||
}
|
||||
|
||||
_cloneEngine(aEngine) {
|
||||
const clonedObj = {};
|
||||
|
||||
for (const i of ['name', 'alias', '_iconURI', 'hidden']) {
|
||||
clonedObj[i] = aEngine[i];
|
||||
}
|
||||
|
||||
clonedObj.originalEngine = aEngine;
|
||||
|
||||
return clonedObj;
|
||||
}
|
||||
|
||||
async getDefaultEngine() {
|
||||
let engineName = await Services.search.getDefault();
|
||||
return this.getEngineByName(engineName._name);
|
||||
}
|
||||
|
||||
async setDefaultEngine(engine) {
|
||||
await Services.search.setDefault(engine.originalEngine, Ci.nsISearchService.CHANGE_REASON_USER);
|
||||
}
|
||||
}
|
||||
|
||||
// =============================================================================
|
||||
|
||||
const sleep = (duration) => new Promise((resolve) => setTimeout(resolve, duration));
|
||||
|
||||
class Page {
|
||||
/**
|
||||
* A basic controller for individual pages
|
||||
* @param {string} id The id of the element that represents this page.
|
||||
*/
|
||||
constructor(id) {
|
||||
this.element = document.getElementById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {Pages} pages The pages wrapper
|
||||
*/
|
||||
setPages(pages) {
|
||||
this.pages = pages;
|
||||
}
|
||||
|
||||
hide() {
|
||||
this.element.setAttribute('hidden', 'true');
|
||||
}
|
||||
|
||||
show() {
|
||||
this.element.removeAttribute('hidden');
|
||||
}
|
||||
}
|
||||
|
||||
class Themes extends Page {
|
||||
constructor(id) {
|
||||
super(id);
|
||||
|
||||
this.loadThemes();
|
||||
}
|
||||
|
||||
async loadThemes() {
|
||||
window.addEventListener('DOMContentLoaded', this.setColorBar);
|
||||
await sleep(1000);
|
||||
|
||||
const themes = (await AddonManager.getAddonsByTypes(['theme'])).filter((theme) => theme.id !== 'default-theme@mozilla.org');
|
||||
const themeList = document.getElementById('themeList');
|
||||
|
||||
const themeElements = ['firefox-compact-light@mozilla.org', 'firefox-compact-dark@mozilla.org'];
|
||||
|
||||
themeElements.forEach((theme, i) => {
|
||||
let container = themeList.children[i];
|
||||
container.addEventListener(
|
||||
'click',
|
||||
(() => {
|
||||
if (container.hasAttribute('disabled')) {
|
||||
return;
|
||||
}
|
||||
for (const el of themeList.children) {
|
||||
el.classList.remove('selected');
|
||||
}
|
||||
container.classList.add('selected');
|
||||
themes.find((t) => t.id === theme).enable();
|
||||
}).bind(this, i, container, theme)
|
||||
);
|
||||
if (themes.find((t) => t.id === theme).isActive) {
|
||||
container.classList.add('selected');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
setColorBar() {
|
||||
const colorList = document.getElementById('colorListWrapper');
|
||||
const colors = ['#aac7ff', '#74d7cb', '#a0d490', '#dec663', '#ffb787', '#ffb1c0', '#ddbfc3', '#f6b0ea', '#d4bbff'];
|
||||
|
||||
colors.forEach((color) => {
|
||||
const container = document.createElement('div');
|
||||
container.classList.add('color');
|
||||
container.style.backgroundColor = color;
|
||||
container.setAttribute('data-color', color);
|
||||
container.addEventListener(
|
||||
'click',
|
||||
(() => {
|
||||
Services.prefs.setStringPref('zen.theme.accent-color', color);
|
||||
colorList.querySelectorAll('.selected').forEach((el) => el.classList.remove('selected'));
|
||||
container.classList.add('selected');
|
||||
}).bind(this, color, container)
|
||||
);
|
||||
|
||||
colorList.appendChild(container);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
class Layout extends Page {
|
||||
constructor(id) {
|
||||
super(id);
|
||||
|
||||
this.loadLayouts();
|
||||
}
|
||||
|
||||
loadLayouts() {
|
||||
const kExtendedSidebar = 'zen.view.sidebar-expanded';
|
||||
const kSingleToolbar = 'zen.view.use-single-toolbar';
|
||||
|
||||
for (const layout of document.getElementById('layoutList').children) {
|
||||
layout.addEventListener('click', () => {
|
||||
if (layout.hasAttribute('disabled')) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (const el of document.getElementById('layoutList').children) {
|
||||
el.classList.remove('selected');
|
||||
}
|
||||
|
||||
layout.classList.add('selected');
|
||||
|
||||
Services.prefs.setBoolPref(kExtendedSidebar, layout.getAttribute('layout') != 'collapsed');
|
||||
Services.prefs.setBoolPref(kSingleToolbar, layout.getAttribute('layout') == 'single');
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class Thanks extends Page {
|
||||
constructor(id) {
|
||||
super(id);
|
||||
|
||||
// Thanks :)
|
||||
}
|
||||
}
|
||||
|
||||
class Search extends Page {
|
||||
constructor(id) {
|
||||
super(id);
|
||||
|
||||
this.store = new EngineStore();
|
||||
this.searchList = [];
|
||||
|
||||
this.loadSearch();
|
||||
}
|
||||
|
||||
async loadSearch() {
|
||||
await sleep(1100);
|
||||
await this.store.init();
|
||||
|
||||
const defaultEngine = await Services.search.getDefault();
|
||||
|
||||
const searchElements = document.getElementById('searchList');
|
||||
|
||||
this.store.getEngine().forEach(async (search) => {
|
||||
const container = await this.loadSpecificSearch(search, defaultEngine);
|
||||
|
||||
searchElements.appendChild(container);
|
||||
this.searchList.push(container);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {HTMLDivElement}
|
||||
*/
|
||||
async loadSpecificSearch(search, defaultSearch) {
|
||||
const container = document.createElement('div');
|
||||
container.classList.add('card');
|
||||
container.classList.add('card-no-hover');
|
||||
|
||||
if (search.name == defaultSearch._name) {
|
||||
container.classList.add('selected');
|
||||
}
|
||||
|
||||
container.addEventListener('click', () => {
|
||||
this.searchList.forEach((el) => el.classList.remove('selected'));
|
||||
container.classList.add('selected');
|
||||
this.store.setDefaultEngine(search);
|
||||
});
|
||||
|
||||
const img = document.createElement('img');
|
||||
img.src = await search.originalEngine.getIconURL();
|
||||
|
||||
const name = document.createElement('h3');
|
||||
name.textContent = search.name;
|
||||
|
||||
container.appendChild(img);
|
||||
container.appendChild(name);
|
||||
|
||||
return container;
|
||||
}
|
||||
}
|
||||
|
||||
class Import extends Page {
|
||||
constructor(id) {
|
||||
super(id);
|
||||
|
||||
const importButton = document.getElementById('importBrowser');
|
||||
importButton.addEventListener('click', async () => {
|
||||
MigrationUtils.showMigrationWizard(window, {
|
||||
zenBlocking: true,
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
class Pages {
|
||||
/**
|
||||
* A wrapper around all pages
|
||||
* @param {Page[]} pages The pages
|
||||
*/
|
||||
constructor(pages) {
|
||||
this.pages = pages;
|
||||
this.currentPage = 0;
|
||||
|
||||
this.pages.forEach((page) => page.setPages(this));
|
||||
|
||||
this._displayCurrentPage();
|
||||
|
||||
this.nextEl = document.getElementById(`next`);
|
||||
this.prevEl = document.getElementById(`back`);
|
||||
|
||||
this.nextEl.addEventListener('click', () => {
|
||||
this.next();
|
||||
this.prevEl.removeAttribute('disabled');
|
||||
});
|
||||
|
||||
this.prevEl.addEventListener('click', () => {
|
||||
this.currentPage--;
|
||||
this._displayCurrentPage();
|
||||
if (this.pages.currentPage === 1) {
|
||||
this.prevEl.setAttribute('disabled', 'true');
|
||||
}
|
||||
|
||||
for (const button of document.getElementById('buttons-footer').children) {
|
||||
button.style.display = 'none';
|
||||
// Re-animate the buttons
|
||||
setTimeout(() => {
|
||||
button.style.removeProperty('display');
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
next() {
|
||||
this.currentPage++;
|
||||
document.getElementById('main-view').setAttribute('data-page', this.currentPage);
|
||||
|
||||
if (this.currentPage >= this.pages.length) {
|
||||
// We can use internal js apis to close the window. We also want to set
|
||||
// the settings api for welcome seen to false to stop it showing again
|
||||
|
||||
Services.prefs.setBoolPref(kWelcomeSeenPref, true);
|
||||
|
||||
close();
|
||||
return;
|
||||
}
|
||||
|
||||
for (const button of document.getElementById('buttons-footer').children) {
|
||||
button.style.display = 'none';
|
||||
// Re-animate the buttons
|
||||
setTimeout(() => {
|
||||
button.style.removeProperty('display');
|
||||
});
|
||||
}
|
||||
|
||||
this._displayCurrentPage();
|
||||
}
|
||||
|
||||
_displayCurrentPage() {
|
||||
let progress = document.getElementById('circular-progress');
|
||||
progress.style.setProperty('--progress', ((this.currentPage + 1) / this.pages.length) * 100);
|
||||
for (const page of this.pages) {
|
||||
page.hide();
|
||||
}
|
||||
if (this.currentPage >= 1) {
|
||||
document.body.classList.remove('gradient-background');
|
||||
} else {
|
||||
document.body.classList.add('gradient-background');
|
||||
}
|
||||
this.pages[this.currentPage].show();
|
||||
}
|
||||
}
|
||||
|
||||
const pages = new Pages([
|
||||
new Page('welcome'),
|
||||
new Themes('theme'),
|
||||
new Layout('layout'),
|
||||
new Import('import'),
|
||||
new Search('search'),
|
||||
new Thanks('thanks'),
|
||||
]);
|
@@ -1,134 +1,395 @@
|
||||
|
||||
skin/classic/browser/zen-icons/accessibility.svg (../shared/zen-icons/accessibility.svg)
|
||||
skin/classic/browser/zen-icons/add-to-dictionary.svg (../shared/zen-icons/add-to-dictionary.svg)
|
||||
skin/classic/browser/zen-icons/arrow-down.svg (../shared/zen-icons/arrow-down.svg)
|
||||
skin/classic/browser/zen-icons/arrow-left.svg (../shared/zen-icons/arrow-left.svg)
|
||||
skin/classic/browser/zen-icons/arrow-right.svg (../shared/zen-icons/arrow-right.svg)
|
||||
skin/classic/browser/zen-icons/arrow-up.svg (../shared/zen-icons/arrow-up.svg)
|
||||
skin/classic/browser/zen-icons/audio-save.svg (../shared/zen-icons/audio-save.svg)
|
||||
skin/classic/browser/zen-icons/autoplay-media-blocked.svg (../shared/zen-icons/autoplay-media-blocked.svg)
|
||||
skin/classic/browser/zen-icons/autoplay-media.svg (../shared/zen-icons/autoplay-media.svg)
|
||||
skin/classic/browser/zen-icons/back.svg (../shared/zen-icons/back.svg)
|
||||
skin/classic/browser/zen-icons/bookmark-hollow.svg (../shared/zen-icons/bookmark-hollow.svg)
|
||||
skin/classic/browser/zen-icons/bookmark-star-on-tray.svg (../shared/zen-icons/bookmark-star-on-tray.svg)
|
||||
skin/classic/browser/zen-icons/bookmark.svg (../shared/zen-icons/bookmark.svg)
|
||||
skin/classic/browser/zen-icons/camera-blocked.svg (../shared/zen-icons/camera-blocked.svg)
|
||||
skin/classic/browser/zen-icons/camera.svg (../shared/zen-icons/camera.svg)
|
||||
skin/classic/browser/zen-icons/canvas-blocked.svg (../shared/zen-icons/canvas-blocked.svg)
|
||||
skin/classic/browser/zen-icons/canvas.svg (../shared/zen-icons/canvas.svg)
|
||||
skin/classic/browser/zen-icons/checkmark.svg (../shared/zen-icons/checkmark.svg)
|
||||
skin/classic/browser/zen-icons/chevron.svg (../shared/zen-icons/chevron.svg)
|
||||
skin/classic/browser/zen-icons/close-all.svg (../shared/zen-icons/close-all.svg)
|
||||
skin/classic/browser/zen-icons/close.svg (../shared/zen-icons/close.svg)
|
||||
skin/classic/browser/zen-icons/container-tab.svg (../shared/zen-icons/container-tab.svg)
|
||||
skin/classic/browser/zen-icons/customize.svg (../shared/zen-icons/customize.svg)
|
||||
skin/classic/browser/zen-icons/desktop-notification-blocked.svg (../shared/zen-icons/desktop-notification-blocked.svg)
|
||||
skin/classic/browser/zen-icons/desktop-notification.svg (../shared/zen-icons/desktop-notification.svg)
|
||||
skin/classic/browser/zen-icons/developer.svg (../shared/zen-icons/developer.svg)
|
||||
skin/classic/browser/zen-icons/downloads.svg (../shared/zen-icons/downloads.svg)
|
||||
skin/classic/browser/zen-icons/drag-indicator.svg (../shared/zen-icons/drag-indicator.svg)
|
||||
skin/classic/browser/zen-icons/duplicate-tab.svg (../shared/zen-icons/duplicate-tab.svg)
|
||||
skin/classic/browser/zen-icons/edit-copy.svg (../shared/zen-icons/edit-copy.svg)
|
||||
skin/classic/browser/zen-icons/edit-cut.svg (../shared/zen-icons/edit-cut.svg)
|
||||
skin/classic/browser/zen-icons/edit-delete.svg (../shared/zen-icons/edit-delete.svg)
|
||||
skin/classic/browser/zen-icons/edit-paste.svg (../shared/zen-icons/edit-paste.svg)
|
||||
skin/classic/browser/zen-icons/edit-redo.svg (../shared/zen-icons/edit-redo.svg)
|
||||
skin/classic/browser/zen-icons/edit-select-all.svg (../shared/zen-icons/edit-select-all.svg)
|
||||
skin/classic/browser/zen-icons/edit-theme.svg (../shared/zen-icons/edit-theme.svg)
|
||||
skin/classic/browser/zen-icons/edit-undo.svg (../shared/zen-icons/edit-undo.svg)
|
||||
skin/classic/browser/zen-icons/edit.svg (../shared/zen-icons/edit.svg)
|
||||
skin/classic/browser/zen-icons/essential-add.svg (../shared/zen-icons/essential-add.svg)
|
||||
skin/classic/browser/zen-icons/essential-remove.svg (../shared/zen-icons/essential-remove.svg)
|
||||
skin/classic/browser/zen-icons/expand-sidebar.svg (../shared/zen-icons/expand-sidebar.svg)
|
||||
skin/classic/browser/zen-icons/ext-link.svg (../shared/zen-icons/ext-link.svg)
|
||||
skin/classic/browser/zen-icons/extension-blocked.svg (../shared/zen-icons/extension-blocked.svg)
|
||||
skin/classic/browser/zen-icons/extension.svg (../shared/zen-icons/extension.svg)
|
||||
skin/classic/browser/zen-icons/firefox.svg (../shared/zen-icons/firefox.svg)
|
||||
skin/classic/browser/zen-icons/folder.svg (../shared/zen-icons/folder.svg)
|
||||
skin/classic/browser/zen-icons/forget.svg (../shared/zen-icons/forget.svg)
|
||||
skin/classic/browser/zen-icons/forward.svg (../shared/zen-icons/forward.svg)
|
||||
skin/classic/browser/zen-icons/fullscreen-exit.svg (../shared/zen-icons/fullscreen-exit.svg)
|
||||
skin/classic/browser/zen-icons/fullscreen.svg (../shared/zen-icons/fullscreen.svg)
|
||||
skin/classic/browser/zen-icons/geo-blocked.svg (../shared/zen-icons/geo-blocked.svg)
|
||||
skin/classic/browser/zen-icons/geo.svg (../shared/zen-icons/geo.svg)
|
||||
skin/classic/browser/zen-icons/help.svg (../shared/zen-icons/help.svg)
|
||||
skin/classic/browser/zen-icons/history.svg (../shared/zen-icons/history.svg)
|
||||
skin/classic/browser/zen-icons/home.svg (../shared/zen-icons/home.svg)
|
||||
#ifdef XP_WIN
|
||||
skin/classic/browser/zen-icons/accessibility.svg (../shared/zen-icons/win/accessibility.svg)
|
||||
skin/classic/browser/zen-icons/add-to-dictionary.svg (../shared/zen-icons/win/add-to-dictionary.svg)
|
||||
skin/classic/browser/zen-icons/arrow-down.svg (../shared/zen-icons/win/arrow-down.svg)
|
||||
skin/classic/browser/zen-icons/arrow-left.svg (../shared/zen-icons/win/arrow-left.svg)
|
||||
skin/classic/browser/zen-icons/arrow-right.svg (../shared/zen-icons/win/arrow-right.svg)
|
||||
skin/classic/browser/zen-icons/arrow-up.svg (../shared/zen-icons/win/arrow-up.svg)
|
||||
skin/classic/browser/zen-icons/audio-save.svg (../shared/zen-icons/win/audio-save.svg)
|
||||
skin/classic/browser/zen-icons/autoplay-media-blocked.svg (../shared/zen-icons/win/autoplay-media-blocked.svg)
|
||||
skin/classic/browser/zen-icons/autoplay-media.svg (../shared/zen-icons/win/autoplay-media.svg)
|
||||
skin/classic/browser/zen-icons/back.svg (../shared/zen-icons/win/back.svg)
|
||||
skin/classic/browser/zen-icons/bookmark-hollow.svg (../shared/zen-icons/win/bookmark-hollow.svg)
|
||||
skin/classic/browser/zen-icons/bookmark-star-on-tray.svg (../shared/zen-icons/win/bookmark-star-on-tray.svg)
|
||||
skin/classic/browser/zen-icons/bookmark.svg (../shared/zen-icons/win/bookmark.svg)
|
||||
skin/classic/browser/zen-icons/camera-blocked.svg (../shared/zen-icons/win/camera-blocked.svg)
|
||||
skin/classic/browser/zen-icons/camera.svg (../shared/zen-icons/win/camera.svg)
|
||||
skin/classic/browser/zen-icons/canvas-blocked.svg (../shared/zen-icons/win/canvas-blocked.svg)
|
||||
skin/classic/browser/zen-icons/canvas.svg (../shared/zen-icons/win/canvas.svg)
|
||||
skin/classic/browser/zen-icons/checkmark.svg (../shared/zen-icons/win/checkmark.svg)
|
||||
skin/classic/browser/zen-icons/chevron.svg (../shared/zen-icons/win/chevron.svg)
|
||||
skin/classic/browser/zen-icons/close-all.svg (../shared/zen-icons/win/close-all.svg)
|
||||
skin/classic/browser/zen-icons/close.svg (../shared/zen-icons/win/close.svg)
|
||||
skin/classic/browser/zen-icons/container-tab.svg (../shared/zen-icons/win/container-tab.svg)
|
||||
skin/classic/browser/zen-icons/customize.svg (../shared/zen-icons/win/customize.svg)
|
||||
skin/classic/browser/zen-icons/desktop-notification-blocked.svg (../shared/zen-icons/win/desktop-notification-blocked.svg)
|
||||
skin/classic/browser/zen-icons/desktop-notification.svg (../shared/zen-icons/win/desktop-notification.svg)
|
||||
skin/classic/browser/zen-icons/developer.svg (../shared/zen-icons/win/developer.svg)
|
||||
skin/classic/browser/zen-icons/downloads.svg (../shared/zen-icons/win/downloads.svg)
|
||||
skin/classic/browser/zen-icons/drag-indicator.svg (../shared/zen-icons/win/drag-indicator.svg)
|
||||
skin/classic/browser/zen-icons/duplicate-tab.svg (../shared/zen-icons/win/duplicate-tab.svg)
|
||||
skin/classic/browser/zen-icons/edit-copy.svg (../shared/zen-icons/win/edit-copy.svg)
|
||||
skin/classic/browser/zen-icons/edit-cut.svg (../shared/zen-icons/win/edit-cut.svg)
|
||||
skin/classic/browser/zen-icons/edit-delete.svg (../shared/zen-icons/win/edit-delete.svg)
|
||||
skin/classic/browser/zen-icons/edit-paste.svg (../shared/zen-icons/win/edit-paste.svg)
|
||||
skin/classic/browser/zen-icons/edit-redo.svg (../shared/zen-icons/win/edit-redo.svg)
|
||||
skin/classic/browser/zen-icons/edit-select-all.svg (../shared/zen-icons/win/edit-select-all.svg)
|
||||
skin/classic/browser/zen-icons/edit-theme.svg (../shared/zen-icons/win/edit-theme.svg)
|
||||
skin/classic/browser/zen-icons/edit-undo.svg (../shared/zen-icons/win/edit-undo.svg)
|
||||
skin/classic/browser/zen-icons/edit.svg (../shared/zen-icons/win/edit.svg)
|
||||
skin/classic/browser/zen-icons/essential-add.svg (../shared/zen-icons/win/essential-add.svg)
|
||||
skin/classic/browser/zen-icons/essential-remove.svg (../shared/zen-icons/win/essential-remove.svg)
|
||||
skin/classic/browser/zen-icons/expand-sidebar.svg (../shared/zen-icons/win/expand-sidebar.svg)
|
||||
skin/classic/browser/zen-icons/ext-link.svg (../shared/zen-icons/win/ext-link.svg)
|
||||
skin/classic/browser/zen-icons/extension-blocked.svg (../shared/zen-icons/win/extension-blocked.svg)
|
||||
skin/classic/browser/zen-icons/extension.svg (../shared/zen-icons/win/extension.svg)
|
||||
skin/classic/browser/zen-icons/folder.svg (../shared/zen-icons/win/folder.svg)
|
||||
skin/classic/browser/zen-icons/forget.svg (../shared/zen-icons/win/forget.svg)
|
||||
skin/classic/browser/zen-icons/forward.svg (../shared/zen-icons/win/forward.svg)
|
||||
skin/classic/browser/zen-icons/fullscreen-exit.svg (../shared/zen-icons/win/fullscreen-exit.svg)
|
||||
skin/classic/browser/zen-icons/fullscreen.svg (../shared/zen-icons/win/fullscreen.svg)
|
||||
skin/classic/browser/zen-icons/geo-blocked.svg (../shared/zen-icons/win/geo-blocked.svg)
|
||||
skin/classic/browser/zen-icons/geo.svg (../shared/zen-icons/win/geo.svg)
|
||||
skin/classic/browser/zen-icons/help.svg (../shared/zen-icons/win/help.svg)
|
||||
skin/classic/browser/zen-icons/history.svg (../shared/zen-icons/win/history.svg)
|
||||
skin/classic/browser/zen-icons/home.svg (../shared/zen-icons/win/home.svg)
|
||||
skin/classic/browser/zen-icons/image-copy.svg (../shared/zen-icons/win/image-copy.svg)
|
||||
skin/classic/browser/zen-icons/image-open.svg (../shared/zen-icons/win/image-open.svg)
|
||||
skin/classic/browser/zen-icons/image-save.svg (../shared/zen-icons/win/image-save.svg)
|
||||
skin/classic/browser/zen-icons/info.svg (../shared/zen-icons/win/info.svg)
|
||||
skin/classic/browser/zen-icons/inspect.svg (../shared/zen-icons/win/inspect.svg)
|
||||
skin/classic/browser/zen-icons/library.svg (../shared/zen-icons/win/library.svg)
|
||||
skin/classic/browser/zen-icons/link.svg (../shared/zen-icons/win/link.svg)
|
||||
skin/classic/browser/zen-icons/mail.svg (../shared/zen-icons/win/mail.svg)
|
||||
skin/classic/browser/zen-icons/manage.svg (../shared/zen-icons/win/manage.svg)
|
||||
skin/classic/browser/zen-icons/media-loop.svg (../shared/zen-icons/win/media-loop.svg)
|
||||
skin/classic/browser/zen-icons/media-mute.svg (../shared/zen-icons/win/media-mute.svg)
|
||||
skin/classic/browser/zen-icons/media-pause.svg (../shared/zen-icons/win/media-pause.svg)
|
||||
skin/classic/browser/zen-icons/media-pip.svg (../shared/zen-icons/win/media-pip.svg)
|
||||
skin/classic/browser/zen-icons/media-play.svg (../shared/zen-icons/win/media-play.svg)
|
||||
skin/classic/browser/zen-icons/media-speed.svg (../shared/zen-icons/win/media-speed.svg)
|
||||
skin/classic/browser/zen-icons/media-unmute.svg (../shared/zen-icons/win/media-unmute.svg)
|
||||
skin/classic/browser/zen-icons/menu-bar.svg (../shared/zen-icons/win/menu-bar.svg)
|
||||
skin/classic/browser/zen-icons/menu.svg (../shared/zen-icons/win/menu.svg)
|
||||
skin/classic/browser/zen-icons/microphone-blocked.svg (../shared/zen-icons/win/microphone-blocked.svg)
|
||||
skin/classic/browser/zen-icons/microphone.svg (../shared/zen-icons/win/microphone.svg)
|
||||
skin/classic/browser/zen-icons/midi.svg (../shared/zen-icons/win/midi.svg)
|
||||
skin/classic/browser/zen-icons/move-tab.svg (../shared/zen-icons/win/move-tab.svg)
|
||||
skin/classic/browser/zen-icons/new-tab-image.svg (../shared/zen-icons/win/new-tab-image.svg)
|
||||
skin/classic/browser/zen-icons/open.svg (../shared/zen-icons/win/open.svg)
|
||||
skin/classic/browser/zen-icons/page-portrait.svg (../shared/zen-icons/win/page-portrait.svg)
|
||||
skin/classic/browser/zen-icons/palette.svg (../shared/zen-icons/win/palette.svg)
|
||||
skin/classic/browser/zen-icons/passwords.svg (../shared/zen-icons/win/passwords.svg)
|
||||
skin/classic/browser/zen-icons/paste-and-go.svg (../shared/zen-icons/win/paste-and-go.svg)
|
||||
skin/classic/browser/zen-icons/permissions.svg (../shared/zen-icons/win/permissions.svg)
|
||||
skin/classic/browser/zen-icons/persistent-storage-blocked.svg (../shared/zen-icons/win/persistent-storage-blocked.svg)
|
||||
skin/classic/browser/zen-icons/persistent-storage.svg (../shared/zen-icons/win/persistent-storage.svg)
|
||||
skin/classic/browser/zen-icons/pin.svg (../shared/zen-icons/win/pin.svg)
|
||||
skin/classic/browser/zen-icons/plus.svg (../shared/zen-icons/win/plus.svg)
|
||||
skin/classic/browser/zen-icons/popup.svg (../shared/zen-icons/win/popup.svg)
|
||||
skin/classic/browser/zen-icons/print.svg (../shared/zen-icons/win/print.svg)
|
||||
skin/classic/browser/zen-icons/private-window.svg (../shared/zen-icons/win/private-window.svg)
|
||||
skin/classic/browser/zen-icons/privateBrowsing.svg (../shared/zen-icons/win/privateBrowsing.svg)
|
||||
skin/classic/browser/zen-icons/reader-mode.svg (../shared/zen-icons/win/reader-mode.svg)
|
||||
skin/classic/browser/zen-icons/reload-to-stop.svg (../shared/zen-icons/win/reload-to-stop.svg)
|
||||
skin/classic/browser/zen-icons/reload.svg (../shared/zen-icons/win/reload.svg)
|
||||
skin/classic/browser/zen-icons/report.svg (../shared/zen-icons/win/report.svg)
|
||||
skin/classic/browser/zen-icons/save.svg (../shared/zen-icons/win/save.svg)
|
||||
skin/classic/browser/zen-icons/screen-blocked.svg (../shared/zen-icons/win/screen-blocked.svg)
|
||||
skin/classic/browser/zen-icons/screen.svg (../shared/zen-icons/win/screen.svg)
|
||||
skin/classic/browser/zen-icons/screenshot.svg (../shared/zen-icons/win/screenshot.svg)
|
||||
skin/classic/browser/zen-icons/search-glass.svg (../shared/zen-icons/win/search-glass.svg)
|
||||
skin/classic/browser/zen-icons/search-page.svg (../shared/zen-icons/win/search-page.svg)
|
||||
skin/classic/browser/zen-icons/security-broken.svg (../shared/zen-icons/win/security-broken.svg)
|
||||
skin/classic/browser/zen-icons/security-warning.svg (../shared/zen-icons/win/security-warning.svg)
|
||||
skin/classic/browser/zen-icons/security.svg (../shared/zen-icons/win/security.svg)
|
||||
skin/classic/browser/zen-icons/send-to-device.svg (../shared/zen-icons/win/send-to-device.svg)
|
||||
skin/classic/browser/zen-icons/settings.svg (../shared/zen-icons/win/settings.svg)
|
||||
skin/classic/browser/zen-icons/share.svg (../shared/zen-icons/win/share.svg)
|
||||
skin/classic/browser/zen-icons/sidebar.svg (../shared/zen-icons/win/sidebar.svg)
|
||||
skin/classic/browser/zen-icons/sidebars-right.svg (../shared/zen-icons/win/sidebars-right.svg)
|
||||
skin/classic/browser/zen-icons/source-code.svg (../shared/zen-icons/win/source-code.svg)
|
||||
skin/classic/browser/zen-icons/spell-check.svg (../shared/zen-icons/win/spell-check.svg)
|
||||
skin/classic/browser/zen-icons/split.svg (../shared/zen-icons/win/split.svg)
|
||||
skin/classic/browser/zen-icons/stop-to-reload.svg (../shared/zen-icons/win/stop-to-reload.svg)
|
||||
skin/classic/browser/zen-icons/tab-audio-blocked-small.svg (../shared/zen-icons/win/tab-audio-blocked-small.svg)
|
||||
skin/classic/browser/zen-icons/tab-audio-muted-small.svg (../shared/zen-icons/win/tab-audio-muted-small.svg)
|
||||
skin/classic/browser/zen-icons/tab-audio-playing-small.svg (../shared/zen-icons/win/tab-audio-playing-small.svg)
|
||||
skin/classic/browser/zen-icons/tab.svg (../shared/zen-icons/win/tab.svg)
|
||||
skin/classic/browser/zen-icons/tracking-protection.svg (../shared/zen-icons/win/tracking-protection.svg)
|
||||
skin/classic/browser/zen-icons/translations.svg (../shared/zen-icons/win/translations.svg)
|
||||
skin/classic/browser/zen-icons/unpin.svg (../shared/zen-icons/win/unpin.svg)
|
||||
skin/classic/browser/zen-icons/video-open.svg (../shared/zen-icons/win/video-open.svg)
|
||||
skin/classic/browser/zen-icons/video-save.svg (../shared/zen-icons/win/video-save.svg)
|
||||
skin/classic/browser/zen-icons/window.svg (../shared/zen-icons/win/window.svg)
|
||||
skin/classic/browser/zen-icons/xr-blocked.svg (../shared/zen-icons/win/xr-blocked.svg)
|
||||
skin/classic/browser/zen-icons/xr.svg (../shared/zen-icons/win/xr.svg)
|
||||
skin/classic/browser/zen-icons/zoom-control.svg (../shared/zen-icons/win/zoom-control.svg)
|
||||
skin/classic/browser/zen-icons/zoom-out.svg (../shared/zen-icons/win/zoom-out.svg)
|
||||
#endif
|
||||
#ifdef XP_MACOSX
|
||||
skin/classic/browser/zen-icons/accessibility.svg (../shared/zen-icons/lin/accessibility.svg)
|
||||
skin/classic/browser/zen-icons/add-to-dictionary.svg (../shared/zen-icons/lin/add-to-dictionary.svg)
|
||||
skin/classic/browser/zen-icons/arrow-down.svg (../shared/zen-icons/lin/arrow-down.svg)
|
||||
skin/classic/browser/zen-icons/arrow-left.svg (../shared/zen-icons/lin/arrow-left.svg)
|
||||
skin/classic/browser/zen-icons/arrow-right.svg (../shared/zen-icons/lin/arrow-right.svg)
|
||||
skin/classic/browser/zen-icons/arrow-up.svg (../shared/zen-icons/lin/arrow-up.svg)
|
||||
skin/classic/browser/zen-icons/audio-save.svg (../shared/zen-icons/lin/audio-save.svg)
|
||||
skin/classic/browser/zen-icons/autoplay-media-blocked.svg (../shared/zen-icons/lin/autoplay-media-blocked.svg)
|
||||
skin/classic/browser/zen-icons/autoplay-media.svg (../shared/zen-icons/lin/autoplay-media.svg)
|
||||
skin/classic/browser/zen-icons/back.svg (../shared/zen-icons/lin/back.svg)
|
||||
skin/classic/browser/zen-icons/bookmark-hollow.svg (../shared/zen-icons/lin/bookmark-hollow.svg)
|
||||
skin/classic/browser/zen-icons/bookmark-star-on-tray.svg (../shared/zen-icons/lin/bookmark-star-on-tray.svg)
|
||||
skin/classic/browser/zen-icons/bookmark.svg (../shared/zen-icons/lin/bookmark.svg)
|
||||
skin/classic/browser/zen-icons/camera-blocked.svg (../shared/zen-icons/lin/camera-blocked.svg)
|
||||
skin/classic/browser/zen-icons/camera.svg (../shared/zen-icons/lin/camera.svg)
|
||||
skin/classic/browser/zen-icons/canvas-blocked.svg (../shared/zen-icons/lin/canvas-blocked.svg)
|
||||
skin/classic/browser/zen-icons/canvas.svg (../shared/zen-icons/lin/canvas.svg)
|
||||
skin/classic/browser/zen-icons/checkmark.svg (../shared/zen-icons/lin/checkmark.svg)
|
||||
skin/classic/browser/zen-icons/chevron.svg (../shared/zen-icons/lin/chevron.svg)
|
||||
skin/classic/browser/zen-icons/close-all.svg (../shared/zen-icons/lin/close-all.svg)
|
||||
skin/classic/browser/zen-icons/close.svg (../shared/zen-icons/lin/close.svg)
|
||||
skin/classic/browser/zen-icons/container-tab.svg (../shared/zen-icons/lin/container-tab.svg)
|
||||
skin/classic/browser/zen-icons/customize.svg (../shared/zen-icons/lin/customize.svg)
|
||||
skin/classic/browser/zen-icons/desktop-notification-blocked.svg (../shared/zen-icons/lin/desktop-notification-blocked.svg)
|
||||
skin/classic/browser/zen-icons/desktop-notification.svg (../shared/zen-icons/lin/desktop-notification.svg)
|
||||
skin/classic/browser/zen-icons/developer.svg (../shared/zen-icons/lin/developer.svg)
|
||||
skin/classic/browser/zen-icons/downloads.svg (../shared/zen-icons/lin/downloads.svg)
|
||||
skin/classic/browser/zen-icons/drag-indicator.svg (../shared/zen-icons/lin/drag-indicator.svg)
|
||||
skin/classic/browser/zen-icons/duplicate-tab.svg (../shared/zen-icons/lin/duplicate-tab.svg)
|
||||
skin/classic/browser/zen-icons/edit-copy.svg (../shared/zen-icons/lin/edit-copy.svg)
|
||||
skin/classic/browser/zen-icons/edit-cut.svg (../shared/zen-icons/lin/edit-cut.svg)
|
||||
skin/classic/browser/zen-icons/edit-delete.svg (../shared/zen-icons/lin/edit-delete.svg)
|
||||
skin/classic/browser/zen-icons/edit-paste.svg (../shared/zen-icons/lin/edit-paste.svg)
|
||||
skin/classic/browser/zen-icons/edit-redo.svg (../shared/zen-icons/lin/edit-redo.svg)
|
||||
skin/classic/browser/zen-icons/edit-select-all.svg (../shared/zen-icons/lin/edit-select-all.svg)
|
||||
skin/classic/browser/zen-icons/edit-theme.svg (../shared/zen-icons/lin/edit-theme.svg)
|
||||
skin/classic/browser/zen-icons/edit-undo.svg (../shared/zen-icons/lin/edit-undo.svg)
|
||||
skin/classic/browser/zen-icons/edit.svg (../shared/zen-icons/lin/edit.svg)
|
||||
skin/classic/browser/zen-icons/essential-add.svg (../shared/zen-icons/lin/essential-add.svg)
|
||||
skin/classic/browser/zen-icons/essential-remove.svg (../shared/zen-icons/lin/essential-remove.svg)
|
||||
skin/classic/browser/zen-icons/expand-sidebar.svg (../shared/zen-icons/lin/expand-sidebar.svg)
|
||||
skin/classic/browser/zen-icons/ext-link.svg (../shared/zen-icons/lin/ext-link.svg)
|
||||
skin/classic/browser/zen-icons/extension-blocked.svg (../shared/zen-icons/lin/extension-blocked.svg)
|
||||
skin/classic/browser/zen-icons/extension.svg (../shared/zen-icons/lin/extension.svg)
|
||||
skin/classic/browser/zen-icons/firefox.svg (../shared/zen-icons/lin/firefox.svg)
|
||||
skin/classic/browser/zen-icons/folder.svg (../shared/zen-icons/lin/folder.svg)
|
||||
skin/classic/browser/zen-icons/forget.svg (../shared/zen-icons/lin/forget.svg)
|
||||
skin/classic/browser/zen-icons/forward.svg (../shared/zen-icons/lin/forward.svg)
|
||||
skin/classic/browser/zen-icons/fullscreen-exit.svg (../shared/zen-icons/lin/fullscreen-exit.svg)
|
||||
skin/classic/browser/zen-icons/fullscreen.svg (../shared/zen-icons/lin/fullscreen.svg)
|
||||
skin/classic/browser/zen-icons/geo-blocked.svg (../shared/zen-icons/lin/geo-blocked.svg)
|
||||
skin/classic/browser/zen-icons/geo.svg (../shared/zen-icons/lin/geo.svg)
|
||||
skin/classic/browser/zen-icons/help.svg (../shared/zen-icons/lin/help.svg)
|
||||
skin/classic/browser/zen-icons/history.svg (../shared/zen-icons/lin/history.svg)
|
||||
skin/classic/browser/zen-icons/home.svg (../shared/zen-icons/lin/home.svg)
|
||||
skin/classic/browser/zen-icons/image-copy.svg (../shared/zen-icons/lin/image-copy.svg)
|
||||
skin/classic/browser/zen-icons/image-open.svg (../shared/zen-icons/lin/image-open.svg)
|
||||
skin/classic/browser/zen-icons/image-save.svg (../shared/zen-icons/lin/image-save.svg)
|
||||
skin/classic/browser/zen-icons/info.svg (../shared/zen-icons/lin/info.svg)
|
||||
skin/classic/browser/zen-icons/inspect.svg (../shared/zen-icons/lin/inspect.svg)
|
||||
skin/classic/browser/zen-icons/library.svg (../shared/zen-icons/lin/library.svg)
|
||||
skin/classic/browser/zen-icons/link.svg (../shared/zen-icons/lin/link.svg)
|
||||
skin/classic/browser/zen-icons/mail.svg (../shared/zen-icons/lin/mail.svg)
|
||||
skin/classic/browser/zen-icons/manage.svg (../shared/zen-icons/lin/manage.svg)
|
||||
skin/classic/browser/zen-icons/media-loop.svg (../shared/zen-icons/lin/media-loop.svg)
|
||||
skin/classic/browser/zen-icons/media-mute.svg (../shared/zen-icons/lin/media-mute.svg)
|
||||
skin/classic/browser/zen-icons/media-pause.svg (../shared/zen-icons/lin/media-pause.svg)
|
||||
skin/classic/browser/zen-icons/media-pip.svg (../shared/zen-icons/lin/media-pip.svg)
|
||||
skin/classic/browser/zen-icons/media-play.svg (../shared/zen-icons/lin/media-play.svg)
|
||||
skin/classic/browser/zen-icons/media-speed.svg (../shared/zen-icons/lin/media-speed.svg)
|
||||
skin/classic/browser/zen-icons/media-unmute.svg (../shared/zen-icons/lin/media-unmute.svg)
|
||||
skin/classic/browser/zen-icons/menu-bar.svg (../shared/zen-icons/lin/menu-bar.svg)
|
||||
skin/classic/browser/zen-icons/menu.svg (../shared/zen-icons/lin/menu.svg)
|
||||
skin/classic/browser/zen-icons/microphone-blocked.svg (../shared/zen-icons/lin/microphone-blocked.svg)
|
||||
skin/classic/browser/zen-icons/microphone.svg (../shared/zen-icons/lin/microphone.svg)
|
||||
skin/classic/browser/zen-icons/midi.svg (../shared/zen-icons/lin/midi.svg)
|
||||
skin/classic/browser/zen-icons/move-tab.svg (../shared/zen-icons/lin/move-tab.svg)
|
||||
skin/classic/browser/zen-icons/new-tab-image.svg (../shared/zen-icons/lin/new-tab-image.svg)
|
||||
skin/classic/browser/zen-icons/open.svg (../shared/zen-icons/lin/open.svg)
|
||||
skin/classic/browser/zen-icons/page-portrait.svg (../shared/zen-icons/lin/page-portrait.svg)
|
||||
skin/classic/browser/zen-icons/palette.svg (../shared/zen-icons/lin/palette.svg)
|
||||
skin/classic/browser/zen-icons/passwords.svg (../shared/zen-icons/lin/passwords.svg)
|
||||
skin/classic/browser/zen-icons/paste-and-go.svg (../shared/zen-icons/lin/paste-and-go.svg)
|
||||
skin/classic/browser/zen-icons/permissions.svg (../shared/zen-icons/lin/permissions.svg)
|
||||
skin/classic/browser/zen-icons/persistent-storage-blocked.svg (../shared/zen-icons/lin/persistent-storage-blocked.svg)
|
||||
skin/classic/browser/zen-icons/persistent-storage.svg (../shared/zen-icons/lin/persistent-storage.svg)
|
||||
skin/classic/browser/zen-icons/pin.svg (../shared/zen-icons/lin/pin.svg)
|
||||
skin/classic/browser/zen-icons/plus.svg (../shared/zen-icons/lin/plus.svg)
|
||||
skin/classic/browser/zen-icons/pocket-outline.svg (../shared/zen-icons/lin/pocket-outline.svg)
|
||||
skin/classic/browser/zen-icons/popup.svg (../shared/zen-icons/lin/popup.svg)
|
||||
skin/classic/browser/zen-icons/print.svg (../shared/zen-icons/lin/print.svg)
|
||||
skin/classic/browser/zen-icons/private-window.svg (../shared/zen-icons/lin/private-window.svg)
|
||||
skin/classic/browser/zen-icons/privateBrowsing.svg (../shared/zen-icons/lin/privateBrowsing.svg)
|
||||
skin/classic/browser/zen-icons/reader-mode.svg (../shared/zen-icons/lin/reader-mode.svg)
|
||||
skin/classic/browser/zen-icons/reload-to-stop.svg (../shared/zen-icons/lin/reload-to-stop.svg)
|
||||
skin/classic/browser/zen-icons/reload.svg (../shared/zen-icons/lin/reload.svg)
|
||||
skin/classic/browser/zen-icons/report.svg (../shared/zen-icons/lin/report.svg)
|
||||
skin/classic/browser/zen-icons/save.svg (../shared/zen-icons/lin/save.svg)
|
||||
skin/classic/browser/zen-icons/screen-blocked.svg (../shared/zen-icons/lin/screen-blocked.svg)
|
||||
skin/classic/browser/zen-icons/screen.svg (../shared/zen-icons/lin/screen.svg)
|
||||
skin/classic/browser/zen-icons/screenshot.svg (../shared/zen-icons/lin/screenshot.svg)
|
||||
skin/classic/browser/zen-icons/search-glass.svg (../shared/zen-icons/lin/search-glass.svg)
|
||||
skin/classic/browser/zen-icons/search-page.svg (../shared/zen-icons/lin/search-page.svg)
|
||||
skin/classic/browser/zen-icons/security-broken.svg (../shared/zen-icons/lin/security-broken.svg)
|
||||
skin/classic/browser/zen-icons/security-warning.svg (../shared/zen-icons/lin/security-warning.svg)
|
||||
skin/classic/browser/zen-icons/security.svg (../shared/zen-icons/lin/security.svg)
|
||||
skin/classic/browser/zen-icons/send-to-device.svg (../shared/zen-icons/lin/send-to-device.svg)
|
||||
skin/classic/browser/zen-icons/settings.svg (../shared/zen-icons/lin/settings.svg)
|
||||
skin/classic/browser/zen-icons/share.svg (../shared/zen-icons/lin/share.svg)
|
||||
skin/classic/browser/zen-icons/sidebar.svg (../shared/zen-icons/lin/sidebar.svg)
|
||||
skin/classic/browser/zen-icons/sidebars-right.svg (../shared/zen-icons/lin/sidebars-right.svg)
|
||||
skin/classic/browser/zen-icons/source-code.svg (../shared/zen-icons/lin/source-code.svg)
|
||||
skin/classic/browser/zen-icons/spell-check.svg (../shared/zen-icons/lin/spell-check.svg)
|
||||
skin/classic/browser/zen-icons/split.svg (../shared/zen-icons/lin/split.svg)
|
||||
skin/classic/browser/zen-icons/stop-to-reload.svg (../shared/zen-icons/lin/stop-to-reload.svg)
|
||||
skin/classic/browser/zen-icons/tab-audio-blocked-small.svg (../shared/zen-icons/lin/tab-audio-blocked-small.svg)
|
||||
skin/classic/browser/zen-icons/tab-audio-muted-small.svg (../shared/zen-icons/lin/tab-audio-muted-small.svg)
|
||||
skin/classic/browser/zen-icons/tab-audio-playing-small.svg (../shared/zen-icons/lin/tab-audio-playing-small.svg)
|
||||
skin/classic/browser/zen-icons/tab.svg (../shared/zen-icons/lin/tab.svg)
|
||||
skin/classic/browser/zen-icons/tool-profiler.svg (../shared/zen-icons/lin/tool-profiler.svg)
|
||||
skin/classic/browser/zen-icons/tracking-protection.svg (../shared/zen-icons/lin/tracking-protection.svg)
|
||||
skin/classic/browser/zen-icons/translations.svg (../shared/zen-icons/lin/translations.svg)
|
||||
skin/classic/browser/zen-icons/unpin.svg (../shared/zen-icons/lin/unpin.svg)
|
||||
skin/classic/browser/zen-icons/video-open.svg (../shared/zen-icons/lin/video-open.svg)
|
||||
skin/classic/browser/zen-icons/video-save.svg (../shared/zen-icons/lin/video-save.svg)
|
||||
skin/classic/browser/zen-icons/window.svg (../shared/zen-icons/lin/window.svg)
|
||||
skin/classic/browser/zen-icons/xr-blocked.svg (../shared/zen-icons/lin/xr-blocked.svg)
|
||||
skin/classic/browser/zen-icons/xr.svg (../shared/zen-icons/lin/xr.svg)
|
||||
skin/classic/browser/zen-icons/zoom-control.svg (../shared/zen-icons/lin/zoom-control.svg)
|
||||
skin/classic/browser/zen-icons/zoom-out.svg (../shared/zen-icons/lin/zoom-out.svg)
|
||||
#endif
|
||||
#ifdef XP_LINUX
|
||||
skin/classic/browser/zen-icons/accessibility.svg (../shared/zen-icons/lin/accessibility.svg)
|
||||
skin/classic/browser/zen-icons/add-to-dictionary.svg (../shared/zen-icons/lin/add-to-dictionary.svg)
|
||||
skin/classic/browser/zen-icons/arrow-down.svg (../shared/zen-icons/lin/arrow-down.svg)
|
||||
skin/classic/browser/zen-icons/arrow-left.svg (../shared/zen-icons/lin/arrow-left.svg)
|
||||
skin/classic/browser/zen-icons/arrow-right.svg (../shared/zen-icons/lin/arrow-right.svg)
|
||||
skin/classic/browser/zen-icons/arrow-up.svg (../shared/zen-icons/lin/arrow-up.svg)
|
||||
skin/classic/browser/zen-icons/audio-save.svg (../shared/zen-icons/lin/audio-save.svg)
|
||||
skin/classic/browser/zen-icons/autoplay-media-blocked.svg (../shared/zen-icons/lin/autoplay-media-blocked.svg)
|
||||
skin/classic/browser/zen-icons/autoplay-media.svg (../shared/zen-icons/lin/autoplay-media.svg)
|
||||
skin/classic/browser/zen-icons/back.svg (../shared/zen-icons/lin/back.svg)
|
||||
skin/classic/browser/zen-icons/bookmark-hollow.svg (../shared/zen-icons/lin/bookmark-hollow.svg)
|
||||
skin/classic/browser/zen-icons/bookmark-star-on-tray.svg (../shared/zen-icons/lin/bookmark-star-on-tray.svg)
|
||||
skin/classic/browser/zen-icons/bookmark.svg (../shared/zen-icons/lin/bookmark.svg)
|
||||
skin/classic/browser/zen-icons/camera-blocked.svg (../shared/zen-icons/lin/camera-blocked.svg)
|
||||
skin/classic/browser/zen-icons/camera.svg (../shared/zen-icons/lin/camera.svg)
|
||||
skin/classic/browser/zen-icons/canvas-blocked.svg (../shared/zen-icons/lin/canvas-blocked.svg)
|
||||
skin/classic/browser/zen-icons/canvas.svg (../shared/zen-icons/lin/canvas.svg)
|
||||
skin/classic/browser/zen-icons/checkmark.svg (../shared/zen-icons/lin/checkmark.svg)
|
||||
skin/classic/browser/zen-icons/chevron.svg (../shared/zen-icons/lin/chevron.svg)
|
||||
skin/classic/browser/zen-icons/close-all.svg (../shared/zen-icons/lin/close-all.svg)
|
||||
skin/classic/browser/zen-icons/close.svg (../shared/zen-icons/lin/close.svg)
|
||||
skin/classic/browser/zen-icons/container-tab.svg (../shared/zen-icons/lin/container-tab.svg)
|
||||
skin/classic/browser/zen-icons/customize.svg (../shared/zen-icons/lin/customize.svg)
|
||||
skin/classic/browser/zen-icons/desktop-notification-blocked.svg (../shared/zen-icons/lin/desktop-notification-blocked.svg)
|
||||
skin/classic/browser/zen-icons/desktop-notification.svg (../shared/zen-icons/lin/desktop-notification.svg)
|
||||
skin/classic/browser/zen-icons/developer.svg (../shared/zen-icons/lin/developer.svg)
|
||||
skin/classic/browser/zen-icons/downloads.svg (../shared/zen-icons/lin/downloads.svg)
|
||||
skin/classic/browser/zen-icons/drag-indicator.svg (../shared/zen-icons/lin/drag-indicator.svg)
|
||||
skin/classic/browser/zen-icons/duplicate-tab.svg (../shared/zen-icons/lin/duplicate-tab.svg)
|
||||
skin/classic/browser/zen-icons/edit-copy.svg (../shared/zen-icons/lin/edit-copy.svg)
|
||||
skin/classic/browser/zen-icons/edit-cut.svg (../shared/zen-icons/lin/edit-cut.svg)
|
||||
skin/classic/browser/zen-icons/edit-delete.svg (../shared/zen-icons/lin/edit-delete.svg)
|
||||
skin/classic/browser/zen-icons/edit-paste.svg (../shared/zen-icons/lin/edit-paste.svg)
|
||||
skin/classic/browser/zen-icons/edit-redo.svg (../shared/zen-icons/lin/edit-redo.svg)
|
||||
skin/classic/browser/zen-icons/edit-select-all.svg (../shared/zen-icons/lin/edit-select-all.svg)
|
||||
skin/classic/browser/zen-icons/edit-theme.svg (../shared/zen-icons/lin/edit-theme.svg)
|
||||
skin/classic/browser/zen-icons/edit-undo.svg (../shared/zen-icons/lin/edit-undo.svg)
|
||||
skin/classic/browser/zen-icons/edit.svg (../shared/zen-icons/lin/edit.svg)
|
||||
skin/classic/browser/zen-icons/essential-add.svg (../shared/zen-icons/lin/essential-add.svg)
|
||||
skin/classic/browser/zen-icons/essential-remove.svg (../shared/zen-icons/lin/essential-remove.svg)
|
||||
skin/classic/browser/zen-icons/expand-sidebar.svg (../shared/zen-icons/lin/expand-sidebar.svg)
|
||||
skin/classic/browser/zen-icons/ext-link.svg (../shared/zen-icons/lin/ext-link.svg)
|
||||
skin/classic/browser/zen-icons/extension-blocked.svg (../shared/zen-icons/lin/extension-blocked.svg)
|
||||
skin/classic/browser/zen-icons/extension.svg (../shared/zen-icons/lin/extension.svg)
|
||||
skin/classic/browser/zen-icons/firefox.svg (../shared/zen-icons/lin/firefox.svg)
|
||||
skin/classic/browser/zen-icons/folder.svg (../shared/zen-icons/lin/folder.svg)
|
||||
skin/classic/browser/zen-icons/forget.svg (../shared/zen-icons/lin/forget.svg)
|
||||
skin/classic/browser/zen-icons/forward.svg (../shared/zen-icons/lin/forward.svg)
|
||||
skin/classic/browser/zen-icons/fullscreen-exit.svg (../shared/zen-icons/lin/fullscreen-exit.svg)
|
||||
skin/classic/browser/zen-icons/fullscreen.svg (../shared/zen-icons/lin/fullscreen.svg)
|
||||
skin/classic/browser/zen-icons/geo-blocked.svg (../shared/zen-icons/lin/geo-blocked.svg)
|
||||
skin/classic/browser/zen-icons/geo.svg (../shared/zen-icons/lin/geo.svg)
|
||||
skin/classic/browser/zen-icons/help.svg (../shared/zen-icons/lin/help.svg)
|
||||
skin/classic/browser/zen-icons/history.svg (../shared/zen-icons/lin/history.svg)
|
||||
skin/classic/browser/zen-icons/home.svg (../shared/zen-icons/lin/home.svg)
|
||||
skin/classic/browser/zen-icons/image-copy.svg (../shared/zen-icons/lin/image-copy.svg)
|
||||
skin/classic/browser/zen-icons/image-open.svg (../shared/zen-icons/lin/image-open.svg)
|
||||
skin/classic/browser/zen-icons/image-save.svg (../shared/zen-icons/lin/image-save.svg)
|
||||
skin/classic/browser/zen-icons/info.svg (../shared/zen-icons/lin/info.svg)
|
||||
skin/classic/browser/zen-icons/inspect.svg (../shared/zen-icons/lin/inspect.svg)
|
||||
skin/classic/browser/zen-icons/library.svg (../shared/zen-icons/lin/library.svg)
|
||||
skin/classic/browser/zen-icons/link.svg (../shared/zen-icons/lin/link.svg)
|
||||
skin/classic/browser/zen-icons/mail.svg (../shared/zen-icons/lin/mail.svg)
|
||||
skin/classic/browser/zen-icons/manage.svg (../shared/zen-icons/lin/manage.svg)
|
||||
skin/classic/browser/zen-icons/media-loop.svg (../shared/zen-icons/lin/media-loop.svg)
|
||||
skin/classic/browser/zen-icons/media-mute.svg (../shared/zen-icons/lin/media-mute.svg)
|
||||
skin/classic/browser/zen-icons/media-pause.svg (../shared/zen-icons/lin/media-pause.svg)
|
||||
skin/classic/browser/zen-icons/media-pip.svg (../shared/zen-icons/lin/media-pip.svg)
|
||||
skin/classic/browser/zen-icons/media-play.svg (../shared/zen-icons/lin/media-play.svg)
|
||||
skin/classic/browser/zen-icons/media-speed.svg (../shared/zen-icons/lin/media-speed.svg)
|
||||
skin/classic/browser/zen-icons/media-unmute.svg (../shared/zen-icons/lin/media-unmute.svg)
|
||||
skin/classic/browser/zen-icons/menu-bar.svg (../shared/zen-icons/lin/menu-bar.svg)
|
||||
skin/classic/browser/zen-icons/menu.svg (../shared/zen-icons/lin/menu.svg)
|
||||
skin/classic/browser/zen-icons/microphone-blocked.svg (../shared/zen-icons/lin/microphone-blocked.svg)
|
||||
skin/classic/browser/zen-icons/microphone.svg (../shared/zen-icons/lin/microphone.svg)
|
||||
skin/classic/browser/zen-icons/midi.svg (../shared/zen-icons/lin/midi.svg)
|
||||
skin/classic/browser/zen-icons/move-tab.svg (../shared/zen-icons/lin/move-tab.svg)
|
||||
skin/classic/browser/zen-icons/new-tab-image.svg (../shared/zen-icons/lin/new-tab-image.svg)
|
||||
skin/classic/browser/zen-icons/open.svg (../shared/zen-icons/lin/open.svg)
|
||||
skin/classic/browser/zen-icons/page-portrait.svg (../shared/zen-icons/lin/page-portrait.svg)
|
||||
skin/classic/browser/zen-icons/palette.svg (../shared/zen-icons/lin/palette.svg)
|
||||
skin/classic/browser/zen-icons/passwords.svg (../shared/zen-icons/lin/passwords.svg)
|
||||
skin/classic/browser/zen-icons/paste-and-go.svg (../shared/zen-icons/lin/paste-and-go.svg)
|
||||
skin/classic/browser/zen-icons/permissions.svg (../shared/zen-icons/lin/permissions.svg)
|
||||
skin/classic/browser/zen-icons/persistent-storage-blocked.svg (../shared/zen-icons/lin/persistent-storage-blocked.svg)
|
||||
skin/classic/browser/zen-icons/persistent-storage.svg (../shared/zen-icons/lin/persistent-storage.svg)
|
||||
skin/classic/browser/zen-icons/pin.svg (../shared/zen-icons/lin/pin.svg)
|
||||
skin/classic/browser/zen-icons/plus.svg (../shared/zen-icons/lin/plus.svg)
|
||||
skin/classic/browser/zen-icons/pocket-outline.svg (../shared/zen-icons/lin/pocket-outline.svg)
|
||||
skin/classic/browser/zen-icons/popup.svg (../shared/zen-icons/lin/popup.svg)
|
||||
skin/classic/browser/zen-icons/print.svg (../shared/zen-icons/lin/print.svg)
|
||||
skin/classic/browser/zen-icons/private-window.svg (../shared/zen-icons/lin/private-window.svg)
|
||||
skin/classic/browser/zen-icons/privateBrowsing.svg (../shared/zen-icons/lin/privateBrowsing.svg)
|
||||
skin/classic/browser/zen-icons/reader-mode.svg (../shared/zen-icons/lin/reader-mode.svg)
|
||||
skin/classic/browser/zen-icons/reload-to-stop.svg (../shared/zen-icons/lin/reload-to-stop.svg)
|
||||
skin/classic/browser/zen-icons/reload.svg (../shared/zen-icons/lin/reload.svg)
|
||||
skin/classic/browser/zen-icons/report.svg (../shared/zen-icons/lin/report.svg)
|
||||
skin/classic/browser/zen-icons/save.svg (../shared/zen-icons/lin/save.svg)
|
||||
skin/classic/browser/zen-icons/screen-blocked.svg (../shared/zen-icons/lin/screen-blocked.svg)
|
||||
skin/classic/browser/zen-icons/screen.svg (../shared/zen-icons/lin/screen.svg)
|
||||
skin/classic/browser/zen-icons/screenshot.svg (../shared/zen-icons/lin/screenshot.svg)
|
||||
skin/classic/browser/zen-icons/search-glass.svg (../shared/zen-icons/lin/search-glass.svg)
|
||||
skin/classic/browser/zen-icons/search-page.svg (../shared/zen-icons/lin/search-page.svg)
|
||||
skin/classic/browser/zen-icons/security-broken.svg (../shared/zen-icons/lin/security-broken.svg)
|
||||
skin/classic/browser/zen-icons/security-warning.svg (../shared/zen-icons/lin/security-warning.svg)
|
||||
skin/classic/browser/zen-icons/security.svg (../shared/zen-icons/lin/security.svg)
|
||||
skin/classic/browser/zen-icons/send-to-device.svg (../shared/zen-icons/lin/send-to-device.svg)
|
||||
skin/classic/browser/zen-icons/settings.svg (../shared/zen-icons/lin/settings.svg)
|
||||
skin/classic/browser/zen-icons/share.svg (../shared/zen-icons/lin/share.svg)
|
||||
skin/classic/browser/zen-icons/sidebar.svg (../shared/zen-icons/lin/sidebar.svg)
|
||||
skin/classic/browser/zen-icons/sidebars-right.svg (../shared/zen-icons/lin/sidebars-right.svg)
|
||||
skin/classic/browser/zen-icons/source-code.svg (../shared/zen-icons/lin/source-code.svg)
|
||||
skin/classic/browser/zen-icons/spell-check.svg (../shared/zen-icons/lin/spell-check.svg)
|
||||
skin/classic/browser/zen-icons/split.svg (../shared/zen-icons/lin/split.svg)
|
||||
skin/classic/browser/zen-icons/stop-to-reload.svg (../shared/zen-icons/lin/stop-to-reload.svg)
|
||||
skin/classic/browser/zen-icons/tab-audio-blocked-small.svg (../shared/zen-icons/lin/tab-audio-blocked-small.svg)
|
||||
skin/classic/browser/zen-icons/tab-audio-muted-small.svg (../shared/zen-icons/lin/tab-audio-muted-small.svg)
|
||||
skin/classic/browser/zen-icons/tab-audio-playing-small.svg (../shared/zen-icons/lin/tab-audio-playing-small.svg)
|
||||
skin/classic/browser/zen-icons/tab.svg (../shared/zen-icons/lin/tab.svg)
|
||||
skin/classic/browser/zen-icons/tool-profiler.svg (../shared/zen-icons/lin/tool-profiler.svg)
|
||||
skin/classic/browser/zen-icons/tracking-protection.svg (../shared/zen-icons/lin/tracking-protection.svg)
|
||||
skin/classic/browser/zen-icons/translations.svg (../shared/zen-icons/lin/translations.svg)
|
||||
skin/classic/browser/zen-icons/unpin.svg (../shared/zen-icons/lin/unpin.svg)
|
||||
skin/classic/browser/zen-icons/video-open.svg (../shared/zen-icons/lin/video-open.svg)
|
||||
skin/classic/browser/zen-icons/video-save.svg (../shared/zen-icons/lin/video-save.svg)
|
||||
skin/classic/browser/zen-icons/window.svg (../shared/zen-icons/lin/window.svg)
|
||||
skin/classic/browser/zen-icons/xr-blocked.svg (../shared/zen-icons/lin/xr-blocked.svg)
|
||||
skin/classic/browser/zen-icons/xr.svg (../shared/zen-icons/lin/xr.svg)
|
||||
skin/classic/browser/zen-icons/zoom-control.svg (../shared/zen-icons/lin/zoom-control.svg)
|
||||
skin/classic/browser/zen-icons/zoom-out.svg (../shared/zen-icons/lin/zoom-out.svg)
|
||||
#endif
|
||||
skin/classic/browser/zen-icons/icons.css (../shared/zen-icons/icons.css)
|
||||
skin/classic/browser/zen-icons/image-copy.svg (../shared/zen-icons/image-copy.svg)
|
||||
skin/classic/browser/zen-icons/image-open.svg (../shared/zen-icons/image-open.svg)
|
||||
skin/classic/browser/zen-icons/image-save.svg (../shared/zen-icons/image-save.svg)
|
||||
skin/classic/browser/zen-icons/info.svg (../shared/zen-icons/info.svg)
|
||||
skin/classic/browser/zen-icons/inspect.svg (../shared/zen-icons/inspect.svg)
|
||||
skin/classic/browser/zen-icons/jar.inc.mn (../shared/zen-icons/jar.inc.mn)
|
||||
skin/classic/browser/zen-icons/library.svg (../shared/zen-icons/library.svg)
|
||||
skin/classic/browser/zen-icons/link.svg (../shared/zen-icons/link.svg)
|
||||
skin/classic/browser/zen-icons/mail.svg (../shared/zen-icons/mail.svg)
|
||||
skin/classic/browser/zen-icons/manage.svg (../shared/zen-icons/manage.svg)
|
||||
skin/classic/browser/zen-icons/media-loop.svg (../shared/zen-icons/media-loop.svg)
|
||||
skin/classic/browser/zen-icons/media-mute.svg (../shared/zen-icons/media-mute.svg)
|
||||
skin/classic/browser/zen-icons/media-pause.svg (../shared/zen-icons/media-pause.svg)
|
||||
skin/classic/browser/zen-icons/media-pip.svg (../shared/zen-icons/media-pip.svg)
|
||||
skin/classic/browser/zen-icons/media-play.svg (../shared/zen-icons/media-play.svg)
|
||||
skin/classic/browser/zen-icons/media-speed.svg (../shared/zen-icons/media-speed.svg)
|
||||
skin/classic/browser/zen-icons/media-unmute.svg (../shared/zen-icons/media-unmute.svg)
|
||||
skin/classic/browser/zen-icons/menu-bar.svg (../shared/zen-icons/menu-bar.svg)
|
||||
skin/classic/browser/zen-icons/menu.svg (../shared/zen-icons/menu.svg)
|
||||
skin/classic/browser/zen-icons/microphone-blocked.svg (../shared/zen-icons/microphone-blocked.svg)
|
||||
skin/classic/browser/zen-icons/microphone.svg (../shared/zen-icons/microphone.svg)
|
||||
skin/classic/browser/zen-icons/midi.svg (../shared/zen-icons/midi.svg)
|
||||
skin/classic/browser/zen-icons/move-tab.svg (../shared/zen-icons/move-tab.svg)
|
||||
skin/classic/browser/zen-icons/new-tab-image.svg (../shared/zen-icons/new-tab-image.svg)
|
||||
skin/classic/browser/zen-icons/nucleo-copyright-notice.html (../shared/zen-icons/nucleo-copyright-notice.html)
|
||||
skin/classic/browser/zen-icons/open.svg (../shared/zen-icons/open.svg)
|
||||
skin/classic/browser/zen-icons/page-portrait.svg (../shared/zen-icons/page-portrait.svg)
|
||||
skin/classic/browser/zen-icons/passwords.svg (../shared/zen-icons/passwords.svg)
|
||||
skin/classic/browser/zen-icons/paste-and-go.svg (../shared/zen-icons/paste-and-go.svg)
|
||||
skin/classic/browser/zen-icons/permissions.svg (../shared/zen-icons/permissions.svg)
|
||||
skin/classic/browser/zen-icons/persistent-storage-blocked.svg (../shared/zen-icons/persistent-storage-blocked.svg)
|
||||
skin/classic/browser/zen-icons/persistent-storage.svg (../shared/zen-icons/persistent-storage.svg)
|
||||
skin/classic/browser/zen-icons/pin.svg (../shared/zen-icons/pin.svg)
|
||||
skin/classic/browser/zen-icons/plus.svg (../shared/zen-icons/plus.svg)
|
||||
skin/classic/browser/zen-icons/pocket-outline.svg (../shared/zen-icons/pocket-outline.svg)
|
||||
skin/classic/browser/zen-icons/popup.svg (../shared/zen-icons/popup.svg)
|
||||
skin/classic/browser/zen-icons/print.svg (../shared/zen-icons/print.svg)
|
||||
skin/classic/browser/zen-icons/private-window.svg (../shared/zen-icons/private-window.svg)
|
||||
skin/classic/browser/zen-icons/privateBrowsing.svg (../shared/zen-icons/privateBrowsing.svg)
|
||||
skin/classic/browser/zen-icons/reader-mode.svg (../shared/zen-icons/reader-mode.svg)
|
||||
skin/classic/browser/zen-icons/reload-to-stop.svg (../shared/zen-icons/reload-to-stop.svg)
|
||||
skin/classic/browser/zen-icons/reload.svg (../shared/zen-icons/reload.svg)
|
||||
skin/classic/browser/zen-icons/report.svg (../shared/zen-icons/report.svg)
|
||||
skin/classic/browser/zen-icons/save.svg (../shared/zen-icons/save.svg)
|
||||
skin/classic/browser/zen-icons/screen-blocked.svg (../shared/zen-icons/screen-blocked.svg)
|
||||
skin/classic/browser/zen-icons/screen.svg (../shared/zen-icons/screen.svg)
|
||||
skin/classic/browser/zen-icons/screenshot.svg (../shared/zen-icons/screenshot.svg)
|
||||
skin/classic/browser/zen-icons/search-glass.svg (../shared/zen-icons/search-glass.svg)
|
||||
skin/classic/browser/zen-icons/search-page.svg (../shared/zen-icons/search-page.svg)
|
||||
skin/classic/browser/zen-icons/security-broken.svg (../shared/zen-icons/security-broken.svg)
|
||||
skin/classic/browser/zen-icons/security-warning.svg (../shared/zen-icons/security-warning.svg)
|
||||
skin/classic/browser/zen-icons/security.svg (../shared/zen-icons/security.svg)
|
||||
skin/classic/browser/zen-icons/send-to-device.svg (../shared/zen-icons/send-to-device.svg)
|
||||
skin/classic/browser/zen-icons/settings.svg (../shared/zen-icons/settings.svg)
|
||||
skin/classic/browser/zen-icons/share.svg (../shared/zen-icons/share.svg)
|
||||
skin/classic/browser/zen-icons/sidebar.svg (../shared/zen-icons/sidebar.svg)
|
||||
skin/classic/browser/zen-icons/sidebars-right.svg (../shared/zen-icons/sidebars-right.svg)
|
||||
skin/classic/browser/zen-icons/source-code.svg (../shared/zen-icons/source-code.svg)
|
||||
skin/classic/browser/zen-icons/spell-check.svg (../shared/zen-icons/spell-check.svg)
|
||||
skin/classic/browser/zen-icons/split.svg (../shared/zen-icons/split.svg)
|
||||
skin/classic/browser/zen-icons/stop-to-reload.svg (../shared/zen-icons/stop-to-reload.svg)
|
||||
skin/classic/browser/zen-icons/tab-audio-blocked-small.svg (../shared/zen-icons/tab-audio-blocked-small.svg)
|
||||
skin/classic/browser/zen-icons/tab-audio-muted-small.svg (../shared/zen-icons/tab-audio-muted-small.svg)
|
||||
skin/classic/browser/zen-icons/tab-audio-playing-small.svg (../shared/zen-icons/tab-audio-playing-small.svg)
|
||||
skin/classic/browser/zen-icons/tab.svg (../shared/zen-icons/tab.svg)
|
||||
skin/classic/browser/zen-icons/tool-profiler.svg (../shared/zen-icons/tool-profiler.svg)
|
||||
skin/classic/browser/zen-icons/tracking-protection.svg (../shared/zen-icons/tracking-protection.svg)
|
||||
skin/classic/browser/zen-icons/translations.svg (../shared/zen-icons/translations.svg)
|
||||
skin/classic/browser/zen-icons/unpin.svg (../shared/zen-icons/unpin.svg)
|
||||
skin/classic/browser/zen-icons/update-resources.sh (../shared/zen-icons/update-resources.sh)
|
||||
skin/classic/browser/zen-icons/video-open.svg (../shared/zen-icons/video-open.svg)
|
||||
skin/classic/browser/zen-icons/video-save.svg (../shared/zen-icons/video-save.svg)
|
||||
skin/classic/browser/zen-icons/window.svg (../shared/zen-icons/window.svg)
|
||||
skin/classic/browser/zen-icons/xr-blocked.svg (../shared/zen-icons/xr-blocked.svg)
|
||||
skin/classic/browser/zen-icons/xr.svg (../shared/zen-icons/xr.svg)
|
||||
skin/classic/browser/zen-icons/zoom-control.svg (../shared/zen-icons/zoom-control.svg)
|
||||
skin/classic/browser/zen-icons/zoom-out.svg (../shared/zen-icons/zoom-out.svg)
|
||||
|
Before Width: | Height: | Size: 572 B After Width: | Height: | Size: 572 B |
Before Width: | Height: | Size: 528 B After Width: | Height: | Size: 528 B |
Before Width: | Height: | Size: 316 B After Width: | Height: | Size: 316 B |
Before Width: | Height: | Size: 317 B After Width: | Height: | Size: 317 B |
Before Width: | Height: | Size: 316 B After Width: | Height: | Size: 316 B |
Before Width: | Height: | Size: 317 B After Width: | Height: | Size: 317 B |
Before Width: | Height: | Size: 692 B After Width: | Height: | Size: 692 B |
Before Width: | Height: | Size: 593 B After Width: | Height: | Size: 593 B |
Before Width: | Height: | Size: 377 B After Width: | Height: | Size: 377 B |
Before Width: | Height: | Size: 380 B After Width: | Height: | Size: 380 B |
Before Width: | Height: | Size: 464 B After Width: | Height: | Size: 464 B |
Before Width: | Height: | Size: 464 B After Width: | Height: | Size: 464 B |
Before Width: | Height: | Size: 439 B After Width: | Height: | Size: 439 B |
Before Width: | Height: | Size: 843 B After Width: | Height: | Size: 843 B |
Before Width: | Height: | Size: 660 B After Width: | Height: | Size: 660 B |
Before Width: | Height: | Size: 1006 B After Width: | Height: | Size: 1006 B |
Before Width: | Height: | Size: 556 B After Width: | Height: | Size: 556 B |
Before Width: | Height: | Size: 318 B After Width: | Height: | Size: 318 B |
Before Width: | Height: | Size: 388 B After Width: | Height: | Size: 388 B |
Before Width: | Height: | Size: 562 B After Width: | Height: | Size: 562 B |
Before Width: | Height: | Size: 366 B After Width: | Height: | Size: 366 B |
Before Width: | Height: | Size: 668 B After Width: | Height: | Size: 668 B |
Before Width: | Height: | Size: 634 B After Width: | Height: | Size: 634 B |
Before Width: | Height: | Size: 795 B After Width: | Height: | Size: 795 B |
Before Width: | Height: | Size: 694 B After Width: | Height: | Size: 694 B |
Before Width: | Height: | Size: 911 B After Width: | Height: | Size: 911 B |
Before Width: | Height: | Size: 489 B After Width: | Height: | Size: 489 B |
Before Width: | Height: | Size: 684 B After Width: | Height: | Size: 684 B |
Before Width: | Height: | Size: 468 B After Width: | Height: | Size: 468 B |
Before Width: | Height: | Size: 449 B After Width: | Height: | Size: 449 B |
Before Width: | Height: | Size: 564 B After Width: | Height: | Size: 564 B |
Before Width: | Height: | Size: 711 B After Width: | Height: | Size: 711 B |
Before Width: | Height: | Size: 474 B After Width: | Height: | Size: 474 B |
Before Width: | Height: | Size: 415 B After Width: | Height: | Size: 415 B |
Before Width: | Height: | Size: 773 B After Width: | Height: | Size: 773 B |
Before Width: | Height: | Size: 901 B After Width: | Height: | Size: 901 B |
Before Width: | Height: | Size: 409 B After Width: | Height: | Size: 409 B |
Before Width: | Height: | Size: 455 B After Width: | Height: | Size: 455 B |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 632 B After Width: | Height: | Size: 632 B |
Before Width: | Height: | Size: 666 B After Width: | Height: | Size: 666 B |
Before Width: | Height: | Size: 522 B After Width: | Height: | Size: 522 B |
Before Width: | Height: | Size: 649 B After Width: | Height: | Size: 649 B |
Before Width: | Height: | Size: 814 B After Width: | Height: | Size: 814 B |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 433 B After Width: | Height: | Size: 433 B |
Before Width: | Height: | Size: 525 B After Width: | Height: | Size: 525 B |
Before Width: | Height: | Size: 383 B After Width: | Height: | Size: 383 B |
Before Width: | Height: | Size: 537 B After Width: | Height: | Size: 537 B |
Before Width: | Height: | Size: 537 B After Width: | Height: | Size: 537 B |
Before Width: | Height: | Size: 718 B After Width: | Height: | Size: 718 B |
Before Width: | Height: | Size: 505 B After Width: | Height: | Size: 505 B |
Before Width: | Height: | Size: 604 B After Width: | Height: | Size: 604 B |
Before Width: | Height: | Size: 520 B After Width: | Height: | Size: 520 B |
Before Width: | Height: | Size: 534 B After Width: | Height: | Size: 534 B |
1134
src/browser/themes/shared/zen-icons/lin/icons.css
Normal file
Before Width: | Height: | Size: 701 B After Width: | Height: | Size: 701 B |
Before Width: | Height: | Size: 626 B After Width: | Height: | Size: 626 B |
Before Width: | Height: | Size: 693 B After Width: | Height: | Size: 693 B |