Compare commits
518 Commits
1.0.0-a.13
...
1.0.0-a.35
Author | SHA1 | Date | |
---|---|---|---|
![]() |
37adddc0ed | ||
![]() |
7ef180fe7e | ||
![]() |
80e99b649d | ||
![]() |
762b18ff1e | ||
![]() |
9f3b50d84a | ||
![]() |
a132748dc2 | ||
![]() |
69d2696666 | ||
![]() |
4d6c2c3650 | ||
![]() |
3ce32d6516 | ||
![]() |
1590ea7944 | ||
![]() |
acf057acc5 | ||
![]() |
54395acd2a | ||
![]() |
0fe51f1a73 | ||
![]() |
379e74b8b1 | ||
![]() |
18baa341fc | ||
![]() |
dd86acde88 | ||
![]() |
cda31c11e9 | ||
![]() |
753a34eebf | ||
![]() |
13b78a8fc1 | ||
![]() |
a374ab186a | ||
![]() |
74e3407a42 | ||
![]() |
3e5742be0d | ||
![]() |
881f556534 | ||
![]() |
5ce28c0136 | ||
![]() |
74f304ef18 | ||
![]() |
467b444535 | ||
![]() |
0fc27c755e | ||
![]() |
cf9b266bca | ||
![]() |
ced7d3c4a6 | ||
![]() |
e78fa3f544 | ||
![]() |
dfa316831f | ||
![]() |
668124e1d0 | ||
![]() |
9eb70c3b79 | ||
![]() |
94463e9fa5 | ||
![]() |
1522afd6ca | ||
![]() |
01e8d7f495 | ||
![]() |
d8db68a92d | ||
![]() |
2dc6b1109e | ||
![]() |
200d74d14c | ||
![]() |
fa601a6aaa | ||
![]() |
1cf4458cd9 | ||
![]() |
385a275337 | ||
![]() |
b1be94a29d | ||
![]() |
7ca9ba00b5 | ||
![]() |
8f909cf418 | ||
![]() |
76c84c605d | ||
![]() |
2195a9804e | ||
![]() |
ba289ca71f | ||
![]() |
604ac5dd49 | ||
![]() |
98b2c582f2 | ||
![]() |
2ab5f5f9d9 | ||
![]() |
85b97d790a | ||
![]() |
b07f2ebbd6 | ||
![]() |
2cbf882258 | ||
![]() |
27d0d6805f | ||
![]() |
649bc32b1f | ||
![]() |
504737f4ea | ||
![]() |
10eae96486 | ||
![]() |
dd9124a99a | ||
![]() |
7b836d1232 | ||
![]() |
00e0892c31 | ||
![]() |
c44b844770 | ||
![]() |
2cdb14c184 | ||
![]() |
912aeba7b4 | ||
![]() |
10aad8c6ed | ||
![]() |
296cb9c44f | ||
![]() |
619d54ddc6 | ||
![]() |
c0923fbe0a | ||
![]() |
689789f2e9 | ||
![]() |
2eaf348eda | ||
![]() |
1f25a3c502 | ||
![]() |
4d9d8be4a4 | ||
![]() |
7bf5aa2015 | ||
![]() |
c2762c4eb9 | ||
![]() |
f5f3792165 | ||
![]() |
212e6e4bf8 | ||
![]() |
ca6f7c0b3a | ||
![]() |
70df8829fb | ||
![]() |
b586880d44 | ||
![]() |
758a5cc44a | ||
![]() |
985a3f433c | ||
![]() |
95545dcec9 | ||
![]() |
541d2f7baa | ||
![]() |
b5566038e2 | ||
![]() |
bcf8b190d7 | ||
![]() |
3ad9874ded | ||
![]() |
32ef547349 | ||
![]() |
9ad90e7298 | ||
![]() |
f2a8c3665d | ||
![]() |
98e97585e1 | ||
![]() |
fcb95175de | ||
![]() |
63bf09bc3c | ||
![]() |
b39570d9e5 | ||
![]() |
d83908bcff | ||
![]() |
a7f6a1ef4f | ||
![]() |
f849bc0a1a | ||
![]() |
dd5d8dce77 | ||
![]() |
82f933af93 | ||
![]() |
52485459a9 | ||
![]() |
6a4e81d1a1 | ||
![]() |
9b3afb58cd | ||
![]() |
802a7300e0 | ||
![]() |
87ca7d2d73 | ||
![]() |
1cdb0404fd | ||
![]() |
09b3197aa4 | ||
![]() |
4fe83e8f25 | ||
![]() |
b8361cc8ea | ||
![]() |
ac37939c6e | ||
![]() |
81a2b5b874 | ||
![]() |
094295ba93 | ||
![]() |
7bea297965 | ||
![]() |
378ea1cab1 | ||
![]() |
f22e1f6503 | ||
![]() |
0345322c06 | ||
![]() |
61cf75f84c | ||
![]() |
866b9d74ef | ||
![]() |
d5bbcd0617 | ||
![]() |
78fa236bec | ||
![]() |
35fb5f510e | ||
![]() |
cc340432ba | ||
![]() |
d87315da49 | ||
![]() |
bf4e47f8fb | ||
![]() |
162a98fd1b | ||
![]() |
a6aeafa668 | ||
![]() |
31bd7b14dd | ||
![]() |
ab793ff424 | ||
![]() |
043755c1a0 | ||
![]() |
42a0140d8d | ||
![]() |
ed923b73cc | ||
![]() |
06adcdbcb6 | ||
![]() |
7f4265dfe4 | ||
![]() |
cd3a09d26b | ||
![]() |
09585654ee | ||
![]() |
67bc214cc9 | ||
![]() |
4cef2dd304 | ||
![]() |
c313c95c81 | ||
![]() |
7427fa0017 | ||
![]() |
10c10523f1 | ||
![]() |
21c537f000 | ||
![]() |
4920433736 | ||
![]() |
57e2c4af0a | ||
![]() |
9652725e84 | ||
![]() |
21635d9d63 | ||
![]() |
c7845a8e8f | ||
![]() |
c0aa1664cb | ||
![]() |
f72e38fd54 | ||
![]() |
d39ae862d6 | ||
![]() |
00d0eb8fc8 | ||
![]() |
80866de5fe | ||
![]() |
3dbb8a9bc2 | ||
![]() |
a47edaefaa | ||
![]() |
0c7dbbc2c6 | ||
![]() |
45515149e0 | ||
![]() |
b8da76745d | ||
![]() |
7d55d670ee | ||
![]() |
a74ec9650c | ||
![]() |
fdb5627da6 | ||
![]() |
60687d6b03 | ||
![]() |
dd68add538 | ||
![]() |
ea34bec55a | ||
![]() |
3def55d48b | ||
![]() |
5c4c3e6fb2 | ||
![]() |
c0d101aef0 | ||
![]() |
cc022ddd2f | ||
![]() |
511ca88aec | ||
![]() |
9217e32439 | ||
![]() |
2444bb04fc | ||
![]() |
c502719bd7 | ||
![]() |
d3a9ec4b3c | ||
![]() |
8a646bcc95 | ||
![]() |
92959769df | ||
![]() |
e4d56fd7d9 | ||
![]() |
b77f864668 | ||
![]() |
e02a44b20b | ||
![]() |
eb2d91256f | ||
![]() |
ff9876ebac | ||
![]() |
d6ddb542e9 | ||
![]() |
8ba6ba14e8 | ||
![]() |
6c58c9d61c | ||
![]() |
6f0609dd8c | ||
![]() |
ebba41c735 | ||
![]() |
65e040d987 | ||
![]() |
29a85db998 | ||
![]() |
d50a745e95 | ||
![]() |
a5854174c7 | ||
![]() |
5ef37aa079 | ||
![]() |
4c622d1429 | ||
![]() |
5593e7c437 | ||
![]() |
940bbae367 | ||
![]() |
4d8558929c | ||
![]() |
c05547248f | ||
![]() |
1a5e788476 | ||
![]() |
0af7b8b5b6 | ||
![]() |
95e444c31c | ||
![]() |
b011ad3de9 | ||
![]() |
ff188e0e1c | ||
![]() |
5ef88531d2 | ||
![]() |
410c875151 | ||
![]() |
bbad093d64 | ||
![]() |
e7103f1d87 | ||
![]() |
d9c3973b9d | ||
![]() |
d65681505d | ||
![]() |
739eff84f2 | ||
![]() |
d5e7d0c36f | ||
![]() |
90ca6ea99a | ||
![]() |
fdb4696066 | ||
![]() |
22a5dcddf3 | ||
![]() |
47ba86f211 | ||
![]() |
e2e7756649 | ||
![]() |
85b605db14 | ||
![]() |
cf48a52949 | ||
![]() |
dfde0f4baa | ||
![]() |
31b41329f2 | ||
![]() |
f856d9db6d | ||
![]() |
4187e20fbc | ||
![]() |
54b4f6e932 | ||
![]() |
bcabada80e | ||
![]() |
5c1decc77b | ||
![]() |
04af43909e | ||
![]() |
e808443631 | ||
![]() |
a47023e0f3 | ||
![]() |
ae9c99c7bc | ||
![]() |
187688e6ea | ||
![]() |
7854e26823 | ||
![]() |
d38eb962de | ||
![]() |
b2c2a134b0 | ||
![]() |
4874b4a1cd | ||
![]() |
983e85033f | ||
![]() |
38e6f075f4 | ||
![]() |
4146ad0936 | ||
![]() |
cf2435081a | ||
![]() |
e6f8eede34 | ||
![]() |
72f76608b6 | ||
![]() |
4eb07c762a | ||
![]() |
bbb4b64940 | ||
![]() |
cac80a2985 | ||
![]() |
ca1a63dbf1 | ||
![]() |
31fb9296c7 | ||
![]() |
7dd3e08409 | ||
![]() |
b537e5566a | ||
![]() |
5dd2a90f46 | ||
![]() |
034f351ac6 | ||
![]() |
195b215f5b | ||
![]() |
74d1385566 | ||
![]() |
957fe60a3d | ||
![]() |
5ac6cf4465 | ||
![]() |
29d9c85923 | ||
![]() |
78729d44de | ||
![]() |
483bee452e | ||
![]() |
8a87e3a0af | ||
![]() |
07283e1050 | ||
![]() |
1eaf6e49ef | ||
![]() |
c40d56b3b8 | ||
![]() |
ed7ad501b7 | ||
![]() |
964e0733b1 | ||
![]() |
c319a83d58 | ||
![]() |
4589c543da | ||
![]() |
0c3930425a | ||
![]() |
2f790586b2 | ||
![]() |
7d3b47f4f6 | ||
![]() |
69a1e0f1b9 | ||
![]() |
f78ad97710 | ||
![]() |
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
|
||||
ko_fi: zen_browser
|
||||
|
34
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -1,10 +1,25 @@
|
||||
name: Bug Report Or Feature Request
|
||||
name: Bug Report
|
||||
description: File a bug report
|
||||
labels: [Triage]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thank you for filing a bug report.
|
||||
|
||||
## Important
|
||||
- Please search existing issues to avoid creating duplicates.
|
||||
- For enhancement requests, please use GitHub Discussions.
|
||||
- Please fill out the template below to the best of your ability.
|
||||
- type: checkboxes
|
||||
id: captchas
|
||||
attributes:
|
||||
label: Captchas
|
||||
description: Just making sure you did actually read the instructions.
|
||||
options:
|
||||
- label: I have read the instructions.
|
||||
- label: I have searched existing issues and avoided creating duplicates.
|
||||
- label: I am not filing an enhancement request.
|
||||
- type: textarea
|
||||
id: what-happened
|
||||
attributes:
|
||||
@@ -19,7 +34,7 @@ body:
|
||||
label: Reproducible?
|
||||
description: Is this issue reproducible on Firefox?
|
||||
options:
|
||||
- label: I have checked that this issue cannot be reproduced on Mozilla Firefox.
|
||||
- label: I have checked that this issue cannot be reproduced on Mozilla Firefox.
|
||||
- type: input
|
||||
id: version
|
||||
attributes:
|
||||
@@ -28,21 +43,6 @@ body:
|
||||
placeholder: 1.0.0
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: severity
|
||||
attributes:
|
||||
label: Severity impact
|
||||
description: See label descriptions for more information.
|
||||
options:
|
||||
- Low
|
||||
- Medium
|
||||
- High
|
||||
- Critical
|
||||
- Enhancement
|
||||
multiple: true
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: dropdown
|
||||
id: platform
|
||||
attributes:
|
||||
|
32
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
@@ -1,32 +0,0 @@
|
||||
name: Feature Request
|
||||
description: File a feature request
|
||||
labels:
|
||||
- "kind: enhancement"
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thank you for filing a feature request.
|
||||
- type: textarea
|
||||
id: what-happened
|
||||
attributes:
|
||||
label: What feature would you like to see?
|
||||
description: Please describe the feature you would like to see.
|
||||
placeholder: Tell us what you would like to see!
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: platform
|
||||
attributes:
|
||||
label: What platform are you seeing the problem on?
|
||||
options:
|
||||
- Linux
|
||||
- macOS
|
||||
- Windows
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: logs
|
||||
attributes:
|
||||
label: Additional context
|
||||
description: Add any other context about the feature request here.
|
18
.github/advanced-issue-labeler.yml
vendored
@@ -1,18 +0,0 @@
|
||||
---
|
||||
# Keep up to date with workflows/issue-create.yml !!!
|
||||
|
||||
policy:
|
||||
- section:
|
||||
- id: [severity]
|
||||
label:
|
||||
- name: 'kind: low severity'
|
||||
keys: ['Low']
|
||||
- name: 'kind: medium severity'
|
||||
keys: ['Medium']
|
||||
- name: 'kind: high severity'
|
||||
keys: ['High']
|
||||
- name: 'kind: critical severity'
|
||||
keys: ['Critical']
|
||||
- name: 'kind: enhancement'
|
||||
keys: ['Enhancement']
|
||||
|
198
.github/workflows/alpha.yml
vendored
@@ -30,8 +30,11 @@ jobs:
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Install pnpm
|
||||
run: npm install -g pnpm
|
||||
|
||||
@@ -87,8 +90,10 @@ jobs:
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Install pnpm
|
||||
run: npm install -g pnpm
|
||||
@@ -125,20 +130,22 @@ jobs:
|
||||
|
||||
|
||||
source:
|
||||
if: false
|
||||
permissions:
|
||||
contents: write
|
||||
runs-on: ubuntu-latest
|
||||
needs: [build-data, check-release]
|
||||
|
||||
environment: production
|
||||
steps:
|
||||
- name: Install Node.js
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Setup git
|
||||
run: |
|
||||
@@ -179,33 +186,36 @@ jobs:
|
||||
name: zen.source.tar.gz
|
||||
path: ./zen.source.tar.gz
|
||||
|
||||
#windows-step-1:
|
||||
# name: Windows build step 1 (PGO build)
|
||||
# uses: ./.github/workflows/windows-alpha-build.yml
|
||||
# needs: [build-data]
|
||||
# permissions:
|
||||
# contents: write
|
||||
# with:
|
||||
# build-version: ${{ needs.build-data.outputs.version }}
|
||||
# generate-gpo: true
|
||||
# profile-data-path-archive: zen-windows-x86_64-profile-data-and-jarlog.zip
|
||||
windows-step-1:
|
||||
name: Windows build step 1 (PGO build)
|
||||
uses: ./.github/workflows/windows-alpha-build.yml
|
||||
needs: [build-data]
|
||||
permissions:
|
||||
contents: write
|
||||
secrets: inherit
|
||||
with:
|
||||
build-version: ${{ needs.build-data.outputs.version }}
|
||||
generate-gpo: true
|
||||
profile-data-path-archive: zen-windows-x86_64-profile-data-and-jarlog.zip
|
||||
|
||||
#windows-step-2:
|
||||
# name: Windows build step 2 (Generate profile data)
|
||||
# uses: ./.github/workflows/windows-profile-build.yml
|
||||
# permissions:
|
||||
# contents: write
|
||||
# needs: [windows-step-1, build-data]
|
||||
# with:
|
||||
# build-version: ${{ needs.build-data.outputs.version }}
|
||||
# profile-data-path-archive: zen.win64-pgo-stage-1.zip
|
||||
windows-step-2:
|
||||
name: Windows build step 2 (Generate profile data)
|
||||
uses: ./.github/workflows/windows-profile-build.yml
|
||||
permissions:
|
||||
contents: write
|
||||
secrets: inherit
|
||||
needs: [windows-step-1, build-data]
|
||||
with:
|
||||
build-version: ${{ needs.build-data.outputs.version }}
|
||||
profile-data-path-archive: zen.win64-pgo-stage-1.zip
|
||||
|
||||
windows-step-3:
|
||||
name: Windows build step 3 (build with profile data)
|
||||
uses: ./.github/workflows/windows-alpha-build.yml
|
||||
permissions:
|
||||
contents: write
|
||||
needs: [build-data]
|
||||
secrets: inherit
|
||||
needs: [build-data, windows-step-2]
|
||||
with:
|
||||
build-version: ${{ needs.build-data.outputs.version }}
|
||||
generate-gpo: false
|
||||
@@ -215,6 +225,7 @@ jobs:
|
||||
uses: ./.github/workflows/linux-alpha-build.yml
|
||||
permissions:
|
||||
contents: write
|
||||
secrets: inherit
|
||||
needs: [build-data]
|
||||
with:
|
||||
build-version: ${{ needs.build-data.outputs.version }}
|
||||
@@ -224,6 +235,7 @@ jobs:
|
||||
uses: ./.github/workflows/macos-alpha-build.yml
|
||||
permissions:
|
||||
contents: write
|
||||
secrets: inherit
|
||||
needs: [build-data]
|
||||
with:
|
||||
build-version: ${{ needs.build-data.outputs.version }}
|
||||
@@ -244,12 +256,15 @@ jobs:
|
||||
node-version: 20
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
npm install -g pnpm
|
||||
sudo apt-get update
|
||||
sudo apt-get -y install libfuse2
|
||||
sudo apt-get -y install libfuse2 desktop-file-utils
|
||||
|
||||
- name: Download linux build
|
||||
uses: actions/download-artifact@v4
|
||||
@@ -266,17 +281,18 @@ jobs:
|
||||
APPDIR=AppDir
|
||||
tar -xvf *.tar.* && rm -rf *.tar.*
|
||||
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 ./AppDir/AppRun
|
||||
echo "AppDir: $APPDIR"
|
||||
ls -al
|
||||
find .
|
||||
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
|
||||
mv zen.AppImage* dist/.
|
||||
mv ./dist/zen.AppImage ./dist/zen-${{ matrix.generic == true && 'generic' || 'specific' }}.AppImage
|
||||
mv zen*AppImage* dist/.
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
@@ -284,16 +300,24 @@ jobs:
|
||||
name: 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:
|
||||
if: ${{ github.event.inputs.create_release == 'true' }}
|
||||
permissions: write-all
|
||||
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
|
||||
|
||||
steps:
|
||||
- name: Update repo
|
||||
uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Git Pull
|
||||
run: git pull
|
||||
@@ -342,7 +366,9 @@ jobs:
|
||||
zen.linux-generic.tar.bz2
|
||||
zen.linux-specific.tar.bz2
|
||||
zen-generic.AppImage
|
||||
zen-generic.AppImage.zsync
|
||||
zen-specific.AppImage
|
||||
zen-specific.AppImage.zsync
|
||||
zen.win-generic.zip
|
||||
zen.win-specific.zip
|
||||
linux.mar
|
||||
@@ -356,11 +382,68 @@ jobs:
|
||||
zen.macos-x64.dmg
|
||||
zen.macos-aarch64.dmg
|
||||
|
||||
prepare-flatpak:
|
||||
if: ${{ github.event.inputs.create_release == 'true' }}
|
||||
permissions: write-all
|
||||
name: Prepare Flatpak
|
||||
needs: [release, linux, build-data]
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Clone flatpak repo
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: zen-browser/release-utils
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
sudo apt-get update
|
||||
npm install
|
||||
|
||||
- name: Generate new flatpak release
|
||||
run: |
|
||||
npm run build-flatpak -- \
|
||||
--version ${{ needs.build-data.outputs.version }}
|
||||
|
||||
- uses: stefanzweifel/git-auto-commit-action@v4
|
||||
with:
|
||||
commit_message: 🚀 Update releases for flatpak
|
||||
commit_user_name: Zen Browser Robot
|
||||
commit_user_email: zen-browser-bot@users.noreply.github.com
|
||||
|
||||
- name: Clone flatpak repo
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: zen-browser/flatpak
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
path: flatpak
|
||||
|
||||
- name: Move releases.xml
|
||||
run: |
|
||||
pwd
|
||||
ls .
|
||||
ls ..
|
||||
mv releases.xml ./flatpak/io.github.zen_browser.zen.metainfo.xml
|
||||
# output the version to the file
|
||||
echo -n ${{ needs.build-data.outputs.version }} > ./flatpak/version
|
||||
|
||||
|
||||
- uses: stefanzweifel/git-auto-commit-action@v4
|
||||
with:
|
||||
commit_message: '[release]: Update flatpak manifest'
|
||||
commit_user_name: Zen Browser Robot
|
||||
commit_user_email: zen-browser-bot@users.noreply.github.com
|
||||
repository: ./flatpak
|
||||
|
||||
- name: Wait 4 minutes for the flatpak repo to update
|
||||
run: sleep 240
|
||||
|
||||
release-flatpak:
|
||||
if: ${{ github.event.inputs.create_release == 'true' }}
|
||||
permissions: write-all
|
||||
name: Release Flatpak
|
||||
needs: [release, linux, build-data]
|
||||
needs: [prepare-flatpak]
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
@@ -428,10 +511,53 @@ jobs:
|
||||
body: |
|
||||
This PR updates the Zen Browser Flatpak package to version ${{ needs.build-data.outputs.version }}.
|
||||
|
||||
@mauro-balades
|
||||
@${{ github.actor }} please review and merge this PR.
|
||||
branch: update-to-${{ needs.build-data.outputs.version }}
|
||||
base: master
|
||||
git-token: ${{ secrets.DEPLOY_KEY }}
|
||||
delete-branch: true
|
||||
|
||||
release-homebrew:
|
||||
if: ${{ github.event.inputs.create_release == 'true' }}
|
||||
permissions: write-all
|
||||
name: Homebrew release
|
||||
needs: [release, mac, build-data]
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Clone flatpak repo
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: flathub/io.github.zen_browser.zen
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Setup git
|
||||
run: |
|
||||
git config --global user.name "github-actions[bot]"
|
||||
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
||||
|
||||
- name: Download macOS ARM build
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: zen.macos-aarch64.dmg
|
||||
|
||||
- name: Download macOS x64 build
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: zen.macos-x64.dmg
|
||||
|
||||
- name: Update zen-browser Cask
|
||||
run: sh .github/workflows/src/update-homebrew.sh
|
||||
|
||||
- name: Clean up
|
||||
run: |
|
||||
rm -rf zen.macos-x64.dmg
|
||||
rm -rf zen.macos-aarch64.dmg
|
||||
|
||||
- uses: stefanzweifel/git-auto-commit-action@v4
|
||||
if: ${{ github.event.inputs.update_version == 'true' }}
|
||||
with:
|
||||
commit_message: 🔖 Update version to ${{ steps.data.outputs.version }} for homebrew!
|
||||
commit_user_name: Zen Browser Robot
|
||||
commit_user_email: zen-browser-bot@users.noreply.github.com
|
||||
|
||||
|
35
.github/workflows/issue-create.yml
vendored
@@ -1,35 +0,0 @@
|
||||
name: Issue labeler
|
||||
on:
|
||||
issues:
|
||||
types: [ opened ]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
label-component:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
permissions:
|
||||
# required for all workflows
|
||||
issues: write
|
||||
|
||||
# only required for workflows in private repositories
|
||||
actions: read
|
||||
contents: read
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Parse issue form
|
||||
uses: stefanbuck/github-issue-parser@v3
|
||||
id: issue-parser
|
||||
with:
|
||||
template-path: .github/ISSUE_TEMPLATE/bug_report.yml
|
||||
|
||||
- name: Set labels based on severity field
|
||||
uses: redhat-plumbers-in-action/advanced-issue-labeler@v3
|
||||
with:
|
||||
issue-form: ${{ steps.issue-parser.outputs.jsonString }}
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
section: severity
|
25
.github/workflows/linux-alpha-build.yml
vendored
@@ -9,6 +9,7 @@ on:
|
||||
|
||||
jobs:
|
||||
build-linux:
|
||||
environment: production
|
||||
permissions:
|
||||
contents: write
|
||||
runs-on: ubuntu-latest
|
||||
@@ -19,18 +20,22 @@ jobs:
|
||||
name: Build Linux - ${{ matrix.generic == true && 'Generic' || 'Specific' }}
|
||||
|
||||
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
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
# 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
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
swap-size-gb: 6
|
||||
submodules: recursive
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Setup git
|
||||
run: |
|
||||
@@ -43,10 +48,7 @@ jobs:
|
||||
sudo apt-get update
|
||||
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
|
||||
|
||||
- name: Free up space
|
||||
run: sh .github/workflows/src/disk-setup-and-swap.sh
|
||||
|
||||
|
||||
- name: Configure sccache
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
@@ -95,6 +97,9 @@ jobs:
|
||||
SURFER_COMPAT: ${{ matrix.generic == true }}
|
||||
run: pnpm surfer import
|
||||
|
||||
- name: Build language packs
|
||||
run: sh scripts/download-language-packs.sh
|
||||
|
||||
- name: Bootstrap
|
||||
run: |
|
||||
cd engine
|
||||
|
70
.github/workflows/macos-alpha-build.yml
vendored
@@ -6,10 +6,10 @@ on:
|
||||
description: 'The version to build'
|
||||
required: true
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
mac-build:
|
||||
name: Build macOS - ${{ matrix.arch }}
|
||||
environment: production
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
@@ -31,6 +31,9 @@ jobs:
|
||||
python-version: '3.11'
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Setup git
|
||||
run: |
|
||||
@@ -42,8 +45,29 @@ jobs:
|
||||
brew install cairo sccache gnu-tar mercurial
|
||||
sudo pip install setuptools
|
||||
|
||||
- name: Free up space
|
||||
run: sh .github/workflows/src/disk-setup-and-swap.sh
|
||||
# completly uninstall python3 and python3.12
|
||||
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
|
||||
run: |
|
||||
@@ -68,17 +92,21 @@ jobs:
|
||||
- name: Download firefox source and dependancies
|
||||
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
|
||||
env:
|
||||
SURFER_COMPAT: ${{ matrix.arch == 'x64' }}
|
||||
run: |
|
||||
pnpm surfer import
|
||||
|
||||
- name: Bootstrap
|
||||
run: |
|
||||
cd engine
|
||||
./mach --no-interactive bootstrap --application-choice browser
|
||||
cd ..
|
||||
pnpm surfer import --verbose
|
||||
|
||||
- name: Build language packs
|
||||
run: sh scripts/download-language-packs.sh
|
||||
|
||||
- name: build Zen
|
||||
env:
|
||||
@@ -93,6 +121,24 @@ jobs:
|
||||
if: failure()
|
||||
run: sh .github/workflows/src/alpha-build.sh
|
||||
|
||||
- name: import APPLE DEVELOPER ID CERTIFICATE for .app
|
||||
uses: apple-actions/import-codesign-certs@v3
|
||||
with:
|
||||
p12-file-base64: ${{ secrets.macOS_CERTIFICATES_P12_For_App_BASE64 }}
|
||||
p12-password: ${{ secrets.macOS_CERTIFICATES_P12_PASSWORD }}
|
||||
|
||||
- name: Sign to .app 🖋️
|
||||
run: |
|
||||
ls engine
|
||||
ls engine/obj-${{ matrix.arch == 'x64' && 'x86_64' || 'aarch64' }}-apple-darwin
|
||||
ls engine/obj-${{ matrix.arch == 'x64' && 'x86_64' || 'aarch64' }}-apple-darwin/dist
|
||||
chmod +x ./build/codesign/sign.bash
|
||||
./build/codesign/sign.bash \
|
||||
-a "./engine/obj-${{ matrix.arch == 'x64' && 'x86_64' || 'aarch64' }}-apple-darwin/dist/Zen Browser.app" \
|
||||
-i "${{ secrets.macOS_AppleDeveloperId }}" \
|
||||
-b "./build/codesign/browser.developer.entitlements.xml" \
|
||||
-p "./build/codesign/plugin-container.developer.entitlements.xml"
|
||||
|
||||
- name: Package
|
||||
env:
|
||||
SURFER_COMPAT: ${{ matrix.arch == 'x64' }}
|
||||
@@ -103,6 +149,10 @@ jobs:
|
||||
mv ./dist/*.dmg "zen.macos-${{ matrix.arch }}.dmg"
|
||||
mv ./dist/output.mar macos-${{ matrix.arch }}.mar
|
||||
|
||||
- name: Sign to .dmg
|
||||
run: |
|
||||
codesign -s "${{ secrets.macOS_AppleDeveloperId }}" zen.macos-${{ matrix.arch }}.dmg
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
|
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
|
7
.github/workflows/src/update-homebrew.sh
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
latest_version=$(git describe --tags --abbrev=0)
|
||||
sed -i "s/version(.*)/version('${latest_version}')/" ./Casks/zen-browser.rb
|
||||
|
||||
sha_x64=$(shasum -a 256 zen.macos-x64.dmg)
|
||||
sha_arm=$(shasum -a 256 zen.macos-aarch64.dmg)
|
||||
|
||||
sed -i "s/sha256(.*)/sha256(arm:'${sha_arm}', intel:'${sha_x64}')/" ./Casks/zen-browser.rb
|
48
.github/workflows/windows-alpha-build.yml
vendored
@@ -22,20 +22,24 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
generic: [true, false]
|
||||
|
||||
environment: production
|
||||
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
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
- 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:
|
||||
swap-size-gb: 6
|
||||
submodules: recursive
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Install pnpm
|
||||
run: npm install -g pnpm
|
||||
@@ -55,9 +59,6 @@ jobs:
|
||||
- name: Download
|
||||
run: pnpm surfer download
|
||||
|
||||
- name: Free up space
|
||||
run: sh .github/workflows/src/disk-setup-and-swap.sh
|
||||
|
||||
- name: "win-cross Cache"
|
||||
env:
|
||||
SEGMENT_DOWNLOAD_TIMEOUT_MINS: 5
|
||||
@@ -117,7 +118,7 @@ jobs:
|
||||
run: |
|
||||
cd engine/
|
||||
# Install a rust version compatible with 17
|
||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.76
|
||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.79
|
||||
source $HOME/.cargo/env
|
||||
|
||||
rustup target add x86_64-pc-windows-msvc
|
||||
@@ -129,16 +130,30 @@ jobs:
|
||||
echo "" >> ../configs/common/mozconfig
|
||||
echo "export MOZ_WINDOWS_RS_DIR=$(pwd)/windows-0.52.0" >> ../configs/common/mozconfig
|
||||
|
||||
- name: Import
|
||||
env:
|
||||
SURFER_COMPAT: ${{ matrix.generic == true }}
|
||||
run: pnpm surfer import --verbose
|
||||
|
||||
- name: Build language packs
|
||||
run: sh scripts/download-language-packs.sh
|
||||
|
||||
- uses: actions/download-artifact@v4
|
||||
name: Download artifact if use profdata
|
||||
if: ${{ !inputs.generate-gpo }}
|
||||
with:
|
||||
path: ~/artifact
|
||||
name: windows-profdata-${{ matrix.generic == true && 'generic' || 'specific' }}
|
||||
|
||||
- name: Import
|
||||
env:
|
||||
SURFER_COMPAT: ${{ matrix.generic == true }}
|
||||
run: pnpm surfer import --verbose
|
||||
- name: Show artifact info
|
||||
if: ${{ !inputs.generate-gpo }}
|
||||
run: |
|
||||
ls ~/artifact
|
||||
ls ~/artifact/en-US.log
|
||||
ls ~/artifact/merged.profdata
|
||||
|
||||
chmod +x ~/artifact/en-US.log
|
||||
chmod +x ~/artifact/merged.profdata
|
||||
|
||||
- name: Build
|
||||
env:
|
||||
@@ -164,6 +179,11 @@ jobs:
|
||||
ls ./dist
|
||||
ls .
|
||||
|
||||
- name: 🐛 Debug Session
|
||||
if: ${{ failure() }}
|
||||
uses: Warpbuilds/gha-debug@v1.3
|
||||
timeout-minutes: 15
|
||||
|
||||
- name: Move package for PGO upload
|
||||
if: ${{ inputs.generate-gpo }}
|
||||
run: |
|
||||
|
33
.github/workflows/windows-profile-build.yml
vendored
@@ -33,14 +33,12 @@ jobs:
|
||||
run: |
|
||||
git config --global user.email "mauro-balades@users.noreply.github.com"
|
||||
git config --global user.name "mauro-balades"
|
||||
|
||||
- name: Install pnpm
|
||||
run: npm install -g pnpm
|
||||
|
||||
- name: Install Surfer
|
||||
run: |
|
||||
npm i -g @zen-browser/surfer
|
||||
|
||||
- uses: actions/download-artifact@v4
|
||||
name: Download artifact
|
||||
with:
|
||||
@@ -51,47 +49,46 @@ jobs:
|
||||
run: |
|
||||
cd C:\artifact
|
||||
ls
|
||||
zstd -d ${{ inputs.profile-data-path-archive }}
|
||||
7z x zen-*.tar
|
||||
|
||||
Expand-Archive -Path .\${{ inputs.profile-data-path-archive }} -DestinationPath C:\artifact
|
||||
ls
|
||||
- name: Setup
|
||||
run: |
|
||||
(New-Object System.Net.WebClient).DownloadFile("https://ftp.mozilla.org/pub/mozilla/libraries/win32/MozillaBuildSetup-Latest.exe","C:\MozillaBuildSetup-Latest.exe")
|
||||
C:\MozillaBuildSetup-Latest.exe /S | out-null
|
||||
|
||||
- name: Download firefox
|
||||
run: |
|
||||
git config --global core.safecrlf false
|
||||
pnpm surfer download
|
||||
|
||||
- name: Generate
|
||||
run: |
|
||||
ls
|
||||
$Env:USE_MINTTY = "0"
|
||||
|
||||
$workspace_dir_current = [regex]::replace($env:GITHUB_WORKSPACE, "^([A-Z]):", { "/" + $args.value.Substring(0, 1).toLower() }) -replace "\\","/"
|
||||
$workspace_dir = $workspace_dir_current + "/engine"
|
||||
echo $workspace_dir
|
||||
|
||||
echo "cd $workspace_dir" '' >> mozilla-build-run.sh
|
||||
echo '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 'ls /c/Users/runneradmin/.mozbuild/clang/bin' '' >> mozilla-build-run.sh
|
||||
echo 'LLVM_PROFDATA=/c/Users/runneradmin/.mozbuild/clang/bin/llvm-profdata.exe JARLOG_FILE=en-US.log ./mach python build/pgo/profileserver.py --binary /c/artifact/zen/zen.exe' '' >> mozilla-build-run.sh
|
||||
C:\mozilla-build\start-shell.bat $workspace_dir_current\mozilla-build-run.sh
|
||||
|
||||
|
||||
- name: 🐛 Debug Session
|
||||
if: ${{ failure() }}
|
||||
uses: Warpbuilds/gha-debug@v1.3
|
||||
timeout-minutes: 15
|
||||
|
||||
- name: Publish merged.profdata
|
||||
- name: Move profile data
|
||||
run: |
|
||||
dir
|
||||
dir engine
|
||||
mv engine/merged.profdata merged.profdata
|
||||
mv engine/en-US.log en-US.log
|
||||
|
||||
- name: Publish artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
path: merged-${{ matrix.generic == true && 'generic' || 'specific' }}.profdata
|
||||
|
||||
- name: Publish en-US.log
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
path: en-US-${{ matrix.generic == true && 'generic' || 'specific' }}.log
|
||||
|
||||
path: |
|
||||
merged.profdata
|
||||
en-US.log
|
||||
name: windows-profdata-${{ matrix.generic == true && 'generic' || 'specific' }}
|
6
.gitmodules
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
[submodule "src/browser/base/content/zen-components"]
|
||||
path = src/browser/base/content/zen-components
|
||||
url = https://github.com/zen-browser/components
|
||||
[submodule "l10n"]
|
||||
path = l10n
|
||||
url = https://github.com/zen-browser/l10n-packs
|
6
.vscode/settings.json
vendored
@@ -13,6 +13,10 @@
|
||||
"utility": "cpp",
|
||||
"variant": "cpp",
|
||||
"compare": "cpp",
|
||||
"thread": "cpp"
|
||||
"thread": "cpp",
|
||||
"string": "cpp",
|
||||
"string_view": "cpp",
|
||||
"span": "cpp",
|
||||
"vector": "cpp"
|
||||
}
|
||||
}
|
@@ -5,4 +5,4 @@
|
||||
"ManualAppUpdateOnly": true,
|
||||
"BackgroundAppUpdate": false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1,5 +1,6 @@
|
||||
[Desktop Entry]
|
||||
Name=Zen Browser
|
||||
Comment=Experience tranquillity while browsing the web without people tracking you!
|
||||
Exec=zen %u
|
||||
Icon=zen
|
||||
Type=Application
|
||||
|
26
Casks/zen-browser.rb
Normal file
@@ -0,0 +1,26 @@
|
||||
cask("zen-browser") do
|
||||
arch(arm: "aarch64", intel: "x64")
|
||||
version("1.0.0-a.34")
|
||||
sha256(arm: "6cc6e72c4a6a11d0139489d438ccf811715e170eebc01da739da32ace2580747", intel: "b9cb48f21a4ee39f3f3ae2361b9b0a55ae7219638cf798e1483c0eb8cf4660a6")
|
||||
|
||||
url("https://github.com/zen-browser/desktop/releases/download/#{version}/zen.macos-#{arch}.dmg")
|
||||
name("Zen Browser")
|
||||
desc("Beautifully designed, privacy-focused browser packed with awesome features")
|
||||
homepage("https://zen-browser.app/")
|
||||
|
||||
livecheck do
|
||||
url(:stable)
|
||||
regex(/[0-9].*-a.[0-9]*/i)
|
||||
end
|
||||
|
||||
zap trash: [
|
||||
"~/Library/Preferences/org.mozilla.com.zen.browser.plist",
|
||||
"~/Library/Saved Application State/org.mozilla.com.zen.browser.savedState"
|
||||
]
|
||||
|
||||
app("Zen Browser.app")
|
||||
|
||||
postflight do
|
||||
system("xattr -c '/Applications/Zen Browser.app/'")
|
||||
end
|
||||
end
|
76
README.md
@@ -1,30 +1,58 @@
|
||||
|
||||
# 🌀 Zen Browser
|
||||
<div align="center">
|
||||
<picture>
|
||||
<img src="./zen-black.svg" width="128px">
|
||||
</picture>
|
||||
</div>
|
||||
<h1 align="center">
|
||||
Zen Browser
|
||||
</h1>
|
||||
|
||||
Experience tranquillity while browsing the web without people tracking you!
|
||||
|
||||
<a href='https://flathub.org/apps/io.github.zen_browser.zen'>
|
||||
<img width='240' alt='Get it on Flathub' src='https://flathub.org/api/badge?locale=en'/>
|
||||
</a>
|
||||
* [Website](https://www.zen-browser.app)
|
||||
* [Download](https://www.zen-browser.app/download)
|
||||
* [Release Notes](https://www.zen-browser.app/release-notes/latest)
|
||||
|
||||
[](https://crowdin.com/project/zen-browser)
|
||||
|
||||
[](https://flathub.org/apps/io.github.zen_browser.zen)
|
||||
|
||||
[](https://www.patreon.com/zen_browser)
|
||||
|
||||
[](https://ko-fi.com/zen_browser)
|
||||
|
||||
# Compatibility
|
||||
|
||||
Zen is currently built using firefox version `128.0.3`!
|
||||
Zen is currently built using firefox version `130.0`!
|
||||
|
||||
* Checkout the latest [releases notes](https://get-zen.vercel.app/release-notes)!
|
||||
* Check out the latest [release notes](https://www.zen-browser.app/release-notes)!
|
||||
|
||||
# Performance
|
||||
|
||||
Zen is built with performance in mind, and we have optimized the browser to be as fast as possible!
|
||||
|
||||
* Checkout the latest [performance benchmarks](./docs/performance.md)!
|
||||
* Checkout the latest [performance benchmarks](https://docs.zen-browser.app/benchmarks)!
|
||||
|
||||
# Installation
|
||||
|
||||
## MacOS
|
||||
You can install the Zen Browser using Homebrew:
|
||||
|
||||
```
|
||||
brew tap zen-browser/browser https://github.com/zen-browser/desktop.git
|
||||
brew install zen-browser
|
||||
```
|
||||
|
||||
# Core Components
|
||||
|
||||
Some components used by @zen-browser as an attempt to make firefox forks a better place. You can find them [here](https://github.com/zen-browser/components).
|
||||
|
||||
## 🚀 Run Locally
|
||||
|
||||
Clone the project
|
||||
|
||||
```bash
|
||||
git clone https://github.com/zen-browser/desktop.git
|
||||
git clone https://github.com/zen-browser/desktop.git --recurse-submodules
|
||||
cd desktop
|
||||
```
|
||||
|
||||
@@ -52,20 +80,30 @@ Finally, run the browser!
|
||||
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
|
||||
|
||||
- [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)
|
||||
- [nitro](https://github.com/n7itro) (For the amazing work on the browser)
|
||||
|
||||
## Third Party Code
|
||||
|
||||
Zen couldn'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
|
||||
|
||||
[MPL LICENSE](/LICENSE)
|
||||
[MPL LICENSE](./LICENSE)
|
||||
|
||||
## Star History
|
||||
|
||||
<a href="https://star-history.com/#zen-browser/desktop&Date">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=zen-browser/desktop&type=Date&theme=dark" />
|
||||
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=zen-browser/desktop&type=Date" />
|
||||
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=zen-browser/desktop&type=Date" />
|
||||
</picture>
|
||||
</a>
|
||||
|
||||
|
32
build/codesign/browser.developer.entitlements.xml
Normal file
@@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<!--
|
||||
Entitlements to apply to the main browser process executable during
|
||||
codesigning of production channel builds.
|
||||
-->
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<!-- Firefox needs to create executable pages (without MAP_JIT) -->
|
||||
<key>com.apple.security.cs.allow-unsigned-executable-memory</key><true/>
|
||||
|
||||
<!-- Firefox needs to create executable pages with MAP_JIT on aarch64 -->
|
||||
<key>com.apple.security.cs.allow-jit</key><true/>
|
||||
|
||||
<!-- Allow loading third party libraries. Needed for Flash and CDMs -->
|
||||
<key>com.apple.security.cs.disable-library-validation</key><true/>
|
||||
|
||||
<!-- Firefox needs to access the microphone on sites the user allows -->
|
||||
<key>com.apple.security.device.audio-input</key><true/>
|
||||
|
||||
<!-- Firefox needs to access the camera on sites the user allows -->
|
||||
<key>com.apple.security.device.camera</key><true/>
|
||||
|
||||
<!-- Firefox needs to access the location on sites the user allows -->
|
||||
<key>com.apple.security.personal-information.location</key><true/>
|
||||
|
||||
<!-- Allow Firefox to send Apple events to other applications. Needed
|
||||
for native messaging webextension helper applications launched by
|
||||
Firefox which rely on Apple Events to signal other processes. -->
|
||||
<key>com.apple.security.automation.apple-events</key><true/>
|
||||
</dict>
|
||||
</plist>
|
32
build/codesign/plugin-container.developer.entitlements.xml
Normal file
@@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<!--
|
||||
Entitlements to apply to the plugin-container.app bundle during
|
||||
codesigning of production channel builds.
|
||||
-->
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<!-- Firefox needs to create executable pages (without MAP_JIT) -->
|
||||
<key>com.apple.security.cs.allow-unsigned-executable-memory</key><true/>
|
||||
|
||||
<!-- Firefox needs to create executable pages with MAP_JIT on aarch64 -->
|
||||
<key>com.apple.security.cs.allow-jit</key><true/>
|
||||
|
||||
<!-- Allow loading third party libraries. Needed for Flash and CDMs -->
|
||||
<key>com.apple.security.cs.disable-library-validation</key><true/>
|
||||
|
||||
<!-- Firefox needs to access the microphone on sites the user allows -->
|
||||
<key>com.apple.security.device.audio-input</key><true/>
|
||||
|
||||
<!-- Firefox needs to access the camera on sites the user allows -->
|
||||
<key>com.apple.security.device.camera</key><true/>
|
||||
|
||||
<!-- Firefox needs to access the location on sites the user allows -->
|
||||
<key>com.apple.security.personal-information.location</key><true/>
|
||||
|
||||
<!-- Allow Firefox to send Apple events to other applications. Needed
|
||||
for native messaging webextension helper applications launched by
|
||||
Firefox which rely on Apple Events to signal other processes. -->
|
||||
<key>com.apple.security.automation.apple-events</key><true/>
|
||||
</dict>
|
||||
</plist>
|
155
build/codesign/sign.bash
Normal file
@@ -0,0 +1,155 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# 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 https://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# Runs codesign commands to codesign a Firefox .app bundle and enable macOS
|
||||
# Hardened Runtime. Intended to be manually run by developers working on macOS
|
||||
# 10.14+ who want to enable Hardened Runtime for manual testing. This is
|
||||
# provided as a stop-gap until automated build tooling is available that signs
|
||||
# binaries with a certificate generated during builds (bug 1522409). This
|
||||
# script requires macOS 10.14 because Hardened Runtime is only available for
|
||||
# applications running on 10.14 despite support for the codesign "-o runtime"
|
||||
# option being available in 10.13.6 and newer.
|
||||
#
|
||||
# The script requires an identity string (-i option) from an Apple Developer
|
||||
# ID certificate. This can be found in the macOS KeyChain after configuring an
|
||||
# Apple Developer ID certificate.
|
||||
#
|
||||
# Example usage on macOS 10.14:
|
||||
#
|
||||
# $ ./mach build
|
||||
# $ ./mach build package
|
||||
# $ open </PATH/TO/DMG/FILE.dmg>
|
||||
# <Drag Nightly.app to ~>
|
||||
# $ ./security/mac/hardenedruntime/codesign.bash \
|
||||
# -a ~/Nightly.app \
|
||||
# -i <MY-IDENTITY-STRING> \
|
||||
# -b security/mac/hardenedruntime/browser.developer.entitlements.xml
|
||||
# -p security/mac/hardenedruntime/plugin-container.developer.entitlements.xml
|
||||
# $ open ~/Nightly.app
|
||||
#
|
||||
|
||||
set -x
|
||||
|
||||
usage ()
|
||||
{
|
||||
echo "Usage: $0 "
|
||||
echo " -a <PATH-TO-BROWSER.app>"
|
||||
echo " -i <IDENTITY>"
|
||||
echo " -b <ENTITLEMENTS-FILE>"
|
||||
echo " -p <CHILD-ENTITLEMENTS-FILE>"
|
||||
echo " [-o <OUTPUT-DMG-FILE>]"
|
||||
exit -1
|
||||
}
|
||||
|
||||
# Make sure we are running on macOS with the sw_vers command available.
|
||||
SWVERS=/usr/bin/sw_vers
|
||||
if [ ! -x ${SWVERS} ]; then
|
||||
echo "ERROR: macOS 10.14 or later is required"
|
||||
exit -1
|
||||
fi
|
||||
|
||||
# Require macOS 10.14 or newer.
|
||||
OSVERSION=`${SWVERS} -productVersion|sed -En 's/[0-9]+\.([0-9]+)\.[0-9]+/\1/p'`;
|
||||
if [ ${OSVERSION} \< 14 ]; then
|
||||
echo "ERROR: macOS 10.14 or later is required"
|
||||
exit -1
|
||||
fi
|
||||
|
||||
while getopts "a:i:b:o:p:" opt; do
|
||||
case ${opt} in
|
||||
a ) BUNDLE=$OPTARG ;;
|
||||
i ) IDENTITY=$OPTARG ;;
|
||||
b ) BROWSER_ENTITLEMENTS_FILE=$OPTARG ;;
|
||||
p ) PLUGINCONTAINER_ENTITLEMENTS_FILE=$OPTARG ;;
|
||||
o ) OUTPUT_DMG_FILE=$OPTARG ;;
|
||||
\? ) usage; exit -1 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ -z "${BUNDLE}" ] ||
|
||||
[ -z "${IDENTITY}" ] ||
|
||||
[ -z "${PLUGINCONTAINER_ENTITLEMENTS_FILE}" ] ||
|
||||
[ -z "${BROWSER_ENTITLEMENTS_FILE}" ]; then
|
||||
usage
|
||||
exit -1
|
||||
fi
|
||||
|
||||
if [ ! -d "${BUNDLE}" ]; then
|
||||
echo "Invalid bundle. Bundle should be a .app directory"
|
||||
usage
|
||||
exit -1
|
||||
fi
|
||||
|
||||
if [ ! -e "${PLUGINCONTAINER_ENTITLEMENTS_FILE}" ]; then
|
||||
echo "Invalid entitlements file"
|
||||
usage
|
||||
exit -1
|
||||
fi
|
||||
|
||||
if [ ! -e "${BROWSER_ENTITLEMENTS_FILE}" ]; then
|
||||
echo "Invalid entitlements file"
|
||||
usage
|
||||
exit -1
|
||||
fi
|
||||
|
||||
# DMG file output flag is optional
|
||||
if [ ! -z "${OUTPUT_DMG_FILE}" ] &&
|
||||
[ -e "${OUTPUT_DMG_FILE}" ]; then
|
||||
echo "Output dmg file ${OUTPUT_DMG_FILE} exists. Please delete it first."
|
||||
usage
|
||||
exit -1
|
||||
fi
|
||||
|
||||
echo "-------------------------------------------------------------------------"
|
||||
echo "bundle: $BUNDLE"
|
||||
echo "identity: $IDENTITY"
|
||||
echo "browser entitlements file: $BROWSER_ENTITLEMENTS_FILE"
|
||||
echo "plugin-container entitlements file: $PLUGINCONTAINER_ENTITLEMENTS_FILE"
|
||||
echo "output dmg file (optional): $OUTPUT_DMG_FILE"
|
||||
echo "-------------------------------------------------------------------------"
|
||||
|
||||
# Clear extended attributes which cause codesign to fail
|
||||
xattr -cr "${BUNDLE}"
|
||||
|
||||
# Sign these binaries first. Signing of some binaries has an ordering
|
||||
# requirement where other binaries must be signed first.
|
||||
codesign --force -o runtime --verbose --sign "$IDENTITY" \
|
||||
"${BUNDLE}/Contents/Library/LaunchServices/org.mozilla.updater" \
|
||||
"${BUNDLE}/Contents/MacOS/XUL" \
|
||||
"${BUNDLE}/Contents/MacOS/pingsender" \
|
||||
"${BUNDLE}/Contents/MacOS/minidump-analyzer" \
|
||||
"${BUNDLE}/Contents/MacOS/*.dylib" \
|
||||
|
||||
codesign --force -o runtime --verbose --sign "$IDENTITY" --deep \
|
||||
"${BUNDLE}"/Contents/MacOS/crashreporter.app
|
||||
|
||||
codesign --force -o runtime --verbose --sign "$IDENTITY" --deep \
|
||||
"${BUNDLE}"/Contents/MacOS/updater.app
|
||||
|
||||
# Sign zen main executable
|
||||
codesign --force -o runtime --verbose --sign "$IDENTITY" --deep \
|
||||
--entitlements ${BROWSER_ENTITLEMENTS_FILE} \
|
||||
"${BUNDLE}"/Contents/MacOS/zen
|
||||
|
||||
# Sign Library/LaunchServices
|
||||
codesign --force -o runtime --verbose --sign "$IDENTITY" --deep \
|
||||
"${BUNDLE}"/Contents/Library/LaunchServices/org.mozilla.updater
|
||||
|
||||
# Sign gmp-clearkey files
|
||||
find "${BUNDLE}"/Contents/Resources/gmp-clearkey -type f -exec \
|
||||
codesign --force -o runtime --verbose --sign "$IDENTITY" {} \;
|
||||
|
||||
# Sign the main bundle
|
||||
codesign --force -o runtime --verbose --sign "$IDENTITY" \
|
||||
--entitlements ${BROWSER_ENTITLEMENTS_FILE} "${BUNDLE}"
|
||||
|
||||
# Sign the plugin-container bundle with deep
|
||||
codesign --force -o runtime --verbose --sign "$IDENTITY" --deep \
|
||||
--entitlements ${PLUGINCONTAINER_ENTITLEMENTS_FILE} \
|
||||
"${BUNDLE}"/Contents/MacOS/plugin-container.app
|
||||
|
||||
# Validate
|
||||
codesign -vvv --verbose=4 --deep "${BUNDLE}"
|
@@ -1,4 +1 @@
|
||||
<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" />
|
||||
Sorry, your browser does not support inline SVG.
|
||||
</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" />Sorry, your browser does not support inline SVG.</svg>
|
Before Width: | Height: | Size: 226 B After Width: | Height: | Size: 219 B |
BIN
configs/branding/alpha/PrivateBrowsing_150.png
Normal file
After Width: | Height: | Size: 7.3 KiB |
BIN
configs/branding/alpha/PrivateBrowsing_70.png
Normal file
After Width: | Height: | Size: 3.9 KiB |
BIN
configs/branding/alpha/VisualElements_150.png
Normal file
After Width: | Height: | Size: 6.5 KiB |
BIN
configs/branding/alpha/VisualElements_70.png
Normal file
After Width: | Height: | Size: 3.1 KiB |
BIN
configs/branding/alpha/content/about-logo-private.png
Normal file
After Width: | Height: | Size: 5.9 KiB |
1
configs/branding/alpha/content/about-logo-private.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 256 256"><defs><style>.g{fill:#000;}.g,.h,.i{stroke-width:0px;}.h{fill:url(#e);}.i{fill:#fff;}</style><linearGradient id="e" x1="128" y1="256" x2="128" y2="0" gradientUnits="userSpaceOnUse"><stop offset=".1" stop-color="#fff" stop-opacity=".02"/><stop offset=".9" stop-color="#fff" stop-opacity=".1"/></linearGradient></defs><g id="c"><rect class="g" y="0" width="256" height="256" rx="58.4" ry="58.4"/></g><g id="d"><rect class="h" y="0" width="256" height="256" rx="58.4" ry="58.4"/></g><g id="f"><path class="i" d="M165.9156,146.3156c-15.6016,0-28.6656,11.0055-31.8813,25.6562h-12.0687c-3.2156-14.6508-16.2797-25.6562-31.8813-25.6562-18.0063,0-32.6562,14.65-32.6562,32.6562s14.65,32.6562,32.6562,32.6562c15.6016,0,28.6656-11.0055,31.8813-25.6562h12.0687c3.2156,14.6508,16.2797,25.6562,31.8813,25.6562,18.0063,0,32.6562-14.65,32.6562-32.6562s-14.65-32.6562-32.6562-32.6562ZM90.0844,197.6281c-10.2875,0-18.6562-8.3687-18.6562-18.6562s8.3687-18.6562,18.6562-18.6562,18.6562,8.3688,18.6562,18.6562-8.3687,18.6562-18.6562,18.6562ZM165.9156,197.6281c-10.2875,0-18.6562-8.3687-18.6562-18.6562s8.3687-18.6562,18.6562-18.6562,18.6562,8.3688,18.6562,18.6562-8.3687,18.6562-18.6562,18.6562Z"/><path class="i" d="M214.4,115.6812h-21.8391l-9.2422-65.2906c-.3031-2.1406-1.5813-4.0219-3.4594-5.0969-1.8781-1.0719-4.1469-1.2188-6.1469-.3906l-45.7125,18.8906-45.7125-18.8906c-2-.8281-4.2688-.6813-6.1469.3906-1.8781,1.075-3.1562,2.9562-3.4594,5.0969l-9.2422,65.2906h-21.8391c-3.8656,0-7,3.1344-7,7s3.1344,7,7,7h172.8c3.8656,0,7-3.1344,7-7s-3.1344-7-7-7ZM85.2781,61.2875l40.0469,16.55c1.7125.7063,3.6375.7063,5.35,0l40.0469-16.55,7.6984,54.3937h-100.8406l7.6984-54.3937Z"/></g></svg>
|
After Width: | Height: | Size: 1.8 KiB |
BIN
configs/branding/alpha/content/about-logo-private@2x.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
configs/branding/alpha/content/about-logo.png
Normal file
After Width: | Height: | Size: 4.8 KiB |
1
configs/branding/alpha/content/about-logo.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg id="d" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 256 256"><defs><style>.f{fill:#000;}.f,.g,.h{stroke-width:0px;}.g{fill:url(#e);}.h{fill:#fff;}</style><linearGradient id="e" x1="128" y1="256" x2="128" y2="0" gradientUnits="userSpaceOnUse"><stop offset=".1" stop-color="#fff" stop-opacity=".02"/><stop offset=".9" stop-color="#fff" stop-opacity=".1"/></linearGradient></defs><rect class="f" width="256" height="256" rx="58.4" ry="58.4"/><rect class="g" width="256" height="256" rx="58.4" ry="58.4"/><path class="h" d="M202.9973,184.5702c-.1715,10.2808-8.7737,18.4298-19.0559,18.4298h-77.2885c-3.0056,0-5.0458-3.0553-3.894-5.8314l.0262-.0632c5.0822-12.2707,13.3289-22.6249,23.8591-30.1785,1.3098-.9395,2.8903-1.4269,4.5023-1.4269h53.1034c10.462,0,18.9225,8.5681,18.7473,19.0702Z"/><path class="h" d="M149.3471,53c3.0056,0,5.0458,3.0553,3.894,5.8314l-.0262.0631c-5.0822,12.2708-13.3289,22.6249-23.8591,30.1785-1.3098.9396-2.8903,1.427-4.5023,1.427h-52.7949c-10.2822,0-18.8844-8.149-19.0559-18.4298-.1752-10.5021,8.2853-19.0702,18.7473-19.0702h77.5971Z"/><path class="h" d="M71.7465,203c-2.3913,0-4.8207-.46-7.1673-1.4319-9.5666-3.9624-14.1096-14.9301-10.1472-24.4964,6.0943-14.7127,14.8294-27.9027,25.9634-39.2034,11.5341-11.7073,25.1364-20.8551,40.4297-27.1898,21.021-8.7076,37.393-25.0792,46.0995-46.0995,3.9624-9.567,14.9305-14.1093,24.4964-10.1472,9.5666,3.9624,14.1096,14.9301,10.1472,24.4964-6.0943,14.7127-14.8294,27.9027-25.9634,39.2034-11.5341,11.7073-25.1364,20.8551-40.4297,27.1898-21.021,8.7076-37.393,25.0792-46.0995,46.0995-2.9905,7.22-9.9725,11.5791-17.329,11.5791Z"/></svg>
|
After Width: | Height: | Size: 1.6 KiB |
BIN
configs/branding/alpha/content/about-logo@2x.png
Normal file
After Width: | Height: | Size: 9.3 KiB |
1
configs/branding/alpha/content/about-wordmark.svg
Normal file
After Width: | Height: | Size: 6.4 KiB |
1
configs/branding/alpha/content/firefox-wordmark.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 80 56"><defs><style>.b{fill:context-fill #20123a;}</style></defs><path class="b" d="M11.2896,37.6632h15.1928v5.2919H3.2415v-3.8076l15.1487-21.2557H3.2126v-5.2919h23.2393v3.811l-15.1622,21.2523ZM50.8649,26.3765c.5434,1.4469.8151,3.1418.8151,5.0778v1.7322h-15.5019v.017c0,1.1243.2089,2.0991.6301,2.9176.4195.822,1.0139,1.4537,1.7849,1.8987s1.6847.6657,2.7427.6657c.7014,0,1.3433-.0984,1.9258-.2955.5842-.197,1.0818-.4925,1.4979-.8899.4144-.394.7303-.8797.9476-1.4503l5.8404.3838c-.2972,1.4028-.9018,2.6255-1.8154,3.6683-.9137,1.0428-2.0906,1.8511-3.5273,2.4319-1.4385.5774-3.0959.8661-4.9726.8661-2.3419,0-4.3561-.4755-6.0408-1.43-1.6847-.9544-2.9805-2.3063-3.8907-4.0623-.9086-1.7526-1.362-3.8314-1.362-6.2327,0-2.3402.4534-4.3951,1.362-6.1647.9103-1.7696,2.1925-3.1486,3.8466-4.1336,1.6558-.9884,3.5986-1.4843,5.8318-1.4843,1.503,0,2.9024.2411,4.2032.7201,1.2992.4789,2.4354,1.199,3.4084,2.1568.9731.9578,1.7306,2.1602,2.274,3.6072ZM45.7378,29.2737c0-.9069-.1987-1.7119-.5927-2.4149-.3957-.6997-.9409-1.2534-1.6388-1.6508-.6964-.4008-1.503-.6012-2.4235-.6012-.9578,0-1.8053.2208-2.5406.6589-.7371.4382-1.3127,1.0292-1.7271,1.7628-.3818.679-.5853,1.4304-.6228,2.2451h9.5455ZM73.0682,20.9318c-1.1769-.6929-2.5543-1.0394-4.1353-1.0394-1.6898,0-3.1265.3872-4.3137,1.165-1.1854.7744-2.0294,1.824-2.5338,3.1486h-.2667v-4.0181h-6.017v22.7672h6.3125v-13.1617c.0102-.9782.1953-1.8138.557-2.5135.36-.6963.8644-1.2261,1.5115-1.593.647-.3635,1.396-.5469,2.2451-.5469,1.2653,0,2.257.394,2.9788,1.1786.7217.7846,1.0767,1.8749,1.0682,3.2675v13.3689h6.3125v-14.4965c0-1.7662-.326-3.2913-.9782-4.5718-.6521-1.2805-1.5658-2.2655-2.741-2.955Z"/></svg>
|
After Width: | Height: | Size: 1.7 KiB |
BIN
configs/branding/alpha/document.ico
Normal file
After Width: | Height: | Size: 106 KiB |
BIN
configs/branding/alpha/document_pdf.ico
Normal file
After Width: | Height: | Size: 104 KiB |
BIN
configs/branding/alpha/firefox.ico
Normal file
After Width: | Height: | Size: 102 KiB |
BIN
configs/branding/alpha/firefox64.ico
Normal file
After Width: | Height: | Size: 31 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 |
BIN
configs/branding/alpha/pbmode.ico
Normal file
After Width: | Height: | Size: 103 KiB |
@@ -1,4 +0,0 @@
|
||||
<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" />
|
||||
Sorry, your browser does not support inline SVG.
|
||||
</svg>
|
Before Width: | Height: | Size: 225 B |
Before Width: | Height: | Size: 483 KiB |
Before Width: | Height: | Size: 889 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 890 B |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 156 KiB |
Before Width: | Height: | Size: 5.1 KiB |
@@ -3,8 +3,10 @@ ac_add_options --with-app-name=${binName}
|
||||
ac_add_options --with-app-basename=Zen
|
||||
ac_add_options --enable-official-branding
|
||||
|
||||
# Localization
|
||||
ac_add_options --with-l10n-base="$PWD/browser/locales"
|
||||
|
||||
export MOZ_USER_DIR="${name}"
|
||||
export MOZ_APP_VENDOR="${vendor}"
|
||||
export MOZ_APP_BASENAME=Zen
|
||||
export MOZ_APP_PROFILE=${binName}
|
||||
export MOZ_APP_DISPLAYNAME="${name}"
|
||||
@@ -17,7 +19,6 @@ export MOZ_DISTRIBUTION_ID=${appId}
|
||||
# ac_add_options --enable-linker=gold
|
||||
|
||||
# Misc
|
||||
export MOZ_STUB_INSTALLER=1
|
||||
export MOZ_SOURCE_REPO=https://github.com/zen-browser/desktop
|
||||
export MOZ_SOURCE_CHANGESET=${changeset}
|
||||
export MOZ_INCLUDE_SOURCE_INFO=1
|
||||
@@ -32,9 +33,13 @@ if test "$ZEN_RELEASE"; then
|
||||
ac_add_options --disable-debug-symbols
|
||||
ac_add_options --disable-debug-js-modules
|
||||
ac_add_options --disable-tests
|
||||
|
||||
ac_add_options --disable-jprof
|
||||
ac_add_options --disable-vtune
|
||||
|
||||
ac_add_options --enable-rust-simd
|
||||
ac_add_options --enable-wasm-simd
|
||||
|
||||
mk_add_options MOZ_PARALLEL_COMPILE=1
|
||||
|
||||
ac_add_options --enable-proxy-bypass-protection
|
||||
@@ -44,14 +49,13 @@ if test "$ZEN_RELEASE"; then
|
||||
ac_add_options --disable-crashreporter
|
||||
ac_add_options --disable-geckodriver
|
||||
ac_add_options --disable-rust-tests
|
||||
|
||||
# Done by vlad, if something fails, it's his fault
|
||||
ac_add_options --disable-default-browser-agent
|
||||
|
||||
ac_add_options --disable-vtune
|
||||
|
||||
if ! test "$ZEN_DISABLE_LTO"; then
|
||||
export MOZ_LTO=1
|
||||
ac_add_options MOZ_LTO=1
|
||||
ac_add_options --enable-lto=full,cross
|
||||
export MOZ_LTO=cross,thin
|
||||
ac_add_options --enable-lto=cross,thin
|
||||
fi
|
||||
|
||||
ac_add_options --enable-jemalloc
|
||||
@@ -89,13 +93,14 @@ ac_add_options --enable-eme=widevine
|
||||
ac_add_options --allow-addon-sideload
|
||||
ac_add_options --with-unsigned-addon-scopes=app,system
|
||||
|
||||
mk_add_options MOZ_CRASHREPORTER=0
|
||||
mk_add_options MOZ_DATA_REPORTING=0
|
||||
mk_add_options MOZ_SERVICES_HEALTHREPORT=0
|
||||
mk_add_options MOZ_TELEMETRY_REPORTING=0
|
||||
|
||||
export MOZ_APP_UA_NAME="Firefox"
|
||||
|
||||
# Allow loading unsigned extensions
|
||||
export MOZ_REQUIRE_SIGNING=1
|
||||
mk_add_options MOZ_REQUIRE_SIGNING=1
|
||||
export MOZ_REQUIRE_SIGNING=
|
||||
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 --disable-elf-hack
|
||||
|
||||
ac_add_options --disable-gpsd
|
||||
ac_add_options --disable-necko-wifi
|
||||
|
||||
ac_add_options --enable-install-strip
|
||||
ac_add_options --enable-strip
|
||||
export STRIP_FLAGS="--strip-debug --strip-unneeded"
|
||||
@@ -32,20 +35,24 @@ if test "$ZEN_RELEASE"; then
|
||||
|
||||
export CFLAGS="$CFLAGS -O3 -ffp-contract=fast -march=x86-64"
|
||||
export CPPFLAGS="$CPPFLAGS -O3 -ffp-contract=fast -march=x86-64"
|
||||
export CXXFLAGS="$CXXFLAGS -O3 -ffp-contract=fast -march=x86-64"
|
||||
export CXXFLAGS="$CXXFLAGS -O3 -flto=thin -ffp-contract=fast -march=x86-64"
|
||||
export LDFLAGS="$LDFLAGS -Wl,-O3 -Wl,-mllvm,-fp-contract=fast -march=x86-64"
|
||||
export RUSTFLAGS="$RUSTFLAGS -C target-cpu=x86-64 -C codegen-units=1"
|
||||
export RUSTFLAGS="$RUSTFLAGS -C target-cpu=x86-64 -C codegen-units=1 -Clink-args=--icf=safe"
|
||||
else
|
||||
ac_add_options --enable-wasm-avx
|
||||
ac_add_options --enable-optimize="-O3 -march=x86-64-v3 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes"
|
||||
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 CPPFLAGS="$CPPFLAGS -O3 -ffp-contract=fast -march=x86-64-v3 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes"
|
||||
export CXXFLAGS="$CXXFLAGS -O3 -ffp-contract=fast -march=x86-64-v3 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes"
|
||||
export 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 -mpopcnt -mpclmul"
|
||||
export CXXFLAGS="$CXXFLAGS -O3 -flto=thin -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 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 -Clink-args=--icf=safe"
|
||||
fi
|
||||
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
|
||||
|
||||
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"
|
||||
fi
|
||||
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,11 +14,10 @@ if test "$ZEN_CROSS_COMPILING"; then
|
||||
CROSS_COMPILE=1
|
||||
TOOLS=$(echo ~)/win-cross
|
||||
|
||||
#export WIN32_REDIST_DIR="$TOOLS"/vs2022/VC/Redist/MSVC/14.34.31931/x64/Microsoft.VC143.CRT
|
||||
#export WIN_UCRT_REDIST_DIR="$TOOLS/vs2022/Windows Kits/10/Redist/10.0.22621.0/ucrt/DLLs/x64"
|
||||
export WIN_UCRT_REDIST_DIR="$(echo ~)/win-cross/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 MOZ_INCLUDE_SOURCE_INFO=1
|
||||
export MOZ_STUB_INSTALLER=1
|
||||
export WINEDEBUG=-all
|
||||
export WINE="$TOOLS/wine/bin/wine64"
|
||||
@@ -31,41 +30,37 @@ ac_add_options --target=x86_64-pc-windows-msvc
|
||||
|
||||
ac_add_options --disable-maintenance-service
|
||||
ac_add_options --disable-bits-download
|
||||
|
||||
ac_add_options --without-wasm-sandboxed-libraries
|
||||
|
||||
if test "$SURFER_COMPAT" = "true"; then
|
||||
ac_add_options --enable-optimize="-O3 -mavx -maes -w -ftree-vectorize"
|
||||
ac_add_options --enable-optimize="-O3 -w -ftree-vectorize"
|
||||
|
||||
export CFLAGS="-mavx -maes -mtune=haswell -march=x86-64"
|
||||
export CPPFLAGS="-mavx -maes -mtune=haswell -march=x86-64"
|
||||
export CXXFLAGS="-mavx -maes -mtune=haswell -march=x86-64"
|
||||
export LDFLAGS="-Wl,-O3"
|
||||
export RUSTFLAGS="-C target-feature=+avx -C codegen-units=1 -Ctarget-cpu=x86-64"
|
||||
export CFLAGS="-mtune=haswell -march=x86-64 -O2 -Qvec -w"
|
||||
export CPPFLAGS="-mtune=haswell -march=x86-64 -O2 -Qvec -w"
|
||||
export CXXFLAGS="-flto=thin -mtune=haswell -march=x86-64 -O2 -Qvec -w"
|
||||
export LDFLAGS="-Wl,-O2"
|
||||
export RUSTFLAGS="-Clink-args=--icf=safe -C codegen-units=1 -Ctarget-cpu=x86-64"
|
||||
else
|
||||
ac_add_options --enable-optimize="-O2 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes -Xclang -ftree-vectorize -w"
|
||||
ac_add_options --enable-optimize="-O2 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes -ftree-vectorize -Xclang -w"
|
||||
ac_add_options --enable-wasm-avx
|
||||
|
||||
export CFLAGS="-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 /arch:AVX -march=x86-64-v3"
|
||||
export CXXFLAGS="-O2 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes /arch:AVX -march=x86-64-v3"
|
||||
export LDFLAGS="-Wl,-O3 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes -march=x86-64-v3"
|
||||
export RUSTFLAGS="-C target-feature=+avx -C codegen-units=1 -Ctarget-cpu=x86-64-v3"
|
||||
export CFLAGS="-O2 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes -march=x86-64-v3"
|
||||
export CPPFLAGS="-O2 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes -march=x86-64-v3"
|
||||
export CXXFLAGS="-O2 -flto=thin -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes -march=x86-64-v3"
|
||||
export LDFLAGS="-Wl,-O3 -march=x86-64-v3"
|
||||
export RUSTFLAGS="-Clink-args=--icf=safe -C target-feature=+avx -C codegen-units=1 -Ctarget-cpu=x86-64-v3"
|
||||
fi
|
||||
export POLLY="-mllvm -polly -mllvm -polly-2nd-level-tiling -mllvm -polly-loopfusion-greedy -mllvm -polly-pattern-matching-based-opts -mllvm -polly-position=before-vectorizer -mllvm -polly-vectorizer=stripmine"
|
||||
export VERBOSE=1
|
||||
|
||||
#if test "$ZEN_GA_GENERATE_PROFILE"; then
|
||||
# mk_add_options "export MOZ_AUTOMATION_PACKAGE_GENERATED_SOURCES=0"
|
||||
# ac_add_options --enable-profile-generate=cross
|
||||
#else
|
||||
# ac_add_options --enable-profile-use=cross
|
||||
# if test "$SURFER_COMPAT" = "true"; then
|
||||
# ac_add_options --with-pgo-profile-path=$(echo ~)/artifact/merged-generic.profdata
|
||||
# ac_add_options --with-pgo-jarlog=$(echo ~)/artifact/en-US-generic.log
|
||||
# else
|
||||
# ac_add_options --with-pgo-profile-path=$(echo ~)/artifact/merged-specific.profdata
|
||||
# ac_add_options --with-pgo-jarlog=$(echo ~)/artifact/en-US-specific.log
|
||||
# fi
|
||||
#fi
|
||||
if test "$ZEN_CROSS_COMPILING"; then
|
||||
if test "$ZEN_GA_GENERATE_PROFILE"; then
|
||||
export CXXFLAGS="$CXXFLAGS -fprofile-generate -mllvm -enable-name-compression=false -mllvm -pgo-temporal-instrumentation -fprofile-update=atomic"
|
||||
mk_add_options "export MOZ_AUTOMATION_PACKAGE_GENERATED_SOURCES=0"
|
||||
ac_add_options --enable-profile-generate=cross
|
||||
else
|
||||
ac_add_options --enable-profile-use=cross
|
||||
ac_add_options --with-pgo-profile-path=$(echo ~)/artifact/merged.profdata
|
||||
ac_add_options --with-pgo-jarlog=$(echo ~)/artifact/en-US.log
|
||||
fi
|
||||
|
||||
fi
|
||||
|
@@ -11,3 +11,5 @@
|
||||
* Overall stability
|
||||
* Pinning tabs (Grid layout)
|
||||
* Overall UX
|
||||
* Themes Page
|
||||
* Settings Page
|
||||
|
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,99 +0,0 @@
|
||||
# 🌀 Zen Browser Performance traker
|
||||
```mermaid
|
||||
graph TD;
|
||||
A[mauro-balades] -->B(Zen custom code)
|
||||
G-->B
|
||||
H(ptr1337/CachyOS)-->|AUR Pkg and Opt. flags|D
|
||||
E(Fire Fox-Code)-->C
|
||||
B --> C{Final code}
|
||||
D-->G(Perf. Testing)
|
||||
C-->D(Build)
|
||||
D--> F(Release)
|
||||
F-->I(mar)
|
||||
F-->L(Mac)
|
||||
F-->T(Linux)
|
||||
F-->V(Win install)
|
||||
V-->Z(Zip)
|
||||
V-->Z2(Intall.exe)
|
||||
I-->I1(windows.mar)
|
||||
I-->I2(linux.mar)
|
||||
I-->I3(macos.mar)
|
||||
T-->T1(zen.linux.tar.bz2)
|
||||
T-->T2(AUR)
|
||||
T-->T3(Flatpak)
|
||||
T-->T4(AppImage)
|
||||
L-->L1(zen.macos.dmg)
|
||||
```
|
||||
|
||||
|
||||
## Scores
|
||||
|
||||
## 1
|
||||
- [NOCanoa](https://github.com/NOCanoa)
|
||||
|
||||
OS: win 11; CPU: i5 13600k
|
||||
|
||||
## web.basemark
|
||||
|
||||
https://web.basemark.com/
|
||||
|
||||
| | score: |CSS | HTML5 | Page load and Responsiveness | Resize Cap. |
|
||||
|-----------|-----|-----|-------|------------------------------|-------------|
|
||||
| 1.0.0-a.12-opt | 1874.49 | 59% | 91% | 91% | 76% |
|
||||
| 1.0.0-a.11-opt | 1678.49 | 59% | 91% | 91% | 76% |
|
||||
| 1.0.0-a.10 | 1660.89 | 59% | 91% | 91% | 76% |
|
||||
| 1.0.0-a.9 | 470 | why | why | why | why |
|
||||
| 1.0.0-a.8 | 446.74 | 59% | 91% | 96% | 76% |
|
||||
| 1.0.0-a.7 | 1964.43 | 59% | 91% | 91% | 76% |
|
||||
| 1.0.0-a.6 | 1747.98 | 59% | 91% | 91% | 76% |
|
||||
| 1.0.0-a.4 | 470.49 | 59% | 91% | 97% | 76% |
|
||||
| 1.0.0-a.3 | 475.52 |59% | 91% | 97% | 76% |
|
||||
| other | last | utpdate | 31/7 | 2024 | - |
|
||||
| Librewolf 128.0-2 | 1953.65 | 59.66% | 89.01% | 91.72% | 76.12% |
|
||||
| FF nightly 130.0a1 | 1912.77 | 59.66% | 90.91% | 91.72% | 76.12% |
|
||||
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Performance over time (Higher is better)"
|
||||
x-axis [.3, .4, .6, .7, .8, .9, .10, .11, .12]
|
||||
y-axis "Benchmark Points"
|
||||
bar [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]
|
||||
```
|
||||
|
||||
## Speedometer3.0
|
||||
|
||||
https://browserbench.org/Speedometer3.0/
|
||||
|
||||
| | score: |
|
||||
|-----------|-----|
|
||||
| 1.0.0-a.12-opt | 21.5 |
|
||||
| 1.0.0-a.11-opt | 20.8 |
|
||||
| 1.0.0-a.10 | 21.2 |
|
||||
| others| - |
|
||||
| Vivaldi 6.7.3329.39| 27.8 |
|
||||
| FF nightly 130.0a1 | 27.0 |
|
||||
| Librewolf 128.0-2 | 20.2 |
|
||||
|
||||
|
||||
## 2
|
||||
|
||||
- [Verix](https://github.com/Veriiix)
|
||||
|
||||
OS: Win 11
|
||||
CPU: i7-13700KF
|
||||
GPU: AMD RX 7900 XTX
|
||||
https://www.tablesgenerator.com/
|
||||
|
||||
| Version | Score: |
|
||||
|------------|--------|
|
||||
| 1.0.0-a.12-opt | 23 |
|
||||
| 1.0.0-a.11-opt | 22.1 |
|
||||
| 1.0.0-a.10 | 21.7 |
|
||||
| 1.0.0-a.9 | 3.7 |
|
||||
| others| - |
|
||||
| Default FF | 28 |
|
||||
|
||||
|
||||
https://browserbench.org/Speedometer3.0/
|
@@ -1,5 +0,0 @@
|
||||
|
||||
# Warp Build
|
||||
|
||||
For linux, we are using [warpbuild](https://warpbuild.com/) because github workflows can't handle building firefox :(
|
||||
|
@@ -1,7 +1,7 @@
|
||||
|
||||
# Workspaces Layout
|
||||
|
||||
```
|
||||
```json
|
||||
{
|
||||
"workspaces": [
|
||||
{
|
||||
|
@@ -17,6 +17,7 @@ finish-args:
|
||||
- --filesystem=xdg-download:rw
|
||||
- --device=all
|
||||
- --talk-name=org.freedesktop.FileManager1
|
||||
- --talk-name=org.freedesktop.ScreenSaver
|
||||
- --own-name=org.mozilla.zen.*
|
||||
- --own-name=org.mpris.MediaPlayer2.firefox.*
|
||||
- --system-talk-name=org.freedesktop.NetworkManager
|
||||
@@ -29,7 +30,7 @@ modules:
|
||||
|
||||
- install -Dm0755 metadata/launch-script.sh ${{FLATPAK_DEST}}/bin/launch-script.sh
|
||||
- install -Dm0644 metadata/policies.json ${{FLATPAK_DEST}}/bin/distribution/policies.json
|
||||
- install -Dm0644 metadata/icons/io.github.zen_browser.zen.png ${{FLATPAK_DEST}}/share/icons/hicolor/256x256/apps/${{FLATPAK_ID}}.png
|
||||
- install -Dm0644 metadata/icons/io.github.zen_browser.zen.svg ${{FLATPAK_DEST}}/share/icons/hicolor/scalable/apps/${{FLATPAK_ID}}.svg
|
||||
- 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
|
||||
|
||||
@@ -40,7 +41,7 @@ modules:
|
||||
strip-components: 0
|
||||
|
||||
- type: archive
|
||||
url: https://github.com/zen-browser/flatpak/releases/latest/download/archive.tar
|
||||
url: https://github.com/zen-browser/flatpak/releases/download/{version}/archive.tar
|
||||
sha256: {flatpak_sha256}
|
||||
strip-components: 0
|
||||
dest: metadata
|
1
l10n
Submodule
@@ -27,6 +27,6 @@
|
||||
},
|
||||
"homepage": "https://github.com/zen-browser/core#readme",
|
||||
"dependencies": {
|
||||
"@zen-browser/surfer": "^1.2.7"
|
||||
"@zen-browser/surfer": "^1.3.6"
|
||||
}
|
||||
}
|
||||
|
10
pnpm-lock.yaml
generated
@@ -9,8 +9,8 @@ importers:
|
||||
.:
|
||||
dependencies:
|
||||
'@zen-browser/surfer':
|
||||
specifier: ^1.2.7
|
||||
version: 1.2.7
|
||||
specifier: ^1.3.6
|
||||
version: 1.3.6
|
||||
|
||||
packages:
|
||||
|
||||
@@ -109,8 +109,8 @@ packages:
|
||||
'@types/node@17.0.45':
|
||||
resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==}
|
||||
|
||||
'@zen-browser/surfer@1.2.7':
|
||||
resolution: {integrity: sha512-VbbbB7crGXrdfk1PPnlsWFWErwjtccXbRuw5mOQzY327d2t5VraxmkqTzcuGSTxpu3CR/KvzNu0gDg/6+7b4NQ==}
|
||||
'@zen-browser/surfer@1.3.6':
|
||||
resolution: {integrity: sha512-b+5GS9qMGoMB8lRaFYRA9C3EqntVf35sBx5dq7X3IuqlB9GmarYoS5E26EvXbmPJcfYkJG7ar05nHkkZyOrGuw==}
|
||||
hasBin: true
|
||||
|
||||
ansi-regex@5.0.1:
|
||||
@@ -786,7 +786,7 @@ snapshots:
|
||||
|
||||
'@types/node@17.0.45': {}
|
||||
|
||||
'@zen-browser/surfer@1.2.7':
|
||||
'@zen-browser/surfer@1.3.6':
|
||||
dependencies:
|
||||
'@resvg/resvg-js': 1.4.0
|
||||
async-icns: 1.0.2
|
||||
|
17
scripts/copy-language-pack.sh
Normal file
@@ -0,0 +1,17 @@
|
||||
browser_locales=engine/browser/locales
|
||||
|
||||
copy_browser_locales() {
|
||||
langId=$1
|
||||
mkdir -p $browser_locales/$langId
|
||||
if [ "$langId" = "en-US" ]; then
|
||||
find $browser_locales/$langId -type f -name "zen*" -delete
|
||||
rsync -av --exclude=.git ./l10n/en-US/browser/ $browser_locales/$langId/
|
||||
return
|
||||
fi
|
||||
rm -rf $browser_locales/$langId/
|
||||
rsync -av --exclude=.git ./l10n/$langId/ $browser_locales/$langId/
|
||||
}
|
||||
|
||||
LANG=$1
|
||||
echo "Copying language pack for $LANG"
|
||||
copy_browser_locales $LANG
|
57
scripts/download-language-packs.sh
Normal file
@@ -0,0 +1,57 @@
|
||||
|
||||
set -ex
|
||||
|
||||
CURRENT_DIR=$(pwd)
|
||||
|
||||
git config --global init.defaultBranch main
|
||||
git config --global fetch.prune true
|
||||
|
||||
mkdir ~/tools
|
||||
cd ~/tools
|
||||
git clone https://github.com/glandium/git-cinnabar.git
|
||||
cd git-cinnabar
|
||||
git checkout 0.5.11
|
||||
export PATH=~/tools/git-cinnabar:$PATH
|
||||
cd ~
|
||||
git cinnabar download
|
||||
cd $CURRENT_DIR
|
||||
|
||||
update_language() {
|
||||
langId=$1
|
||||
cd ./l10n
|
||||
cd $langId
|
||||
|
||||
echo "Updating $langId"
|
||||
rm -rf .git
|
||||
|
||||
git init
|
||||
git remote add upstream hg://hg.mozilla.org/l10n-central/$langId
|
||||
git remote set-url upstream hg://hg.mozilla.org/l10n-central/$langId
|
||||
git pull upstream branches/default/tip
|
||||
|
||||
cd $CURRENT_DIR
|
||||
}
|
||||
|
||||
export PATH=~/tools/git-cinnabar:$PATH
|
||||
for lang in $(cat ./l10n/supported-languages); do
|
||||
update_language $lang
|
||||
done
|
||||
cd $CURRENT_DIR
|
||||
|
||||
# Move all the files to the correct location
|
||||
|
||||
sh scripts/copy-language-pack.sh en-US
|
||||
for lang in $(cat ./l10n/supported-languages); do
|
||||
sh scripts/copy-language-pack.sh $lang
|
||||
done
|
||||
|
||||
wait
|
||||
|
||||
echo "Cleaning up"
|
||||
rm -rf ~/tools
|
||||
rm -rf ~/.git-cinnabar
|
||||
|
||||
for lang in $(cat ./l10n/supported-languages); do
|
||||
# remove every file except if it starts with "zen"
|
||||
find ./l10n/$lang -type f -not -name "zen*" -delete
|
||||
done
|
2
scripts/update-en-US-packs.sh
Normal file
@@ -0,0 +1,2 @@
|
||||
|
||||
sh ./scripts/copy-language-pack.sh en-US
|
@@ -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.
|
||||
*
|
||||
@@ -18,7 +21,7 @@
|
||||
* SECTION: FASTFOX *
|
||||
****************************************************************************/
|
||||
/** GENERAL ***/
|
||||
pref("content.notify.interval", 100000);
|
||||
pref("content.notify.interval", 100000); // (.10s); alt=500000 (.50s)
|
||||
|
||||
/** GFX ***/
|
||||
pref("gfx.canvas.accelerated.cache-items", 4096);
|
||||
@@ -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.pacing.requests.enabled", false);
|
||||
pref("network.dnsCacheExpiration", 3600);
|
||||
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", 10240);
|
||||
|
||||
/** SPECULATIVE LOADING ***/
|
||||
pref("network.dns.disablePrefetch", true);
|
||||
pref("network.dns.disablePrefetchFromHTTPS", true);
|
||||
pref("network.prefetch-next", false);
|
||||
pref("network.predictor.enabled", false);
|
||||
pref("network.predictor.enable-prefetch", false);
|
||||
/** MIXED CONTENT + CROSS-SITE ***/
|
||||
pref("pdfjs.enableScripting", false);
|
||||
pref("extensions.postDownloadThirdPartyPrompt", false);
|
||||
|
||||
/** EXPERIMENTAL ***/
|
||||
pref("layout.css.grid-template-masonry-value.enabled", true);
|
||||
@@ -67,7 +69,6 @@ pref("network.cookie.sameSite.noneRequiresSecure", true);
|
||||
pref("browser.download.start_downloads_in_tmp_dir", true);
|
||||
pref("browser.helperApps.deleteTempFileOnExit", true);
|
||||
pref("browser.uitour.enabled", false);
|
||||
pref("privacy.globalprivacycontrol.enabled", true);
|
||||
|
||||
/** OCSP & CERTS / HPKP ***/
|
||||
pref("security.OCSP.enabled", 0);
|
||||
@@ -117,27 +118,27 @@ pref("permissions.manager.defaultsUrl", "");
|
||||
pref("webchannel.allowObject.urlWhitelist", "");
|
||||
|
||||
/** TELEMETRY ***/
|
||||
pref("datareporting.policy.dataSubmissionEnabled", false);
|
||||
pref("datareporting.healthreport.uploadEnabled", false);
|
||||
pref("toolkit.telemetry.unified", false);
|
||||
pref("toolkit.telemetry.enabled", false);
|
||||
pref("toolkit.telemetry.server", "data:,");
|
||||
pref("toolkit.telemetry.archive.enabled", false);
|
||||
pref("toolkit.telemetry.newProfilePing.enabled", false);
|
||||
pref("toolkit.telemetry.shutdownPingSender.enabled", false);
|
||||
pref("toolkit.telemetry.updatePing.enabled", false);
|
||||
pref("toolkit.telemetry.bhrPing.enabled", false);
|
||||
pref("toolkit.telemetry.firstShutdownPing.enabled", false);
|
||||
pref("toolkit.telemetry.coverage.opt-out", true);
|
||||
pref("toolkit.coverage.opt-out", true);
|
||||
pref("toolkit.coverage.endpoint.base", "");
|
||||
pref("browser.newtabpage.activity-stream.feeds.telemetry", false);
|
||||
pref("browser.newtabpage.activity-stream.telemetry", false);
|
||||
pref("datareporting.policy.dataSubmissionEnabled", false, locked);
|
||||
pref("datareporting.healthreport.uploadEnabled", false, locked);
|
||||
pref("toolkit.telemetry.unified", false, locked);
|
||||
pref("toolkit.telemetry.enabled", false, locked);
|
||||
pref("toolkit.telemetry.server", "data:,", locked);
|
||||
pref("toolkit.telemetry.archive.enabled", false, locked);
|
||||
pref("toolkit.telemetry.newProfilePing.enabled", false, locked);
|
||||
pref("toolkit.telemetry.shutdownPingSender.enabled", false, locked);
|
||||
pref("toolkit.telemetry.updatePing.enabled", false, locked);
|
||||
pref("toolkit.telemetry.bhrPing.enabled", false, locked);
|
||||
pref("toolkit.telemetry.firstShutdownPing.enabled", false, locked);
|
||||
pref("toolkit.telemetry.coverage.opt-out", true, locked);
|
||||
pref("toolkit.coverage.opt-out", true, locked);
|
||||
pref("toolkit.coverage.endpoint.base", "", locked);
|
||||
pref("browser.newtabpage.activity-stream.feeds.telemetry", false, locked);
|
||||
pref("browser.newtabpage.activity-stream.telemetry", false, locked);
|
||||
|
||||
/** EXPERIMENTS ***/
|
||||
pref("app.shield.optoutstudies.enabled", false);
|
||||
pref("app.normandy.enabled", false);
|
||||
pref("app.normandy.api_url", "");
|
||||
pref("app.shield.optoutstudies.enabled", false, locked);
|
||||
pref("app.normandy.enabled", false, locked);
|
||||
pref("app.normandy.api_url", "", locked);
|
||||
|
||||
/** CRASH REPORTS ***/
|
||||
pref("breakpad.reportURL", "");
|
||||
@@ -154,7 +155,7 @@ pref("dom.private-attribution.submission.enabled", false);
|
||||
* SECTION: PESKYFOX *
|
||||
****************************************************************************/
|
||||
/** MOZILLA UI ***/
|
||||
pref("browser.privatebrowsing.vpnpromourl", "");
|
||||
pref("browser.privatebrowsing.vpnpromourl", "", locked);
|
||||
pref("extensions.getAddons.showPane", false);
|
||||
pref("extensions.htmlaboutaddons.recommendations.enabled", false);
|
||||
pref("browser.discovery.enabled", false);
|
||||
|
@@ -13,9 +13,12 @@ pref("browser.tabs.hoverPreview.enabled", true);
|
||||
pref("browser.tabs.cardPreview.delayMs", 100);
|
||||
|
||||
#ifdef MOZ_UPDATE_CHANNEL
|
||||
pref("devtools.debugger.prompt-connection", false);
|
||||
pref("devtools.debugger.prompt-connection", true);
|
||||
#endif
|
||||
|
||||
// Dont download the multilingual dictionary
|
||||
pref("intl.multilingual.downloadEnabled", false);
|
||||
|
||||
// Theme
|
||||
pref('toolkit.legacyUserProfileCustomizations.stylesheets', true);
|
||||
pref('browser.compactmode.show', true);
|
||||
@@ -56,21 +59,35 @@ pref("browser.ping-centre.telemetry", false);
|
||||
pref("browser.attribution.enabled", false);
|
||||
pref("toolkit.telemetry.pioneer-new-studies-available", false);
|
||||
|
||||
pref("app.update.checkInstallTime.days", 2);
|
||||
|
||||
// CUSTOM ZEN PREFS
|
||||
|
||||
pref('zen.welcomeScreen.enabled', true);
|
||||
pref('zen.welcomeScreen.seen', false);
|
||||
pref('zen.tabs.vertical', true);
|
||||
pref('zen.tabs.vertical.right-side', false);
|
||||
pref('zen.theme.accent-color', "#aac7ff");
|
||||
pref('zen.theme.border-radius', 10); // In pixels
|
||||
pref('zen.theme.toolbar-themed', true);
|
||||
pref('zen.theme.pill-button', false);
|
||||
pref('zen.theme.floating-urlbar', false);
|
||||
pref('zen.view.compact', false);
|
||||
pref('zen.view.compact.hide-toolbar', 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.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('zen.themes.tabs.legacy-location', false);
|
||||
|
||||
// Pref to enable the new profiles (TODO: Check this out!)
|
||||
//pref("browser.profiles.enabled", true);
|
||||
|
||||
@@ -86,7 +103,7 @@ pref('zen.splitView.working', false);
|
||||
pref('zen.workspaces.enabled', true);
|
||||
|
||||
// Zen Watermark
|
||||
pref('zen.watermark.enabled', true);
|
||||
pref('zen.watermark.enabled', true, sticky);
|
||||
|
||||
// Smooth scrolling
|
||||
pref('apz.overscroll.enabled', true); // not DEFAULT on Linux
|
||||
@@ -94,14 +111,14 @@ pref('general.smoothScroll', true); // DEFAULT
|
||||
|
||||
// Privacy
|
||||
pref('dom.private-attribution.submission.enabled', false);
|
||||
pref('dom.security.https_only_mode', true);
|
||||
|
||||
pref('media.eme.enabled', true);
|
||||
pref('webgl.disabled', false);
|
||||
|
||||
pref("app.update.url.manual", "https://get-zen.vercel.app/download");
|
||||
pref("app.update.url.details", "hhttps://get-zen.vercel.app/download");
|
||||
pref("app.releaseNotesURL", "https://get-zen.vercel.app/release-notes");
|
||||
pref("app.releaseNotesURL.aboutDialog", "https://get-zen.vercel.app/release-notes");
|
||||
pref("app.update.url.manual", "https://www.zen-browser.app/download");
|
||||
pref("app.update.url.details", "https://www.zen-browser.app/download");
|
||||
pref("app.releaseNotesURL", "https://www.zen-browser.app/release-notes");
|
||||
pref("app.releaseNotesURL.aboutDialog", "https://www.zen-browser.app/release-notes");
|
||||
|
||||
// Enable importers for other browsers
|
||||
pref('browser.migrate.vivaldi.enabled', true);
|
||||
@@ -112,4 +129,60 @@ pref('browser.migrate.opera.enabled', true);
|
||||
// pref('network.proxy.type', 0);
|
||||
// pref('network.trr.mode', 5);
|
||||
|
||||
#include better-fox.js
|
||||
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);
|
||||
|
||||
// Font rendering, not for MacOSX and Linux
|
||||
#ifndef XP_UNIX
|
||||
#ifndef XP_MACOSX
|
||||
pref("gfx.font_rendering.directwrite.bold_simulation", 2);
|
||||
pref("gfx.font_rendering.cleartype_params.enhanced_contrast", 25);
|
||||
pref("gfx.font_rendering.cleartype_params.force_gdi_classic_for_families", "");
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// Enable GPU by default
|
||||
pref('gfx.webrender.all', true);
|
||||
pref('layers.acceleration.force-enabled', true);
|
||||
pref('media.ffmpeg.vaapi.enabled', true);
|
||||
|
||||
#if defined(XP_WIN)
|
||||
pref("dom.ipc.processPriorityManager.backgroundUsesEcoQoS", false);
|
||||
#endif
|
||||
|
||||
// Enable experimental settings page (Usef for Zen Labs)
|
||||
pref('browser.preferences.experimental', true);
|
||||
|
||||
#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", false);
|
||||
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);
|
||||
|
||||
// Expose Letterboxing https://github.com/zen-browser/desktop/issues/475
|
||||
pref("privacy.resistFingerprinting.letterboxing", false);
|
||||
pref("privacy.resistFingerprinting.letterboxing.dimensions", "");
|
||||
|
@@ -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();
|
127
src/browser/base/content/ZenStartup.mjs
Normal file
@@ -0,0 +1,127 @@
|
||||
|
||||
var ZenStartup = {
|
||||
init() {
|
||||
this._changeSidebarLocation();
|
||||
this._zenInitBrowserLayout();
|
||||
window.SessionStore.promiseInitialized.then(async () => {
|
||||
this._focusSearchBar();
|
||||
});
|
||||
},
|
||||
|
||||
_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 legacyLocation = Services.prefs.getBoolPref("zen.themes.tabs.legacy-location", false);
|
||||
const kElementsToAppend = [
|
||||
"sidebar-splitter",
|
||||
"sidebar-box",
|
||||
];
|
||||
if (legacyLocation) {
|
||||
kElementsToAppend.push("navigator-toolbox");
|
||||
window.document.documentElement.setAttribute("zen-sidebar-legacy", "true");
|
||||
}
|
||||
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");
|
||||
|
||||
const browser = document.getElementById("browser")
|
||||
const toolbox = document.getElementById("navigator-toolbox");
|
||||
if (!legacyLocation) {
|
||||
browser.prepend(toolbox);
|
||||
}
|
||||
|
||||
// remove all styles except for the width, since we are xulstoring the complet style list
|
||||
const width = toolbox.style.width;
|
||||
toolbox.removeAttribute("style");
|
||||
toolbox.style.width = width;
|
||||
|
||||
// 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");
|
||||
toolbox.insertAdjacentElement("afterend", splitter);
|
||||
},
|
||||
|
||||
_focusSearchBar() {
|
||||
gURLBar.focus();
|
||||
},
|
||||
};
|
||||
|
||||
ZenStartup.init();
|
@@ -21,6 +21,10 @@ var gZenUIManager = {
|
||||
const button = document.getElementById('zen-bookmark-button');
|
||||
SidebarController.toggle('viewBookmarksSidebar', button);
|
||||
},
|
||||
|
||||
createValidXULText(text) {
|
||||
return text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
|
||||
}
|
||||
};
|
||||
|
||||
var gZenVerticalTabsManager = {
|
||||
@@ -28,7 +32,35 @@ var gZenVerticalTabsManager = {
|
||||
//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.max-width', this._updateEvent.bind(this));
|
||||
Services.prefs.addObserver('zen.view.sidebar-expanded.on-hover', this._updateOnHoverVerticalTabs.bind(this));
|
||||
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() {
|
||||
@@ -73,5 +105,38 @@ var gZenVerticalTabsManager = {
|
||||
toggleExpand() {
|
||||
let expanded = !this.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
|
||||
index a79a9734619f89639c15087fe28e9615354a7209..edaef604d33d76b570571e1bbb2ebc590e045d87 100644
|
||||
index f8d49ac2a3a62f389ea44b07a26fcb102abc0b24..c29415e10c776ebc435f33e55f8afb71f0dcf22a 100644
|
||||
--- a/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();
|
||||
BrowserSearch.init();
|
||||
BrowserPageActions.init();
|
||||
+
|
||||
+ Services.scriptloader.loadSubScript("chrome://browser/content/ZenStartup.mjs", window);
|
||||
+ Services.scriptloader.loadSubScript("chrome://browser/content/zenThemeModifier.js", window);
|
||||
+
|
||||
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
|
||||
index 3063370347db9e2812ad30205e585c849e44c91e..be74d9e624b8220cb9bd009bae31fb513c4ec73f 100644
|
||||
index 481ebbee437250c71e9bd10c4fb6fc0c31314925..3bb046a4635fad831cc447e29516ee5ed407a3f2 100644
|
||||
--- a/browser/base/content/browser.xhtml
|
||||
+++ b/browser/base/content/browser.xhtml
|
||||
@@ -139,6 +139,8 @@
|
||||
@@ -138,6 +138,8 @@
|
||||
window.addEventListener("DOMContentLoaded",
|
||||
gBrowserInit.onDOMContentLoaded.bind(gBrowserInit), { once: true });
|
||||
</script>
|
||||
+#include zen-locales.inc.xhtml
|
||||
+#include zen-scripts.inc.xhtml
|
||||
+#include zen-assets.inc.xhtml
|
||||
</head>
|
||||
<html:body xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
# All sets except for popupsets (commands, keys, and stringbundles)
|
||||
@@ -160,9 +162,12 @@
|
||||
@@ -159,9 +161,12 @@
|
||||
</vbox>
|
||||
</html:template>
|
||||
|
||||
@@ -27,10 +27,3 @@ index 3063370347db9e2812ad30205e585c849e44c91e..be74d9e624b8220cb9bd009bae31fb51
|
||||
|
||||
<html:template id="customizationPanel">
|
||||
<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
|
||||
index ef8245938ea669227c255d85422a26b99cb2290b..48c061796072e976a45f7bd0ca1c8b3913728fc7 100644
|
||||
index 1fb595272a184f9a40f56f87d86232e3324f7750..8dd0f0ff856be524a5fa27fb8c6180c1fe058134 100644
|
||||
--- a/browser/base/content/main-popupset.inc.xhtml
|
||||
+++ b/browser/base/content/main-popupset.inc.xhtml
|
||||
@@ -80,6 +80,12 @@
|
||||
<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 @@
|
||||
@@ -144,6 +144,10 @@
|
||||
hidden="true"
|
||||
tabspecific="true"
|
||||
aria-labelledby="editBookmarkPanelTitle">
|
||||
@@ -26,22 +13,15 @@ index ef8245938ea669227c255d85422a26b99cb2290b..48c061796072e976a45f7bd0ca1c8b39
|
||||
<box class="panel-header">
|
||||
<html:h1>
|
||||
<html:span id="editBookmarkPanelTitle"/>
|
||||
@@ -191,12 +201,14 @@
|
||||
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();"/>
|
||||
@@ -169,6 +173,7 @@
|
||||
class="footer-button"/>
|
||||
</html:moz-button-group>
|
||||
</vbox>
|
||||
+ </vbox>
|
||||
</panel>
|
||||
</html:template>
|
||||
|
||||
@@ -514,6 +526,8 @@
|
||||
@@ -454,6 +459,8 @@
|
||||
|
||||
#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
|
||||
index 390a1300a1213af2b411ba09c67e3c25750ee6c3..253d7abfcc1ade419c8f70289719cdc53898cab4 100644
|
||||
index 18b91c95b88d11ddb257de03f12bc3e4cc75a96a..f117cfa7c9d1f9eb537cebbef42a9d2d945d53ac 100644
|
||||
--- a/browser/base/content/navigator-toolbox.inc.xhtml
|
||||
+++ b/browser/base/content/navigator-toolbox.inc.xhtml
|
||||
@@ -2,7 +2,7 @@
|
||||
@@ -20,27 +20,29 @@ index 390a1300a1213af2b411ba09c67e3c25750ee6c3..253d7abfcc1ade419c8f70289719cdc5
|
||||
<toolbartabstop/>
|
||||
<hbox id="TabsToolbar-customization-target" flex="1">
|
||||
<toolbarbutton id="firefox-view-button"
|
||||
+ hidden="true"
|
||||
+ hidden="true"
|
||||
class="toolbarbutton-1 chromeclass-toolbar-additional"
|
||||
data-l10n-id="toolbar-button-firefox-view-2"
|
||||
role="button"
|
||||
@@ -50,13 +51,14 @@
|
||||
@@ -50,7 +51,7 @@
|
||||
aria-multiselectable="true"
|
||||
setfocus="false"
|
||||
tooltip="tabbrowser-tab-tooltip"
|
||||
- orient="horizontal"
|
||||
+ orient="vertical"
|
||||
stopwatchid="FX_TAB_CLICK_MS">
|
||||
<hbox class="tab-drop-indicator" hidden="true"/>
|
||||
# If the name (tabbrowser-arrowscrollbox) or structure of this changes
|
||||
# significantly, there is an optimization in
|
||||
# DisplayPortUtils::MaybeCreateDisplayPortInFirstScrollFrameEncountered based
|
||||
# the current structure that we may want to revisit.
|
||||
@@ -66,7 +67,7 @@
|
||||
tooltip="dynamic-shortcut-tooltip"
|
||||
data-l10n-id="tabs-toolbar-new-tab"/>
|
||||
</html:div>
|
||||
- <arrowscrollbox id="tabbrowser-arrowscrollbox" orient="horizontal" flex="1" style="min-width: 1px;" clicktoscroll="true" scrolledtostart="true" scrolledtoend="true">
|
||||
+ <arrowscrollbox id="tabbrowser-arrowscrollbox" orient="vertical" style="min-width: 1px;" clicktoscroll="true" scrolledtostart="true" scrolledtoend="true">
|
||||
<tab is="tabbrowser-tab" class="tabbrowser-tab" selected="true" visuallyselected="" fadein=""/>
|
||||
<hbox id="tabbrowser-arrowscrollbox-periphery">
|
||||
<toolbartabstop/>
|
||||
@@ -103,9 +105,10 @@
|
||||
@@ -113,9 +114,10 @@
|
||||
<toolbarbutton id="content-analysis-indicator"
|
||||
oncommand="ContentAnalysis.showPanel(this, PanelUI);"
|
||||
class="toolbarbutton-1 content-analysis-indicator-icon"/>
|
||||
@@ -53,22 +55,7 @@ index 390a1300a1213af2b411ba09c67e3c25750ee6c3..253d7abfcc1ade419c8f70289719cdc5
|
||||
</toolbar>
|
||||
|
||||
</vbox>
|
||||
@@ -409,6 +412,14 @@
|
||||
<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 @@
|
||||
@@ -471,6 +473,7 @@
|
||||
|
||||
<toolbarbutton id="fxa-toolbar-menu-button" class="toolbarbutton-1 chromeclass-toolbar-additional subviewbutton-nav"
|
||||
badged="true"
|
||||
@@ -76,12 +63,11 @@ index 390a1300a1213af2b411ba09c67e3c25750ee6c3..253d7abfcc1ade419c8f70289719cdc5
|
||||
delegatesanchor="true"
|
||||
onmousedown="gSync.toggleAccountPanel(this, event)"
|
||||
onkeypress="gSync.toggleAccountPanel(this, event)"
|
||||
@@ -501,6 +513,8 @@
|
||||
@@ -522,6 +525,7 @@
|
||||
consumeanchor="PanelUI-button"
|
||||
data-l10n-id="appmenu-menu-button-closed2"/>
|
||||
</toolbaritem>
|
||||
+
|
||||
+ #include titlebar-items.inc.xhtml
|
||||
+#include titlebar-items.inc.xhtml
|
||||
</toolbar>
|
||||
|
||||
<toolbar id="PersonalToolbar"
|
||||
|
@@ -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>
|
42
src/browser/base/content/zen-assets.jar.inc.mn
Normal file
@@ -0,0 +1,42 @@
|
||||
|
||||
|
||||
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-tabs/horizontal-tabs.css (content/zen-styles/zen-tabs/horizontal-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>
|
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>
|
Before Width: | Height: | Size: 674 B After Width: | Height: | Size: 894 B |