Compare commits
177 Commits
1.0.0-a.8
...
1.0.0-a.14
Author | SHA1 | Date | |
---|---|---|---|
![]() |
6f7a6faf90 | ||
![]() |
3f1bdfe50d | ||
![]() |
537b20d2dc | ||
![]() |
d810608a8c | ||
![]() |
20b6203851 | ||
![]() |
9474fa3f3c | ||
![]() |
5dfaef2594 | ||
![]() |
8005aa1f43 | ||
![]() |
cd234259f7 | ||
![]() |
df26d06d12 | ||
![]() |
1265cd623e | ||
![]() |
de19bdf2b4 | ||
![]() |
056f70a6fa | ||
![]() |
08e7a92223 | ||
![]() |
5316ff8e47 | ||
![]() |
214e290af3 | ||
![]() |
0499ba0004 | ||
![]() |
a513d95aad | ||
![]() |
fd556f8186 | ||
![]() |
c61eb6d28a | ||
![]() |
3c04945df6 | ||
![]() |
c27168953a | ||
![]() |
33e731dfe5 | ||
![]() |
fdd05926ab | ||
![]() |
ccd40b544a | ||
![]() |
0aa9d8c6ed | ||
![]() |
eef45c8007 | ||
![]() |
9ce7c60d4a | ||
![]() |
79701ed6dc | ||
![]() |
a90e5f3456 | ||
![]() |
a933c5b9bd | ||
![]() |
9968d550ae | ||
![]() |
3e17c3c1e2 | ||
![]() |
2d72365dbd | ||
![]() |
d61186a042 | ||
![]() |
33ba2f25cd | ||
![]() |
3e4d69a012 | ||
![]() |
c27f4767db | ||
![]() |
6740a7a610 | ||
![]() |
c00eb07484 | ||
![]() |
1b72b68a47 | ||
![]() |
0ac10f2c03 | ||
![]() |
0b824acd20 | ||
![]() |
b37b2e656a | ||
![]() |
36d6abda0d | ||
![]() |
07893e79fe | ||
![]() |
d8a9cabb2b | ||
![]() |
9729f8d84e | ||
![]() |
641c709f5d | ||
![]() |
be45bdb83f | ||
![]() |
2773bd4850 | ||
![]() |
a0e95e7748 | ||
![]() |
b90e50ed87 | ||
![]() |
9c8b0081c0 | ||
![]() |
bb1cd6097b | ||
![]() |
1496f3addc | ||
![]() |
a2bd16a210 | ||
![]() |
26e158072e | ||
![]() |
84a5f05eb6 | ||
![]() |
79967edb22 | ||
![]() |
53644a4ba0 | ||
![]() |
01df43fdc5 | ||
![]() |
b524ec7569 | ||
![]() |
eea0a8aee7 | ||
![]() |
498c909756 | ||
![]() |
661dcbb9f9 | ||
![]() |
c2e8b2790c | ||
![]() |
14da8cd9e7 | ||
![]() |
741cfd7af4 | ||
![]() |
fa6911df5e | ||
![]() |
4e61ab5e98 | ||
![]() |
3900908ed7 | ||
![]() |
3cd21f5516 | ||
![]() |
29411d02d5 | ||
![]() |
ab5cf96bf1 | ||
![]() |
d60d4e888a | ||
![]() |
9998f93942 | ||
![]() |
76b2b55eda | ||
![]() |
b224616b43 | ||
![]() |
236c4160fc | ||
![]() |
7e3c44846d | ||
![]() |
b1709c757a | ||
![]() |
65841d2085 | ||
![]() |
58f18098f7 | ||
![]() |
e31d49ec36 | ||
![]() |
3454ca6336 | ||
![]() |
bd5c242c8c | ||
![]() |
86f8b91fdb | ||
![]() |
3d57cff39b | ||
![]() |
7b40eba9b7 | ||
![]() |
57ac6c1b37 | ||
![]() |
d7630b258a | ||
![]() |
0883536f75 | ||
![]() |
6e2b4b17e6 | ||
![]() |
38e4a7150c | ||
![]() |
052774c5c3 | ||
![]() |
18055e09d9 | ||
![]() |
e24dcdb6ac | ||
![]() |
e3774d666f | ||
![]() |
ec1eef6159 | ||
![]() |
6862e6cbc6 | ||
![]() |
639806e13f | ||
![]() |
ef01c86d7c | ||
![]() |
e32d9cad92 | ||
![]() |
3b5e401899 | ||
![]() |
3bfdb7e3db | ||
![]() |
e567dee12f | ||
![]() |
c55fadc889 | ||
![]() |
33d2954e93 | ||
![]() |
9304b51391 | ||
![]() |
0347ead8a1 | ||
![]() |
9fd9883c8f | ||
![]() |
01e99f6f3d | ||
![]() |
259072a5e5 | ||
![]() |
5079bb6364 | ||
![]() |
37bc8f5f65 | ||
![]() |
4f97d66443 | ||
![]() |
8e19e74894 | ||
![]() |
babc34cc90 | ||
![]() |
c2f97454ac | ||
![]() |
7de872b4dd | ||
![]() |
dc5992bdc7 | ||
![]() |
453c9fef53 | ||
![]() |
5d946db186 | ||
![]() |
406f11dd9a | ||
![]() |
be1efb2ac5 | ||
![]() |
6c4b3aa6f9 | ||
![]() |
2975d5c645 | ||
![]() |
97ce6bae00 | ||
![]() |
b659bfd5e6 | ||
![]() |
81f88c2c21 | ||
![]() |
5bbbefb2a7 | ||
![]() |
ea5c42674e | ||
![]() |
ad2e2f6b24 | ||
![]() |
3333fe22d2 | ||
![]() |
349b33c115 | ||
![]() |
2c0b34e666 | ||
![]() |
84bc2c3c89 | ||
![]() |
2927b58924 | ||
![]() |
a6aa7e3eae | ||
![]() |
d67e1e5b3e | ||
![]() |
09b808b18a | ||
![]() |
deaa0e2781 | ||
![]() |
3140931cdb | ||
![]() |
084d70e68d | ||
![]() |
ac3df15a57 | ||
![]() |
6688fff000 | ||
![]() |
33ff028509 | ||
![]() |
e2ca345dea | ||
![]() |
b17fb12715 | ||
![]() |
51bd006bd1 | ||
![]() |
4fc321292f | ||
![]() |
ea3c6e7131 | ||
![]() |
234f4ecfed | ||
![]() |
d5164f05a5 | ||
![]() |
ae2aa202de | ||
![]() |
940ce6a6d7 | ||
![]() |
edf17c7eed | ||
![]() |
2f668de97d | ||
![]() |
73dea3ad96 | ||
![]() |
2171635145 | ||
![]() |
935fcd9153 | ||
![]() |
a9bfa4dd26 | ||
![]() |
2dc59efd99 | ||
![]() |
b1a3f97592 | ||
![]() |
3bd2d169b4 | ||
![]() |
fc8a501e73 | ||
![]() |
32a3ad96ee | ||
![]() |
3f684745ee | ||
![]() |
13f1daf465 | ||
![]() |
28c84d971d | ||
![]() |
9251970257 | ||
![]() |
a3fd8d17ba | ||
![]() |
17fea1b017 | ||
![]() |
b11c0d8700 | ||
![]() |
86aca3144f | ||
![]() |
11890a70c0 |
6
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -1,6 +1,5 @@
|
|||||||
name: Bug Report
|
name: Bug Report Or Feature Request
|
||||||
description: File a bug report
|
description: File a bug report
|
||||||
labels: [bug]
|
|
||||||
body:
|
body:
|
||||||
- type: markdown
|
- type: markdown
|
||||||
attributes:
|
attributes:
|
||||||
@@ -51,7 +50,8 @@ body:
|
|||||||
multiple: true
|
multiple: true
|
||||||
options:
|
options:
|
||||||
- Linux
|
- Linux
|
||||||
- macOS
|
- macOS - aarch64
|
||||||
|
- macOS - Intel
|
||||||
- Windows
|
- Windows
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
|
2
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -1 +1 @@
|
|||||||
blank_issues_enabled: true
|
blank_issues_enabled: false
|
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
@@ -1,20 +0,0 @@
|
|||||||
---
|
|
||||||
name: Feature request
|
|
||||||
about: Suggest an idea for this project
|
|
||||||
title: ''
|
|
||||||
labels: feature_request
|
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Is your feature request related to a problem? Please describe.**
|
|
||||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
|
||||||
|
|
||||||
**Describe the solution you'd like**
|
|
||||||
A clear and concise description of what you want to happen.
|
|
||||||
|
|
||||||
**Describe alternatives you've considered**
|
|
||||||
A clear and concise description of any alternative solutions or features you've considered.
|
|
||||||
|
|
||||||
**Additional context**
|
|
||||||
Add any other context or screenshots about the feature request here.
|
|
32
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
name: Feature Request
|
||||||
|
description: File a feature request
|
||||||
|
labels:
|
||||||
|
- "kind: enhancement"
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
Thank you for filing a feature request.
|
||||||
|
- type: textarea
|
||||||
|
id: what-happened
|
||||||
|
attributes:
|
||||||
|
label: What feature would you like to see?
|
||||||
|
description: Please describe the feature you would like to see.
|
||||||
|
placeholder: Tell us what you would like to see!
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: dropdown
|
||||||
|
id: platform
|
||||||
|
attributes:
|
||||||
|
label: What platform are you seeing the problem on?
|
||||||
|
options:
|
||||||
|
- Linux
|
||||||
|
- macOS
|
||||||
|
- Windows
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: logs
|
||||||
|
attributes:
|
||||||
|
label: Additional context
|
||||||
|
description: Add any other context about the feature request here.
|
198
.github/workflows/alpha.yml
vendored
@@ -30,7 +30,10 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
node-version: 20
|
node-version: 20
|
||||||
|
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
token: ${{ secrets.DEPLOY_KEY }}
|
||||||
|
|
||||||
- name: Install pnpm
|
- name: Install pnpm
|
||||||
run: npm install -g pnpm
|
run: npm install -g pnpm
|
||||||
@@ -87,8 +90,10 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
node-version: 20
|
node-version: 20
|
||||||
|
|
||||||
- name: Checkout
|
- uses: actions/checkout@v4
|
||||||
uses: actions/checkout@v3
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
token: ${{ secrets.DEPLOY_KEY }}
|
||||||
|
|
||||||
- name: Install pnpm
|
- name: Install pnpm
|
||||||
run: npm install -g pnpm
|
run: npm install -g pnpm
|
||||||
@@ -128,7 +133,7 @@ jobs:
|
|||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: [build-data]
|
needs: [build-data, check-release]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Install Node.js
|
- name: Install Node.js
|
||||||
@@ -136,9 +141,10 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
node-version: 20
|
node-version: 20
|
||||||
|
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
|
token: ${{ secrets.DEPLOY_KEY }}
|
||||||
|
|
||||||
- name: Setup git
|
- name: Setup git
|
||||||
run: |
|
run: |
|
||||||
@@ -185,6 +191,7 @@ jobs:
|
|||||||
# needs: [build-data]
|
# needs: [build-data]
|
||||||
# permissions:
|
# permissions:
|
||||||
# contents: write
|
# contents: write
|
||||||
|
# secrets: inherit
|
||||||
# with:
|
# with:
|
||||||
# build-version: ${{ needs.build-data.outputs.version }}
|
# build-version: ${{ needs.build-data.outputs.version }}
|
||||||
# generate-gpo: true
|
# generate-gpo: true
|
||||||
@@ -195,6 +202,7 @@ jobs:
|
|||||||
# uses: ./.github/workflows/windows-profile-build.yml
|
# uses: ./.github/workflows/windows-profile-build.yml
|
||||||
# permissions:
|
# permissions:
|
||||||
# contents: write
|
# contents: write
|
||||||
|
# secrets: inherit
|
||||||
# needs: [windows-step-1, build-data]
|
# needs: [windows-step-1, build-data]
|
||||||
# with:
|
# with:
|
||||||
# build-version: ${{ needs.build-data.outputs.version }}
|
# build-version: ${{ needs.build-data.outputs.version }}
|
||||||
@@ -205,6 +213,7 @@ jobs:
|
|||||||
uses: ./.github/workflows/windows-alpha-build.yml
|
uses: ./.github/workflows/windows-alpha-build.yml
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
|
secrets: inherit
|
||||||
needs: [build-data]
|
needs: [build-data]
|
||||||
with:
|
with:
|
||||||
build-version: ${{ needs.build-data.outputs.version }}
|
build-version: ${{ needs.build-data.outputs.version }}
|
||||||
@@ -215,6 +224,7 @@ jobs:
|
|||||||
uses: ./.github/workflows/linux-alpha-build.yml
|
uses: ./.github/workflows/linux-alpha-build.yml
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
|
secrets: inherit
|
||||||
needs: [build-data]
|
needs: [build-data]
|
||||||
with:
|
with:
|
||||||
build-version: ${{ needs.build-data.outputs.version }}
|
build-version: ${{ needs.build-data.outputs.version }}
|
||||||
@@ -224,20 +234,82 @@ jobs:
|
|||||||
uses: ./.github/workflows/macos-alpha-build.yml
|
uses: ./.github/workflows/macos-alpha-build.yml
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
|
secrets: inherit
|
||||||
needs: [build-data]
|
needs: [build-data]
|
||||||
with:
|
with:
|
||||||
build-version: ${{ needs.build-data.outputs.version }}
|
build-version: ${{ needs.build-data.outputs.version }}
|
||||||
|
|
||||||
|
appimage:
|
||||||
|
name: AppImage build - Linux ${{ matrix.generic == true && 'generic' || 'specific' }}
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
generic: [true, false]
|
||||||
|
needs: [linux]
|
||||||
|
steps:
|
||||||
|
- name: Install Node.js
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: 20
|
||||||
|
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
token: ${{ secrets.DEPLOY_KEY }}
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
npm install -g pnpm
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get -y install libfuse2
|
||||||
|
|
||||||
|
- name: Download linux build
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: zen.linux-${{ matrix.generic == true && 'generic' || 'specific' }}.tar.bz2
|
||||||
|
|
||||||
|
- name: Execute AppImage build
|
||||||
|
run: |
|
||||||
|
set -eux
|
||||||
|
rm AppDir/.DirIcon || true
|
||||||
|
cp configs/branding/alpha/logo128.png AppDir/usr/share/icons/hicolor/128x128/apps/zen.png
|
||||||
|
cp configs/branding/alpha/logo128.png AppDir/zen.png && ln -s zen.png AppDir/.DirIcon
|
||||||
|
|
||||||
|
APPDIR=AppDir
|
||||||
|
tar -xvf *.tar.* && rm -rf *.tar.*
|
||||||
|
mv zen/* $APPDIR/
|
||||||
|
wget https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage
|
||||||
|
chmod +x *.AppImage
|
||||||
|
chmod +x ./AppDir/AppRun
|
||||||
|
echo "AppDir: $APPDIR"
|
||||||
|
ls -al
|
||||||
|
find .
|
||||||
|
ls -al "$APPDIR"
|
||||||
|
ARCH=x86_64 ./appimagetool-x86_64.AppImage --comp gzip "$APPDIR" zen.AppImage
|
||||||
|
mkdir dist
|
||||||
|
mv zen.AppImage* dist/.
|
||||||
|
mv ./dist/zen.AppImage ./dist/zen-${{ matrix.generic == true && 'generic' || 'specific' }}.AppImage
|
||||||
|
|
||||||
|
- name: Upload artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: zen-${{ matrix.generic == true && 'generic' || 'specific' }}.AppImage
|
||||||
|
path: ./dist/zen-${{ matrix.generic == true && 'generic' || 'specific' }}.AppImage
|
||||||
|
|
||||||
release:
|
release:
|
||||||
if: ${{ github.event.inputs.create_release == 'true' }}
|
if: ${{ github.event.inputs.create_release == 'true' }}
|
||||||
permissions: write-all
|
permissions: write-all
|
||||||
name: Release
|
name: Release
|
||||||
needs: [build-data, linux, source, windows-step-3, check-release, mac]
|
needs: [build-data, linux, source, windows-step-3, check-release, mac, appimage]
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Update repo
|
- uses: actions/checkout@v4
|
||||||
uses: actions/checkout@v4
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
token: ${{ secrets.DEPLOY_KEY }}
|
||||||
|
|
||||||
- name: Git Pull
|
- name: Git Pull
|
||||||
run: git pull
|
run: git pull
|
||||||
@@ -258,9 +330,14 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
cd updates-server
|
cd updates-server
|
||||||
mkdir -p updates
|
mkdir -p updates
|
||||||
cp -a ../linux_update_manifest/. updates/
|
cp -a ../linux_update_manifest_generic/. updates/
|
||||||
cp -a ../windows_update_manifest/. updates/
|
cp -a ../linux_update_manifest_specific/. updates/
|
||||||
cp -a ../macos_update_manifest/. updates/
|
|
||||||
|
cp -a ../windows_update_manifest_generic/. updates/
|
||||||
|
cp -a ../windows_update_manifest_specific/. updates/
|
||||||
|
|
||||||
|
cp -a ../macos_update_manifest_aarch64/. updates/
|
||||||
|
cp -a ../macos_update_manifest_x64/. updates/
|
||||||
|
|
||||||
- uses: stefanzweifel/git-auto-commit-action@v4
|
- uses: stefanzweifel/git-auto-commit-action@v4
|
||||||
with:
|
with:
|
||||||
@@ -274,14 +351,103 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
repo_token: '${{ secrets.DEPLOY_KEY }}'
|
repo_token: '${{ secrets.DEPLOY_KEY }}'
|
||||||
automatic_release_tag: ${{ needs.build-data.outputs.version }}
|
automatic_release_tag: ${{ needs.build-data.outputs.version }}
|
||||||
|
prerelease: false
|
||||||
title: 'Alpha build - ${{ needs.build-data.outputs.version }} (${{ needs.build-data.outputs.build_date }})'
|
title: 'Alpha build - ${{ needs.build-data.outputs.version }} (${{ needs.build-data.outputs.build_date }})'
|
||||||
files: |
|
files: |
|
||||||
zen.linux.tar.bz2
|
|
||||||
zen.win64.zip
|
|
||||||
zen.source.tar.gz
|
zen.source.tar.gz
|
||||||
|
zen.linux-generic.tar.bz2
|
||||||
|
zen.linux-specific.tar.bz2
|
||||||
|
zen-generic.AppImage
|
||||||
|
zen-specific.AppImage
|
||||||
|
zen.win-generic.zip
|
||||||
|
zen.win-specific.zip
|
||||||
linux.mar
|
linux.mar
|
||||||
|
linux-generic.mar
|
||||||
windows.mar
|
windows.mar
|
||||||
macos.mar
|
windows-generic.mar
|
||||||
|
macos-x64.mar
|
||||||
|
macos-aarch64.mar
|
||||||
zen.installer.exe
|
zen.installer.exe
|
||||||
zen.installer.pretty.exe
|
zen.installer-generic.exe
|
||||||
zen.macos.dmg
|
zen.macos-x64.dmg
|
||||||
|
zen.macos-aarch64.dmg
|
||||||
|
|
||||||
|
release-flatpak:
|
||||||
|
if: ${{ github.event.inputs.create_release == 'true' }}
|
||||||
|
permissions: write-all
|
||||||
|
name: Release Flatpak
|
||||||
|
needs: [release, linux, build-data]
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Clone flatpak repo
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
repository: flathub/io.github.zen_browser.zen
|
||||||
|
token: ${{ secrets.DEPLOY_KEY }}
|
||||||
|
|
||||||
|
- name: Download linux generic build
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: zen.linux-generic.tar.bz2
|
||||||
|
|
||||||
|
- name: Update repo
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
path: zen-browser
|
||||||
|
token: ${{ secrets.DEPLOY_KEY }}
|
||||||
|
|
||||||
|
- name: Download flatpak archive
|
||||||
|
run: |
|
||||||
|
wget https://github.com/zen-browser/flatpak/releases/latest/download/archive.tar -O archive.tar
|
||||||
|
|
||||||
|
- name: Setup git
|
||||||
|
run: |
|
||||||
|
git config --global user.name "github-actions[bot]"
|
||||||
|
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
||||||
|
|
||||||
|
- name: Prepare flatpak manifest
|
||||||
|
run: |
|
||||||
|
python3 ./zen-browser/scripts/prepare-flatpak-release.py \
|
||||||
|
--flatpak-archive archive.tar \
|
||||||
|
--version ${{ needs.build-data.outputs.version }} \
|
||||||
|
--linux-archive zen.linux-generic.tar.bz2 \
|
||||||
|
--output io.github.zen_browser.zen.yml \
|
||||||
|
--template-root ./zen-browser/flatpak
|
||||||
|
|
||||||
|
- name: Commit changes
|
||||||
|
run: |
|
||||||
|
git add io.github.zen_browser.zen.yml
|
||||||
|
git commit -m "Update to version ${{ needs.build-data.outputs.version }}"
|
||||||
|
|
||||||
|
- name: Clean up
|
||||||
|
run: |
|
||||||
|
rm -rf zen-browser
|
||||||
|
rm -rf archive.tar
|
||||||
|
rm -rf zen.linux-generic.tar.bz2
|
||||||
|
|
||||||
|
- name: Upload flatpak manifest
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: io.github.zen_browser.zen.yml
|
||||||
|
path: ./io.github.zen_browser.zen.yml
|
||||||
|
|
||||||
|
- name: Create pull request
|
||||||
|
uses: peter-evans/create-pull-request@v6
|
||||||
|
env:
|
||||||
|
GIT_TRACE: 1
|
||||||
|
GIT_CURL_VERBOSE: 1
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.DEPLOY_KEY }}
|
||||||
|
commit-message: 🚀 Update to version ${{ needs.build-data.outputs.version }}
|
||||||
|
title: 🚀 Update to version ${{ needs.build-data.outputs.version }}
|
||||||
|
body: |
|
||||||
|
This PR updates the Zen Browser Flatpak package to version ${{ needs.build-data.outputs.version }}.
|
||||||
|
|
||||||
|
@mauro-balades
|
||||||
|
branch: update-to-${{ needs.build-data.outputs.version }}
|
||||||
|
base: master
|
||||||
|
git-token: ${{ secrets.DEPLOY_KEY }}
|
||||||
|
delete-branch: true
|
||||||
|
|
||||||
|
|
||||||
|
30
.github/workflows/clear-cache.yml
vendored
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
name: Clear cache
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
actions: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
clear-cache:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Clear cache
|
||||||
|
uses: actions/github-script@v6
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
console.log("About to clear")
|
||||||
|
const caches = await github.rest.actions.getActionsCacheList({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
})
|
||||||
|
for (const cache of caches.data.actions_caches) {
|
||||||
|
console.log(cache)
|
||||||
|
github.rest.actions.deleteActionsCacheById({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
cache_id: cache.id,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
console.log("Clear completed")
|
47
.github/workflows/linux-alpha-build.yml
vendored
@@ -12,20 +12,29 @@ jobs:
|
|||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
generic: [true, false]
|
||||||
|
name: Build Linux - ${{ matrix.generic == true && 'Generic' || 'Specific' }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
- name: Free Disk Space (Ubuntu)
|
||||||
|
uses: jlumbroso/free-disk-space@main
|
||||||
|
with:
|
||||||
|
# this might remove tools that are actually needed,
|
||||||
|
# if set to "true" but frees about 6 GB
|
||||||
|
tool-cache: false
|
||||||
|
|
||||||
- name: Install Node.js
|
- name: Install Node.js
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: 20
|
node-version: 20
|
||||||
|
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
# Give the runner some swap space in an attempt to stop gkrust from crashing the build
|
|
||||||
- name: Set Swap Space
|
|
||||||
uses: pierotofy/set-swap-space@v1.0
|
|
||||||
with:
|
with:
|
||||||
swap-size-gb: 6
|
submodules: recursive
|
||||||
|
token: ${{ secrets.DEPLOY_KEY }}
|
||||||
|
|
||||||
- name: Setup git
|
- name: Setup git
|
||||||
run: |
|
run: |
|
||||||
@@ -39,9 +48,6 @@ jobs:
|
|||||||
sudo apt-get install dos2unix yasm nasm build-essential libgtk2.0-dev libpython3-dev m4 uuid libasound2-dev libcurl4-openssl-dev libdbus-1-dev libdrm-dev libdbus-glib-1-dev libdbus-glib-1-dev libgtk-3-dev libpulse-dev libx11-xcb-dev libxt-dev xvfb lld llvm
|
sudo apt-get install dos2unix yasm nasm build-essential libgtk2.0-dev libpython3-dev m4 uuid libasound2-dev libcurl4-openssl-dev libdbus-1-dev libdrm-dev libdbus-glib-1-dev libdbus-glib-1-dev libgtk-3-dev libpulse-dev libx11-xcb-dev libxt-dev xvfb lld llvm
|
||||||
pip install pycairo testresources
|
pip install pycairo testresources
|
||||||
|
|
||||||
- name: Free up space
|
|
||||||
run: sh .github/workflows/src/disk-setup-and-swap.sh
|
|
||||||
|
|
||||||
- name: Configure sccache
|
- name: Configure sccache
|
||||||
uses: actions/github-script@v7
|
uses: actions/github-script@v7
|
||||||
with:
|
with:
|
||||||
@@ -86,6 +92,8 @@ jobs:
|
|||||||
run: pnpm surfer download
|
run: pnpm surfer download
|
||||||
|
|
||||||
- name: Import
|
- name: Import
|
||||||
|
env:
|
||||||
|
SURFER_COMPAT: ${{ matrix.generic == true }}
|
||||||
run: pnpm surfer import
|
run: pnpm surfer import
|
||||||
|
|
||||||
- name: Bootstrap
|
- name: Bootstrap
|
||||||
@@ -95,35 +103,42 @@ jobs:
|
|||||||
cd ..
|
cd ..
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
|
env:
|
||||||
|
SURFER_COMPAT: ${{ matrix.generic == true }}
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
run: sh .github/workflows/src/alpha-build.sh
|
run: sh .github/workflows/src/alpha-build.sh
|
||||||
|
|
||||||
- name: Build again if it failed
|
- name: Build again if it failed
|
||||||
if: failure()
|
if: failure()
|
||||||
|
env:
|
||||||
|
SURFER_COMPAT: ${{ matrix.generic == true }}
|
||||||
run: sh .github/workflows/src/alpha-build.sh
|
run: sh .github/workflows/src/alpha-build.sh
|
||||||
|
|
||||||
- name: Package
|
- name: Package
|
||||||
|
env:
|
||||||
|
SURFER_COMPAT: ${{ matrix.generic == true }}
|
||||||
run: pnpm package
|
run: pnpm package
|
||||||
|
|
||||||
- name: Rename artifacts
|
- name: Rename artifacts
|
||||||
run: |
|
run: |
|
||||||
mv dist/zen-*.tar.bz2 "zen.linux.tar.bz2"
|
mv dist/zen-*.tar.bz2 "zen.linux-${{ matrix.generic == true && 'generic' || 'specific' }}.tar.bz2"
|
||||||
mv dist/output.mar linux.mar
|
mv dist/output.mar linux${{ matrix.generic == true && '-generic' || '' }}.mar
|
||||||
|
|
||||||
- name: Upload binary
|
- name: Upload binary
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: zen.linux.tar.bz2
|
|
||||||
path: ./zen.linux.tar.bz2
|
name: zen.linux-${{ matrix.generic == true && 'generic' || 'specific' }}.tar.bz2
|
||||||
|
path: ./zen.linux-${{ matrix.generic == true && 'generic' || 'specific' }}.tar.bz2
|
||||||
|
|
||||||
- name: Upload mar
|
- name: Upload mar
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: linux.mar
|
name: linux${{ matrix.generic == true && '-generic' || '' }}.mar
|
||||||
path: ./linux.mar
|
path: ./linux${{ matrix.generic == true && '-generic' || '' }}.mar
|
||||||
|
|
||||||
- name: Upload update manifests
|
- name: Upload update manifests
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: linux_update_manifest
|
name: linux_update_manifest_${{ matrix.generic == true && 'generic' || 'specific' }}
|
||||||
path: ./dist/update
|
path: ./dist/update
|
||||||
|
46
.github/workflows/macos-alpha-build.yml
vendored
@@ -9,7 +9,16 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
mac-build:
|
mac-build:
|
||||||
runs-on: macos-14
|
name: Build macOS - ${{ matrix.arch }}
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- arch: aarch64
|
||||||
|
os: macos-14
|
||||||
|
- arch: x64
|
||||||
|
os: macos-13
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Install Node.js
|
- name: Install Node.js
|
||||||
@@ -22,6 +31,9 @@ jobs:
|
|||||||
python-version: '3.11'
|
python-version: '3.11'
|
||||||
|
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
token: ${{ secrets.DEPLOY_KEY }}
|
||||||
|
|
||||||
- name: Setup git
|
- name: Setup git
|
||||||
run: |
|
run: |
|
||||||
@@ -33,9 +45,6 @@ jobs:
|
|||||||
brew install cairo sccache gnu-tar mercurial
|
brew install cairo sccache gnu-tar mercurial
|
||||||
sudo pip install setuptools
|
sudo pip install setuptools
|
||||||
|
|
||||||
- name: Free up space
|
|
||||||
run: sh .github/workflows/src/disk-setup-and-swap.sh
|
|
||||||
|
|
||||||
- name: Force usage fo gnu-tar
|
- name: Force usage fo gnu-tar
|
||||||
run: |
|
run: |
|
||||||
echo 'export PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"' >> ~/.bash_profile
|
echo 'export PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"' >> ~/.bash_profile
|
||||||
@@ -60,7 +69,10 @@ jobs:
|
|||||||
run: pnpm surfer download
|
run: pnpm surfer download
|
||||||
|
|
||||||
- name: Import
|
- name: Import
|
||||||
run: pnpm surfer import
|
env:
|
||||||
|
SURFER_COMPAT: ${{ matrix.arch == 'x64' }}
|
||||||
|
run: |
|
||||||
|
pnpm surfer import
|
||||||
|
|
||||||
- name: Bootstrap
|
- name: Bootstrap
|
||||||
run: |
|
run: |
|
||||||
@@ -69,34 +81,42 @@ jobs:
|
|||||||
cd ..
|
cd ..
|
||||||
|
|
||||||
- name: build Zen
|
- name: build Zen
|
||||||
run: sh .github/workflows/src/alpha-build.sh
|
env:
|
||||||
|
SURFER_COMPAT: ${{ matrix.arch == 'x64' }}
|
||||||
|
run: |
|
||||||
|
if test "${{ matrix.arch }}" = "x64"; then
|
||||||
|
export ZEN_DISABLE_LTO=1
|
||||||
|
fi
|
||||||
|
sh .github/workflows/src/alpha-build.sh
|
||||||
|
|
||||||
- name: Rebuild Zen if failed
|
- name: Rebuild Zen if failed
|
||||||
if: failure()
|
if: failure()
|
||||||
run: sh .github/workflows/src/alpha-build.sh
|
run: sh .github/workflows/src/alpha-build.sh
|
||||||
|
|
||||||
- name: Package
|
- name: Package
|
||||||
|
env:
|
||||||
|
SURFER_COMPAT: ${{ matrix.arch == 'x64' }}
|
||||||
run: pnpm package
|
run: pnpm package
|
||||||
|
|
||||||
- name: Rename artifacts
|
- name: Rename artifacts
|
||||||
run: |
|
run: |
|
||||||
mv ./dist/*.dmg "zen.macos.dmg"
|
mv ./dist/*.dmg "zen.macos-${{ matrix.arch }}.dmg"
|
||||||
mv ./dist/output.mar macos.mar
|
mv ./dist/output.mar macos-${{ matrix.arch }}.mar
|
||||||
|
|
||||||
- name: Upload artifact
|
- name: Upload artifact
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: zen.macos.dmg
|
name: zen.macos-${{ matrix.arch }}.dmg
|
||||||
path: ./zen.macos.dmg
|
path: ./zen.macos-${{ matrix.arch }}.dmg
|
||||||
|
|
||||||
- name: Upload mar
|
- name: Upload mar
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: macos.mar
|
name: macos-${{ matrix.arch }}.mar
|
||||||
path: ./macos.mar
|
path: ./macos-${{ matrix.arch }}.mar
|
||||||
|
|
||||||
- name: Upload update manifests
|
- name: Upload update manifests
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: macos_update_manifest
|
name: macos_update_manifest_${{ matrix.arch }}
|
||||||
path: ./dist/update
|
path: ./dist/update
|
||||||
|
3
.github/workflows/src/alpha-build.sh
vendored
@@ -10,8 +10,7 @@ ulimit -n 4096
|
|||||||
|
|
||||||
# Check if xfvb is installed
|
# Check if xfvb is installed
|
||||||
if ! command -v Xvfb &> /dev/null; then
|
if ! command -v Xvfb &> /dev/null; then
|
||||||
if ! test "$ZEN_CROSS_COMPILING"
|
if ! test "$ZEN_CROSS_COMPILING"; then
|
||||||
then
|
|
||||||
Xvfb :2 -screen 0 1024x768x24 &
|
Xvfb :2 -screen 0 1024x768x24 &
|
||||||
export LLVM_PROFDATA=$HOME/.mozbuild/clang/bin/llvm-profdata
|
export LLVM_PROFDATA=$HOME/.mozbuild/clang/bin/llvm-profdata
|
||||||
export DISPLAY=:2
|
export DISPLAY=:2
|
||||||
|
50
.github/workflows/src/disk-setup-and-swap.sh
vendored
@@ -1,50 +0,0 @@
|
|||||||
|
|
||||||
echo Before:
|
|
||||||
if [ command -v free ]; then
|
|
||||||
free -h
|
|
||||||
fi
|
|
||||||
if [ command -v df ]; then
|
|
||||||
df -h
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo
|
|
||||||
|
|
||||||
sudo swapoff /mnt/swapfile
|
|
||||||
sudo rm /mnt/swapfile
|
|
||||||
sudo fallocate -l 10G /mnt/swapfile
|
|
||||||
sudo chmod 600 /mnt/swapfile
|
|
||||||
sudo mkswap /mnt/swapfile
|
|
||||||
sudo swapon /mnt/swapfile
|
|
||||||
sudo apt remove -y '^dotnet-.*' '^llvm-.*' '^php.*' '^mongodb-.*' '^mysql-.*' clang azure-cli google-cloud-sdk google-chrome-stable microsoft-edge firefox powershell mono-devel libgl1-mesa-dri acl aria2 autoconf automake binutils bison brotli bzip2 coreutils
|
|
||||||
sudo apt autoremove -y
|
|
||||||
sudo apt clean
|
|
||||||
sudo rm -rf ./git
|
|
||||||
sudo rm -rf /home/linuxbrew
|
|
||||||
sudo rm -rf /usr/share/dotnet
|
|
||||||
sudo rm -rf /usr/local/lib/android
|
|
||||||
sudo rm -rf /usr/local/graalvm
|
|
||||||
sudo rm -rf /usr/local/share/powershell
|
|
||||||
sudo rm -rf /usr/local/share/chromium
|
|
||||||
sudo rm -rf /opt/ghc
|
|
||||||
sudo rm -rf /usr/local/share/boost
|
|
||||||
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
|
|
||||||
sudo rm -rf /etc/apache2
|
|
||||||
sudo rm -rf /etc/nginx
|
|
||||||
sudo rm -rf /usr/local/share/chrome_driver
|
|
||||||
sudo rm -rf /usr/local/share/edge_driver
|
|
||||||
sudo rm -rf /usr/local/share/gecko_driver
|
|
||||||
sudo rm -rf /usr/share/java
|
|
||||||
sudo rm -rf /usr/share/miniconda
|
|
||||||
sudo rm -rf /usr/local/share/vcpkg
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo
|
|
||||||
|
|
||||||
echo After:
|
|
||||||
if [ command -v free ]; then
|
|
||||||
free -h
|
|
||||||
fi
|
|
||||||
if [ command -v df ]; then
|
|
||||||
df -h
|
|
||||||
fi
|
|
40
.github/workflows/src/windows_mozconfig
vendored
@@ -1,40 +0,0 @@
|
|||||||
|
|
||||||
export WINSYSROOT="$(echo ~)/win-cross/vs2022"
|
|
||||||
|
|
||||||
export MIDL="$(echo ~)/win-cross/wine/bin/widl"
|
|
||||||
export WINE="$(echo ~)/win-cross/wine/bin/wine64"
|
|
||||||
export WINEDEBUG=-all
|
|
||||||
|
|
||||||
#? https://bugzilla.mozilla.org/show_bug.cgi?id=1617793
|
|
||||||
#? https://phabricator.services.mozilla.com/D170170
|
|
||||||
ac_add_options --target=x86_64-pc-windows-msvc
|
|
||||||
|
|
||||||
export MOZ_STUB_INSTALLER=1
|
|
||||||
export MOZ_PKG_FORMAT=TAR
|
|
||||||
|
|
||||||
export CROSS_BUILD=1
|
|
||||||
CROSS_COMPILE=1
|
|
||||||
TOOLS=$(echo ~)/win-cross
|
|
||||||
|
|
||||||
export MIDL="$TOOLS/wine/bin/widl"
|
|
||||||
export MOZ_INCLUDE_SOURCE_INFO=1
|
|
||||||
export MOZ_STUB_INSTALLER=1
|
|
||||||
export WINEDEBUG=-all
|
|
||||||
export WINE="$TOOLS/wine/bin/wine64"
|
|
||||||
#export WIN32_REDIST_DIR="$TOOLS"/vs2022/VC/Redist/MSVC/14.34.31931/x64/Microsoft.VC143.CRT
|
|
||||||
#export WIN_UCRT_REDIST_DIR="$TOOLS/vs2022/Windows Kits/10/Redist/10.0.22621.0/ucrt/DLLs/x64"
|
|
||||||
|
|
||||||
ac_add_options --disable-maintenance-service
|
|
||||||
ac_add_options --disable-bits-download
|
|
||||||
|
|
||||||
#if test "$ZEN_GA_GENERATE_PROFILE"; then
|
|
||||||
# mk_add_options "export MOZ_AUTOMATION_PACKAGE_GENERATED_SOURCES=0"
|
|
||||||
# ac_add_options --enable-profile-generate=cross
|
|
||||||
#else
|
|
||||||
# ac_add_options --disable-profiling
|
|
||||||
# ac_add_options --enable-profile-use=cross
|
|
||||||
# ac_add_options --with-pgo-profile-path=$(echo ~)/artifact/merged.profdata
|
|
||||||
# ac_add_options --with-pgo-jarlog=$(echo ~)/artifact/en-US.log
|
|
||||||
#fi
|
|
||||||
|
|
||||||
# ALWAYS MANTAIN ONE LINE BREAK AT THE END OF THIS FILE
|
|
68
.github/workflows/windows-alpha-build.yml
vendored
@@ -16,21 +16,30 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
windows-build:
|
windows-build:
|
||||||
|
name: Build Windows - ${{ matrix.generic == true && 'Generic' || 'Specific' }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
generic: [true, false]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
- name: Free Disk Space (Ubuntu)
|
||||||
|
uses: jlumbroso/free-disk-space@main
|
||||||
|
with:
|
||||||
|
# this might remove tools that are actually needed,
|
||||||
|
# if set to "true" but frees about 6 GB
|
||||||
|
tool-cache: false
|
||||||
|
|
||||||
- name: Install Node.js and pnpm
|
- name: Install Node.js and pnpm
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: 20
|
node-version: 20
|
||||||
|
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
# Give the runner some swap space in an attempt to stop gkrust from crashing the build
|
|
||||||
- name: Set Swap Space
|
|
||||||
uses: pierotofy/set-swap-space@v1.0
|
|
||||||
with:
|
with:
|
||||||
swap-size-gb: 6
|
submodules: recursive
|
||||||
|
token: ${{ secrets.DEPLOY_KEY }}
|
||||||
|
|
||||||
- name: Install pnpm
|
- name: Install pnpm
|
||||||
run: npm install -g pnpm
|
run: npm install -g pnpm
|
||||||
@@ -50,9 +59,6 @@ jobs:
|
|||||||
- name: Download
|
- name: Download
|
||||||
run: pnpm surfer download
|
run: pnpm surfer download
|
||||||
|
|
||||||
- name: Free up space
|
|
||||||
run: sh .github/workflows/src/disk-setup-and-swap.sh
|
|
||||||
|
|
||||||
- name: "win-cross Cache"
|
- name: "win-cross Cache"
|
||||||
env:
|
env:
|
||||||
SEGMENT_DOWNLOAD_TIMEOUT_MINS: 5
|
SEGMENT_DOWNLOAD_TIMEOUT_MINS: 5
|
||||||
@@ -92,8 +98,6 @@ jobs:
|
|||||||
|
|
||||||
chmod -R +x "$(echo ~)/win-cross/vs2022" || true
|
chmod -R +x "$(echo ~)/win-cross/vs2022" || true
|
||||||
|
|
||||||
cat ../.github/workflows/src/windows_mozconfig >> ../configs/common/mozconfig
|
|
||||||
|
|
||||||
cd ..
|
cd ..
|
||||||
npm install -g pnpm
|
npm install -g pnpm
|
||||||
export SURFER_PLATFORM="win32"
|
export SURFER_PLATFORM="win32"
|
||||||
@@ -104,6 +108,9 @@ jobs:
|
|||||||
echo "export LIB=\"$(cd ~/.mozbuild/clang/lib/clang/* && cd lib/windows && pwd)\"" >> ../configs/common/mozconfig
|
echo "export LIB=\"$(cd ~/.mozbuild/clang/lib/clang/* && cd lib/windows && pwd)\"" >> ../configs/common/mozconfig
|
||||||
cat ../configs/common/mozconfig
|
cat ../configs/common/mozconfig
|
||||||
|
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install dos2unix
|
||||||
|
|
||||||
ls ~/win-cross/wine || true
|
ls ~/win-cross/wine || true
|
||||||
ls ~/win-cross/vs2022 || true
|
ls ~/win-cross/vs2022 || true
|
||||||
|
|
||||||
@@ -119,6 +126,8 @@ jobs:
|
|||||||
cargo download -x windows=0.52.0
|
cargo download -x windows=0.52.0
|
||||||
#? https://github.com/mozilla/sccache#known-caveats
|
#? https://github.com/mozilla/sccache#known-caveats
|
||||||
export CARGO_INCREMENTAL=0
|
export CARGO_INCREMENTAL=0
|
||||||
|
|
||||||
|
echo "" >> ../configs/common/mozconfig
|
||||||
echo "export MOZ_WINDOWS_RS_DIR=$(pwd)/windows-0.52.0" >> ../configs/common/mozconfig
|
echo "export MOZ_WINDOWS_RS_DIR=$(pwd)/windows-0.52.0" >> ../configs/common/mozconfig
|
||||||
|
|
||||||
- uses: actions/download-artifact@v4
|
- uses: actions/download-artifact@v4
|
||||||
@@ -128,24 +137,30 @@ jobs:
|
|||||||
path: ~/artifact
|
path: ~/artifact
|
||||||
|
|
||||||
- name: Import
|
- name: Import
|
||||||
|
env:
|
||||||
|
SURFER_COMPAT: ${{ matrix.generic == true }}
|
||||||
run: pnpm surfer import --verbose
|
run: pnpm surfer import --verbose
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
|
env:
|
||||||
|
SURFER_COMPAT: ${{ matrix.generic == true }}
|
||||||
run: |
|
run: |
|
||||||
set -x
|
set -x
|
||||||
|
dos2unix configs/windows/mozconfig
|
||||||
export SURFER_PLATFORM="win32"
|
export SURFER_PLATFORM="win32"
|
||||||
export ZEN_CROSS_COMPILING=1
|
export ZEN_CROSS_COMPILING=1
|
||||||
# if test ${{ inputs.generate-gpo }}; then
|
if test ${{ inputs.generate-gpo }} = true; then
|
||||||
# export ZEN_GA_GENERATE_PROFILE=1
|
export ZEN_GA_GENERATE_PROFILE=1
|
||||||
# fi
|
fi
|
||||||
sh .github/workflows/src/alpha-build.sh
|
sh .github/workflows/src/alpha-build.sh
|
||||||
|
|
||||||
- name: Package
|
- name: Package
|
||||||
|
env:
|
||||||
|
SURFER_COMPAT: ${{ matrix.generic == true }}
|
||||||
run: |
|
run: |
|
||||||
set -x
|
set -x
|
||||||
export SURFER_PLATFORM="win32"
|
export SURFER_PLATFORM="win32"
|
||||||
pnpm package
|
pnpm package
|
||||||
mv ./dist/output.mar windows.mar
|
|
||||||
mv ./dist/zen-$(pnpm surfer get version | xargs).en-US.win64.zip zen.win64.zip
|
mv ./dist/zen-$(pnpm surfer get version | xargs).en-US.win64.zip zen.win64.zip
|
||||||
ls ./dist
|
ls ./dist
|
||||||
ls .
|
ls .
|
||||||
@@ -156,37 +171,44 @@ jobs:
|
|||||||
set -x
|
set -x
|
||||||
mv ./zen.win64.zip ./zen.win64-pgo-stage-1.zip
|
mv ./zen.win64.zip ./zen.win64-pgo-stage-1.zip
|
||||||
|
|
||||||
|
- name: Rename artifacts
|
||||||
|
if: ${{ !inputs.generate-gpo }}
|
||||||
|
run: |
|
||||||
|
mv ./zen.win64.zip zen.win-${{ matrix.generic == true && 'generic' || 'specific' }}.zip
|
||||||
|
mv ./dist/output.mar windows${{ matrix.generic == true && '-generic' || '' }}.mar
|
||||||
|
mv ./dist/zen.installer.exe ./zen.installer${{ matrix.generic == true && '-generic' || '' }}.exe
|
||||||
|
|
||||||
- name: Upload artifact
|
- name: Upload artifact
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
if: ${{ !inputs.generate-gpo }}
|
if: ${{ !inputs.generate-gpo }}
|
||||||
with:
|
with:
|
||||||
name: zen.win64.zip
|
name: zen.win-${{ matrix.generic == true && 'generic' || 'specific' }}.zip
|
||||||
path: ./zen.win64.zip
|
path: ./zen.win-${{ matrix.generic == true && 'generic' || 'specific' }}.zip
|
||||||
|
|
||||||
- name: Upload PGO build
|
- name: Upload PGO build
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
if: ${{ inputs.generate-gpo }}
|
if: ${{ inputs.generate-gpo }}
|
||||||
with:
|
with:
|
||||||
name: ${{ inputs.profile-data-path-archive }}
|
name: ${{ matrix.generic == true && 'generic' || 'specific' }}-${{ inputs.profile-data-path-archive }}
|
||||||
path: ./zen.win64-pgo-stage-1.zip
|
path: ./zen.win64-pgo-stage-1.zip
|
||||||
|
|
||||||
- name: Upload mar
|
- name: Upload mar
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
if: ${{ !inputs.generate-gpo }}
|
if: ${{ !inputs.generate-gpo }}
|
||||||
with:
|
with:
|
||||||
name: windows.mar
|
name: windows${{ matrix.generic == true && '-generic' || '' }}.mar
|
||||||
path: ./windows.mar
|
path: ./windows${{ matrix.generic == true && '-generic' || '' }}.mar
|
||||||
|
|
||||||
- name: Upload installer
|
- name: Upload installer
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
if: ${{ !inputs.generate-gpo }}
|
if: ${{ !inputs.generate-gpo }}
|
||||||
with:
|
with:
|
||||||
name: zen.installer.exe
|
name: zen.installer${{ matrix.generic == true && '-generic' || '' }}.exe
|
||||||
path: ./dist/zen.installer.exe
|
path: ./zen.installer${{ matrix.generic == true && '-generic' || '' }}.exe
|
||||||
|
|
||||||
- name: Upload installer stub
|
- name: Upload installer stub
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
if: ${{ !inputs.generate-gpo }}
|
if: ${{ !inputs.generate-gpo && false }}
|
||||||
with:
|
with:
|
||||||
name: zen.installer.pretty.exe
|
name: zen.installer.pretty.exe
|
||||||
path: ./dist/zen.installer.pretty.exe
|
path: ./dist/zen.installer.pretty.exe
|
||||||
@@ -195,5 +217,5 @@ jobs:
|
|||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
if: ${{ !inputs.generate-gpo }}
|
if: ${{ !inputs.generate-gpo }}
|
||||||
with:
|
with:
|
||||||
name: windows_update_manifest
|
name: windows_update_manifest_${{ matrix.generic == true && 'generic' || 'specific' }}
|
||||||
path: ./dist/update
|
path: ./dist/update
|
||||||
|
91
.github/workflows/windows-profile-build.yml
vendored
@@ -1,91 +0,0 @@
|
|||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
build-version:
|
|
||||||
description: 'The version to build'
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
profile-data-path-archive:
|
|
||||||
description: 'The path to the zip archive containing the profile data'
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
windows-profile-build:
|
|
||||||
runs-on: windows-latest
|
|
||||||
# Script edited from https://github.com/Floorp-Projects/Floorp/blob/ESR115/.github/workflows/window-generate-profile-data-and-jarlog.yml
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Install Node.js and pnpm
|
|
||||||
uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
node-version: 20
|
|
||||||
|
|
||||||
- name: Setup git
|
|
||||||
run: |
|
|
||||||
git config --global user.email "mauro-balades@users.noreply.github.com"
|
|
||||||
git config --global user.name "mauro-balades"
|
|
||||||
|
|
||||||
- name: Install pnpm
|
|
||||||
run: npm install -g pnpm
|
|
||||||
|
|
||||||
- name: Install Surfer
|
|
||||||
run: |
|
|
||||||
npm i -g @zen-browser/surfer
|
|
||||||
|
|
||||||
- uses: actions/download-artifact@v4
|
|
||||||
name: Download artifact
|
|
||||||
with:
|
|
||||||
path: C:\artifact
|
|
||||||
name: zen-windows-x86_64-profile-data-and-jarlog.zip
|
|
||||||
|
|
||||||
- name: Unpack artifact
|
|
||||||
run: |
|
|
||||||
cd C:\artifact
|
|
||||||
ls
|
|
||||||
7z x ${{ inputs.profile-data-path-archive }}
|
|
||||||
ls
|
|
||||||
|
|
||||||
- name: Setup
|
|
||||||
run: |
|
|
||||||
(New-Object System.Net.WebClient).DownloadFile("https://ftp.mozilla.org/pub/mozilla/libraries/win32/MozillaBuildSetup-Latest.exe","C:\MozillaBuildSetup-Latest.exe")
|
|
||||||
C:\MozillaBuildSetup-Latest.exe /S | out-null
|
|
||||||
|
|
||||||
- name: Download firefox
|
|
||||||
run: |
|
|
||||||
git config --global core.safecrlf false
|
|
||||||
pnpm surfer download
|
|
||||||
|
|
||||||
- name: Generate
|
|
||||||
run: |
|
|
||||||
ls
|
|
||||||
$Env:USE_MINTTY = "0"
|
|
||||||
|
|
||||||
$workspace_dir_current = [regex]::replace($env:GITHUB_WORKSPACE, "^([A-Z]):", { "/" + $args.value.Substring(0, 1).toLower() }) -replace "\\","/"
|
|
||||||
$workspace_dir = $workspace_dir_current + "/engine"
|
|
||||||
echo $workspace_dir
|
|
||||||
|
|
||||||
echo "cd $workspace_dir" '' >> mozilla-build-run.sh
|
|
||||||
echo './mach --no-interactive bootstrap --application-choice browser' '' >> mozilla-build-run.sh
|
|
||||||
echo 'ls /c/Users/runneradmin/.mozbuild/clang/bin' '' >> mozilla-build-run.sh
|
|
||||||
echo 'LLVM_PROFDATA=/c/Users/runneradmin/.mozbuild/clang/bin/llvm-profdata.exe JARLOG_FILE=en-US.log ./mach python build/pgo/profileserver.py --binary /c/artifact/zen/zen.exe' '' >> mozilla-build-run.sh
|
|
||||||
C:\mozilla-build\start-shell.bat $workspace_dir_current\mozilla-build-run.sh
|
|
||||||
|
|
||||||
- name: 🐛 Debug Session
|
|
||||||
if: ${{ failure() }}
|
|
||||||
uses: Warpbuilds/gha-debug@v1.3
|
|
||||||
timeout-minutes: 15
|
|
||||||
|
|
||||||
- name: Publish merged.profdata
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
path: merged.profdata
|
|
||||||
|
|
||||||
- name: Publish en-US.log
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
path: en-US.log
|
|
||||||
|
|
3
.gitmodules
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
[submodule "src/browser/base/content/zen-components"]
|
||||||
|
path = src/browser/base/content/zen-components
|
||||||
|
url = https://github.com/zen-browser/components
|
14
AppDir/AppRun
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
SELF=$(readlink -f "$0")
|
||||||
|
HERE=${SELF%/*}
|
||||||
|
export PATH="${HERE}:${HERE}/usr/bin/:${HERE}/usr/sbin/:${HERE}/usr/games/:${HERE}/bin/:${HERE}/sbin/${PATH:+:$PATH}"
|
||||||
|
export LD_LIBRARY_PATH="${HERE}/usr/lib/:${HERE}/usr/lib/i386-linux-gnu/:${HERE}/usr/lib/x86_64-linux-gnu/:${HERE}/usr/lib32/:${HERE}/usr/lib64/:${HERE}/lib/:${HERE}/lib/i386-linux-gnu/:${HERE}/lib/x86_64-linux-gnu/:${HERE}/lib32/:${HERE}/lib64/${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
|
||||||
|
export PYTHONPATH="${HERE}/usr/share/pyshared/${PYTHONPATH:+:$PYTHONPATH}"
|
||||||
|
export MOZ_LEGACY_PROFILES=1 # Prevent per installation profiles
|
||||||
|
DEFAULT_XDG_DATA_DIRS='./share/:/usr/share/gnome:/usr/local/share/:/usr/share/'
|
||||||
|
export XDG_DATA_DIRS="${HERE}/usr/share/:${XDG_DATA_DIRS:-$DEFAULT_XDG_DATA_DIRS}"
|
||||||
|
export PERLLIB="${HERE}/usr/share/perl5/:${HERE}/usr/lib/perl5/${PERLLIB:+:$PERLLIB}"
|
||||||
|
export GSETTINGS_SCHEMA_DIR="${HERE}/usr/share/glib-2.0/schemas/${GSETTINGS_SCHEMA_DIR:+:$GSETTINGS_SCHEMA_DIR}"
|
||||||
|
export QT_PLUGIN_PATH="${HERE}/usr/lib/qt4/plugins/:${HERE}/usr/lib/i386-linux-gnu/qt4/plugins/:${HERE}/usr/lib/x86_64-linux-gnu/qt4/plugins/:${HERE}/usr/lib32/qt4/plugins/:${HERE}/usr/lib64/qt4/plugins/:${HERE}/usr/lib/qt5/plugins/:${HERE}/usr/lib/i386-linux-gnu/qt5/plugins/:${HERE}/usr/lib/x86_64-linux-gnu/qt5/plugins/:${HERE}/usr/lib32/qt5/plugins/:${HERE}/usr/lib64/qt5/plugins/${QT_PLUGIN_PATH:+:$QT_PLUGIN_PATH}"
|
||||||
|
EXEC=$(grep -e '^Exec=.*' "${HERE}"/*.desktop | head -n 1 | cut -d "=" -f 2 | cut -d " " -f 1)
|
||||||
|
exec "${EXEC}" "$@"
|
8
AppDir/distribution/policies.json
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"policies": {
|
||||||
|
"DisableAppUpdate": true,
|
||||||
|
"AppAutoUpdate": false,
|
||||||
|
"ManualAppUpdateOnly": true,
|
||||||
|
"BackgroundAppUpdate": false
|
||||||
|
}
|
||||||
|
}
|
25
AppDir/zen.desktop
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Name=Zen Browser
|
||||||
|
Exec=zen %u
|
||||||
|
Icon=zen
|
||||||
|
Type=Application
|
||||||
|
MimeType=text/html;text/xml;application/xhtml+xml;x-scheme-handler/http;x-scheme-handler/https;application/x-xpinstall;application/pdf;application/json;
|
||||||
|
StartupWMClass=zen-alpha
|
||||||
|
Categories=Network;WebBrowser;
|
||||||
|
StartupNotify=true
|
||||||
|
Terminal=false
|
||||||
|
X-MultipleArgs=false
|
||||||
|
Keywords=Internet;WWW;Browser;Web;Explorer;
|
||||||
|
Actions=new-window;new-private-window;profilemanager;
|
||||||
|
|
||||||
|
[Desktop Action new-window]
|
||||||
|
Name=Open a New Window
|
||||||
|
Exec=zen %u
|
||||||
|
|
||||||
|
[Desktop Action new-private-window]
|
||||||
|
Name=Open a New Private Window
|
||||||
|
Exec=zen --private-window %u
|
||||||
|
|
||||||
|
[Desktop Action profilemanager]
|
||||||
|
Name=Open the Profile Manager
|
||||||
|
Exec=zen --ProfileManager %u
|
22
README.md
@@ -3,18 +3,32 @@
|
|||||||
|
|
||||||
Experience tranquillity while browsing the web without people tracking you!
|
Experience tranquillity while browsing the web without people tracking you!
|
||||||
|
|
||||||
|
* [Website](https://www.zen-browser.app)
|
||||||
|
* [Download](https://www.zen-browser.app/download)
|
||||||
|
* [Release Notes](https://www.zen-browser.app/release-notes/latest)
|
||||||
|
|
||||||
|
<a href='https://flathub.org/apps/io.github.zen_browser.zen'>
|
||||||
|
<img width='240' alt='Get it on Flathub' src='https://flathub.org/api/badge?locale=en'/>
|
||||||
|
</a>
|
||||||
|
|
||||||
# Compatibility
|
# Compatibility
|
||||||
|
|
||||||
Zen is currently built using firefox version `128.0.3`!
|
Zen is currently built using firefox version `129.0`!
|
||||||
|
|
||||||
* Checkout the latest [releases notes](https://get-zen.vercel.app/release-notes)!
|
* Checkout the latest [releases notes](https://www.zen-browser.app/release-notes)!
|
||||||
|
|
||||||
|
# Performance
|
||||||
|
|
||||||
|
Zen is built with performance in mind, and we have optimized the browser to be as fast as possible!
|
||||||
|
|
||||||
|
* Checkout the latest [performance benchmarks](./docs/performance.md)!
|
||||||
|
|
||||||
## 🚀 Run Locally
|
## 🚀 Run Locally
|
||||||
|
|
||||||
Clone the project
|
Clone the project
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/zen-browser/desktop.git
|
git clone https://github.com/zen-browser/desktop.git --recursive
|
||||||
cd desktop
|
cd desktop
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -52,7 +66,9 @@ Please adhere to this project's `code of conduct`.
|
|||||||
|
|
||||||
## Special Thanks
|
## Special Thanks
|
||||||
|
|
||||||
|
- [IAmJafeth](https://github.com/IAmJafeth) (For sponsoring the domain)
|
||||||
- [Erlend](https://havn.blog) (For making the logo)
|
- [Erlend](https://havn.blog) (For making the logo)
|
||||||
|
- [ptr1337](https://github.com/ptr1337) (AUR Packages and optimization flags)
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
BIN
configs/branding/alpha/logo-mac.png
Normal file
After Width: | Height: | Size: 483 KiB |
Before Width: | Height: | Size: 483 KiB After Width: | Height: | Size: 889 KiB |
Before Width: | Height: | Size: 344 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 872 B After Width: | Height: | Size: 890 B |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 156 KiB |
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 5.1 KiB |
BIN
configs/branding/beta/logo-mac.png
Normal file
After Width: | Height: | Size: 483 KiB |
Before Width: | Height: | Size: 483 KiB After Width: | Height: | Size: 889 KiB |
Before Width: | Height: | Size: 344 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 872 B After Width: | Height: | Size: 890 B |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 156 KiB |
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 5.1 KiB |
@@ -1,12 +1,9 @@
|
|||||||
|
|
||||||
# Browser branding
|
# Browser branding
|
||||||
ac_add_options --enable-update-channel=release
|
|
||||||
|
|
||||||
ac_add_options --with-app-name=${binName}
|
ac_add_options --with-app-name=${binName}
|
||||||
ac_add_options --with-app-basename=Zen
|
ac_add_options --with-app-basename=Zen
|
||||||
|
ac_add_options --enable-official-branding
|
||||||
|
|
||||||
export MOZ_USER_DIR="${name}"
|
export MOZ_USER_DIR="${name}"
|
||||||
export MOZ_APP_VENDOR="${vendor}"
|
|
||||||
export MOZ_APP_BASENAME=Zen
|
export MOZ_APP_BASENAME=Zen
|
||||||
export MOZ_APP_PROFILE=${binName}
|
export MOZ_APP_PROFILE=${binName}
|
||||||
export MOZ_APP_DISPLAYNAME="${name}"
|
export MOZ_APP_DISPLAYNAME="${name}"
|
||||||
@@ -24,65 +21,60 @@ export MOZ_SOURCE_REPO=https://github.com/zen-browser/desktop
|
|||||||
export MOZ_SOURCE_CHANGESET=${changeset}
|
export MOZ_SOURCE_CHANGESET=${changeset}
|
||||||
export MOZ_INCLUDE_SOURCE_INFO=1
|
export MOZ_INCLUDE_SOURCE_INFO=1
|
||||||
|
|
||||||
ac_add_options --enable-bootstrap
|
|
||||||
|
|
||||||
ac_add_options --enable-application=browser
|
ac_add_options --enable-application=browser
|
||||||
|
|
||||||
if test "$ZEN_RELEASE"; then
|
if test "$ZEN_RELEASE"; then
|
||||||
|
ac_add_options --enable-bootstrap
|
||||||
|
|
||||||
ac_add_options --enable-release
|
ac_add_options --enable-release
|
||||||
ac_add_options --disable-debug
|
ac_add_options --disable-debug
|
||||||
ac_add_options --disable-debug-symbols
|
ac_add_options --disable-debug-symbols
|
||||||
ac_add_options --disable-debug-js-modules
|
ac_add_options --disable-debug-js-modules
|
||||||
ac_add_options --disable-tests
|
ac_add_options --disable-tests
|
||||||
ac_add_options --enable-strip
|
ac_add_options --disable-jprof
|
||||||
ac_add_options --enable-install-strip
|
|
||||||
ac_add_options --disable-accessibility
|
|
||||||
|
|
||||||
ac_add_options --enable-rust-simd
|
ac_add_options --enable-rust-simd
|
||||||
mk_add_options MOZ_PARALLEL_COMPILE=1
|
mk_add_options MOZ_PARALLEL_COMPILE=1
|
||||||
mk_add_options MOZ_CRASHREPORTER=0
|
|
||||||
mk_add_options MOZ_DATA_REPORTING=0
|
|
||||||
mk_add_options MOZ_SERVICES_HEALTHREPORT=0
|
|
||||||
mk_add_options MOZ_TELEMETRY_REPORTING=0
|
|
||||||
|
|
||||||
ac_add_options --enable-proxy-bypass-protection
|
ac_add_options --enable-proxy-bypass-protection
|
||||||
ac_add_options --enable-hardening
|
ac_add_options --enable-hardening
|
||||||
|
ac_add_options --disable-profiling
|
||||||
|
|
||||||
ac_add_options --disable-crashreporter
|
ac_add_options --disable-crashreporter
|
||||||
ac_add_options --disable-geckodriver
|
ac_add_options --disable-geckodriver
|
||||||
ac_add_options --disable-rust-tests
|
ac_add_options --disable-rust-tests
|
||||||
ac_add_options --disable-default-browser-agent
|
ac_add_options --disable-default-browser-agent
|
||||||
|
|
||||||
export MOZ_LTO=1
|
ac_add_options --disable-vtune
|
||||||
ac_add_options MOZ_LTO=1
|
|
||||||
ac_add_options --enable-lto
|
if ! test "$ZEN_DISABLE_LTO"; then
|
||||||
|
export MOZ_LTO=1
|
||||||
|
ac_add_options MOZ_LTO=1
|
||||||
|
ac_add_options --enable-lto=full,cross
|
||||||
|
fi
|
||||||
|
|
||||||
ac_add_options --enable-jemalloc
|
ac_add_options --enable-jemalloc
|
||||||
ac_add_options --disable-jprof
|
|
||||||
|
|
||||||
mk_add_options MOZILLA_OFFICIAL=1
|
mk_add_options MOZILLA_OFFICIAL=1
|
||||||
MOZILLA_OFFICIAL=1
|
MOZILLA_OFFICIAL=1
|
||||||
export MOZILLA_OFFICIAL=1
|
export MOZILLA_OFFICIAL=1
|
||||||
|
|
||||||
mk_add_options MOZ_OPTIMIZE=1
|
mk_add_options MOZ_OPTIMIZE=2
|
||||||
MOZ_OPTIMIZE=1
|
MOZ_OPTIMIZE=2
|
||||||
export MOZ_OPTIMIZE=1
|
export MOZ_OPTIMIZE=2
|
||||||
|
|
||||||
export OPT_LEVEL="3"
|
export OPT_LEVEL="3"
|
||||||
ac_add_options OPT_LEVEL="3"
|
ac_add_options OPT_LEVEL="3"
|
||||||
|
|
||||||
export RUSTC_OPT_LEVEL="3"
|
export RUSTC_OPT_LEVEL="3"
|
||||||
ac_add_options RUSTC_OPT_LEVEL="3"
|
ac_add_options RUSTC_OPT_LEVEL="3"
|
||||||
|
|
||||||
mk_add_options AUTOCLOBBER=1
|
mk_add_options AUTOCLOBBER=1
|
||||||
export AUTOCLOBBER=1
|
export AUTOCLOBBER=1
|
||||||
|
|
||||||
if ! test "$ZEN_CROSS_COMPILING"; then
|
|
||||||
|
|
||||||
# It causes link errors on windows
|
|
||||||
ac_add_options --disable-dmd
|
|
||||||
fi
|
|
||||||
|
|
||||||
ac_add_options --enable-updater
|
ac_add_options --enable-updater
|
||||||
|
|
||||||
|
export MOZ_PACKAGE_JSSHELL=1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ac_add_options --enable-unverified-updates
|
ac_add_options --enable-unverified-updates
|
||||||
@@ -96,18 +88,14 @@ ac_add_options --enable-eme=widevine
|
|||||||
ac_add_options --allow-addon-sideload
|
ac_add_options --allow-addon-sideload
|
||||||
ac_add_options --with-unsigned-addon-scopes=app,system
|
ac_add_options --with-unsigned-addon-scopes=app,system
|
||||||
|
|
||||||
export MOZ_REQUIRE_SIGNING=
|
|
||||||
export MOZ_TELEMETRY_REPORTING=
|
|
||||||
|
|
||||||
mk_add_options MOZ_CRASHREPORTER=0
|
mk_add_options MOZ_CRASHREPORTER=0
|
||||||
mk_add_options MOZ_DATA_REPORTING=0
|
mk_add_options MOZ_DATA_REPORTING=0
|
||||||
mk_add_options MOZ_SERVICES_HEALTHREPORT=0
|
mk_add_options MOZ_SERVICES_HEALTHREPORT=0
|
||||||
mk_add_options MOZ_TELEMETRY_REPORTING=0
|
mk_add_options MOZ_TELEMETRY_REPORTING=0
|
||||||
|
|
||||||
if test "$ZEN_CROSS_COMPILING"; then
|
# Allow loading unsigned extensions
|
||||||
ac_add_options --target=x86_64-pc-linux-gnu
|
export MOZ_REQUIRE_SIGNING=1
|
||||||
fi
|
mk_add_options MOZ_REQUIRE_SIGNING=1
|
||||||
|
|
||||||
export MOZ_APP_UA_NAME="Firefox"
|
# Sorry ptr, I didnt mean to!
|
||||||
|
ac_add_options --without-wasm-sandboxed-libraries
|
||||||
# ALWAYS MANTAIN ONE LINE BREAK AT THE END OF THIS FILE
|
|
||||||
|
@@ -1,21 +1,19 @@
|
|||||||
ac_add_options --enable-wasm-avx
|
|
||||||
|
|
||||||
# not when cross compiling
|
if test -d "$HOME/.mozbuild/clang/bin"; then
|
||||||
if ! test "$ZEN_CROSS_COMPILING"; then
|
export CC="$HOME"/.mozbuild/clang/bin/clang
|
||||||
|
export CXX="$HOME"/.mozbuild/clang/bin/clang++
|
||||||
if test -d "$HOME/.mozbuild/clang/bin"; then
|
else
|
||||||
export CC="$HOME"/.mozbuild/clang/bin/clang
|
export CC=clang
|
||||||
export CXX="$HOME"/.mozbuild/clang/bin/clang++
|
export CXX=clang++
|
||||||
else
|
|
||||||
export CC=clang
|
|
||||||
export CXX=clang++
|
|
||||||
fi
|
|
||||||
|
|
||||||
ac_add_options --enable-linker=lld
|
|
||||||
ac_add_options --disable-elf-hack
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$ZEN_RELEASE"; then
|
if test "$ZEN_RELEASE"; then
|
||||||
|
|
||||||
|
ac_add_options --disable-dmd
|
||||||
|
ac_add_options --enable-linker=lld
|
||||||
|
ac_add_options --disable-elf-hack
|
||||||
|
|
||||||
|
ac_add_options --enable-install-strip
|
||||||
ac_add_options --enable-strip
|
ac_add_options --enable-strip
|
||||||
export STRIP_FLAGS="--strip-debug --strip-unneeded"
|
export STRIP_FLAGS="--strip-debug --strip-unneeded"
|
||||||
|
|
||||||
@@ -26,19 +24,28 @@ if test "$ZEN_RELEASE"; then
|
|||||||
mk_add_options 'export SCCACHE_GHA_ENABLED=on'
|
mk_add_options 'export SCCACHE_GHA_ENABLED=on'
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# PGO may cause link errors on windows!
|
export MOZ_PGO=1
|
||||||
if ! test "$ZEN_CROSS_COMPILING"; then
|
ac_add_options MOZ_PGO=1
|
||||||
# WE ARE JUST SUPPORTING PGO FOR LINUX!
|
|
||||||
export MOZ_PGO=1
|
|
||||||
ac_add_options MOZ_PGO=1
|
|
||||||
fi
|
|
||||||
|
|
||||||
export CFLAGS="$CFLAGS -march=x86-64-v2 -mtune=haswell -O3 -pipe -fno-plt -fexceptions -Wformat -Werror=format-security -fstack-clash-protection -fcf-protection"
|
if test "$SURFER_COMPAT" = "true"; then
|
||||||
export CXXLAGS="$CXXFLAGS -march=x86-64-v2 -mtune=haswell -O3 -pipe -fno-plt -fexceptions -Wformat -Werror=format-security -fstack-clash-protection -fcf-protection"
|
ac_add_options --enable-optimize="-O3 -march=x86-64"
|
||||||
export POLLY="-mllvm -polly -mllvm -polly-2nd-level-tiling -mllvm -polly-loopfusion-greedy -mllvm -polly-pattern-matching-based-opts -mllvm -polly-position=before-vectorizer -mllvm -polly-vectorizer=stripmine"
|
|
||||||
export RUSTFLAGS="$RUSTFLAGS -C codegen-units=1 -Ctarget-cpu=x86-64-v2"
|
export CFLAGS="$CFLAGS -O3 -ffp-contract=fast -march=x86-64"
|
||||||
|
export CPPFLAGS="$CPPFLAGS -O3 -ffp-contract=fast -march=x86-64"
|
||||||
|
export CXXFLAGS="$CXXFLAGS -O3 -ffp-contract=fast -march=x86-64"
|
||||||
|
export LDFLAGS="$LDFLAGS -Wl,-O3 -Wl,-mllvm,-fp-contract=fast -march=x86-64"
|
||||||
|
export RUSTFLAGS="$RUSTFLAGS -C target-cpu=x86-64 -C codegen-units=1"
|
||||||
|
else
|
||||||
|
ac_add_options --enable-wasm-avx
|
||||||
|
ac_add_options --enable-optimize="-O3 -march=x86-64-v3 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes"
|
||||||
|
|
||||||
|
export CFLAGS="$CFLAGS -O3 -ffp-contract=fast -march=x86-64-v3 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes"
|
||||||
|
export CPPFLAGS="$CPPFLAGS -O3 -ffp-contract=fast -march=x86-64-v3 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes"
|
||||||
|
export CXXFLAGS="$CXXFLAGS -O3 -ffp-contract=fast -march=x86-64-v3 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes"
|
||||||
|
export LDFLAGS="$LDFLAGS -Wl,-O3 -Wl,-mllvm,-fp-contract=fast -march=x86-64-v3"
|
||||||
|
export RUSTFLAGS="$RUSTFLAGS -C target-cpu=x86-64-v3 -C target-feature=+sse4.1 -C target-feature=+avx2 -C codegen-units=1"
|
||||||
|
fi
|
||||||
|
export VERBOSE=1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Disable telemetry and tracking
|
ac_add_options --target=x86_64-pc-linux
|
||||||
mk_add_options MOZ_TELEMETRY_REPORTING=
|
|
||||||
mk_add_options MOZ_DATA_REPORTING=
|
|
||||||
|
@@ -1,12 +1,35 @@
|
|||||||
POLLY="-mllvm -polly -mllvm -polly-2nd-level-tiling -mllvm -polly-loopfusion-greedy -mllvm -polly-pattern-matching-based-opts -mllvm -polly-position=before-vectorizer -mllvm -polly-vectorizer=stripmine"
|
|
||||||
|
|
||||||
|
# SURFER_COMPAT has a different meaning here, in macOS it means that the build is for
|
||||||
|
# x86_64, not ARM64.
|
||||||
unset MOZ_STDCXX_COMPAT
|
unset MOZ_STDCXX_COMPAT
|
||||||
if test "$ZEN_RELEASE"; then
|
|
||||||
export RUSTFLAGS="$RUSTFLAGS -Ctarget-cpu=apple-m1"
|
|
||||||
fi
|
|
||||||
|
|
||||||
ac_add_options --enable-install-strip
|
ac_add_options --disable-dmd
|
||||||
ac_add_options --target=aarch64-apple-darwin
|
|
||||||
|
|
||||||
export MOZ_MACBUNDLE_ID=${appId}
|
export MOZ_MACBUNDLE_ID=${appId}
|
||||||
export MOZ_MACBUNDLE_NAME="Zen Browser.app"
|
export MOZ_MACBUNDLE_NAME="Zen Browser.app"
|
||||||
|
|
||||||
|
if test "$SURFER_COMPAT" = "true"; then
|
||||||
|
export MOZ_PGO=1
|
||||||
|
ac_add_options MOZ_PGO=1
|
||||||
|
ac_add_options --target=x86_64-apple-darwin
|
||||||
|
|
||||||
|
ac_add_options --enable-wasm-avx
|
||||||
|
ac_add_options --enable-optimize="-march=nehalem -mtune=haswell -O3 -w"
|
||||||
|
|
||||||
|
export CFLAGS="-O3 -march=nehalem"
|
||||||
|
export CPPFLAGS="-O3 -march=nehalem"
|
||||||
|
export CXXFLAGS="-O3 -march=nehalem"
|
||||||
|
export LDFLAGS="-Wl,-O3 -march=nehalem"
|
||||||
|
export RUSTFLAGS="-Ctarget-cpu=nehalem -C codegen-units=1"
|
||||||
|
else
|
||||||
|
ac_add_options --target=aarch64-apple-darwin
|
||||||
|
|
||||||
|
ac_add_options --enable-optimize="-O3 -mcpu=apple-m1 -march=armv8.3-a+simd"
|
||||||
|
|
||||||
|
export CFLAGS="-O3 -march=armv8.3-a+simd -mcpu=apple-m1"
|
||||||
|
export CPPFLAGS="-O3 -march=armv8.3-a+simd -mcpu=apple-m1"
|
||||||
|
export CXXFLAGS="-O3 -march=armv8.3-a+simd -mcpu=apple-m1"
|
||||||
|
export LDFLAGS="-Wl,-O3 -march=armv8.3-a+simd -mcpu=apple-m1"
|
||||||
|
export RUSTFLAGS="-C target-feature=+v8.3a -C codegen-units=1 -Ctarget-cpu=apple-m1"
|
||||||
|
fi
|
||||||
|
export VERBOSE=1
|
||||||
|
@@ -1,5 +1,71 @@
|
|||||||
|
|
||||||
|
if test "$ZEN_CROSS_COMPILING"; then
|
||||||
|
|
||||||
|
export WINSYSROOT="$(echo ~)/win-cross/vs2022"
|
||||||
|
|
||||||
|
export MIDL="$(echo ~)/win-cross/wine/bin/widl"
|
||||||
|
export WINE="$(echo ~)/win-cross/wine/bin/wine64"
|
||||||
|
export WINEDEBUG=-all
|
||||||
|
|
||||||
|
export MOZ_STUB_INSTALLER=1
|
||||||
|
export MOZ_PKG_FORMAT=TAR
|
||||||
|
|
||||||
|
export CROSS_BUILD=1
|
||||||
|
CROSS_COMPILE=1
|
||||||
|
TOOLS=$(echo ~)/win-cross
|
||||||
|
|
||||||
|
#export WIN32_REDIST_DIR="$TOOLS"/vs2022/VC/Redist/MSVC/14.34.31931/x64/Microsoft.VC143.CRT
|
||||||
|
#export WIN_UCRT_REDIST_DIR="$TOOLS/vs2022/Windows Kits/10/Redist/10.0.22621.0/ucrt/DLLs/x64"
|
||||||
|
|
||||||
|
export MIDL="$TOOLS/wine/bin/widl"
|
||||||
|
export MOZ_INCLUDE_SOURCE_INFO=1
|
||||||
|
export MOZ_STUB_INSTALLER=1
|
||||||
|
export WINEDEBUG=-all
|
||||||
|
export WINE="$TOOLS/wine/bin/wine64"
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
#? https://bugzilla.mozilla.org/show_bug.cgi?id=1617793
|
||||||
|
#? https://phabricator.services.mozilla.com/D170170
|
||||||
|
ac_add_options --target=x86_64-pc-windows-msvc
|
||||||
|
|
||||||
|
ac_add_options --disable-maintenance-service
|
||||||
|
ac_add_options --disable-bits-download
|
||||||
|
|
||||||
|
ac_add_options --without-wasm-sandboxed-libraries
|
||||||
|
|
||||||
|
if test "$SURFER_COMPAT" = "true"; then
|
||||||
|
ac_add_options --enable-optimize="-O3 -mavx -maes -w -ftree-vectorize"
|
||||||
|
|
||||||
|
export CFLAGS="-mavx -maes -mtune=haswell -march=x86-64"
|
||||||
|
export CPPFLAGS="-mavx -maes -mtune=haswell -march=x86-64"
|
||||||
|
export CXXFLAGS="-mavx -maes -mtune=haswell -march=x86-64"
|
||||||
|
export LDFLAGS="-Wl,-O3"
|
||||||
|
export RUSTFLAGS="-C target-feature=+avx -C codegen-units=1 -Ctarget-cpu=x86-64"
|
||||||
|
else
|
||||||
|
ac_add_options --enable-optimize="-O2 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes -Xclang -ftree-vectorize -w"
|
||||||
|
ac_add_options --enable-wasm-avx
|
||||||
|
|
||||||
|
export CFLAGS="-O2 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes -march=x86-64-v3"
|
||||||
|
export CPPFLAGS="-O2 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes -march=x86-64-v3"
|
||||||
|
export CXXFLAGS="-O2 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes -march=x86-64-v3"
|
||||||
|
export LDFLAGS="-Wl,-O3 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes -march=x86-64-v3"
|
||||||
|
export RUSTFLAGS="-C target-feature=+avx -C codegen-units=1 -Ctarget-cpu=x86-64-v3"
|
||||||
|
fi
|
||||||
|
export POLLY="-mllvm -polly -mllvm -polly-2nd-level-tiling -mllvm -polly-loopfusion-greedy -mllvm -polly-pattern-matching-based-opts -mllvm -polly-position=before-vectorizer -mllvm -polly-vectorizer=stripmine"
|
||||||
|
export VERBOSE=1
|
||||||
|
|
||||||
|
#if test "$ZEN_GA_GENERATE_PROFILE"; then
|
||||||
|
# mk_add_options "export MOZ_AUTOMATION_PACKAGE_GENERATED_SOURCES=0"
|
||||||
|
# ac_add_options --enable-profile-generate=cross
|
||||||
|
#else
|
||||||
|
# ac_add_options --enable-profile-use=cross
|
||||||
|
# if test "$SURFER_COMPAT" = "true"; then
|
||||||
|
# ac_add_options --with-pgo-profile-path=$(echo ~)/artifact/merged-generic.profdata
|
||||||
|
# ac_add_options --with-pgo-jarlog=$(echo ~)/artifact/en-US-generic.log
|
||||||
|
# else
|
||||||
|
# ac_add_options --with-pgo-profile-path=$(echo ~)/artifact/merged-specific.profdata
|
||||||
|
# ac_add_options --with-pgo-jarlog=$(echo ~)/artifact/en-US-specific.log
|
||||||
|
# fi
|
||||||
|
#fi
|
||||||
|
|
||||||
# Disable telemetry and tracking
|
|
||||||
mk_add_options MOZ_TELEMETRY_REPORTING=
|
|
||||||
mk_add_options MOZ_DATA_REPORTING=
|
|
||||||
|
109
docs/performance.md
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
# 🌀 Zen Browser Performance traker
|
||||||
|
```mermaid
|
||||||
|
graph TD;
|
||||||
|
A[mauro-balades] -->B(Zen custom code)
|
||||||
|
G-->B
|
||||||
|
H(ptr1337/CachyOS)-->|AUR Pkg and Opt. flags|D
|
||||||
|
E(Fire Fox-Code)-->C
|
||||||
|
B --> C{Final code}
|
||||||
|
D-->G(Perf. Testing)
|
||||||
|
C-->D(Build)
|
||||||
|
D--> F(Release)
|
||||||
|
F-->I(mar)
|
||||||
|
F-->L(Mac)
|
||||||
|
F-->T(Linux)
|
||||||
|
F-->V(Win install)
|
||||||
|
V-->Z(Zip)
|
||||||
|
V-->Z2(Intall.exe)
|
||||||
|
I-->I1(windows.mar)
|
||||||
|
I-->I2(linux.mar)
|
||||||
|
I-->I3(macos.mar)
|
||||||
|
T-->T1(zen.linux.tar.bz2)
|
||||||
|
T-->T2(AUR)
|
||||||
|
T-->T3(Flatpak)
|
||||||
|
T-->T4(AppImage)
|
||||||
|
L-->L1(zen.macos.dmg)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Scores
|
||||||
|
|
||||||
|
## 1
|
||||||
|
- [NOCanoa](https://github.com/NOCanoa)
|
||||||
|
|
||||||
|
OS: win 11; CPU: i5 13600k
|
||||||
|
|
||||||
|
## web.basemark
|
||||||
|
|
||||||
|
https://web.basemark.com/
|
||||||
|
|
||||||
|
| | score: |CSS | HTML5 | Page load and Responsiveness | Resize Cap. |
|
||||||
|
|-----------|-----|-----|-------|------------------------------|-------------|
|
||||||
|
| 1.0.0-a.13-opt | 1658.87 | 59% | 91% | 90% | 76% |
|
||||||
|
| 1.0.0-a.12-opt | 1874.49 | 59% | 91% | 91% | 76% |
|
||||||
|
| 1.0.0-a.11-opt | 1678.49 | 59% | 91% | 91% | 76% |
|
||||||
|
| 1.0.0-a.10 | 1660.89 | 59% | 91% | 91% | 76% |
|
||||||
|
| 1.0.0-a.9 | 470 | why | why | why | why |
|
||||||
|
| 1.0.0-a.8 | 446.74 | 59% | 91% | 96% | 76% |
|
||||||
|
| 1.0.0-a.7 | 1964.43 | 59% | 91% | 91% | 76% |
|
||||||
|
| 1.0.0-a.6 | 1747.98 | 59% | 91% | 91% | 76% |
|
||||||
|
| 1.0.0-a.4 | 470.49 | 59% | 91% | 97% | 76% |
|
||||||
|
| 1.0.0-a.3 | 475.52 |59% | 91% | 97% | 76% |
|
||||||
|
| other | last | utpdate | 31/7 | 2024 | - |
|
||||||
|
| Librewolf 128.0-2 | 1953.65 | 59.66% | 89.01% | 91.72% | 76.12% |
|
||||||
|
| FF nightly 130.0a1 | 1912.77 | 59.66% | 90.91% | 91.72% | 76.12% |
|
||||||
|
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
xychart-beta
|
||||||
|
title "Performance over time (Higher is better)"
|
||||||
|
x-axis [.3, .4, .6, .7, .8, .9, .10, .11, .12, .13]
|
||||||
|
y-axis "Benchmark Points"
|
||||||
|
bar [475.52, 470.49, 1747.98, 1964.43, 446.74, 470, 1660.89, 1678.49, 1874.49, 1658.87 ]
|
||||||
|
line [475.52, 470.49, 1747.98, 1964.43, 446.74, 470, 1660.89, 1678.49, 1874.49, 1658.87 ]
|
||||||
|
```
|
||||||
|
|
||||||
|
## Speedometer3.0
|
||||||
|
|
||||||
|
https://browserbench.org/Speedometer3.0/
|
||||||
|
|
||||||
|
| | score: |
|
||||||
|
|-----------|-----|
|
||||||
|
| 1.0.0-a.13-opt | 21.1 |
|
||||||
|
| 1.0.0-a.12-opt | 21.5 |
|
||||||
|
| 1.0.0-a.11-opt | 20.8 |
|
||||||
|
| 1.0.0-a.10 | 21.2 |
|
||||||
|
| others| - |
|
||||||
|
| Vivaldi 6.7.3329.39| 27.8 |
|
||||||
|
| FF nightly 130.0a1 | 27.0 |
|
||||||
|
| Librewolf 128.0-2 | 20.2 |
|
||||||
|
|
||||||
|
|
||||||
|
## 2
|
||||||
|
|
||||||
|
- [Verix](https://github.com/Veriiix)
|
||||||
|
|
||||||
|
OS: Win 11
|
||||||
|
CPU: i7-13700KF
|
||||||
|
GPU: AMD RX 7900 XTX
|
||||||
|
https://www.tablesgenerator.com/
|
||||||
|
|
||||||
|
| Version | Score: |
|
||||||
|
|------------|--------|
|
||||||
|
| 1.0.0-a.12-opt | 23 |
|
||||||
|
| 1.0.0-a.11-opt | 22.1 |
|
||||||
|
| 1.0.0-a.10 | 21.7 |
|
||||||
|
| 1.0.0-a.9 | 3.7 |
|
||||||
|
| others| - |
|
||||||
|
| Default FF | 28 |
|
||||||
|
|
||||||
|
|
||||||
|
https://browserbench.org/Speedometer3.0/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Repository View Counter
|
||||||
|
|
||||||
|
<div align='center'><a href='https://www.websitecounterfree.com'><img src='https://www.websitecounterfree.com/c.php?d=9&id=57772&s=40' border='0' alt='Free Website Counter'></a><br / ><small><a href='https://www.websitecounterfree.com' title="Free Website Counter">Free Website Counter</a></small></div>
|
||||||
|
|
31
docs/requirements.md
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
|
||||||
|
# Supported CPUs for optimized builds (Windows and Linux)
|
||||||
|
|
||||||
|
> If you CPU is not listed, you should use the "Generic" build.
|
||||||
|
|
||||||
|
* AMD Family 15h (Excavator)
|
||||||
|
* AMD Family 17h (Zen)
|
||||||
|
* AMD Family 17h (Zen+)
|
||||||
|
* AMD Family 17h (Zen 2)
|
||||||
|
* AMD Family 19h (Zen 3)
|
||||||
|
* Intel 4th Gen Core (Haswell)
|
||||||
|
* Intel 5th Gen Core (Broadwell)
|
||||||
|
* Intel 6th Gen Core (Skylake)
|
||||||
|
* Intel 7th Gen Core (Kaby Lake)
|
||||||
|
* Intel 8/9th Gen Core (Coffee Lake)
|
||||||
|
* Intel 10th Gen Core (Comet Lake)
|
||||||
|
* Intel 12th Gen (Alder Lake)
|
||||||
|
* Intel 13th Gen (Raptor Lake)
|
||||||
|
* Intel 14th Gen (Raptor Lake Refresh)
|
||||||
|
* Intel 15th Gen (Lunar / Arrow Lake)
|
||||||
|
* AMD Family 19h (Zen 4 / Zen 4c)
|
||||||
|
* AMD Family 1Ah (Zen 5 / Zen 5c)
|
||||||
|
* Intel 6th Gen Core (Skylake X)
|
||||||
|
* Intel 8th Gen Core i3 (Cannon Lake)
|
||||||
|
* Intel Xeon / 10th Gen Core (Ice Lake)
|
||||||
|
* Intel Xeon (Cascade Lake)
|
||||||
|
* Intel Xeon (Cooper Lake)
|
||||||
|
* Intel 3rd Gen 10nm++ (Tiger Lake)
|
||||||
|
* Intel 4th Gen 10nm++ (Sapphire Rapids)
|
||||||
|
* Intel 5th Gen 10nm++ (Emerald Rapids)
|
||||||
|
* Intel 11th Gen (Rocket Lake)
|
46
flatpak/io.github.zen_browser.zen.yml.template
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
app-id: io.github.zen_browser.zen
|
||||||
|
runtime: org.freedesktop.Platform
|
||||||
|
runtime-version: '23.08'
|
||||||
|
sdk: org.freedesktop.Sdk
|
||||||
|
base: org.mozilla.firefox.BaseApp
|
||||||
|
base-version: '23.08'
|
||||||
|
command: launch-script.sh
|
||||||
|
finish-args:
|
||||||
|
- --share=ipc
|
||||||
|
- --share=network
|
||||||
|
- --socket=pulseaudio
|
||||||
|
- --socket=wayland
|
||||||
|
- --socket=fallback-x11
|
||||||
|
- --socket=pcsc
|
||||||
|
- --socket=cups
|
||||||
|
- --persist=.zen
|
||||||
|
- --filesystem=xdg-download:rw
|
||||||
|
- --device=all
|
||||||
|
- --talk-name=org.freedesktop.FileManager1
|
||||||
|
- --own-name=org.mozilla.zen.*
|
||||||
|
- --own-name=org.mpris.MediaPlayer2.firefox.*
|
||||||
|
- --system-talk-name=org.freedesktop.NetworkManager
|
||||||
|
- --talk-name=org.a11y.Bus
|
||||||
|
modules:
|
||||||
|
- name: zen_browser
|
||||||
|
buildsystem: simple
|
||||||
|
build-commands:
|
||||||
|
- mv zen /app/
|
||||||
|
|
||||||
|
- install -Dm0755 metadata/launch-script.sh ${{FLATPAK_DEST}}/bin/launch-script.sh
|
||||||
|
- install -Dm0644 metadata/policies.json ${{FLATPAK_DEST}}/bin/distribution/policies.json
|
||||||
|
- install -Dm0644 metadata/icons/io.github.zen_browser.zen.png ${{FLATPAK_DEST}}/share/icons/hicolor/256x256/apps/${{FLATPAK_ID}}.png
|
||||||
|
- install -Dm0644 metadata/io.github.zen_browser.zen.metainfo.xml ${{FLATPAK_DEST}}/share/metainfo/${{FLATPAK_ID}}.metainfo.xml
|
||||||
|
- install -Dm0644 metadata/io.github.zen_browser.zen.desktop ${{FLATPAK_DEST}}/share/applications/${{FLATPAK_ID}}.desktop
|
||||||
|
|
||||||
|
sources:
|
||||||
|
- type: archive
|
||||||
|
url: https://github.com/zen-browser/desktop/releases/download/{version}/zen.linux-generic.tar.bz2
|
||||||
|
sha256: {linux_sha256}
|
||||||
|
strip-components: 0
|
||||||
|
|
||||||
|
- type: archive
|
||||||
|
url: https://github.com/zen-browser/flatpak/releases/latest/download/archive.tar
|
||||||
|
sha256: {flatpak_sha256}
|
||||||
|
strip-components: 0
|
||||||
|
dest: metadata
|
@@ -27,6 +27,6 @@
|
|||||||
},
|
},
|
||||||
"homepage": "https://github.com/zen-browser/core#readme",
|
"homepage": "https://github.com/zen-browser/core#readme",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@zen-browser/surfer": "^1.1.8"
|
"@zen-browser/surfer": "^1.2.7"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
10
pnpm-lock.yaml
generated
@@ -9,8 +9,8 @@ importers:
|
|||||||
.:
|
.:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@zen-browser/surfer':
|
'@zen-browser/surfer':
|
||||||
specifier: ^1.1.8
|
specifier: ^1.2.7
|
||||||
version: 1.1.8
|
version: 1.2.7
|
||||||
|
|
||||||
packages:
|
packages:
|
||||||
|
|
||||||
@@ -109,8 +109,8 @@ packages:
|
|||||||
'@types/node@17.0.45':
|
'@types/node@17.0.45':
|
||||||
resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==}
|
resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==}
|
||||||
|
|
||||||
'@zen-browser/surfer@1.1.8':
|
'@zen-browser/surfer@1.2.7':
|
||||||
resolution: {integrity: sha512-y51pqi0eMeiuXn+86Qfec3kHK4F3l6e0ut3LDewDY+f3TDe6xGTQb5z975KIW7GAz0KAOe/jWsrqvD0a87Sqxg==}
|
resolution: {integrity: sha512-VbbbB7crGXrdfk1PPnlsWFWErwjtccXbRuw5mOQzY327d2t5VraxmkqTzcuGSTxpu3CR/KvzNu0gDg/6+7b4NQ==}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
ansi-regex@5.0.1:
|
ansi-regex@5.0.1:
|
||||||
@@ -786,7 +786,7 @@ snapshots:
|
|||||||
|
|
||||||
'@types/node@17.0.45': {}
|
'@types/node@17.0.45': {}
|
||||||
|
|
||||||
'@zen-browser/surfer@1.1.8':
|
'@zen-browser/surfer@1.2.7':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@resvg/resvg-js': 1.4.0
|
'@resvg/resvg-js': 1.4.0
|
||||||
async-icns: 1.0.2
|
async-icns: 1.0.2
|
||||||
|
58
scripts/prepare-flatpak-release.py
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
import hashlib
|
||||||
|
import argparse
|
||||||
|
|
||||||
|
FLATID = "io.github.zen_browser.zen"
|
||||||
|
|
||||||
|
def get_sha256sum(filename):
|
||||||
|
sha256 = hashlib.sha256()
|
||||||
|
with open(filename, "rb") as f:
|
||||||
|
for byte_block in iter(lambda: f.read(4096), b""):
|
||||||
|
sha256.update(byte_block)
|
||||||
|
return sha256.hexdigest()
|
||||||
|
|
||||||
|
def build_template(template, linux_sha256, flatpak_sha256, version):
|
||||||
|
print(f"Building template with version {version}")
|
||||||
|
print(f"\tLinux archive sha256: {linux_sha256}")
|
||||||
|
print(f"\tFlatpak archive sha256: {flatpak_sha256}")
|
||||||
|
return template.format(linux_sha256=linux_sha256,
|
||||||
|
flatpak_sha256=flatpak_sha256,
|
||||||
|
version=version)
|
||||||
|
|
||||||
|
def get_template(template_root):
|
||||||
|
file = f"{template_root}/{FLATID}.yml.template"
|
||||||
|
print(f"Reading template {file}")
|
||||||
|
with open(file, "r") as f:
|
||||||
|
return f.read()
|
||||||
|
print(f"Template {template_root}/flatpak.yml not found")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser(description='Prepare flatpak release')
|
||||||
|
parser.add_argument('--version', help='Version of the release', required=True)
|
||||||
|
parser.add_argument('--linux-archive', help='Linux archive', required=True)
|
||||||
|
parser.add_argument('--flatpak-archive', help='Flatpak archive', required=True)
|
||||||
|
parser.add_argument('--output', help='Output file', default=f"{FLATID}.yml")
|
||||||
|
parser.add_argument('--template-root', help='Template root', default="flatpak")
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
version = args.version
|
||||||
|
linux_archive = args.linux_archive
|
||||||
|
flatpak_archive = args.flatpak_archive
|
||||||
|
output = args.output
|
||||||
|
template_root = args.template_root
|
||||||
|
|
||||||
|
linux_sha256 = get_sha256sum(linux_archive)
|
||||||
|
flatpak_sha256 = get_sha256sum(flatpak_archive)
|
||||||
|
|
||||||
|
template = build_template(get_template(template_root), linux_sha256, flatpak_sha256, version)
|
||||||
|
|
||||||
|
print(f"Writing output to {output}")
|
||||||
|
with open(output, "w") as f:
|
||||||
|
f.write(template)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
@@ -1,29 +1,7 @@
|
|||||||
// Ignore license in this file
|
// 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/.
|
||||||
//
|
//
|
||||||
// The code in this file was created by @yokoffing and is licensed under the
|
|
||||||
// MIT license:
|
|
||||||
// MIT License
|
|
||||||
//
|
|
||||||
// Copyright (c) 2020 yokoffing
|
|
||||||
//
|
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
|
||||||
// in the Software without restriction, including without limitation the rights
|
|
||||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
// copies of the Software, and to permit persons to whom the Software is
|
|
||||||
// furnished to do so, subject to the following conditions:
|
|
||||||
//
|
|
||||||
// The above copyright notice and this permission notice shall be included in all
|
|
||||||
// copies or substantial portions of the Software.
|
|
||||||
//
|
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
// SOFTWARE.
|
|
||||||
|
|
||||||
/* You may copy+paste this file and use it as it is.
|
/* You may copy+paste this file and use it as it is.
|
||||||
*
|
*
|
||||||
* If you make changes to your about:config while the program is running, the
|
* If you make changes to your about:config while the program is running, the
|
||||||
@@ -35,241 +13,215 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Betterfox *
|
* Betterfox *
|
||||||
* "Ad meliora" *
|
* "Ad meliora" *
|
||||||
* version: 121 *
|
* version: 128 *
|
||||||
* url: https://github.com/yokoffing/Betterfox *
|
* url: https://github.com/yokoffing/Betterfox *
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* SECTION: FASTFOX *
|
* SECTION: FASTFOX *
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
/** GENERAL ***/
|
/** GENERAL ***/
|
||||||
pref('content.notify.interval', 100000);
|
pref("content.notify.interval", 100000);
|
||||||
|
|
||||||
/** GFX ***/
|
/** GFX ***/
|
||||||
pref('gfx.canvas.accelerated.cache-items', 4096);
|
pref("gfx.canvas.accelerated.cache-items", 4096);
|
||||||
pref('gfx.canvas.accelerated.cache-size', 512);
|
pref("gfx.canvas.accelerated.cache-size", 512);
|
||||||
pref('gfx.content.skia-font-cache-size', 20);
|
pref("gfx.content.skia-font-cache-size", 20);
|
||||||
|
|
||||||
/** DISK CACHE ***/
|
/** DISK CACHE ***/
|
||||||
pref('browser.cache.jsbc_compression_level', 3);
|
pref("browser.cache.jsbc_compression_level", 3);
|
||||||
|
|
||||||
/** MEDIA CACHE ***/
|
/** MEDIA CACHE ***/
|
||||||
pref('media.memory_cache_max_size', 65536);
|
pref("media.memory_cache_max_size", 65536);
|
||||||
pref('media.cache_readahead_limit', 7200);
|
pref("media.cache_readahead_limit", 7200);
|
||||||
pref('media.cache_resume_threshold', 3600);
|
pref("media.cache_resume_threshold", 3600);
|
||||||
|
|
||||||
/** IMAGE CACHE ***/
|
/** IMAGE CACHE ***/
|
||||||
pref('image.mem.decode_bytes_at_a_time', 32768);
|
pref("image.mem.decode_bytes_at_a_time", 32768);
|
||||||
|
|
||||||
/** NETWORK ***/
|
/** NETWORK ***/
|
||||||
pref('network.buffer.cache.size', 262144);
|
pref("network.http.max-connections", 1800);
|
||||||
pref('network.buffer.cache.count', 128);
|
pref("network.http.max-persistent-connections-per-server", 10);
|
||||||
pref('network.http.max-connections', 1800);
|
pref("network.http.max-urgent-start-excessive-connections-per-host", 5);
|
||||||
pref('network.http.max-persistent-connections-per-server', 10);
|
pref("network.http.pacing.requests.enabled", false);
|
||||||
pref('network.http.max-urgent-start-excessive-connections-per-host', 5);
|
pref("network.dnsCacheExpiration", 3600);
|
||||||
pref('network.http.pacing.requests.enabled', false);
|
pref("network.ssl_tokens_cache_capacity", 10240);
|
||||||
pref('network.dnsCacheExpiration', 3600);
|
|
||||||
pref('network.dns.max_high_priority_threads', 8);
|
|
||||||
pref('network.ssl_tokens_cache_capacity', 10240);
|
|
||||||
|
|
||||||
/** SPECULATIVE LOADING ***/
|
/** SPECULATIVE LOADING ***/
|
||||||
pref('network.dns.disablePrefetch', true);
|
pref("network.dns.disablePrefetch", true);
|
||||||
pref('network.prefetch-next', false);
|
pref("network.dns.disablePrefetchFromHTTPS", true);
|
||||||
pref('network.predictor.enabled', false);
|
pref("network.prefetch-next", false);
|
||||||
|
pref("network.predictor.enabled", false);
|
||||||
|
pref("network.predictor.enable-prefetch", false);
|
||||||
|
|
||||||
/** EXPERIMENTAL ***/
|
/** EXPERIMENTAL ***/
|
||||||
pref('layout.css.grid-template-masonry-value.enabled', true);
|
pref("layout.css.grid-template-masonry-value.enabled", true);
|
||||||
pref('dom.enable_web_task_scheduling', true);
|
pref("dom.enable_web_task_scheduling", true);
|
||||||
pref('layout.css.has-selector.enabled', true);
|
pref("dom.security.sanitizer.enabled", true);
|
||||||
pref('dom.security.sanitizer.enabled', true);
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* SECTION: SECUREFOX *
|
* SECTION: SECUREFOX *
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
/** TRACKING PROTECTION ***/
|
/** TRACKING PROTECTION ***/
|
||||||
pref('browser.contentblocking.category', 'strict');
|
pref("browser.contentblocking.category", "strict");
|
||||||
pref(
|
pref("urlclassifier.trackingSkipURLs", "*.reddit.com, *.twitter.com, *.twimg.com, *.tiktok.com");
|
||||||
'urlclassifier.trackingSkipURLs',
|
pref("urlclassifier.features.socialtracking.skipURLs", "*.instagram.com, *.twitter.com, *.twimg.com");
|
||||||
'*.reddit.com, *.twitter.com, *.twimg.com, *.tiktok.com'
|
pref("network.cookie.sameSite.noneRequiresSecure", true);
|
||||||
);
|
pref("browser.download.start_downloads_in_tmp_dir", true);
|
||||||
pref(
|
pref("browser.helperApps.deleteTempFileOnExit", true);
|
||||||
'urlclassifier.features.socialtracking.skipURLs',
|
pref("browser.uitour.enabled", false);
|
||||||
'*.instagram.com, *.twitter.com, *.twimg.com'
|
pref("privacy.globalprivacycontrol.enabled", true);
|
||||||
);
|
|
||||||
pref('network.cookie.sameSite.noneRequiresSecure', true);
|
|
||||||
pref('browser.download.start_downloads_in_tmp_dir', true);
|
|
||||||
pref('browser.helperApps.deleteTempFileOnExit', true);
|
|
||||||
pref('browser.uitour.enabled', false);
|
|
||||||
pref('privacy.globalprivacycontrol.enabled', true);
|
|
||||||
|
|
||||||
/** OCSP & CERTS / HPKP ***/
|
/** OCSP & CERTS / HPKP ***/
|
||||||
pref('security.OCSP.enabled', 0);
|
pref("security.OCSP.enabled", 0);
|
||||||
pref('security.remote_settings.crlite_filters.enabled', true);
|
pref("security.remote_settings.crlite_filters.enabled", true);
|
||||||
pref('security.pki.crlite_mode', 2);
|
pref("security.pki.crlite_mode", 2);
|
||||||
|
|
||||||
/** SSL / TLS ***/
|
/** SSL / TLS ***/
|
||||||
pref('security.ssl.treat_unsafe_negotiation_as_broken', true);
|
pref("security.ssl.treat_unsafe_negotiation_as_broken", true);
|
||||||
pref('browser.xul.error_pages.expert_bad_cert', true);
|
pref("browser.xul.error_pages.expert_bad_cert", true);
|
||||||
pref('security.tls.enable_0rtt_data', false);
|
pref("security.tls.enable_0rtt_data", false);
|
||||||
|
|
||||||
/** DISK AVOIDANCE ***/
|
/** DISK AVOIDANCE ***/
|
||||||
pref('browser.privatebrowsing.forceMediaMemoryCache', true);
|
pref("browser.privatebrowsing.forceMediaMemoryCache", true);
|
||||||
pref('browser.sessionstore.interval', 60000);
|
pref("browser.sessionstore.interval", 60000);
|
||||||
|
|
||||||
/** SHUTDOWN & SANITIZING ***/
|
/** SHUTDOWN & SANITIZING ***/
|
||||||
pref('privacy.history.custom', true);
|
pref("privacy.history.custom", true);
|
||||||
|
|
||||||
/** SEARCH / URL BAR ***/
|
/** SEARCH / URL BAR ***/
|
||||||
pref('browser.search.separatePrivateDefault.ui.enabled', true);
|
pref("browser.urlbar.trimHttps", true);
|
||||||
pref('browser.urlbar.update2.engineAliasRefresh', true);
|
pref("browser.search.separatePrivateDefault.ui.enabled", true);
|
||||||
pref('browser.search.suggest.enabled', false);
|
pref("browser.urlbar.update2.engineAliasRefresh", true);
|
||||||
pref('browser.urlbar.suggest.quicksuggest.sponsored', false);
|
pref("browser.search.suggest.enabled", false);
|
||||||
pref('browser.urlbar.suggest.quicksuggest.nonsponsored', false);
|
pref("browser.urlbar.quicksuggest.enabled", false);
|
||||||
pref('security.insecure_connection_text.enabled', true);
|
pref("browser.urlbar.suggest.quicksuggest.sponsored", false);
|
||||||
pref('security.insecure_connection_text.pbmode.enabled', true);
|
pref("browser.urlbar.suggest.quicksuggest.nonsponsored", false);
|
||||||
pref('network.IDN_show_punycode', true);
|
pref("browser.urlbar.groupLabels.enabled", false);
|
||||||
|
pref("browser.formfill.enable", false);
|
||||||
/** HTTPS-FIRST POLICY ***/
|
pref("security.insecure_connection_text.enabled", true);
|
||||||
pref('dom.security.https_first', true);
|
pref("security.insecure_connection_text.pbmode.enabled", true);
|
||||||
pref('dom.security.https_first_schemeless', true);
|
pref("network.IDN_show_punycode", true);
|
||||||
|
|
||||||
/** PASSWORDS ***/
|
|
||||||
pref('signon.formlessCapture.enabled', false);
|
|
||||||
pref('signon.privateBrowsingCapture.enabled', false);
|
|
||||||
pref('network.auth.subresource-http-auth-allow', 1);
|
|
||||||
pref('editor.truncate_user_pastes', false);
|
|
||||||
|
|
||||||
/** ADDRESS + CREDIT CARD MANAGER ***/
|
|
||||||
pref('extensions.formautofill.creditCards.enabled', false);
|
|
||||||
|
|
||||||
/** MIXED CONTENT + CROSS-SITE ***/
|
|
||||||
pref('security.mixed_content.block_display_content', true);
|
|
||||||
pref('security.mixed_content.upgrade_display_content', true);
|
|
||||||
pref('security.mixed_content.upgrade_display_content.image', true);
|
|
||||||
pref('pdfjs.enableScripting', false);
|
|
||||||
pref('extensions.postDownloadThirdPartyPrompt', false);
|
|
||||||
|
|
||||||
/** HEADERS / REFERERS ***/
|
|
||||||
pref('network.http.referer.XOriginTrimmingPolicy', 2);
|
|
||||||
|
|
||||||
/** CONTAINERS ***/
|
/** CONTAINERS ***/
|
||||||
pref('privacy.userContext.ui.enabled', true);
|
pref("privacy.userContext.ui.enabled", true);
|
||||||
|
|
||||||
/** WEBRTC ***/
|
/** WEBRTC ***/
|
||||||
pref('media.peerconnection.ice.proxy_only_if_behind_proxy', true);
|
pref("media.peerconnection.ice.proxy_only_if_behind_proxy", true);
|
||||||
pref('media.peerconnection.ice.default_address_only', true);
|
pref("media.peerconnection.ice.default_address_only", true);
|
||||||
|
|
||||||
/** SAFE BROWSING ***/
|
/** SAFE BROWSING ***/
|
||||||
pref('browser.safebrowsing.downloads.remote.enabled', false);
|
pref("browser.safebrowsing.downloads.remote.enabled", false);
|
||||||
|
|
||||||
/** MOZILLA ***/
|
/** MOZILLA ***/
|
||||||
pref('permissions.default.desktop-notification', 2);
|
pref("permissions.default.desktop-notification", 2);
|
||||||
pref('permissions.default.geo', 2);
|
pref("permissions.default.geo", 2);
|
||||||
pref(
|
pref("permissions.manager.defaultsUrl", "");
|
||||||
'geo.provider.network.url',
|
pref("webchannel.allowObject.urlWhitelist", "");
|
||||||
'https://location.services.mozilla.com/v1/geolocate?key=%MOZILLA_API_KEY%'
|
|
||||||
);
|
|
||||||
pref('permissions.manager.defaultsUrl', '');
|
|
||||||
pref('webchannel.allowObject.urlWhitelist', '');
|
|
||||||
|
|
||||||
/** TELEMETRY ***/
|
/** TELEMETRY ***/
|
||||||
pref('datareporting.policy.dataSubmissionEnabled', false);
|
pref("datareporting.policy.dataSubmissionEnabled", false);
|
||||||
pref('datareporting.healthreport.uploadEnabled', false);
|
pref("datareporting.healthreport.uploadEnabled", false);
|
||||||
pref('toolkit.telemetry.unified', false);
|
pref("toolkit.telemetry.unified", false);
|
||||||
pref('toolkit.telemetry.enabled', false);
|
pref("toolkit.telemetry.enabled", false);
|
||||||
pref('toolkit.telemetry.server', 'data:,');
|
pref("toolkit.telemetry.server", "data:,");
|
||||||
pref('toolkit.telemetry.archive.enabled', false);
|
pref("toolkit.telemetry.archive.enabled", false);
|
||||||
pref('toolkit.telemetry.newProfilePing.enabled', false);
|
pref("toolkit.telemetry.newProfilePing.enabled", false);
|
||||||
pref('toolkit.telemetry.shutdownPingSender.enabled', false);
|
pref("toolkit.telemetry.shutdownPingSender.enabled", false);
|
||||||
pref('toolkit.telemetry.updatePing.enabled', false);
|
pref("toolkit.telemetry.updatePing.enabled", false);
|
||||||
pref('toolkit.telemetry.bhrPing.enabled', false);
|
pref("toolkit.telemetry.bhrPing.enabled", false);
|
||||||
pref('toolkit.telemetry.firstShutdownPing.enabled', false);
|
pref("toolkit.telemetry.firstShutdownPing.enabled", false);
|
||||||
pref('toolkit.telemetry.coverage.opt-out', true);
|
pref("toolkit.telemetry.coverage.opt-out", true);
|
||||||
pref('toolkit.coverage.opt-out', true);
|
pref("toolkit.coverage.opt-out", true);
|
||||||
pref('toolkit.coverage.endpoint.base', '');
|
pref("toolkit.coverage.endpoint.base", "");
|
||||||
pref('browser.ping-centre.telemetry', false);
|
pref("browser.newtabpage.activity-stream.feeds.telemetry", false);
|
||||||
pref('browser.newtabpage.activity-stream.feeds.telemetry', false);
|
pref("browser.newtabpage.activity-stream.telemetry", false);
|
||||||
pref('browser.newtabpage.activity-stream.telemetry', false);
|
|
||||||
|
|
||||||
/** EXPERIMENTS ***/
|
/** EXPERIMENTS ***/
|
||||||
pref('app.shield.optoutstudies.enabled', false);
|
pref("app.shield.optoutstudies.enabled", false);
|
||||||
pref('app.normandy.enabled', false);
|
pref("app.normandy.enabled", false);
|
||||||
pref('app.normandy.api_url', '');
|
pref("app.normandy.api_url", "");
|
||||||
|
|
||||||
/** CRASH REPORTS ***/
|
/** CRASH REPORTS ***/
|
||||||
pref('breakpad.reportURL', '');
|
pref("breakpad.reportURL", "");
|
||||||
pref('browser.tabs.crashReporting.sendReport', false);
|
pref("browser.tabs.crashReporting.sendReport", false);
|
||||||
pref('browser.crashReports.unsubmittedCheck.autoSubmit2', false);
|
pref("browser.crashReports.unsubmittedCheck.autoSubmit2", false);
|
||||||
|
|
||||||
/** DETECTION ***/
|
/** DETECTION ***/
|
||||||
pref('captivedetect.canonicalURL', '');
|
pref("captivedetect.canonicalURL", "");
|
||||||
pref('network.captive-portal-service.enabled', false);
|
pref("network.captive-portal-service.enabled", false);
|
||||||
pref('network.connectivity-service.enabled', false);
|
pref("network.connectivity-service.enabled", false);
|
||||||
|
pref("dom.private-attribution.submission.enabled", false);
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* SECTION: PESKYFOX *
|
* SECTION: PESKYFOX *
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
/** MOZILLA UI ***/
|
/** MOZILLA UI ***/
|
||||||
pref('browser.privatebrowsing.vpnpromourl', '');
|
pref("browser.privatebrowsing.vpnpromourl", "");
|
||||||
pref('extensions.getAddons.showPane', false);
|
pref("extensions.getAddons.showPane", false);
|
||||||
pref('extensions.htmlaboutaddons.recommendations.enabled', false);
|
pref("extensions.htmlaboutaddons.recommendations.enabled", false);
|
||||||
pref('browser.discovery.enabled', false);
|
pref("browser.discovery.enabled", false);
|
||||||
pref('browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons', false);
|
pref("browser.shell.checkDefaultBrowser", false);
|
||||||
pref(
|
pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons", false);
|
||||||
'browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features',
|
pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features", false);
|
||||||
false
|
pref("browser.preferences.moreFromMozilla", false);
|
||||||
);
|
pref("browser.tabs.tabmanager.enabled", false);
|
||||||
pref('browser.preferences.moreFromMozilla', false);
|
pref("browser.aboutConfig.showWarning", false);
|
||||||
pref('browser.aboutwelcome.enabled', false);
|
pref("browser.aboutwelcome.enabled", false);
|
||||||
|
|
||||||
/** THEME ADJUSTMENTS ***/
|
/** THEME ADJUSTMENTS ***/
|
||||||
pref('toolkit.legacyUserProfileCustomizations.stylesheets', true);
|
pref("toolkit.legacyUserProfileCustomizations.stylesheets", true);
|
||||||
pref('browser.compactmode.show', true);
|
pref("browser.compactmode.show", true);
|
||||||
pref('layout.css.prefers-color-scheme.content-override', 2);
|
pref("browser.display.focus_ring_on_anything", true);
|
||||||
pref('browser.privateWindowSeparation.enabled', false); // WINDOWS
|
pref("browser.display.focus_ring_style", 0);
|
||||||
|
pref("browser.display.focus_ring_width", 0);
|
||||||
|
pref("layout.css.prefers-color-scheme.content-override", 2);
|
||||||
|
pref("browser.privateWindowSeparation.enabled", false); // WINDOWS
|
||||||
|
|
||||||
/** COOKIE BANNER HANDLING ***/
|
/** FULLSCREEN NOTICE ***/
|
||||||
pref('cookiebanners.service.mode', 1);
|
pref("full-screen-api.transition-duration.enter", "0 0");
|
||||||
pref('cookiebanners.service.mode.privateBrowsing', 1);
|
pref("full-screen-api.transition-duration.leave", "0 0");
|
||||||
|
pref("full-screen-api.warning.delay", -1);
|
||||||
|
pref("full-screen-api.warning.timeout", 0);
|
||||||
|
|
||||||
/** URL BAR ***/
|
/** URL BAR ***/
|
||||||
pref('browser.urlbar.suggest.calculator', true);
|
pref("browser.urlbar.suggest.calculator", true);
|
||||||
pref('browser.urlbar.unitConversion.enabled', true);
|
pref("browser.urlbar.unitConversion.enabled", true);
|
||||||
pref('browser.urlbar.trending.featureGate', false);
|
pref("browser.urlbar.trending.featureGate", false);
|
||||||
|
|
||||||
/** NEW TAB PAGE ***/
|
/** NEW TAB PAGE ***/
|
||||||
pref('browser.newtabpage.activity-stream.feeds.topsites', false);
|
pref("browser.newtabpage.activity-stream.feeds.topsites", false);
|
||||||
pref('browser.newtabpage.activity-stream.feeds.section.topstories', false);
|
pref("browser.newtabpage.activity-stream.feeds.section.topstories", false);
|
||||||
|
|
||||||
/*** POCKET ***/
|
/** POCKET ***/
|
||||||
pref('extensions.pocket.enabled', false);
|
pref("extensions.pocket.enabled", false);
|
||||||
|
|
||||||
/** DOWNLOADS ***/
|
/** DOWNLOADS ***/
|
||||||
pref('browser.download.always_ask_before_handling_new_types', true);
|
pref("browser.download.always_ask_before_handling_new_types", true);
|
||||||
pref('browser.download.manager.addToRecentDocs', false);
|
pref("browser.download.manager.addToRecentDocs", false);
|
||||||
|
|
||||||
/** PDF ***/
|
/** PDF ***/
|
||||||
pref('browser.download.open_pdf_attachments_inline', true);
|
pref("browser.download.open_pdf_attachments_inline", true);
|
||||||
|
|
||||||
/** TAB BEHAVIOR ***/
|
/** TAB BEHAVIOR ***/
|
||||||
pref('browser.bookmarks.openInTabClosesMenu', false);
|
pref("browser.bookmarks.openInTabClosesMenu", false);
|
||||||
pref('browser.menu.showViewImageInfo', true);
|
pref("browser.menu.showViewImageInfo", true);
|
||||||
pref('findbar.highlightAll', true);
|
pref("findbar.highlightAll", true);
|
||||||
pref('layout.word_select.eat_space_to_next_word', false);
|
pref("layout.word_select.eat_space_to_next_word", false);
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* START: MY OVERRIDES *
|
* START: MY OVERRIDES *
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
// visit https://github.com/yokoffing/Betterfox/wiki/Common-Overrides
|
// visit https://github.com/yokoffing/Betterfox/wiki/Common-Overrides
|
||||||
// visit https://github.com/yokoffing/Betterfox/wiki/Optional-Hardening
|
// visit https://github.com/yokoffing/Betterfox/wiki/Optional-Hardening
|
||||||
// Enter your personal overrides below this line:
|
// Enter your personal overrides below this line:
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* SECTION: SMOOTHFOX *
|
* SECTION: SMOOTHFOX *
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
// visit https://github.com/yokoffing/Betterfox/blob/main/Smoothfox.js
|
// visit https://github.com/yokoffing/Betterfox/blob/main/Smoothfox.js
|
||||||
// Enter your scrolling overrides below this line:
|
// Enter your scrolling overrides below this line:
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* END: BETTERFOX *
|
* END: BETTERFOX *
|
||||||
****************************************************************************/
|
****************************************************************************/
|
@@ -2,6 +2,12 @@
|
|||||||
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
// 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/.
|
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
#ifdef XP_UNIX
|
||||||
|
#ifndef XP_MACOSX
|
||||||
|
#define UNIX_BUT_NOT_MAC
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
pref("browser.tabs.cardPreview.enabled", true);
|
pref("browser.tabs.cardPreview.enabled", true);
|
||||||
pref("browser.tabs.hoverPreview.enabled", true);
|
pref("browser.tabs.hoverPreview.enabled", true);
|
||||||
pref("browser.tabs.cardPreview.delayMs", 100);
|
pref("browser.tabs.cardPreview.delayMs", 100);
|
||||||
@@ -13,9 +19,6 @@ pref("devtools.debugger.prompt-connection", false);
|
|||||||
// Theme
|
// Theme
|
||||||
pref('toolkit.legacyUserProfileCustomizations.stylesheets', true);
|
pref('toolkit.legacyUserProfileCustomizations.stylesheets', true);
|
||||||
pref('browser.compactmode.show', true);
|
pref('browser.compactmode.show', true);
|
||||||
pref('browser.display.focus_ring_on_anything', true);
|
|
||||||
pref('browser.display.focus_ring_style', 0);
|
|
||||||
pref('browser.display.focus_ring_width', 0);
|
|
||||||
|
|
||||||
pref('browser.newtabpage.activity-stream.newtabWallpapers.enabled', true);
|
pref('browser.newtabpage.activity-stream.newtabWallpapers.enabled', true);
|
||||||
pref('browser.newtabpage.activity-stream.newtabWallpapers.v2.enabled', true);
|
pref('browser.newtabpage.activity-stream.newtabWallpapers.v2.enabled', true);
|
||||||
@@ -61,10 +64,12 @@ pref('zen.tabs.vertical', true);
|
|||||||
pref('zen.theme.accent-color', "#aac7ff");
|
pref('zen.theme.accent-color', "#aac7ff");
|
||||||
pref('zen.theme.toolbar-themed', true);
|
pref('zen.theme.toolbar-themed', true);
|
||||||
pref('zen.theme.pill-button', false);
|
pref('zen.theme.pill-button', false);
|
||||||
|
pref('zen.theme.floating-urlbar', false);
|
||||||
pref('zen.view.compact', false);
|
pref('zen.view.compact', false);
|
||||||
pref('zen.view.compact.hide-toolbar', false);
|
pref('zen.view.compact.hide-toolbar', false);
|
||||||
pref('zen.view.sidebar-expanded', false);
|
pref('zen.view.sidebar-expanded', false);
|
||||||
pref('zen.view.sidebar-expanded.show-button', true);
|
pref('zen.view.sidebar-expanded.show-button', true);
|
||||||
|
pref('zen.view.sidebar-expanded.max-width', 400);
|
||||||
|
|
||||||
// Pref to enable the new profiles (TODO: Check this out!)
|
// Pref to enable the new profiles (TODO: Check this out!)
|
||||||
//pref("browser.profiles.enabled", true);
|
//pref("browser.profiles.enabled", true);
|
||||||
@@ -72,7 +77,7 @@ pref('zen.view.sidebar-expanded.show-button', true);
|
|||||||
// Zen Sidebar
|
// Zen Sidebar
|
||||||
pref('zen.sidebar.data', "{\"data\":\n {\"p1\":{\n \"url\":\"https://www.wikipedia.org/\"\n },\n\"p2\":{\n \"url\":\"https://m.twitter.com/\",\n\"ua\": true\n },\n\"p3\": {\n \"url\": \"https://www.youtube.com/\",\n\"ua\": true\n},\n\"p4\": {\n \"url\": \"https://translate.google.com/\",\n\"ua\": true\n},\n\"p5\": {\n \"url\": \"https://todoist.com/\",\n\"ua\": true\n}},\n\"index\":[\"p1\",\"p2\",\"p3\",\"p4\",\"p5\"]}");
|
pref('zen.sidebar.data', "{\"data\":\n {\"p1\":{\n \"url\":\"https://www.wikipedia.org/\"\n },\n\"p2\":{\n \"url\":\"https://m.twitter.com/\",\n\"ua\": true\n },\n\"p3\": {\n \"url\": \"https://www.youtube.com/\",\n\"ua\": true\n},\n\"p4\": {\n \"url\": \"https://translate.google.com/\",\n\"ua\": true\n},\n\"p5\": {\n \"url\": \"https://todoist.com/\",\n\"ua\": true\n}},\n\"index\":[\"p1\",\"p2\",\"p3\",\"p4\",\"p5\"]}");
|
||||||
pref('zen.sidebar.enabled', true);
|
pref('zen.sidebar.enabled', true);
|
||||||
pref('zen.sidebar.floating', true);
|
pref('zen.sidebar.close-on-blur', true);
|
||||||
|
|
||||||
// Zen Split View
|
// Zen Split View
|
||||||
pref('zen.splitView.working', false);
|
pref('zen.splitView.working', false);
|
||||||
@@ -84,14 +89,29 @@ pref('zen.workspaces.enabled', true);
|
|||||||
pref('zen.watermark.enabled', true);
|
pref('zen.watermark.enabled', true);
|
||||||
|
|
||||||
// Smooth scrolling
|
// Smooth scrolling
|
||||||
user_pref('apz.overscroll.enabled', true); // not DEFAULT on Linux
|
pref('apz.overscroll.enabled', true); // not DEFAULT on Linux
|
||||||
user_pref('general.smoothScroll', true); // DEFAULT
|
pref('general.smoothScroll', true); // DEFAULT
|
||||||
|
|
||||||
// Privacy
|
// Privacy
|
||||||
pref('dom.private-attribution.submission.enabled', false);
|
pref('dom.private-attribution.submission.enabled', false);
|
||||||
|
|
||||||
// From Librewolf
|
|
||||||
pref('media.eme.enabled', true);
|
pref('media.eme.enabled', true);
|
||||||
pref('webgl.disabled', false);
|
pref('webgl.disabled', false);
|
||||||
|
|
||||||
|
pref("app.update.url.manual", "https://www.zen-browser.app/download");
|
||||||
|
pref("app.update.url.details", "hhttps://www.zen-browser.app/download");
|
||||||
|
pref("app.releaseNotesURL", "https://www.zen-browser.app/release-notes");
|
||||||
|
pref("app.releaseNotesURL.aboutDialog", "https://www.zen-browser.app/release-notes");
|
||||||
|
|
||||||
|
// Enable importers for other browsers
|
||||||
|
pref('browser.migrate.vivaldi.enabled', true);
|
||||||
|
pref('browser.migrate.opera-gx.enabled', true);
|
||||||
|
pref('browser.migrate.opera.enabled', true);
|
||||||
|
|
||||||
|
// DNS
|
||||||
|
// pref('network.proxy.type', 0);
|
||||||
|
// pref('network.trr.mode', 5);
|
||||||
|
|
||||||
|
pref('xpinstall.signatures.required', false);
|
||||||
|
|
||||||
#include better-fox.js
|
#include better-fox.js
|
@@ -1,544 +0,0 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
var gZenBrowserManagerSidebar = {
|
|
||||||
_sidebarElement: null,
|
|
||||||
_currentPanel: null,
|
|
||||||
_lastOpenedPanel: null,
|
|
||||||
_hasChangedConfig: true,
|
|
||||||
_splitterElement: null,
|
|
||||||
_hSplitterElement: null,
|
|
||||||
_hasRegisteredPinnedClickOutside: false,
|
|
||||||
_isDragging: false,
|
|
||||||
contextTab: null,
|
|
||||||
|
|
||||||
DEFAULT_MOBILE_USER_AGENT: "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36 Edg/114.0.1823.79",
|
|
||||||
MAX_SIDEBAR_PANELS: 8, // +1 for the add panel button
|
|
||||||
MAX_RUNS: 3,
|
|
||||||
|
|
||||||
init() {
|
|
||||||
this.update();
|
|
||||||
this.close(); // avoid caching
|
|
||||||
this.listenForPrefChanges();
|
|
||||||
this.insertIntoContextMenu();
|
|
||||||
},
|
|
||||||
|
|
||||||
get sidebarData() {
|
|
||||||
let services = Services.prefs.getStringPref("zen.sidebar.data");
|
|
||||||
if (services === "") {
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
return JSON.parse(services);
|
|
||||||
},
|
|
||||||
|
|
||||||
listenForPrefChanges() {
|
|
||||||
Services.prefs.addObserver("zen.sidebar.data", this.handleEvent.bind(this));
|
|
||||||
Services.prefs.addObserver("zen.sidebar.enabled", this.handleEvent.bind(this));
|
|
||||||
Services.prefs.addObserver("zen.sidebar.floating", this.handleEvent.bind(this));
|
|
||||||
|
|
||||||
let sidebar = document.getElementById("zen-sidebar-web-panel");
|
|
||||||
this.splitterElement.addEventListener("mousedown", (function(event) {
|
|
||||||
let computedStyle = window.getComputedStyle(sidebar);
|
|
||||||
let maxWidth = parseInt(computedStyle.getPropertyValue("max-width").replace("px", ""));
|
|
||||||
let minWidth = parseInt(computedStyle.getPropertyValue("min-width").replace("px", ""));
|
|
||||||
|
|
||||||
if (!this._isDragging) { // Prevent multiple resizes
|
|
||||||
this._isDragging = true;
|
|
||||||
let sidebarWidth = sidebar.getBoundingClientRect().width;
|
|
||||||
let startX = event.clientX;
|
|
||||||
let startWidth = sidebarWidth;
|
|
||||||
let mouseMove = (function(e) {
|
|
||||||
let newWidth = startWidth + e.clientX - startX;
|
|
||||||
if (newWidth <= minWidth+10) {
|
|
||||||
newWidth = minWidth+1;
|
|
||||||
} else if (newWidth >= maxWidth-10) {
|
|
||||||
newWidth = maxWidth-1;
|
|
||||||
}
|
|
||||||
sidebar.style.width = `${newWidth}px`;
|
|
||||||
});
|
|
||||||
let mouseUp = (function() {
|
|
||||||
this.handleEvent();
|
|
||||||
this._isDragging = false;
|
|
||||||
document.removeEventListener("mousemove", mouseMove);
|
|
||||||
document.removeEventListener("mouseup", mouseUp);
|
|
||||||
}).bind(this);
|
|
||||||
document.addEventListener("mousemove", mouseMove);
|
|
||||||
document.addEventListener("mouseup", mouseUp);
|
|
||||||
}
|
|
||||||
}).bind(this));
|
|
||||||
|
|
||||||
this.hSplitterElement.addEventListener("mousedown", (function(event) {
|
|
||||||
let computedStyle = window.getComputedStyle(sidebar);
|
|
||||||
const parent = sidebar.parentElement;
|
|
||||||
// relative to avoid the top margin
|
|
||||||
// 20px is the padding
|
|
||||||
let parentRelativeHeight = parent.getBoundingClientRect().height - parent.getBoundingClientRect().top + 20;
|
|
||||||
let minHeight = parseInt(computedStyle.getPropertyValue("min-height").replace("px", ""));
|
|
||||||
if (!this._isDragging) { // Prevent multiple resizes
|
|
||||||
this._isDragging = true;
|
|
||||||
let sidebarHeight = sidebar.getBoundingClientRect().height;
|
|
||||||
let startY = event.clientY;
|
|
||||||
let startHeight = sidebarHeight;
|
|
||||||
let mouseMove = (function(e) {
|
|
||||||
let newHeight = startHeight + e.clientY - startY;
|
|
||||||
if (newHeight <= minHeight+10) {
|
|
||||||
newHeight = minHeight+1;
|
|
||||||
} else if (newHeight >= parentRelativeHeight) { // 10px is the padding
|
|
||||||
newHeight = parentRelativeHeight;
|
|
||||||
}
|
|
||||||
sidebar.style.height = `${newHeight}px`;
|
|
||||||
});
|
|
||||||
let mouseUp = (function() {
|
|
||||||
this.handleEvent();
|
|
||||||
this._isDragging = false;
|
|
||||||
document.removeEventListener("mousemove", mouseMove);
|
|
||||||
document.removeEventListener("mouseup", mouseUp);
|
|
||||||
}).bind(this);
|
|
||||||
document.addEventListener("mousemove", mouseMove);
|
|
||||||
document.addEventListener("mouseup", mouseUp);
|
|
||||||
}
|
|
||||||
}).bind(this));
|
|
||||||
|
|
||||||
this.handleEvent();
|
|
||||||
},
|
|
||||||
|
|
||||||
handleEvent() {
|
|
||||||
this._hasChangedConfig = true;
|
|
||||||
this.update();
|
|
||||||
this._hasChangedConfig = false;
|
|
||||||
|
|
||||||
// https://stackoverflow.com/questions/11565471/removing-event-listener-which-was-added-with-bind
|
|
||||||
var clickOutsideHandler = this._handleClickOutside.bind(this);
|
|
||||||
if (Services.prefs.getBoolPref("zen.sidebar.floating") && !this._hasRegisteredPinnedClickOutside) {
|
|
||||||
document.addEventListener("mouseup", clickOutsideHandler);
|
|
||||||
this._hasRegisteredPinnedClickOutside = true;
|
|
||||||
} else if (!Services.prefs.getBoolPref("zen.sidebar.floating") && this._hasRegisteredPinnedClickOutside) {
|
|
||||||
document.removeEventListener("mouseup", clickOutsideHandler);
|
|
||||||
this._hasRegisteredPinnedClickOutside = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
const button = document.getElementById("zen-sidepanel-button");
|
|
||||||
if (Services.prefs.getBoolPref("zen.sidebar.enabled")) {
|
|
||||||
button.removeAttribute("hidden");
|
|
||||||
} else {
|
|
||||||
button.setAttribute("hidden", "true");
|
|
||||||
this._closeSidebarPanel();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_handleClickOutside(event) {
|
|
||||||
let sidebar = document.getElementById("zen-sidebar-web-panel");
|
|
||||||
if (!sidebar.hasAttribute("pinned") || !this._currentPanel || this._isDragging) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
let target = event.target;
|
|
||||||
const closestSelector = [
|
|
||||||
"#zen-sidebar-web-panel",
|
|
||||||
"#zen-sidebar-panels-wrapper",
|
|
||||||
"#zenWebPanelContextMenu",
|
|
||||||
"#zen-sidebar-web-panel-splitter",
|
|
||||||
"#contentAreaContextMenu"
|
|
||||||
].join(", ");
|
|
||||||
if (target.closest(closestSelector)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this.close();
|
|
||||||
},
|
|
||||||
|
|
||||||
toggle() {
|
|
||||||
if (!this._currentPanel) {
|
|
||||||
this._currentPanel = this._lastOpenedPanel;
|
|
||||||
}
|
|
||||||
if (document.getElementById("zen-sidebar-web-panel").hasAttribute("hidden")) {
|
|
||||||
this.open();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this.close();
|
|
||||||
},
|
|
||||||
|
|
||||||
open() {
|
|
||||||
let sidebar = document.getElementById("zen-sidebar-web-panel");
|
|
||||||
sidebar.removeAttribute("hidden");
|
|
||||||
this.update();
|
|
||||||
},
|
|
||||||
|
|
||||||
update() {
|
|
||||||
this._updateWebPanels();
|
|
||||||
this._updateSidebarButton();
|
|
||||||
this._updateWebPanel();
|
|
||||||
this._updateButtons();
|
|
||||||
},
|
|
||||||
|
|
||||||
_updateSidebarButton() {
|
|
||||||
let button = document.getElementById("zen-sidepanel-button");
|
|
||||||
if (!document.getElementById("zen-sidebar-web-panel").hasAttribute("hidden")) {
|
|
||||||
button.setAttribute("open", "true");
|
|
||||||
} else {
|
|
||||||
button.removeAttribute("open");
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_updateWebPanels() {
|
|
||||||
if (Services.prefs.getBoolPref("zen.sidebar.enabled")) {
|
|
||||||
this.sidebarElement.removeAttribute("hidden");
|
|
||||||
} else {
|
|
||||||
this.sidebarElement.setAttribute("hidden", "true");
|
|
||||||
this._closeSidebarPanel();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let data = this.sidebarData;
|
|
||||||
if (!data.data || !data.index) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this.sidebarElement.innerHTML = "";
|
|
||||||
for (let site of data.index) {
|
|
||||||
let panel = data.data[site];
|
|
||||||
if (!panel || !panel.url) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
let button = document.createXULElement("toolbarbutton");
|
|
||||||
button.classList.add("zen-sidebar-panel-button", "toolbarbutton-1", "chromeclass-toolbar-additional");
|
|
||||||
button.setAttribute("flex", "1");
|
|
||||||
button.setAttribute("zen-sidebar-id", site);
|
|
||||||
button.setAttribute("context", "zenWebPanelContextMenu");
|
|
||||||
this._getWebPanelIcon(panel.url, button);
|
|
||||||
button.addEventListener("click", this._handleClick.bind(this));
|
|
||||||
this.sidebarElement.appendChild(button);
|
|
||||||
}
|
|
||||||
const addButton = document.getElementById("zen-sidebar-add-panel-button");
|
|
||||||
if (data.index.length < this.MAX_SIDEBAR_PANELS) {
|
|
||||||
addButton.removeAttribute("hidden");
|
|
||||||
} else {
|
|
||||||
addButton.setAttribute("hidden", "true");
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
async _openAddPanelDialog() {
|
|
||||||
let dialogURL = "chrome://browser/content/places/zenNewWebPanel.xhtml";
|
|
||||||
let features = "centerscreen,chrome,modal,resizable=no";
|
|
||||||
let aParentWindow = Services.wm.getMostRecentWindow("navigator:browser");
|
|
||||||
|
|
||||||
if (aParentWindow?.gDialogBox) {
|
|
||||||
await aParentWindow.gDialogBox.open(dialogURL, {});
|
|
||||||
} else {
|
|
||||||
aParentWindow.openDialog(dialogURL, "", features, {});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_setPinnedToElements() {
|
|
||||||
let sidebar = document.getElementById("zen-sidebar-web-panel");
|
|
||||||
sidebar.setAttribute("pinned", "true");
|
|
||||||
document.getElementById("zen-sidebar-web-panel-pinned").setAttribute("pinned", "true");
|
|
||||||
},
|
|
||||||
|
|
||||||
_removePinnedFromElements() {
|
|
||||||
let sidebar = document.getElementById("zen-sidebar-web-panel");
|
|
||||||
sidebar.removeAttribute("pinned");
|
|
||||||
document.getElementById("zen-sidebar-web-panel-pinned").removeAttribute("pinned");
|
|
||||||
},
|
|
||||||
|
|
||||||
_closeSidebarPanel() {
|
|
||||||
let sidebar = document.getElementById("zen-sidebar-web-panel");
|
|
||||||
sidebar.setAttribute("hidden", "true");
|
|
||||||
this._lastOpenedPanel = this._currentPanel;
|
|
||||||
this._currentPanel = null;
|
|
||||||
},
|
|
||||||
|
|
||||||
_handleClick(event) {
|
|
||||||
let target = event.target;
|
|
||||||
let panelId = target.getAttribute("zen-sidebar-id");
|
|
||||||
if (this._currentPanel === panelId) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this._currentPanel = panelId;
|
|
||||||
this._updateWebPanel();
|
|
||||||
},
|
|
||||||
|
|
||||||
_createNewPanel(url) {
|
|
||||||
let data = this.sidebarData;
|
|
||||||
let newName = "p" + new Date().getTime();
|
|
||||||
data.index.push(newName);
|
|
||||||
data.data[newName] = {
|
|
||||||
url: url,
|
|
||||||
ua: false,
|
|
||||||
};
|
|
||||||
Services.prefs.setStringPref("zen.sidebar.data", JSON.stringify(data));
|
|
||||||
this._currentPanel = newName;
|
|
||||||
this.open();
|
|
||||||
},
|
|
||||||
|
|
||||||
_updateButtons() {
|
|
||||||
for (let button of this.sidebarElement.querySelectorAll(".zen-sidebar-panel-button")) {
|
|
||||||
if (button.getAttribute("zen-sidebar-id") === this._currentPanel) {
|
|
||||||
button.setAttribute("selected", "true");
|
|
||||||
} else {
|
|
||||||
button.removeAttribute("selected");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_hideAllWebPanels() {
|
|
||||||
let sidebar = document.getElementById("zen-sidebar-web-panel");
|
|
||||||
for (let browser of sidebar.querySelectorAll("browser[zen-sidebar-id]")) {
|
|
||||||
browser.setAttribute("hidden", "true");
|
|
||||||
browser.docShellIsActive = false;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
get introductionPanel() {
|
|
||||||
return document.getElementById("zen-sidebar-introduction-panel");
|
|
||||||
},
|
|
||||||
|
|
||||||
_updateWebPanel() {
|
|
||||||
this._updateButtons();
|
|
||||||
let sidebar = document.getElementById("zen-sidebar-web-panel");
|
|
||||||
this._hideAllWebPanels();
|
|
||||||
if (!this._currentPanel) {
|
|
||||||
this.introductionPanel.removeAttribute("hidden");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this.introductionPanel.setAttribute("hidden", "true");
|
|
||||||
let existantWebview = this._getCurrentBrowser();
|
|
||||||
if (existantWebview) {
|
|
||||||
existantWebview.docShellIsActive = true;
|
|
||||||
existantWebview.removeAttribute("hidden");
|
|
||||||
document.getElementById("zen-sidebar-web-panel-title").textContent = existantWebview.contentTitle;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
let data = this._getWebPanelData(this._currentPanel);
|
|
||||||
let browser = this._createWebPanelBrowser(data);
|
|
||||||
let browserContainers = document.getElementById("zen-sidebar-web-panel-browser-containers");
|
|
||||||
browserContainers.appendChild(browser);
|
|
||||||
if (data.ua) {
|
|
||||||
browser.browsingContext.customUserAgent = this.DEFAULT_MOBILE_USER_AGENT;
|
|
||||||
}
|
|
||||||
browser.docShellIsActive = true;
|
|
||||||
},
|
|
||||||
|
|
||||||
_getWebPanelData(id) {
|
|
||||||
let data = this.sidebarData;
|
|
||||||
let panel = data.data[id];
|
|
||||||
if (!panel || !panel.url) {
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
id: id,
|
|
||||||
...panel,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
|
|
||||||
_createWebPanelBrowser(data) {
|
|
||||||
const titleContainer = document.getElementById("zen-sidebar-web-panel-title");
|
|
||||||
titleContainer.textContent = "Loading...";
|
|
||||||
let browser = gBrowser.createBrowser({});
|
|
||||||
browser.setAttribute("disablefullscreen", "true");
|
|
||||||
browser.setAttribute("src", data.url);
|
|
||||||
browser.setAttribute("zen-sidebar-id", data.id);
|
|
||||||
browser.setAttribute("disableglobalhistory", "true");
|
|
||||||
browser.setAttribute("autoscroll", "false");
|
|
||||||
browser.setAttribute("autocompletepopup", "PopupAutoComplete");
|
|
||||||
browser.setAttribute("contextmenu", "contentAreaContextMenu");
|
|
||||||
browser.setAttribute("disablesecurity", "true");
|
|
||||||
browser.addEventListener("pagetitlechanged", (function(event) {
|
|
||||||
let browser = event.target;
|
|
||||||
let title = browser.contentTitle;
|
|
||||||
if (!title) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
let id = browser.getAttribute("zen-sidebar-id");
|
|
||||||
if (id === this._currentPanel) {
|
|
||||||
titleContainer.textContent = title;
|
|
||||||
}
|
|
||||||
}).bind(this));
|
|
||||||
return browser;
|
|
||||||
},
|
|
||||||
|
|
||||||
_getWebPanelIcon(url, element) {
|
|
||||||
let { preferredURI } = Services.uriFixup.getFixupURIInfo(url);
|
|
||||||
element.setAttribute("image", `page-icon:${preferredURI.spec}`);
|
|
||||||
fetch(`https://s2.googleusercontent.com/s2/favicons?domain_url=${preferredURI.spec}`).then(async response => {
|
|
||||||
if (response.ok) {
|
|
||||||
let blob = await response.blob();
|
|
||||||
let reader = new FileReader();
|
|
||||||
reader.onload = function() {
|
|
||||||
element.setAttribute("image", reader.result);
|
|
||||||
};
|
|
||||||
reader.readAsDataURL(blob);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
_getBrowserById(id) {
|
|
||||||
let sidebar = document.getElementById("zen-sidebar-web-panel");
|
|
||||||
return sidebar.querySelector(`browser[zen-sidebar-id="${id}"]`);
|
|
||||||
},
|
|
||||||
|
|
||||||
_getCurrentBrowser() {
|
|
||||||
return this._getBrowserById(this._currentPanel);
|
|
||||||
},
|
|
||||||
|
|
||||||
reload() {
|
|
||||||
let browser = this._getCurrentBrowser();
|
|
||||||
if (browser) {
|
|
||||||
browser.reload();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
forward() {
|
|
||||||
let browser = this._getCurrentBrowser();
|
|
||||||
if (browser) {
|
|
||||||
browser.goForward();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
back() {
|
|
||||||
let browser = this._getCurrentBrowser();
|
|
||||||
if (browser) {
|
|
||||||
browser.goBack();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
home() {
|
|
||||||
let browser = this._getCurrentBrowser();
|
|
||||||
if (browser) {
|
|
||||||
browser.gotoIndex();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
close() {
|
|
||||||
this._hideAllWebPanels();
|
|
||||||
this._closeSidebarPanel();
|
|
||||||
this._updateSidebarButton();
|
|
||||||
},
|
|
||||||
|
|
||||||
togglePinned(elem) {
|
|
||||||
let sidebar = document.getElementById("zen-sidebar-web-panel");
|
|
||||||
if (sidebar.hasAttribute("pinned")) {
|
|
||||||
this._removePinnedFromElements();
|
|
||||||
} else {
|
|
||||||
this._setPinnedToElements();
|
|
||||||
}
|
|
||||||
Services.prefs.setBoolPref("zen.sidebar.floating", sidebar.hasAttribute("pinned"));
|
|
||||||
this.update();
|
|
||||||
},
|
|
||||||
|
|
||||||
get sidebarElement() {
|
|
||||||
if (!this._sidebarElement) {
|
|
||||||
this._sidebarElement = document.getElementById("zen-sidebar-panels-sites");
|
|
||||||
}
|
|
||||||
return this._sidebarElement;
|
|
||||||
},
|
|
||||||
|
|
||||||
get splitterElement() {
|
|
||||||
if (!this._splitterElement) {
|
|
||||||
this._splitterElement = document.getElementById("zen-sidebar-web-panel-splitter");
|
|
||||||
}
|
|
||||||
return this._splitterElement;
|
|
||||||
},
|
|
||||||
|
|
||||||
get hSplitterElement() {
|
|
||||||
if (!this._hSplitterElement) {
|
|
||||||
this._hSplitterElement = document.getElementById("zen-sidebar-web-panel-hsplitter");
|
|
||||||
}
|
|
||||||
return this._hSplitterElement;
|
|
||||||
},
|
|
||||||
|
|
||||||
// Context menu
|
|
||||||
|
|
||||||
updateContextMenu(aPopupMenu) {
|
|
||||||
let panel =
|
|
||||||
aPopupMenu.triggerNode &&
|
|
||||||
(aPopupMenu.triggerNode || aPopupMenu.triggerNode.closest("toolbarbutton[zen-sidebar-id]"));
|
|
||||||
if (!panel) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
let id = panel.getAttribute("zen-sidebar-id");
|
|
||||||
this.contextTab = id;
|
|
||||||
let data = this._getWebPanelData(id);
|
|
||||||
let browser = this._getBrowserById(id);
|
|
||||||
let isMuted = browser && browser.audioMuted;
|
|
||||||
let mutedContextItem = document.getElementById("context_zenToggleMuteWebPanel");
|
|
||||||
document.l10n.setAttributes(mutedContextItem,
|
|
||||||
!isMuted ? "zen-web-side-panel-context-mute-panel" : "zen-web-side-panel-context-unmute-panel");
|
|
||||||
if (!isMuted) {
|
|
||||||
mutedContextItem.setAttribute("muted", "true");
|
|
||||||
} else {
|
|
||||||
mutedContextItem.removeAttribute("muted");
|
|
||||||
}
|
|
||||||
document.l10n.setAttributes(document.getElementById("context_zenToogleUAWebPanel"),
|
|
||||||
data.ua ? "zen-web-side-panel-context-disable-ua" : "zen-web-side-panel-context-enable-ua");
|
|
||||||
if (!browser) {
|
|
||||||
document.getElementById("context_zenUnloadWebPanel").setAttribute("disabled", "true");
|
|
||||||
} else {
|
|
||||||
document.getElementById("context_zenUnloadWebPanel").removeAttribute("disabled");
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
contextOpenNewTab() {
|
|
||||||
let browser = this._getBrowserById(this.contextTab);
|
|
||||||
let data = this.sidebarData;
|
|
||||||
let panel = data.data[this.contextTab];
|
|
||||||
let url = (browser == null) ? panel.url : browser.currentURI.spec;
|
|
||||||
gZenUIManager.openAndChangeToTab(url);
|
|
||||||
this.close();
|
|
||||||
},
|
|
||||||
|
|
||||||
contextToggleMuteAudio() {
|
|
||||||
let browser = this._getBrowserById(this.contextTab);
|
|
||||||
if (browser.audioMuted) {
|
|
||||||
browser.unmute();
|
|
||||||
} else {
|
|
||||||
browser.mute();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
contextToggleUserAgent() {
|
|
||||||
let browser = this._getBrowserById(this.contextTab);
|
|
||||||
browser.browsingContext.customUserAgent = browser.browsingContext.customUserAgent ? null : this.DEFAULT_MOBILE_USER_AGENT;
|
|
||||||
let data = this.sidebarData;
|
|
||||||
data.data[this.contextTab].ua = !data.data[this.contextTab].ua;
|
|
||||||
Services.prefs.setStringPref("zen.sidebar.data", JSON.stringify(data));
|
|
||||||
browser.reload();
|
|
||||||
},
|
|
||||||
|
|
||||||
contextDelete() {
|
|
||||||
let data = this.sidebarData;
|
|
||||||
delete data.data[this.contextTab];
|
|
||||||
data.index = data.index.filter(id => id !== this.contextTab);
|
|
||||||
let browser = this._getBrowserById(this.contextTab);
|
|
||||||
if (browser) {
|
|
||||||
browser.remove();
|
|
||||||
}
|
|
||||||
this._closeSidebarPanel();
|
|
||||||
this.close();
|
|
||||||
this._lastOpenedPanel = null;
|
|
||||||
Services.prefs.setStringPref("zen.sidebar.data", JSON.stringify(data));
|
|
||||||
},
|
|
||||||
|
|
||||||
contextUnload() {
|
|
||||||
let browser = this._getBrowserById(this.contextTab);
|
|
||||||
browser.remove();
|
|
||||||
this._closeSidebarPanel();
|
|
||||||
this.close();
|
|
||||||
this._lastOpenedPanel = null;
|
|
||||||
},
|
|
||||||
|
|
||||||
insertIntoContextMenu() {
|
|
||||||
const sibling = document.getElementById("context-stripOnShareLink");
|
|
||||||
const menuitem = document.createXULElement("menuitem");
|
|
||||||
menuitem.setAttribute("id", "context-zenAddToWebPanel");
|
|
||||||
menuitem.setAttribute("hidden", "true");
|
|
||||||
menuitem.setAttribute("oncommand", "gZenBrowserManagerSidebar.addPanelFromContextMenu();");
|
|
||||||
menuitem.setAttribute("data-l10n-id", "zen-web-side-panel-context-add-to-panel");
|
|
||||||
sibling.insertAdjacentElement("afterend", menuitem);
|
|
||||||
},
|
|
||||||
|
|
||||||
addPanelFromContextMenu() {
|
|
||||||
const url = gContextMenu.linkURL || gContextMenu.target.ownerDocument.location.href;
|
|
||||||
this._createNewPanel(url);
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
gZenBrowserManagerSidebar.init();
|
|
@@ -26,9 +26,26 @@ var gZenUIManager = {
|
|||||||
var gZenVerticalTabsManager = {
|
var gZenVerticalTabsManager = {
|
||||||
init() {
|
init() {
|
||||||
//Services.prefs.addObserver('zen.view.compact', this._updateEvent.bind(this));
|
//Services.prefs.addObserver('zen.view.compact', this._updateEvent.bind(this));
|
||||||
//Services.prefs.addObserver('zen.view.sidebar-expanded', this._updateEvent.bind(this));
|
Services.prefs.addObserver('zen.view.sidebar-expanded', this._updateEvent.bind(this));
|
||||||
|
Services.prefs.addObserver('zen.view.sidebar-expanded.max-width', this._updateEvent.bind(this));
|
||||||
|
this._updateMaxWidth();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_updateEvent() {
|
||||||
|
this._updateMaxWidth();
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateMaxWidth() {
|
||||||
|
let isCompactMode = Services.prefs.getBoolPref('zen.view.compact');
|
||||||
|
let expanded = this.expanded;
|
||||||
|
let maxWidth = Services.prefs.getIntPref('zen.view.sidebar-expanded.max-width');
|
||||||
|
let toolbox = document.getElementById('navigator-toolbox');
|
||||||
|
if (expanded && !isCompactMode) {
|
||||||
|
toolbox.style.maxWidth = `${maxWidth}px`;
|
||||||
|
} else {
|
||||||
|
toolbox.style.removeProperty('maxWidth');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
get expanded() {
|
get expanded() {
|
||||||
return Services.prefs.getBoolPref('zen.view.sidebar-expanded');
|
return Services.prefs.getBoolPref('zen.view.sidebar-expanded');
|
||||||
@@ -56,9 +73,5 @@ var gZenVerticalTabsManager = {
|
|||||||
toggleExpand() {
|
toggleExpand() {
|
||||||
let expanded = !this.expanded;
|
let expanded = !this.expanded;
|
||||||
Services.prefs.setBoolPref('zen.view.sidebar-expanded', expanded);
|
Services.prefs.setBoolPref('zen.view.sidebar-expanded', expanded);
|
||||||
|
|
||||||
let toolbox = document.getElementById('navigator-toolbox');
|
|
||||||
toolbox.removeAttribute('width');
|
|
||||||
toolbox.style.removeProperty('width');
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@@ -1,303 +0,0 @@
|
|||||||
|
|
||||||
var gZenViewSplitter = {
|
|
||||||
/**
|
|
||||||
* [
|
|
||||||
* {
|
|
||||||
* tabs: [
|
|
||||||
* tab1,
|
|
||||||
* tab2,
|
|
||||||
* tab3,
|
|
||||||
* ],
|
|
||||||
* gridType: "vsep" | "hsep" | "grid",
|
|
||||||
* }
|
|
||||||
* ]
|
|
||||||
*/
|
|
||||||
_data: [],
|
|
||||||
currentView: -1,
|
|
||||||
|
|
||||||
init() {
|
|
||||||
Services.prefs.setBoolPref("zen.splitView.working", false);
|
|
||||||
window.addEventListener("TabClose", this);
|
|
||||||
this.insertIntoContextMenu();
|
|
||||||
console.log("ZenViewSplitter initialized");
|
|
||||||
},
|
|
||||||
|
|
||||||
handleEvent(event) {
|
|
||||||
switch (event.type) {
|
|
||||||
case "TabClose":
|
|
||||||
this.onTabClose(event);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
insertIntoContextMenu() {
|
|
||||||
const sibling = document.getElementById("context-stripOnShareLink");
|
|
||||||
const menuitem = document.createXULElement("menuitem");
|
|
||||||
menuitem.setAttribute("id", "context-zenSplitLink");
|
|
||||||
menuitem.setAttribute("hidden", "true");
|
|
||||||
menuitem.setAttribute("oncommand", "gZenViewSplitter.contextSplitLink();");
|
|
||||||
menuitem.setAttribute("data-l10n-id", "zen-split-link");
|
|
||||||
const separator = document.createXULElement("menuseparator");
|
|
||||||
sibling.insertAdjacentElement("afterend", menuitem);
|
|
||||||
sibling.insertAdjacentElement("afterend", separator);
|
|
||||||
},
|
|
||||||
|
|
||||||
get tabBrowserPanel() {
|
|
||||||
if (!this._tabBrowserPanel) {
|
|
||||||
this._tabBrowserPanel = document.getElementById("tabbrowser-tabpanels");
|
|
||||||
}
|
|
||||||
return this._tabBrowserPanel;
|
|
||||||
},
|
|
||||||
|
|
||||||
onTabClose(event) {
|
|
||||||
const tab = event.target;
|
|
||||||
let index = this._data.findIndex((group) => group.tabs.includes(tab));
|
|
||||||
if (index < 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
let dataTab = this._data[index].tabs;
|
|
||||||
dataTab.splice(dataTab.indexOf(tab), 1);
|
|
||||||
tab._zenSplitted = false;
|
|
||||||
tab.linkedBrowser.zenModeActive = false;
|
|
||||||
let container = tab.linkedBrowser.closest(".browserSidebarContainer");
|
|
||||||
container.removeAttribute("zen-split");
|
|
||||||
if (!event.forUnsplit) {
|
|
||||||
tab.linkedBrowser.docShellIsActive = false;
|
|
||||||
container.style.display = "none";
|
|
||||||
} else {
|
|
||||||
container.style.gridArea = "1 / 1";
|
|
||||||
}
|
|
||||||
if (dataTab.length < 2) {
|
|
||||||
this._data.splice(index, 1);
|
|
||||||
if (this.currentView == index) {
|
|
||||||
console.assert(dataTab.length == 1, "Data tab length is not 1");
|
|
||||||
this.currentView = -1;
|
|
||||||
this.tabBrowserPanel.removeAttribute("zen-split-view");
|
|
||||||
this.tabBrowserPanel.style.gridTemplateAreas = "";
|
|
||||||
this.tabBrowserPanel.style.gridGap = "0px";
|
|
||||||
Services.prefs.setBoolPref("zen.splitView.working", false);
|
|
||||||
for (const tab of dataTab) {
|
|
||||||
let container = tab.linkedBrowser.closest(".browserSidebarContainer");
|
|
||||||
container.removeAttribute("zen-split");
|
|
||||||
container.style.gridArea = "1 / 1";
|
|
||||||
tab._zenSplitted = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
let lastTab = dataTab[dataTab.length - 1];
|
|
||||||
this._showSplitView(lastTab);
|
|
||||||
},
|
|
||||||
|
|
||||||
contextSplitLink() {
|
|
||||||
const url = gContextMenu.linkURL || gContextMenu.target.ownerDocument.location.href;
|
|
||||||
const tab = gBrowser.selectedTab;
|
|
||||||
const newTab = gZenUIManager.openAndChangeToTab(url);
|
|
||||||
this.splitTabs([tab, newTab]);
|
|
||||||
},
|
|
||||||
|
|
||||||
onLocationChange(browser) {
|
|
||||||
let tab = gBrowser.getTabForBrowser(browser);
|
|
||||||
this.updateSplitViewButton(!(tab && tab._zenSplitted));
|
|
||||||
if (!tab) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._showSplitView(tab);
|
|
||||||
},
|
|
||||||
|
|
||||||
splitTabs(tabs) {
|
|
||||||
if (tabs.length < 2) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// Check if any tab is already split
|
|
||||||
for (const tab of tabs) {
|
|
||||||
if (tab._zenSplitted) {
|
|
||||||
let index = this._data.findIndex((group) => group.tabs.includes(tab));
|
|
||||||
if (index < 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this._showSplitView(tab);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this._data.push({
|
|
||||||
tabs,
|
|
||||||
gridType: "grid",
|
|
||||||
});
|
|
||||||
gBrowser.selectedTab = tabs[0];
|
|
||||||
this._showSplitView(tabs[0]);
|
|
||||||
},
|
|
||||||
|
|
||||||
_showSplitView(tab) {
|
|
||||||
const splitData = this._data.find((group) => group.tabs.includes(tab));
|
|
||||||
function modifyDecks(tabs, add) {
|
|
||||||
for (const tab of tabs) {
|
|
||||||
tab.linkedBrowser.zenModeActive = add;
|
|
||||||
tab.linkedBrowser.docShellIsActive = add;
|
|
||||||
let browser = tab.linkedBrowser.closest(".browserSidebarContainer");
|
|
||||||
if (add) {
|
|
||||||
browser.setAttribute("zen-split", "true");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
browser.removeAttribute("zen-split");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const handleClick = (tab) => {
|
|
||||||
return ((event) => {
|
|
||||||
gBrowser.selectedTab = tab;
|
|
||||||
})
|
|
||||||
};
|
|
||||||
if (!splitData || (this.currentView >= 0 && !this._data[this.currentView].tabs.includes(tab))) {
|
|
||||||
this.updateSplitViewButton(true);
|
|
||||||
if (this.currentView < 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
for (const tab of this._data[this.currentView].tabs) {
|
|
||||||
//tab._zenSplitted = false;
|
|
||||||
let container = tab.linkedBrowser.closest(".browserSidebarContainer");
|
|
||||||
container.removeAttribute("zen-split-active");
|
|
||||||
container.classList.remove("deck-selected");
|
|
||||||
console.assert(container, "No container found for tab");
|
|
||||||
container.removeEventListener("click", handleClick(tab));
|
|
||||||
container.style.gridArea = "";
|
|
||||||
}
|
|
||||||
this.tabBrowserPanel.removeAttribute("zen-split-view");
|
|
||||||
this.tabBrowserPanel.style.gridTemplateAreas = "";
|
|
||||||
Services.prefs.setBoolPref("zen.splitView.working", false);
|
|
||||||
modifyDecks(this._data[this.currentView].tabs, false);
|
|
||||||
this.currentView = -1;
|
|
||||||
if (!splitData) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.tabBrowserPanel.setAttribute("zen-split-view", "true");
|
|
||||||
Services.prefs.setBoolPref("zen.splitView.working", true);
|
|
||||||
this.currentView = this._data.indexOf(splitData);
|
|
||||||
let gridType = splitData.gridType || "grid"; // TODO: let user decide the grid type
|
|
||||||
let i = 0;
|
|
||||||
// 2 rows, infinite columns
|
|
||||||
let currentRowGridArea = ["", ""/* first row, second row */];
|
|
||||||
let numberOfRows = 0;
|
|
||||||
for (const _tab of splitData.tabs) {
|
|
||||||
_tab._zenSplitted = true;
|
|
||||||
let container = _tab.linkedBrowser.closest(".browserSidebarContainer");
|
|
||||||
console.assert(container, "No container found for tab");
|
|
||||||
container.removeAttribute("zen-split-active");
|
|
||||||
if (_tab == tab) {
|
|
||||||
container.setAttribute("zen-split-active", "true");
|
|
||||||
}
|
|
||||||
container.setAttribute("zen-split-anim", "true");
|
|
||||||
container.addEventListener("click", handleClick(_tab));
|
|
||||||
// Set the grid type for the container. If the grid type is not "grid", then set the grid type contain
|
|
||||||
// each column or row. If it's "grid", then try to create
|
|
||||||
if (gridType == "grid") {
|
|
||||||
// Each 2 tabs, create a new row
|
|
||||||
if (i % 2 == 0) {
|
|
||||||
currentRowGridArea[0] += ` tab${i + 1}`;
|
|
||||||
} else {
|
|
||||||
currentRowGridArea[1] += ` tab${i + 1}`;
|
|
||||||
numberOfRows++;
|
|
||||||
}
|
|
||||||
container.style.gridArea = `tab${i + 1}`;
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
if (gridType == "grid") {
|
|
||||||
if ((numberOfRows < splitData.tabs.length / 2) && (splitData.tabs.length != 2)) {
|
|
||||||
// Make the last tab occupy the last row
|
|
||||||
currentRowGridArea[1] += ` tab${i}`;
|
|
||||||
}
|
|
||||||
if (gridType == "grid" && (splitData.tabs.length === 2)) {
|
|
||||||
currentRowGridArea[0] = `tab1 tab2`;
|
|
||||||
currentRowGridArea[1] = "";
|
|
||||||
}
|
|
||||||
this.tabBrowserPanel.style.gridTemplateAreas = `'${currentRowGridArea[0]}'`;
|
|
||||||
if (currentRowGridArea[1] != "") {
|
|
||||||
this.tabBrowserPanel.style.gridTemplateAreas += ` '${currentRowGridArea[1]}'`;
|
|
||||||
}
|
|
||||||
} else if (gridType == "vsep") {
|
|
||||||
this.tabBrowserPanel.style.gridTemplateAreas = `'${splitData.tabs.map((_, i) => `tab${i + 1}`).join(" ")}'`;
|
|
||||||
} else if (gridType == "hsep") {
|
|
||||||
this.tabBrowserPanel.style.gridTemplateAreas = `${splitData.tabs.map((_, i) => `'tab${i + 1}'`).join(" ")}`;
|
|
||||||
}
|
|
||||||
modifyDecks(splitData.tabs, true);
|
|
||||||
this.updateSplitViewButton(false);
|
|
||||||
},
|
|
||||||
|
|
||||||
contextSplitTabs() {
|
|
||||||
let tabs = gBrowser.selectedTabs;
|
|
||||||
this.splitTabs(tabs);
|
|
||||||
},
|
|
||||||
|
|
||||||
contextCanSplitTabs() {
|
|
||||||
if (gBrowser.selectedTabs.length < 2) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
// Check if any tab is already split
|
|
||||||
for (const tab of gBrowser.selectedTabs) {
|
|
||||||
if (tab._zenSplitted) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
},
|
|
||||||
|
|
||||||
// Panel and url button
|
|
||||||
|
|
||||||
updateSplitViewButton(hidden) {
|
|
||||||
let button = document.getElementById("zen-split-views-box");
|
|
||||||
if (hidden) {
|
|
||||||
button.setAttribute("hidden", "true");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
button.removeAttribute("hidden");
|
|
||||||
},
|
|
||||||
|
|
||||||
get _modifierElement() {
|
|
||||||
if (!this.__modifierElement) {
|
|
||||||
let wrapper = document.getElementById("template-zen-split-view-modifier");
|
|
||||||
const panel = wrapper.content.firstElementChild;
|
|
||||||
wrapper.replaceWith(wrapper.content);
|
|
||||||
this.__modifierElement = panel;
|
|
||||||
}
|
|
||||||
return this.__modifierElement;
|
|
||||||
},
|
|
||||||
|
|
||||||
async openSplitViewPanel(event) {
|
|
||||||
let panel = this._modifierElement;
|
|
||||||
let target = event.target.parentNode;
|
|
||||||
for (const gridType of ["hsep", "vsep", "grid", "unsplit"]) {
|
|
||||||
let selector = panel.querySelector(`.zen-split-view-modifier-preview.${gridType}`);
|
|
||||||
selector.classList.remove("active");
|
|
||||||
if (this.currentView >= 0 && this._data[this.currentView].gridType == gridType) {
|
|
||||||
selector.classList.add("active");
|
|
||||||
}
|
|
||||||
if (this.__hasSetMenuListener) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
selector.addEventListener("click", ((gridType) => {
|
|
||||||
if (gridType === "unsplit") {
|
|
||||||
let currentTab = gBrowser.selectedTab;
|
|
||||||
let tabs = this._data[this.currentView].tabs;
|
|
||||||
for (const tab of tabs) {
|
|
||||||
this.onTabClose({ target: tab, forUnsplit: true });
|
|
||||||
}
|
|
||||||
gBrowser.selectedTab = currentTab;
|
|
||||||
panel.hidePopup();
|
|
||||||
this.updateSplitViewButton(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this._data[this.currentView].gridType = gridType;
|
|
||||||
this._showSplitView(gBrowser.selectedTab);
|
|
||||||
panel.hidePopup();
|
|
||||||
}).bind(this, gridType));
|
|
||||||
}
|
|
||||||
this.__hasSetMenuListener = true;
|
|
||||||
PanelMultiView.openPopup(panel, target, {
|
|
||||||
position: "bottomright topright",
|
|
||||||
triggerEvent: event,
|
|
||||||
}).catch(console.error);
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
gZenViewSplitter.init();
|
|
@@ -1,422 +0,0 @@
|
|||||||
|
|
||||||
var ZenWorkspaces = {
|
|
||||||
async init() {
|
|
||||||
let docElement = document.documentElement;
|
|
||||||
if (docElement.getAttribute("chromehidden").includes("toolbar")
|
|
||||||
|| docElement.getAttribute("chromehidden").includes("menubar")
|
|
||||||
|| docElement.hasAttribute("privatebrowsingmode")) {
|
|
||||||
console.warn("ZenWorkspaces: !!! ZenWorkspaces is disabled in hidden windows !!!");
|
|
||||||
return; // We are in a hidden window, don't initialize ZenWorkspaces
|
|
||||||
}
|
|
||||||
console.log("ZenWorkspaces: Initializing ZenWorkspaces...");
|
|
||||||
await this.initializeWorkspaces();
|
|
||||||
console.log("ZenWorkspaces: ZenWorkspaces initialized");
|
|
||||||
},
|
|
||||||
|
|
||||||
get workspaceEnabled() {
|
|
||||||
return Services.prefs.getBoolPref("zen.workspaces.enabled", false);
|
|
||||||
},
|
|
||||||
|
|
||||||
// Wrorkspaces saving/loading
|
|
||||||
get _storeFile() {
|
|
||||||
return PathUtils.join(
|
|
||||||
PathUtils.profileDir,
|
|
||||||
"zen-workspaces",
|
|
||||||
"Workspaces.json",
|
|
||||||
);
|
|
||||||
},
|
|
||||||
|
|
||||||
async _workspaces() {
|
|
||||||
if (!this._workspaceCache) {
|
|
||||||
this._workspaceCache = await IOUtils.readJSON(this._storeFile);
|
|
||||||
if (!this._workspaceCache.workspaces) {
|
|
||||||
this._workspaceCache.workspaces = [];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return this._workspaceCache;
|
|
||||||
},
|
|
||||||
|
|
||||||
onWorkspacesEnabledChanged() {
|
|
||||||
if (this.workspaceEnabled) {
|
|
||||||
this.initializeWorkspaces();
|
|
||||||
} else {
|
|
||||||
this._workspaceCache = null;
|
|
||||||
document.getElementById("zen-workspaces-button")?.remove();
|
|
||||||
for (let tab of gBrowser.tabs) {
|
|
||||||
gBrowser.showTab(tab);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
async initializeWorkspaces() {
|
|
||||||
Services.prefs.addObserver("zen.workspaces.enabled", this.onWorkspacesEnabledChanged.bind(this));
|
|
||||||
this.initializeWorkspacesButton();
|
|
||||||
let file = new FileUtils.File(this._storeFile);
|
|
||||||
if (!file.exists()) {
|
|
||||||
await IOUtils.writeJSON(this._storeFile, {});
|
|
||||||
}
|
|
||||||
if (this.workspaceEnabled) {
|
|
||||||
let workspaces = await this._workspaces();
|
|
||||||
if (workspaces.workspaces.length === 0) {
|
|
||||||
await this.createAndSaveWorkspace("Default Workspace", true);
|
|
||||||
} else {
|
|
||||||
let activeWorkspace = workspaces.workspaces.find(workspace => workspace.default);
|
|
||||||
if (!activeWorkspace) {
|
|
||||||
activeWorkspace = workspaces.workspaces.find(workspace => workspace.used);
|
|
||||||
activeWorkspace.used = true;
|
|
||||||
await this.saveWorkspaces();
|
|
||||||
}
|
|
||||||
if (!activeWorkspace) {
|
|
||||||
activeWorkspace = workspaces.workspaces[0];
|
|
||||||
activeWorkspace.used = true;
|
|
||||||
await this.saveWorkspaces();
|
|
||||||
}
|
|
||||||
await this.changeWorkspace(activeWorkspace);
|
|
||||||
}
|
|
||||||
this._initializeWorkspaceIcons();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_initializeWorkspaceIcons() {
|
|
||||||
const kIcons = ["🏠", "📄", "💹", "💼", "📧", "✅", "👥"];
|
|
||||||
let container = document.getElementById("PanelUI-zen-workspaces-create-icons-container");
|
|
||||||
for (let icon of kIcons) {
|
|
||||||
let button = document.createXULElement("toolbarbutton");
|
|
||||||
button.className = "toolbarbutton-1";
|
|
||||||
button.setAttribute("label", icon);
|
|
||||||
button.onclick = ((event) => {
|
|
||||||
for (let button of container.children) {
|
|
||||||
button.removeAttribute("selected");
|
|
||||||
}
|
|
||||||
button.setAttribute("selected", "true");
|
|
||||||
}).bind(this, button);
|
|
||||||
container.appendChild(button);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
async saveWorkspace(workspaceData) {
|
|
||||||
let json = await IOUtils.readJSON(this._storeFile);
|
|
||||||
if (typeof json.workspaces === "undefined") {
|
|
||||||
json.workspaces = [];
|
|
||||||
}
|
|
||||||
json.workspaces.push(workspaceData);
|
|
||||||
console.log("ZenWorkspaces: Saving workspace", workspaceData);
|
|
||||||
await IOUtils.writeJSON(this._storeFile, json);
|
|
||||||
this._workspaceCache = null;
|
|
||||||
},
|
|
||||||
|
|
||||||
async removeWorkspace(windowID) {
|
|
||||||
let json = await this._workspaces();
|
|
||||||
console.log("ZenWorkspaces: Removing workspace", windowID);
|
|
||||||
await this.changeWorkspace(json.workspaces.find(workspace => workspace.uuid !== windowID));
|
|
||||||
this._deleteAllTabsInWorkspace(windowID);
|
|
||||||
json.workspaces = json.workspaces.filter(workspace => workspace.uuid !== windowID);
|
|
||||||
await this.unsafeSaveWorkspaces(json);
|
|
||||||
await this._propagateWorkspaceData();
|
|
||||||
},
|
|
||||||
|
|
||||||
async saveWorkspaces() {
|
|
||||||
await IOUtils.writeJSON(this._storeFile, await this._workspaces());
|
|
||||||
this._workspaceCache = null;
|
|
||||||
},
|
|
||||||
|
|
||||||
async unsafeSaveWorkspaces(workspaces) {
|
|
||||||
await IOUtils.writeJSON(this._storeFile, workspaces);
|
|
||||||
this._workspaceCache = null;
|
|
||||||
},
|
|
||||||
|
|
||||||
// Workspaces dialog UI management
|
|
||||||
|
|
||||||
openSaveDialog() {
|
|
||||||
let parentPanel = document.getElementById("PanelUI-zen-workspaces-multiview");
|
|
||||||
PanelUI.showSubView("PanelUI-zen-workspaces-create", parentPanel);
|
|
||||||
},
|
|
||||||
|
|
||||||
cancelWorkspaceCreation() {
|
|
||||||
let parentPanel = document.getElementById("PanelUI-zen-workspaces-multiview");
|
|
||||||
parentPanel.goBack();
|
|
||||||
},
|
|
||||||
|
|
||||||
workspaceHasIcon(workspace) {
|
|
||||||
return typeof workspace.icon !== "undefined" && workspace.icon !== "";
|
|
||||||
},
|
|
||||||
|
|
||||||
getWorkspaceIcon(workspace) {
|
|
||||||
if (this.workspaceHasIcon(workspace)) {
|
|
||||||
return workspace.icon;
|
|
||||||
}
|
|
||||||
return workspace.name[0].toUpperCase();
|
|
||||||
},
|
|
||||||
|
|
||||||
async _propagateWorkspaceData() {
|
|
||||||
let currentContainer = document.getElementById("PanelUI-zen-workspaces-current-info");
|
|
||||||
let workspaceList = document.getElementById("PanelUI-zen-workspaces-list");
|
|
||||||
const createWorkspaceElement = (workspace) => {
|
|
||||||
let element = document.createXULElement("toolbarbutton");
|
|
||||||
element.className = "subviewbutton";
|
|
||||||
element.setAttribute("tooltiptext", workspace.name);
|
|
||||||
element.setAttribute("zen-workspace-id", workspace.uuid);
|
|
||||||
//element.setAttribute("context", "zenWorkspaceActionsMenu");
|
|
||||||
let childs = window.MozXULElement.parseXULToFragment(`
|
|
||||||
<div class="zen-workspace-icon">
|
|
||||||
${this.getWorkspaceIcon(workspace)}
|
|
||||||
</div>
|
|
||||||
<div class="zen-workspace-name">
|
|
||||||
${workspace.name}
|
|
||||||
</div>
|
|
||||||
<toolbarbutton closemenu="none" class="toolbarbutton-1 zen-workspace-actions">
|
|
||||||
<image class="toolbarbutton-icon" id="zen-workspace-actions-menu-icon"></image>
|
|
||||||
</toolbarbutton>
|
|
||||||
`);
|
|
||||||
childs.querySelector(".zen-workspace-actions").addEventListener("command", ((event) => {
|
|
||||||
let button = event.target;
|
|
||||||
this._contextMenuId = button.closest("toolbarbutton[zen-workspace-id]").getAttribute("zen-workspace-id");
|
|
||||||
const popup = button.ownerDocument.getElementById(
|
|
||||||
"zenWorkspaceActionsMenu"
|
|
||||||
);
|
|
||||||
popup.openPopup(button, "after_end");
|
|
||||||
}).bind(this));
|
|
||||||
element.appendChild(childs);
|
|
||||||
element.onclick = (async () => {
|
|
||||||
if (event.target.closest(".zen-workspace-actions")) {
|
|
||||||
return; // Ignore clicks on the actions button
|
|
||||||
}
|
|
||||||
await this.changeWorkspace(workspace)
|
|
||||||
let panel = document.getElementById("PanelUI-zen-workspaces");
|
|
||||||
PanelMultiView.hidePopup(panel);
|
|
||||||
}).bind(this, workspace);
|
|
||||||
return element;
|
|
||||||
}
|
|
||||||
let workspaces = await this._workspaces();
|
|
||||||
let activeWorkspace = workspaces.workspaces.find(workspace => workspace.used);
|
|
||||||
currentContainer.innerHTML = "";
|
|
||||||
workspaceList.innerHTML = "";
|
|
||||||
workspaceList.parentNode.style.display = "flex";
|
|
||||||
if (workspaces.workspaces.length - 1 <= 0) {
|
|
||||||
workspaceList.innerHTML = "No workspaces available";
|
|
||||||
workspaceList.setAttribute("empty", "true");
|
|
||||||
} else {
|
|
||||||
workspaceList.removeAttribute("empty");
|
|
||||||
}
|
|
||||||
if (activeWorkspace) {
|
|
||||||
let currentWorkspace = createWorkspaceElement(activeWorkspace);
|
|
||||||
currentContainer.appendChild(currentWorkspace);
|
|
||||||
}
|
|
||||||
for (let workspace of workspaces.workspaces) {
|
|
||||||
if (workspace.used) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
let workspaceElement = createWorkspaceElement(workspace);
|
|
||||||
workspaceList.appendChild(workspaceElement);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
async openWorkspacesDialog(event) {
|
|
||||||
if (!this.workspaceEnabled) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
let target = event.target;
|
|
||||||
let panel = document.getElementById("PanelUI-zen-workspaces");
|
|
||||||
await this._propagateWorkspaceData();
|
|
||||||
PanelMultiView.openPopup(panel, target, {
|
|
||||||
position: "bottomright topright",
|
|
||||||
triggerEvent: event,
|
|
||||||
}).catch(console.error);
|
|
||||||
},
|
|
||||||
|
|
||||||
initializeWorkspacesButton() {
|
|
||||||
if (!this.workspaceEnabled) {
|
|
||||||
return;
|
|
||||||
} else if (document.getElementById("zen-workspaces-button")) {
|
|
||||||
let button = document.getElementById("zen-workspaces-button");
|
|
||||||
button.removeAttribute("hidden");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
let browserTabs = document.getElementById("tabbrowser-tabs");
|
|
||||||
let button = document.createElement("toolbarbutton");
|
|
||||||
button.id = "zen-workspaces-button";
|
|
||||||
button.className = "toolbarbutton-1 chromeclass-toolbar-additional";
|
|
||||||
button.setAttribute("label", "Workspaces");
|
|
||||||
button.setAttribute("tooltiptext", "Workspaces");
|
|
||||||
button.onclick = this.openWorkspacesDialog.bind(this);
|
|
||||||
browserTabs.insertAdjacentElement("beforebegin", button);
|
|
||||||
},
|
|
||||||
|
|
||||||
async _updateWorkspacesButton() {
|
|
||||||
let button = document.getElementById("zen-workspaces-button");
|
|
||||||
if (!button) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
let activeWorkspace = (await this._workspaces()).workspaces.find(workspace => workspace.used);
|
|
||||||
if (activeWorkspace) {
|
|
||||||
button.innerHTML = `
|
|
||||||
<div class="zen-workspace-sidebar-icon">
|
|
||||||
${this.getWorkspaceIcon(activeWorkspace)}
|
|
||||||
</div>
|
|
||||||
<div class="zen-workspace-sidebar-name">
|
|
||||||
${activeWorkspace.name}
|
|
||||||
</div>
|
|
||||||
`;
|
|
||||||
if (!this.workspaceHasIcon(activeWorkspace)) {
|
|
||||||
button.querySelector(".zen-workspace-sidebar-icon").setAttribute("no-icon", "true");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
// Workspaces management
|
|
||||||
|
|
||||||
get _workspaceInput() {
|
|
||||||
return document.getElementById("PanelUI-zen-workspaces-create-input");
|
|
||||||
},
|
|
||||||
|
|
||||||
_deleteAllTabsInWorkspace(workspaceID) {
|
|
||||||
for (let tab of gBrowser.tabs) {
|
|
||||||
if (tab.getAttribute("zen-workspace-id") === workspaceID) {
|
|
||||||
gBrowser.removeTab(tab);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_prepareNewWorkspace(window) {
|
|
||||||
document.documentElement.setAttribute("zen-workspace-id", window.uuid);
|
|
||||||
let tabCount = 0;
|
|
||||||
for (let tab of gBrowser.tabs) {
|
|
||||||
if (!tab.hasAttribute("zen-workspace-id")) {
|
|
||||||
tab.setAttribute("zen-workspace-id", window.uuid);
|
|
||||||
tabCount++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (tabCount === 0) {
|
|
||||||
this._createNewTabForWorkspace(window);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_createNewTabForWorkspace(window) {
|
|
||||||
let tab = gZenUIManager.openAndChangeToTab(Services.prefs.getStringPref("browser.startup.homepage"));
|
|
||||||
tab.setAttribute("zen-workspace-id", window.uuid);
|
|
||||||
},
|
|
||||||
|
|
||||||
async saveWorkspaceFromInput() {
|
|
||||||
// Go to the next view
|
|
||||||
let parentPanel = document.getElementById("PanelUI-zen-workspaces-multiview");
|
|
||||||
PanelUI.showSubView("PanelUI-zen-workspaces-create-icons", parentPanel);
|
|
||||||
},
|
|
||||||
|
|
||||||
async saveWorkspaceFromIcon() {
|
|
||||||
let workspaceName = this._workspaceInput.value;
|
|
||||||
if (!workspaceName) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this._workspaceInput.value = "";
|
|
||||||
let icon = document.querySelector("#PanelUI-zen-workspaces-create-icons-container [selected]");
|
|
||||||
icon?.removeAttribute("selected");
|
|
||||||
await this.createAndSaveWorkspace(workspaceName, false, icon?.label);
|
|
||||||
document.getElementById("PanelUI-zen-workspaces").hidePopup(true);
|
|
||||||
},
|
|
||||||
|
|
||||||
onWorkspaceNameChange(event) {
|
|
||||||
let button = document.getElementById("PanelUI-zen-workspaces-create-save");
|
|
||||||
if (this._workspaceInput.value === "") {
|
|
||||||
button.setAttribute("disabled", "true");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
button.removeAttribute("disabled");
|
|
||||||
},
|
|
||||||
|
|
||||||
async changeWorkspace(window) {
|
|
||||||
if (!this.workspaceEnabled) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
let firstTab = undefined;
|
|
||||||
let workspaces = await this._workspaces();
|
|
||||||
for (let workspace of workspaces.workspaces) {
|
|
||||||
workspace.used = workspace.uuid === window.uuid;
|
|
||||||
}
|
|
||||||
this.unsafeSaveWorkspaces(workspaces);
|
|
||||||
console.log("ZenWorkspaces: Changing workspace to", window.uuid);
|
|
||||||
for (let tab of gBrowser.tabs) {
|
|
||||||
if (tab.getAttribute("zen-workspace-id") === window.uuid && !tab.pinned) {
|
|
||||||
if (!firstTab) {
|
|
||||||
firstTab = tab;
|
|
||||||
gBrowser.selectedTab = firstTab;
|
|
||||||
}
|
|
||||||
gBrowser.showTab(tab);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (typeof firstTab === "undefined") {
|
|
||||||
this._createNewTabForWorkspace(window);
|
|
||||||
}
|
|
||||||
for (let tab of gBrowser.tabs) {
|
|
||||||
if (tab.getAttribute("zen-workspace-id") !== window.uuid) {
|
|
||||||
gBrowser.hideTab(tab);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
document.documentElement.setAttribute("zen-workspace-id", window.uuid);
|
|
||||||
await this.saveWorkspaces();
|
|
||||||
await this._updateWorkspacesButton();
|
|
||||||
await this._propagateWorkspaceData();
|
|
||||||
},
|
|
||||||
|
|
||||||
_createWorkspaceData(name, isDefault, icon) {
|
|
||||||
let window = {
|
|
||||||
uuid: gZenUIManager.generateUuidv4(),
|
|
||||||
default: isDefault,
|
|
||||||
used: true,
|
|
||||||
icon: icon,
|
|
||||||
name: name,
|
|
||||||
};
|
|
||||||
this._prepareNewWorkspace(window);
|
|
||||||
return window;
|
|
||||||
},
|
|
||||||
|
|
||||||
async createAndSaveWorkspace(name = "New Workspace", isDefault = false, icon = undefined) {
|
|
||||||
if (!this.workspaceEnabled) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
let workspaceData = this._createWorkspaceData(name, isDefault, icon);
|
|
||||||
await this.saveWorkspace(workspaceData);
|
|
||||||
await this.changeWorkspace(workspaceData);
|
|
||||||
},
|
|
||||||
|
|
||||||
async onLocationChange(browser) {
|
|
||||||
let tab = gBrowser.getTabForBrowser(browser);
|
|
||||||
let workspaceID = tab.getAttribute("zen-workspace-id");
|
|
||||||
if (!workspaceID) {
|
|
||||||
let workspaces = await this._workspaces();
|
|
||||||
let activeWorkspace = workspaces.workspaces.find(workspace => workspace.used);
|
|
||||||
if (!activeWorkspace) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
tab.setAttribute("zen-workspace-id", activeWorkspace.uuid);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
// Context menu management
|
|
||||||
|
|
||||||
_contextMenuId: null,
|
|
||||||
async updateContextMenu(_) {
|
|
||||||
console.assert(this._contextMenuId, "No context menu ID set");
|
|
||||||
document.querySelector(`#PanelUI-zen-workspaces [zen-workspace-id="${this._contextMenuId}"] .zen-workspace-actions`).setAttribute("active", "true");
|
|
||||||
const workspaces = await this._workspaces();
|
|
||||||
let deleteMenuItem = document.getElementById("context_zenDeleteWorkspace");
|
|
||||||
if (workspaces.workspaces.length <= 1) {
|
|
||||||
deleteMenuItem.setAttribute("disabled", "true");
|
|
||||||
} else {
|
|
||||||
deleteMenuItem.removeAttribute("disabled");
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
onContextMenuClose() {
|
|
||||||
let target = document.querySelector(`#PanelUI-zen-workspaces [zen-workspace-id="${this._contextMenuId}"] .zen-workspace-actions`);
|
|
||||||
if (target) {
|
|
||||||
target.removeAttribute("active");
|
|
||||||
}
|
|
||||||
this._contextMenuId = null;
|
|
||||||
},
|
|
||||||
|
|
||||||
async contextDelete() {
|
|
||||||
await this.removeWorkspace(this._contextMenuId);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ZenWorkspaces.init();
|
|
@@ -1,69 +0,0 @@
|
|||||||
diff --git a/browser/base/content/browser.css b/browser/base/content/browser.css
|
|
||||||
index cdd08ec8f3d3cd652be9fcf6d4fb5b50dcf270ba..6cb35378aea2e7967dff0c91d09201b053645fbd 100644
|
|
||||||
--- a/browser/base/content/browser.css
|
|
||||||
+++ b/browser/base/content/browser.css
|
|
||||||
@@ -2,6 +2,8 @@
|
|
||||||
* 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 url("chrome://global/skin/zen-global-shared.css");
|
|
||||||
+
|
|
||||||
@namespace html url("http://www.w3.org/1999/xhtml");
|
|
||||||
|
|
||||||
panelmultiview {
|
|
||||||
@@ -566,9 +568,9 @@ printpreview-pagination:focus-within,
|
|
||||||
|
|
||||||
|
|
||||||
#sidebar-box {
|
|
||||||
- min-width: 14em;
|
|
||||||
+ min-width: 323px;
|
|
||||||
max-width: 36em;
|
|
||||||
- width: 18em;
|
|
||||||
+ width: 393px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* WebExtension Sidebars */
|
|
||||||
@@ -583,3 +585,43 @@ printpreview-pagination:focus-within,
|
|
||||||
toolbar[keyNav=true]:not([collapsed=true], [customizing=true]) toolbartabstop {
|
|
||||||
-moz-user-focus: normal;
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+/**
|
|
||||||
+ *
|
|
||||||
+ * ZEN OVERRIDES
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+.content-prompt-dialog > .dialogOverlay {
|
|
||||||
+ align-content: start;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+.dialogBox:not(.spotlightBox) {
|
|
||||||
+ border: 1px solid var(--zen-dialog-border-color);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+#window-modal-dialog:not([zen-dialog-welcome-element="true"]) .dialogBox:not(.spotlightBox) {
|
|
||||||
+ transform: translateY(-9px);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+#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;
|
|
||||||
+}
|
|
@@ -1,11 +0,0 @@
|
|||||||
diff --git a/browser/base/content/global-scripts.inc b/browser/base/content/global-scripts.inc
|
|
||||||
index f5f43b8f9509c37bf217b3ed1c6c562be85430e0..c8ab55760f817aa14e3db15f6b5556118e65d218 100644
|
|
||||||
--- a/browser/base/content/global-scripts.inc
|
|
||||||
+++ b/browser/base/content/global-scripts.inc
|
|
||||||
@@ -22,4 +22,6 @@ if (AppConstants.platform == "macosx") {
|
|
||||||
Services.scriptloader.loadSubScript("chrome://global/content/macWindowMenu.js", this);
|
|
||||||
}
|
|
||||||
|
|
||||||
+Services.scriptloader.loadSubScript("chrome://browser/content/zen-browser-places.js", this);
|
|
||||||
+
|
|
||||||
</script>
|
|
@@ -1,21 +1,8 @@
|
|||||||
diff --git a/browser/base/content/main-popupset.inc.xhtml b/browser/base/content/main-popupset.inc.xhtml
|
diff --git a/browser/base/content/main-popupset.inc.xhtml b/browser/base/content/main-popupset.inc.xhtml
|
||||||
index ef8245938ea669227c255d85422a26b99cb2290b..48c061796072e976a45f7bd0ca1c8b3913728fc7 100644
|
index 1fb595272a184f9a40f56f87d86232e3324f7750..8dd0f0ff856be524a5fa27fb8c6180c1fe058134 100644
|
||||||
--- a/browser/base/content/main-popupset.inc.xhtml
|
--- a/browser/base/content/main-popupset.inc.xhtml
|
||||||
+++ b/browser/base/content/main-popupset.inc.xhtml
|
+++ b/browser/base/content/main-popupset.inc.xhtml
|
||||||
@@ -80,6 +80,12 @@
|
@@ -144,6 +144,10 @@
|
||||||
<menuitem id="context_closeDuplicateTabs"
|
|
||||||
data-lazy-l10n-id="tab-context-close-duplicate-tabs"
|
|
||||||
oncommand="gBrowser.removeDuplicateTabs(TabContextMenu.contextTab);"/>
|
|
||||||
+ <menuseparator/>
|
|
||||||
+ <menuitem id="context_zenSplitTabs"
|
|
||||||
+ data-lazy-l10n-id="tab-zen-split-tabs"
|
|
||||||
+ data-l10n-args='{"tabCount": 1}'
|
|
||||||
+ oncommand="gZenViewSplitter.contextSplitTabs();"/>
|
|
||||||
+ <menuseparator/>
|
|
||||||
<menu id="context_closeTabOptions"
|
|
||||||
data-lazy-l10n-id="tab-context-close-multiple-tabs">
|
|
||||||
<menupopup id="closeTabOptions">
|
|
||||||
@@ -169,6 +175,10 @@
|
|
||||||
hidden="true"
|
hidden="true"
|
||||||
tabspecific="true"
|
tabspecific="true"
|
||||||
aria-labelledby="editBookmarkPanelTitle">
|
aria-labelledby="editBookmarkPanelTitle">
|
||||||
@@ -26,22 +13,15 @@ index ef8245938ea669227c255d85422a26b99cb2290b..48c061796072e976a45f7bd0ca1c8b39
|
|||||||
<box class="panel-header">
|
<box class="panel-header">
|
||||||
<html:h1>
|
<html:h1>
|
||||||
<html:span id="editBookmarkPanelTitle"/>
|
<html:span id="editBookmarkPanelTitle"/>
|
||||||
@@ -191,12 +201,14 @@
|
@@ -169,6 +173,7 @@
|
||||||
class="footer-button"
|
class="footer-button"/>
|
||||||
data-l10n-id="bookmark-panel-save-button"
|
|
||||||
default="true"
|
|
||||||
+ autofocus="true"
|
|
||||||
oncommand="StarUI.panel.hidePopup();"/>
|
|
||||||
<button id="editBookmarkPanelRemoveButton"
|
|
||||||
class="footer-button"
|
|
||||||
oncommand="StarUI.removeBookmarkButtonCommand();"/>
|
|
||||||
</html:moz-button-group>
|
</html:moz-button-group>
|
||||||
</vbox>
|
</vbox>
|
||||||
+ </vbox>
|
+ </vbox>
|
||||||
</panel>
|
</panel>
|
||||||
</html:template>
|
</html:template>
|
||||||
|
|
||||||
@@ -514,6 +526,8 @@
|
@@ -454,6 +459,8 @@
|
||||||
|
|
||||||
#include popup-notifications.inc
|
#include popup-notifications.inc
|
||||||
|
|
||||||
|
@@ -1,7 +1,16 @@
|
|||||||
diff --git a/browser/base/content/navigator-toolbox.inc.xhtml b/browser/base/content/navigator-toolbox.inc.xhtml
|
diff --git a/browser/base/content/navigator-toolbox.inc.xhtml b/browser/base/content/navigator-toolbox.inc.xhtml
|
||||||
index 390a1300a1213af2b411ba09c67e3c25750ee6c3..7c80c54dd43b5414bf5ea9101d53431c0b4a140b 100644
|
index 390a1300a1213af2b411ba09c67e3c25750ee6c3..a7ab07f8e8a0c5f91a6c12eb5d27c56edbd7405c 100644
|
||||||
--- a/browser/base/content/navigator-toolbox.inc.xhtml
|
--- a/browser/base/content/navigator-toolbox.inc.xhtml
|
||||||
+++ b/browser/base/content/navigator-toolbox.inc.xhtml
|
+++ b/browser/base/content/navigator-toolbox.inc.xhtml
|
||||||
|
@@ -2,7 +2,7 @@
|
||||||
|
# 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/.
|
||||||
|
|
||||||
|
-<toolbox id="navigator-toolbox">
|
||||||
|
+<toolbox id="navigator-toolbox" persist="width style">
|
||||||
|
|
||||||
|
<vbox id="titlebar">
|
||||||
|
<!-- Menu -->
|
||||||
@@ -32,10 +32,11 @@
|
@@ -32,10 +32,11 @@
|
||||||
|
|
||||||
<hbox class="titlebar-spacer" type="pre-tabs"/>
|
<hbox class="titlebar-spacer" type="pre-tabs"/>
|
||||||
@@ -44,22 +53,7 @@ index 390a1300a1213af2b411ba09c67e3c25750ee6c3..7c80c54dd43b5414bf5ea9101d53431c
|
|||||||
</toolbar>
|
</toolbar>
|
||||||
|
|
||||||
</vbox>
|
</vbox>
|
||||||
@@ -409,6 +412,14 @@
|
@@ -450,6 +453,7 @@
|
||||||
<image id="star-button"
|
|
||||||
class="urlbar-icon"/>
|
|
||||||
</hbox>
|
|
||||||
+ <hbox id="zen-split-views-box"
|
|
||||||
+ hidden="true"
|
|
||||||
+ role="button"
|
|
||||||
+ class="urlbar-page-action"
|
|
||||||
+ onclick="gZenViewSplitter.openSplitViewPanel(event);">
|
|
||||||
+ <image id="zen-split-views-button"
|
|
||||||
+ class="urlbar-icon"/>
|
|
||||||
+ </hbox>
|
|
||||||
</hbox>
|
|
||||||
</hbox>
|
|
||||||
</hbox>
|
|
||||||
@@ -450,6 +461,7 @@
|
|
||||||
|
|
||||||
<toolbarbutton id="fxa-toolbar-menu-button" class="toolbarbutton-1 chromeclass-toolbar-additional subviewbutton-nav"
|
<toolbarbutton id="fxa-toolbar-menu-button" class="toolbarbutton-1 chromeclass-toolbar-additional subviewbutton-nav"
|
||||||
badged="true"
|
badged="true"
|
||||||
@@ -67,7 +61,7 @@ index 390a1300a1213af2b411ba09c67e3c25750ee6c3..7c80c54dd43b5414bf5ea9101d53431c
|
|||||||
delegatesanchor="true"
|
delegatesanchor="true"
|
||||||
onmousedown="gSync.toggleAccountPanel(this, event)"
|
onmousedown="gSync.toggleAccountPanel(this, event)"
|
||||||
onkeypress="gSync.toggleAccountPanel(this, event)"
|
onkeypress="gSync.toggleAccountPanel(this, event)"
|
||||||
@@ -501,6 +513,8 @@
|
@@ -501,6 +505,8 @@
|
||||||
consumeanchor="PanelUI-button"
|
consumeanchor="PanelUI-button"
|
||||||
data-l10n-id="appmenu-menu-button-closed2"/>
|
data-l10n-id="appmenu-menu-button-closed2"/>
|
||||||
</toolbaritem>
|
</toolbaritem>
|
||||||
|
@@ -1,18 +0,0 @@
|
|||||||
diff --git a/browser/base/content/nsContextMenu.js b/browser/base/content/nsContextMenu.js
|
|
||||||
index b5c8dd44daaab18397cf01d0ef9f5288f5113925..8840b8171d5992da0a2f6216d8da9e1ec6dc1e93 100644
|
|
||||||
--- a/browser/base/content/nsContextMenu.js
|
|
||||||
+++ b/browser/base/content/nsContextMenu.js
|
|
||||||
@@ -1047,6 +1047,13 @@ class nsContextMenu {
|
|
||||||
!this.isSecureAboutPage()
|
|
||||||
);
|
|
||||||
|
|
||||||
+ this.showItem(
|
|
||||||
+ "context-zenAddToWebPanel",
|
|
||||||
+ this.onLink && !this.onMailtoLink && !this.onTelLink
|
|
||||||
+ );
|
|
||||||
+
|
|
||||||
+ this.showItem("context-zenSplitLink", this.onLink && !this.onMailtoLink && !this.onTelLink);
|
|
||||||
+
|
|
||||||
let copyLinkSeparator = document.getElementById("context-sep-copylink");
|
|
||||||
// Show "Copy Link", "Copy" and "Copy Clean Link" with no divider, and "copy link" and "Send link to Device" with no divider between.
|
|
||||||
// Other cases will show a divider.
|
|
18
src/browser/base/content/nsContextMenu-sys-mjs.patch
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
diff --git a/browser/base/content/nsContextMenu.sys.mjs b/browser/base/content/nsContextMenu.sys.mjs
|
||||||
|
index 6c2317b8036378c6b8e0ad9a4fe71388bcb385f5..4bf277b02d3c69efc0f2d46c8b0f9deb7d7fb45a 100644
|
||||||
|
--- a/browser/base/content/nsContextMenu.sys.mjs
|
||||||
|
+++ b/browser/base/content/nsContextMenu.sys.mjs
|
||||||
|
@@ -1153,6 +1153,13 @@ export class nsContextMenu {
|
||||||
|
!this.isSecureAboutPage()
|
||||||
|
);
|
||||||
|
|
||||||
|
+ this.showItem(
|
||||||
|
+ "context-zenAddToWebPanel",
|
||||||
|
+ this.onLink && !this.onMailtoLink && !this.onTelLink
|
||||||
|
+ );
|
||||||
|
+
|
||||||
|
+ this.showItem("context-zenSplitLink", this.onLink && !this.onMailtoLink && !this.onTelLink);
|
||||||
|
+
|
||||||
|
let copyLinkSeparator = this.document.getElementById(
|
||||||
|
"context-sep-copylink"
|
||||||
|
);
|
@@ -1,12 +0,0 @@
|
|||||||
diff --git a/browser/base/content/webext-panels.xhtml b/browser/base/content/webext-panels.xhtml
|
|
||||||
index 902fa7e7b3edb3c9502a12e475ade016436b2490..5c6ad5f9d86cd29a12483d7cb71ce9979002f092 100644
|
|
||||||
--- a/browser/base/content/webext-panels.xhtml
|
|
||||||
+++ b/browser/base/content/webext-panels.xhtml
|
|
||||||
@@ -16,6 +16,7 @@
|
|
||||||
<script src="chrome://global/content/globalOverlay.js"/>
|
|
||||||
<script src="chrome://browser/content/utilityOverlay.js"/>
|
|
||||||
<script src="chrome://global/content/editMenuOverlay.js"/>
|
|
||||||
+ <script src="chrome://browser/content/zen-browser-places.js"/>
|
|
||||||
|
|
||||||
<linkset>
|
|
||||||
<html:link rel="stylesheet" href="chrome://global/skin/global.css" />
|
|
@@ -1 +1,6 @@
|
|||||||
|
<!--
|
||||||
|
- 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/.
|
||||||
|
-->
|
||||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#253342"></rect><rect x="10" y="30" width="80" height="10" fill="#232226" transform="translate(6 -6) rotate(236 40 40)"></rect><circle cx="40" cy="40" fill="#DDDDDD" r="16" transform="translate(15 15)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#5E9188" transform="translate(12 -12) rotate(112 40 40)"></line></g></svg>
|
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#253342"></rect><rect x="10" y="30" width="80" height="10" fill="#232226" transform="translate(6 -6) rotate(236 40 40)"></rect><circle cx="40" cy="40" fill="#DDDDDD" r="16" transform="translate(15 15)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#5E9188" transform="translate(12 -12) rotate(112 40 40)"></line></g></svg>
|
Before Width: | Height: | Size: 674 B After Width: | Height: | Size: 894 B |
@@ -1 +1,6 @@
|
|||||||
|
<!--
|
||||||
|
- 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/.
|
||||||
|
-->
|
||||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#FFF6C7"></rect><rect x="10" y="30" width="80" height="10" fill="#DCD7C2" transform="translate(6 -6) rotate(236 40 40)"></rect><circle cx="40" cy="40" fill="#9D9382" r="16" transform="translate(15 15)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFC1B2" transform="translate(12 -12) rotate(112 40 40)"></line></g></svg>
|
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#FFF6C7"></rect><rect x="10" y="30" width="80" height="10" fill="#DCD7C2" transform="translate(6 -6) rotate(236 40 40)"></rect><circle cx="40" cy="40" fill="#9D9382" r="16" transform="translate(15 15)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFC1B2" transform="translate(12 -12) rotate(112 40 40)"></line></g></svg>
|
Before Width: | Height: | Size: 674 B After Width: | Height: | Size: 894 B |
@@ -1 +1,6 @@
|
|||||||
|
<!--
|
||||||
|
- 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/.
|
||||||
|
-->
|
||||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#5E9188"></rect><rect x="10" y="30" width="80" height="80" fill="#3E5954" transform="translate(-8 -8) rotate(222 40 40)"></rect><circle cx="40" cy="40" fill="#253342" r="16" transform="translate(9 -9)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#232226" transform="translate(-4 4) rotate(84 40 40)"></line></g></svg>
|
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#5E9188"></rect><rect x="10" y="30" width="80" height="80" fill="#3E5954" transform="translate(-8 -8) rotate(222 40 40)"></rect><circle cx="40" cy="40" fill="#253342" r="16" transform="translate(9 -9)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#232226" transform="translate(-4 4) rotate(84 40 40)"></line></g></svg>
|
Before Width: | Height: | Size: 671 B After Width: | Height: | Size: 891 B |
@@ -1 +1,6 @@
|
|||||||
|
<!--
|
||||||
|
- 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/.
|
||||||
|
-->
|
||||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#FFC1B2"></rect><rect x="10" y="30" width="80" height="80" fill="#FFDBC8" transform="translate(-8 -8) rotate(222 40 40)"></rect><circle cx="40" cy="40" fill="#FFF6C7" r="16" transform="translate(9 -9)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#DCD7C2" transform="translate(-4 4) rotate(84 40 40)"></line></g></svg>
|
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#FFC1B2"></rect><rect x="10" y="30" width="80" height="80" fill="#FFDBC8" transform="translate(-8 -8) rotate(222 40 40)"></rect><circle cx="40" cy="40" fill="#FFF6C7" r="16" transform="translate(9 -9)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#DCD7C2" transform="translate(-4 4) rotate(84 40 40)"></line></g></svg>
|
Before Width: | Height: | Size: 671 B After Width: | Height: | Size: 891 B |
@@ -1 +1,6 @@
|
|||||||
|
<!--
|
||||||
|
- 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/.
|
||||||
|
-->
|
||||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#3E5954"></rect><rect x="10" y="30" width="80" height="80" fill="#253342" transform="translate(16 -16) rotate(214 40 40)"></rect><circle cx="40" cy="40" fill="#232226" r="16" transform="translate(-15 -15)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#DDDDDD" transform="translate(-8 8) rotate(68 40 40)"></line></g></svg>
|
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#3E5954"></rect><rect x="10" y="30" width="80" height="80" fill="#253342" transform="translate(16 -16) rotate(214 40 40)"></rect><circle cx="40" cy="40" fill="#232226" r="16" transform="translate(-15 -15)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#DDDDDD" transform="translate(-8 8) rotate(68 40 40)"></line></g></svg>
|
Before Width: | Height: | Size: 675 B After Width: | Height: | Size: 895 B |
@@ -1 +1,6 @@
|
|||||||
|
<!--
|
||||||
|
- 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/.
|
||||||
|
-->
|
||||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#FFDBC8"></rect><rect x="10" y="30" width="80" height="80" fill="#FFF6C7" transform="translate(16 -16) rotate(214 40 40)"></rect><circle cx="40" cy="40" fill="#DCD7C2" r="16" transform="translate(-15 -15)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#9D9382" transform="translate(-8 8) rotate(68 40 40)"></line></g></svg>
|
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#FFDBC8"></rect><rect x="10" y="30" width="80" height="80" fill="#FFF6C7" transform="translate(16 -16) rotate(214 40 40)"></rect><circle cx="40" cy="40" fill="#DCD7C2" r="16" transform="translate(-15 -15)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#9D9382" transform="translate(-8 8) rotate(68 40 40)"></line></g></svg>
|
Before Width: | Height: | Size: 675 B After Width: | Height: | Size: 895 B |
@@ -1 +1,6 @@
|
|||||||
|
<!--
|
||||||
|
- 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/.
|
||||||
|
-->
|
||||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#253342"></rect><rect x="10" y="30" width="80" height="80" fill="#232226" transform="translate(20 20) rotate(276 40 40)"></rect><circle cx="40" cy="40" fill="#DDDDDD" r="16" transform="translate(0 0)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#5E9188" transform="translate(12 12) rotate(192 40 40)"></line></g></svg>
|
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#253342"></rect><rect x="10" y="30" width="80" height="80" fill="#232226" transform="translate(20 20) rotate(276 40 40)"></rect><circle cx="40" cy="40" fill="#DDDDDD" r="16" transform="translate(0 0)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#5E9188" transform="translate(12 12) rotate(192 40 40)"></line></g></svg>
|
Before Width: | Height: | Size: 672 B After Width: | Height: | Size: 892 B |
@@ -1 +1,6 @@
|
|||||||
|
<!--
|
||||||
|
- 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/.
|
||||||
|
-->
|
||||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#FFF6C7"></rect><rect x="10" y="30" width="80" height="80" fill="#DCD7C2" transform="translate(20 20) rotate(276 40 40)"></rect><circle cx="40" cy="40" fill="#9D9382" r="16" transform="translate(0 0)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFC1B2" transform="translate(12 12) rotate(192 40 40)"></line></g></svg>
|
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#FFF6C7"></rect><rect x="10" y="30" width="80" height="80" fill="#DCD7C2" transform="translate(20 20) rotate(276 40 40)"></rect><circle cx="40" cy="40" fill="#9D9382" r="16" transform="translate(0 0)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFC1B2" transform="translate(12 12) rotate(192 40 40)"></line></g></svg>
|
Before Width: | Height: | Size: 672 B After Width: | Height: | Size: 892 B |
@@ -1 +1,6 @@
|
|||||||
|
<!--
|
||||||
|
- 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/.
|
||||||
|
-->
|
||||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#232226"></rect><rect x="10" y="30" width="80" height="80" fill="#DDDDDD" transform="translate(0 0) rotate(88 40 40)"></rect><circle cx="40" cy="40" fill="#5E9188" r="16" transform="translate(18 -18)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#3E5954" transform="translate(16 -16) rotate(176 40 40)"></line></g></svg>
|
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#232226"></rect><rect x="10" y="30" width="80" height="80" fill="#DDDDDD" transform="translate(0 0) rotate(88 40 40)"></rect><circle cx="40" cy="40" fill="#5E9188" r="16" transform="translate(18 -18)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#3E5954" transform="translate(16 -16) rotate(176 40 40)"></line></g></svg>
|
Before Width: | Height: | Size: 673 B After Width: | Height: | Size: 893 B |
@@ -1 +1,6 @@
|
|||||||
|
<!--
|
||||||
|
- 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/.
|
||||||
|
-->
|
||||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#DCD7C2"></rect><rect x="10" y="30" width="80" height="80" fill="#9D9382" transform="translate(0 0) rotate(88 40 40)"></rect><circle cx="40" cy="40" fill="#FFC1B2" r="16" transform="translate(18 -18)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFDBC8" transform="translate(16 -16) rotate(176 40 40)"></line></g></svg>
|
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#DCD7C2"></rect><rect x="10" y="30" width="80" height="80" fill="#9D9382" transform="translate(0 0) rotate(88 40 40)"></rect><circle cx="40" cy="40" fill="#FFC1B2" r="16" transform="translate(18 -18)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFDBC8" transform="translate(16 -16) rotate(176 40 40)"></line></g></svg>
|
Before Width: | Height: | Size: 673 B After Width: | Height: | Size: 893 B |
@@ -1 +1,6 @@
|
|||||||
|
<!--
|
||||||
|
- 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/.
|
||||||
|
-->
|
||||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#3E5954"></rect><rect x="10" y="30" width="80" height="10" fill="#253342" transform="translate(-10 10) rotate(64 40 40)"></rect><circle cx="40" cy="40" fill="#232226" r="16" transform="translate(0 0)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#DDDDDD" transform="translate(-8 -8) rotate(128 40 40)"></line></g></svg>
|
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#3E5954"></rect><rect x="10" y="30" width="80" height="10" fill="#253342" transform="translate(-10 10) rotate(64 40 40)"></rect><circle cx="40" cy="40" fill="#232226" r="16" transform="translate(0 0)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#DDDDDD" transform="translate(-8 -8) rotate(128 40 40)"></line></g></svg>
|
Before Width: | Height: | Size: 672 B After Width: | Height: | Size: 892 B |
@@ -1 +1,6 @@
|
|||||||
|
<!--
|
||||||
|
- 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/.
|
||||||
|
-->
|
||||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#FFDBC8"></rect><rect x="10" y="30" width="80" height="10" fill="#FFF6C7" transform="translate(-10 10) rotate(64 40 40)"></rect><circle cx="40" cy="40" fill="#DCD7C2" r="16" transform="translate(0 0)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#9D9382" transform="translate(-8 -8) rotate(128 40 40)"></line></g></svg>
|
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#FFDBC8"></rect><rect x="10" y="30" width="80" height="10" fill="#FFF6C7" transform="translate(-10 10) rotate(64 40 40)"></rect><circle cx="40" cy="40" fill="#DCD7C2" r="16" transform="translate(0 0)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#9D9382" transform="translate(-8 -8) rotate(128 40 40)"></line></g></svg>
|
Before Width: | Height: | Size: 672 B After Width: | Height: | Size: 892 B |
@@ -1 +1,6 @@
|
|||||||
|
<!--
|
||||||
|
- 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/.
|
||||||
|
-->
|
||||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#253342"></rect><rect x="10" y="30" width="80" height="80" fill="#232226" transform="translate(-20 20) rotate(106 40 40)"></rect><circle cx="40" cy="40" fill="#DDDDDD" r="16" transform="translate(9 -9)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#5E9188" transform="translate(12 12) rotate(212 40 40)"></line></g></svg>
|
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#253342"></rect><rect x="10" y="30" width="80" height="80" fill="#232226" transform="translate(-20 20) rotate(106 40 40)"></rect><circle cx="40" cy="40" fill="#DDDDDD" r="16" transform="translate(9 -9)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#5E9188" transform="translate(12 12) rotate(212 40 40)"></line></g></svg>
|
Before Width: | Height: | Size: 674 B After Width: | Height: | Size: 894 B |
@@ -1 +1,6 @@
|
|||||||
|
<!--
|
||||||
|
- 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/.
|
||||||
|
-->
|
||||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#FFF6C7"></rect><rect x="10" y="30" width="80" height="80" fill="#DCD7C2" transform="translate(-20 20) rotate(106 40 40)"></rect><circle cx="40" cy="40" fill="#9D9382" r="16" transform="translate(9 -9)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFC1B2" transform="translate(12 12) rotate(212 40 40)"></line></g></svg>
|
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#FFF6C7"></rect><rect x="10" y="30" width="80" height="80" fill="#DCD7C2" transform="translate(-20 20) rotate(106 40 40)"></rect><circle cx="40" cy="40" fill="#9D9382" r="16" transform="translate(9 -9)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFC1B2" transform="translate(12 12) rotate(212 40 40)"></line></g></svg>
|
Before Width: | Height: | Size: 674 B After Width: | Height: | Size: 894 B |
@@ -1 +1,6 @@
|
|||||||
|
<!--
|
||||||
|
- 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/.
|
||||||
|
-->
|
||||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#232226"></rect><rect x="10" y="30" width="80" height="80" fill="#DDDDDD" transform="translate(0 0) rotate(28 40 40)"></rect><circle cx="40" cy="40" fill="#5E9188" r="16" transform="translate(-12 12)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#3E5954" transform="translate(16 16) rotate(56 40 40)"></line></g></svg>
|
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#232226"></rect><rect x="10" y="30" width="80" height="80" fill="#DDDDDD" transform="translate(0 0) rotate(28 40 40)"></rect><circle cx="40" cy="40" fill="#5E9188" r="16" transform="translate(-12 12)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#3E5954" transform="translate(16 16) rotate(56 40 40)"></line></g></svg>
|
Before Width: | Height: | Size: 671 B After Width: | Height: | Size: 891 B |
@@ -1 +1,6 @@
|
|||||||
|
<!--
|
||||||
|
- 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/.
|
||||||
|
-->
|
||||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#DCD7C2"></rect><rect x="10" y="30" width="80" height="80" fill="#9D9382" transform="translate(0 0) rotate(28 40 40)"></rect><circle cx="40" cy="40" fill="#FFC1B2" r="16" transform="translate(-12 12)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFDBC8" transform="translate(16 16) rotate(56 40 40)"></line></g></svg>
|
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#DCD7C2"></rect><rect x="10" y="30" width="80" height="80" fill="#9D9382" transform="translate(0 0) rotate(28 40 40)"></rect><circle cx="40" cy="40" fill="#FFC1B2" r="16" transform="translate(-12 12)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFDBC8" transform="translate(16 16) rotate(56 40 40)"></line></g></svg>
|
Before Width: | Height: | Size: 671 B After Width: | Height: | Size: 891 B |
@@ -1 +1,6 @@
|
|||||||
|
<!--
|
||||||
|
- 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/.
|
||||||
|
-->
|
||||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#3E5954"></rect><rect x="10" y="30" width="80" height="10" fill="#253342" transform="translate(-20 20) rotate(184 40 40)"></rect><circle cx="40" cy="40" fill="#232226" r="16" transform="translate(18 18)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#DDDDDD" transform="translate(-8 -8) rotate(8 40 40)"></line></g></svg>
|
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#3E5954"></rect><rect x="10" y="30" width="80" height="10" fill="#253342" transform="translate(-20 20) rotate(184 40 40)"></rect><circle cx="40" cy="40" fill="#232226" r="16" transform="translate(18 18)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#DDDDDD" transform="translate(-8 -8) rotate(8 40 40)"></line></g></svg>
|
Before Width: | Height: | Size: 673 B After Width: | Height: | Size: 893 B |
@@ -1 +1,6 @@
|
|||||||
|
<!--
|
||||||
|
- 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/.
|
||||||
|
-->
|
||||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#FFDBC8"></rect><rect x="10" y="30" width="80" height="10" fill="#FFF6C7" transform="translate(-20 20) rotate(184 40 40)"></rect><circle cx="40" cy="40" fill="#DCD7C2" r="16" transform="translate(18 18)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#9D9382" transform="translate(-8 -8) rotate(8 40 40)"></line></g></svg>
|
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#FFDBC8"></rect><rect x="10" y="30" width="80" height="10" fill="#FFF6C7" transform="translate(-20 20) rotate(184 40 40)"></rect><circle cx="40" cy="40" fill="#DCD7C2" r="16" transform="translate(18 18)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#9D9382" transform="translate(-8 -8) rotate(8 40 40)"></line></g></svg>
|
Before Width: | Height: | Size: 673 B After Width: | Height: | Size: 893 B |
@@ -1 +1,6 @@
|
|||||||
|
<!--
|
||||||
|
- 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/.
|
||||||
|
-->
|
||||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#232226"></rect><rect x="10" y="30" width="80" height="10" fill="#DDDDDD" transform="translate(-14 -14) rotate(68 40 40)"></rect><circle cx="40" cy="40" fill="#5E9188" r="16" transform="translate(-9 9)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#3E5954" transform="translate(16 -16) rotate(136 40 40)"></line></g></svg>
|
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#232226"></rect><rect x="10" y="30" width="80" height="10" fill="#DDDDDD" transform="translate(-14 -14) rotate(68 40 40)"></rect><circle cx="40" cy="40" fill="#5E9188" r="16" transform="translate(-9 9)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#3E5954" transform="translate(16 -16) rotate(136 40 40)"></line></g></svg>
|
Before Width: | Height: | Size: 675 B After Width: | Height: | Size: 895 B |
@@ -1 +1,6 @@
|
|||||||
|
<!--
|
||||||
|
- 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/.
|
||||||
|
-->
|
||||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#DCD7C2"></rect><rect x="10" y="30" width="80" height="10" fill="#9D9382" transform="translate(-14 -14) rotate(68 40 40)"></rect><circle cx="40" cy="40" fill="#FFC1B2" r="16" transform="translate(-9 9)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFDBC8" transform="translate(16 -16) rotate(136 40 40)"></line></g></svg>
|
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#DCD7C2"></rect><rect x="10" y="30" width="80" height="10" fill="#9D9382" transform="translate(-14 -14) rotate(68 40 40)"></rect><circle cx="40" cy="40" fill="#FFC1B2" r="16" transform="translate(-9 9)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFDBC8" transform="translate(16 -16) rotate(136 40 40)"></line></g></svg>
|
Before Width: | Height: | Size: 675 B After Width: | Height: | Size: 895 B |
@@ -1 +1,6 @@
|
|||||||
|
<!--
|
||||||
|
- 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/.
|
||||||
|
-->
|
||||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#3E5954"></rect><rect x="10" y="30" width="80" height="10" fill="#253342" transform="translate(14 -14) rotate(14 40 40)"></rect><circle cx="40" cy="40" fill="#232226" r="16" transform="translate(-15 -15)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#DDDDDD" transform="translate(-8 8) rotate(28 40 40)"></line></g></svg>
|
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#3E5954"></rect><rect x="10" y="30" width="80" height="10" fill="#253342" transform="translate(14 -14) rotate(14 40 40)"></rect><circle cx="40" cy="40" fill="#232226" r="16" transform="translate(-15 -15)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#DDDDDD" transform="translate(-8 8) rotate(28 40 40)"></line></g></svg>
|
Before Width: | Height: | Size: 674 B After Width: | Height: | Size: 894 B |
@@ -1 +1,6 @@
|
|||||||
|
<!--
|
||||||
|
- 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/.
|
||||||
|
-->
|
||||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#FFDBC8"></rect><rect x="10" y="30" width="80" height="10" fill="#FFF6C7" transform="translate(14 -14) rotate(14 40 40)"></rect><circle cx="40" cy="40" fill="#DCD7C2" r="16" transform="translate(-15 -15)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#9D9382" transform="translate(-8 8) rotate(28 40 40)"></line></g></svg>
|
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#FFDBC8"></rect><rect x="10" y="30" width="80" height="10" fill="#FFF6C7" transform="translate(14 -14) rotate(14 40 40)"></rect><circle cx="40" cy="40" fill="#DCD7C2" r="16" transform="translate(-15 -15)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#9D9382" transform="translate(-8 8) rotate(28 40 40)"></line></g></svg>
|
Before Width: | Height: | Size: 674 B After Width: | Height: | Size: 894 B |
@@ -1 +1,6 @@
|
|||||||
|
<!--
|
||||||
|
- 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/.
|
||||||
|
-->
|
||||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#232226"></rect><rect x="10" y="30" width="80" height="10" fill="#DDDDDD" transform="translate(14 14) rotate(218 40 40)"></rect><circle cx="40" cy="40" fill="#5E9188" r="16" transform="translate(-15 15)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#3E5954" transform="translate(16 16) rotate(76 40 40)"></line></g></svg>
|
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#232226"></rect><rect x="10" y="30" width="80" height="10" fill="#DDDDDD" transform="translate(14 14) rotate(218 40 40)"></rect><circle cx="40" cy="40" fill="#5E9188" r="16" transform="translate(-15 15)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#3E5954" transform="translate(16 16) rotate(76 40 40)"></line></g></svg>
|
Before Width: | Height: | Size: 674 B After Width: | Height: | Size: 894 B |
@@ -1 +1,6 @@
|
|||||||
|
<!--
|
||||||
|
- 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/.
|
||||||
|
-->
|
||||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#DCD7C2"></rect><rect x="10" y="30" width="80" height="10" fill="#9D9382" transform="translate(14 14) rotate(218 40 40)"></rect><circle cx="40" cy="40" fill="#FFC1B2" r="16" transform="translate(-15 15)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFDBC8" transform="translate(16 16) rotate(76 40 40)"></line></g></svg>
|
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#DCD7C2"></rect><rect x="10" y="30" width="80" height="10" fill="#9D9382" transform="translate(14 14) rotate(218 40 40)"></rect><circle cx="40" cy="40" fill="#FFC1B2" r="16" transform="translate(-15 15)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFDBC8" transform="translate(16 16) rotate(76 40 40)"></line></g></svg>
|
Before Width: | Height: | Size: 674 B After Width: | Height: | Size: 894 B |
@@ -1 +1,6 @@
|
|||||||
|
<!--
|
||||||
|
- 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/.
|
||||||
|
-->
|
||||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#232226"></rect><rect x="10" y="30" width="80" height="80" fill="#DDDDDD" transform="translate(-14 14) rotate(228 40 40)"></rect><circle cx="40" cy="40" fill="#5E9188" r="16" transform="translate(-6 6)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#3E5954" transform="translate(16 -16) rotate(96 40 40)"></line></g></svg>
|
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#232226"></rect><rect x="10" y="30" width="80" height="80" fill="#DDDDDD" transform="translate(-14 14) rotate(228 40 40)"></rect><circle cx="40" cy="40" fill="#5E9188" r="16" transform="translate(-6 6)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#3E5954" transform="translate(16 -16) rotate(96 40 40)"></line></g></svg>
|
Before Width: | Height: | Size: 674 B After Width: | Height: | Size: 894 B |
@@ -1 +1,6 @@
|
|||||||
|
<!--
|
||||||
|
- 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/.
|
||||||
|
-->
|
||||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#DCD7C2"></rect><rect x="10" y="30" width="80" height="80" fill="#9D9382" transform="translate(-14 14) rotate(228 40 40)"></rect><circle cx="40" cy="40" fill="#FFC1B2" r="16" transform="translate(-6 6)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFDBC8" transform="translate(16 -16) rotate(96 40 40)"></line></g></svg>
|
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#DCD7C2"></rect><rect x="10" y="30" width="80" height="80" fill="#9D9382" transform="translate(-14 14) rotate(228 40 40)"></rect><circle cx="40" cy="40" fill="#FFC1B2" r="16" transform="translate(-6 6)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFDBC8" transform="translate(16 -16) rotate(96 40 40)"></line></g></svg>
|
Before Width: | Height: | Size: 674 B After Width: | Height: | Size: 894 B |
@@ -1 +1,6 @@
|
|||||||
|
<!--
|
||||||
|
- 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/.
|
||||||
|
-->
|
||||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#DDDDDD"></rect><rect x="10" y="30" width="80" height="80" fill="#5E9188" transform="translate(0 0) rotate(20 40 40)"></rect><circle cx="40" cy="40" fill="#3E5954" r="16" transform="translate(12 -12)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#253342" transform="translate(0 0) rotate(40 40 40)"></line></g></svg>
|
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#DDDDDD"></rect><rect x="10" y="30" width="80" height="80" fill="#5E9188" transform="translate(0 0) rotate(20 40 40)"></rect><circle cx="40" cy="40" fill="#3E5954" r="16" transform="translate(12 -12)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#253342" transform="translate(0 0) rotate(40 40 40)"></line></g></svg>
|
Before Width: | Height: | Size: 669 B After Width: | Height: | Size: 889 B |
@@ -1 +1,6 @@
|
|||||||
|
<!--
|
||||||
|
- 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/.
|
||||||
|
-->
|
||||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#9D9382"></rect><rect x="10" y="30" width="80" height="80" fill="#FFC1B2" transform="translate(0 0) rotate(20 40 40)"></rect><circle cx="40" cy="40" fill="#FFDBC8" r="16" transform="translate(12 -12)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFF6C7" transform="translate(0 0) rotate(40 40 40)"></line></g></svg>
|
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#9D9382"></rect><rect x="10" y="30" width="80" height="80" fill="#FFC1B2" transform="translate(0 0) rotate(20 40 40)"></rect><circle cx="40" cy="40" fill="#FFDBC8" r="16" transform="translate(12 -12)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFF6C7" transform="translate(0 0) rotate(40 40 40)"></line></g></svg>
|
Before Width: | Height: | Size: 669 B After Width: | Height: | Size: 889 B |
@@ -1 +1,6 @@
|
|||||||
|
<!--
|
||||||
|
- 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/.
|
||||||
|
-->
|
||||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#232226"></rect><rect x="10" y="30" width="80" height="10" fill="#DDDDDD" transform="translate(16 16) rotate(158 40 40)"></rect><circle cx="40" cy="40" fill="#5E9188" r="16" transform="translate(12 12)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#3E5954" transform="translate(16 16) rotate(316 40 40)"></line></g></svg>
|
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#232226"></rect><rect x="10" y="30" width="80" height="10" fill="#DDDDDD" transform="translate(16 16) rotate(158 40 40)"></rect><circle cx="40" cy="40" fill="#5E9188" r="16" transform="translate(12 12)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#3E5954" transform="translate(16 16) rotate(316 40 40)"></line></g></svg>
|
Before Width: | Height: | Size: 674 B After Width: | Height: | Size: 894 B |
@@ -1 +1,6 @@
|
|||||||
|
<!--
|
||||||
|
- 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/.
|
||||||
|
-->
|
||||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#DCD7C2"></rect><rect x="10" y="30" width="80" height="10" fill="#9D9382" transform="translate(16 16) rotate(158 40 40)"></rect><circle cx="40" cy="40" fill="#FFC1B2" r="16" transform="translate(12 12)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFDBC8" transform="translate(16 16) rotate(316 40 40)"></line></g></svg>
|
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#DCD7C2"></rect><rect x="10" y="30" width="80" height="10" fill="#9D9382" transform="translate(16 16) rotate(158 40 40)"></rect><circle cx="40" cy="40" fill="#FFC1B2" r="16" transform="translate(12 12)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFDBC8" transform="translate(16 16) rotate(316 40 40)"></line></g></svg>
|
Before Width: | Height: | Size: 674 B After Width: | Height: | Size: 894 B |
@@ -1 +1,6 @@
|
|||||||
|
<!--
|
||||||
|
- 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/.
|
||||||
|
-->
|
||||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#DDDDDD"></rect><rect x="10" y="30" width="80" height="10" fill="#5E9188" transform="translate(16 -16) rotate(70 40 40)"></rect><circle cx="40" cy="40" fill="#3E5954" r="16" transform="translate(-3 3)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#253342" transform="translate(0 0) rotate(140 40 40)"></line></g></svg>
|
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#DDDDDD"></rect><rect x="10" y="30" width="80" height="10" fill="#5E9188" transform="translate(16 -16) rotate(70 40 40)"></rect><circle cx="40" cy="40" fill="#3E5954" r="16" transform="translate(-3 3)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#253342" transform="translate(0 0) rotate(140 40 40)"></line></g></svg>
|
Before Width: | Height: | Size: 671 B After Width: | Height: | Size: 891 B |
@@ -1 +1,6 @@
|
|||||||
|
<!--
|
||||||
|
- 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/.
|
||||||
|
-->
|
||||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#9D9382"></rect><rect x="10" y="30" width="80" height="10" fill="#FFC1B2" transform="translate(16 -16) rotate(70 40 40)"></rect><circle cx="40" cy="40" fill="#FFDBC8" r="16" transform="translate(-3 3)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFF6C7" transform="translate(0 0) rotate(140 40 40)"></line></g></svg>
|
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#9D9382"></rect><rect x="10" y="30" width="80" height="10" fill="#FFC1B2" transform="translate(16 -16) rotate(70 40 40)"></rect><circle cx="40" cy="40" fill="#FFDBC8" r="16" transform="translate(-3 3)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFF6C7" transform="translate(0 0) rotate(140 40 40)"></line></g></svg>
|
Before Width: | Height: | Size: 671 B After Width: | Height: | Size: 891 B |
@@ -1 +1,6 @@
|
|||||||
|
<!--
|
||||||
|
- 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/.
|
||||||
|
-->
|
||||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#DDDDDD"></rect><rect x="10" y="30" width="80" height="10" fill="#5E9188" transform="translate(4 -4) rotate(90 40 40)"></rect><circle cx="40" cy="40" fill="#3E5954" r="16" transform="translate(0 0)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#253342" transform="translate(0 0) rotate(180 40 40)"></line></g></svg>
|
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#DDDDDD"></rect><rect x="10" y="30" width="80" height="10" fill="#5E9188" transform="translate(4 -4) rotate(90 40 40)"></rect><circle cx="40" cy="40" fill="#3E5954" r="16" transform="translate(0 0)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#253342" transform="translate(0 0) rotate(180 40 40)"></line></g></svg>
|
Before Width: | Height: | Size: 668 B After Width: | Height: | Size: 888 B |
@@ -1 +1,6 @@
|
|||||||
|
<!--
|
||||||
|
- 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/.
|
||||||
|
-->
|
||||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#9D9382"></rect><rect x="10" y="30" width="80" height="10" fill="#FFC1B2" transform="translate(4 -4) rotate(90 40 40)"></rect><circle cx="40" cy="40" fill="#FFDBC8" r="16" transform="translate(0 0)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFF6C7" transform="translate(0 0) rotate(180 40 40)"></line></g></svg>
|
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#9D9382"></rect><rect x="10" y="30" width="80" height="10" fill="#FFC1B2" transform="translate(4 -4) rotate(90 40 40)"></rect><circle cx="40" cy="40" fill="#FFDBC8" r="16" transform="translate(0 0)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFF6C7" transform="translate(0 0) rotate(180 40 40)"></line></g></svg>
|
Before Width: | Height: | Size: 668 B After Width: | Height: | Size: 888 B |