Compare commits
256 Commits
1.0.0-a.13
...
1.0.0-a.24
Author | SHA1 | Date | |
---|---|---|---|
![]() |
984e29f4cd | ||
![]() |
72c535b039 | ||
![]() |
000c41038d | ||
![]() |
776c9f69d5 | ||
![]() |
b38acdd8be | ||
![]() |
c8ad6cb70e | ||
![]() |
bb6113f221 | ||
![]() |
83d91ea38c | ||
![]() |
481687bdab | ||
![]() |
47f91322f6 | ||
![]() |
4549ac3671 | ||
![]() |
7ec8523c95 | ||
![]() |
1bd8f37381 | ||
![]() |
fa7a0ac661 | ||
![]() |
8f800f5134 | ||
![]() |
9cdfc864b3 | ||
![]() |
b2b3fb0b07 | ||
![]() |
c92931e005 | ||
![]() |
7c82ce5c23 | ||
![]() |
f36613e7e8 | ||
![]() |
71c131032b | ||
![]() |
81a8715b7b | ||
![]() |
5599000d33 | ||
![]() |
8cdf09daa0 | ||
![]() |
fc6a70162b | ||
![]() |
bc109d33c8 | ||
![]() |
9f10b74af5 | ||
![]() |
a65753d9a0 | ||
![]() |
234f116964 | ||
![]() |
6b34aa9d3d | ||
![]() |
3939aa8809 | ||
![]() |
de5f73a9e6 | ||
![]() |
26a9e255c1 | ||
![]() |
b50ed3a2d5 | ||
![]() |
0900c27d2b | ||
![]() |
ae723290d7 | ||
![]() |
1834fe2177 | ||
![]() |
3d6707fe21 | ||
![]() |
7e3eba280b | ||
![]() |
cba262e090 | ||
![]() |
b187c9383b | ||
![]() |
e7013c4db4 | ||
![]() |
1b5881c0fb | ||
![]() |
66d8d4bd71 | ||
![]() |
552a3c3cac | ||
![]() |
fb58c42938 | ||
![]() |
7a4a7681b9 | ||
![]() |
5a3a383cde | ||
![]() |
5943be1b39 | ||
![]() |
136993f203 | ||
![]() |
afc3eb7ee6 | ||
![]() |
c073febc29 | ||
![]() |
85842227aa | ||
![]() |
66ac0b9812 | ||
![]() |
3c2d617771 | ||
![]() |
03c0e70173 | ||
![]() |
f65888f5f4 | ||
![]() |
0f0cc0e03a | ||
![]() |
d7fe28886c | ||
![]() |
1d017d1dea | ||
![]() |
1479679cb6 | ||
![]() |
8c6b26b6f9 | ||
![]() |
3783625818 | ||
![]() |
0a5e803550 | ||
![]() |
a8980ae3ef | ||
![]() |
02fe8a0d0b | ||
![]() |
5700c61b17 | ||
![]() |
21930a9bf9 | ||
![]() |
e044f7d547 | ||
![]() |
1e4dea86bb | ||
![]() |
e737c55c74 | ||
![]() |
2c4cb2edd5 | ||
![]() |
ca6f3d882c | ||
![]() |
eea7e43ff8 | ||
![]() |
dec1fdd369 | ||
![]() |
01ec0092a2 | ||
![]() |
8af7418f3f | ||
![]() |
4589a22790 | ||
![]() |
15ecc5b8d4 | ||
![]() |
6c25279107 | ||
![]() |
979760a841 | ||
![]() |
c52853251d | ||
![]() |
7b23af1d76 | ||
![]() |
ec9804314d | ||
![]() |
b1d13f947d | ||
![]() |
f558aee231 | ||
![]() |
9d8c91809e | ||
![]() |
24400237a0 | ||
![]() |
6b766db159 | ||
![]() |
37297d9c9f | ||
![]() |
6c90e9726f | ||
![]() |
fe54849453 | ||
![]() |
df693676b7 | ||
![]() |
77a539243d | ||
![]() |
075ae9a459 | ||
![]() |
8f8bc5a9be | ||
![]() |
81225c05ee | ||
![]() |
3d6fc9ea7a | ||
![]() |
2d6660aa4d | ||
![]() |
739d1b1f59 | ||
![]() |
8cd17adbf5 | ||
![]() |
60984fefb9 | ||
![]() |
99b9448f2c | ||
![]() |
abf7ec6c1d | ||
![]() |
13515a5458 | ||
![]() |
3b9a96e330 | ||
![]() |
c4db4b2bd9 | ||
![]() |
f5b42396b0 | ||
![]() |
fd627a25d5 | ||
![]() |
31c0cf5074 | ||
![]() |
d8d8ffa438 | ||
![]() |
45d43c0666 | ||
![]() |
cd62640086 | ||
![]() |
6cf7fe90b8 | ||
![]() |
edca28339b | ||
![]() |
bd28d7439e | ||
![]() |
f6e486ba17 | ||
![]() |
48e0dbe68a | ||
![]() |
ae67b53276 | ||
![]() |
48ee6519a5 | ||
![]() |
b607473973 | ||
![]() |
c46aa247c7 | ||
![]() |
5a72ca7703 | ||
![]() |
7e00a28ba9 | ||
![]() |
b590535343 | ||
![]() |
6309853dd6 | ||
![]() |
b584bb2d4e | ||
![]() |
e0712d80a4 | ||
![]() |
bc291c99c3 | ||
![]() |
6c802b75fa | ||
![]() |
797d3c1766 | ||
![]() |
844a329be5 | ||
![]() |
fb6cbc0e23 | ||
![]() |
e64d8a4fd2 | ||
![]() |
8c90f378d7 | ||
![]() |
7a0d962e62 | ||
![]() |
92f3db6633 | ||
![]() |
d5abc0dd48 | ||
![]() |
36e7fdad8b | ||
![]() |
194056007a | ||
![]() |
3bfbcf64e3 | ||
![]() |
5f9f555083 | ||
![]() |
5cd5db6b3e | ||
![]() |
b596d7b466 | ||
![]() |
d2d3d39464 | ||
![]() |
4087d82922 | ||
![]() |
5a9c4a6666 | ||
![]() |
33ef14c3d8 | ||
![]() |
ad9c9c6141 | ||
![]() |
19ccd0760a | ||
![]() |
e474815d7e | ||
![]() |
8cdc29f1e8 | ||
![]() |
a08c1567eb | ||
![]() |
bc7df76629 | ||
![]() |
c049059911 | ||
![]() |
8c0082bcf0 | ||
![]() |
db4a9b41cc | ||
![]() |
f85794b47d | ||
![]() |
83dcaa3e54 | ||
![]() |
af75d67b30 | ||
![]() |
cedd505a09 | ||
![]() |
1a450ebc72 | ||
![]() |
a395fe34d0 | ||
![]() |
e604372a9f | ||
![]() |
d5e8babaf2 | ||
![]() |
650337f9b5 | ||
![]() |
aa4d950be1 | ||
![]() |
c2dd526195 | ||
![]() |
5df2cce01c | ||
![]() |
aba58af1da | ||
![]() |
c6455e86ef | ||
![]() |
c57db962f8 | ||
![]() |
bd449faf05 | ||
![]() |
cf3f673c35 | ||
![]() |
27386c608e | ||
![]() |
14b7d97579 | ||
![]() |
16b5521087 | ||
![]() |
903f73f7d5 | ||
![]() |
f4e3bfdb9e | ||
![]() |
7276f8a885 | ||
![]() |
f96981e84b | ||
![]() |
5cb8d5356a | ||
![]() |
241614f9e8 | ||
![]() |
6b0e5f6b30 | ||
![]() |
ea6512aee3 | ||
![]() |
7205aaa360 | ||
![]() |
ee5b193785 | ||
![]() |
d54b59554c | ||
![]() |
8d33db3c15 | ||
![]() |
c77110efec | ||
![]() |
0dac0afc9d | ||
![]() |
f515fd9566 | ||
![]() |
c67554a5e5 | ||
![]() |
fb7b6f05f2 | ||
![]() |
1553348812 | ||
![]() |
2035706c2a | ||
![]() |
be8a7ef6a4 | ||
![]() |
ab0e82790b | ||
![]() |
0527f8b788 | ||
![]() |
b07759dab6 | ||
![]() |
e552564ba0 | ||
![]() |
2264c5f67d | ||
![]() |
cc024a4528 | ||
![]() |
4402ed8fc1 | ||
![]() |
0c07a44dc6 | ||
![]() |
1e368f6f0f | ||
![]() |
5b50649739 | ||
![]() |
5718798e81 | ||
![]() |
fd0fbc7fb6 | ||
![]() |
87801ca3be | ||
![]() |
80d0bbcdff | ||
![]() |
84a1ea31e5 | ||
![]() |
7758bdabce | ||
![]() |
0de414158b | ||
![]() |
03b3436025 | ||
![]() |
d250c34d41 | ||
![]() |
ec2466ca02 | ||
![]() |
fc5bd615f4 | ||
![]() |
1e1d78a874 | ||
![]() |
d3287ce216 | ||
![]() |
fb6845f651 | ||
![]() |
e50d16b0cf | ||
![]() |
246a6d60da | ||
![]() |
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 |
2
.gitattributes
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
|
||||||
|
*.patch linguist-language=C++
|
1
.github/FUNDING.yml
vendored
@@ -1,2 +1,3 @@
|
|||||||
|
|
||||||
patreon: zen_browser
|
patreon: zen_browser
|
||||||
|
ko_fi: zen_browser
|
||||||
|
52
.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
|
||||||
@@ -125,20 +130,22 @@ jobs:
|
|||||||
|
|
||||||
|
|
||||||
source:
|
source:
|
||||||
|
if: false
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: [build-data, check-release]
|
needs: [build-data, check-release]
|
||||||
|
environment: production
|
||||||
steps:
|
steps:
|
||||||
- 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
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
|
token: ${{ secrets.DEPLOY_KEY }}
|
||||||
|
|
||||||
- name: Setup git
|
- name: Setup git
|
||||||
run: |
|
run: |
|
||||||
@@ -185,6 +192,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 +203,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 +214,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 +225,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,6 +235,7 @@ 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 }}
|
||||||
@@ -244,12 +256,15 @@ jobs:
|
|||||||
node-version: 20
|
node-version: 20
|
||||||
|
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
token: ${{ secrets.DEPLOY_KEY }}
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
npm install -g pnpm
|
npm install -g pnpm
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get -y install libfuse2
|
sudo apt-get -y install libfuse2 desktop-file-utils
|
||||||
|
|
||||||
- name: Download linux build
|
- name: Download linux build
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v4
|
||||||
@@ -266,17 +281,18 @@ jobs:
|
|||||||
APPDIR=AppDir
|
APPDIR=AppDir
|
||||||
tar -xvf *.tar.* && rm -rf *.tar.*
|
tar -xvf *.tar.* && rm -rf *.tar.*
|
||||||
mv zen/* $APPDIR/
|
mv zen/* $APPDIR/
|
||||||
wget https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage
|
wget https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage
|
||||||
chmod +x *.AppImage
|
chmod +x *.AppImage
|
||||||
chmod +x ./AppDir/AppRun
|
chmod +x ./AppDir/AppRun
|
||||||
echo "AppDir: $APPDIR"
|
echo "AppDir: $APPDIR"
|
||||||
ls -al
|
ls -al
|
||||||
find .
|
find .
|
||||||
ls -al "$APPDIR"
|
ls -al "$APPDIR"
|
||||||
ARCH=x86_64 ./appimagetool-x86_64.AppImage --comp gzip "$APPDIR" zen.AppImage
|
ARCH=x86_64 ./appimagetool-x86_64.AppImage --comp zstd --mksquashfs-opt -Xcompression-level --mksquashfs-opt 10 \
|
||||||
|
-u "gh-releases-zsync|$GITHUB_REPOSITORY_OWNER|desktop|latest|zen-${{ matrix.generic == true && 'generic' || 'specific' }}.AppImage.zsync" \
|
||||||
|
"$APPDIR" zen-${{ matrix.generic == true && 'generic' || 'specific' }}.AppImage
|
||||||
mkdir dist
|
mkdir dist
|
||||||
mv zen.AppImage* dist/.
|
mv zen*AppImage* dist/.
|
||||||
mv ./dist/zen.AppImage ./dist/zen-${{ matrix.generic == true && 'generic' || 'specific' }}.AppImage
|
|
||||||
|
|
||||||
- name: Upload artifact
|
- name: Upload artifact
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
@@ -284,16 +300,24 @@ jobs:
|
|||||||
name: zen-${{ matrix.generic == true && 'generic' || 'specific' }}.AppImage
|
name: zen-${{ matrix.generic == true && 'generic' || 'specific' }}.AppImage
|
||||||
path: ./dist/zen-${{ matrix.generic == true && 'generic' || 'specific' }}.AppImage
|
path: ./dist/zen-${{ matrix.generic == true && 'generic' || 'specific' }}.AppImage
|
||||||
|
|
||||||
|
- name: Upload artifact (ZSync)
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: zen-${{ matrix.generic == true && 'generic' || 'specific' }}.AppImage.zsync
|
||||||
|
path: ./dist/zen-${{ matrix.generic == true && 'generic' || 'specific' }}.AppImage.zsync
|
||||||
|
|
||||||
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, appimage]
|
needs: [build-data, linux, 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
|
||||||
@@ -342,7 +366,9 @@ jobs:
|
|||||||
zen.linux-generic.tar.bz2
|
zen.linux-generic.tar.bz2
|
||||||
zen.linux-specific.tar.bz2
|
zen.linux-specific.tar.bz2
|
||||||
zen-generic.AppImage
|
zen-generic.AppImage
|
||||||
|
zen-generic.AppImage.zsync
|
||||||
zen-specific.AppImage
|
zen-specific.AppImage
|
||||||
|
zen-specific.AppImage.zsync
|
||||||
zen.win-generic.zip
|
zen.win-generic.zip
|
||||||
zen.win-specific.zip
|
zen.win-specific.zip
|
||||||
linux.mar
|
linux.mar
|
||||||
|
20
.github/workflows/linux-alpha-build.yml
vendored
@@ -9,6 +9,7 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-linux:
|
build-linux:
|
||||||
|
environment: production
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@@ -19,18 +20,22 @@ jobs:
|
|||||||
name: Build Linux - ${{ matrix.generic == true && 'Generic' || 'Specific' }}
|
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: |
|
||||||
@@ -44,9 +49,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:
|
||||||
|
43
.github/workflows/macos-alpha-build.yml
vendored
@@ -6,10 +6,10 @@ on:
|
|||||||
description: 'The version to build'
|
description: 'The version to build'
|
||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
mac-build:
|
mac-build:
|
||||||
name: Build macOS - ${{ matrix.arch }}
|
name: Build macOS - ${{ matrix.arch }}
|
||||||
|
environment: production
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
@@ -31,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: |
|
||||||
@@ -42,8 +45,29 @@ 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
|
# completly uninstall python3 and python3.12
|
||||||
run: sh .github/workflows/src/disk-setup-and-swap.sh
|
brew uninstall --ignore-dependencies python3.12 -f
|
||||||
|
|
||||||
|
export PATH="$(python3 -m site --user-base)/bin":$PATH
|
||||||
|
python3 -m pip install --user mercurial
|
||||||
|
|
||||||
|
rm '/usr/local/bin/2to3-3.11' # fix Could not symlink bin/2to3-3.11
|
||||||
|
rm '/usr/local/bin/2to3-3.12' # fix Could not symlink bin/2to3-3.12
|
||||||
|
rm /usr/local/bin/2to3 # fix Could not symlink bin/2to3
|
||||||
|
rm '/usr/local/bin/idle3.11' #fix Could not symlink bin/idle3.11
|
||||||
|
rm '/usr/local/bin/idle3.12' # fix Could not symlink bin/idle3.12
|
||||||
|
rm '/usr/local/bin/idle3' # fix Could not symlink bin/idle3
|
||||||
|
rm '/usr/local/bin/pydoc3.11' # fix Could not symlink bin/pydoc3.11
|
||||||
|
rm '/usr/local/bin/pydoc3.12' # fix Could not symlink bin/pydoc3.12
|
||||||
|
rm '/usr/local/bin/pydoc3' # fix Could not symlink bin/pydoc3
|
||||||
|
rm '/usr/local/bin/python3.11' # fix Could not symlink bin/python3.11
|
||||||
|
rm '/usr/local/bin/python3.12' # fix Could not symlink bin/python3.12
|
||||||
|
rm '/usr/local/bin/python3' # fix Could not symlink bin/python3
|
||||||
|
rm '/usr/local/bin/python3.11-config' # fix Could not symlink bin/python3.11-config
|
||||||
|
rm '/usr/local/bin/python3.12-config' # fix Could not symlink bin/python3.12-config
|
||||||
|
rm '/usr/local/bin/python3-config' # fix Could not symlink bin/python3-config
|
||||||
|
|
||||||
|
brew install watchman
|
||||||
|
|
||||||
- name: Force usage fo gnu-tar
|
- name: Force usage fo gnu-tar
|
||||||
run: |
|
run: |
|
||||||
@@ -68,18 +92,19 @@ jobs:
|
|||||||
- name: Download firefox source and dependancies
|
- name: Download firefox source and dependancies
|
||||||
run: pnpm surfer download
|
run: pnpm surfer download
|
||||||
|
|
||||||
|
- name: Bootstrap
|
||||||
|
run: |
|
||||||
|
cd engine
|
||||||
|
export PATH="$(python3 -m site --user-base)/bin":$PATH
|
||||||
|
./mach --no-interactive bootstrap --application-choice browser --no-system-changes
|
||||||
|
cd ..
|
||||||
|
|
||||||
- name: Import
|
- name: Import
|
||||||
env:
|
env:
|
||||||
SURFER_COMPAT: ${{ matrix.arch == 'x64' }}
|
SURFER_COMPAT: ${{ matrix.arch == 'x64' }}
|
||||||
run: |
|
run: |
|
||||||
pnpm surfer import
|
pnpm surfer import
|
||||||
|
|
||||||
- name: Bootstrap
|
|
||||||
run: |
|
|
||||||
cd engine
|
|
||||||
./mach --no-interactive bootstrap --application-choice browser
|
|
||||||
cd ..
|
|
||||||
|
|
||||||
- name: build Zen
|
- name: build Zen
|
||||||
env:
|
env:
|
||||||
SURFER_COMPAT: ${{ matrix.arch == 'x64' }}
|
SURFER_COMPAT: ${{ matrix.arch == 'x64' }}
|
||||||
|
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
|
|
19
.github/workflows/windows-alpha-build.yml
vendored
@@ -22,20 +22,24 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
generic: [true, false]
|
generic: [true, false]
|
||||||
|
environment: production
|
||||||
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
|
||||||
@@ -55,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
|
||||||
|
13
.github/workflows/windows-profile-build.yml
vendored
@@ -33,14 +33,12 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
git config --global user.email "mauro-balades@users.noreply.github.com"
|
git config --global user.email "mauro-balades@users.noreply.github.com"
|
||||||
git config --global user.name "mauro-balades"
|
git config --global user.name "mauro-balades"
|
||||||
|
|
||||||
- name: Install pnpm
|
- name: Install pnpm
|
||||||
run: npm install -g pnpm
|
run: npm install -g pnpm
|
||||||
|
|
||||||
- name: Install Surfer
|
- name: Install Surfer
|
||||||
run: |
|
run: |
|
||||||
npm i -g @zen-browser/surfer
|
npm i -g @zen-browser/surfer
|
||||||
|
|
||||||
- uses: actions/download-artifact@v4
|
- uses: actions/download-artifact@v4
|
||||||
name: Download artifact
|
name: Download artifact
|
||||||
with:
|
with:
|
||||||
@@ -51,35 +49,29 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
cd C:\artifact
|
cd C:\artifact
|
||||||
ls
|
ls
|
||||||
zstd -d ${{ inputs.profile-data-path-archive }}
|
Expand-Archive -Path .\${{ inputs.profile-data-path-archive }} -DestinationPath C:\artifact
|
||||||
7z x zen-*.tar
|
ls
|
||||||
|
|
||||||
- name: Setup
|
- name: Setup
|
||||||
run: |
|
run: |
|
||||||
(New-Object System.Net.WebClient).DownloadFile("https://ftp.mozilla.org/pub/mozilla/libraries/win32/MozillaBuildSetup-Latest.exe","C:\MozillaBuildSetup-Latest.exe")
|
(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
|
C:\MozillaBuildSetup-Latest.exe /S | out-null
|
||||||
|
|
||||||
- name: Download firefox
|
- name: Download firefox
|
||||||
run: |
|
run: |
|
||||||
git config --global core.safecrlf false
|
git config --global core.safecrlf false
|
||||||
pnpm surfer download
|
pnpm surfer download
|
||||||
|
|
||||||
- name: Generate
|
- name: Generate
|
||||||
run: |
|
run: |
|
||||||
ls
|
ls
|
||||||
$Env:USE_MINTTY = "0"
|
$Env:USE_MINTTY = "0"
|
||||||
|
|
||||||
$workspace_dir_current = [regex]::replace($env:GITHUB_WORKSPACE, "^([A-Z]):", { "/" + $args.value.Substring(0, 1).toLower() }) -replace "\\","/"
|
$workspace_dir_current = [regex]::replace($env:GITHUB_WORKSPACE, "^([A-Z]):", { "/" + $args.value.Substring(0, 1).toLower() }) -replace "\\","/"
|
||||||
$workspace_dir = $workspace_dir_current + "/engine"
|
$workspace_dir = $workspace_dir_current + "/engine"
|
||||||
echo $workspace_dir
|
echo $workspace_dir
|
||||||
|
|
||||||
echo "cd $workspace_dir" '' >> mozilla-build-run.sh
|
echo "cd $workspace_dir" '' >> mozilla-build-run.sh
|
||||||
echo 'export PATH=/c/mozilla-build/msys2/usr/bin:$PATH' '' >> mozilla-build-run.sh
|
echo 'export PATH=/c/mozilla-build/msys2/usr/bin:$PATH' '' >> mozilla-build-run.sh
|
||||||
echo './mach --no-interactive bootstrap --application-choice browser' '' >> 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 '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
|
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
|
C:\mozilla-build\start-shell.bat $workspace_dir_current\mozilla-build-run.sh
|
||||||
|
|
||||||
- name: 🐛 Debug Session
|
- name: 🐛 Debug Session
|
||||||
if: ${{ failure() }}
|
if: ${{ failure() }}
|
||||||
uses: Warpbuilds/gha-debug@v1.3
|
uses: Warpbuilds/gha-debug@v1.3
|
||||||
@@ -94,4 +86,3 @@ jobs:
|
|||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
path: en-US-${{ matrix.generic == true && 'generic' || 'specific' }}.log
|
path: en-US-${{ matrix.generic == true && 'generic' || 'specific' }}.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
|
6
.vscode/settings.json
vendored
@@ -13,6 +13,10 @@
|
|||||||
"utility": "cpp",
|
"utility": "cpp",
|
||||||
"variant": "cpp",
|
"variant": "cpp",
|
||||||
"compare": "cpp",
|
"compare": "cpp",
|
||||||
"thread": "cpp"
|
"thread": "cpp",
|
||||||
|
"string": "cpp",
|
||||||
|
"string_view": "cpp",
|
||||||
|
"span": "cpp",
|
||||||
|
"vector": "cpp"
|
||||||
}
|
}
|
||||||
}
|
}
|
28
README.md
@@ -3,15 +3,20 @@
|
|||||||
|
|
||||||
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)
|
||||||
|
|
||||||
|
[](https://ko-fi.com/K3K111FH7H)
|
||||||
<a href='https://flathub.org/apps/io.github.zen_browser.zen'>
|
<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'/>
|
<img width='220' alt='Get it on Flathub' src='https://flathub.org/api/badge?locale=en'/>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
# Compatibility
|
# Compatibility
|
||||||
|
|
||||||
Zen is currently built using firefox version `128.0.3`!
|
Zen is currently built using firefox version `129.0.1`!
|
||||||
|
|
||||||
* 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
|
# Performance
|
||||||
|
|
||||||
@@ -52,19 +57,18 @@ Finally, run the browser!
|
|||||||
npm start
|
npm start
|
||||||
```
|
```
|
||||||
|
|
||||||
## Contributing
|
|
||||||
|
|
||||||
Contributions are always welcome!
|
|
||||||
|
|
||||||
See `contributing.md` for ways to get started.
|
|
||||||
|
|
||||||
Please adhere to this project's `code of conduct`.
|
|
||||||
|
|
||||||
## Special Thanks
|
## Special Thanks
|
||||||
|
|
||||||
- [Erlend](https://havn.blog) (For making the logo)
|
- [IAmJafeth](https://github.com/IAmJafeth) (For sponsoring the domain)
|
||||||
|
- [Donno 🐒](https://www.onnno.nl/) (For making the logo)
|
||||||
- [ptr1337](https://github.com/ptr1337) (AUR Packages and optimization flags)
|
- [ptr1337](https://github.com/ptr1337) (AUR Packages and optimization flags)
|
||||||
|
|
||||||
|
## Third Party Code
|
||||||
|
|
||||||
|
Zen coudn't be in its current state without the help of these amazing projects!
|
||||||
|
|
||||||
|
- Zen's default preferences are based on [BetterFox](https://github.com/yokoffing/Betterfox)
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
[MPL LICENSE](/LICENSE)
|
[MPL LICENSE](/LICENSE)
|
||||||
|
BIN
configs/branding/alpha/firefox.ico
Normal file
After Width: | Height: | Size: 4.3 KiB |
BIN
configs/branding/alpha/firefox64.ico
Normal file
After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 483 KiB After Width: | Height: | Size: 53 KiB |
Before Width: | Height: | Size: 889 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 890 B After Width: | Height: | Size: 624 B |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 951 B |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 156 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 2.6 KiB |
@@ -1,4 +1,4 @@
|
|||||||
<svg width="320" height="130" xmlns="http://www.w3.org/2000/svg">
|
<svg width="320" height="130" xmlns="http://www.w3.org/2000/svg">
|
||||||
<rect width="300" height="100" x="10" y="10" style="fill:rgb(0,0,255);stroke-width:3;stroke:red" />
|
<rect width="300" height="100" x="10" y="10" style="fill:rgb(0,0,255);stroke-width:3;stroke:red" />
|
||||||
Sorry, your browser does not support inline SVG.
|
Sorry, your browser does not support inline SVG.
|
||||||
</svg>
|
</svg>
|
Before Width: | Height: | Size: 225 B After Width: | Height: | Size: 226 B |
BIN
configs/branding/beta/firefox.ico
Normal file
After Width: | Height: | Size: 4.3 KiB |
BIN
configs/branding/beta/firefox64.ico
Normal file
After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 483 KiB After Width: | Height: | Size: 53 KiB |
Before Width: | Height: | Size: 889 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 890 B After Width: | Height: | Size: 624 B |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 951 B |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 156 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 2.6 KiB |
@@ -4,7 +4,6 @@ ac_add_options --with-app-basename=Zen
|
|||||||
ac_add_options --enable-official-branding
|
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}"
|
||||||
@@ -17,10 +16,9 @@ export MOZ_DISTRIBUTION_ID=${appId}
|
|||||||
# ac_add_options --enable-linker=gold
|
# ac_add_options --enable-linker=gold
|
||||||
|
|
||||||
# Misc
|
# Misc
|
||||||
export MOZ_STUB_INSTALLER=1
|
|
||||||
export MOZ_SOURCE_REPO=https://github.com/zen-browser/desktop
|
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-application=browser
|
ac_add_options --enable-application=browser
|
||||||
|
|
||||||
@@ -35,6 +33,8 @@ if test "$ZEN_RELEASE"; then
|
|||||||
ac_add_options --disable-jprof
|
ac_add_options --disable-jprof
|
||||||
|
|
||||||
ac_add_options --enable-rust-simd
|
ac_add_options --enable-rust-simd
|
||||||
|
ac_add_options --enable-wasm-simd
|
||||||
|
|
||||||
mk_add_options MOZ_PARALLEL_COMPILE=1
|
mk_add_options MOZ_PARALLEL_COMPILE=1
|
||||||
|
|
||||||
ac_add_options --enable-proxy-bypass-protection
|
ac_add_options --enable-proxy-bypass-protection
|
||||||
@@ -44,9 +44,9 @@ if test "$ZEN_RELEASE"; then
|
|||||||
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-vtune
|
# Done by vlad, if something fails, it's his fault
|
||||||
|
ac_add_options --disable-default-browser-agent
|
||||||
|
|
||||||
if ! test "$ZEN_DISABLE_LTO"; then
|
if ! test "$ZEN_DISABLE_LTO"; then
|
||||||
export MOZ_LTO=1
|
export MOZ_LTO=1
|
||||||
@@ -94,8 +94,10 @@ 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
|
||||||
|
|
||||||
export MOZ_APP_UA_NAME="Firefox"
|
|
||||||
|
|
||||||
# Allow loading unsigned extensions
|
# Allow loading unsigned extensions
|
||||||
export MOZ_REQUIRE_SIGNING=1
|
export MOZ_REQUIRE_SIGNING=
|
||||||
mk_add_options MOZ_REQUIRE_SIGNING=1
|
mk_add_options MOZ_REQUIRE_SIGNING=
|
||||||
|
|
||||||
|
# Sorry ptr, I didnt mean to!
|
||||||
|
# Edit: ok, ill remove it, goodbye top #1 on fastest browsers benchmark :[
|
||||||
|
# ac_add_options --without-wasm-sandboxed-libraries
|
||||||
|
@@ -13,6 +13,9 @@ if test "$ZEN_RELEASE"; then
|
|||||||
ac_add_options --enable-linker=lld
|
ac_add_options --enable-linker=lld
|
||||||
ac_add_options --disable-elf-hack
|
ac_add_options --disable-elf-hack
|
||||||
|
|
||||||
|
ac_add_options --disable-gpsd
|
||||||
|
ac_add_options --disable-necko-wifi
|
||||||
|
|
||||||
ac_add_options --enable-install-strip
|
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"
|
||||||
@@ -37,15 +40,19 @@ if test "$ZEN_RELEASE"; then
|
|||||||
export RUSTFLAGS="$RUSTFLAGS -C target-cpu=x86-64 -C codegen-units=1"
|
export RUSTFLAGS="$RUSTFLAGS -C target-cpu=x86-64 -C codegen-units=1"
|
||||||
else
|
else
|
||||||
ac_add_options --enable-wasm-avx
|
ac_add_options --enable-wasm-avx
|
||||||
ac_add_options --enable-optimize="-O3 -march=x86-64-v3 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes"
|
ac_add_options --enable-optimize="-O3 -march=x86-64-v3 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes -mpopcnt -mpclmul"
|
||||||
|
|
||||||
export CFLAGS="$CFLAGS -O3 -ffp-contract=fast -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 -mpopcnt -mpclmul"
|
||||||
export CPPFLAGS="$CPPFLAGS -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 -mpopcnt -mpclmul"
|
||||||
export CXXFLAGS="$CXXFLAGS -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 -mpopcnt -mpclmul"
|
||||||
export LDFLAGS="$LDFLAGS -Wl,-O3 -Wl,-mllvm,-fp-contract=fast -march=x86-64-v3"
|
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"
|
export RUSTFLAGS="$RUSTFLAGS -C target-cpu=x86-64-v3 -C target-feature=+sse4.1 -C target-feature=+avx2 -C codegen-units=1"
|
||||||
fi
|
fi
|
||||||
export VERBOSE=1
|
export VERBOSE=1
|
||||||
|
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"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ac_add_options --target=x86_64-pc-linux
|
ac_add_options --target=x86_64-pc-linux
|
||||||
|
|
||||||
|
ac_add_options --enable-alsa
|
||||||
|
ac_add_options --enable-pulseaudio
|
||||||
|
@@ -33,3 +33,4 @@ else
|
|||||||
export RUSTFLAGS="-C target-feature=+v8.3a -C codegen-units=1 -Ctarget-cpu=apple-m1"
|
export RUSTFLAGS="-C target-feature=+v8.3a -C codegen-units=1 -Ctarget-cpu=apple-m1"
|
||||||
fi
|
fi
|
||||||
export VERBOSE=1
|
export VERBOSE=1
|
||||||
|
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"
|
||||||
|
@@ -14,8 +14,8 @@ if test "$ZEN_CROSS_COMPILING"; then
|
|||||||
CROSS_COMPILE=1
|
CROSS_COMPILE=1
|
||||||
TOOLS=$(echo ~)/win-cross
|
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="$(echo ~)/win-cross/vs2022/Windows Kits/10/Redist/10.0.22621.0/ucrt/DLLs/x64"
|
||||||
#export WIN_UCRT_REDIST_DIR="$TOOLS/vs2022/Windows Kits/10/Redist/10.0.22621.0/ucrt/DLLs/x64"
|
export WIN32_REDIST_DIR="$(echo ~)/win-cross/vs2022/VC/Redist/MSVC/14.38.33135/x64/Microsoft.VC143.CRT"
|
||||||
|
|
||||||
export MIDL="$TOOLS/wine/bin/widl"
|
export MIDL="$TOOLS/wine/bin/widl"
|
||||||
export MOZ_INCLUDE_SOURCE_INFO=1
|
export MOZ_INCLUDE_SOURCE_INFO=1
|
||||||
@@ -32,24 +32,22 @@ ac_add_options --target=x86_64-pc-windows-msvc
|
|||||||
ac_add_options --disable-maintenance-service
|
ac_add_options --disable-maintenance-service
|
||||||
ac_add_options --disable-bits-download
|
ac_add_options --disable-bits-download
|
||||||
|
|
||||||
ac_add_options --without-wasm-sandboxed-libraries
|
|
||||||
|
|
||||||
if test "$SURFER_COMPAT" = "true"; then
|
if test "$SURFER_COMPAT" = "true"; then
|
||||||
ac_add_options --enable-optimize="-O3 -mavx -maes -w -ftree-vectorize"
|
ac_add_options --enable-optimize="-O2 -Qvec -mtune=haswell -march=x86-64 -w"
|
||||||
|
|
||||||
export CFLAGS="-mavx -maes -mtune=haswell -march=x86-64"
|
export CFLAGS="-mtune=haswell -march=x86-64 -O2 -Qvec -w"
|
||||||
export CPPFLAGS="-mavx -maes -mtune=haswell -march=x86-64"
|
export CPPFLAGS="-mtune=haswell -march=x86-64 -O2 -Qvec -w"
|
||||||
export CXXFLAGS="-mavx -maes -mtune=haswell -march=x86-64"
|
export CXXFLAGS="-mtune=haswell -march=x86-64 -O2 -Qvec -w"
|
||||||
export LDFLAGS="-Wl,-O3"
|
export LDFLAGS="-Wl,-O2"
|
||||||
export RUSTFLAGS="-C target-feature=+avx -C codegen-units=1 -Ctarget-cpu=x86-64"
|
export RUSTFLAGS="-C codegen-units=1 -Ctarget-cpu=x86-64"
|
||||||
else
|
else
|
||||||
ac_add_options --enable-optimize="-O2 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes -Xclang -ftree-vectorize -w"
|
ac_add_options --enable-optimize="-O2 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes -Xclang -w"
|
||||||
ac_add_options --enable-wasm-avx
|
ac_add_options --enable-wasm-avx
|
||||||
|
|
||||||
export CFLAGS="-O2 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes /arch:AVX -march=x86-64-v3"
|
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 /arch:AVX -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 /arch:AVX -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 LDFLAGS="-Wl,-O3 -march=x86-64-v3"
|
||||||
export RUSTFLAGS="-C target-feature=+avx -C codegen-units=1 -Ctarget-cpu=x86-64-v3"
|
export RUSTFLAGS="-C target-feature=+avx -C codegen-units=1 -Ctarget-cpu=x86-64-v3"
|
||||||
fi
|
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 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"
|
||||||
|
19
docs/key-shortcuts.md
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
|
||||||
|
# Custom Keyboard Shortcuts
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"<shortcut-id>": {
|
||||||
|
"key": "<key>",
|
||||||
|
"alt": false,
|
||||||
|
"shift": false,
|
||||||
|
"ctrl": false,
|
||||||
|
"meta": false,
|
||||||
|
"keycode": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The `key` field is the key that will trigger the shortcut. The `alt`, `shift`, `ctrl`, and `meta` fields are booleans that indicate if the respective modifier key should be pressed when the shortcut is triggered.
|
||||||
|
|
||||||
|
The `keycode` field is the keycode of the key that will trigger the shortcut. This field is optional and can be used to specify the keycode of the key that will trigger the shortcut. If the `keycode` field is specified, the `key` field will be ignored.
|
@@ -1,30 +1,4 @@
|
|||||||
# 🌀 Zen Browser Performance traker
|
# 🌀 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
|
## Scores
|
||||||
|
|
||||||
@@ -39,6 +13,8 @@ https://web.basemark.com/
|
|||||||
|
|
||||||
| | score: |CSS | HTML5 | Page load and Responsiveness | Resize Cap. |
|
| | score: |CSS | HTML5 | Page load and Responsiveness | Resize Cap. |
|
||||||
|-----------|-----|-----|-------|------------------------------|-------------|
|
|-----------|-----|-----|-------|------------------------------|-------------|
|
||||||
|
| 1.0.0-a.15-opt | 2141.63 | 59% | 91% | 90% | 76% |
|
||||||
|
| 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.12-opt | 1874.49 | 59% | 91% | 91% | 76% |
|
||||||
| 1.0.0-a.11-opt | 1678.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.10 | 1660.89 | 59% | 91% | 91% | 76% |
|
||||||
@@ -56,10 +32,10 @@ https://web.basemark.com/
|
|||||||
```mermaid
|
```mermaid
|
||||||
xychart-beta
|
xychart-beta
|
||||||
title "Performance over time (Higher is better)"
|
title "Performance over time (Higher is better)"
|
||||||
x-axis [.3, .4, .6, .7, .8, .9, .10, .11, .12]
|
x-axis [.3, .4, .6, .7, .8, .9, .10, .11, .12, .13, .15]
|
||||||
y-axis "Benchmark Points"
|
y-axis "Benchmark Points"
|
||||||
bar [475.52, 470.49, 1747.98, 1964.43, 446.74, 470, 1660.89, 1678.49, 1874.49]
|
bar [475.52, 470.49, 1747.98, 1964.43, 446.74, 470, 1660.89, 1678.49, 1874.49, 1658.87, 2141.63]
|
||||||
line [475.52, 470.49, 1747.98, 1964.43, 446.74, 470, 1660.89, 1678.49, 1874.49]
|
line [475.52, 470.49, 1747.98, 1964.43, 446.74, 470, 1660.89, 1678.49, 1874.49, 1658.87, 2141.63]
|
||||||
```
|
```
|
||||||
|
|
||||||
## Speedometer3.0
|
## Speedometer3.0
|
||||||
@@ -68,6 +44,8 @@ https://browserbench.org/Speedometer3.0/
|
|||||||
|
|
||||||
| | score: |
|
| | score: |
|
||||||
|-----------|-----|
|
|-----------|-----|
|
||||||
|
| 1.0.0-a.15-opt | TODO |
|
||||||
|
| 1.0.0-a.13-opt | 21.1 |
|
||||||
| 1.0.0-a.12-opt | 21.5 |
|
| 1.0.0-a.12-opt | 21.5 |
|
||||||
| 1.0.0-a.11-opt | 20.8 |
|
| 1.0.0-a.11-opt | 20.8 |
|
||||||
| 1.0.0-a.10 | 21.2 |
|
| 1.0.0-a.10 | 21.2 |
|
||||||
@@ -76,24 +54,7 @@ https://browserbench.org/Speedometer3.0/
|
|||||||
| FF nightly 130.0a1 | 27.0 |
|
| FF nightly 130.0a1 | 27.0 |
|
||||||
| Librewolf 128.0-2 | 20.2 |
|
| Librewolf 128.0-2 | 20.2 |
|
||||||
|
|
||||||
|
## Repository View Counter
|
||||||
|
|
||||||
## 2
|
<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>
|
||||||
|
|
||||||
- [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/
|
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
# Workspaces Layout
|
# Workspaces Layout
|
||||||
|
|
||||||
```
|
```json
|
||||||
{
|
{
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
{
|
{
|
||||||
|
@@ -29,7 +29,7 @@ modules:
|
|||||||
|
|
||||||
- install -Dm0755 metadata/launch-script.sh ${{FLATPAK_DEST}}/bin/launch-script.sh
|
- 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/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/icons/io.github.zen_browser.zen.svg ${{FLATPAK_DEST}}/share/icons/hicolor/scalable/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.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
|
- install -Dm0644 metadata/io.github.zen_browser.zen.desktop ${{FLATPAK_DEST}}/share/applications/${{FLATPAK_ID}}.desktop
|
||||||
|
|
||||||
|
3402
package-lock.json
generated
Normal file
@@ -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.2.7"
|
"@zen-browser/surfer": "^1.2.12"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
10
pnpm-lock.yaml
generated
@@ -9,8 +9,8 @@ importers:
|
|||||||
.:
|
.:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@zen-browser/surfer':
|
'@zen-browser/surfer':
|
||||||
specifier: ^1.2.7
|
specifier: ^1.2.12
|
||||||
version: 1.2.7
|
version: 1.2.12
|
||||||
|
|
||||||
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.2.7':
|
'@zen-browser/surfer@1.2.12':
|
||||||
resolution: {integrity: sha512-VbbbB7crGXrdfk1PPnlsWFWErwjtccXbRuw5mOQzY327d2t5VraxmkqTzcuGSTxpu3CR/KvzNu0gDg/6+7b4NQ==}
|
resolution: {integrity: sha512-TfJrUc7P3pu0pf79UF3kL5fSjB5lVl5mqNnV+aOJWRsotvujlfX2tIVuIKTtCJvDeoZwvoAwlpogMZh3V5dcmQ==}
|
||||||
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.2.7':
|
'@zen-browser/surfer@1.2.12':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@resvg/resvg-js': 1.4.0
|
'@resvg/resvg-js': 1.4.0
|
||||||
async-icns: 1.0.2
|
async-icns: 1.0.2
|
||||||
|
@@ -1,3 +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/.
|
||||||
//
|
//
|
||||||
/* You may copy+paste this file and use it as it is.
|
/* You may copy+paste this file and use it as it is.
|
||||||
*
|
*
|
||||||
@@ -18,7 +21,7 @@
|
|||||||
* SECTION: FASTFOX *
|
* SECTION: FASTFOX *
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
/** GENERAL ***/
|
/** GENERAL ***/
|
||||||
pref("content.notify.interval", 100000);
|
pref("content.notify.interval", 100000); // (.10s); alt=500000 (.50s)
|
||||||
|
|
||||||
/** GFX ***/
|
/** GFX ***/
|
||||||
pref("gfx.canvas.accelerated.cache-items", 4096);
|
pref("gfx.canvas.accelerated.cache-items", 4096);
|
||||||
@@ -29,9 +32,9 @@ pref("gfx.content.skia-font-cache-size", 20);
|
|||||||
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", 512000); // alt=512000; also in Securefox (inactive there)
|
||||||
pref("media.cache_readahead_limit", 7200);
|
pref("media.cache_readahead_limit", 9000); // default=60; stop reading ahead when our buffered data is this many seconds ahead of the current playback
|
||||||
pref("media.cache_resume_threshold", 3600);
|
pref("media.cache_resume_threshold", 6000); // default=30; when a network connection is suspended, don't resume it until the amount of buffered data falls below this threshold (in seconds)
|
||||||
|
|
||||||
/** IMAGE CACHE ***/
|
/** IMAGE CACHE ***/
|
||||||
pref("image.mem.decode_bytes_at_a_time", 32768);
|
pref("image.mem.decode_bytes_at_a_time", 32768);
|
||||||
@@ -42,14 +45,13 @@ pref("network.http.max-persistent-connections-per-server", 10);
|
|||||||
pref("network.http.max-urgent-start-excessive-connections-per-host", 5);
|
pref("network.http.max-urgent-start-excessive-connections-per-host", 5);
|
||||||
pref("network.http.pacing.requests.enabled", false);
|
pref("network.http.pacing.requests.enabled", false);
|
||||||
pref("network.dnsCacheExpiration", 3600);
|
pref("network.dnsCacheExpiration", 3600);
|
||||||
pref("network.ssl_tokens_cache_capacity", 10240);
|
pref("network.http.max-persistent-connections-per-proxy", 48); // default=32
|
||||||
|
pref("network.websocket.max-connections", 400); // default=200
|
||||||
|
pref("network.ssl_tokens_cache_capacity", 32768);
|
||||||
|
|
||||||
/** SPECULATIVE LOADING ***/
|
/** MIXED CONTENT + CROSS-SITE ***/
|
||||||
pref("network.dns.disablePrefetch", true);
|
pref("pdfjs.enableScripting", false);
|
||||||
pref("network.dns.disablePrefetchFromHTTPS", true);
|
pref("extensions.postDownloadThirdPartyPrompt", 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);
|
||||||
@@ -60,14 +62,12 @@ pref("dom.security.sanitizer.enabled", true);
|
|||||||
* SECTION: SECUREFOX *
|
* SECTION: SECUREFOX *
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
/** TRACKING PROTECTION ***/
|
/** TRACKING PROTECTION ***/
|
||||||
pref("browser.contentblocking.category", "strict");
|
|
||||||
pref("urlclassifier.trackingSkipURLs", "*.reddit.com, *.twitter.com, *.twimg.com, *.tiktok.com");
|
pref("urlclassifier.trackingSkipURLs", "*.reddit.com, *.twitter.com, *.twimg.com, *.tiktok.com");
|
||||||
pref("urlclassifier.features.socialtracking.skipURLs", "*.instagram.com, *.twitter.com, *.twimg.com");
|
pref("urlclassifier.features.socialtracking.skipURLs", "*.instagram.com, *.twitter.com, *.twimg.com");
|
||||||
pref("network.cookie.sameSite.noneRequiresSecure", true);
|
pref("network.cookie.sameSite.noneRequiresSecure", true);
|
||||||
pref("browser.download.start_downloads_in_tmp_dir", true);
|
pref("browser.download.start_downloads_in_tmp_dir", true);
|
||||||
pref("browser.helperApps.deleteTempFileOnExit", true);
|
pref("browser.helperApps.deleteTempFileOnExit", true);
|
||||||
pref("browser.uitour.enabled", false);
|
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);
|
||||||
@@ -117,27 +117,27 @@ pref("permissions.manager.defaultsUrl", "");
|
|||||||
pref("webchannel.allowObject.urlWhitelist", "");
|
pref("webchannel.allowObject.urlWhitelist", "");
|
||||||
|
|
||||||
/** TELEMETRY ***/
|
/** TELEMETRY ***/
|
||||||
pref("datareporting.policy.dataSubmissionEnabled", false);
|
pref("datareporting.policy.dataSubmissionEnabled", false, locked);
|
||||||
pref("datareporting.healthreport.uploadEnabled", false);
|
pref("datareporting.healthreport.uploadEnabled", false, locked);
|
||||||
pref("toolkit.telemetry.unified", false);
|
pref("toolkit.telemetry.unified", false, locked);
|
||||||
pref("toolkit.telemetry.enabled", false);
|
pref("toolkit.telemetry.enabled", false, locked);
|
||||||
pref("toolkit.telemetry.server", "data:,");
|
pref("toolkit.telemetry.server", "data:,", locked);
|
||||||
pref("toolkit.telemetry.archive.enabled", false);
|
pref("toolkit.telemetry.archive.enabled", false, locked);
|
||||||
pref("toolkit.telemetry.newProfilePing.enabled", false);
|
pref("toolkit.telemetry.newProfilePing.enabled", false, locked);
|
||||||
pref("toolkit.telemetry.shutdownPingSender.enabled", false);
|
pref("toolkit.telemetry.shutdownPingSender.enabled", false, locked);
|
||||||
pref("toolkit.telemetry.updatePing.enabled", false);
|
pref("toolkit.telemetry.updatePing.enabled", false, locked);
|
||||||
pref("toolkit.telemetry.bhrPing.enabled", false);
|
pref("toolkit.telemetry.bhrPing.enabled", false, locked);
|
||||||
pref("toolkit.telemetry.firstShutdownPing.enabled", false);
|
pref("toolkit.telemetry.firstShutdownPing.enabled", false, locked);
|
||||||
pref("toolkit.telemetry.coverage.opt-out", true);
|
pref("toolkit.telemetry.coverage.opt-out", true, locked);
|
||||||
pref("toolkit.coverage.opt-out", true);
|
pref("toolkit.coverage.opt-out", true, locked);
|
||||||
pref("toolkit.coverage.endpoint.base", "");
|
pref("toolkit.coverage.endpoint.base", "", locked);
|
||||||
pref("browser.newtabpage.activity-stream.feeds.telemetry", false);
|
pref("browser.newtabpage.activity-stream.feeds.telemetry", false, locked);
|
||||||
pref("browser.newtabpage.activity-stream.telemetry", false);
|
pref("browser.newtabpage.activity-stream.telemetry", false, locked);
|
||||||
|
|
||||||
/** EXPERIMENTS ***/
|
/** EXPERIMENTS ***/
|
||||||
pref("app.shield.optoutstudies.enabled", false);
|
pref("app.shield.optoutstudies.enabled", false, locked);
|
||||||
pref("app.normandy.enabled", false);
|
pref("app.normandy.enabled", false, locked);
|
||||||
pref("app.normandy.api_url", "");
|
pref("app.normandy.api_url", "", locked);
|
||||||
|
|
||||||
/** CRASH REPORTS ***/
|
/** CRASH REPORTS ***/
|
||||||
pref("breakpad.reportURL", "");
|
pref("breakpad.reportURL", "");
|
||||||
@@ -154,7 +154,7 @@ pref("dom.private-attribution.submission.enabled", false);
|
|||||||
* SECTION: PESKYFOX *
|
* SECTION: PESKYFOX *
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
/** MOZILLA UI ***/
|
/** MOZILLA UI ***/
|
||||||
pref("browser.privatebrowsing.vpnpromourl", "");
|
pref("browser.privatebrowsing.vpnpromourl", "", locked);
|
||||||
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);
|
||||||
|
@@ -61,16 +61,27 @@ pref("toolkit.telemetry.pioneer-new-studies-available", false);
|
|||||||
pref('zen.welcomeScreen.enabled', true);
|
pref('zen.welcomeScreen.enabled', true);
|
||||||
pref('zen.welcomeScreen.seen', false);
|
pref('zen.welcomeScreen.seen', false);
|
||||||
pref('zen.tabs.vertical', true);
|
pref('zen.tabs.vertical', true);
|
||||||
|
pref('zen.tabs.vertical.right-side', false);
|
||||||
pref('zen.theme.accent-color', "#aac7ff");
|
pref('zen.theme.accent-color', "#aac7ff");
|
||||||
|
pref('zen.theme.border-radius', 10); // In pixels
|
||||||
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.on-hover', 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('zen.view.sidebar-expanded.max-width', 400);
|
||||||
|
|
||||||
|
pref('zen.view.sidebar-collapsed.hide-mute-button', true);
|
||||||
|
|
||||||
|
pref('zen.keyboard.shortcuts.enabled', true);
|
||||||
|
pref('zen.keyboard.shortcuts', ""); // Empty string means default shortcuts
|
||||||
|
pref('zen.keyboard.shortcuts.disable-firefox', false);
|
||||||
|
pref('zen.tabs.dim-pending', true);
|
||||||
|
pref('zen.themes.updated-value-observer', false);
|
||||||
|
|
||||||
// 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);
|
||||||
|
|
||||||
@@ -86,7 +97,7 @@ pref('zen.splitView.working', false);
|
|||||||
pref('zen.workspaces.enabled', true);
|
pref('zen.workspaces.enabled', true);
|
||||||
|
|
||||||
// Zen Watermark
|
// Zen Watermark
|
||||||
pref('zen.watermark.enabled', true);
|
pref('zen.watermark.enabled', true, sticky);
|
||||||
|
|
||||||
// Smooth scrolling
|
// Smooth scrolling
|
||||||
pref('apz.overscroll.enabled', true); // not DEFAULT on Linux
|
pref('apz.overscroll.enabled', true); // not DEFAULT on Linux
|
||||||
@@ -98,10 +109,10 @@ pref('dom.private-attribution.submission.enabled', false);
|
|||||||
pref('media.eme.enabled', true);
|
pref('media.eme.enabled', true);
|
||||||
pref('webgl.disabled', false);
|
pref('webgl.disabled', false);
|
||||||
|
|
||||||
pref("app.update.url.manual", "https://get-zen.vercel.app/download");
|
pref("app.update.url.manual", "https://www.zen-browser.app/download");
|
||||||
pref("app.update.url.details", "hhttps://get-zen.vercel.app/download");
|
pref("app.update.url.details", "hhttps://www.zen-browser.app/download");
|
||||||
pref("app.releaseNotesURL", "https://get-zen.vercel.app/release-notes");
|
pref("app.releaseNotesURL", "https://www.zen-browser.app/release-notes");
|
||||||
pref("app.releaseNotesURL.aboutDialog", "https://get-zen.vercel.app/release-notes");
|
pref("app.releaseNotesURL.aboutDialog", "https://www.zen-browser.app/release-notes");
|
||||||
|
|
||||||
// Enable importers for other browsers
|
// Enable importers for other browsers
|
||||||
pref('browser.migrate.vivaldi.enabled', true);
|
pref('browser.migrate.vivaldi.enabled', true);
|
||||||
@@ -112,4 +123,42 @@ pref('browser.migrate.opera.enabled', true);
|
|||||||
// pref('network.proxy.type', 0);
|
// pref('network.proxy.type', 0);
|
||||||
// pref('network.trr.mode', 5);
|
// pref('network.trr.mode', 5);
|
||||||
|
|
||||||
|
pref('xpinstall.signatures.required', false);
|
||||||
|
|
||||||
|
// Experimental Zen Features
|
||||||
|
// Strategy to use for bytecode cache (Thanks https://github.com/gunir)
|
||||||
|
pref('dom.script_loader.bytecode_cache.strategy', 2);
|
||||||
|
|
||||||
|
// Extremly experimental features
|
||||||
|
pref("dom.webgpu.enabled", true);
|
||||||
|
|
||||||
|
// Font rendering
|
||||||
|
pref('gfx.font_rendering.cleartype_params.rendering_mode', 5);
|
||||||
|
pref('gfx.font_rendering.cleartype_params.gamma', 1750);
|
||||||
|
|
||||||
#include better-fox.js
|
#include better-fox.js
|
||||||
|
|
||||||
|
// Betterfox overrides (Stay below the include directive)
|
||||||
|
|
||||||
|
// Jang's personal speedups (Thanks to Jang for these!)
|
||||||
|
|
||||||
|
// Prefetching:
|
||||||
|
pref("network.dns.disablePrefetch", false);
|
||||||
|
pref("network.prefetch-next", true);
|
||||||
|
pref("network.predictor.enabled", true);
|
||||||
|
pref("network.dns.disablePrefetchFromHTTPS", false);
|
||||||
|
pref("network.predictor.enable-hover-on-ssl", true);
|
||||||
|
pref("network.http.speculative-parallel-limit", 10);
|
||||||
|
pref("network.http.rcwn.enabled", false);
|
||||||
|
|
||||||
|
// Enable Browser Toolbox, Ctrl+Shift+Alt+I for debugging and modifying UI
|
||||||
|
pref("devtools.debugger.remote-enabled", true);
|
||||||
|
pref("devtools.chrome.enabled", true);
|
||||||
|
|
||||||
|
// Disable firefox's revamp
|
||||||
|
pref("sidebar.revamp", false, locked);
|
||||||
|
pref("sidebar.verticalTabs", false, locked);
|
||||||
|
|
||||||
|
// Better Windows theming
|
||||||
|
pref("widget.non-native-theme.scrollbar.style", 2);
|
||||||
|
pref("widget.non-native-theme.use-theme-accent", true);
|
||||||
|
@@ -1,551 +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);
|
|
||||||
},
|
|
||||||
|
|
||||||
get shouldCloseOnBlur() {
|
|
||||||
return Services.prefs.getBoolPref("zen.sidebar.close-on-blur");
|
|
||||||
},
|
|
||||||
|
|
||||||
listenForPrefChanges() {
|
|
||||||
Services.prefs.addObserver("zen.sidebar.data", this.handleEvent.bind(this));
|
|
||||||
Services.prefs.addObserver("zen.sidebar.enabled", 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();
|
|
||||||
},
|
|
||||||
|
|
||||||
get isFloating() {
|
|
||||||
return document.getElementById("zen-sidebar-web-panel").hasAttribute("pinned");
|
|
||||||
},
|
|
||||||
|
|
||||||
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);
|
|
||||||
let isFloating = this.isFloating;
|
|
||||||
if (isFloating && !this._hasRegisteredPinnedClickOutside) {
|
|
||||||
document.addEventListener("mouseup", clickOutsideHandler);
|
|
||||||
this._hasRegisteredPinnedClickOutside = true;
|
|
||||||
} else if (!isFloating && 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._isDragging || !this.shouldCloseOnBlur) {
|
|
||||||
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();
|
|
||||||
}
|
|
||||||
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._currentPanel = null;
|
|
||||||
this._lastOpenedPanel = null;
|
|
||||||
this.update();
|
|
||||||
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();
|
|
106
src/browser/base/content/ZenStartup.mjs
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
|
||||||
|
var ZenStartup = {
|
||||||
|
init() {
|
||||||
|
this._changeSidebarLocation();
|
||||||
|
this._zenInitBrowserLayout();
|
||||||
|
},
|
||||||
|
|
||||||
|
_zenInitBrowserLayout() {
|
||||||
|
if (this.__hasInitBrowserLayout) return;
|
||||||
|
this.__hasInitBrowserLayout = true;
|
||||||
|
this.openWatermark();
|
||||||
|
console.info("ZenThemeModifier: init browser layout");
|
||||||
|
const kNavbarItems = [
|
||||||
|
"nav-bar",
|
||||||
|
"PersonalToolbar"
|
||||||
|
];
|
||||||
|
const kNewContainerId = "zen-appcontent-navbar-container";
|
||||||
|
let newContainer = document.getElementById(kNewContainerId);
|
||||||
|
for (let id of kNavbarItems) {
|
||||||
|
const node = document.getElementById(id);
|
||||||
|
console.assert(node, "Could not find node with id: " + id);
|
||||||
|
if (!node) continue;
|
||||||
|
newContainer.appendChild(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fix notification deck
|
||||||
|
document.getElementById("zen-appcontent-navbar-container")
|
||||||
|
.appendChild(document.getElementById("tab-notification-deck-template"));
|
||||||
|
|
||||||
|
gZenVerticalTabsManager.init();
|
||||||
|
gZenCompactModeManager.init();
|
||||||
|
gZenKeyboardShortcuts.init();
|
||||||
|
|
||||||
|
function throttle(f, delay) {
|
||||||
|
let timer = 0;
|
||||||
|
return function(...args) {
|
||||||
|
clearTimeout(timer);
|
||||||
|
timer = setTimeout(() => f.apply(this, args), delay);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
new ResizeObserver(throttle(
|
||||||
|
this._updateTabsToolbar.bind(this), 1000
|
||||||
|
)).observe(document.getElementById("tabbrowser-tabs"));
|
||||||
|
|
||||||
|
this.closeWatermark();
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateTabsToolbar() {
|
||||||
|
// Set tabs max-height to the "toolbar-items" height
|
||||||
|
const toolbarItems = document.getElementById("tabbrowser-tabs");
|
||||||
|
const tabs = document.getElementById("tabbrowser-arrowscrollbox");
|
||||||
|
tabs.style.maxHeight = '0px'; // reset to 0
|
||||||
|
const toolbarRect = toolbarItems.getBoundingClientRect();
|
||||||
|
// -5 for the controls padding
|
||||||
|
tabs.style.maxHeight = toolbarRect.height - 5 + "px";
|
||||||
|
console.info("ZenThemeModifier: set tabs max-height to", toolbarRect.height + "px");
|
||||||
|
},
|
||||||
|
|
||||||
|
openWatermark() {
|
||||||
|
if (!Services.prefs.getBoolPref("zen.watermark.enabled", false)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const watermark = window.MozXULElement.parseXULToFragment(`
|
||||||
|
<html:div id="zen-watermark">
|
||||||
|
<image src="chrome://branding/content/about-logo.png" />
|
||||||
|
</html:div>
|
||||||
|
`);
|
||||||
|
document.body.appendChild(watermark);
|
||||||
|
},
|
||||||
|
|
||||||
|
closeWatermark() {
|
||||||
|
const watermark = document.getElementById("zen-watermark");
|
||||||
|
if (watermark) {
|
||||||
|
watermark.setAttribute("hidden", "true");
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_changeSidebarLocation() {
|
||||||
|
const kElementsToAppend = [
|
||||||
|
"sidebar-splitter",
|
||||||
|
"sidebar-box",
|
||||||
|
"navigator-toolbox",
|
||||||
|
];
|
||||||
|
const wrapper = document.getElementById("zen-tabbox-wrapper");
|
||||||
|
const appWrapepr = document.getElementById("zen-sidebar-box-container");
|
||||||
|
for (let id of kElementsToAppend) {
|
||||||
|
const elem = document.getElementById(id);
|
||||||
|
if (elem) {
|
||||||
|
wrapper.prepend(elem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
appWrapepr.setAttribute("hidden", "true");
|
||||||
|
|
||||||
|
// Set a splitter to navigator-toolbox
|
||||||
|
const splitter = document.createXULElement("splitter");
|
||||||
|
splitter.setAttribute("id", "zen-sidebar-splitter");
|
||||||
|
splitter.setAttribute("orient", "horizontal");
|
||||||
|
splitter.setAttribute("resizebefore", "sibling");
|
||||||
|
splitter.setAttribute("resizeafter", "none");
|
||||||
|
const titlebar = document.getElementById("navigator-toolbox");
|
||||||
|
titlebar.insertAdjacentElement("afterend", splitter);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
ZenStartup.init();
|
@@ -28,7 +28,35 @@ var gZenVerticalTabsManager = {
|
|||||||
//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));
|
Services.prefs.addObserver('zen.view.sidebar-expanded.max-width', this._updateEvent.bind(this));
|
||||||
|
Services.prefs.addObserver('zen.view.sidebar-expanded.on-hover', this._updateOnHoverVerticalTabs.bind(this));
|
||||||
this._updateMaxWidth();
|
this._updateMaxWidth();
|
||||||
|
this.initRightSideOrderContextMenu();
|
||||||
|
this._updateOnHoverVerticalTabs();
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateOnHoverVerticalTabs() {
|
||||||
|
let onHover = Services.prefs.getBoolPref('zen.view.sidebar-expanded.on-hover');
|
||||||
|
let sidebar = document.getElementById('navigator-toolbox');
|
||||||
|
if (onHover) {
|
||||||
|
sidebar.setAttribute('zen-user-hover', 'true');
|
||||||
|
} else {
|
||||||
|
sidebar.removeAttribute('zen-user-hover');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
initRightSideOrderContextMenu() {
|
||||||
|
const kConfigKey = 'zen.tabs.vertical.right-side';
|
||||||
|
const fragment = window.MozXULElement.parseXULToFragment(`
|
||||||
|
<menuitem id="zen-toolbar-context-tabs-right"
|
||||||
|
type="checkbox"
|
||||||
|
${Services.prefs.getBoolPref(kConfigKey) ? 'checked="true"' : ''}
|
||||||
|
data-lazy-l10n-id="zen-toolbar-context-tabs-right"/>
|
||||||
|
`);
|
||||||
|
fragment.getElementById("zen-toolbar-context-tabs-right").addEventListener('click', () => {
|
||||||
|
let rightSide = Services.prefs.getBoolPref(kConfigKey);
|
||||||
|
Services.prefs.setBoolPref(kConfigKey, !rightSide);
|
||||||
|
});
|
||||||
|
document.getElementById('viewToolbarsMenuSeparator').before(fragment);
|
||||||
},
|
},
|
||||||
|
|
||||||
_updateEvent() {
|
_updateEvent() {
|
||||||
@@ -73,5 +101,38 @@ 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);
|
||||||
|
Services.prefs.setBoolPref('zen.view.sidebar-expanded.on-hover', false);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var gZenCompactModeManager = {
|
||||||
|
init() {
|
||||||
|
Services.prefs.addObserver('zen.view.compact', this._updateEvent.bind(this));
|
||||||
|
},
|
||||||
|
|
||||||
|
get prefefence() {
|
||||||
|
return Services.prefs.getBoolPref('zen.view.compact');
|
||||||
|
},
|
||||||
|
|
||||||
|
set preference(value) {
|
||||||
|
Services.prefs.setBoolPref('zen.view.compact', value);
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateEvent() {
|
||||||
|
Services.prefs.setBoolPref('zen.view.sidebar-expanded.on-hover', false);
|
||||||
|
},
|
||||||
|
|
||||||
|
toggle() {
|
||||||
|
this.preference = !this.prefefence;
|
||||||
|
},
|
||||||
|
|
||||||
|
toggleSidebar() {
|
||||||
|
let sidebar = document.getElementById('navigator-toolbox');
|
||||||
|
sidebar.toggleAttribute('zen-user-show');
|
||||||
|
},
|
||||||
|
|
||||||
|
toggleToolbar() {
|
||||||
|
let toolbar = document.getElementById('zen-appcontent-navbar-container');
|
||||||
|
toolbar.toggleAttribute('zen-user-show');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
@@ -1,305 +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);
|
|
||||||
// console.log("Setting the active tab to be active", gBrowser.selectedTab);
|
|
||||||
gBrowser.selectedTab.linkedBrowser.docShellIsActive = true; // Make sure the active tab is active
|
|
||||||
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,426 +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, {
|
|
||||||
animate: true,
|
|
||||||
skipSessionStore: true,
|
|
||||||
closeWindowWithLastTab: false,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_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 || workspaces.workspaces.find(workspace => workspace.uuid === this._contextMenuId).default) {
|
|
||||||
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,12 +1,13 @@
|
|||||||
diff --git a/browser/base/content/browser-init.js b/browser/base/content/browser-init.js
|
diff --git a/browser/base/content/browser-init.js b/browser/base/content/browser-init.js
|
||||||
index a79a9734619f89639c15087fe28e9615354a7209..edaef604d33d76b570571e1bbb2ebc590e045d87 100644
|
index f8d49ac2a3a62f389ea44b07a26fcb102abc0b24..c29415e10c776ebc435f33e55f8afb71f0dcf22a 100644
|
||||||
--- a/browser/base/content/browser-init.js
|
--- a/browser/base/content/browser-init.js
|
||||||
+++ b/browser/base/content/browser-init.js
|
+++ b/browser/base/content/browser-init.js
|
||||||
@@ -237,6 +237,9 @@ var gBrowserInit = {
|
@@ -237,6 +237,10 @@ var gBrowserInit = {
|
||||||
gPrivateBrowsingUI.init();
|
gPrivateBrowsingUI.init();
|
||||||
BrowserSearch.init();
|
BrowserSearch.init();
|
||||||
BrowserPageActions.init();
|
BrowserPageActions.init();
|
||||||
+
|
+
|
||||||
|
+ Services.scriptloader.loadSubScript("chrome://browser/content/ZenStartup.mjs", window);
|
||||||
+ Services.scriptloader.loadSubScript("chrome://browser/content/zenThemeModifier.js", window);
|
+ Services.scriptloader.loadSubScript("chrome://browser/content/zenThemeModifier.js", window);
|
||||||
+
|
+
|
||||||
if (gToolbarKeyNavEnabled) {
|
if (gToolbarKeyNavEnabled) {
|
||||||
|
@@ -1,32 +0,0 @@
|
|||||||
diff --git a/browser/base/content/browser-siteProtections.js b/browser/base/content/browser-siteProtections.js
|
|
||||||
index 5364aa74cd938141e85e3a3333e8d1fa58ea3ae4..5cd1748a883b19caa2977c1047d51b9551686bf4 100644
|
|
||||||
--- a/browser/base/content/browser-siteProtections.js
|
|
||||||
+++ b/browser/base/content/browser-siteProtections.js
|
|
||||||
@@ -1904,9 +1904,14 @@ var gProtectionsHandler = {
|
|
||||||
// the information contained there would mostly be broken and/or
|
|
||||||
// irrelevant anyway.
|
|
||||||
this._trackingProtectionIconContainer.hidden = true;
|
|
||||||
+ // ZEN: We make a clear distinction between native UI and websites for security reasons.
|
|
||||||
+ // we can remove the separator for websites that dont need it, like "about:*" pages, where
|
|
||||||
+ // they are safe to use.
|
|
||||||
+ this._nativeSeparatorForWebsitesContainer.hidden = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this._trackingProtectionIconContainer.hidden = false;
|
|
||||||
+ this._nativeSeparatorForWebsitesContainer.hidden = false;
|
|
||||||
|
|
||||||
// Check whether the user has added an exception for this site.
|
|
||||||
this.hasException = ContentBlockingAllowList.includes(
|
|
||||||
@@ -2882,4 +2887,12 @@ var gProtectionsHandler = {
|
|
||||||
|
|
||||||
return messageEl;
|
|
||||||
},
|
|
||||||
+
|
|
||||||
+ get _nativeSeparatorForWebsitesContainer() {
|
|
||||||
+ delete this._nativeSeparatorForWebsitesContainer;
|
|
||||||
+ return (this._nativeSeparatorForWebsitesContainer = document.getElementById(
|
|
||||||
+ "zen-website-and-native-separator"
|
|
||||||
+ ));
|
|
||||||
+ },
|
|
||||||
+
|
|
||||||
};
|
|
@@ -1,17 +1,17 @@
|
|||||||
diff --git a/browser/base/content/browser.xhtml b/browser/base/content/browser.xhtml
|
diff --git a/browser/base/content/browser.xhtml b/browser/base/content/browser.xhtml
|
||||||
index 3063370347db9e2812ad30205e585c849e44c91e..be74d9e624b8220cb9bd009bae31fb513c4ec73f 100644
|
index 481ebbee437250c71e9bd10c4fb6fc0c31314925..3bb046a4635fad831cc447e29516ee5ed407a3f2 100644
|
||||||
--- a/browser/base/content/browser.xhtml
|
--- a/browser/base/content/browser.xhtml
|
||||||
+++ b/browser/base/content/browser.xhtml
|
+++ b/browser/base/content/browser.xhtml
|
||||||
@@ -139,6 +139,8 @@
|
@@ -138,6 +138,8 @@
|
||||||
window.addEventListener("DOMContentLoaded",
|
window.addEventListener("DOMContentLoaded",
|
||||||
gBrowserInit.onDOMContentLoaded.bind(gBrowserInit), { once: true });
|
gBrowserInit.onDOMContentLoaded.bind(gBrowserInit), { once: true });
|
||||||
</script>
|
</script>
|
||||||
+#include zen-locales.inc.xhtml
|
+#include zen-locales.inc.xhtml
|
||||||
+#include zen-scripts.inc.xhtml
|
+#include zen-assets.inc.xhtml
|
||||||
</head>
|
</head>
|
||||||
<html:body xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
<html:body xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||||
# All sets except for popupsets (commands, keys, and stringbundles)
|
# All sets except for popupsets (commands, keys, and stringbundles)
|
||||||
@@ -160,9 +162,12 @@
|
@@ -159,9 +161,12 @@
|
||||||
</vbox>
|
</vbox>
|
||||||
</html:template>
|
</html:template>
|
||||||
|
|
||||||
@@ -27,10 +27,3 @@ index 3063370347db9e2812ad30205e585c849e44c91e..be74d9e624b8220cb9bd009bae31fb51
|
|||||||
|
|
||||||
<html:template id="customizationPanel">
|
<html:template id="customizationPanel">
|
||||||
<box id="customization-container" flex="1" hidden="true"><![CDATA[
|
<box id="customization-container" flex="1" hidden="true"><![CDATA[
|
||||||
@@ -176,5 +181,6 @@
|
|
||||||
|
|
||||||
<!-- Put it at the very end to make sure it's not covered by anything. -->
|
|
||||||
<html:div id="fullscr-toggler" hidden="hidden"/>
|
|
||||||
+#include zen-watermark.inc.xhtml
|
|
||||||
</html:body>
|
|
||||||
</html>
|
|
||||||
|
@@ -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,5 +1,5 @@
|
|||||||
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..253d7abfcc1ade419c8f70289719cdc53898cab4 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 @@
|
@@ -2,7 +2,7 @@
|
||||||
@@ -53,22 +53,7 @@ index 390a1300a1213af2b411ba09c67e3c25750ee6c3..253d7abfcc1ade419c8f70289719cdc5
|
|||||||
</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"
|
||||||
@@ -76,7 +61,7 @@ index 390a1300a1213af2b411ba09c67e3c25750ee6c3..253d7abfcc1ade419c8f70289719cdc5
|
|||||||
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" />
|
|
37
src/browser/base/content/zen-assets.inc.xhtml
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
<!-- Styles used all over the browser -->
|
||||||
|
<linkset>
|
||||||
|
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-theme.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-animations.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-sidebar.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-buttons.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-toolbar.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-tabs.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-browser-ui.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-panel-ui.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-single-components.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-browser-container.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-urlbar.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-workspaces.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-decks.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-profile-dialog.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-sidebar-panels.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-popup.css" />
|
||||||
|
|
||||||
|
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-compact-mode.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="chrome://browser/skin/zen-icons/icons.css" />
|
||||||
|
|
||||||
|
</linkset>
|
||||||
|
|
||||||
|
<!-- Scripts used all over the browser -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
window.addEventListener("DOMContentLoaded", async () => {
|
||||||
|
// Theme importer always needs to be loaded first
|
||||||
|
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenThemesImporter.mjs");
|
||||||
|
Services.scriptloader.loadSubScript("chrome://browser/content/ZenUIManager.mjs");
|
||||||
|
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenSidebarManager.mjs");
|
||||||
|
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenWorkspaces.mjs");
|
||||||
|
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenViewSplitter.mjs");
|
||||||
|
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenProfileDialogUI.mjs");
|
||||||
|
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenKeyboardShortcuts.mjs");
|
||||||
|
}, { once: true });
|
||||||
|
</script>
|
41
src/browser/base/content/zen-assets.jar.inc.mn
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
|
||||||
|
|
||||||
|
content/browser/zenThemeModifier.js (content/zenThemeModifier.js)
|
||||||
|
content/browser/ZenStartup.mjs (content/ZenStartup.mjs)
|
||||||
|
content/browser/ZenUIManager.mjs (content/ZenUIManager.mjs)
|
||||||
|
content/browser/zen-components/ZenViewSplitter.mjs (content/zen-components/src/ZenViewSplitter.mjs)
|
||||||
|
content/browser/zen-components/ZenWorkspaces.mjs (content/zen-components/src/ZenWorkspaces.mjs)
|
||||||
|
content/browser/zen-components/ZenSidebarManager.mjs (content/zen-components/src/ZenSidebarManager.mjs)
|
||||||
|
content/browser/zen-components/ZenProfileDialogUI.mjs (content/zen-components/src/ZenProfileDialogUI.mjs)
|
||||||
|
content/browser/zen-components/ZenKeyboardShortcuts.mjs (content/zen-components/src/ZenKeyboardShortcuts.mjs)
|
||||||
|
content/browser/zen-components/ZenThemeBuilder.mjs (content/zen-components/src/ZenThemeBuilder.mjs)
|
||||||
|
content/browser/zen-components/ZenThemesImporter.mjs (content/zen-components/src/ZenThemesImporter.mjs)
|
||||||
|
|
||||||
|
content/browser/zen-styles/zen-theme.css (content/zen-styles/zen-theme.css)
|
||||||
|
content/browser/zen-styles/zen-buttons.css (content/zen-styles/zen-buttons.css)
|
||||||
|
content/browser/zen-styles/zen-tabs.css (content/zen-styles/zen-tabs.css)
|
||||||
|
content/browser/zen-styles/zen-tabs/vertical-tabs.css (content/zen-styles/zen-tabs/vertical-tabs.css)
|
||||||
|
content/browser/zen-styles/zen-browser-ui.css (content/zen-styles/zen-browser-ui.css)
|
||||||
|
content/browser/zen-styles/zen-animations.css (content/zen-styles/zen-animations.css)
|
||||||
|
content/browser/zen-styles/zen-panel-ui.css (content/zen-styles/zen-panel-ui.css)
|
||||||
|
content/browser/zen-styles/zen-single-components.css (content/zen-styles/zen-single-components.css)
|
||||||
|
content/browser/zen-styles/zen-sidebar.css (content/zen-styles/zen-sidebar.css)
|
||||||
|
content/browser/zen-styles/zen-toolbar.css (content/zen-styles/zen-toolbar.css)
|
||||||
|
content/browser/zen-styles/zen-decks.css (content/zen-styles/zen-decks.css)
|
||||||
|
content/browser/zen-styles/zen-browser-container.css (content/zen-styles/zen-browser-container.css)
|
||||||
|
content/browser/zen-styles/zen-workspaces.css (content/zen-styles/zen-workspaces.css)
|
||||||
|
content/browser/zen-styles/zen-profile-dialog.css (content/zen-styles/zen-profile-dialog.css)
|
||||||
|
content/browser/zen-styles/zen-urlbar.css (content/zen-styles/zen-urlbar.css)
|
||||||
|
content/browser/zen-styles/zen-popup.css (content/zen-styles/zen-popup.css)
|
||||||
|
content/browser/zen-styles/zen-sidebar-panels.css (content/zen-styles/zen-sidebar-panels.css)
|
||||||
|
|
||||||
|
content/browser/zen-styles/zen-panels/bookmarks.css (content/zen-styles/zen-panels/bookmarks.css)
|
||||||
|
content/browser/zen-styles/zen-panels/extensions.css (content/zen-styles/zen-panels/extensions.css)
|
||||||
|
content/browser/zen-styles/zen-panels/print.css (content/zen-styles/zen-panels/print.css)
|
||||||
|
content/browser/zen-styles/zen-panels/welcome.css (content/zen-styles/zen-panels/welcome.css)
|
||||||
|
|
||||||
|
content/browser/zen-styles/zen-compact-mode.css (content/zen-styles/zen-compact-mode.css)
|
||||||
|
|
||||||
|
# Actors
|
||||||
|
content/browser/zen-components/actors/ZenThemeMarketplaceParent.sys.mjs (content/zen-components/src/actors/ZenThemeMarketplaceParent.sys.mjs)
|
||||||
|
content/browser/zen-components/actors/ZenThemeMarketplaceChild.sys.mjs (content/zen-components/src/actors/ZenThemeMarketplaceChild.sys.mjs)
|
@@ -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 |