mirror of
https://github.com/zen-browser/desktop.git
synced 2025-12-12 17:42:29 +00:00
Compare commits
11 Commits
window-syn
...
1.17.13b
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6a218d109a | ||
|
|
a6dd6ab984 | ||
|
|
0c0c982bc2 | ||
|
|
bcf4c4d1a3 | ||
|
|
e4c36574b9 | ||
|
|
0be950c42a | ||
|
|
ad7c9688b9 | ||
|
|
ef257649a8 | ||
|
|
cd4d2e4f53 | ||
|
|
9caf32de38 | ||
|
|
43de5c69e9 |
4
.github/workflows/build.yml
vendored
4
.github/workflows/build.yml
vendored
@@ -190,7 +190,7 @@ jobs:
|
||||
name: Lint
|
||||
|
||||
check-release:
|
||||
runs-on: blacksmith-2vcpu-ubuntu-2404
|
||||
runs-on: ubuntu-latest
|
||||
needs: [build-data, lint]
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
@@ -231,7 +231,7 @@ jobs:
|
||||
source:
|
||||
permissions:
|
||||
contents: write
|
||||
runs-on: blacksmith-2vcpu-ubuntu-2404
|
||||
runs-on: ubuntu-latest
|
||||
needs: [build-data, check-release]
|
||||
|
||||
steps:
|
||||
|
||||
@@ -34,7 +34,7 @@ Zen is a firefox-based browser with the aim of pushing your productivity to a ne
|
||||
|
||||
### Firefox Versions
|
||||
|
||||
- [`Release`](https://zen-browser.app/download) - Is currently built using Firefox version `145.0.2`! 🚀
|
||||
- [`Release`](https://zen-browser.app/download) - Is currently built using Firefox version `146.0`! 🚀
|
||||
- [`Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 146.0`!
|
||||
|
||||
### Contributing
|
||||
|
||||
@@ -1 +1 @@
|
||||
acd4663cd1530303fcca85b420a78f4686c4628b
|
||||
8908c8eb566c64521e2a777ad8a80b62bd6aa193
|
||||
20
configs/dumps/search-config-v2.json
Normal file
20
configs/dumps/search-config-v2.json
Normal file
@@ -0,0 +1,20 @@
|
||||
// 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/.
|
||||
{
|
||||
"remove": {
|
||||
"identifiers": [
|
||||
// Firefox adds Perplexity by default, we don't want it as
|
||||
// its not very privacy focused.
|
||||
"perplexity",
|
||||
|
||||
// These are not search engines, Firefox adds them by default
|
||||
// but we don't want them.
|
||||
"wikipedia",
|
||||
"wikipedia-*",
|
||||
"ebay",
|
||||
"ebay-*"
|
||||
]
|
||||
},
|
||||
"timestamp": 1765455207275
|
||||
}
|
||||
@@ -10,7 +10,8 @@
|
||||
"build": "surfer build",
|
||||
"build:ui": "surfer build --ui",
|
||||
"start": "cd engine && python3 ./mach run --noprofile",
|
||||
"import": "npm run ffprefs && surfer import",
|
||||
"import": "npm run ffprefs && npm run import:dumps && surfer import",
|
||||
"import:dumps": "python3 scripts/update_service_dumps.py",
|
||||
"export": "surfer export",
|
||||
"init": "npm run download && npm run import && npm run bootstrap",
|
||||
"download": "surfer download",
|
||||
|
||||
@@ -20,3 +20,6 @@
|
||||
|
||||
- name: browser.ml.chat.menu
|
||||
value: false
|
||||
|
||||
- name: browser.ml.linkPreview.enabled
|
||||
value: false
|
||||
|
||||
14
scripts/json_with_comments.py
Normal file
14
scripts/json_with_comments.py
Normal file
@@ -0,0 +1,14 @@
|
||||
# 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/.
|
||||
|
||||
import json
|
||||
from typing import Any
|
||||
|
||||
class JSONWithCommentsDecoder(json.JSONDecoder):
|
||||
def __init__(self, **kw):
|
||||
super().__init__(**kw)
|
||||
|
||||
def decode(self, s: str) -> Any:
|
||||
s = '\n'.join(l for l in s.split('\n') if not l.lstrip(' ').startswith('//'))
|
||||
return super().decode(s)
|
||||
@@ -6,7 +6,7 @@ import os
|
||||
import sys
|
||||
import json
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
from json_with_comments import JSONWithCommentsDecoder
|
||||
|
||||
IGNORE_PREFS_FILE_IN = os.path.join(
|
||||
'src', 'zen', 'tests', 'ignorePrefs.json'
|
||||
@@ -16,15 +16,6 @@ IGNORE_PREFS_FILE_OUT = os.path.join(
|
||||
)
|
||||
|
||||
|
||||
class JSONWithCommentsDecoder(json.JSONDecoder):
|
||||
def __init__(self, **kw):
|
||||
super().__init__(**kw)
|
||||
|
||||
def decode(self, s: str) -> Any:
|
||||
s = '\n'.join(l for l in s.split('\n') if not l.lstrip(' ').startswith('//'))
|
||||
return super().decode(s)
|
||||
|
||||
|
||||
def copy_ignore_prefs():
|
||||
print("Copying ignorePrefs.json from src/zen/tests to engine/testing/mochitest...")
|
||||
# if there are prefs that dont exist on output file, copy them from input file
|
||||
|
||||
63
scripts/update_service_dumps.py
Normal file
63
scripts/update_service_dumps.py
Normal file
@@ -0,0 +1,63 @@
|
||||
# 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/.
|
||||
|
||||
import os
|
||||
import json
|
||||
from json_with_comments import JSONWithCommentsDecoder
|
||||
|
||||
DUMPS_FOLDER = os.path.join(
|
||||
'configs', 'dumps'
|
||||
)
|
||||
ENGINE_DUMPS_FOLDER = os.path.join(
|
||||
'engine', 'services', 'settings', 'dumps', 'main'
|
||||
)
|
||||
|
||||
|
||||
def merge_dumps(original, updates):
|
||||
"""Filters entries from the original dump, removing those whose identifiers are specified in the updates removal list."""
|
||||
remove_ids = updates.get('remove', {"identifiers": []}).get('identifiers', [])
|
||||
|
||||
# Filter out entries in original that are in remove_ids.
|
||||
# We may find example-* patterns, so we need to handle that as well.
|
||||
merged_data = [
|
||||
entry for entry in original.get('data', [])
|
||||
if not any(
|
||||
entry.get('identifier', '') == rid or
|
||||
(rid.endswith('*') and entry.get('identifier', '').startswith(rid[:-1]))
|
||||
for rid in remove_ids
|
||||
)
|
||||
]
|
||||
|
||||
return {
|
||||
'data': merged_data,
|
||||
**{k: v for k, v in original.items() if k != 'data'},
|
||||
'timestamp': updates.get('timestamp', original.get('timestamp'))
|
||||
}
|
||||
|
||||
|
||||
def main():
|
||||
for filename in os.listdir(DUMPS_FOLDER):
|
||||
if filename.endswith('.json'):
|
||||
# parse json with comments
|
||||
with open(os.path.join(DUMPS_FOLDER, filename), 'r') as f:
|
||||
data = json.load(f, cls=JSONWithCommentsDecoder)
|
||||
original_path = os.path.join(ENGINE_DUMPS_FOLDER, filename)
|
||||
if os.path.exists(original_path):
|
||||
with open(original_path, 'r', encoding='utf-8') as f:
|
||||
original_content = f.read()
|
||||
original_content = '\n'.join(
|
||||
line for line in original_content.split('\n') if not line.lstrip(' ').startswith('//')
|
||||
)
|
||||
original_data = json.loads(original_content)
|
||||
merged_data = merge_dumps(original_data, data)
|
||||
with open(original_path, 'w', encoding='utf-8') as f:
|
||||
json.dump(merged_data, f, indent=2, ensure_ascii=False)
|
||||
print(f"Updated dump: {filename}")
|
||||
else:
|
||||
print(f"Original dump file not found: {original_path}")
|
||||
exit(1)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -82,21 +82,23 @@
|
||||
# They must all go from the middle to the right side. They must always stay verically centered.
|
||||
# And reach to 180 on the right side, meaning we must divide the width in 16 segments.
|
||||
<box data-type="explicit-black-white" data-algo="float" data-num-dots="1"
|
||||
data-position="180,180" style="background: rgb(0, 0, 0);"></box>
|
||||
data-position="337.5,180" style="background: rgb(224, 224, 224);"></box>
|
||||
<box data-type="explicit-black-white" data-algo="float" data-num-dots="1"
|
||||
data-position="202.5,180" style="background: rgb(32, 32, 32);"></box>
|
||||
<box data-type="explicit-black-white" data-algo="float" data-num-dots="1"
|
||||
data-position="225,180" style="background: rgb(64, 64, 64);"></box>
|
||||
<box data-type="explicit-black-white" data-algo="float" data-num-dots="1"
|
||||
data-position="247.5,180" style="background: rgb(96, 96, 96);"></box>
|
||||
<box data-type="explicit-black-white" data-algo="float" data-num-dots="1"
|
||||
data-position="270,180" style="background: rgb(128, 128, 128);"></box>
|
||||
<box data-type="explicit-black-white" data-algo="float" data-num-dots="1"
|
||||
data-position="292.5,180" style="background: rgb(160, 160, 160);"></box>
|
||||
data-position="337.5,180" style="background: rgb(224, 224, 224);"></box>
|
||||
<box data-type="explicit-black-white" data-algo="float" data-num-dots="1"
|
||||
data-position="315,180" style="background: rgb(192, 192, 192);"></box>
|
||||
<box data-type="explicit-black-white" data-algo="float" data-num-dots="1"
|
||||
data-position="337.5,180" style="background: rgb(224, 224, 224);"></box>
|
||||
data-position="292.5,180" style="background: rgb(160, 160, 160);"></box>
|
||||
<box data-type="explicit-black-white" data-algo="float" data-num-dots="1"
|
||||
data-position="270,180" style="background: rgb(128, 128, 128);"></box>
|
||||
<box data-type="explicit-black-white" data-algo="float" data-num-dots="1"
|
||||
data-position="247.5,180" style="background: rgb(96, 96, 96);"></box>
|
||||
<box data-type="explicit-black-white" data-algo="float" data-num-dots="1"
|
||||
data-position="225,180" style="background: rgb(64, 64, 64);"></box>
|
||||
<box data-type="explicit-black-white" data-algo="float" data-num-dots="1"
|
||||
data-position="202.5,180" style="background: rgb(32, 32, 32);"></box>
|
||||
<box data-type="explicit-black-white" data-algo="float" data-num-dots="1"
|
||||
data-position="180,180" style="background: rgb(0, 0, 0);"></box>
|
||||
</hbox>
|
||||
</hbox>
|
||||
<toolbarbutton id="PanelUI-zen-gradient-generator-color-page-right" class="toolbarbutton-1" />
|
||||
@@ -120,10 +122,12 @@
|
||||
</defs>
|
||||
</svg>
|
||||
</box>
|
||||
<html:input type="range" max="0.9" value="0.4" step="0.001" id="PanelUI-zen-gradient-generator-opacity"
|
||||
<html:input type="range" value="0.4" step="0.001" id="PanelUI-zen-gradient-generator-opacity"
|
||||
#ifdef XP_MACOSX
|
||||
min="0.25"
|
||||
max="0.75"
|
||||
min="0.35"
|
||||
#else
|
||||
max="0.9"
|
||||
min="0.35"
|
||||
#endif
|
||||
/>
|
||||
|
||||
@@ -263,7 +263,7 @@
|
||||
& .urlbar-background {
|
||||
--zen-urlbar-background-base: light-dark(
|
||||
#fbfbfb,
|
||||
color-mix(in srgb, hsl(0, 0%, 1%), var(--zen-colors-primary) 30%)
|
||||
color-mix(in srgb, hsl(0, 0%, 6.7%), var(--zen-colors-primary) 30%)
|
||||
);
|
||||
@media -moz-pref('zen.theme.acrylic-elements') {
|
||||
--zen-urlbar-background-transparent: color-mix(
|
||||
@@ -505,8 +505,8 @@
|
||||
--urlbar-container-height: 62px !important;
|
||||
--urlbar-margin-inline: 10px !important;
|
||||
|
||||
min-width: min(90%, 50rem) !important;
|
||||
width: var(--zen-urlbar-width, min(90%, 50rem)) !important;
|
||||
min-width: min(90%, 62rem) !important;
|
||||
width: var(--zen-urlbar-width, min(90%, 62rem)) !important;
|
||||
font-size: 1.15em !important;
|
||||
@media (-moz-platform: macos) {
|
||||
font-size: 1.5em !important;
|
||||
|
||||
@@ -131,7 +131,6 @@
|
||||
========================================================================== */
|
||||
.pinned-tabs-container-separator {
|
||||
height: 22px;
|
||||
padding-bottom: 2px;
|
||||
border: none;
|
||||
width: 100%;
|
||||
transition:
|
||||
@@ -142,6 +141,7 @@
|
||||
position: relative;
|
||||
opacity: 1;
|
||||
align-items: center;
|
||||
padding: 0 5px;
|
||||
|
||||
& toolbarseparator {
|
||||
height: 1px;
|
||||
@@ -488,7 +488,6 @@
|
||||
#navigator-toolbox[zen-sidebar-expanded='true'] {
|
||||
--zen-toolbox-min-width: fit-content;
|
||||
|
||||
--tab-icon-end-margin: 8.5px;
|
||||
padding: var(--zen-toolbox-padding);
|
||||
padding-left: 0;
|
||||
padding-top: 0;
|
||||
@@ -566,8 +565,8 @@
|
||||
& #tabbrowser-arrowscrollbox-periphery > toolbarbutton {
|
||||
width: 100% !important;
|
||||
border-radius: var(--border-radius-medium) !important;
|
||||
padding-left: var(--toolbarbutton-inner-padding) !important;
|
||||
padding-right: var(--toolbarbutton-inner-padding) !important;
|
||||
padding-left: var(--tab-inline-padding) !important;
|
||||
padding-right: var(--tab-inline-padding) !important;
|
||||
|
||||
& label {
|
||||
display: flex;
|
||||
@@ -600,6 +599,7 @@
|
||||
|
||||
& #tabbrowser-tabs {
|
||||
--tab-inline-padding: 8px;
|
||||
--tab-icon-end-margin: 8.5px;
|
||||
|
||||
& .tabbrowser-tab {
|
||||
& .tab-label-container {
|
||||
@@ -1110,14 +1110,22 @@
|
||||
max-height 0.3s ease-out,
|
||||
grid-template-columns 0.3s ease-out;
|
||||
opacity: 1;
|
||||
grid-template-columns: repeat(auto-fit, minmax(max(23.7%, 48px), 1fr));
|
||||
--min-essentials-width-wrap: calc(var(--tab-min-height) + 4px);
|
||||
grid-template-columns: repeat(
|
||||
auto-fit,
|
||||
minmax(max(23.7%, var(--min-essentials-width-wrap)), 1fr)
|
||||
);
|
||||
&[data-hack-type='1'] {
|
||||
grid-template-columns: repeat(auto-fit, minmax(max(30%, 48px), auto));
|
||||
grid-template-columns: repeat(
|
||||
auto-fit,
|
||||
minmax(max(30%, var(--min-essentials-width-wrap)), auto)
|
||||
);
|
||||
}
|
||||
&[data-hack-type='2'] {
|
||||
grid-template-columns: repeat(
|
||||
auto-fit,
|
||||
minmax(max(23%, 48px), 1fr) minmax(max(23%, 48px), 1fr)
|
||||
minmax(max(23%, var(--min-essentials-width-wrap)), 1fr)
|
||||
minmax(max(23%, var(--min-essentials-width-wrap)), 1fr)
|
||||
);
|
||||
}
|
||||
&[data-hack-type='3'] {
|
||||
@@ -1160,7 +1168,6 @@
|
||||
|
||||
& .tab-background {
|
||||
border-radius: var(--border-radius-medium) !important;
|
||||
transition: background 0.1s ease-in-out;
|
||||
}
|
||||
|
||||
--tab-selected-bgcolor: light-dark(rgba(255, 255, 255, 0.85), rgba(255, 255, 255, 0.2));
|
||||
|
||||
@@ -41,8 +41,15 @@ function parseSinePath(pathStr) {
|
||||
return points;
|
||||
}
|
||||
|
||||
const MAX_OPACITY = 0.9;
|
||||
const MIN_OPACITY = AppConstants.platform === 'macosx' ? 0.25 : 0.35;
|
||||
const lazy = {};
|
||||
|
||||
ChromeUtils.defineLazyGetter(lazy, 'MAX_OPACITY', () => {
|
||||
return parseFloat(document.getElementById('PanelUI-zen-gradient-generator-opacity').max);
|
||||
});
|
||||
|
||||
ChromeUtils.defineLazyGetter(lazy, 'MIN_OPACITY', () => {
|
||||
return parseFloat(document.getElementById('PanelUI-zen-gradient-generator-opacity').min);
|
||||
});
|
||||
|
||||
const EXPLICIT_LIGHTNESS_TYPE = 'explicit-lightness';
|
||||
const EXPLICIT_BLACKWHITE_TYPE = 'explicit-black-white';
|
||||
@@ -440,7 +447,7 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature {
|
||||
const gradient = this.panel.querySelector('.zen-theme-picker-gradient');
|
||||
const rect = gradient.getBoundingClientRect();
|
||||
const padding = 30; // each side
|
||||
const dotHalfSize = 38 / 2; // half the size of the dot
|
||||
const dotHalfSize = 29; // half the size of the dot. -11 for correct centering
|
||||
x += dotHalfSize;
|
||||
y += dotHalfSize;
|
||||
rect.width += padding * 2; // Adjust width and height for padding
|
||||
@@ -1095,15 +1102,17 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature {
|
||||
colorToBlendOpacity = 0.35;
|
||||
} else if (AppConstants.platform === 'macosx') {
|
||||
colorToBlend = [255, 255, 255];
|
||||
colorToBlendOpacity = 0.3;
|
||||
colorToBlendOpacity = 0.35;
|
||||
}
|
||||
if (colorToBlend) {
|
||||
const blendedAlpha = Math.min(
|
||||
1,
|
||||
opacity + MIN_OPACITY + colorToBlendOpacity * (1 - (opacity + MIN_OPACITY))
|
||||
opacity + lazy.MIN_OPACITY + colorToBlendOpacity * (1 - (opacity + lazy.MIN_OPACITY))
|
||||
);
|
||||
baseColor = this.blendColors(baseColor, colorToBlend, blendedAlpha * 100);
|
||||
opacity += colorToBlendOpacity * (1 - opacity);
|
||||
if (AppConstants.platform !== 'macosx') {
|
||||
opacity += colorToBlendOpacity * (1 - opacity);
|
||||
}
|
||||
}
|
||||
return `rgba(${baseColor[0]}, ${baseColor[1]}, ${baseColor[2]}, ${opacity})`;
|
||||
}
|
||||
@@ -1386,13 +1395,13 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature {
|
||||
const [_, secondStop, thirdStop] = document.querySelectorAll(
|
||||
'#PanelUI-zen-gradient-generator-slider-wave-gradient stop'
|
||||
);
|
||||
// Opacity can only be between MIN_OPACITY to MAX_OPACITY. Make opacity relative to that range
|
||||
if (opacity < MIN_OPACITY) {
|
||||
// Opacity can only be between lazy.MIN_OPACITY to lazy.MAX_OPACITY. Make opacity relative to that range
|
||||
if (opacity < lazy.MIN_OPACITY) {
|
||||
opacity = 0;
|
||||
} else if (opacity > MAX_OPACITY) {
|
||||
} else if (opacity > lazy.MAX_OPACITY) {
|
||||
opacity = 1;
|
||||
} else {
|
||||
opacity = (opacity - MIN_OPACITY) / (MAX_OPACITY - MIN_OPACITY);
|
||||
opacity = (opacity - lazy.MIN_OPACITY) / (lazy.MAX_OPACITY - lazy.MIN_OPACITY);
|
||||
}
|
||||
if (isDefaultTheme) {
|
||||
opacity = 1; // If it's the default theme, we want the wave to be
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
"binaryName": "zen",
|
||||
"version": {
|
||||
"product": "firefox",
|
||||
"version": "145.0.2",
|
||||
"version": "146.0",
|
||||
"candidate": "146.0"
|
||||
},
|
||||
"buildOptions": {
|
||||
@@ -19,7 +19,7 @@
|
||||
"brandShortName": "Zen",
|
||||
"brandFullName": "Zen Browser",
|
||||
"release": {
|
||||
"displayVersion": "1.17.12b",
|
||||
"displayVersion": "1.17.13b",
|
||||
"github": {
|
||||
"repo": "zen-browser/desktop"
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user