mirror of
https://github.com/gorhill/uBlock.git
synced 2025-10-05 21:32:39 +02:00
Compare commits
1597 Commits
1.56.1b0
...
2a2e223fd9
Author | SHA1 | Date | |
---|---|---|---|
|
2a2e223fd9 | ||
|
cdc5a4a0e7 | ||
|
be14670b76 | ||
|
4ee38a056e | ||
|
0d4f55ff30 | ||
|
a43d1d8c42 | ||
|
41a65315f9 | ||
|
5bcdf3731d | ||
|
cc30763c57 | ||
|
d376adaae8 | ||
|
d8ed2c2866 | ||
|
52bc354bce | ||
|
bf09ec0b99 | ||
|
a03de94729 | ||
|
f36d2b8496 | ||
|
2b8ef3ee8e | ||
|
9f8d74b60f | ||
|
0ee49bcc29 | ||
|
8d721f6a68 | ||
|
bbd12ec2f3 | ||
|
54326a350b | ||
|
dd4f764920 | ||
|
6623889920 | ||
|
4b1f87710c | ||
|
e91c47846b | ||
|
bb8e3d4d47 | ||
|
be1502feb3 | ||
|
80cf4d9286 | ||
|
f40dac91b9 | ||
|
575f018c69 | ||
|
6a9357e903 | ||
|
12418ae664 | ||
|
2581004e8f | ||
|
f89de42364 | ||
|
10e48d7ec5 | ||
|
f441773f30 | ||
|
3e5ea3b03f | ||
|
34d202f79d | ||
|
93c5c077a0 | ||
|
91d36749bb | ||
|
4598ef3edc | ||
|
8af80be5b2 | ||
|
4fb4aa1b25 | ||
|
e2325f5e79 | ||
|
9aa91ba111 | ||
|
705e6329eb | ||
|
8de47f250d | ||
|
5127e17573 | ||
|
511a59584d | ||
|
1209119206 | ||
|
87dddb7d78 | ||
|
836e04d110 | ||
|
b3b2142fb6 | ||
|
e9e1626f8e | ||
|
889c0eb208 | ||
|
cb767f4534 | ||
|
edd26d27eb | ||
|
9a5703fa0d | ||
|
b7f4c1f5d7 | ||
|
3609ea66ed | ||
|
087bef3837 | ||
|
2943ef5112 | ||
|
e016a63f7b | ||
|
126495d17a | ||
|
30e5e8c8ce | ||
|
23056514cc | ||
|
e1028c299f | ||
|
8ce7a8d1e4 | ||
|
50cb780107 | ||
|
52dba4116e | ||
|
5d88b72b47 | ||
|
f290d0a142 | ||
|
946a3d202c | ||
|
7eab358165 | ||
|
0936b9b8b7 | ||
|
abe144a79d | ||
|
80f7bd155a | ||
|
da9491c94e | ||
|
4fbcabbc66 | ||
|
8281eaba17 | ||
|
e86e1db87b | ||
|
a0a996916f | ||
|
d2bce26e7d | ||
|
8cdada4899 | ||
|
7cdd78b595 | ||
|
07056c2de5 | ||
|
64858e9b9e | ||
|
17c6334cbd | ||
|
d1a29d9899 | ||
|
bc05f31cc2 | ||
|
57557ea116 | ||
|
6f6724ce1a | ||
|
6327aae56c | ||
|
31cd8b3983 | ||
|
0d442f097f | ||
|
353e1bacc1 | ||
|
aab425719c | ||
|
30266e5107 | ||
|
69fa0c2e09 | ||
|
f9ee5e2a64 | ||
|
0e821284ab | ||
|
052c36aada | ||
|
cb62e38f50 | ||
|
23d51b80df | ||
|
e8f6b7cd00 | ||
|
c7e4ac48c3 | ||
|
9711039726 | ||
|
5d7e5ee3a0 | ||
|
bc4e829427 | ||
|
807d1b6cdb | ||
|
da025fef26 | ||
|
69b2fdf396 | ||
|
060442c636 | ||
|
4b33b7bd7a | ||
|
f5d3d776d5 | ||
|
4814992c54 | ||
|
895033de02 | ||
|
72e6c89b74 | ||
|
9327e19233 | ||
|
fad0af591f | ||
|
b7b5d926f0 | ||
|
4194fdec4b | ||
|
5957656a5b | ||
|
4d2cfd1487 | ||
|
a3e2cd4396 | ||
|
60ab2ad59c | ||
|
e9273470c5 | ||
|
0ce643bfc5 | ||
|
aaf35d9d71 | ||
|
25d9964b1e | ||
|
d54c4a7052 | ||
|
718b3cdb97 | ||
|
f3651bd866 | ||
|
07a1a51256 | ||
|
7d4e016297 | ||
|
5beca43c69 | ||
|
a6c9a9e9a4 | ||
|
9be4661294 | ||
|
17a363c2ff | ||
|
972ed1e520 | ||
|
22c07bd68b | ||
|
264acd5b10 | ||
|
5f14c816d0 | ||
|
e5fdfbb9f7 | ||
|
e6a8c87e0e | ||
|
3f73887e47 | ||
|
704f2dd734 | ||
|
18f9acd844 | ||
|
28ea00fd11 | ||
|
a1a5f3690f | ||
|
19a3de901c | ||
|
07e9f805bb | ||
|
4d4826a029 | ||
|
b0ce6b6ac7 | ||
|
faff035203 | ||
|
5629bf8a23 | ||
|
3ecad9a8c5 | ||
|
38ca6d41ff | ||
|
cf70f2abbc | ||
|
b9956a8d18 | ||
|
c8da231453 | ||
|
dfa47baddf | ||
|
af6c247c0d | ||
|
93206e3241 | ||
|
5d0283d2ee | ||
|
5dd0165359 | ||
|
e645fe7468 | ||
|
b6829698cc | ||
|
31795fb6e6 | ||
|
2d2de3a53b | ||
|
1e0c64076f | ||
|
e390822930 | ||
|
472e8b53cd | ||
|
028893fe86 | ||
|
bbfe7400ac | ||
|
bb1d085c8c | ||
|
32bf5ebde3 | ||
|
e713e133eb | ||
|
171ddd3e06 | ||
|
14a9572c86 | ||
|
5911a8ea7a | ||
|
02f90d58f4 | ||
|
4f273c4284 | ||
|
581144eeb8 | ||
|
a986b45433 | ||
|
7d9317bb17 | ||
|
abeb5d1567 | ||
|
beab99b54a | ||
|
626b9c7f2d | ||
|
1476ae4262 | ||
|
d88814bc12 | ||
|
348f151e36 | ||
|
a94b4e12a9 | ||
|
47cbb43a0e | ||
|
23155d81cd | ||
|
4baf61371c | ||
|
fef50e59f2 | ||
|
fed7f4a0b8 | ||
|
8ae7c1501b | ||
|
d7686a815e | ||
|
e07e7bbd09 | ||
|
bb9e2c0fc7 | ||
|
9f5893cd88 | ||
|
3e0462e619 | ||
|
3d155889e9 | ||
|
b7510eee61 | ||
|
1e955bebbe | ||
|
eb28988054 | ||
|
2c91bfc872 | ||
|
cc7e7894c7 | ||
|
e75e128a34 | ||
|
6bfa7245f3 | ||
|
1a8238e03e | ||
|
255b143c80 | ||
|
9a20412a4a | ||
|
5c57415d7a | ||
|
d94107284b | ||
|
b0396029bd | ||
|
2809b6cd18 | ||
|
689182f30b | ||
|
f88ffcea04 | ||
|
887ae607dd | ||
|
d17afabffb | ||
|
1bcb7520dd | ||
|
6b7f929ec5 | ||
|
891b750de2 | ||
|
d0e87d3521 | ||
|
28bc5905a8 | ||
|
4dee9cd79c | ||
|
1eec92419e | ||
|
a2d8429738 | ||
|
a38aa48368 | ||
|
f1551c56ea | ||
|
7dd6688ed3 | ||
|
a393322f82 | ||
|
ca222fa40e | ||
|
624ad67da8 | ||
|
3a4897db93 | ||
|
ac159c5f08 | ||
|
45ab7feca6 | ||
|
78305e11c9 | ||
|
0b0294af4f | ||
|
cf13c4b4dc | ||
|
7c237e8217 | ||
|
b398bd8487 | ||
|
76b72c9e65 | ||
|
eec2045645 | ||
|
b5fae23329 | ||
|
f23518173e | ||
|
a25564559c | ||
|
e27bb85222 | ||
|
66b68b4442 | ||
|
9c08e902bd | ||
|
9bcfc8ff1c | ||
|
27936f476e | ||
|
3a473f8c48 | ||
|
d9aba4acca | ||
|
8bcf533fc0 | ||
|
56ecd04816 | ||
|
e33bfc1f01 | ||
|
219c07609f | ||
|
0b6eea542f | ||
|
253ef7ade3 | ||
|
1b00490a4d | ||
|
001bd5841f | ||
|
e8fb0e1cc9 | ||
|
527b4a201f | ||
|
8d24b7130c | ||
|
69a2959028 | ||
|
d66d592ebb | ||
|
6e466cf945 | ||
|
754f61717a | ||
|
d853f036c7 | ||
|
1f5b4ccc53 | ||
|
b73034523f | ||
|
c1bd62ae24 | ||
|
5327502a32 | ||
|
2f6fe675da | ||
|
7b3589b0d3 | ||
|
35750688bc | ||
|
0a8ea58bb7 | ||
|
33b92f91cb | ||
|
f106a81052 | ||
|
f87d2955d5 | ||
|
59680e61f4 | ||
|
87e0434c90 | ||
|
3a2bb62519 | ||
|
28d2326808 | ||
|
786cf0c802 | ||
|
9ee42b26c1 | ||
|
88d090b20a | ||
|
b50341089d | ||
|
a12ed895dd | ||
|
43a883396d | ||
|
ff8c527b99 | ||
|
7060be775c | ||
|
e43de8c185 | ||
|
950f7920b3 | ||
|
9f3282d74f | ||
|
76d8b97869 | ||
|
deb3247ea2 | ||
|
4803e6f69b | ||
|
508138764d | ||
|
a960140c30 | ||
|
b81076224c | ||
|
fd049c9e1f | ||
|
26381a557a | ||
|
e96e380ad1 | ||
|
b2c4242138 | ||
|
1a9c63254c | ||
|
eb46f42419 | ||
|
0983e62437 | ||
|
0dac2206c3 | ||
|
5de5d8c4a7 | ||
|
30a271a7ff | ||
|
4affe343dd | ||
|
fad39c6ce5 | ||
|
837451c17a | ||
|
670e8dc367 | ||
|
e1f2c6f88d | ||
|
ffb3fef073 | ||
|
aa1c813763 | ||
|
55d45a6fb1 | ||
|
008fc488c1 | ||
|
bc32794a47 | ||
|
44f04e3d3b | ||
|
ed9999efd6 | ||
|
fbb96c7234 | ||
|
3d5d8e8220 | ||
|
16a42566ff | ||
|
b69f809d91 | ||
|
c142d9af67 | ||
|
6221cecf57 | ||
|
03f06ab6a9 | ||
|
1824a2bccf | ||
|
90547cdbf3 | ||
|
d8298bb067 | ||
|
eb3f5a44a9 | ||
|
6647ae55a9 | ||
|
f2c0633216 | ||
|
cac62c6dc0 | ||
|
9339a75952 | ||
|
4e2585545b | ||
|
686eefd6b0 | ||
|
e077d36c6e | ||
|
93d8e639ce | ||
|
2076d42239 | ||
|
13886f728d | ||
|
ecc64ae125 | ||
|
69d584a283 | ||
|
ca4430c0ba | ||
|
c5d1eb109e | ||
|
4eae23065e | ||
|
408b538e75 | ||
|
c44f043ed3 | ||
|
eee279be01 | ||
|
ee7af6f005 | ||
|
943a63d1e6 | ||
|
1b0f2ac14c | ||
|
0130fdf4a1 | ||
|
cdd46c5c7b | ||
|
4888ec6d35 | ||
|
7ee99e6875 | ||
|
a59daf5978 | ||
|
13b7f381b2 | ||
|
05f7a7b8c3 | ||
|
be8b6238d3 | ||
|
ed10973717 | ||
|
4c6f8222af | ||
|
4aa16e9409 | ||
|
ce4a4fcd75 | ||
|
6d2123b196 | ||
|
b2c9be14cf | ||
|
aa696d0669 | ||
|
4c99471a25 | ||
|
a551d1cc01 | ||
|
907e33ef59 | ||
|
2322038e8f | ||
|
ae461f47d3 | ||
|
9491fcdb2e | ||
|
fd5da3fcd2 | ||
|
d12e7817d2 | ||
|
7e239db9a8 | ||
|
ed3a0b8ab9 | ||
|
71244bc37b | ||
|
3e39e5beab | ||
|
84db4585f5 | ||
|
9763a79c01 | ||
|
569dfea3cb | ||
|
82c6d5e8ff | ||
|
7c5c9beda6 | ||
|
c02c571b3e | ||
|
8cd6212867 | ||
|
e3a3026cac | ||
|
a075442e1c | ||
|
2e7d0a07e7 | ||
|
3ff54b7f2a | ||
|
63eeaae5e9 | ||
|
3508176fcc | ||
|
60735f88f9 | ||
|
5c029b3532 | ||
|
3650117b4f | ||
|
b604524c2f | ||
|
3292f128d2 | ||
|
a83be19987 | ||
|
8a7f1589ec | ||
|
1c98faf46c | ||
|
df9cd6c9a2 | ||
|
cc2760f4d6 | ||
|
0ee6e3044d | ||
|
f40b989dc8 | ||
|
58f5c53fbb | ||
|
3cd04c3806 | ||
|
47f1a19e9e | ||
|
e384f2b612 | ||
|
48146f8351 | ||
|
6a088a7477 | ||
|
a4ba51a790 | ||
|
e94ba8afad | ||
|
03bea3aafc | ||
|
3f59f94b60 | ||
|
ea0c400c51 | ||
|
457dd7acdb | ||
|
1d1490523d | ||
|
9ac12647d1 | ||
|
2c4819ac74 | ||
|
8df96e4718 | ||
|
526af62864 | ||
|
e048790036 | ||
|
c2eee87029 | ||
|
daa0025157 | ||
|
cf7777e9fd | ||
|
b4aea4ab27 | ||
|
6c84ae7aba | ||
|
5e64ace64d | ||
|
ef9709fb07 | ||
|
a56e13156f | ||
|
e5efe64d20 | ||
|
e029060889 | ||
|
84ad64daea | ||
|
ed66a8d157 | ||
|
203b2235aa | ||
|
83d62b9aca | ||
|
0e5dec7fbb | ||
|
bd6263078f | ||
|
79a77f915a | ||
|
0243a141a7 | ||
|
b4eae1ef0b | ||
|
c86beb3a37 | ||
|
89ba371fbe | ||
|
59f4aca010 | ||
|
9c523f0325 | ||
|
6cc63d825e | ||
|
2ee90bf22f | ||
|
8b964a8c54 | ||
|
b5642ba602 | ||
|
d3f39c97d1 | ||
|
d17da2b081 | ||
|
1d53441456 | ||
|
22e848c9c2 | ||
|
34d6abca6d | ||
|
d0e32a5f47 | ||
|
782fff35ea | ||
|
2bd09e6f84 | ||
|
de7a406920 | ||
|
39b505a52e | ||
|
39913a8212 | ||
|
8a14a8dc6b | ||
|
fbe1ba018e | ||
|
b5651417aa | ||
|
8016e7733a | ||
|
63ea23f334 | ||
|
fd3a8720e9 | ||
|
c299d39117 | ||
|
a1689fb9d0 | ||
|
b8adf5b027 | ||
|
3b34f9439a | ||
|
ec19e352b1 | ||
|
e20e6addf0 | ||
|
eaedaf5b10 | ||
|
87007e62c0 | ||
|
b5eea3ce3a | ||
|
e11335f5ad | ||
|
20f52daf9b | ||
|
f15adcf2d5 | ||
|
51db128dc2 | ||
|
7c5c93f073 | ||
|
dc3602985f | ||
|
9bf05023c1 | ||
|
50f87c21ea | ||
|
f51a4c79db | ||
|
12c8bc6c5b | ||
|
a33e2e4115 | ||
|
5ed1b07034 | ||
|
cac420a22d | ||
|
c15dc9d8ff | ||
|
dfd42ebf5f | ||
|
d1fc38c473 | ||
|
cc987cb072 | ||
|
b4a8dd0754 | ||
|
20dd606504 | ||
|
a06f09acda | ||
|
ad2add4676 | ||
|
af054f7980 | ||
|
1e783d62e0 | ||
|
f25a437fd1 | ||
|
90e3c352ec | ||
|
ad68834479 | ||
|
809d4f93c4 | ||
|
11e159fd31 | ||
|
15e832da8a | ||
|
3d2f70ac56 | ||
|
d1c57d3fa6 | ||
|
70bdcfbae6 | ||
|
ae336c3688 | ||
|
d0e303ca19 | ||
|
981be2d5b2 | ||
|
2679aafc17 | ||
|
9029d1d715 | ||
|
0fdcd44794 | ||
|
01e36db23a | ||
|
f6f7333b5d | ||
|
c38101cd34 | ||
|
cdc63d03cf | ||
|
eb7f23b173 | ||
|
2bb6999e3f | ||
|
d8b29cf1a3 | ||
|
699bf42fdb | ||
|
ee53980b68 | ||
|
b55247bbcb | ||
|
8b696a691a | ||
|
370107b9a6 | ||
|
6b9968d804 | ||
|
595f9fd469 | ||
|
ac28ab58c8 | ||
|
09ce8f05e2 | ||
|
5574404358 | ||
|
4ce26b63ff | ||
|
2501eae25f | ||
|
6ffffb7b2b | ||
|
0c6cbb7fcb | ||
|
58a92b91c1 | ||
|
9351497f16 | ||
|
c15278522e | ||
|
8632cd6072 | ||
|
9adedbc30e | ||
|
cdb1afc3b2 | ||
|
f4b2d48873 | ||
|
86210368f5 | ||
|
5587111d21 | ||
|
97e740bd2c | ||
|
935ce74d3a | ||
|
fbdc09a7aa | ||
|
b381ceda72 | ||
|
44c038b9a1 | ||
|
862557fd63 | ||
|
5f9f7d050d | ||
|
564f3f3442 | ||
|
caa25cdaf3 | ||
|
b18daa53aa | ||
|
1ce00e4fda | ||
|
d7f01065a5 | ||
|
0a13683167 | ||
|
0e303060dd | ||
|
d5fd1de150 | ||
|
5936451082 | ||
|
d7ae3a185e | ||
|
760bd23c5e | ||
|
69ff3ca6fb | ||
|
231269808d | ||
|
419786feb7 | ||
|
68a256bdde | ||
|
5e9737d38e | ||
|
d0c028386a | ||
|
e100f9e85c | ||
|
620678fc17 | ||
|
3520c2fd9e | ||
|
d18311213d | ||
|
484ae68528 | ||
|
0fce659bb0 | ||
|
0c8de6b550 | ||
|
07a4a6a35d | ||
|
fbabd4eaac | ||
|
f09aeef6d9 | ||
|
8f78faf980 | ||
|
7bded976a8 | ||
|
a07d01285c | ||
|
95a3be9d56 | ||
|
27e2d6a513 | ||
|
7a2f4960d0 | ||
|
ab458b492a | ||
|
0f2a374585 | ||
|
a88594599f | ||
|
2774dfe38f | ||
|
88fa550a96 | ||
|
451e1c24a4 | ||
|
5b81369fc2 | ||
|
7dba69dc48 | ||
|
e7651f73f4 | ||
|
d8cda00cd3 | ||
|
b93871117c | ||
|
76b80baaea | ||
|
94f73015ed | ||
|
18349292a6 | ||
|
eda245a1a6 | ||
|
ebec5a1865 | ||
|
fe744816f1 | ||
|
98b011f64c | ||
|
839e240ec1 | ||
|
dfe3d48fa3 | ||
|
d36ea89a02 | ||
|
0e8de98411 | ||
|
99cb84fab6 | ||
|
2d559c43db | ||
|
4aebdbb0a9 | ||
|
fba662421d | ||
|
c3187d85e8 | ||
|
4d12ac788c | ||
|
19cc3b127a | ||
|
1e2a7072d8 | ||
|
9e946ce0c3 | ||
|
b98a8d5c02 | ||
|
e84d3cd7a3 | ||
|
db7210a24a | ||
|
69601b5c95 | ||
|
592a79341d | ||
|
34cea70924 | ||
|
68962453ff | ||
|
4032ba01bf | ||
|
a009623d97 | ||
|
22fdf8fc1d | ||
|
7db84ef13d | ||
|
9f55694c8a | ||
|
1ea56a04cd | ||
|
b9a5726672 | ||
|
3f850db1a8 | ||
|
bf9549115c | ||
|
26d1283583 | ||
|
94db43c4ad | ||
|
e102a5ee06 | ||
|
c569f663ee | ||
|
2b93a9128e | ||
|
d006fd06e7 | ||
|
536f0fba25 | ||
|
31d82c494b | ||
|
83df04a53d | ||
|
03fb6ee059 | ||
|
90a99073a6 | ||
|
fc231998b9 | ||
|
4a5c2723ff | ||
|
202165867a | ||
|
a483f7955f | ||
|
e636c32f2a | ||
|
987ddad1fd | ||
|
1dbd280ba3 | ||
|
b29ac98094 | ||
|
8467e1b018 | ||
|
34df044808 | ||
|
d7a103aa1c | ||
|
2505b9f760 | ||
|
0913d5d1b4 | ||
|
36404543e4 | ||
|
cff88d547f | ||
|
ea8853cda3 | ||
|
95b99ef4ac | ||
|
d41989e62a | ||
|
7fb656b653 | ||
|
18a502c4e3 | ||
|
8237dfc4f7 | ||
|
9c26a07b53 | ||
|
8a6b12a319 | ||
|
e56ca0f612 | ||
|
02b78fb717 | ||
|
0013e04fd3 | ||
|
6ca28a5b3f | ||
|
1d2378e74e | ||
|
128083c203 | ||
|
ce724d5c47 | ||
|
80a04efefe | ||
|
839d1c31b3 | ||
|
5921e50e03 | ||
|
9bb1a2baaf | ||
|
c778f339cd | ||
|
9f27b9fedd | ||
|
4d0ecbae3d | ||
|
344539d793 | ||
|
516ff356e6 | ||
|
d2dbb098a2 | ||
|
807ed382e2 | ||
|
0df7faffac | ||
|
17c66030fe | ||
|
f12351688a | ||
|
35a47d674b | ||
|
8629f07138 | ||
|
60ed584fc1 | ||
|
2843aa1c90 | ||
|
efd1d7d171 | ||
|
7cdf56f69a | ||
|
3685a18fe9 | ||
|
149228c388 | ||
|
b2c568b3d6 | ||
|
2c64da4d03 | ||
|
d2ff26a49d | ||
|
ab0f4ba0d4 | ||
|
f8975e3a6a | ||
|
4b12247da1 | ||
|
e0c4bce931 | ||
|
2266473336 | ||
|
987f41c85d | ||
|
25030e6cb9 | ||
|
af8f11eb14 | ||
|
e192e40a81 | ||
|
b617926c1c | ||
|
551c6bc6eb | ||
|
7f78d19597 | ||
|
7c530198c8 | ||
|
217d001d71 | ||
|
62178de756 | ||
|
c04d4f4187 | ||
|
61922da24b | ||
|
b8678d22ea | ||
|
b856a2767d | ||
|
e3757e32a5 | ||
|
05c5f36921 | ||
|
c92a518218 | ||
|
4015e7f772 | ||
|
9032afef10 | ||
|
dd40dbdd96 | ||
|
19f22c438e | ||
|
cb6c11ab6f | ||
|
3ae28423b9 | ||
|
dd5a79e6eb | ||
|
a4677f160f | ||
|
42638f0e44 | ||
|
f7fa3139af | ||
|
3df22b1791 | ||
|
14bed5679a | ||
|
d4194353f8 | ||
|
23134c2e45 | ||
|
a7aa755f18 | ||
|
27a72b8eef | ||
|
fd481a37bf | ||
|
6c228a8bfd | ||
|
dd281d9fc5 | ||
|
43d157112d | ||
|
7494eaf621 | ||
|
89e44131a0 | ||
|
a17a8ac04b | ||
|
c311315daa | ||
|
143cc0280a | ||
|
743a907692 | ||
|
5ddde5a36a | ||
|
9bf8d53ebe | ||
|
791a2b08e1 | ||
|
9fbc23abfc | ||
|
d47876c547 | ||
|
9c75814525 | ||
|
c279cded17 | ||
|
c2a4b72fee | ||
|
5e0802fd67 | ||
|
ac9e12e17c | ||
|
fbe203c101 | ||
|
73b85efae2 | ||
|
65f64a5809 | ||
|
0f373b7639 | ||
|
439d608d03 | ||
|
8ba71f09d7 | ||
|
2b6d67b29a | ||
|
b1936524f7 | ||
|
54ebea31f7 | ||
|
b7bacc0fc1 | ||
|
bdc67b1e7f | ||
|
d51a01f0f8 | ||
|
25a4433e2a | ||
|
9b2cf0169a | ||
|
42c23f10d4 | ||
|
d193ae7d2f | ||
|
2d400b5661 | ||
|
7ed3470844 | ||
|
f14257d813 | ||
|
0e1800e68d | ||
|
738f93da28 | ||
|
09554384ef | ||
|
20a570ebe8 | ||
|
51ef43c0de | ||
|
2ccb01973e | ||
|
7daa45e49f | ||
|
fa87e6d830 | ||
|
b7441bb9c0 | ||
|
6c6ac6c7a7 | ||
|
56ba93700c | ||
|
ec5a1b3ab6 | ||
|
424fc81628 | ||
|
4e7bdff8ed | ||
|
4ed97bb513 | ||
|
0701422dcf | ||
|
0d0754a57b | ||
|
3417fe3d5d | ||
|
36db7f8327 | ||
|
b3a51d0018 | ||
|
38390bab9c | ||
|
fb82db34f7 | ||
|
fd2ddd3c01 | ||
|
07484ceed1 | ||
|
37f7181a52 | ||
|
a86e802afc | ||
|
f80143a8ee | ||
|
5eb44d01e5 | ||
|
1a0331b7c2 | ||
|
ea1b1abaee | ||
|
48fed03128 | ||
|
076e9fa73e | ||
|
784888471a | ||
|
aa05cb32c6 | ||
|
d7df6cda4a | ||
|
556bea809e | ||
|
47bdec422a | ||
|
580f2dee06 | ||
|
b1a00145bd | ||
|
d6867699c9 | ||
|
f04645ab9f | ||
|
58a5a23763 | ||
|
3b7fa79a68 | ||
|
703fdf673c | ||
|
4d525f1a55 | ||
|
adced29b5b | ||
|
e43cb6771a | ||
|
50ddedb992 | ||
|
346b5ded7c | ||
|
4979aa51f5 | ||
|
b2d7bb72c7 | ||
|
6355a17187 | ||
|
8ae33afb76 | ||
|
4a8efe1ed8 | ||
|
11bbee93fe | ||
|
fbbd5765c8 | ||
|
bcc058eba7 | ||
|
3aac2a7c97 | ||
|
f3486275e9 | ||
|
2f2f383c1b | ||
|
9fb90ad14c | ||
|
dfc3c252d2 | ||
|
77ed83ff2f | ||
|
114acacd2e | ||
|
f9ce06977d | ||
|
17e0a35650 | ||
|
c95b08d760 | ||
|
d7c6b41992 | ||
|
ae4754415c | ||
|
b4a5b411b5 | ||
|
51edb13a06 | ||
|
442331136c | ||
|
f8bd9a1007 | ||
|
edf4f52fe5 | ||
|
5f5e3d730f | ||
|
c8174d6032 | ||
|
947602d4fe | ||
|
7fcd2a51be | ||
|
2e66d7bd55 | ||
|
3066386d0e | ||
|
b709a56ce6 | ||
|
4c299bfca9 | ||
|
ff5fc61753 | ||
|
2e745f9bfb | ||
|
d325dcd192 | ||
|
7ccb4c6314 | ||
|
52d21b8df9 | ||
|
335d947c10 | ||
|
15dae359f7 | ||
|
74921a0f27 | ||
|
74d8be96d2 | ||
|
689ffbe7d3 | ||
|
dc81a39a99 | ||
|
93e2d7f143 | ||
|
e5a088738d | ||
|
ce4908b341 | ||
|
41616df866 | ||
|
fd60f54a5f | ||
|
34eed9abef | ||
|
e854c4752b | ||
|
f90ccb7c62 | ||
|
e613282698 | ||
|
652f178787 | ||
|
e164250fea | ||
|
54ed02e302 | ||
|
12817eee57 | ||
|
a4d319437a | ||
|
57b7d98148 | ||
|
c936a72bb3 | ||
|
b5aaec47b3 | ||
|
be2da15508 | ||
|
3019dfc37a | ||
|
3b9333dbd8 | ||
|
2831a0d0fd | ||
|
121ac712f7 | ||
|
67310b0fb6 | ||
|
331a82775f | ||
|
8884f259c1 | ||
|
eab0fd4e57 | ||
|
d401527e83 | ||
|
d70c602575 | ||
|
34771d02d1 | ||
|
fd3624f541 | ||
|
eb37cd870d | ||
|
a5d7e68ebe | ||
|
f645e8f0d2 | ||
|
a793d693b5 | ||
|
1264284a3c | ||
|
c07db7553d | ||
|
ac4506091e | ||
|
672f2f3769 | ||
|
0face5e362 | ||
|
c90eab5e10 | ||
|
60a1dea0f6 | ||
|
9b3e94b23f | ||
|
20b54185fa | ||
|
6aa9391c8d | ||
|
87716cf781 | ||
|
4cb92102c7 | ||
|
d04dc4c767 | ||
|
50785ea38b | ||
|
d49062db08 | ||
|
033314ed34 | ||
|
11ca4a3923 | ||
|
0851015d7d | ||
|
c9ebe07d39 | ||
|
76041bdc64 | ||
|
2621c908c3 | ||
|
2782b16ecf | ||
|
b3408a46d1 | ||
|
d4f15ca635 | ||
|
12435d96cc | ||
|
d5e662a50f | ||
|
0425bdfd35 | ||
|
27f3612fdf | ||
|
89c353640e | ||
|
4291c874d9 | ||
|
98db549bb7 | ||
|
e6b7f06ab4 | ||
|
e9c0ad59dd | ||
|
32f27c5131 | ||
|
94ca27acd1 | ||
|
6df1ea8cd6 | ||
|
3e7a79ebef | ||
|
ce9fc5dc14 | ||
|
2c60bb3b07 | ||
|
44bcb5fd99 | ||
|
f5a7053acb | ||
|
d0ae3c3e77 | ||
|
b8959dcca9 | ||
|
caba9cdefa | ||
|
01eebffc1f | ||
|
4d982d9972 | ||
|
e5d16a1883 | ||
|
3cee922e68 | ||
|
9e3c978d55 | ||
|
2e1dac5950 | ||
|
0c462e3ca1 | ||
|
c86ed5287b | ||
|
913f20f0a8 | ||
|
a72def1cbf | ||
|
987e198016 | ||
|
85877b12ed | ||
|
58bfe4c846 | ||
|
ec3852b745 | ||
|
a80c749096 | ||
|
f825a65f8e | ||
|
4aae1bdf47 | ||
|
daa62c3081 | ||
|
9a286495a5 | ||
|
34508a1c2d | ||
|
26c0aa357e | ||
|
013e6db6ef | ||
|
acf7f39a60 | ||
|
86aeae75df | ||
|
9233e6b7c6 | ||
|
ccbf957f55 | ||
|
1f32bbc322 | ||
|
cc60dfa4c5 | ||
|
c746633693 | ||
|
447476ab9b | ||
|
a12bf9405e | ||
|
e0eb59c5d4 | ||
|
5700424716 | ||
|
818cb2d801 | ||
|
160d7f3c33 | ||
|
1f45902a61 | ||
|
4775c9cb45 | ||
|
4c1b1d4cdb | ||
|
64b2086ba4 | ||
|
02cba63331 | ||
|
5f2ee6caf8 | ||
|
73404e5988 | ||
|
5145747ac7 | ||
|
6d2b3375f8 | ||
|
41693407b2 | ||
|
3b53d8e5b7 | ||
|
95b0ce5e3a | ||
|
a0a33eb9b9 | ||
|
05ba71aef0 | ||
|
d24ffe6bb8 | ||
|
fccda96bd7 | ||
|
5e2f94bebc | ||
|
1abc864742 | ||
|
5133991f7e | ||
|
9f4123a4e2 | ||
|
8196b99e9d | ||
|
89a1fd5b0e | ||
|
f3bc426a57 | ||
|
fe49ced2ac | ||
|
bcb31db176 | ||
|
b25d2153af | ||
|
ce8cc4793c | ||
|
99593f82f4 | ||
|
4305bfbdb1 | ||
|
73ce4e6bcf | ||
|
0b02c7ccb6 | ||
|
6cac645830 | ||
|
3d6984aeaf | ||
|
63cf3dc959 | ||
|
c6baa2fb51 | ||
|
7a9481b5a5 | ||
|
a2f81f19ff | ||
|
e81e70937f | ||
|
7f117e8d21 | ||
|
99191d1363 | ||
|
560def639f | ||
|
dcb86e3667 | ||
|
5425ac2375 | ||
|
7b585a733a | ||
|
82ab15f856 | ||
|
aec0bd39e3 | ||
|
03df1a40d8 | ||
|
ff57f01026 | ||
|
687475ebf2 | ||
|
854c1ee4cc | ||
|
4c5a9353b0 | ||
|
bd6d9c3296 | ||
|
e7c783cefa | ||
|
1c97ca10fc | ||
|
f84b3e4ce9 | ||
|
76e035989f | ||
|
37da838255 | ||
|
63f0a2b912 | ||
|
055973cc3f | ||
|
59487b189c | ||
|
4f181b0bc5 | ||
|
55ab6d6875 | ||
|
1139085ca5 | ||
|
760b2ffce6 | ||
|
b01a418073 | ||
|
4ccc0d0fda | ||
|
e98fdeb0a5 | ||
|
7843a21428 | ||
|
60039ab133 | ||
|
b06c5337ec | ||
|
0a6dc47a72 | ||
|
b3ffba7238 | ||
|
11c3a16036 | ||
|
62d74d4f1d | ||
|
f0f859c685 | ||
|
4094f43daf | ||
|
fe3846b72f | ||
|
11f43d4a3d | ||
|
3238fe48db | ||
|
2375ca3ca0 | ||
|
00d4262c0d | ||
|
e8f6f3ddff | ||
|
acffae6a21 | ||
|
58c13bacb7 | ||
|
6a042f152b | ||
|
d238baa374 | ||
|
7fb626850e | ||
|
9155a89c08 | ||
|
547fae4842 | ||
|
ef1e134460 | ||
|
b62aabda85 | ||
|
e18a3707c7 | ||
|
a9d8e96675 | ||
|
5fda425059 | ||
|
096b4d9e81 | ||
|
b79fe942e1 | ||
|
266ec4894b | ||
|
4b285c0593 | ||
|
c265e849e0 | ||
|
f936dfa648 | ||
|
41d49921c8 | ||
|
f9ab4b7504 | ||
|
42700a6f76 | ||
|
5e6f78a902 | ||
|
93042eced4 | ||
|
d1db02b04c | ||
|
63e5611877 | ||
|
73ee3ffe92 | ||
|
8fadfb2c5e | ||
|
671b0c540c | ||
|
9b967eccc8 | ||
|
71f07b18ae | ||
|
6acf97bf51 | ||
|
44b6519db1 | ||
|
0e2f04eb2b | ||
|
099b9852cd | ||
|
c19497db33 | ||
|
d5f14ffa32 | ||
|
09ccfc8cfb | ||
|
0ae02788b2 | ||
|
185580d23f | ||
|
401d2e8ea9 | ||
|
030d7334e4 | ||
|
839857dd4b | ||
|
faf1b15f8d | ||
|
52dee35325 | ||
|
41c96690a5 | ||
|
7732df1dbd | ||
|
2cb2ee8446 | ||
|
c6dedd253f | ||
|
20115697e5 | ||
|
1b464f75cc | ||
|
bec5d53ce0 | ||
|
08e5bffc76 | ||
|
8981d3e7fe | ||
|
901b4ad061 | ||
|
8631b955bf | ||
|
60a009c530 | ||
|
1dc09b6217 | ||
|
ae9acbf521 | ||
|
f4a75ccd80 | ||
|
e8202af11d | ||
|
89f02098fd | ||
|
22fb9c4d63 | ||
|
08ed4b4ed8 | ||
|
6e426aeac3 | ||
|
c8307f58a3 | ||
|
91125d29cf | ||
|
856dc419b5 | ||
|
4310732b98 | ||
|
969d3cb40b | ||
|
b7ed3b45ed | ||
|
eef99e9db6 | ||
|
73e0cc7163 | ||
|
17183f7de5 | ||
|
f552f655cb | ||
|
66cf6f0a14 | ||
|
11e0f08c9a | ||
|
63166ca882 | ||
|
7f11d6216e | ||
|
ae5dc6299e | ||
|
b1f28b4ce0 | ||
|
d24bf002e2 | ||
|
1e14a2176b | ||
|
0dcb985601 | ||
|
f5f042a6f0 | ||
|
f306479f5a | ||
|
bada70af83 | ||
|
3a249f395c | ||
|
26b2ab8bb5 | ||
|
6991d9fdd7 | ||
|
794e6ca0b5 | ||
|
59a9a43a83 | ||
|
0a048eb64e | ||
|
3360d3e3e1 | ||
|
09fef54959 | ||
|
520f81fcca | ||
|
24756e8340 | ||
|
378be82dec | ||
|
40c3d4bcca | ||
|
5f14716954 | ||
|
79e10323ad | ||
|
3e2171f550 | ||
|
34047daa06 | ||
|
41c2258f91 | ||
|
5287f6e029 | ||
|
2c60b331e3 | ||
|
a6cc75109d | ||
|
cb452bc21c | ||
|
6891037758 | ||
|
e73eb23c90 | ||
|
1cb660b94e | ||
|
8de454ccca | ||
|
4520a8e611 | ||
|
cf5e781c91 | ||
|
56dfdd2568 | ||
|
9ced01ebf7 | ||
|
415f9b8743 | ||
|
0ec2c1f54c | ||
|
f919218e27 | ||
|
db3dc69bcc | ||
|
1822d1503f | ||
|
665648ba97 | ||
|
f0dd466f99 | ||
|
fa285f0e97 | ||
|
4697f18d0e | ||
|
277977aa8a | ||
|
ae6b53479d | ||
|
fb037e97d0 | ||
|
417dab538c | ||
|
3668445679 | ||
|
fea92ac110 | ||
|
a577d5ff50 | ||
|
de0a35e7cc | ||
|
4f0d1301ab | ||
|
d42329a3a3 | ||
|
23a113715d | ||
|
2d41dc89e5 | ||
|
cc50accd4c | ||
|
9562b19a93 | ||
|
0cc8b7864f | ||
|
a0de43aba9 | ||
|
30e0d01656 | ||
|
c7b54af0a2 | ||
|
ec633887dd | ||
|
76246f2c59 | ||
|
2dd591c1d7 | ||
|
2a675785bc | ||
|
ac34aa975b | ||
|
b7676e8f9f | ||
|
45a1d61c87 | ||
|
84be9cde6d | ||
|
a54e3c5e39 | ||
|
5526b035bd | ||
|
bf75dc2f90 | ||
|
ec568b614d | ||
|
fa2a0a9549 | ||
|
14d90418b8 | ||
|
f1c45a2800 | ||
|
c36f7822ef | ||
|
62f87b0ea8 | ||
|
db33eb9f41 | ||
|
86d751b2ec | ||
|
b871b00337 | ||
|
8afd9e233d | ||
|
f2c4328a2e | ||
|
152983f031 | ||
|
59d9bbf0b2 | ||
|
b9ab889be5 | ||
|
77feb25c4d | ||
|
fd054176a8 | ||
|
68e81f640c | ||
|
9ce3056361 | ||
|
324102cb65 | ||
|
302ddad720 | ||
|
b9717555c3 | ||
|
e785b99338 | ||
|
a54d416143 | ||
|
23b0e08715 | ||
|
7fbf792ba0 | ||
|
66e3a1ad47 | ||
|
569c8cbe04 | ||
|
dea9e77e27 | ||
|
60a7812d7e | ||
|
c90f4933df | ||
|
9c1252ef9c | ||
|
282f4f5ef4 | ||
|
6fb697b490 | ||
|
b98ef8141a | ||
|
e3b71a5861 | ||
|
462a4e0304 | ||
|
2bdbac1b84 | ||
|
25f8c03fde | ||
|
97d11c03c2 | ||
|
a3576ea651 | ||
|
37d31a82d8 | ||
|
966a233219 | ||
|
7343035a17 | ||
|
efc16c7069 | ||
|
9569969b55 | ||
|
8c5918dec7 | ||
|
1d7feb83a2 | ||
|
c154aaa69c | ||
|
57ed293760 | ||
|
896737d098 | ||
|
6b349ca0ef | ||
|
8447fc5d17 | ||
|
8eb3b19c69 | ||
|
88065d0091 | ||
|
5c69159b36 | ||
|
5dd59889b9 | ||
|
533c5c7c73 | ||
|
3aaff8604d | ||
|
47b985a056 | ||
|
83aee4a516 | ||
|
aaceabeba1 | ||
|
459060f564 | ||
|
ad3bdba7c9 | ||
|
aca7674bac | ||
|
7be7e0b870 | ||
|
cc860a67f8 | ||
|
297167755f | ||
|
b4d8750f44 | ||
|
8e3eaf1cc8 | ||
|
1df4ea4506 | ||
|
58a9838e41 | ||
|
cb0f65e035 | ||
|
bdb99862ce | ||
|
62fdd8b4a4 | ||
|
f499cd2742 | ||
|
4611752f71 | ||
|
9072772f61 | ||
|
441cf7c2b8 | ||
|
b5819a29e9 | ||
|
3e35ea6414 | ||
|
b24793bc02 | ||
|
91ee5bdeae | ||
|
79c2eec802 | ||
|
f10a17a6dc | ||
|
59b158217b | ||
|
d5208ee5dd | ||
|
6075dbb131 | ||
|
9ffba93712 | ||
|
b8619929bd | ||
|
fa6740a059 | ||
|
cc417a0cd4 | ||
|
10918d3b11 | ||
|
f2555024a5 | ||
|
43c4c70e64 | ||
|
8f81833efc | ||
|
82a3992896 | ||
|
ad77938f24 | ||
|
044b7face1 | ||
|
3c3eef9246 | ||
|
f444e3f22c | ||
|
98977971db | ||
|
8ea1bac80b | ||
|
ce7806e3f1 | ||
|
96df6539f9 | ||
|
3cebe53ee2 | ||
|
0e1e4b82c5 | ||
|
d8a77f38ce | ||
|
70737da2af | ||
|
f1b2a367b2 | ||
|
406bbd4668 | ||
|
1ffb1db701 | ||
|
59ffc96e89 | ||
|
7f0b2f4a5e | ||
|
e03f1a6955 | ||
|
a4989039c9 | ||
|
c1b3b39c52 | ||
|
3e7eca364b | ||
|
ee67cd6284 | ||
|
e738eaa447 | ||
|
ca7d2ad61d | ||
|
f1f63c940b | ||
|
19e568b6b9 | ||
|
27224c0738 | ||
|
509dba1441 | ||
|
661c1c6e16 | ||
|
f2d00dbb8c | ||
|
a8cc3759ad | ||
|
0e6d607484 | ||
|
bb479b0a66 | ||
|
363ad6795c | ||
|
809a57af05 | ||
|
0987956bce | ||
|
635e054f93 | ||
|
923452b788 | ||
|
4d8ee35ef7 | ||
|
a351852268 | ||
|
2ccc3135c1 | ||
|
f0cfc77170 | ||
|
f98a24b47b | ||
|
bae2c64cc8 | ||
|
c098eb8625 | ||
|
e891465775 | ||
|
1ce845b2dc | ||
|
f81003c45e | ||
|
12451d733a | ||
|
4c530b732f | ||
|
a60a43103c | ||
|
facd16d3fe | ||
|
1157e51130 | ||
|
91dfcbef2a | ||
|
5de19ace91 | ||
|
fd08e90070 | ||
|
f3cf75ec92 | ||
|
6152f5269e | ||
|
2481e4a130 | ||
|
bf2c7e729b | ||
|
539938969d | ||
|
800eca7b58 | ||
|
ca518bcf41 | ||
|
931f44ae16 | ||
|
6e61a13e40 | ||
|
79543d6c32 | ||
|
9bca28cea0 | ||
|
ed694d09f8 | ||
|
3b4f02db21 | ||
|
5e7b88cb86 | ||
|
c0b56cffab | ||
|
89fa666bc4 | ||
|
581c2824d0 | ||
|
e3247cb48c | ||
|
277e90a4a7 | ||
|
a5f6c35bb0 | ||
|
846c6462c3 | ||
|
8c0ca68529 | ||
|
db6e9b2ec0 | ||
|
c13fbac549 | ||
|
c223a8cd39 | ||
|
d4a99a98f4 | ||
|
e7951c2114 | ||
|
e61f093fa0 | ||
|
7e8beca971 | ||
|
defd68ef7d | ||
|
98a600698e | ||
|
4533f0e37e | ||
|
8dc0e885b5 | ||
|
80315a53ec | ||
|
c6e99f8490 | ||
|
f9408415a5 | ||
|
21f81145bc | ||
|
5045810a9d | ||
|
a2fa36386f | ||
|
21e1ee30ee | ||
|
6876fa46cc | ||
|
8e0cf1765c | ||
|
7ca3855395 | ||
|
49ff7cffb1 | ||
|
08aa3ebe10 | ||
|
152e9c9a95 | ||
|
d2ea9c1b2f | ||
|
0579d14d52 | ||
|
7d321c0a11 | ||
|
b2a927d5ed | ||
|
08b8b875ca | ||
|
d3fe073149 | ||
|
108f1556c2 | ||
|
fdb78b63d5 | ||
|
5307b886d3 | ||
|
082d38d9d9 | ||
|
27e0db1dd2 | ||
|
8e5e13cbdc | ||
|
3919a16bb8 | ||
|
616c54f475 | ||
|
4c96acb913 | ||
|
c6019e755b | ||
|
ce69a45d75 | ||
|
90ab1a76ab | ||
|
11a48561e0 | ||
|
b78f0c4fa4 | ||
|
47ae87724a | ||
|
513942c2a4 | ||
|
5d60df4b1b | ||
|
d368747235 | ||
|
0a7e2d2ae8 | ||
|
764a1772ba | ||
|
62965cd34f | ||
|
fbfbae7c74 | ||
|
630cca4b8e | ||
|
9fd80cf6dd | ||
|
466126704c | ||
|
60c7ffb0af | ||
|
61e916901b | ||
|
7e48a03927 | ||
|
0cb6170584 | ||
|
58c935aa9e | ||
|
7c235df611 | ||
|
7a7f7ee7a9 | ||
|
d5aa38aec8 | ||
|
950b5ea55e | ||
|
38b325ecce | ||
|
fc1f0b771a | ||
|
499c80bd8a | ||
|
36f81be13b | ||
|
42dfdfea5d | ||
|
94de4e266e | ||
|
3f7374c1f1 | ||
|
9146134874 | ||
|
85955368bd | ||
|
52705c6e6e | ||
|
ac8abc4eba | ||
|
1cb190e102 | ||
|
65b6753c69 | ||
|
8165067b9b | ||
|
706c79b226 | ||
|
3807844b34 | ||
|
78bffee4ae | ||
|
67a653046d | ||
|
52b46eb98b | ||
|
6f54317bdf | ||
|
df5a6d1fcc | ||
|
c8762945d9 | ||
|
924d3b3c4c | ||
|
474fd3d2f3 | ||
|
747a354548 | ||
|
e7a0f8c781 | ||
|
664dd95700 | ||
|
710d8c6494 | ||
|
258a26283d | ||
|
2c9ab8ee04 | ||
|
7c14b3963e | ||
|
633135745f | ||
|
461810d93c | ||
|
9c35ffe3c7 | ||
|
0332bf163c | ||
|
24fd6f587c | ||
|
25687f9124 | ||
|
0d77ccded7 | ||
|
46ea5519c1 | ||
|
640eaf89d0 | ||
|
d5c359d411 | ||
|
e1e861704b | ||
|
8533fa74ee | ||
|
02966afb8c | ||
|
4f6fa840c3 | ||
|
7dffaa03d5 | ||
|
c990e74ee5 | ||
|
f6e2cb29d5 | ||
|
63acdcbdeb | ||
|
b95a1e987f | ||
|
f18d62ee4c | ||
|
04fead8d8a | ||
|
24d94e559d | ||
|
185ff3fd96 | ||
|
395fa7197b | ||
|
238724eed1 | ||
|
3682eed638 | ||
|
c7a9bcb7b2 | ||
|
041e13304e | ||
|
0a72745f9c | ||
|
e2ed86ff65 | ||
|
a557f62112 | ||
|
0f4e50db07 | ||
|
ca432fa5d2 | ||
|
d1ccbdfc7c | ||
|
0268980233 | ||
|
393fb91325 | ||
|
8781ffe82a | ||
|
21a76e32a1 | ||
|
aac88ac766 | ||
|
270040d466 | ||
|
43e0e15125 | ||
|
7f68c62f23 | ||
|
41aab2a20e | ||
|
48e1c8d9a8 | ||
|
fa3c1f7200 | ||
|
6266c4718d | ||
|
a0a6ae0d0c | ||
|
7ab7104a54 | ||
|
252656968e | ||
|
7a768e7b1a | ||
|
603239970d | ||
|
a086ae1f19 | ||
|
2aef53a117 | ||
|
ea2d5dde85 | ||
|
96704f2fda | ||
|
80b66c849a | ||
|
9215fefab4 | ||
|
953c978d59 | ||
|
7b290e99ab | ||
|
bc8aba48ab | ||
|
c2c80be897 | ||
|
d1fe023281 | ||
|
a2ad1a67a9 | ||
|
9b60a68a75 | ||
|
e02ea69c86 | ||
|
e0971fe0ac | ||
|
70cf53067d | ||
|
801d6500b0 | ||
|
d8544dc047 | ||
|
727e71b328 | ||
|
2a27643874 | ||
|
275a1299e1 | ||
|
059e4e5e28 | ||
|
09bba3199e | ||
|
d7154de9e9 | ||
|
ba95d2bc49 | ||
|
2b16a10b82 | ||
|
b0067b79d5 | ||
|
c6706c1983 | ||
|
a2aa357dac | ||
|
0dc8cf6e8a | ||
|
d4efaf020b | ||
|
9862446b10 | ||
|
3c299b8632 | ||
|
ad03f7d86a | ||
|
50271e2ba0 | ||
|
79ea85dbc4 | ||
|
a9211cfa2f | ||
|
96d45f12d2 | ||
|
b0fc5d3d21 | ||
|
e8b7037ba8 | ||
|
ac665ba7cc | ||
|
7590c0711d | ||
|
4d88b5121c | ||
|
65ab026f25 | ||
|
30036ad36f | ||
|
385bc21ef1 | ||
|
086766a924 | ||
|
2262a129ec | ||
|
f7e00e4223 | ||
|
fcc77e7c92 | ||
|
c4d2dcd835 | ||
|
439a059cca | ||
|
e527a8f9af | ||
|
fef26e234d | ||
|
9666eeb9cf | ||
|
0096b74d46 |
2
.github/ISSUE_TEMPLATE/config.yml
vendored
2
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -10,5 +10,5 @@ contact_links:
|
||||
url: https://github.com/uBlockOrigin/uAssets/issues
|
||||
about: Report issues with filter lists or broken website functionality in the uAssets issue tracker.
|
||||
- name: uBO Lite (uBOL) Issues
|
||||
url: https://github.com/uBlockOrigin/uBOL-issues/issues
|
||||
url: https://github.com/uBlockOrigin/uBOL-home/issues
|
||||
about: Report issues specific to the Manifest Version 3 (MV3) variant in the uBOL issue tracker.
|
||||
|
7
.github/workflows/RELEASE.HEAD.md
vendored
Normal file
7
.github/workflows/RELEASE.HEAD.md
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
[Commits to Master Since This Release](https://github.com/gorhill/uBlock/compare/%version%...master)
|
||||
|
||||
#### How to Install the Developer Build:
|
||||
|
||||
- **Firefox**: Signing pending <!-- Download the build from [uBlock0_%version%.firefox.signed.xpi](https://github.com/gorhill/uBlock/releases/download/%version%/uBlock0_%version%.firefox.signed.xpi). -->
|
||||
uBO works best on Gecko-based browsers, check out [why](https://github.com/gorhill/uBlock/wiki/uBlock-Origin-works-best-on-Firefox).
|
||||
- **Chromium**: Install directly from the [Chrome Web Store](https://chromewebstore.google.com/detail/ublock-origin-development/cgbcahbpdhpcegmbfconppldiemgcoii).
|
66
.github/workflows/main.yml
vendored
66
.github/workflows/main.yml
vendored
@@ -7,9 +7,6 @@ on:
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
# I used the following project as template to get started:
|
||||
# https://github.com/dessant/search-by-image/blob/master/.github/workflows/ci.yml
|
||||
|
||||
jobs:
|
||||
build:
|
||||
permissions:
|
||||
@@ -19,72 +16,35 @@ jobs:
|
||||
if: startsWith(github.ref, 'refs/tags/')
|
||||
steps:
|
||||
- name: Clone repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Clone uAssets
|
||||
run: |
|
||||
tools/pull-assets.sh
|
||||
# https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html
|
||||
- name: Get release information
|
||||
id: release_info
|
||||
run: |
|
||||
echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//}
|
||||
echo "VERSION=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_ENV
|
||||
- name: Build MV2 packages
|
||||
run: |
|
||||
tools/make-chromium.sh ${{ env.VERSION }}
|
||||
tools/make-firefox.sh ${{ env.VERSION }}
|
||||
- name: Assemble release notes
|
||||
run: |
|
||||
> release.body.txt
|
||||
grep -m1 -B10000 -- "----------" CHANGELOG.md >> release.body.txt
|
||||
sed -e 's/%version%/${{ steps.release_info.outputs.VERSION }}/g' RELEASE.HEAD.md >> release.body.txt
|
||||
sed -e 's/%version%/${{ env.VERSION }}/g' .github/workflows/RELEASE.HEAD.md >> release.body.txt
|
||||
- name: Create GitHub release
|
||||
id: create_release
|
||||
uses: actions/create-release@v1
|
||||
uses: softprops/action-gh-release@v2
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ github.token }}
|
||||
with:
|
||||
tag_name: ${{ steps.release_info.outputs.VERSION }}
|
||||
release_name: ${{ steps.release_info.outputs.VERSION }}
|
||||
tag_name: ${{ env.VERSION }}
|
||||
name: ${{ env.VERSION }}
|
||||
draft: true
|
||||
prerelease: true
|
||||
body_path: release.body.txt
|
||||
- name: Build MV2 packages
|
||||
run: |
|
||||
tools/make-chromium.sh ${{ steps.release_info.outputs.VERSION }}
|
||||
tools/make-firefox.sh ${{ steps.release_info.outputs.VERSION }}
|
||||
tools/make-thunderbird.sh ${{ steps.release_info.outputs.VERSION }}
|
||||
tools/make-npm.sh ${{ steps.release_info.outputs.VERSION }}
|
||||
- name: Upload Chromium package
|
||||
uses: actions/upload-release-asset@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
||||
asset_path: dist/build/uBlock0_${{ steps.release_info.outputs.VERSION }}.chromium.zip
|
||||
asset_name: uBlock0_${{ steps.release_info.outputs.VERSION }}.chromium.zip
|
||||
asset_content_type: application/octet-stream
|
||||
- name: Upload Firefox package
|
||||
uses: actions/upload-release-asset@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
||||
asset_path: dist/build/uBlock0_${{ steps.release_info.outputs.VERSION }}.firefox.xpi
|
||||
asset_name: uBlock0_${{ steps.release_info.outputs.VERSION }}.firefox.xpi
|
||||
asset_content_type: application/octet-stream
|
||||
- name: Upload Thunderbird package
|
||||
uses: actions/upload-release-asset@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
||||
asset_path: dist/build/uBlock0_${{ steps.release_info.outputs.VERSION }}.thunderbird.xpi
|
||||
asset_name: uBlock0_${{ steps.release_info.outputs.VERSION }}.thunderbird.xpi
|
||||
asset_content_type: application/octet-stream
|
||||
- name: Upload NodeJS package
|
||||
uses: actions/upload-release-asset@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
||||
asset_path: dist/build/uBlock0_${{ steps.release_info.outputs.VERSION }}.npm.tgz
|
||||
asset_name: uBlock0_${{ steps.release_info.outputs.VERSION }}.npm.tgz
|
||||
asset_content_type: application/octet-stream
|
||||
files: |
|
||||
dist/build/uBlock0_${{ env.VERSION }}.chromium.zip
|
||||
dist/build/uBlock0_${{ env.VERSION }}.firefox.xpi
|
||||
|
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,4 +1,7 @@
|
||||
*.bak
|
||||
*.pem
|
||||
__pycache__/
|
||||
node_modules/
|
||||
/dist/build/
|
||||
/tmp/
|
||||
.DS_Store
|
||||
|
6
.gitmodules
vendored
6
.gitmodules
vendored
@@ -0,0 +1,6 @@
|
||||
[submodule "platform/mv3/extension/lib/codemirror/codemirror-ubol"]
|
||||
path = platform/mv3/extension/lib/codemirror/codemirror-ubol
|
||||
url = https://github.com/gorhill/codemirror-ubol.git
|
||||
[submodule "publish-extension"]
|
||||
path = publish-extension
|
||||
url = https://github.com/gorhill/publish-extension.git
|
||||
|
22
.jshintrc
22
.jshintrc
@@ -1,22 +0,0 @@
|
||||
{
|
||||
"browser": true,
|
||||
"devel": true,
|
||||
"eqeqeq": true,
|
||||
"esversion": 11,
|
||||
"globals": {
|
||||
"chrome": false, // global variable in Chromium, Chrome, Opera
|
||||
"globalThis": false,
|
||||
"self": false,
|
||||
"vAPI": false,
|
||||
"URLSearchParams": false,
|
||||
"WebAssembly": false
|
||||
},
|
||||
"laxbreak": true,
|
||||
"newcap": false,
|
||||
"nonew": false,
|
||||
"strict": "global",
|
||||
"sub": true,
|
||||
"undef": true,
|
||||
"unused": true,
|
||||
"validthis": true
|
||||
}
|
332
CHANGELOG.md
332
CHANGELOG.md
@@ -1,5 +1,337 @@
|
||||
- [Improve `href-sanitizer` scriptlet](https://github.com/gorhill/uBlock/commit/a43d1d8c42)
|
||||
- [Fix `editInboundObjectFn` utility scriptlet](https://github.com/gorhill/uBlock/commit/d376adaae8)
|
||||
- [Improve `trusted-replace-argument` scriptlet](https://github.com/gorhill/uBlock/commit/52bc354bce)
|
||||
- [Add ability to test against regex in JSONPath expressions](https://github.com/gorhill/uBlock/commit/f36d2b8496)
|
||||
- [Improve `proxy-apply` utility scriptlet](https://github.com/gorhill/uBlock/commit/dd4f764920)
|
||||
- [Fix `removeparam` for multiple query parameters with same name](https://github.com/gorhill/uBlock/commit/3e5ea3b03f)
|
||||
- [Improve `trusted-click-element` scriptlet](https://github.com/gorhill/uBlock/commit/9aa91ba111)
|
||||
- [Improve `google-ima` shim](https://github.com/gorhill/uBlock/commit/8de47f250d)
|
||||
- [Add back a uBO-specific version of "CERT.PL's Warning List"](https://github.com/gorhill/uBlock/commit/87dddb7d78)
|
||||
|
||||
----------
|
||||
|
||||
# 1.66.4
|
||||
|
||||
- [Fix potential infinite loop when scanning for `$` anchor](https://github.com/gorhill/uBlock/commit/889c0eb208)
|
||||
- [Allow generic exception for `replace=` option](https://github.com/gorhill/uBlock/commit/52dba4116e)
|
||||
|
||||
----------
|
||||
|
||||
# 1.66.2
|
||||
|
||||
- [Fix version snafu](https://github.com/gorhill/uBlock/commit/50cb780107)
|
||||
|
||||
----------
|
||||
|
||||
# 1.66.0
|
||||
|
||||
- [Improve `prevent-fetch` scriptlet](https://github.com/gorhill/uBlock/commit/d2bce26e7d)
|
||||
- [Add support to strict-block from `ipaddress=` option](https://github.com/gorhill/uBlock/commit/6327aae56c)
|
||||
- [Improve rendering with high-contrast theme](https://github.com/gorhill/uBlock/commit/5d7e5ee3a0) (fix suggested by @emv33)
|
||||
- [Fix undue fetch from remote server at first install](https://github.com/gorhill/uBlock/commit/9327e19233)
|
||||
- [Improve compatibility of `uritransform=` with DNR syntax](https://github.com/gorhill/uBlock/commit/aaf35d9d71)
|
||||
- [Allow usage of `csp=`/`permissions=` with resource type object](https://github.com/gorhill/uBlock/commit/07e9f805bb)
|
||||
- [JSONPath: Add ability to select root node for appending/modifying](https://github.com/gorhill/uBlock/commit/faff035203)
|
||||
- [JSONPath: Add ability to substitute a pattern within a string value](https://github.com/gorhill/uBlock/commit/38ca6d41ff)
|
||||
- [Remove "CERT.PL's Warning List" from stock lists](https://github.com/gorhill/uBlock/commit/e713e133eb)
|
||||
- [Fix incorrect CNAME-related test in advanced settings](https://github.com/gorhill/uBlock/commit/171ddd3e06)
|
||||
- [Remove "AdGuard Tracking Protection"from stock list](https://github.com/gorhill/uBlock/commit/14a9572c86)
|
||||
- [Add filter list for experimental filters](https://github.com/gorhill/uBlock/commit/d88814bc12)
|
||||
- [Improve `fingerprint2.js` shim](https://github.com/gorhill/uBlock/commit/7d9317bb17)
|
||||
- [Make `google-ima` a valid injectable scriptlet](https://github.com/gorhill/uBlock/commit/47cbb43a0e)
|
||||
- [Improve `abort-current-script` scriptlet](https://github.com/gorhill/uBlock/commit/fef50e59f2)
|
||||
- [Fix potential exception in procedural operator `:matches-attr`](https://github.com/gorhill/uBlock/commit/e07e7bbd09)
|
||||
- [Improve reporting of `reason` option in strict-blocked pages](https://github.com/gorhill/uBlock/commit/b7510eee61)
|
||||
- [Improve `prevent-innerHTML` scriptlet](https://github.com/gorhill/uBlock/commit/b0396029bd)
|
||||
|
||||
----------
|
||||
|
||||
# 1.65.0
|
||||
|
||||
## Fixes / changes
|
||||
|
||||
- [Reset `important` option flag at `header` evaluation time](https://github.com/gorhill/uBlock/commit/66b68b4442)
|
||||
- [Fix broken reverse lookup of filter lists](https://github.com/gorhill/uBlock/commit/527b4a201f)
|
||||
- [Add `[trusted-]edit-inbound-object` scriptlets](https://github.com/gorhill/uBlock/commit/6e466cf945)
|
||||
- [Improve `remove-cookie` scriptlet](https://github.com/gorhill/uBlock/commit/0a8ea58bb7)
|
||||
- [Add `json-edit`-related scriptlets](https://github.com/gorhill/uBlock/commit/87e0434c90)
|
||||
- [Improve `trusted-set-cookie` scriptlet](https://github.com/gorhill/uBlock/commit/3a2bb62519)
|
||||
- [Force cache bypass reload when no-scripting switch is toggled](https://github.com/gorhill/uBlock/commit/4affe343dd)
|
||||
- [Improve `jsonl[...]` suite of scriptlets](https://github.com/gorhill/uBlock/commit/ed9999efd6)
|
||||
- [Add support for network filter option `message`](https://github.com/gorhill/uBlock/commit/d8298bb067)
|
||||
- [Complete support for reporing strict-block messages](https://github.com/gorhill/uBlock/commit/253ef7ade3)
|
||||
- [Make `header=` syntax compatible with DNR rules](https://github.com/gorhill/uBlock/commit/408b538e75)
|
||||
- [Counter CodeMirror's `pointer-events: none` on scrollbars](https://github.com/gorhill/uBlock/commit/c44f043ed3)
|
||||
- [Fix element picker issue with explicit dark theme](https://github.com/gorhill/uBlock/commit/0130fdf4a1)
|
||||
|
||||
----------
|
||||
|
||||
# 1.64.0
|
||||
|
||||
## Fixes / changes
|
||||
|
||||
- [Use custom blank page for embedded iframe in dashboard](https://github.com/gorhill/uBlock/commit/8cd6212867)
|
||||
- [Use `color-scheme` `meta` tag, as suggested](https://github.com/gorhill/uBlock/commit/5c029b3532)
|
||||
- [Bring zapper look in line with uBO Lite's zapper](https://github.com/gorhill/uBlock/commit/3f59f94b60)
|
||||
- [Ignore `start_page` transition for popup-blocking purpose](https://github.com/gorhill/uBlock/commit/0243a141a7)
|
||||
- [Exclude `chrome:` as valid openers for popup candidates](https://github.com/gorhill/uBlock/commit/59f4aca010)
|
||||
- [Fetch diff patches from "reliable" servers only](https://github.com/gorhill/uBlock/commit/8b964a8c54)
|
||||
- [Add `trusted-create-html` scriptlet](https://github.com/gorhill/uBlock/commit/20dd606504)
|
||||
- [Mind potential race condition when dynamically registering scriptlets](https://github.com/gorhill/uBlock/commit/15e832da8a)
|
||||
- [Fix undue unchecking of setting in "My filters"](https://github.com/gorhill/uBlock/commit/2bb6999e3f)
|
||||
- [Add path support as target option in static extended filtering](https://github.com/gorhill/uBlock/commit/8b696a691a)
|
||||
- [Add `trusted-prevent-fetch` scriptlet](https://github.com/gorhill/uBlock/commit/4ce26b63ff)
|
||||
- [Code viewer shouldn't be maximizable](https://github.com/gorhill/uBlock/commit/97e740bd2c)
|
||||
- [Add `json-edit` suite of scriptlets; extend `replace=` option](https://github.com/gorhill/uBlock/commit/b18daa53aa)
|
||||
- [Improve `trusted-prevent-dom-bypass` scriptlet](https://github.com/gorhill/uBlock/commit/68a256bdde)
|
||||
- [Add `jsonl-prune-xhr-response`/`jsonl-prune-fetch-response` scriptlets](https://github.com/gorhill/uBlock/commit/95a3be9d56)
|
||||
- [Improve `[json-prune|trusted-replace]-fetch-response` scriptlets](https://github.com/gorhill/uBlock/commit/88fa550a96)
|
||||
|
||||
----------
|
||||
|
||||
# 1.63.2
|
||||
|
||||
## Fixes / changes
|
||||
|
||||
- [Fix TypedArray overflow](https://github.com/gorhill/uBlock/commit/76b80baaea)
|
||||
- [Add prevent-innerHTML scriptlet](https://github.com/gorhill/uBlock/commit/fe744816f1)
|
||||
|
||||
----------
|
||||
|
||||
# 1.63.0
|
||||
|
||||
## Fixes / changes
|
||||
|
||||
- [Improve `prevent-set[Timeout|Interval]` scriptlets](https://github.com/gorhill/uBlock/commit/d36ea89a02)
|
||||
- [Add quit button to element zapper mode](https://github.com/gorhill/uBlock/commit/4aebdbb0a9)
|
||||
- [Improve `trusted-override-element-method` scriptlet](https://github.com/gorhill/uBlock/commit/9e946ce0c3)
|
||||
- [Disable obsolete cache-control workaround for Firefox](https://github.com/gorhill/uBlock/commit/34cea70924)
|
||||
- [Improve `overlay-buster` scriptlet](https://github.com/gorhill/uBlock/commit/fc231998b9)
|
||||
- [Add ability to inject scriptlets according to origin of ancestor contexts](https://github.com/gorhill/uBlock/commit/a483f7955f)
|
||||
- [Fix range parser in prevent-setTimeout scriptlet](https://github.com/gorhill/uBlock/commit/e636c32f2a)
|
||||
- [Add filter option synonyms for `strict1p`/`strict3p`](https://github.com/gorhill/uBlock/commit/34df044808)
|
||||
- [Increase URL buffer size to 8192 (from 2048)](https://github.com/gorhill/uBlock/commit/36404543e4)
|
||||
- [Use onmessage/postMessage instead of BroadcastChannel in diff updater](https://github.com/gorhill/uBlock/commit/ea8853cda3)
|
||||
- [Improve `disable-newtab-links` scriptlet](https://github.com/gorhill/uBlock/commit/d41989e62a)
|
||||
- [Improve `prevent-addEventListener` scriptlet](https://github.com/gorhill/uBlock/commit/9c26a07b53)
|
||||
- [Fix reverse lookup of `##^responseheader(...)` filters](https://github.com/gorhill/uBlock/commit/5921e50e03)
|
||||
- [Improve `evaldata-prune` scriptlet](https://github.com/gorhill/uBlock/commit/9bb1a2baaf)
|
||||
- [Comply with Mozilla's "User Consent and Control"](https://github.com/gorhill/uBlock/commit/344539d793)
|
||||
- [Improve `noeval-if` scriptlet](https://github.com/gorhill/uBlock/commit/0df7faffac)
|
||||
- [Add "closed","next", "mandatory", "agree/disagree" values to `set-cookie` scriptlet](https://github.com/gorhill/uBlock/commit/35a47d674b) (by @ryanbr)
|
||||
- [Add `decline` value to `set-cookie` scriptlet](https://github.com/gorhill/uBlock/commit/4b12247da1)
|
||||
- [Improve `abort-on-stack-trace` scriptlet](https://github.com/gorhill/uBlock/commit/b617926c1c)
|
||||
- [Improve `href-sanitizer` scriptlet](https://github.com/gorhill/uBlock/commit/551c6bc6eb)
|
||||
|
||||
----------
|
||||
|
||||
# 1.62.0
|
||||
|
||||
## Fixes / changes
|
||||
|
||||
- [Fix deserialization of ArrayBuffer shared by multiple TypedArrays](https://github.com/gorhill/uBlock/commit/c92a518218)
|
||||
- [Improve `trusted-suppress-native-method` scriptlet](https://github.com/gorhill/uBlock/commit/cb6c11ab6f)
|
||||
- [Improve `urlskip=` filter option](https://github.com/gorhill/uBlock/commit/a7aa755f18)
|
||||
- [Improve `parse-properties-to-match` scriptlet helper](https://github.com/gorhill/uBlock/commit/7494eaf621)
|
||||
- [Improve `href-sanitizer` scriptlet](https://github.com/gorhill/uBlock/commit/9bf8d53ebe)
|
||||
- [Improve quote usage in filter options and scriptlets](https://github.com/gorhill/uBlock/commit/8ba71f09d7)
|
||||
- [Improve `trusted-suppress-native-method` scriptlet](https://github.com/gorhill/uBlock/commit/7ed3470844)
|
||||
- [Improve `trusted-replace-argument` scriptlet](https://github.com/gorhill/uBlock/commit/3417fe3d5d)
|
||||
- [Block media elements unconditionally when max size is set to 0](https://github.com/gorhill/uBlock/commit/36db7f8327)
|
||||
- Regression from <https://github.com/gorhill/uBlock/commit/73ce4e6bcf>
|
||||
- [Visually separate scriptlet parameters in active line](https://github.com/gorhill/uBlock/commit/076e9fa73e)
|
||||
- [Mitigate potentially delayed execution of scriptlets in Firefox](https://github.com/gorhill/uBlock/commit/b1a00145bd)
|
||||
- [Improve `prevent-setTimeout`/`prevent-setInterval` scriptlets](https://github.com/gorhill/uBlock/commit/3b7fa79a68)
|
||||
- [Improve `trusted-replace-argument` scriptlet](https://github.com/gorhill/uBlock/commit/adced29b5b)
|
||||
- [Add `-safebase64` directive to `urlskip=` option](https://github.com/gorhill/uBlock/commit/bcc058eba7)
|
||||
- [Improve `urlskip=` filter option](https://github.com/gorhill/uBlock/commit/77ed83ff2f)
|
||||
- [Improve `spoof-css` scriptlet](https://github.com/gorhill/uBlock/commit/5f5e3d730f)
|
||||
- [Improve `trusted-set-attr` scriptlet](https://github.com/gorhill/uBlock/commit/c8174d6032)
|
||||
- [Add support for EasyList `{ remove: true }` cosmetic filter syntax](https://github.com/gorhill/uBlock/commit/ff5fc61753)
|
||||
- [Keep moving related scriptlets into separate files](https://github.com/gorhill/uBlock/commit/e5a088738d)
|
||||
- [Improve `prevent-xhr` scriptlet](https://github.com/gorhill/uBlock/commit/ce4908b341)
|
||||
- [Improve `trusted-suppress-native-method` scriptlet](https://github.com/gorhill/uBlock/commit/41616df866)
|
||||
- [Improve `set-cookie` scriptlet](https://github.com/gorhill/uBlock/commit/e613282698)
|
||||
|
||||
----------
|
||||
|
||||
# 1.61.2
|
||||
|
||||
## Fixes / changes
|
||||
|
||||
- [Better handle unexpected conditions when deserializing](https://github.com/gorhill/uBlock/commit/4c299bfca9)
|
||||
- [Fix potential infinite async loop](https://github.com/gorhill/uBlock/commit/335d947c10) (issue found by @Rob--W)
|
||||
|
||||
----------
|
||||
|
||||
# 1.61.0
|
||||
|
||||
## Fixes / changes
|
||||
|
||||
- [Improve `prevent-refresh` scriptlet](https://github.com/gorhill/uBlock/commit/8884f259c1)
|
||||
- [Improve `googlesyndication_adsbygoogle.js` scriptlet](https://github.com/gorhill/uBlock/commit/f645e8f0d2)
|
||||
- [Offer ability to skip redirects in strict-blocked page](https://github.com/gorhill/uBlock/commit/20b54185fa)
|
||||
- [Add `-blocked` directive to `urlskip=` option](https://github.com/gorhill/uBlock/commit/d04dc4c767)
|
||||
- [Add `trusted-set-attr` scriptlet](https://github.com/gorhill/uBlock/commit/11ca4a3923)
|
||||
- [Remove `64:ff9b:` as private network block](https://github.com/gorhill/uBlock/commit/2621c908c3)
|
||||
- [Ensure `urlskip=` redirects only to `https:`](https://github.com/gorhill/uBlock/commit/32f27c5131)
|
||||
- [Add support to `urlskip=` media resources](https://github.com/gorhill/uBlock/commit/ce9fc5dc14)
|
||||
- [Add `-uricomponent` to `urlskip=` option](https://github.com/gorhill/uBlock/commit/01eebffc1f)
|
||||
- [Add `forbidden`/`forever` as safe cookie values](https://github.com/gorhill/uBlock/commit/4d982d9972) (by @ryanbr)
|
||||
- [Add regex extraction transformation step to `urlskip=` option](https://github.com/gorhill/uBlock/commit/c86ed5287b)
|
||||
- [Improve `prevent-window-open` scriptlet](https://github.com/gorhill/uBlock/commit/85877b12ed)
|
||||
- [Add support to parse Adguard's `[$domain=/.../]` regex-based modifier](https://github.com/gorhill/uBlock/commit/58bfe4c846)
|
||||
- [Validate result type of XPath expressions](https://github.com/gorhill/uBlock/commit/c746633693)
|
||||
- [Fix npm test suite](https://github.com/gorhill/uBlock/commit/818cb2d801)
|
||||
- [Add ability to lookup parameter name in `urlskip=`](https://github.com/gorhill/uBlock/commit/64b2086ba4)
|
||||
- [Mind that BroadcastChannel contructor can throw in Firefox](https://github.com/gorhill/uBlock/commit/6d2b3375f8)
|
||||
- [Add `trusted-override-element-method` scriptlet](https://github.com/gorhill/uBlock/commit/95b0ce5e3a)
|
||||
- [Add `trusted-prevent-dom-bypass` scriptlet](https://github.com/gorhill/uBlock/commit/1abc864742)
|
||||
- [Improve `prevent-xhr` scriptlet; add `trusted-prevent-xhr` scriptlet](https://github.com/gorhill/uBlock/commit/fe49ced2ac)
|
||||
- [Skip dns resolution when requests are proxied through http](https://github.com/gorhill/uBlock/commit/4305bfbdb1)
|
||||
- [Blocking large media elements also prevents autoplay, regardless of size](https://github.com/gorhill/uBlock/commit/73ce4e6bcf)
|
||||
- [Do not discard `!#else` block for unknown preprocessor tokens](https://github.com/gorhill/uBlock/commit/6cac645830)
|
||||
- [Add ability to decode base64 in `urlskip=`](https://github.com/gorhill/uBlock/commit/e81e70937f)
|
||||
- [Fix images not properly downloading on click](https://github.com/gorhill/uBlock/commit/aec0bd39e3)
|
||||
|
||||
----------
|
||||
|
||||
# 1.60.0
|
||||
|
||||
## Fixes / changes
|
||||
|
||||
- [Add advanced setting `dnsResolveEnabled`](https://github.com/gorhill/uBlock/commit/760b2ffce6)
|
||||
- [Fix contextual menu quirks](https://github.com/gorhill/uBlock/commit/0a6dc47a72)
|
||||
- [Fix exception thrown in `spoof-css` in Firefox](https://github.com/gorhill/uBlock/commit/11c3a16036)
|
||||
- [Throttle down repeated scriptlet logging information](https://github.com/gorhill/uBlock/commit/e8f6f3ddff)
|
||||
- [Improve scriptlet helper `proxy-apply`](https://github.com/gorhill/uBlock/commit/547fae4842)
|
||||
- [Add an entry in _Report_ page for badware/phishing category](https://github.com/gorhill/uBlock/commit/e18a3707c7)
|
||||
- [New static network filter option `urlskip=`](https://github.com/gorhill/uBlock/commit/266ec4894b)
|
||||
- [Rewrite cname uncloaking code to account for new `ipaddress=` option](https://github.com/gorhill/uBlock/commit/6acf97bf51)
|
||||
- [Avoid using dns.resolve() for proxied DNS resolution](https://github.com/gorhill/uBlock/commit/d5f14ffa32)
|
||||
- [Add support for `lan`/`loopback` values to `ipaddress=` option](https://github.com/gorhill/uBlock/commit/030d7334e4)
|
||||
- [New static network filter option `ipaddress=`](https://github.com/gorhill/uBlock/commit/c6dedd253f)
|
||||
- [Add ability to quote static network option values](https://github.com/gorhill/uBlock/commit/20115697e5)
|
||||
- [Improve `prevent-fetch` scriptlet](https://github.com/gorhill/uBlock/commit/e8202af11d)
|
||||
- [Apply CSP/PP injections to `object` resources](https://github.com/gorhill/uBlock/commit/89f02098fd)
|
||||
- [Improve `xml-prune` scriptlet](https://github.com/gorhill/uBlock/commit/c8307f58a3)
|
||||
- [Add support for `application/dash+xml` in `replace=` option](https://github.com/gorhill/uBlock/commit/91125d29cf)
|
||||
- [Add ability to directly evaluate static network filtering engine](https://github.com/gorhill/uBlock/commit/b7ed3b45ed)
|
||||
- [Fix `prevent-window-open` for when logger is open](https://github.com/gorhill/uBlock/commit/f552f655cb)
|
||||
- [Improve `prevent-window-open` scriptlet](https://github.com/gorhill/uBlock/commit/7f11d6216e)
|
||||
- [Improve `validate-constant` scriptlet helper](https://github.com/gorhill/uBlock/commit/ae5dc6299e)
|
||||
- [Improve `trusted-replace-outbound-text` scriptlet](https://github.com/gorhill/uBlock/commit/0dcb985601)
|
||||
- [Improve `prevent-xhr` scriptlet](https://github.com/gorhill/uBlock/commit/3a249f395c)
|
||||
- [Add noop resources for redirect purpose](https://github.com/gorhill/uBlock/commit/59a9a43a83)
|
||||
- [Use helper function to lookup safe cookie values](https://github.com/gorhill/uBlock/commit/79e10323ad)
|
||||
- [Add `checked`/`unchecked` to `set-cookie`](https://github.com/gorhill/uBlock/commit/3e2171f550) (by @ryanbr)
|
||||
- [Add `allowed`/`denied` to `set-local-storage-item`](https://github.com/gorhill/uBlock/commit/41c2258f91) (by @ryanbr)
|
||||
- [Fix plain exceptions not overriding block filters using `header=` option](https://github.com/gorhill/uBlock/commit/1cb660b94e)
|
||||
- [Improve various scriptlets](https://github.com/gorhill/uBlock/commit/56dfdd2568)
|
||||
- [Improve `href-sanitizer` scriptlet](https://github.com/gorhill/uBlock/commit/db3dc69bcc)
|
||||
- [Improve `remove-attr.js` scriptlet](https://github.com/gorhill/uBlock/commit/fb037e97d0)
|
||||
- [Improve `trusted-replace-node-text` scriptlet](https://github.com/gorhill/uBlock/commit/4f0d1301ab)
|
||||
|
||||
----------
|
||||
|
||||
# 1.59.0
|
||||
|
||||
## Fixes / changes
|
||||
|
||||
- [Improve `href-sanitizer` scriptlet](https://github.com/gorhill/uBlock/commit/84be9cde6d)
|
||||
- [Improve `trusted-replace-node-text` scriptlet](https://github.com/gorhill/uBlock/commit/8afd9e233d)
|
||||
- [Improve `set-constant` scriptlet](https://github.com/gorhill/uBlock/commit/77feb25c4d)
|
||||
- [Improve `prevent-fetch` scriptlet](https://github.com/gorhill/uBlock/commit/e785b99338)
|
||||
- [Improve `href-sanitizer` scriptlet](https://github.com/gorhill/uBlock/commit/66e3a1ad47)
|
||||
- [Fix CSP/PP header injection in non-document resources](https://github.com/gorhill/uBlock/commit/c90f4933df)
|
||||
- [Add `trusted-suppress-native-method` scriptlet](https://github.com/gorhill/uBlock/commit/97d11c03c2)
|
||||
- [Add support for `$currentISODate$` in `trusted-set-cookie` scriptlet](https://github.com/gorhill/uBlock/commit/a3576ea651)
|
||||
- [Add `essential` and `nonessential` to set-cookie](https://github.com/gorhill/uBlock/commit/37d31a82d8) (by @ryanbr)
|
||||
- [Fix distance calculation in picker](https://github.com/gorhill/uBlock/commit/9569969b55)
|
||||
- [Fix bad serialization of Date objects](https://github.com/gorhill/uBlock/commit/c154aaa69c)
|
||||
- [Fix race condition when loading redirect/scriptlet resources](https://github.com/gorhill/uBlock/commit/896737d098)
|
||||
- [Improve logging in `prevent-addEventListener` scriptlet](https://github.com/gorhill/uBlock/commit/8eb3b19c69)
|
||||
- [Add `:matches-prop()` pseudo CSS operator](https://github.com/gorhill/uBlock/commit/aca7674bac)
|
||||
- [Improve `set-cookie` scriptlet](https://github.com/gorhill/uBlock/commit/b4d8750f44)
|
||||
- [Improve `trusted-replace-node-text` scriptlet](https://github.com/gorhill/uBlock/commit/cb0f65e035)
|
||||
- [Improve `trusted-replace-(fetch|xhr)-response` scriptlets](https://github.com/gorhill/uBlock/commit/9072772f61)
|
||||
- [Improve `prevent-addEventListener` scriptlet](https://github.com/gorhill/uBlock/commit/91ee5bdeae)
|
||||
- [Add `isodate` as available placeholder for auto-comment](https://github.com/gorhill/uBlock/commit/d5208ee5dd)
|
||||
- [Improve `trusted-replace-outbound-text` scriptlet](https://github.com/gorhill/uBlock/commit/fa6740a059)
|
||||
- [Classify generic cosmetic filters with comma as highly generic](https://github.com/gorhill/uBlock/commit/8f81833efc)
|
||||
- [Raise max buffer size for response body filtering](https://github.com/gorhill/uBlock/commit/82a3992896)
|
||||
- [Trim end of class tokens in generic cosmetic filtering's surveyor](https://github.com/gorhill/uBlock/commit/8ea1bac80b)
|
||||
- [Improve `trusted-set-cookie` scriptlet](https://github.com/gorhill/uBlock/commit/0e1e4b82c5)
|
||||
|
||||
----------
|
||||
|
||||
# 1.58.0
|
||||
|
||||
## Fixes / changes
|
||||
|
||||
- [Fallback to `requestAnimationFrame` when `requestIdleCallback` is not available](https://github.com/gorhill/uBlock/commit/59ffc96e89)
|
||||
- [Improve `trusted-click-element` scriptlet](https://github.com/gorhill/uBlock/commit/ee67cd6284)
|
||||
- [Replace EasyDutch with AdGuard Dutch](https://github.com/gorhill/uBlock/commit/ca7d2ad61d)
|
||||
- [Add checksum validation when loading trie buffers in selfie](https://github.com/gorhill/uBlock/commit/0e6d607484)
|
||||
- [Catch exceptions in API calls for the sake of old Chromium versions](https://github.com/gorhill/uBlock/commit/bb479b0a66)
|
||||
- [Add `accept`/`reject` to `set-local-storage-item`](https://github.com/gorhill/uBlock/commit/363ad6795c) (by @ryanbr)
|
||||
- [Use raw string for regex patterns in python scripts](https://github.com/gorhill/uBlock/commit/923452b788)
|
||||
- [Improve `noeval-if` scriptlet](https://github.com/gorhill/uBlock/commit/4d8ee35ef7)
|
||||
- [Improve `trusted-set-local-storage-item` scriptlet](https://github.com/gorhill/uBlock/commit/2ccc3135c1)
|
||||
- [Fix potential corruption when reading serialized data](https://github.com/gorhill/uBlock/commit/c098eb8625)
|
||||
- [Improve `remove-[attr|class]` scriptlets](https://github.com/gorhill/uBlock/commit/91dfcbef2a)
|
||||
- [Improve dashboard layout at high zoom factor](https://github.com/gorhill/uBlock/commit/6152f5269e)
|
||||
- [Add a console pane to the logger](https://github.com/gorhill/uBlock/commit/3b4f02db21)
|
||||
- [Improve `spoof-css` scriptlet](https://github.com/gorhill/uBlock/commit/277e90a4a7)
|
||||
- [Fix bad date computation in auto-comment feature](https://github.com/gorhill/uBlock/commit/a5f6c35bb0)
|
||||
- [Fix regression breaking import of `file://` lists](https://github.com/gorhill/uBlock/commit/c223a8cd39)
|
||||
- [Add `trusted-replace-outbound-text` scriptlet](https://github.com/gorhill/uBlock/commit/21e1ee30ee)
|
||||
- [Improve `[trusted-]set-cookie` scriptlets](https://github.com/gorhill/uBlock/commit/49ff7cffb1)
|
||||
|
||||
----------
|
||||
|
||||
# 1.57.2
|
||||
|
||||
## Fixes / changes
|
||||
|
||||
- [Fix stray lists in redesigned cache storage](https://github.com/gorhill/uBlock/commit/defd68ef7d)
|
||||
|
||||
----------
|
||||
|
||||
# 1.57.0
|
||||
|
||||
## Fixes / changes
|
||||
|
||||
- [Do not block large media resources when loaded as top-level document](https://github.com/gorhill/uBlock/commit/3919a16bb8)
|
||||
- [Properly manage cache storage regarding managed user filters](https://github.com/gorhill/uBlock/commit/90ab1a76ab)
|
||||
- [Improve `[trusted-]set-cookie` scriptlets](https://github.com/gorhill/uBlock/commit/11a48561e0)
|
||||
- [Fixed Belgian and Nepali flags for Windows Chromium users](https://github.com/gorhill/uBlock/commit/499c80bd8a) (by @DandelionSprout)
|
||||
- [Mind that `tabs.sendMessage` can throw](https://github.com/gorhill/uBlock/commit/3f7374c1f1)
|
||||
- [Improve `set-cookie` scriptlet](https://github.com/gorhill/uBlock/commit/9146134874)
|
||||
- [Append wildcard character only when filter starts & ends with `/`](https://github.com/gorhill/uBlock/commit/1cb190e102)
|
||||
- [Fix failure to create popup logger window sometimes](https://github.com/gorhill/uBlock/commit/c8762945d9)
|
||||
- [Improve json-prune-related scriptlets](https://github.com/gorhill/uBlock/commit/e7a0f8c781)
|
||||
- [Support maximizing editor to viewport size](https://github.com/gorhill/uBlock/commit/664dd95700)
|
||||
- [Add advanced setting to force popup panel orientation](https://github.com/gorhill/uBlock/commit/0d77ccded7)
|
||||
- [Add checkboxes to "My filters" pane](https://github.com/gorhill/uBlock/commit/46ea5519c1)
|
||||
- [Assume UTF-8 when no encoding can be looked up](https://github.com/gorhill/uBlock/commit/63acdcbdeb)
|
||||
- [Fix issue with "My filters" pane on mobile](https://github.com/gorhill/uBlock/commit/24d94e559d)
|
||||
- [Support aborting "Pick" mode in element picker](https://github.com/gorhill/uBlock/commit/a557f62112)
|
||||
- [Remove sections with no lists in "Filter lists" pane](https://github.com/gorhill/uBlock/commit/0f4e50db07)
|
||||
- [Add "Social widgets", "Cookie notices" sections in "Filter lists" pane](https://github.com/gorhill/uBlock/commit/21a76e32a1)
|
||||
- [No longer disable generic cosmetic filters by default on mobile](https://github.com/gorhill/uBlock/commit/7a768e7b1a)
|
||||
- [Improve `spoof-css` scriptlet](https://github.com/gorhill/uBlock/commit/603239970d)
|
||||
- [Make asset updater compatible with non-persistent background page](https://github.com/gorhill/uBlock/commit/96704f2fda)
|
||||
- [Move dragbar to the top of element picker dialog](https://github.com/gorhill/uBlock/commit/953c978d59)
|
||||
- [Move "Quit" button to top bar in element picker](https://github.com/gorhill/uBlock/commit/6266c4718d)
|
||||
- [Add advanced setting `requestStatsDisabled`](https://github.com/gorhill/uBlock/commit/e02ea69c86)
|
||||
- [First lookup matching stock lists when importing URLs](https://github.com/gorhill/uBlock/commit/2b16a10b82)
|
||||
- [Reset filter lists in worker when creating filters via "Block element"](https://github.com/gorhill/uBlock/commit/b0067b79d5)
|
||||
- [Remove trusted-source requirement when using `badfilter`](https://github.com/gorhill/uBlock/commit/3c299b8632)
|
||||
- [Redesign cache storage](https://github.com/gorhill/uBlock/commit/086766a924)
|
||||
- [Don't match network filter-derived regexes against non-network URIs](https://github.com/gorhill/uBlock/commit/2262a129ec)
|
||||
- [Remove obsolete trusted directives](https://github.com/gorhill/uBlock/commit/439a059cca)
|
||||
- [Support logging details of calls to `json-prune-fetch-response`](https://github.com/gorhill/uBlock/commit/e527a8f9af)
|
||||
- [Escape special whitespace characters in attribute values](https://github.com/gorhill/uBlock/commit/be3e366019)
|
||||
|
||||
----------
|
||||
|
@@ -1,31 +1,31 @@
|
||||
# Contributions
|
||||
|
||||
Refer to the following sections to direct you to the appropriate destination. Thank you in advance for your help.
|
||||
Please refer to the sections below to find the appropriate destination for your contributions. Thank you for your support!
|
||||
|
||||
---
|
||||
|
||||
### Translations
|
||||
|
||||
Help translate uBO via [Crowdin](https://crowdin.com/project/ublock).
|
||||
You can help translate uBO via [Crowdin](https://crowdin.com/project/ublock).
|
||||
|
||||
---
|
||||
|
||||
### Reporting Issues
|
||||
|
||||
The issue tracker in this repository is deprecated. Use the links below to guide you to where you need to report your issue.
|
||||
The issue tracker in this repository is deprecated. Use the links below to report your issues.
|
||||
|
||||
#### Support Forum
|
||||
|
||||
For support, questions, or help, visit [/r/uBlockOrigin](https://www.reddit.com/r/uBlockOrigin/).
|
||||
For support, questions, or assistance, please visit [/r/uBlockOrigin](https://www.reddit.com/r/uBlockOrigin/).
|
||||
|
||||
#### Filter List Issues
|
||||
|
||||
Report issues with filter lists or broken website functionality in the [uAssets issue tracker](https://github.com/uBlockOrigin/uAssets/issues).
|
||||
Report issues related to filter lists or broken website functionality in the [uAssets issue tracker](https://github.com/uBlockOrigin/uAssets/issues).
|
||||
|
||||
#### uBlock Origin (uBO) Issues
|
||||
|
||||
Report issues with uBO in the [uBO issue tracker](https://github.com/uBlockOrigin/uBlock-issues/issues).
|
||||
For issues specifically about uBO, please use the [uBO issue tracker](https://github.com/uBlockOrigin/uBlock-issues/issues).
|
||||
|
||||
#### uBO Lite (uBOL) Issues
|
||||
|
||||
Report issues specific to the Manifest Version 3 (MV3) variant in the [uBOL issue tracker](https://github.com/uBlockOrigin/uBOL-issues/issues).
|
||||
For issues related to the Manifest Version 3 (MV3) variant, report them in the [uBOL issue tracker](https://github.com/uBlockOrigin/uBOL-home/issues).
|
||||
|
138
Makefile
138
Makefile
@@ -1,12 +1,25 @@
|
||||
# https://stackoverflow.com/a/6273809
|
||||
run_options := $(filter-out $@,$(MAKECMDGOALS))
|
||||
|
||||
.PHONY: all clean test lint chromium opera firefox npm dig mv3 mv3-quick \
|
||||
compare maxcost medcost mincost modifiers record wasm
|
||||
.PHONY: all clean cleanassets test lint chromium opera firefox npm dig \
|
||||
mv3-chromium mv3-firefox mv3-edge mv3-safari ubol-codemirror \
|
||||
compare maxcost medcost mincost modifiers record wasm \
|
||||
publish-chromium publish-edge publish-firefox \
|
||||
publish-dev-chromium publish-dev-firefox \
|
||||
upload-firefox upload-dev-firefox
|
||||
|
||||
sources := $(wildcard assets/* assets/*/* dist/version src/* src/*/* src/*/*/* src/*/*/*/*)
|
||||
platform := $(wildcard platform/* platform/*/* platform/*/*/* platform/*/*/*/* platform/*/*/*/*/*)
|
||||
sources := ./dist/version $(shell find ./assets -type f) $(shell find ./src -type f)
|
||||
platform := $(wildcard platform/*/*)
|
||||
assets := dist/build/uAssets
|
||||
mv3-sources := \
|
||||
$(shell find ./src -type f) \
|
||||
$(wildcard platform/mv3/*) \
|
||||
$(shell find ./platform/mv3/extension -name codemirror-ubol -prune -o -type f) \
|
||||
platform/mv3/extension/lib/codemirror/codemirror-ubol/dist/cm6.bundle.ubol.min.js
|
||||
mv3-data := $(shell find ./dist/build/mv3-data -type f)
|
||||
|
||||
mv3-edge-deps := $(wildcard platform/mv3/edge/*)
|
||||
mv3-safari-deps := $(wildcard platform/mv3/safari/*)
|
||||
|
||||
all: chromium firefox npm
|
||||
|
||||
@@ -31,20 +44,16 @@ firefox: dist/build/uBlock0.firefox
|
||||
dist/build/uBlock0.npm: tools/make-nodejs.sh $(sources) $(platform) $(assets)
|
||||
tools/make-npm.sh
|
||||
|
||||
# Build the Node.js package.
|
||||
npm: dist/build/uBlock0.npm
|
||||
|
||||
lint: npm
|
||||
cd dist/build/uBlock0.npm && npm run lint
|
||||
# Dev tools
|
||||
node_modules:
|
||||
npm install
|
||||
|
||||
test: npm
|
||||
cd dist/build/uBlock0.npm && npm run test
|
||||
init: node_modules
|
||||
|
||||
test-full-battery: npm
|
||||
cd dist/build/uBlock0.npm && npm run test-full-battery
|
||||
|
||||
check-leaks: npm
|
||||
cd dist/build/uBlock0.npm && npm run check-leaks
|
||||
lint: init
|
||||
npm run lint
|
||||
|
||||
dist/build/uBlock0.dig: tools/make-nodejs.sh $(sources) $(platform) $(assets)
|
||||
tools/make-dig.sh
|
||||
@@ -55,24 +64,111 @@ dig: dist/build/uBlock0.dig
|
||||
dig-snfe: dig
|
||||
cd dist/build/uBlock0.dig && npm run snfe $(run_options)
|
||||
|
||||
mv3-chromium: tools/make-mv3.sh $(sources) $(platform)
|
||||
dist/build/mv3-data:
|
||||
mkdir -p dist/build/mv3-data
|
||||
|
||||
ubol-codemirror:
|
||||
$(MAKE) -sC platform/mv3/extension/lib/codemirror/codemirror-ubol/ ubol.bundle
|
||||
|
||||
dist/build/uBOLite.chromium: tools/make-mv3.sh $(mv3-sources) $(platform) $(mv3-data) dist/build/mv3-data
|
||||
tools/make-mv3.sh chromium
|
||||
|
||||
mv3-firefox: tools/make-mv3.sh $(sources) $(platform)
|
||||
mv3-chromium: ubol-codemirror dist/build/uBOLite.chromium
|
||||
|
||||
dist/build/uBOLite.firefox: tools/make-mv3.sh $(mv3-sources) $(platform) $(mv3-data) dist/build/mv3-data
|
||||
tools/make-mv3.sh firefox
|
||||
|
||||
mv3-quick: tools/make-mv3.sh $(sources) $(platform)
|
||||
tools/make-mv3.sh quick
|
||||
mv3-firefox: ubol-codemirror dist/build/uBOLite.firefox
|
||||
|
||||
mv3-full: tools/make-mv3.sh $(sources) $(platform)
|
||||
tools/make-mv3.sh full
|
||||
dist/build/uBOLite.edge: tools/make-mv3.sh $(mv3-sources) $(mv3-edge-deps) $(mv3-data) dist/build/mv3-data
|
||||
tools/make-mv3.sh edge
|
||||
|
||||
mv3-edge: ubol-codemirror dist/build/uBOLite.edge
|
||||
|
||||
dist/build/uBOLite.safari: tools/make-mv3.sh $(mv3-sources) $(mv3-safari-deps) $(mv3-data) dist/build/mv3-data
|
||||
tools/make-mv3.sh safari
|
||||
|
||||
mv3-safari: ubol-codemirror dist/build/uBOLite.safari
|
||||
|
||||
dist/build/uAssets:
|
||||
tools/pull-assets.sh
|
||||
|
||||
clean:
|
||||
rm -rf dist/build tmp/node_modules
|
||||
rm -rf dist/build tmp/node_modules node_modules
|
||||
|
||||
cleanassets:
|
||||
rm -rf dist/build/mv3-data dist/build/uAssets
|
||||
|
||||
# Usage: make publish-publish version=?
|
||||
publish-chromium:
|
||||
node publish-extension/publish-chromium.js \
|
||||
ghowner=gorhill \
|
||||
ghrepo=uBlock \
|
||||
ghtag=$(version) \
|
||||
ghasset=chromium \
|
||||
storeid=cjpalhdlnbpafiamejdnhcphjbkeiagm
|
||||
|
||||
# Usage: make publish-edge version=?
|
||||
publish-edge:
|
||||
node publish-extension/publish-edge.js \
|
||||
ghowner=gorhill \
|
||||
ghrepo=uBlock \
|
||||
ghtag=$(version) \
|
||||
ghasset=chromium \
|
||||
datebasedmajor=1 \
|
||||
storeid=odfafepnkmbhccpbejgmiehpchacaeak \
|
||||
productid=$(shell secret-tool lookup token ubo_edge_id)
|
||||
|
||||
# Usage: make publish-firefox version=?
|
||||
publish-firefox:
|
||||
node publish-extension/publish-firefox.js \
|
||||
ghowner=gorhill \
|
||||
ghrepo=uBlock \
|
||||
ghtag=$(version) \
|
||||
ghasset=firefox \
|
||||
storeid=uBlock0@raymondhill.net \
|
||||
channel=listed
|
||||
|
||||
# Usage: make publish-dev-chromium version=?
|
||||
publish-dev-chromium:
|
||||
node publish-extension/publish-chromium.js \
|
||||
ghowner=gorhill \
|
||||
ghrepo=uBlock \
|
||||
ghtag=$(version) \
|
||||
ghasset=chromium \
|
||||
storeid=cgbcahbpdhpcegmbfconppldiemgcoii
|
||||
|
||||
# Usage: make publish-dev-firefox version=?
|
||||
publish-dev-firefox:
|
||||
node publish-extension/publish-firefox.js \
|
||||
ghowner=gorhill \
|
||||
ghrepo=uBlock \
|
||||
ghtag=$(version) \
|
||||
ghasset=firefox \
|
||||
storeid=uBlock0@raymondhill.net \
|
||||
channel=unlisted \
|
||||
updatepath=./dist/firefox/updates.json
|
||||
|
||||
# Usage: make upload-firefox version=?
|
||||
upload-firefox:
|
||||
node publish-extension/upload-firefox.js \
|
||||
ghowner=gorhill \
|
||||
ghrepo=uBlock \
|
||||
ghtag=$(version) \
|
||||
ghasset=firefox \
|
||||
storeid=uBlock0@raymondhill.net \
|
||||
channel=listed
|
||||
|
||||
# Usage: make upload-dev-firefox version=?
|
||||
upload-dev-firefox:
|
||||
node publish-extension/upload-firefox.js \
|
||||
ghowner=gorhill \
|
||||
ghrepo=uBlock \
|
||||
ghtag=$(version) \
|
||||
ghasset=firefox \
|
||||
storeid=uBlock0@raymondhill.net \
|
||||
channel=unlisted \
|
||||
updatepath=./dist/firefox/updates.json
|
||||
|
||||
# Not real targets, just convenient for auto-completion at shell prompt
|
||||
compare:
|
||||
|
33
README.md
33
README.md
@@ -15,19 +15,15 @@
|
||||
</sub>
|
||||
uBlock Origin (uBO)
|
||||
</h1>
|
||||
<p align="center">
|
||||
<sub><a href="https://github.com/gorhill/uBlock/wiki/uBlock-Origin-is-completely-unrelated-to-the-web-site-ublock.org"><b>BEWARE!</b> uBO is (and has always been) COMPLETELY UNRELATED to the website <code>ublock.org</code></a>.</sub>
|
||||
</p>
|
||||
|
||||
***
|
||||
|
||||
<p align="center">
|
||||
<a href="https://addons.mozilla.org/addon/ublock-origin/"><img src="https://user-images.githubusercontent.com/585534/107280546-7b9b2a00-6a26-11eb-8f9f-f95932f4bfec.png" alt="Get uBlock Origin for Firefox"></a>
|
||||
<a href="https://chrome.google.com/webstore/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagm"><img src="https://user-images.githubusercontent.com/585534/107280622-91a8ea80-6a26-11eb-8d07-77c548b28665.png" alt="Get uBlock Origin for Chromium"></a>
|
||||
<a href="https://microsoftedge.microsoft.com/addons/detail/ublock-origin/odfafepnkmbhccpbejgmiehpchacaeak"><img src="https://user-images.githubusercontent.com/585534/107280673-a5ece780-6a26-11eb-9cc7-9fa9f9f81180.png" alt="Get uBlock Origin for Microsoft Edge"></a>
|
||||
<a href="https://addons.opera.com/extensions/details/ublock/"><img src="https://user-images.githubusercontent.com/585534/107280692-ac7b5f00-6a26-11eb-85c7-088926504452.png" alt="Get uBlock Origin for Opera"></a>
|
||||
<a href="https://addons.thunderbird.net/thunderbird/addon/ublock-origin/"><img src="https://user-images.githubusercontent.com/124740436/235314672-73243149-3683-4407-a2d5-ad0f2b08bc17.png" alt="Get uBlock Origin for Thunderbird"></a>
|
||||
</p>
|
||||
| Browser | Install from ... | Status |
|
||||
| :-------: | ---------------- | ------ |
|
||||
| <img src="https://github.com/user-attachments/assets/b0136512-56a5-4856-8c50-4971c957a24f" alt="Get uBlock Origin for Firefox"> | <a href="https://addons.mozilla.org/addon/ublock-origin/">Firefox Add-ons</a> | [uBO works best on Firefox](https://github.com/gorhill/uBlock/wiki/uBlock-Origin-works-best-on-Firefox) |
|
||||
| <img src="https://github.com/user-attachments/assets/3a7569f8-688b-4eb1-a643-8d0fe173aefe" alt="Get uBlock Origin for Microsoft Edge"> | <a href="https://microsoftedge.microsoft.com/addons/detail/ublock-origin/odfafepnkmbhccpbejgmiehpchacaeak">Edge Add-ons</a> |
|
||||
| <img src="https://github.com/user-attachments/assets/938f080c-fe64-4e48-8b89-4bfceabb56e6" alt="Get uBlock Origin for Opera"> | <a href="https://addons.opera.com/extensions/details/ublock/">Opera Add-ons</a> |
|
||||
| <img src="https://github.com/user-attachments/assets/5463ef88-873b-4516-8514-5277664cfde7" alt="Get uBlock Origin for Chromium"> | <a href="https://chromewebstore.google.com/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagm">Chrome Web Store</a> | <a href="https://github.com/uBlockOrigin/uBlock-issues/wiki/About-Google-Chrome's-%22This-extension-may-soon-no-longer-be-supported%22">About Google Chrome's "This extension may soon no longer be supported"</a><br>End of support on Chrome 139 |
|
||||
| <img src="https://github.com/user-attachments/assets/2e9037c4-836d-44c1-a716-ba96e89daaff" alt="Get uBlock Origin for Thunderbird"> | <a href="https://addons.thunderbird.net/thunderbird/addon/ublock-origin/">Thunderbird Add-ons</a> | [No longer updated and stuck at 1.49.2.](https://github.com/uBlockOrigin/uBlock-issues/issues/2928) Later versions require "GitHub - Releases". |
|
||||
| <img src="https://upload.wikimedia.org/wikipedia/commons/c/c2/GitHub_Invertocat_Logo.svg" height="50" alt="Get uBlock Origin through GitHub"> | <a href="https://github.com/gorhill/uBlock/releases">GitHub - Releases</a> | Stable and development versions on Firefox, Chromium MV2, and Thunderbird. Must be placed manually into web browsers; the Chromium and Thunderbird versions usually won't auto-update.
|
||||
|
||||
***
|
||||
|
||||
@@ -99,7 +95,7 @@ In Thunderbird, uBlock Origin does not affect emails, just feeds.
|
||||
|
||||
[Chrome Web Store][Chrome]
|
||||
|
||||
[Microsoft Edge Add-ons][Edge] (Published by: [Nicole Rolls][Nicole Rolls])
|
||||
[Microsoft Edge Add-ons][Edge] (Published by [Nicole Rolls][Nicole Rolls] until version 1.62. Ownership transfer at version 1.64.)
|
||||
|
||||
[Opera Add-ons][Opera]
|
||||
|
||||
@@ -142,16 +138,16 @@ If you ever want to contribute something, think about the people working hard to
|
||||
|
||||
[Peter Lowe's Blocklist]: https://pgl.yoyo.org/adservers/
|
||||
[Malicious Blocklist]: https://gitlab.com/malware-filter/urlhaus-filter#malicious-url-blocklist
|
||||
[Performance]: https://www.debugbear.com/blog/chrome-extension-performance-2021#how-do-ad-blockers-and-privacy-tools-affect-browser-performance
|
||||
[Performance]: https://www.debugbear.com/blog/chrome-extensions-website-performance#the-impact-of-ad-blocking-on-website-performance
|
||||
[EasyPrivacy]: https://easylist.to/#easyprivacy
|
||||
[Thunderbird]: https://addons.thunderbird.net/thunderbird/addon/ublock-origin/
|
||||
[Chrome Dev]: https://chrome.google.com/webstore/detail/ublock-origin-development/cgbcahbpdhpcegmbfconppldiemgcoii
|
||||
[Chrome Dev]: https://chromewebstore.google.com/detail/ublock-origin-development/cgbcahbpdhpcegmbfconppldiemgcoii
|
||||
[EasyList]: https://easylist.to/#easylist
|
||||
[Mozilla]: https://addons.mozilla.org/addon/ublock-origin/
|
||||
[Crowdin]: https://crowdin.com/project/ublock
|
||||
[Chrome]: https://chrome.google.com/webstore/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagm
|
||||
[Chrome]: https://chromewebstore.google.com/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagm
|
||||
[Reddit]: https://www.reddit.com/r/uBlockOrigin/
|
||||
[Theft]: https://twitter.com/LeaVerou/status/518154828166725632
|
||||
[Theft]: https://x.com/LeaVerou/status/518154828166725632
|
||||
[Opera]: https://addons.opera.com/extensions/details/ublock/
|
||||
[Edge]: https://microsoftedge.microsoft.com/addons/detail/ublock-origin/odfafepnkmbhccpbejgmiehpchacaeak
|
||||
[NPM]: https://www.npmjs.com/package/@gorhill/ubo-core
|
||||
@@ -161,7 +157,6 @@ If you ever want to contribute something, think about the people working hard to
|
||||
|
||||
[Nicole Rolls]: https://github.com/nicole-ashley
|
||||
|
||||
|
||||
<!---------------------------------[ Internal ]-------------------------------->
|
||||
|
||||
[Manual Installation]: https://github.com/gorhill/uBlock/tree/master/dist#install
|
||||
@@ -178,7 +173,6 @@ If you ever want to contribute something, think about the people working hard to
|
||||
[Beta]: https://github.com/gorhill/uBlock/blob/master/dist/README.md#for-beta-version
|
||||
[Wiki]: https://github.com/gorhill/uBlock/wiki
|
||||
|
||||
|
||||
<!----------------------------------[ Badges ]--------------------------------->
|
||||
|
||||
[Badge Localization]: https://d322cqt584bo4o.cloudfront.net/ublock/localized.svg
|
||||
@@ -189,4 +183,3 @@ If you ever want to contribute something, think about the people working hard to
|
||||
[Badge Edge]: https://img.shields.io/badge/dynamic/json?label=Edge&color=brightgreen&query=%24.averageRating&suffix=%2F%35&url=https%3A%2F%2Fmicrosoftedge.microsoft.com%2Faddons%2Fgetproductdetailsbycrxid%2Fodfafepnkmbhccpbejgmiehpchacaeak
|
||||
[Badge Issues]: https://img.shields.io/github/issues/uBlockOrigin/uBlock-issues
|
||||
[Badge NPM]: https://img.shields.io/npm/v/@gorhill/ubo-core
|
||||
|
||||
|
@@ -1,10 +0,0 @@
|
||||
|
||||
[Commits to master since this release](https://github.com/gorhill/uBlock/compare/%version%...master)
|
||||
|
||||
To install the developer build:
|
||||
|
||||
- **Firefox**: Click [uBlock0_%version%.firefox.signed.xpi](https://github.com/gorhill/uBlock/releases/download/%version%/uBlock0_%version%.firefox.signed.xpi)
|
||||
- [uBO works best on Firefox](https://github.com/gorhill/uBlock/wiki/uBlock-Origin-works-best-on-Firefox).
|
||||
- **Chromium**: Install from the Chrome Web Store (CWS): <https://chrome.google.com/webstore/detail/ublock-origin-dev-build/cgbcahbpdhpcegmbfconppldiemgcoii>.
|
||||
- **Thunderbird**: Download [uBlock0_%version%.thunderbird.xpi](https://github.com/gorhill/uBlock/releases/download/%version%/uBlock0_%version%.thunderbird.xpi), then drag-n-drop it into Thunderbird's _Add-ons Manager_ pane (Thunderbird 91+ required)
|
||||
- **Node.js**: Import from [npm](https://www.npmjs.com/package/@gorhill/ubo-core), or download and unzip [uBlock0_%version%.npm.tgz](https://github.com/gorhill/uBlock/releases/download/%version%/uBlock0_%version%.npm.tgz).
|
@@ -52,6 +52,10 @@
|
||||
"https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/filters.min.txt",
|
||||
"https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/filters.min.txt"
|
||||
],
|
||||
"patchURLs": [
|
||||
"https://ublockorigin.github.io/uAssetsCDN/filters/",
|
||||
"https://ublockorigin.pages.dev/filters/"
|
||||
],
|
||||
"supportURL": "https://github.com/uBlockOrigin/uAssets"
|
||||
},
|
||||
"ublock-badware": {
|
||||
@@ -71,6 +75,10 @@
|
||||
"https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/badware.min.txt",
|
||||
"https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/badware.min.txt"
|
||||
],
|
||||
"patchURLs": [
|
||||
"https://ublockorigin.github.io/uAssetsCDN/filters/",
|
||||
"https://ublockorigin.pages.dev/filters/"
|
||||
],
|
||||
"supportURL": "https://github.com/uBlockOrigin/uAssets",
|
||||
"instructionURL": "https://github.com/gorhill/uBlock/wiki/Badware-risks"
|
||||
},
|
||||
@@ -91,6 +99,10 @@
|
||||
"https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/privacy.min.txt",
|
||||
"https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/privacy.min.txt"
|
||||
],
|
||||
"patchURLs": [
|
||||
"https://ublockorigin.github.io/uAssetsCDN/filters/",
|
||||
"https://ublockorigin.pages.dev/filters/"
|
||||
],
|
||||
"supportURL": "https://github.com/uBlockOrigin/uAssets"
|
||||
},
|
||||
"ublock-unbreak": {
|
||||
@@ -109,6 +121,10 @@
|
||||
"https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/unbreak.min.txt",
|
||||
"https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/unbreak.min.txt"
|
||||
],
|
||||
"patchURLs": [
|
||||
"https://ublockorigin.github.io/uAssetsCDN/filters/",
|
||||
"https://ublockorigin.pages.dev/filters/"
|
||||
],
|
||||
"supportURL": "https://github.com/uBlockOrigin/uAssets"
|
||||
},
|
||||
"ublock-quick-fixes": {
|
||||
@@ -127,6 +143,28 @@
|
||||
"https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/quick-fixes.min.txt",
|
||||
"https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/quick-fixes.min.txt"
|
||||
],
|
||||
"patchURLs": [
|
||||
"https://ublockorigin.github.io/uAssetsCDN/filters/",
|
||||
"https://ublockorigin.pages.dev/filters/"
|
||||
],
|
||||
"supportURL": "https://github.com/uBlockOrigin/uAssets"
|
||||
},
|
||||
"ublock-experimental": {
|
||||
"content": "filters",
|
||||
"group": "default",
|
||||
"off": true,
|
||||
"title": "uBlock filters – Experimental",
|
||||
"contentURL": "https://ublockorigin.github.io/uAssets/filters/experimental.txt",
|
||||
"cdnURLs": [
|
||||
"https://ublockorigin.github.io/uAssetsCDN/filters/experimental.min.txt",
|
||||
"https://ublockorigin.pages.dev/filters/experimental.min.txt",
|
||||
"https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/experimental.min.txt",
|
||||
"https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/experimental.min.txt"
|
||||
],
|
||||
"patchURLs": [
|
||||
"https://ublockorigin.github.io/uAssetsCDN/filters/",
|
||||
"https://ublockorigin.pages.dev/filters/"
|
||||
],
|
||||
"supportURL": "https://github.com/uBlockOrigin/uAssets"
|
||||
},
|
||||
"adguard-generic": {
|
||||
@@ -136,8 +174,7 @@
|
||||
"title": "AdGuard – Ads",
|
||||
"tags": "ads",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/2_without_easylist.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
|
||||
"instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters"
|
||||
},
|
||||
"adguard-mobile": {
|
||||
"content": "filters",
|
||||
@@ -147,14 +184,14 @@
|
||||
"tags": "ads mobile",
|
||||
"ua": "mobile",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/11.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
|
||||
"instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters"
|
||||
},
|
||||
"easylist": {
|
||||
"content": "filters",
|
||||
"group": "ads",
|
||||
"title": "EasyList",
|
||||
"tags": "ads",
|
||||
"preferred": true,
|
||||
"contentURL": [
|
||||
"https://ublockorigin.github.io/uAssets/thirdparties/easylist.txt",
|
||||
"assets/thirdparties/easylist/easylist.txt"
|
||||
@@ -164,6 +201,10 @@
|
||||
"https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist.txt",
|
||||
"https://ublockorigin.pages.dev/thirdparties/easylist.txt"
|
||||
],
|
||||
"patchURLs": [
|
||||
"https://ublockorigin.github.io/uAssetsCDN/filters/",
|
||||
"https://ublockorigin.pages.dev/filters/"
|
||||
],
|
||||
"supportURL": "https://easylist.to/"
|
||||
},
|
||||
"adguard-spyware-url": {
|
||||
@@ -173,17 +214,7 @@
|
||||
"title": "AdGuard URL Tracking Protection",
|
||||
"tags": "privacy",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/17.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
|
||||
"instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
|
||||
},
|
||||
"adguard-spyware": {
|
||||
"content": "filters",
|
||||
"group": "privacy",
|
||||
"off": true,
|
||||
"title": "AdGuard Tracking Protection",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/3.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
|
||||
"instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters"
|
||||
},
|
||||
"block-lan": {
|
||||
"content": "filters",
|
||||
@@ -205,6 +236,7 @@
|
||||
"group": "privacy",
|
||||
"title": "EasyPrivacy",
|
||||
"tags": "privacy",
|
||||
"preferred": true,
|
||||
"contentURL": [
|
||||
"https://ublockorigin.github.io/uAssets/thirdparties/easyprivacy.txt",
|
||||
"assets/thirdparties/easylist/easyprivacy.txt"
|
||||
@@ -214,6 +246,10 @@
|
||||
"https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easyprivacy.txt",
|
||||
"https://ublockorigin.pages.dev/thirdparties/easyprivacy.txt"
|
||||
],
|
||||
"patchURLs": [
|
||||
"https://ublockorigin.github.io/uAssetsCDN/filters/",
|
||||
"https://ublockorigin.pages.dev/filters/"
|
||||
],
|
||||
"supportURL": "https://easylist.to/"
|
||||
},
|
||||
"urlhaus-1": {
|
||||
@@ -244,32 +280,22 @@
|
||||
],
|
||||
"supportURL": "https://gitlab.com/malware-filter/phishing-filter#phishing-url-blocklist"
|
||||
},
|
||||
"adguard-social": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"parent": "AdGuard – Annoyances",
|
||||
"off": true,
|
||||
"title": "AdGuard – Social Media",
|
||||
"tags": "annoyances social",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/4.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
|
||||
"instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
|
||||
},
|
||||
"adguard-cookies": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"parent": "AdGuard – Annoyances|AdGuard/uBO – Cookie Notices",
|
||||
"group2": "cookies",
|
||||
"parent": "AdGuard/uBO – Cookie Notices",
|
||||
"off": true,
|
||||
"title": "AdGuard – Cookie Notices",
|
||||
"tags": "annoyances cookies",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/18.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
|
||||
"instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters"
|
||||
},
|
||||
"ublock-cookies-adguard": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"parent": "AdGuard – Annoyances|AdGuard/uBO – Cookie Notices",
|
||||
"group2": "cookies",
|
||||
"parent": "AdGuard/uBO – Cookie Notices",
|
||||
"off": true,
|
||||
"title": "uBlock filters – Cookie Notices",
|
||||
"tags": "annoyances cookies",
|
||||
@@ -282,98 +308,15 @@
|
||||
],
|
||||
"supportURL": "https://github.com/uBlockOrigin/uAssets"
|
||||
},
|
||||
"adguard-popup-overlays": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"parent": "AdGuard – Annoyances",
|
||||
"off": true,
|
||||
"title": "AdGuard – Popup Overlays",
|
||||
"tags": "annoyances",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/19.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
|
||||
"instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
|
||||
},
|
||||
"adguard-mobile-app-banners": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"parent": "AdGuard – Annoyances",
|
||||
"off": true,
|
||||
"title": "AdGuard – Mobile App Banners",
|
||||
"tags": "annoyances mobile",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/20.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
|
||||
"instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
|
||||
},
|
||||
"adguard-other-annoyances": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"parent": "AdGuard – Annoyances",
|
||||
"off": true,
|
||||
"title": "AdGuard – Other Annoyances",
|
||||
"tags": "annoyances",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/21.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
|
||||
"instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
|
||||
},
|
||||
"adguard-widgets": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"parent": "AdGuard – Annoyances",
|
||||
"off": true,
|
||||
"title": "AdGuard – Widgets",
|
||||
"tags": "annoyances",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/22.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
|
||||
"instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
|
||||
},
|
||||
"fanboy-thirdparty_social": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"off": true,
|
||||
"title": "Fanboy – Anti-Facebook",
|
||||
"tags": "privacy",
|
||||
"contentURL": "https://secure.fanboy.co.nz/fanboy-antifacebook.txt",
|
||||
"supportURL": "https://github.com/ryanbr/fanboy-adblock/issues"
|
||||
},
|
||||
"easylist-annoyances": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"parent": "EasyList – Annoyances",
|
||||
"off": true,
|
||||
"title": "EasyList – Other Annoyances",
|
||||
"tags": "annoyances",
|
||||
"contentURL": "https://ublockorigin.github.io/uAssets/thirdparties/easylist-annoyances.txt",
|
||||
"cdnURLs": [
|
||||
"https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-annoyances.txt",
|
||||
"https://ublockorigin.pages.dev/thirdparties/easylist-annoyances.txt",
|
||||
"https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-annoyances.txt",
|
||||
"https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-annoyances.txt"
|
||||
],
|
||||
"supportURL": "https://github.com/easylist/easylist#fanboy-lists"
|
||||
},
|
||||
"easylist-chat": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"parent": "EasyList – Annoyances",
|
||||
"off": true,
|
||||
"title": "EasyList – Chat Widgets",
|
||||
"tags": "annoyances",
|
||||
"contentURL": "https://ublockorigin.github.io/uAssets/thirdparties/easylist-chat.txt",
|
||||
"cdnURLs": [
|
||||
"https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-chat.txt",
|
||||
"https://ublockorigin.pages.dev/thirdparties/easylist-chat.txt",
|
||||
"https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-chat.txt",
|
||||
"https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-chat.txt"
|
||||
],
|
||||
"supportURL": "https://github.com/easylist/easylist#fanboy-lists"
|
||||
},
|
||||
"fanboy-cookiemonster": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"parent": "EasyList – Annoyances|EasyList/uBO – Cookie Notices",
|
||||
"group2": "cookies",
|
||||
"parent": "EasyList/uBO – Cookie Notices",
|
||||
"off": true,
|
||||
"title": "EasyList – Cookie Notices",
|
||||
"tags": "annoyances cookies",
|
||||
"preferred": true,
|
||||
"contentURL": [
|
||||
"https://ublockorigin.github.io/uAssets/thirdparties/easylist-cookies.txt",
|
||||
"https://secure.fanboy.co.nz/fanboy-cookiemonster_ubo.txt"
|
||||
@@ -390,10 +333,12 @@
|
||||
"ublock-cookies-easylist": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"parent": "EasyList – Annoyances|EasyList/uBO – Cookie Notices",
|
||||
"group2": "cookies",
|
||||
"parent": "EasyList/uBO – Cookie Notices",
|
||||
"off": true,
|
||||
"title": "uBlock filters – Cookie Notices",
|
||||
"tags": "annoyances cookies",
|
||||
"preferred": true,
|
||||
"contentURL": "https://ublockorigin.github.io/uAssets/filters/annoyances-cookies.txt",
|
||||
"cdnURLs": [
|
||||
"https://ublockorigin.github.io/uAssetsCDN/filters/annoyances-cookies.txt",
|
||||
@@ -403,6 +348,123 @@
|
||||
],
|
||||
"supportURL": "https://github.com/uBlockOrigin/uAssets"
|
||||
},
|
||||
"adguard-social": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"group2": "social",
|
||||
"parent": null,
|
||||
"off": true,
|
||||
"title": "AdGuard – Social Widgets",
|
||||
"tags": "annoyances social",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/4.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters"
|
||||
},
|
||||
"fanboy-social": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"group2": "social",
|
||||
"parent": null,
|
||||
"off": true,
|
||||
"title": "EasyList – Social Widgets",
|
||||
"tags": "annoyances social",
|
||||
"preferred": true,
|
||||
"contentURL": [
|
||||
"https://ublockorigin.github.io/uAssets/thirdparties/easylist-social.txt",
|
||||
"https://secure.fanboy.co.nz/fanboy-social_ubo.txt"
|
||||
],
|
||||
"cdnURLs": [
|
||||
"https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-social.txt",
|
||||
"https://ublockorigin.pages.dev/thirdparties/easylist-social.txt",
|
||||
"https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-social.txt",
|
||||
"https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-social.txt",
|
||||
"https://secure.fanboy.co.nz/fanboy-social_ubo.txt"
|
||||
],
|
||||
"supportURL": "https://easylist.to/"
|
||||
},
|
||||
"fanboy-thirdparty_social": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"group2": "social",
|
||||
"off": true,
|
||||
"title": "Fanboy – Anti-Facebook",
|
||||
"tags": "privacy",
|
||||
"contentURL": "https://secure.fanboy.co.nz/fanboy-antifacebook.txt",
|
||||
"supportURL": "https://github.com/ryanbr/fanboy-adblock/issues"
|
||||
},
|
||||
"adguard-popup-overlays": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"parent": "AdGuard – Annoyances",
|
||||
"off": true,
|
||||
"title": "AdGuard – Popup Overlays",
|
||||
"tags": "annoyances",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/19.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters"
|
||||
},
|
||||
"adguard-mobile-app-banners": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"parent": "AdGuard – Annoyances",
|
||||
"off": true,
|
||||
"title": "AdGuard – Mobile App Banners",
|
||||
"tags": "annoyances mobile",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/20.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters"
|
||||
},
|
||||
"adguard-other-annoyances": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"parent": "AdGuard – Annoyances",
|
||||
"off": true,
|
||||
"title": "AdGuard – Other Annoyances",
|
||||
"tags": "annoyances",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/21.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters"
|
||||
},
|
||||
"adguard-widgets": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"parent": "AdGuard – Annoyances",
|
||||
"off": true,
|
||||
"title": "AdGuard – Widgets",
|
||||
"tags": "annoyances",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/22.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters"
|
||||
},
|
||||
"easylist-annoyances": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"parent": "EasyList – Annoyances",
|
||||
"off": true,
|
||||
"title": "EasyList – Other Annoyances",
|
||||
"tags": "annoyances",
|
||||
"preferred": true,
|
||||
"contentURL": "https://ublockorigin.github.io/uAssets/thirdparties/easylist-annoyances.txt",
|
||||
"cdnURLs": [
|
||||
"https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-annoyances.txt",
|
||||
"https://ublockorigin.pages.dev/thirdparties/easylist-annoyances.txt",
|
||||
"https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-annoyances.txt",
|
||||
"https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-annoyances.txt"
|
||||
],
|
||||
"supportURL": "https://github.com/easylist/easylist#fanboy-lists"
|
||||
},
|
||||
"easylist-chat": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"parent": "EasyList – Annoyances",
|
||||
"off": true,
|
||||
"title": "EasyList – Chat Widgets",
|
||||
"tags": "annoyances",
|
||||
"preferred": true,
|
||||
"contentURL": "https://ublockorigin.github.io/uAssets/thirdparties/easylist-chat.txt",
|
||||
"cdnURLs": [
|
||||
"https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-chat.txt",
|
||||
"https://ublockorigin.pages.dev/thirdparties/easylist-chat.txt",
|
||||
"https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-chat.txt",
|
||||
"https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-chat.txt"
|
||||
],
|
||||
"supportURL": "https://github.com/easylist/easylist#fanboy-lists"
|
||||
},
|
||||
"easylist-newsletters": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
@@ -410,6 +472,7 @@
|
||||
"off": true,
|
||||
"title": "EasyList – Newsletter Notices",
|
||||
"tags": "annoyances",
|
||||
"preferred": true,
|
||||
"contentURL": [
|
||||
"https://ublockorigin.github.io/uAssets/thirdparties/easylist-newsletters.txt"
|
||||
],
|
||||
@@ -428,6 +491,7 @@
|
||||
"off": true,
|
||||
"title": "EasyList – Notifications",
|
||||
"tags": "annoyances",
|
||||
"preferred": true,
|
||||
"contentURL": [
|
||||
"https://ublockorigin.github.io/uAssets/thirdparties/easylist-notifications.txt"
|
||||
],
|
||||
@@ -439,26 +503,6 @@
|
||||
],
|
||||
"supportURL": "https://easylist.to/"
|
||||
},
|
||||
"fanboy-social": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"parent": "EasyList – Annoyances",
|
||||
"off": true,
|
||||
"title": "EasyList – Social Widgets",
|
||||
"tags": "annoyances social",
|
||||
"contentURL": [
|
||||
"https://ublockorigin.github.io/uAssets/thirdparties/easylist-social.txt",
|
||||
"https://secure.fanboy.co.nz/fanboy-social_ubo.txt"
|
||||
],
|
||||
"cdnURLs": [
|
||||
"https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-social.txt",
|
||||
"https://ublockorigin.pages.dev/thirdparties/easylist-social.txt",
|
||||
"https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-social.txt",
|
||||
"https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-social.txt",
|
||||
"https://secure.fanboy.co.nz/fanboy-social_ubo.txt"
|
||||
],
|
||||
"supportURL": "https://easylist.to/"
|
||||
},
|
||||
"ublock-annoyances": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
@@ -472,6 +516,10 @@
|
||||
"https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/annoyances.min.txt",
|
||||
"https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/annoyances.min.txt"
|
||||
],
|
||||
"patchURLs": [
|
||||
"https://ublockorigin.github.io/uAssetsCDN/filters/",
|
||||
"https://ublockorigin.pages.dev/filters/"
|
||||
],
|
||||
"supportURL": "https://github.com/uBlockOrigin/uAssets"
|
||||
},
|
||||
"dpollock-0": {
|
||||
@@ -490,6 +538,7 @@
|
||||
"updateAfter": 13,
|
||||
"title": "Peter Lowe’s Ad and tracking server list",
|
||||
"tags": "ads privacy security",
|
||||
"preferred": true,
|
||||
"contentURL": [
|
||||
"https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=1&mimetype=plaintext",
|
||||
"assets/thirdparties/pgl.yoyo.org/as/serverlist.txt",
|
||||
@@ -513,7 +562,7 @@
|
||||
"off": true,
|
||||
"title": "🇪🇬eg 🇸🇦sa 🇲🇦ma 🇩🇿dz: Liste AR",
|
||||
"tags": "ads arabic اَلْعَرَبِيَّةُ",
|
||||
"lang": "ar",
|
||||
"lang": "ar kab",
|
||||
"contentURL": "https://easylist-downloads.adblockplus.org/Liste_AR.txt",
|
||||
"supportURL": "https://forums.lanik.us/viewforum.php?f=98"
|
||||
},
|
||||
@@ -567,8 +616,8 @@
|
||||
"title": "🇪🇪ee: Eesti saitidele kohandatud filter",
|
||||
"tags": "ads estonian",
|
||||
"lang": "et",
|
||||
"contentURL": "https://adblock.ee/list.php",
|
||||
"supportURL": "https://adblock.ee/"
|
||||
"contentURL": "https://adblock.ee/list.txt",
|
||||
"supportURL": "https://adblock.ee"
|
||||
},
|
||||
"FIN-0": {
|
||||
"content": "filters",
|
||||
@@ -586,7 +635,7 @@
|
||||
"off": true,
|
||||
"title": "🇫🇷fr 🇨🇦ca: AdGuard Français",
|
||||
"tags": "ads french",
|
||||
"lang": "ar br ff fr lb oc son",
|
||||
"lang": "ar br ff fr kab lb oc son",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/16.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters"
|
||||
},
|
||||
@@ -605,9 +654,13 @@
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "🇭🇷hr 🇷🇸rs: Dandelion Sprout's Serbo-Croatian filters",
|
||||
"tags": "ads croatian serbian",
|
||||
"lang": "hr sr",
|
||||
"contentURL": "https://raw.githubusercontent.com/DandelionSprout/adfilt/master/SerboCroatianList.txt",
|
||||
"tags": "ads croatian serbian bosnian",
|
||||
"lang": "bs hr sr",
|
||||
"contentURL": [
|
||||
"https://raw.githubusercontent.com/DandelionSprout/adfilt/master/SerboCroatianList.txt",
|
||||
"https://cdn.jsdelivr.net/gh/DandelionSprout/adfilt@master/SerboCroatianList.txt",
|
||||
"https://cdn.statically.io/gl/DandelionSprout/adfilt/master/SerboCroatianList.txt"
|
||||
],
|
||||
"supportURL": "https://github.com/DandelionSprout/adfilt#readme"
|
||||
},
|
||||
"HUN-0": {
|
||||
@@ -617,7 +670,7 @@
|
||||
"title": "🇭🇺hu: hufilter",
|
||||
"tags": "ads hungarian",
|
||||
"lang": "hu",
|
||||
"contentURL": "https://raw.githubusercontent.com/hufilter/hufilter/master/hufilter-ublock.txt",
|
||||
"contentURL": "https://cdn.jsdelivr.net/gh/hufilter/hufilter@gh-pages/hufilter-ublock.txt",
|
||||
"supportURL": "https://github.com/hufilter/hufilter"
|
||||
},
|
||||
"IDN-0": {
|
||||
@@ -636,7 +689,7 @@
|
||||
"off": true,
|
||||
"title": "🇮🇳in 🇱🇰lk 🇳🇵np: IndianList",
|
||||
"tags": "ads assamese bengali gujarati hindi kannada malayalam marathi nepali punjabi sinhala tamil telugu",
|
||||
"lang": "as bn gu hi kn ml mr ne pa si ta te",
|
||||
"lang": "as bn gu hi kn ml mr ne pa sat si ta te",
|
||||
"contentURL": "https://easylist-downloads.adblockplus.org/indianlist.txt",
|
||||
"supportURL": "https://github.com/mediumkreation/IndianList"
|
||||
},
|
||||
@@ -664,8 +717,8 @@
|
||||
"title": "🇮🇸is: Icelandic ABP List",
|
||||
"tags": "ads icelandic",
|
||||
"lang": "is",
|
||||
"contentURL": "https://adblock.gardar.net/is.abp.txt",
|
||||
"supportURL": "https://adblock.gardar.net/"
|
||||
"contentURL": "https://raw.githubusercontent.com/brave/adblock-lists/master/custom/is.txt",
|
||||
"supportURL": "https://github.com/brave/adblock-lists/issues"
|
||||
},
|
||||
"ISR-0": {
|
||||
"content": "filters",
|
||||
@@ -683,7 +736,7 @@
|
||||
"off": true,
|
||||
"title": "🇮🇹it: EasyList Italy",
|
||||
"tags": "ads italian",
|
||||
"lang": "it lij",
|
||||
"lang": "fur it lij sc",
|
||||
"contentURL": "https://easylist-downloads.adblockplus.org/easylistitaly.txt",
|
||||
"supportURL": "https://forums.lanik.us/viewforum.php?f=96"
|
||||
},
|
||||
@@ -695,8 +748,7 @@
|
||||
"tags": "ads japanese 日本語",
|
||||
"lang": "ja",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/7.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
|
||||
"instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters"
|
||||
},
|
||||
"KOR-1": {
|
||||
"content": "filters",
|
||||
@@ -746,16 +798,12 @@
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "🇳🇱nl 🇧🇪be: EasyDutch",
|
||||
"title": "🇳🇱nl 🇧🇪be: AdGuard Dutch",
|
||||
"tags": "ads afrikaans be belgië frisian dutch flemish nederlands netherlands nl sr suriname za",
|
||||
"lang": "af fy nl",
|
||||
"contentURL": "https://easydutch-ubo.github.io/EasyDutch/EasyDutch.txt",
|
||||
"cdnURLs": [
|
||||
"https://easydutch-ubo.github.io/EasyDutch/EasyDutch.all.txt",
|
||||
"https://cdn.jsdelivr.net/gh/EasyDutch-uBO/EasyDutch@gh-pages/EasyDutch.all.txt",
|
||||
"https://cdn.statically.io/gh/EasyDutch-uBO/EasyDutch/gh-pages/EasyDutch.all.txt"
|
||||
],
|
||||
"supportURL": "https://github.com/EasyDutch-uBO/EasyDutch/"
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/8.txt",
|
||||
"cdnURLs": null,
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters"
|
||||
},
|
||||
"NOR-0": {
|
||||
"content": "filters",
|
||||
@@ -765,9 +813,7 @@
|
||||
"tags": "ads norwegian danish icelandic",
|
||||
"lang": "nb nn no da is",
|
||||
"contentURL": [
|
||||
"https://raw.githubusercontent.com/DandelionSprout/adfilt/master/NorwegianList.txt"
|
||||
],
|
||||
"cdnURLs": [
|
||||
"https://raw.githubusercontent.com/DandelionSprout/adfilt/master/NorwegianList.txt",
|
||||
"https://cdn.jsdelivr.net/gh/DandelionSprout/adfilt@master/NorwegianList.txt",
|
||||
"https://cdn.statically.io/gl/DandelionSprout/adfilt/master/NorwegianList.txt"
|
||||
],
|
||||
@@ -780,21 +826,20 @@
|
||||
"off": true,
|
||||
"title": "🇵🇱pl: Oficjalne Polskie Filtry do uBlocka Origin",
|
||||
"tags": "ads polish polski",
|
||||
"lang": "szl pl",
|
||||
"lang": "szl pl _",
|
||||
"contentURL": "https://raw.githubusercontent.com/MajkiIT/polish-ads-filter/master/polish-adblock-filters/adblock.txt",
|
||||
"supportURL": "https://github.com/MajkiIT/polish-ads-filter/issues",
|
||||
"instructionURL": "https://github.com/MajkiIT/polish-ads-filter#polish-filters-for-adblock-ublock-origin--adguard"
|
||||
"supportURL": "https://github.com/MajkiIT/polish-ads-filter"
|
||||
},
|
||||
"POL-2": {
|
||||
"POL-3": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"parent": "🇵🇱pl: Oficjalne Polskie Filtry",
|
||||
"off": true,
|
||||
"title": "🇵🇱pl: Oficjalne polskie filtry przeciwko alertom o Adblocku",
|
||||
"tags": "ads polish polski",
|
||||
"title": "🇵🇱pl: CERT.PL's Warning List",
|
||||
"tags": "malware polish polski",
|
||||
"lang": "szl pl",
|
||||
"contentURL": "https://raw.githubusercontent.com/olegwukr/polish-privacy-filters/master/anti-adblock.txt",
|
||||
"supportURL": "https://github.com/olegwukr/polish-privacy-filters/issues"
|
||||
"contentURL": "https://hole.cert.pl/domains/v2/domains_ublock.txt",
|
||||
"supportURL": "https://cert.pl/lista-ostrzezen/"
|
||||
},
|
||||
"ROU-1": {
|
||||
"content": "filters",
|
||||
@@ -811,10 +856,11 @@
|
||||
"RUS-0": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"parent": "🇷🇺ru 🇺🇦ua 🇺🇿uz 🇰🇿kz: RU AdList",
|
||||
"off": true,
|
||||
"title": "🇷🇺ru 🇺🇦ua 🇺🇿uz 🇰🇿kz: RU AdList",
|
||||
"tags": "ads belarusian беларуская kazakh tatar russian русский ukrainian українська uzbek",
|
||||
"lang": "be kk tt ru uk uz",
|
||||
"tags": "ads belarusian беларуская kazakh tatar russian русский ukrainian українська uzbek uk",
|
||||
"lang": "be kk tt ru uz",
|
||||
"contentURL": "https://raw.githubusercontent.com/easylist/ruadlist/master/RuAdList-uBO.txt",
|
||||
"cdnURLs": [
|
||||
"https://cdn.jsdelivr.net/gh/dimisa-RUAdList/RUAdListCDN@main/lists/ruadlist.ubo.min.txt",
|
||||
@@ -824,6 +870,22 @@
|
||||
"supportURL": "https://forums.lanik.us/viewforum.php?f=102",
|
||||
"instructionURL": "https://forums.lanik.us/viewtopic.php?f=102&t=22512"
|
||||
},
|
||||
"RUS-1": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"parent": "🇷🇺ru 🇺🇦ua 🇺🇿uz 🇰🇿kz: RU AdList",
|
||||
"off": true,
|
||||
"title": "🇷🇺ru 🇺🇦ua 🇺🇿uz 🇰🇿kz: RU AdList: Counters",
|
||||
"tags": "ads belarusian беларуская kazakh tatar russian русский ukrainian українська uzbek be kk tt ru uk uz",
|
||||
"contentURL": "https://raw.githubusercontent.com/easylist/ruadlist/master/cntblock.txt",
|
||||
"cdnURLs": [
|
||||
"https://cdn.jsdelivr.net/gh/easylist/ruadlist@master/cntblock.txt",
|
||||
"https://cdn.statically.io/gh/easylist/ruadlist/master/cntblock.txt",
|
||||
"https://raw.githubusercontent.com/easylist/ruadlist/master/cntblock.txt"
|
||||
],
|
||||
"supportURL": "https://forums.lanik.us/viewforum.php?f=102",
|
||||
"instructionURL": "https://forums.lanik.us/viewtopic.php?f=102&t=22512"
|
||||
},
|
||||
"spa-0": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
@@ -842,8 +904,7 @@
|
||||
"tags": "ads aragonese basque catalan spanish español galician guarani portuguese português",
|
||||
"lang": "an ast ca cak es eu gl gn trs pt quz",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/9.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
|
||||
"instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters"
|
||||
},
|
||||
"SVN-0": {
|
||||
"content": "filters",
|
||||
@@ -887,8 +948,17 @@
|
||||
"tags": "ads turkish türkçe",
|
||||
"lang": "tr",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/13.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
|
||||
"instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters"
|
||||
},
|
||||
"UKR-0": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "🇺🇦ua: AdGuard Ukrainian",
|
||||
"tags": "ads ukraine україна",
|
||||
"lang": "uk",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/23.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters"
|
||||
},
|
||||
"VIE-1": {
|
||||
"content": "filters",
|
||||
|
@@ -52,6 +52,10 @@
|
||||
"https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/filters.min.txt",
|
||||
"https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/filters.min.txt"
|
||||
],
|
||||
"patchURLs": [
|
||||
"https://ublockorigin.github.io/uAssetsCDN/filters/",
|
||||
"https://ublockorigin.pages.dev/filters/"
|
||||
],
|
||||
"supportURL": "https://github.com/uBlockOrigin/uAssets"
|
||||
},
|
||||
"ublock-badware": {
|
||||
@@ -71,6 +75,10 @@
|
||||
"https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/badware.min.txt",
|
||||
"https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/badware.min.txt"
|
||||
],
|
||||
"patchURLs": [
|
||||
"https://ublockorigin.github.io/uAssetsCDN/filters/",
|
||||
"https://ublockorigin.pages.dev/filters/"
|
||||
],
|
||||
"supportURL": "https://github.com/uBlockOrigin/uAssets",
|
||||
"instructionURL": "https://github.com/gorhill/uBlock/wiki/Badware-risks"
|
||||
},
|
||||
@@ -91,6 +99,10 @@
|
||||
"https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/privacy.min.txt",
|
||||
"https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/privacy.min.txt"
|
||||
],
|
||||
"patchURLs": [
|
||||
"https://ublockorigin.github.io/uAssetsCDN/filters/",
|
||||
"https://ublockorigin.pages.dev/filters/"
|
||||
],
|
||||
"supportURL": "https://github.com/uBlockOrigin/uAssets"
|
||||
},
|
||||
"ublock-unbreak": {
|
||||
@@ -109,6 +121,10 @@
|
||||
"https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/unbreak.min.txt",
|
||||
"https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/unbreak.min.txt"
|
||||
],
|
||||
"patchURLs": [
|
||||
"https://ublockorigin.github.io/uAssetsCDN/filters/",
|
||||
"https://ublockorigin.pages.dev/filters/"
|
||||
],
|
||||
"supportURL": "https://github.com/uBlockOrigin/uAssets"
|
||||
},
|
||||
"ublock-quick-fixes": {
|
||||
@@ -127,6 +143,28 @@
|
||||
"https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/quick-fixes.min.txt",
|
||||
"https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/quick-fixes.min.txt"
|
||||
],
|
||||
"patchURLs": [
|
||||
"https://ublockorigin.github.io/uAssetsCDN/filters/",
|
||||
"https://ublockorigin.pages.dev/filters/"
|
||||
],
|
||||
"supportURL": "https://github.com/uBlockOrigin/uAssets"
|
||||
},
|
||||
"ublock-experimental": {
|
||||
"content": "filters",
|
||||
"group": "default",
|
||||
"off": true,
|
||||
"title": "uBlock filters – Experimental",
|
||||
"contentURL": "https://ublockorigin.github.io/uAssets/filters/experimental.txt",
|
||||
"cdnURLs": [
|
||||
"https://ublockorigin.github.io/uAssetsCDN/filters/experimental.min.txt",
|
||||
"https://ublockorigin.pages.dev/filters/experimental.min.txt",
|
||||
"https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/experimental.min.txt",
|
||||
"https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/experimental.min.txt"
|
||||
],
|
||||
"patchURLs": [
|
||||
"https://ublockorigin.github.io/uAssetsCDN/filters/",
|
||||
"https://ublockorigin.pages.dev/filters/"
|
||||
],
|
||||
"supportURL": "https://github.com/uBlockOrigin/uAssets"
|
||||
},
|
||||
"adguard-generic": {
|
||||
@@ -136,8 +174,7 @@
|
||||
"title": "AdGuard – Ads",
|
||||
"tags": "ads",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/2_without_easylist.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
|
||||
"instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters"
|
||||
},
|
||||
"adguard-mobile": {
|
||||
"content": "filters",
|
||||
@@ -147,14 +184,14 @@
|
||||
"tags": "ads mobile",
|
||||
"ua": "mobile",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/11.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
|
||||
"instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters"
|
||||
},
|
||||
"easylist": {
|
||||
"content": "filters",
|
||||
"group": "ads",
|
||||
"title": "EasyList",
|
||||
"tags": "ads",
|
||||
"preferred": true,
|
||||
"contentURL": [
|
||||
"https://ublockorigin.github.io/uAssets/thirdparties/easylist.txt",
|
||||
"assets/thirdparties/easylist/easylist.txt"
|
||||
@@ -164,6 +201,10 @@
|
||||
"https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist.txt",
|
||||
"https://ublockorigin.pages.dev/thirdparties/easylist.txt"
|
||||
],
|
||||
"patchURLs": [
|
||||
"https://ublockorigin.github.io/uAssetsCDN/filters/",
|
||||
"https://ublockorigin.pages.dev/filters/"
|
||||
],
|
||||
"supportURL": "https://easylist.to/"
|
||||
},
|
||||
"adguard-spyware-url": {
|
||||
@@ -173,17 +214,7 @@
|
||||
"title": "AdGuard URL Tracking Protection",
|
||||
"tags": "privacy",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/17.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
|
||||
"instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
|
||||
},
|
||||
"adguard-spyware": {
|
||||
"content": "filters",
|
||||
"group": "privacy",
|
||||
"off": true,
|
||||
"title": "AdGuard Tracking Protection",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/3.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
|
||||
"instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters"
|
||||
},
|
||||
"block-lan": {
|
||||
"content": "filters",
|
||||
@@ -205,6 +236,7 @@
|
||||
"group": "privacy",
|
||||
"title": "EasyPrivacy",
|
||||
"tags": "privacy",
|
||||
"preferred": true,
|
||||
"contentURL": [
|
||||
"https://ublockorigin.github.io/uAssets/thirdparties/easyprivacy.txt",
|
||||
"assets/thirdparties/easylist/easyprivacy.txt"
|
||||
@@ -214,6 +246,10 @@
|
||||
"https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easyprivacy.txt",
|
||||
"https://ublockorigin.pages.dev/thirdparties/easyprivacy.txt"
|
||||
],
|
||||
"patchURLs": [
|
||||
"https://ublockorigin.github.io/uAssetsCDN/filters/",
|
||||
"https://ublockorigin.pages.dev/filters/"
|
||||
],
|
||||
"supportURL": "https://easylist.to/"
|
||||
},
|
||||
"urlhaus-1": {
|
||||
@@ -244,32 +280,22 @@
|
||||
],
|
||||
"supportURL": "https://gitlab.com/malware-filter/phishing-filter#phishing-url-blocklist"
|
||||
},
|
||||
"adguard-social": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"parent": "AdGuard – Annoyances",
|
||||
"off": true,
|
||||
"title": "AdGuard – Social Media",
|
||||
"tags": "annoyances social",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/4.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
|
||||
"instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
|
||||
},
|
||||
"adguard-cookies": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"parent": "AdGuard – Annoyances|AdGuard/uBO – Cookie Notices",
|
||||
"group2": "cookies",
|
||||
"parent": "AdGuard/uBO – Cookie Notices",
|
||||
"off": true,
|
||||
"title": "AdGuard – Cookie Notices",
|
||||
"tags": "annoyances cookies",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/18.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
|
||||
"instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters"
|
||||
},
|
||||
"ublock-cookies-adguard": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"parent": "AdGuard – Annoyances|AdGuard/uBO – Cookie Notices",
|
||||
"group2": "cookies",
|
||||
"parent": "AdGuard/uBO – Cookie Notices",
|
||||
"off": true,
|
||||
"title": "uBlock filters – Cookie Notices",
|
||||
"tags": "annoyances cookies",
|
||||
@@ -282,98 +308,15 @@
|
||||
],
|
||||
"supportURL": "https://github.com/uBlockOrigin/uAssets"
|
||||
},
|
||||
"adguard-popup-overlays": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"parent": "AdGuard – Annoyances",
|
||||
"off": true,
|
||||
"title": "AdGuard – Popup Overlays",
|
||||
"tags": "annoyances",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/19.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
|
||||
"instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
|
||||
},
|
||||
"adguard-mobile-app-banners": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"parent": "AdGuard – Annoyances",
|
||||
"off": true,
|
||||
"title": "AdGuard – Mobile App Banners",
|
||||
"tags": "annoyances mobile",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/20.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
|
||||
"instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
|
||||
},
|
||||
"adguard-other-annoyances": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"parent": "AdGuard – Annoyances",
|
||||
"off": true,
|
||||
"title": "AdGuard – Other Annoyances",
|
||||
"tags": "annoyances",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/21.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
|
||||
"instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
|
||||
},
|
||||
"adguard-widgets": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"parent": "AdGuard – Annoyances",
|
||||
"off": true,
|
||||
"title": "AdGuard – Widgets",
|
||||
"tags": "annoyances",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/22.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
|
||||
"instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
|
||||
},
|
||||
"fanboy-thirdparty_social": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"off": true,
|
||||
"title": "Fanboy – Anti-Facebook",
|
||||
"tags": "privacy",
|
||||
"contentURL": "https://secure.fanboy.co.nz/fanboy-antifacebook.txt",
|
||||
"supportURL": "https://github.com/ryanbr/fanboy-adblock/issues"
|
||||
},
|
||||
"easylist-annoyances": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"parent": "EasyList – Annoyances",
|
||||
"off": true,
|
||||
"title": "EasyList – Other Annoyances",
|
||||
"tags": "annoyances",
|
||||
"contentURL": "https://ublockorigin.github.io/uAssets/thirdparties/easylist-annoyances.txt",
|
||||
"cdnURLs": [
|
||||
"https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-annoyances.txt",
|
||||
"https://ublockorigin.pages.dev/thirdparties/easylist-annoyances.txt",
|
||||
"https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-annoyances.txt",
|
||||
"https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-annoyances.txt"
|
||||
],
|
||||
"supportURL": "https://github.com/easylist/easylist#fanboy-lists"
|
||||
},
|
||||
"easylist-chat": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"parent": "EasyList – Annoyances",
|
||||
"off": true,
|
||||
"title": "EasyList – Chat Widgets",
|
||||
"tags": "annoyances",
|
||||
"contentURL": "https://ublockorigin.github.io/uAssets/thirdparties/easylist-chat.txt",
|
||||
"cdnURLs": [
|
||||
"https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-chat.txt",
|
||||
"https://ublockorigin.pages.dev/thirdparties/easylist-chat.txt",
|
||||
"https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-chat.txt",
|
||||
"https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-chat.txt"
|
||||
],
|
||||
"supportURL": "https://github.com/easylist/easylist#fanboy-lists"
|
||||
},
|
||||
"fanboy-cookiemonster": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"parent": "EasyList – Annoyances|EasyList/uBO – Cookie Notices",
|
||||
"group2": "cookies",
|
||||
"parent": "EasyList/uBO – Cookie Notices",
|
||||
"off": true,
|
||||
"title": "EasyList – Cookie Notices",
|
||||
"tags": "annoyances cookies",
|
||||
"preferred": true,
|
||||
"contentURL": [
|
||||
"https://ublockorigin.github.io/uAssets/thirdparties/easylist-cookies.txt",
|
||||
"https://secure.fanboy.co.nz/fanboy-cookiemonster_ubo.txt"
|
||||
@@ -390,10 +333,12 @@
|
||||
"ublock-cookies-easylist": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"parent": "EasyList – Annoyances|EasyList/uBO – Cookie Notices",
|
||||
"group2": "cookies",
|
||||
"parent": "EasyList/uBO – Cookie Notices",
|
||||
"off": true,
|
||||
"title": "uBlock filters – Cookie Notices",
|
||||
"tags": "annoyances cookies",
|
||||
"preferred": true,
|
||||
"contentURL": "https://ublockorigin.github.io/uAssets/filters/annoyances-cookies.txt",
|
||||
"cdnURLs": [
|
||||
"https://ublockorigin.github.io/uAssetsCDN/filters/annoyances-cookies.txt",
|
||||
@@ -403,6 +348,123 @@
|
||||
],
|
||||
"supportURL": "https://github.com/uBlockOrigin/uAssets"
|
||||
},
|
||||
"adguard-social": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"group2": "social",
|
||||
"parent": null,
|
||||
"off": true,
|
||||
"title": "AdGuard – Social Widgets",
|
||||
"tags": "annoyances social",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/4.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters"
|
||||
},
|
||||
"fanboy-social": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"group2": "social",
|
||||
"parent": null,
|
||||
"off": true,
|
||||
"title": "EasyList – Social Widgets",
|
||||
"tags": "annoyances social",
|
||||
"preferred": true,
|
||||
"contentURL": [
|
||||
"https://ublockorigin.github.io/uAssets/thirdparties/easylist-social.txt",
|
||||
"https://secure.fanboy.co.nz/fanboy-social_ubo.txt"
|
||||
],
|
||||
"cdnURLs": [
|
||||
"https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-social.txt",
|
||||
"https://ublockorigin.pages.dev/thirdparties/easylist-social.txt",
|
||||
"https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-social.txt",
|
||||
"https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-social.txt",
|
||||
"https://secure.fanboy.co.nz/fanboy-social_ubo.txt"
|
||||
],
|
||||
"supportURL": "https://easylist.to/"
|
||||
},
|
||||
"fanboy-thirdparty_social": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"group2": "social",
|
||||
"off": true,
|
||||
"title": "Fanboy – Anti-Facebook",
|
||||
"tags": "privacy",
|
||||
"contentURL": "https://secure.fanboy.co.nz/fanboy-antifacebook.txt",
|
||||
"supportURL": "https://github.com/ryanbr/fanboy-adblock/issues"
|
||||
},
|
||||
"adguard-popup-overlays": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"parent": "AdGuard – Annoyances",
|
||||
"off": true,
|
||||
"title": "AdGuard – Popup Overlays",
|
||||
"tags": "annoyances",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/19.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters"
|
||||
},
|
||||
"adguard-mobile-app-banners": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"parent": "AdGuard – Annoyances",
|
||||
"off": true,
|
||||
"title": "AdGuard – Mobile App Banners",
|
||||
"tags": "annoyances mobile",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/20.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters"
|
||||
},
|
||||
"adguard-other-annoyances": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"parent": "AdGuard – Annoyances",
|
||||
"off": true,
|
||||
"title": "AdGuard – Other Annoyances",
|
||||
"tags": "annoyances",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/21.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters"
|
||||
},
|
||||
"adguard-widgets": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"parent": "AdGuard – Annoyances",
|
||||
"off": true,
|
||||
"title": "AdGuard – Widgets",
|
||||
"tags": "annoyances",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/22.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters"
|
||||
},
|
||||
"easylist-annoyances": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"parent": "EasyList – Annoyances",
|
||||
"off": true,
|
||||
"title": "EasyList – Other Annoyances",
|
||||
"tags": "annoyances",
|
||||
"preferred": true,
|
||||
"contentURL": "https://ublockorigin.github.io/uAssets/thirdparties/easylist-annoyances.txt",
|
||||
"cdnURLs": [
|
||||
"https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-annoyances.txt",
|
||||
"https://ublockorigin.pages.dev/thirdparties/easylist-annoyances.txt",
|
||||
"https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-annoyances.txt",
|
||||
"https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-annoyances.txt"
|
||||
],
|
||||
"supportURL": "https://github.com/easylist/easylist#fanboy-lists"
|
||||
},
|
||||
"easylist-chat": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"parent": "EasyList – Annoyances",
|
||||
"off": true,
|
||||
"title": "EasyList – Chat Widgets",
|
||||
"tags": "annoyances",
|
||||
"preferred": true,
|
||||
"contentURL": "https://ublockorigin.github.io/uAssets/thirdparties/easylist-chat.txt",
|
||||
"cdnURLs": [
|
||||
"https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-chat.txt",
|
||||
"https://ublockorigin.pages.dev/thirdparties/easylist-chat.txt",
|
||||
"https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-chat.txt",
|
||||
"https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-chat.txt"
|
||||
],
|
||||
"supportURL": "https://github.com/easylist/easylist#fanboy-lists"
|
||||
},
|
||||
"easylist-newsletters": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
@@ -410,6 +472,7 @@
|
||||
"off": true,
|
||||
"title": "EasyList – Newsletter Notices",
|
||||
"tags": "annoyances",
|
||||
"preferred": true,
|
||||
"contentURL": [
|
||||
"https://ublockorigin.github.io/uAssets/thirdparties/easylist-newsletters.txt"
|
||||
],
|
||||
@@ -428,6 +491,7 @@
|
||||
"off": true,
|
||||
"title": "EasyList – Notifications",
|
||||
"tags": "annoyances",
|
||||
"preferred": true,
|
||||
"contentURL": [
|
||||
"https://ublockorigin.github.io/uAssets/thirdparties/easylist-notifications.txt"
|
||||
],
|
||||
@@ -439,26 +503,6 @@
|
||||
],
|
||||
"supportURL": "https://easylist.to/"
|
||||
},
|
||||
"fanboy-social": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
"parent": "EasyList – Annoyances",
|
||||
"off": true,
|
||||
"title": "EasyList – Social Widgets",
|
||||
"tags": "annoyances social",
|
||||
"contentURL": [
|
||||
"https://ublockorigin.github.io/uAssets/thirdparties/easylist-social.txt",
|
||||
"https://secure.fanboy.co.nz/fanboy-social_ubo.txt"
|
||||
],
|
||||
"cdnURLs": [
|
||||
"https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-social.txt",
|
||||
"https://ublockorigin.pages.dev/thirdparties/easylist-social.txt",
|
||||
"https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-social.txt",
|
||||
"https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-social.txt",
|
||||
"https://secure.fanboy.co.nz/fanboy-social_ubo.txt"
|
||||
],
|
||||
"supportURL": "https://easylist.to/"
|
||||
},
|
||||
"ublock-annoyances": {
|
||||
"content": "filters",
|
||||
"group": "annoyances",
|
||||
@@ -472,6 +516,10 @@
|
||||
"https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/annoyances.min.txt",
|
||||
"https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/annoyances.min.txt"
|
||||
],
|
||||
"patchURLs": [
|
||||
"https://ublockorigin.github.io/uAssetsCDN/filters/",
|
||||
"https://ublockorigin.pages.dev/filters/"
|
||||
],
|
||||
"supportURL": "https://github.com/uBlockOrigin/uAssets"
|
||||
},
|
||||
"dpollock-0": {
|
||||
@@ -490,6 +538,7 @@
|
||||
"updateAfter": 13,
|
||||
"title": "Peter Lowe’s Ad and tracking server list",
|
||||
"tags": "ads privacy security",
|
||||
"preferred": true,
|
||||
"contentURL": [
|
||||
"https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=1&mimetype=plaintext",
|
||||
"assets/thirdparties/pgl.yoyo.org/as/serverlist.txt",
|
||||
@@ -513,7 +562,7 @@
|
||||
"off": true,
|
||||
"title": "🇪🇬eg 🇸🇦sa 🇲🇦ma 🇩🇿dz: Liste AR",
|
||||
"tags": "ads arabic اَلْعَرَبِيَّةُ",
|
||||
"lang": "ar",
|
||||
"lang": "ar kab",
|
||||
"contentURL": "https://easylist-downloads.adblockplus.org/Liste_AR.txt",
|
||||
"supportURL": "https://forums.lanik.us/viewforum.php?f=98"
|
||||
},
|
||||
@@ -567,8 +616,8 @@
|
||||
"title": "🇪🇪ee: Eesti saitidele kohandatud filter",
|
||||
"tags": "ads estonian",
|
||||
"lang": "et",
|
||||
"contentURL": "https://adblock.ee/list.php",
|
||||
"supportURL": "https://adblock.ee/"
|
||||
"contentURL": "https://adblock.ee/list.txt",
|
||||
"supportURL": "https://adblock.ee"
|
||||
},
|
||||
"FIN-0": {
|
||||
"content": "filters",
|
||||
@@ -586,7 +635,7 @@
|
||||
"off": true,
|
||||
"title": "🇫🇷fr 🇨🇦ca: AdGuard Français",
|
||||
"tags": "ads french",
|
||||
"lang": "ar br ff fr lb oc son",
|
||||
"lang": "ar br ff fr kab lb oc son",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/16.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters"
|
||||
},
|
||||
@@ -605,9 +654,13 @@
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "🇭🇷hr 🇷🇸rs: Dandelion Sprout's Serbo-Croatian filters",
|
||||
"tags": "ads croatian serbian",
|
||||
"lang": "hr sr",
|
||||
"contentURL": "https://raw.githubusercontent.com/DandelionSprout/adfilt/master/SerboCroatianList.txt",
|
||||
"tags": "ads croatian serbian bosnian",
|
||||
"lang": "bs hr sr",
|
||||
"contentURL": [
|
||||
"https://raw.githubusercontent.com/DandelionSprout/adfilt/master/SerboCroatianList.txt",
|
||||
"https://cdn.jsdelivr.net/gh/DandelionSprout/adfilt@master/SerboCroatianList.txt",
|
||||
"https://cdn.statically.io/gl/DandelionSprout/adfilt/master/SerboCroatianList.txt"
|
||||
],
|
||||
"supportURL": "https://github.com/DandelionSprout/adfilt#readme"
|
||||
},
|
||||
"HUN-0": {
|
||||
@@ -617,7 +670,7 @@
|
||||
"title": "🇭🇺hu: hufilter",
|
||||
"tags": "ads hungarian",
|
||||
"lang": "hu",
|
||||
"contentURL": "https://raw.githubusercontent.com/hufilter/hufilter/master/hufilter-ublock.txt",
|
||||
"contentURL": "https://cdn.jsdelivr.net/gh/hufilter/hufilter@gh-pages/hufilter-ublock.txt",
|
||||
"supportURL": "https://github.com/hufilter/hufilter"
|
||||
},
|
||||
"IDN-0": {
|
||||
@@ -636,7 +689,7 @@
|
||||
"off": true,
|
||||
"title": "🇮🇳in 🇱🇰lk 🇳🇵np: IndianList",
|
||||
"tags": "ads assamese bengali gujarati hindi kannada malayalam marathi nepali punjabi sinhala tamil telugu",
|
||||
"lang": "as bn gu hi kn ml mr ne pa si ta te",
|
||||
"lang": "as bn gu hi kn ml mr ne pa sat si ta te",
|
||||
"contentURL": "https://easylist-downloads.adblockplus.org/indianlist.txt",
|
||||
"supportURL": "https://github.com/mediumkreation/IndianList"
|
||||
},
|
||||
@@ -664,8 +717,8 @@
|
||||
"title": "🇮🇸is: Icelandic ABP List",
|
||||
"tags": "ads icelandic",
|
||||
"lang": "is",
|
||||
"contentURL": "https://adblock.gardar.net/is.abp.txt",
|
||||
"supportURL": "https://adblock.gardar.net/"
|
||||
"contentURL": "https://raw.githubusercontent.com/brave/adblock-lists/master/custom/is.txt",
|
||||
"supportURL": "https://github.com/brave/adblock-lists/issues"
|
||||
},
|
||||
"ISR-0": {
|
||||
"content": "filters",
|
||||
@@ -683,7 +736,7 @@
|
||||
"off": true,
|
||||
"title": "🇮🇹it: EasyList Italy",
|
||||
"tags": "ads italian",
|
||||
"lang": "it lij",
|
||||
"lang": "fur it lij sc",
|
||||
"contentURL": "https://easylist-downloads.adblockplus.org/easylistitaly.txt",
|
||||
"supportURL": "https://forums.lanik.us/viewforum.php?f=96"
|
||||
},
|
||||
@@ -695,8 +748,7 @@
|
||||
"tags": "ads japanese 日本語",
|
||||
"lang": "ja",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/7.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
|
||||
"instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters"
|
||||
},
|
||||
"KOR-1": {
|
||||
"content": "filters",
|
||||
@@ -746,16 +798,12 @@
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "🇳🇱nl 🇧🇪be: EasyDutch",
|
||||
"title": "🇳🇱nl 🇧🇪be: AdGuard Dutch",
|
||||
"tags": "ads afrikaans be belgië frisian dutch flemish nederlands netherlands nl sr suriname za",
|
||||
"lang": "af fy nl",
|
||||
"contentURL": "https://easydutch-ubo.github.io/EasyDutch/EasyDutch.txt",
|
||||
"cdnURLs": [
|
||||
"https://easydutch-ubo.github.io/EasyDutch/EasyDutch.all.txt",
|
||||
"https://cdn.jsdelivr.net/gh/EasyDutch-uBO/EasyDutch@gh-pages/EasyDutch.all.txt",
|
||||
"https://cdn.statically.io/gh/EasyDutch-uBO/EasyDutch/gh-pages/EasyDutch.all.txt"
|
||||
],
|
||||
"supportURL": "https://github.com/EasyDutch-uBO/EasyDutch/"
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/8.txt",
|
||||
"cdnURLs": null,
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters"
|
||||
},
|
||||
"NOR-0": {
|
||||
"content": "filters",
|
||||
@@ -765,9 +813,7 @@
|
||||
"tags": "ads norwegian danish icelandic",
|
||||
"lang": "nb nn no da is",
|
||||
"contentURL": [
|
||||
"https://raw.githubusercontent.com/DandelionSprout/adfilt/master/NorwegianList.txt"
|
||||
],
|
||||
"cdnURLs": [
|
||||
"https://raw.githubusercontent.com/DandelionSprout/adfilt/master/NorwegianList.txt",
|
||||
"https://cdn.jsdelivr.net/gh/DandelionSprout/adfilt@master/NorwegianList.txt",
|
||||
"https://cdn.statically.io/gl/DandelionSprout/adfilt/master/NorwegianList.txt"
|
||||
],
|
||||
@@ -780,21 +826,20 @@
|
||||
"off": true,
|
||||
"title": "🇵🇱pl: Oficjalne Polskie Filtry do uBlocka Origin",
|
||||
"tags": "ads polish polski",
|
||||
"lang": "szl pl",
|
||||
"lang": "szl pl _",
|
||||
"contentURL": "https://raw.githubusercontent.com/MajkiIT/polish-ads-filter/master/polish-adblock-filters/adblock.txt",
|
||||
"supportURL": "https://github.com/MajkiIT/polish-ads-filter/issues",
|
||||
"instructionURL": "https://github.com/MajkiIT/polish-ads-filter#polish-filters-for-adblock-ublock-origin--adguard"
|
||||
"supportURL": "https://github.com/MajkiIT/polish-ads-filter"
|
||||
},
|
||||
"POL-2": {
|
||||
"POL-3": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"parent": "🇵🇱pl: Oficjalne Polskie Filtry",
|
||||
"off": true,
|
||||
"title": "🇵🇱pl: Oficjalne polskie filtry przeciwko alertom o Adblocku",
|
||||
"tags": "ads polish polski",
|
||||
"title": "🇵🇱pl: CERT.PL's Warning List",
|
||||
"tags": "malware polish polski",
|
||||
"lang": "szl pl",
|
||||
"contentURL": "https://raw.githubusercontent.com/olegwukr/polish-privacy-filters/master/anti-adblock.txt",
|
||||
"supportURL": "https://github.com/olegwukr/polish-privacy-filters/issues"
|
||||
"contentURL": "https://hole.cert.pl/domains/v2/domains_ublock.txt",
|
||||
"supportURL": "https://cert.pl/lista-ostrzezen/"
|
||||
},
|
||||
"ROU-1": {
|
||||
"content": "filters",
|
||||
@@ -811,10 +856,11 @@
|
||||
"RUS-0": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"parent": "🇷🇺ru 🇺🇦ua 🇺🇿uz 🇰🇿kz: RU AdList",
|
||||
"off": true,
|
||||
"title": "🇷🇺ru 🇺🇦ua 🇺🇿uz 🇰🇿kz: RU AdList",
|
||||
"tags": "ads belarusian беларуская kazakh tatar russian русский ukrainian українська uzbek",
|
||||
"lang": "be kk tt ru uk uz",
|
||||
"tags": "ads belarusian беларуская kazakh tatar russian русский ukrainian українська uzbek uk",
|
||||
"lang": "be kk tt ru uz",
|
||||
"contentURL": "https://raw.githubusercontent.com/easylist/ruadlist/master/RuAdList-uBO.txt",
|
||||
"cdnURLs": [
|
||||
"https://cdn.jsdelivr.net/gh/dimisa-RUAdList/RUAdListCDN@main/lists/ruadlist.ubo.min.txt",
|
||||
@@ -824,6 +870,22 @@
|
||||
"supportURL": "https://forums.lanik.us/viewforum.php?f=102",
|
||||
"instructionURL": "https://forums.lanik.us/viewtopic.php?f=102&t=22512"
|
||||
},
|
||||
"RUS-1": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"parent": "🇷🇺ru 🇺🇦ua 🇺🇿uz 🇰🇿kz: RU AdList",
|
||||
"off": true,
|
||||
"title": "🇷🇺ru 🇺🇦ua 🇺🇿uz 🇰🇿kz: RU AdList: Counters",
|
||||
"tags": "ads belarusian беларуская kazakh tatar russian русский ukrainian українська uzbek be kk tt ru uk uz",
|
||||
"contentURL": "https://raw.githubusercontent.com/easylist/ruadlist/master/cntblock.txt",
|
||||
"cdnURLs": [
|
||||
"https://cdn.jsdelivr.net/gh/easylist/ruadlist@master/cntblock.txt",
|
||||
"https://cdn.statically.io/gh/easylist/ruadlist/master/cntblock.txt",
|
||||
"https://raw.githubusercontent.com/easylist/ruadlist/master/cntblock.txt"
|
||||
],
|
||||
"supportURL": "https://forums.lanik.us/viewforum.php?f=102",
|
||||
"instructionURL": "https://forums.lanik.us/viewtopic.php?f=102&t=22512"
|
||||
},
|
||||
"spa-0": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
@@ -842,8 +904,7 @@
|
||||
"tags": "ads aragonese basque catalan spanish español galician guarani portuguese português",
|
||||
"lang": "an ast ca cak es eu gl gn trs pt quz",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/9.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
|
||||
"instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters"
|
||||
},
|
||||
"SVN-0": {
|
||||
"content": "filters",
|
||||
@@ -887,8 +948,17 @@
|
||||
"tags": "ads turkish türkçe",
|
||||
"lang": "tr",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/13.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
|
||||
"instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters"
|
||||
},
|
||||
"UKR-0": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "🇺🇦ua: AdGuard Ukrainian",
|
||||
"tags": "ads ukraine україна",
|
||||
"lang": "uk",
|
||||
"contentURL": "https://filters.adtidy.org/extension/ublock/filters/23.txt",
|
||||
"supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters"
|
||||
},
|
||||
"VIE-1": {
|
||||
"content": "filters",
|
||||
|
File diff suppressed because it is too large
Load Diff
140
dist/README.md
vendored
140
dist/README.md
vendored
@@ -1,81 +1,103 @@
|
||||
## INSTALL
|
||||
# INSTALL
|
||||
|
||||
### Chromium
|
||||
## Chromium
|
||||
|
||||
- Download and unzip `ublock0.chromium.zip` ([latest release desirable](https://github.com/gorhill/uBlock/releases)).
|
||||
- Rename the unzipped directory to `ublock`
|
||||
- When you later update manually, replace the **content** of the `ublock` folder with the **content** of the latest zipped version.
|
||||
- This will ensure that all the extension settings will be preserved
|
||||
- As long as the extension loads **from same folder path from which it was originally installed**, all your settings will be preserved.
|
||||
- Go to chromium/chrome *Extensions*.
|
||||
- Click to check *Developer mode*.
|
||||
- Click *Load unpacked extension...*.
|
||||
- In the file selector dialog:
|
||||
- Select the directory `ublock` which was created above.
|
||||
- Click *Open*.
|
||||
1. Download and unzip `ublock0.chromium.zip` ([latest release desirable](https://github.com/gorhill/uBlock/releases)).
|
||||
2. Rename the unzipped directory to `ublock`.
|
||||
- When you update manually, replace the **content** of the `ublock` folder with the **content** of the latest zipped version. This ensures all extension settings are preserved.
|
||||
- As long as the extension loads from the same folder path as it was originally installed, your settings will be kept.
|
||||
3. Open Chromium/Chrome and go to *Extensions*.
|
||||
4. Click to enable *Developer mode*.
|
||||
5. Click *Load unpacked extension...*.
|
||||
6. In the file selector dialog:
|
||||
- Select the `ublock` directory you created.
|
||||
- Click *Open*.
|
||||
|
||||
The extension will now be available in your chromium/chromium-based browser.
|
||||
The extension will now be available in your Chromium/Chromium-based browser.
|
||||
|
||||
Remember that you have to update manually also. For some users, updating manually is actually an advantage because:
|
||||
- You can update when **you** want
|
||||
- If ever a new version sucks, you can easily just re-install the previous one
|
||||
**Note:** You must update manually. For some users, manual updates are beneficial because:
|
||||
- You can update when **you** want.
|
||||
- If a new version is unsatisfactory, you can easily reinstall the previous one.
|
||||
|
||||
### Firefox
|
||||
## Firefox
|
||||
|
||||
Compatible with Firefox 52 and beyond.
|
||||
Compatible with Firefox 52 and beyond.
|
||||
|
||||
#### For stable release version
|
||||
### For Stable Release Version
|
||||
|
||||
This works only if you set `xpinstall.signatures.required` to `false` in `about:config`.<sup>[see "Add-on signing in Firefox"](https://support.mozilla.org/en-US/kb/add-on-signing-in-firefox)</sup>
|
||||
This method only works if you set `xpinstall.signatures.required` to `false` in `about:config`.<sup>[see "Add-on signing in Firefox"](https://support.mozilla.org/en-US/kb/add-on-signing-in-firefox)</sup>
|
||||
|
||||
- Download `ublock0.firefox.xpi` ([latest release desirable](https://github.com/gorhill/uBlock/releases)).
|
||||
- Right-click and choose _"Save As..."_.
|
||||
- Drag and drop the previously downloaded `ublock0.firefox.xpi` into Firefox
|
||||
1. Download `ublock0.firefox.xpi` ([latest release desirable](https://github.com/gorhill/uBlock/releases)).
|
||||
- Right-click and choose _"Save As..."_.
|
||||
2. Drag and drop the downloaded `ublock0.firefox.xpi` into Firefox.
|
||||
|
||||
#### For beta version
|
||||
### For Beta Version
|
||||
|
||||
- Click on `ublock0.firefox.signed.xpi` ([latest release desirable](https://github.com/gorhill/uBlock/releases)).
|
||||
|
||||
#### Location of uBO settings
|
||||
### Location of uBO Settings
|
||||
|
||||
On Linux, the settings are saved in a JSON file located at `~/.mozilla/firefox/[profile name]/browser-extension-data/uBlock0@raymondhill.net/storage.js`.
|
||||
On Linux, the settings are saved in a JSON file located at:
|
||||
```
|
||||
~/.mozilla/firefox/[profile name]/browser-extension-data/uBlock0@raymondhill.net/storage.js
|
||||
```
|
||||
When you uninstall the extension, Firefox deletes this file, and all your settings will be lost.
|
||||
|
||||
When you uninstall the extension, Firefox deletes that file, so all your settings are lost when you uninstall.
|
||||
### Firefox Legacy
|
||||
|
||||
### Firefox legacy
|
||||
Compatible with Firefox 24-56, [Pale Moon](https://www.palemoon.org/), and [SeaMonkey](https://www.seamonkey-project.org/).
|
||||
|
||||
Compatible with Firefox 24-56, [Pale Moon](https://www.palemoon.org/) and [SeaMonkey](http://www.seamonkey-project.org/).
|
||||
1. Download `ublock0.firefox-legacy.xpi` ([latest release desirable](https://github.com/gorhill/uBlock-for-firefox-legacy/releases)).
|
||||
- Right-click and select "Save Link As..."
|
||||
2. Drag and drop the downloaded `ublock0.firefox-legacy.xpi` into Firefox.
|
||||
|
||||
- Download `ublock0.firefox-legacy.xpi` ([latest release desirable](https://github.com/gorhill/uBlock-for-firefox-legacy/releases)).
|
||||
- Right-click and select "Save Link As..."
|
||||
- Drag and drop the previously downloaded `ublock0.firefox-legacy.xpi` into Firefox
|
||||
For Firefox 43 and beyond, you may need to toggle the setting `xpinstall.signatures.required` to `false` in `about:config`.<sup>[see "Add-on signing in Firefox"](https://support.mozilla.org/en-US/kb/add-on-signing-in-firefox)</sup>
|
||||
|
||||
With Firefox 43 and beyond, you may need to toggle the setting `xpinstall.signatures.required` to `false` in `about:config`.<sup>[see "Add-on signing in Firefox"](https://support.mozilla.org/en-US/kb/add-on-signing-in-firefox)</sup>
|
||||
Your uBlock Origin settings are preserved even after uninstalling the addon.
|
||||
|
||||
Your uBlock Origin settings are kept intact even after you uninstall the addon.
|
||||
- On Linux, settings are saved in a SQLite file located at:
|
||||
```
|
||||
~/.mozilla/firefox/[profile name]/extension-data/ublock0.sqlite
|
||||
```
|
||||
- On Windows, settings are saved in a SQLite file located at:
|
||||
```
|
||||
%APPDATA%\Mozilla\Firefox\Profiles\[profile name]\extension-data\ublock0.sqlite
|
||||
```
|
||||
|
||||
On Linux, the settings are saved in a SQlite file located at `~/.mozilla/firefox/[profile name]/extension-data/ublock0.sqlite`.
|
||||
## Build Instructions (for Developers)
|
||||
|
||||
On Windows, the settings are saved in a SQlite file located at `%APPDATA%\Mozilla\Firefox\Profiles\[profile name]\extension-data\ublock0.sqlite`.
|
||||
|
||||
### Build instructions (for developers)
|
||||
|
||||
- Clone [uBlock repo](https://github.com/gorhill/uBlock): `git clone https://github.com/gorhill/uBlock.git`
|
||||
- Set path to uBlock: `cd uBlock`
|
||||
- The official version of uBO is in the `master` branch
|
||||
- `git checkout master`
|
||||
- Build the plugin:
|
||||
- Chromium: `make chromium`
|
||||
- Firefox: `make firefox`
|
||||
- NPM package: `make npm`
|
||||
- Load the result of the build into your browser:
|
||||
- Chromium:
|
||||
- Navigate to `chrome://extensions/`
|
||||
- Check _"Developer mode"_
|
||||
- Click _"Load unpacked"_
|
||||
- Select `/uBlock/dist/build/uBlock0.chromium/`
|
||||
- Firefox:
|
||||
- Navigate to `about:debugging#/runtime/this-firefox`
|
||||
- Click _"Load Temporary Add-on..."_
|
||||
- Select `/uBlock/dist/build/uBlock0.firefox/`
|
||||
|
||||
1. Clone the [uBlock repository](https://github.com/gorhill/uBlock):
|
||||
```bash
|
||||
git clone https://github.com/gorhill/uBlock.git
|
||||
```
|
||||
2. Set the path to uBlock:
|
||||
```bash
|
||||
cd uBlock
|
||||
```
|
||||
3. The official version of uBO is in the `master` branch:
|
||||
```bash
|
||||
git checkout master
|
||||
```
|
||||
4. Build the plugin:
|
||||
- Chromium:
|
||||
```bash
|
||||
make chromium
|
||||
```
|
||||
- Firefox:
|
||||
```bash
|
||||
make firefox
|
||||
```
|
||||
- NPM package:
|
||||
```bash
|
||||
make npm
|
||||
```
|
||||
5. Load the result of the build into your browser:
|
||||
- **Chromium:**
|
||||
- Navigate to `chrome://extensions/`
|
||||
- Check _"Developer mode"_
|
||||
- Click _"Load unpacked"_
|
||||
- Select `/uBlock/dist/build/uBlock0.chromium/`
|
||||
- **Firefox:**
|
||||
- Navigate to `about:debugging#/runtime/this-firefox`
|
||||
- Click _"Load Temporary Add-on..."_
|
||||
- Select `/uBlock/dist/build/uBlock0.firefox/`
|
||||
|
190
dist/chromium/publish-beta.py
vendored
190
dist/chromium/publish-beta.py
vendored
@@ -1,190 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import datetime
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
import requests
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
import time
|
||||
import zipfile
|
||||
|
||||
from string import Template
|
||||
|
||||
# - Download target (raw) uBlock0.chromium.zip from GitHub
|
||||
# - This is referred to as "raw" package
|
||||
# - This will fail if not a dev build
|
||||
# - Upload uBlock0.chromium.zip to Chrome store
|
||||
# - Publish uBlock0.chromium.zip to Chrome store
|
||||
|
||||
# Find path to project root
|
||||
projdir = os.path.split(os.path.abspath(__file__))[0]
|
||||
while not os.path.isdir(os.path.join(projdir, '.git')):
|
||||
projdir = os.path.normpath(os.path.join(projdir, '..'))
|
||||
|
||||
# We need a version string to work with
|
||||
if len(sys.argv) >= 2 and sys.argv[1]:
|
||||
version = sys.argv[1]
|
||||
else:
|
||||
version = input('Github release version: ')
|
||||
version.strip()
|
||||
if not re.search('^\d+\.\d+\.\d+(b|rc)\d+$', version):
|
||||
print('Error: Invalid version string.')
|
||||
exit(1)
|
||||
|
||||
cs_extension_id = 'cgbcahbpdhpcegmbfconppldiemgcoii'
|
||||
tmpdir = tempfile.TemporaryDirectory()
|
||||
raw_zip_filename = 'uBlock0_' + version + '.chromium.zip'
|
||||
raw_zip_filepath = os.path.join(tmpdir.name, raw_zip_filename)
|
||||
github_owner = 'gorhill'
|
||||
github_repo = 'uBlock'
|
||||
|
||||
# Load/save auth secrets
|
||||
# The build directory is excluded from git
|
||||
ubo_secrets = dict()
|
||||
ubo_secrets_filename = os.path.join(projdir, 'dist', 'build', 'ubo_secrets')
|
||||
if os.path.isfile(ubo_secrets_filename):
|
||||
with open(ubo_secrets_filename) as f:
|
||||
ubo_secrets = json.load(f)
|
||||
|
||||
def input_secret(prompt, token):
|
||||
if token in ubo_secrets:
|
||||
prompt += ' ✔'
|
||||
prompt += ': '
|
||||
value = input(prompt).strip()
|
||||
if len(value) == 0:
|
||||
if token not in ubo_secrets:
|
||||
print('Token error:', token)
|
||||
exit(1)
|
||||
value = ubo_secrets[token]
|
||||
elif token not in ubo_secrets or value != ubo_secrets[token]:
|
||||
ubo_secrets[token] = value
|
||||
exists = os.path.isfile(ubo_secrets_filename)
|
||||
with open(ubo_secrets_filename, 'w') as f:
|
||||
json.dump(ubo_secrets, f, indent=2)
|
||||
if not exists:
|
||||
os.chmod(ubo_secrets_filename, 0o600)
|
||||
return value
|
||||
|
||||
|
||||
# GitHub API token
|
||||
github_token = input_secret('Github token', 'github_token')
|
||||
github_auth = 'token ' + github_token
|
||||
|
||||
#
|
||||
# Get metadata from GitHub about the release
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#get-a-single-release
|
||||
print('Downloading release info from GitHub...')
|
||||
release_info_url = 'https://api.github.com/repos/{0}/{1}/releases/tags/{2}'.format(github_owner, github_repo, version)
|
||||
headers = { 'Authorization': github_auth, }
|
||||
response = requests.get(release_info_url, headers=headers)
|
||||
if response.status_code != 200:
|
||||
print('Error: Release not found: {0}'.format(response.status_code))
|
||||
exit(1)
|
||||
release_info = response.json()
|
||||
|
||||
#
|
||||
# Extract URL to raw package from metadata
|
||||
#
|
||||
|
||||
# Find url for uBlock0.chromium.zip
|
||||
raw_zip_url = ''
|
||||
for asset in release_info['assets']:
|
||||
if asset['name'] == raw_zip_filename:
|
||||
raw_zip_url = asset['url']
|
||||
if len(raw_zip_url) == 0:
|
||||
print('Error: Release asset URL not found')
|
||||
exit(1)
|
||||
|
||||
#
|
||||
# Download raw package from GitHub
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#get-a-single-release-asset
|
||||
print('Downloading raw zip package from GitHub...')
|
||||
headers = {
|
||||
'Authorization': github_auth,
|
||||
'Accept': 'application/octet-stream',
|
||||
}
|
||||
response = requests.get(raw_zip_url, headers=headers)
|
||||
# Redirections are transparently handled:
|
||||
# http://docs.python-requests.org/en/master/user/quickstart/#redirection-and-history
|
||||
if response.status_code != 200:
|
||||
print('Error: Downloading raw package failed -- server error {0}'.format(response.status_code))
|
||||
exit(1)
|
||||
with open(raw_zip_filepath, 'wb') as f:
|
||||
f.write(response.content)
|
||||
print('Downloaded raw package saved as {0}'.format(raw_zip_filepath))
|
||||
|
||||
#
|
||||
# Upload to Chrome store
|
||||
#
|
||||
|
||||
# Auth tokens
|
||||
cs_id = input_secret('Chrome store id', 'cs_id')
|
||||
cs_secret = input_secret('Chrome store secret', 'cs_secret')
|
||||
cs_refresh = input_secret('Chrome store refresh token', 'cs_refresh')
|
||||
|
||||
print('Uploading to Chrome store...')
|
||||
with open(raw_zip_filepath, 'rb') as f:
|
||||
print('Generating access token...')
|
||||
auth_url = 'https://accounts.google.com/o/oauth2/token'
|
||||
auth_payload = {
|
||||
'client_id': cs_id,
|
||||
'client_secret': cs_secret,
|
||||
'grant_type': 'refresh_token',
|
||||
'refresh_token': cs_refresh,
|
||||
}
|
||||
auth_response = requests.post(auth_url, data=auth_payload)
|
||||
if auth_response.status_code != 200:
|
||||
print('Error: Auth failed -- server error {0}'.format(auth_response.status_code))
|
||||
print(auth_response.text)
|
||||
exit(1)
|
||||
response_dict = auth_response.json()
|
||||
if 'access_token' not in response_dict:
|
||||
print('Error: Auth failed -- no access token')
|
||||
exit(1)
|
||||
# Prepare access token
|
||||
cs_auth = 'Bearer ' + response_dict['access_token']
|
||||
headers = {
|
||||
'Authorization': cs_auth,
|
||||
'x-goog-api-version': '2',
|
||||
}
|
||||
# Upload
|
||||
print('Uploading package...')
|
||||
upload_url = 'https://www.googleapis.com/upload/chromewebstore/v1.1/items/{0}'.format(cs_extension_id)
|
||||
upload_response = requests.put(upload_url, headers=headers, data=f)
|
||||
f.close()
|
||||
if upload_response.status_code != 200:
|
||||
print('Upload failed -- server error {0}'.format(upload_response.status_code))
|
||||
print(upload_response.text)
|
||||
exit(1)
|
||||
response_dict = upload_response.json();
|
||||
if 'uploadState' not in response_dict or response_dict['uploadState'] != 'SUCCESS':
|
||||
print('Upload failed -- server error {0}'.format(response_dict['uploadState']))
|
||||
exit(1)
|
||||
print('Upload succeeded.')
|
||||
# Publish
|
||||
print('Publishing package...')
|
||||
publish_url = 'https://www.googleapis.com/chromewebstore/v1.1/items/{0}/publish'.format(cs_extension_id)
|
||||
headers = {
|
||||
'Authorization': cs_auth,
|
||||
'x-goog-api-version': '2',
|
||||
'Content-Length': '0',
|
||||
}
|
||||
publish_response = requests.post(publish_url, headers=headers)
|
||||
if publish_response.status_code != 200:
|
||||
print('Error: Chrome store publishing failed -- server error {0}'.format(publish_response.status_code))
|
||||
exit(1)
|
||||
response_dict = publish_response.json();
|
||||
if 'status' not in response_dict or response_dict['status'][0] != 'OK':
|
||||
print('Publishing failed -- server error {0}'.format(response_dict['status']))
|
||||
exit(1)
|
||||
print('Publishing succeeded.')
|
||||
|
||||
print('All done.')
|
331
dist/firefox/publish-signed-beta.py
vendored
331
dist/firefox/publish-signed-beta.py
vendored
@@ -1,331 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import datetime
|
||||
import json
|
||||
import jwt
|
||||
import os
|
||||
import re
|
||||
import requests
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
import time
|
||||
import zipfile
|
||||
|
||||
from string import Template
|
||||
|
||||
# - Download target (raw) uBlock0.firefox.xpi from GitHub
|
||||
# - This is referred to as "raw" package
|
||||
# - This will fail if not a dev build
|
||||
# - Modify raw package to make it self-hosted
|
||||
# - This is referred to as "unsigned" package
|
||||
# - Ask AMO to sign uBlock0.firefox.xpi
|
||||
# - Generate JWT to be used for communication with server
|
||||
# - Upload unsigned package to AMO
|
||||
# - Wait for a valid download URL for signed package
|
||||
# - Download signed package as uBlock0.firefox.signed.xpi
|
||||
# - This is referred to as "signed" package
|
||||
# - Upload uBlock0.firefox.signed.xpi to GitHub
|
||||
# - Remove uBlock0.firefox.xpi from GitHub
|
||||
# - Modify updates.json to point to new version
|
||||
# - Commit changes to repo
|
||||
|
||||
# Find path to project root
|
||||
projdir = os.path.split(os.path.abspath(__file__))[0]
|
||||
while not os.path.isdir(os.path.join(projdir, '.git')):
|
||||
projdir = os.path.normpath(os.path.join(projdir, '..'))
|
||||
# Check that found project root is valid
|
||||
version_filepath = os.path.join(projdir, 'dist', 'version')
|
||||
if not os.path.isfile(version_filepath):
|
||||
print('Version file not found.')
|
||||
exit(1)
|
||||
|
||||
# We need a version string to work with
|
||||
if len(sys.argv) >= 2 and sys.argv[1]:
|
||||
tag_version = sys.argv[1]
|
||||
else:
|
||||
tag_version = input('Github release version: ')
|
||||
tag_version.strip()
|
||||
match = re.search('^(\d+\.\d+\.\d+)(?:(b|rc)(\d+))?$', tag_version)
|
||||
if not match:
|
||||
print('Error: Invalid version string.')
|
||||
exit(1)
|
||||
ext_version = match.group(1);
|
||||
if match.group(2):
|
||||
revision = int(match.group(3))
|
||||
if match.group(2) == 'rc':
|
||||
revision += 100;
|
||||
ext_version += '.' + str(revision)
|
||||
|
||||
extension_id = 'uBlock0@raymondhill.net'
|
||||
tmpdir = tempfile.TemporaryDirectory()
|
||||
raw_xpi_filename = 'uBlock0_' + tag_version + '.firefox.xpi'
|
||||
raw_xpi_filepath = os.path.join(tmpdir.name, raw_xpi_filename)
|
||||
unsigned_xpi_filepath = os.path.join(tmpdir.name, 'uBlock0.firefox.unsigned.xpi')
|
||||
signed_xpi_filename = 'uBlock0_' + tag_version + '.firefox.signed.xpi'
|
||||
signed_xpi_filepath = os.path.join(tmpdir.name, signed_xpi_filename)
|
||||
github_owner = 'gorhill'
|
||||
github_repo = 'uBlock'
|
||||
|
||||
# Load/save auth secrets
|
||||
# The build directory is excluded from git
|
||||
ubo_secrets = dict()
|
||||
ubo_secrets_filename = os.path.join(projdir, 'dist', 'build', 'ubo_secrets')
|
||||
if os.path.isfile(ubo_secrets_filename):
|
||||
with open(ubo_secrets_filename) as f:
|
||||
ubo_secrets = json.load(f)
|
||||
|
||||
def input_secret(prompt, token):
|
||||
if token in ubo_secrets:
|
||||
prompt += ' ✔'
|
||||
prompt += ': '
|
||||
value = input(prompt).strip()
|
||||
if len(value) == 0:
|
||||
if token not in ubo_secrets:
|
||||
print('Token error:', token)
|
||||
exit(1)
|
||||
value = ubo_secrets[token]
|
||||
elif token not in ubo_secrets or value != ubo_secrets[token]:
|
||||
ubo_secrets[token] = value
|
||||
exists = os.path.isfile(ubo_secrets_filename)
|
||||
with open(ubo_secrets_filename, 'w') as f:
|
||||
json.dump(ubo_secrets, f, indent=2)
|
||||
if not exists:
|
||||
os.chmod(ubo_secrets_filename, 0o600)
|
||||
return value
|
||||
|
||||
# GitHub API token
|
||||
github_token = input_secret('Github token', 'github_token')
|
||||
github_auth = 'token ' + github_token
|
||||
|
||||
#
|
||||
# Get metadata from GitHub about the release
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#get-a-single-release
|
||||
print('Downloading release info from GitHub...')
|
||||
release_info_url = 'https://api.github.com/repos/{0}/{1}/releases/tags/{2}'.format(github_owner, github_repo, tag_version)
|
||||
headers = { 'Authorization': github_auth, }
|
||||
response = requests.get(release_info_url, headers=headers)
|
||||
if response.status_code != 200:
|
||||
print('Error: Release not found: {0}'.format(response.status_code))
|
||||
exit(1)
|
||||
release_info = response.json()
|
||||
|
||||
#
|
||||
# Extract URL to raw package from metadata
|
||||
#
|
||||
|
||||
# Find url for uBlock0.firefox.xpi
|
||||
raw_xpi_url = ''
|
||||
for asset in release_info['assets']:
|
||||
if asset['name'] == signed_xpi_filename:
|
||||
print('Error: Found existing signed self-hosted package.')
|
||||
exit(1)
|
||||
if asset['name'] == raw_xpi_filename:
|
||||
raw_xpi_url = asset['url']
|
||||
if len(raw_xpi_url) == 0:
|
||||
print('Error: Release asset URL not found')
|
||||
exit(1)
|
||||
|
||||
#
|
||||
# Download raw package from GitHub
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#get-a-single-release-asset
|
||||
print('Downloading raw xpi package from GitHub...')
|
||||
headers = {
|
||||
'Authorization': github_auth,
|
||||
'Accept': 'application/octet-stream',
|
||||
}
|
||||
response = requests.get(raw_xpi_url, headers=headers)
|
||||
# Redirections are transparently handled:
|
||||
# http://docs.python-requests.org/en/master/user/quickstart/#redirection-and-history
|
||||
if response.status_code != 200:
|
||||
print('Error: Downloading raw package failed -- server error {0}'.format(response.status_code))
|
||||
exit(1)
|
||||
with open(raw_xpi_filepath, 'wb') as f:
|
||||
f.write(response.content)
|
||||
print('Downloaded raw package saved as {0}'.format(raw_xpi_filepath))
|
||||
|
||||
#
|
||||
# Convert the package to a self-hosted one: add `update_url` to the manifest
|
||||
#
|
||||
min_browser_version = '68';
|
||||
|
||||
print('Converting raw xpi package into self-hosted xpi package...')
|
||||
with zipfile.ZipFile(raw_xpi_filepath, 'r') as zipin:
|
||||
with zipfile.ZipFile(unsigned_xpi_filepath, 'w') as zipout:
|
||||
for item in zipin.infolist():
|
||||
data = zipin.read(item.filename)
|
||||
if item.filename == 'manifest.json':
|
||||
manifest = json.loads(bytes.decode(data))
|
||||
min_browser_version = manifest['browser_specific_settings']['gecko']['strict_min_version']
|
||||
manifest['browser_specific_settings']['gecko']['update_url'] = 'https://raw.githubusercontent.com/{0}/{1}/master/dist/firefox/updates.json'.format(github_owner, github_repo)
|
||||
data = json.dumps(manifest, indent=2, separators=(',', ': '), sort_keys=True).encode()
|
||||
zipout.writestr(item, data)
|
||||
|
||||
#
|
||||
# Ask AMO to sign the self-hosted package
|
||||
# - https://developer.mozilla.org/en-US/Add-ons/Distribution#Distributing_your_add-on
|
||||
# - https://pyjwt.readthedocs.io/en/latest/usage.html
|
||||
# - https://addons-server.readthedocs.io/en/latest/topics/api/auth.html
|
||||
# - https://addons-server.readthedocs.io/en/latest/topics/api/signing.html
|
||||
#
|
||||
|
||||
amo_api_key = ''
|
||||
amo_secret = ''
|
||||
|
||||
def get_jwt_auth():
|
||||
global amo_api_key
|
||||
if amo_api_key == '':
|
||||
amo_api_key = input_secret('AMO API key', 'amo_api_key')
|
||||
global amo_secret
|
||||
if amo_secret == '':
|
||||
amo_secret = input_secret('AMO API secret', 'amo_secret')
|
||||
amo_nonce = os.urandom(8).hex()
|
||||
jwt_payload = {
|
||||
'iss': amo_api_key,
|
||||
'jti': amo_nonce,
|
||||
'iat': datetime.datetime.utcnow(),
|
||||
'exp': datetime.datetime.utcnow() + datetime.timedelta(seconds=15),
|
||||
}
|
||||
return 'JWT ' + jwt.encode(jwt_payload, amo_secret)
|
||||
|
||||
print('Ask AMO to sign self-hosted xpi package...')
|
||||
with open(unsigned_xpi_filepath, 'rb') as f:
|
||||
# https://blog.mozilla.org/addons/2019/11/11/security-improvements-in-amo-upload-tools/
|
||||
# "We recommend allowing up to 15 minutes."
|
||||
interval = 60 # check every 60 seconds
|
||||
countdown = 60 * 60 / interval # for at most 60 minutes
|
||||
headers = { 'Authorization': get_jwt_auth(), }
|
||||
data = { 'channel': 'unlisted' }
|
||||
files = { 'upload': f, }
|
||||
signing_url = 'https://addons.mozilla.org/api/v4/addons/{0}/versions/{1}/'.format(extension_id, ext_version)
|
||||
print('Submitting package to be signed...')
|
||||
response = requests.put(signing_url, headers=headers, data=data, files=files)
|
||||
if response.status_code != 202:
|
||||
print('Error: Creating new version failed -- server error {0}'.format(response.status_code))
|
||||
print(response.text)
|
||||
exit(1)
|
||||
print('Request for signing self-hosted xpi package succeeded.')
|
||||
signing_request_response = response.json();
|
||||
f.close()
|
||||
print('Waiting for AMO to process the request to sign the self-hosted xpi package...')
|
||||
# Wait for signed package to be ready
|
||||
signing_check_url = signing_request_response['url']
|
||||
while True:
|
||||
time.sleep(interval)
|
||||
sys.stdout.write('.')
|
||||
sys.stdout.flush()
|
||||
countdown -= 1
|
||||
if countdown <= 0:
|
||||
print('Error: AMO signing timed out')
|
||||
exit(1)
|
||||
headers = { 'Authorization': get_jwt_auth(), }
|
||||
response = requests.get(signing_check_url, headers=headers)
|
||||
if response.status_code != 200:
|
||||
print('Error: AMO signing failed -- server error {0}'.format(response.status_code))
|
||||
print(response.text)
|
||||
exit(1)
|
||||
signing_check_response = response.json()
|
||||
if not signing_check_response['processed']:
|
||||
continue
|
||||
if not signing_check_response['valid']:
|
||||
print('Error: AMO validation failed')
|
||||
print(response.text)
|
||||
exit(1)
|
||||
if not signing_check_response['files'] or len(signing_check_response['files']) == 0:
|
||||
continue
|
||||
if not signing_check_response['files'][0]['signed']:
|
||||
continue
|
||||
if not signing_check_response['files'][0]['download_url']:
|
||||
print('Error: AMO signing failed')
|
||||
print(response.text)
|
||||
exit(1)
|
||||
print('\r')
|
||||
print('Self-hosted xpi package successfully signed.')
|
||||
download_url = signing_check_response['files'][0]['download_url']
|
||||
print('Downloading signed self-hosted xpi package from {0}...'.format(download_url))
|
||||
response = requests.get(download_url, headers=headers)
|
||||
if response.status_code != 200:
|
||||
print('Error: Download signed package failed -- server error {0}'.format(response.status_code))
|
||||
print(response.text)
|
||||
exit(1)
|
||||
with open(signed_xpi_filepath, 'wb') as f:
|
||||
f.write(response.content)
|
||||
f.close()
|
||||
print('Signed self-hosted xpi package downloaded.')
|
||||
break
|
||||
|
||||
#
|
||||
# Upload signed package to GitHub
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#upload-a-release-asset
|
||||
print('Uploading signed self-hosted xpi package to GitHub...')
|
||||
with open(signed_xpi_filepath, 'rb') as f:
|
||||
url = release_info['upload_url'].replace('{?name,label}', '?name=' + signed_xpi_filename)
|
||||
headers = {
|
||||
'Authorization': github_auth,
|
||||
'Content-Type': 'application/zip',
|
||||
}
|
||||
response = requests.post(url, headers=headers, data=f.read())
|
||||
if response.status_code != 201:
|
||||
print('Error: Upload signed package failed -- server error: {0}'.format(response.status_code))
|
||||
exit(1)
|
||||
|
||||
#
|
||||
# Remove raw package from GitHub
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#delete-a-release-asset
|
||||
print('Remove raw xpi package from GitHub...')
|
||||
headers = { 'Authorization': github_auth, }
|
||||
response = requests.delete(raw_xpi_url, headers=headers)
|
||||
if response.status_code != 204:
|
||||
print('Error: Deletion of raw package failed -- server error: {0}'.format(response.status_code))
|
||||
|
||||
#
|
||||
# Update updates.json to point to new package -- but only if just-signed
|
||||
# package is higher version than current one.
|
||||
#
|
||||
|
||||
# Be sure we are in sync with potentially modified files on remote
|
||||
r = subprocess.run(['git', 'pull', 'origin', 'master'], stdout=subprocess.PIPE)
|
||||
rout = bytes.decode(r.stdout).strip()
|
||||
|
||||
def int_from_version(version):
|
||||
parts = version.split('.')
|
||||
if len(parts) == 3:
|
||||
parts.append('0')
|
||||
return int(parts[0])*10e9 + int(parts[1])*10e6 + int(parts[2])*10e3 + int(parts[3])
|
||||
|
||||
print('Update GitHub to point to newly signed self-hosted xpi package...')
|
||||
updates_json_filepath = os.path.join(projdir, 'dist', 'firefox', 'updates.json')
|
||||
with open(updates_json_filepath) as f:
|
||||
updates_json = json.load(f)
|
||||
f.close()
|
||||
previous_version = updates_json['addons'][extension_id]['updates'][0]['version']
|
||||
if int_from_version(ext_version) > int_from_version(previous_version):
|
||||
with open(os.path.join(projdir, 'dist', 'firefox', 'updates.template.json')) as f:
|
||||
template_json = Template(f.read())
|
||||
f.close()
|
||||
updates_json = template_json.substitute(ext_version=ext_version, tag_version=tag_version, min_browser_version=min_browser_version)
|
||||
with open(updates_json_filepath, 'w') as f:
|
||||
f.write(updates_json)
|
||||
f.close()
|
||||
# - Stage the changed file
|
||||
r = subprocess.run(['git', 'status', '-s', updates_json_filepath], stdout=subprocess.PIPE)
|
||||
rout = bytes.decode(r.stdout).strip()
|
||||
if len(rout) >= 2 and rout[1] == 'M':
|
||||
subprocess.run(['git', 'add', updates_json_filepath])
|
||||
# - Commit the staged file
|
||||
r = subprocess.run(['git', 'status', '-s', updates_json_filepath], stdout=subprocess.PIPE)
|
||||
rout = bytes.decode(r.stdout).strip()
|
||||
if len(rout) >= 2 and rout[0] == 'M':
|
||||
subprocess.run(['git', 'commit', '-m', 'Make Firefox dev build auto-update', updates_json_filepath])
|
||||
subprocess.run(['git', 'push', 'origin', 'HEAD'])
|
||||
|
||||
print('All done.')
|
24
dist/firefox/updates.json
vendored
24
dist/firefox/updates.json
vendored
@@ -1,13 +1,17 @@
|
||||
{
|
||||
"addons": {
|
||||
"uBlock0@raymondhill.net": {
|
||||
"updates": [
|
||||
{
|
||||
"version": "1.55.1.105",
|
||||
"browser_specific_settings": { "gecko": { "strict_min_version": "78.0" } },
|
||||
"update_link": "https://github.com/gorhill/uBlock/releases/download/1.55.1rc5/uBlock0_1.55.1rc5.firefox.signed.xpi"
|
||||
"addons": {
|
||||
"uBlock0@raymondhill.net": {
|
||||
"updates": [
|
||||
{
|
||||
"version": "1.66.5.1",
|
||||
"browser_specific_settings": {
|
||||
"gecko": {
|
||||
"strict_min_version": "92.0"
|
||||
}
|
||||
},
|
||||
"update_link": "https://github.com/gorhill/uBlock/releases/download/1.66.5b1/uBlock0_1.66.5b1.firefox.signed.xpi"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
13
dist/firefox/updates.template.json
vendored
13
dist/firefox/updates.template.json
vendored
@@ -1,13 +0,0 @@
|
||||
{
|
||||
"addons": {
|
||||
"uBlock0@raymondhill.net": {
|
||||
"updates": [
|
||||
{
|
||||
"version": "$ext_version",
|
||||
"browser_specific_settings": { "gecko": { "strict_min_version": "$min_browser_version" } },
|
||||
"update_link": "https://github.com/gorhill/uBlock/releases/download/$tag_version/uBlock0_$tag_version.firefox.signed.xpi"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
195
dist/mv3/chromium/publish-beta.py
vendored
195
dist/mv3/chromium/publish-beta.py
vendored
@@ -1,195 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import datetime
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
import requests
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
import time
|
||||
import zipfile
|
||||
|
||||
from string import Template
|
||||
|
||||
# - Download target (raw) uBOLite_*.chromium.mv3.zip from GitHub
|
||||
# - This is referred to as "raw" package
|
||||
# - This will fail if not a dev build
|
||||
# - Upload uBOLite_*.chromium.mv3.zip to Chrome store
|
||||
# - Publish uBOLite_*.chromium.mv3.zip to Chrome store
|
||||
|
||||
# Find path to project root
|
||||
projdir = os.path.split(os.path.abspath(__file__))[0]
|
||||
while not os.path.isdir(os.path.join(projdir, '.git')):
|
||||
projdir = os.path.normpath(os.path.join(projdir, '..'))
|
||||
|
||||
# We need a version string to work with
|
||||
if len(sys.argv) >= 2 and sys.argv[1]:
|
||||
version = sys.argv[1]
|
||||
else:
|
||||
version = input('Github release version: ')
|
||||
version.strip()
|
||||
if not re.search('^uBOLite_\d+\.\d+\.\d+\.\d+$', version):
|
||||
print('Error: Invalid version string.')
|
||||
exit(1)
|
||||
|
||||
cs_extension_id = 'ddkjiahejlhfcafbddmgiahcphecmpfh'
|
||||
tmpdir = tempfile.TemporaryDirectory()
|
||||
raw_zip_filename = ''
|
||||
raw_zip_filepath = ''
|
||||
github_owner = 'gorhill'
|
||||
github_repo = 'uBlock'
|
||||
|
||||
# Load/save auth secrets
|
||||
# The build directory is excluded from git
|
||||
ubo_secrets = dict()
|
||||
ubo_secrets_filename = os.path.join(projdir, 'dist', 'build', 'ubo_secrets')
|
||||
if os.path.isfile(ubo_secrets_filename):
|
||||
with open(ubo_secrets_filename) as f:
|
||||
ubo_secrets = json.load(f)
|
||||
|
||||
def input_secret(prompt, token):
|
||||
if token in ubo_secrets:
|
||||
prompt += ' ✔'
|
||||
prompt += ': '
|
||||
value = input(prompt).strip()
|
||||
if len(value) == 0:
|
||||
if token not in ubo_secrets:
|
||||
print('Token error:', token)
|
||||
exit(1)
|
||||
value = ubo_secrets[token]
|
||||
elif token not in ubo_secrets or value != ubo_secrets[token]:
|
||||
ubo_secrets[token] = value
|
||||
exists = os.path.isfile(ubo_secrets_filename)
|
||||
with open(ubo_secrets_filename, 'w') as f:
|
||||
json.dump(ubo_secrets, f, indent=2)
|
||||
if not exists:
|
||||
os.chmod(ubo_secrets_filename, 0o600)
|
||||
return value
|
||||
|
||||
|
||||
# GitHub API token
|
||||
github_token = input_secret('Github token', 'github_token')
|
||||
github_auth = 'token ' + github_token
|
||||
|
||||
#
|
||||
# Get metadata from GitHub about the release
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#get-a-single-release
|
||||
print('Downloading release info from GitHub...')
|
||||
release_info_url = 'https://api.github.com/repos/{0}/{1}/releases/tags/{2}'.format(github_owner, github_repo, version)
|
||||
headers = { 'Authorization': github_auth, }
|
||||
response = requests.get(release_info_url, headers=headers)
|
||||
if response.status_code != 200:
|
||||
print('Error: Release not found: {0}'.format(response.status_code))
|
||||
exit(1)
|
||||
release_info = response.json()
|
||||
|
||||
#
|
||||
# Extract URL to raw package from metadata
|
||||
#
|
||||
|
||||
# Find url for uBOLite_*.chromium.mv3.zip
|
||||
raw_zip_url = ''
|
||||
for asset in release_info['assets']:
|
||||
if re.search('uBOLite_\d+.\d+.\d+.\d+.chromium.mv3.zip', asset['name']):
|
||||
raw_zip_url = asset['url']
|
||||
raw_zip_filename = asset['name']
|
||||
raw_zip_filepath = os.path.join(tmpdir.name, raw_zip_filename)
|
||||
if len(raw_zip_url) == 0:
|
||||
print('Error: Release asset URL not found')
|
||||
exit(1)
|
||||
if len(raw_zip_filepath) == 0:
|
||||
print('Error: Invalid release asset file not set')
|
||||
exit(1)
|
||||
|
||||
#
|
||||
# Download raw package from GitHub
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#get-a-single-release-asset
|
||||
print('Downloading raw zip package from GitHub...')
|
||||
headers = {
|
||||
'Authorization': github_auth,
|
||||
'Accept': 'application/octet-stream',
|
||||
}
|
||||
response = requests.get(raw_zip_url, headers=headers)
|
||||
# Redirections are transparently handled:
|
||||
# http://docs.python-requests.org/en/master/user/quickstart/#redirection-and-history
|
||||
if response.status_code != 200:
|
||||
print('Error: Downloading raw package failed -- server error {0}'.format(response.status_code))
|
||||
exit(1)
|
||||
with open(raw_zip_filepath, 'wb') as f:
|
||||
f.write(response.content)
|
||||
print('Downloaded raw package saved as {0}'.format(raw_zip_filepath))
|
||||
|
||||
#
|
||||
# Upload to Chrome store
|
||||
#
|
||||
|
||||
# Auth tokens
|
||||
cs_id = input_secret('Chrome store id', 'cs_id')
|
||||
cs_secret = input_secret('Chrome store secret', 'cs_secret')
|
||||
cs_refresh = input_secret('Chrome store refresh token', 'cs_refresh')
|
||||
|
||||
print('Uploading to Chrome store...')
|
||||
with open(raw_zip_filepath, 'rb') as f:
|
||||
print('Generating access token...')
|
||||
auth_url = 'https://accounts.google.com/o/oauth2/token'
|
||||
auth_payload = {
|
||||
'client_id': cs_id,
|
||||
'client_secret': cs_secret,
|
||||
'grant_type': 'refresh_token',
|
||||
'refresh_token': cs_refresh,
|
||||
}
|
||||
auth_response = requests.post(auth_url, data=auth_payload)
|
||||
if auth_response.status_code != 200:
|
||||
print('Error: Auth failed -- server error {0}'.format(auth_response.status_code))
|
||||
print(auth_response.text)
|
||||
exit(1)
|
||||
response_dict = auth_response.json()
|
||||
if 'access_token' not in response_dict:
|
||||
print('Error: Auth failed -- no access token')
|
||||
exit(1)
|
||||
# Prepare access token
|
||||
cs_auth = 'Bearer ' + response_dict['access_token']
|
||||
headers = {
|
||||
'Authorization': cs_auth,
|
||||
'x-goog-api-version': '2',
|
||||
}
|
||||
# Upload
|
||||
print('Uploading package...')
|
||||
upload_url = 'https://www.googleapis.com/upload/chromewebstore/v1.1/items/{0}'.format(cs_extension_id)
|
||||
upload_response = requests.put(upload_url, headers=headers, data=f)
|
||||
f.close()
|
||||
if upload_response.status_code != 200:
|
||||
print('Upload failed -- server error {0}'.format(upload_response.status_code))
|
||||
print(upload_response.text)
|
||||
exit(1)
|
||||
response_dict = upload_response.json();
|
||||
if 'uploadState' not in response_dict or response_dict['uploadState'] != 'SUCCESS':
|
||||
print('Upload failed -- server error {0}'.format(response_dict['uploadState']))
|
||||
exit(1)
|
||||
print('Upload succeeded.')
|
||||
# Publish
|
||||
print('Publishing package...')
|
||||
publish_url = 'https://www.googleapis.com/chromewebstore/v1.1/items/{0}/publish'.format(cs_extension_id)
|
||||
headers = {
|
||||
'Authorization': cs_auth,
|
||||
'x-goog-api-version': '2',
|
||||
'Content-Length': '0',
|
||||
}
|
||||
publish_response = requests.post(publish_url, headers=headers)
|
||||
if publish_response.status_code != 200:
|
||||
print('Error: Chrome store publishing failed -- server error {0}'.format(publish_response.status_code))
|
||||
exit(1)
|
||||
response_dict = publish_response.json();
|
||||
if 'status' not in response_dict or response_dict['status'][0] != 'OK':
|
||||
print('Publishing failed -- server error {0}'.format(response_dict['status']))
|
||||
exit(1)
|
||||
print('Publishing succeeded.')
|
||||
|
||||
print('All done.')
|
326
dist/mv3/firefox/publish-signed-beta.py
vendored
326
dist/mv3/firefox/publish-signed-beta.py
vendored
@@ -1,326 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import datetime
|
||||
import json
|
||||
import jwt
|
||||
import os
|
||||
import re
|
||||
import requests
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
import time
|
||||
import zipfile
|
||||
|
||||
from string import Template
|
||||
|
||||
# - Download target (raw) uBlock0.firefox.xpi from GitHub
|
||||
# - This is referred to as "raw" package
|
||||
# - This will fail if not a dev build
|
||||
# - Modify raw package to make it self-hosted
|
||||
# - This is referred to as "unsigned" package
|
||||
# - Ask AMO to sign uBlock0.firefox.xpi
|
||||
# - Generate JWT to be used for communication with server
|
||||
# - Upload unsigned package to AMO
|
||||
# - Wait for a valid download URL for signed package
|
||||
# - Download signed package as uBlock0.firefox.signed.xpi
|
||||
# - This is referred to as "signed" package
|
||||
# - Upload uBlock0.firefox.signed.xpi to GitHub
|
||||
# - Remove uBlock0.firefox.xpi from GitHub
|
||||
# - Modify updates.json to point to new version
|
||||
# - Commit changes to repo
|
||||
|
||||
# Find path to project root
|
||||
projdir = os.path.split(os.path.abspath(__file__))[0]
|
||||
while not os.path.isdir(os.path.join(projdir, '.git')):
|
||||
projdir = os.path.normpath(os.path.join(projdir, '..'))
|
||||
# Check that found project root is valid
|
||||
version_filepath = os.path.join(projdir, 'dist', 'version')
|
||||
if not os.path.isfile(version_filepath):
|
||||
print('Version file not found.')
|
||||
exit(1)
|
||||
|
||||
# We need a version string to work with
|
||||
if len(sys.argv) >= 2 and sys.argv[1]:
|
||||
tag_version = sys.argv[1]
|
||||
else:
|
||||
tag_version = input('Github release version: ')
|
||||
tag_version.strip()
|
||||
match = re.search('^uBOLite_(\d+\.\d+\.\d+.\d+)$', tag_version)
|
||||
if not match:
|
||||
print('Error: Invalid version string.')
|
||||
exit(1)
|
||||
ext_version = match.group(1);
|
||||
|
||||
extension_id = 'uBOLite@raymondhill.net'
|
||||
tmpdir = tempfile.TemporaryDirectory()
|
||||
raw_xpi_filename = tag_version + '.firefox.mv3.xpi'
|
||||
raw_xpi_filepath = os.path.join(tmpdir.name, raw_xpi_filename)
|
||||
unsigned_xpi_filepath = os.path.join(tmpdir.name, 'uBOLite.firefox.unsigned.xpi')
|
||||
signed_xpi_filename = tag_version + '.firefox.signed.mv3.xpi'
|
||||
signed_xpi_filepath = os.path.join(tmpdir.name, signed_xpi_filename)
|
||||
github_owner = 'gorhill'
|
||||
github_repo = 'uBlock'
|
||||
|
||||
# Load/save auth secrets
|
||||
# The build directory is excluded from git
|
||||
ubo_secrets = dict()
|
||||
ubo_secrets_filename = os.path.join(projdir, 'dist', 'build', 'ubo_secrets')
|
||||
if os.path.isfile(ubo_secrets_filename):
|
||||
with open(ubo_secrets_filename) as f:
|
||||
ubo_secrets = json.load(f)
|
||||
|
||||
def input_secret(prompt, token):
|
||||
if token in ubo_secrets:
|
||||
prompt += ' ✔'
|
||||
prompt += ': '
|
||||
value = input(prompt).strip()
|
||||
if len(value) == 0:
|
||||
if token not in ubo_secrets:
|
||||
print('Token error:', token)
|
||||
exit(1)
|
||||
value = ubo_secrets[token]
|
||||
elif token not in ubo_secrets or value != ubo_secrets[token]:
|
||||
ubo_secrets[token] = value
|
||||
exists = os.path.isfile(ubo_secrets_filename)
|
||||
with open(ubo_secrets_filename, 'w') as f:
|
||||
json.dump(ubo_secrets, f, indent=2)
|
||||
if not exists:
|
||||
os.chmod(ubo_secrets_filename, 0o600)
|
||||
return value
|
||||
|
||||
# GitHub API token
|
||||
github_token = input_secret('Github token', 'github_token')
|
||||
github_auth = 'token ' + github_token
|
||||
|
||||
#
|
||||
# Get metadata from GitHub about the release
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#get-a-single-release
|
||||
print('Downloading release info from GitHub...')
|
||||
release_info_url = 'https://api.github.com/repos/{0}/{1}/releases/tags/{2}'.format(github_owner, github_repo, tag_version)
|
||||
headers = { 'Authorization': github_auth, }
|
||||
response = requests.get(release_info_url, headers=headers)
|
||||
if response.status_code != 200:
|
||||
print('Error: Release not found: {0}'.format(response.status_code))
|
||||
exit(1)
|
||||
release_info = response.json()
|
||||
|
||||
#
|
||||
# Extract URL to raw package from metadata
|
||||
#
|
||||
|
||||
# Find url for uBlock0.firefox.xpi
|
||||
raw_xpi_url = ''
|
||||
for asset in release_info['assets']:
|
||||
if asset['name'] == signed_xpi_filename:
|
||||
print('Error: Found existing signed self-hosted package.')
|
||||
exit(1)
|
||||
if asset['name'] == raw_xpi_filename:
|
||||
raw_xpi_url = asset['url']
|
||||
if len(raw_xpi_url) == 0:
|
||||
print('Error: Release asset URL not found')
|
||||
exit(1)
|
||||
|
||||
#
|
||||
# Download raw package from GitHub
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#get-a-single-release-asset
|
||||
print('Downloading raw xpi package from GitHub...')
|
||||
headers = {
|
||||
'Authorization': github_auth,
|
||||
'Accept': 'application/octet-stream',
|
||||
}
|
||||
response = requests.get(raw_xpi_url, headers=headers)
|
||||
# Redirections are transparently handled:
|
||||
# http://docs.python-requests.org/en/master/user/quickstart/#redirection-and-history
|
||||
if response.status_code != 200:
|
||||
print('Error: Downloading raw package failed -- server error {0}'.format(response.status_code))
|
||||
exit(1)
|
||||
with open(raw_xpi_filepath, 'wb') as f:
|
||||
f.write(response.content)
|
||||
print('Downloaded raw package saved as {0}'.format(raw_xpi_filepath))
|
||||
|
||||
#
|
||||
# Convert the package to a self-hosted one: add `update_url` to the manifest
|
||||
#
|
||||
min_browser_version = '114.0';
|
||||
|
||||
print('Converting raw xpi package into self-hosted xpi package...')
|
||||
with zipfile.ZipFile(raw_xpi_filepath, 'r') as zipin:
|
||||
with zipfile.ZipFile(unsigned_xpi_filepath, 'w') as zipout:
|
||||
for item in zipin.infolist():
|
||||
data = zipin.read(item.filename)
|
||||
if item.filename == 'manifest.json':
|
||||
manifest = json.loads(bytes.decode(data))
|
||||
min_browser_version = manifest['browser_specific_settings']['gecko']['strict_min_version']
|
||||
manifest['browser_specific_settings']['gecko']['update_url'] = 'https://raw.githubusercontent.com/{0}/{1}/master/dist/mv3/firefox/updates.json'.format(github_owner, github_repo)
|
||||
data = json.dumps(manifest, indent=2, separators=(',', ': '), sort_keys=True).encode()
|
||||
zipout.writestr(item, data)
|
||||
|
||||
#
|
||||
# Ask AMO to sign the self-hosted package
|
||||
# - https://developer.mozilla.org/en-US/Add-ons/Distribution#Distributing_your_add-on
|
||||
# - https://pyjwt.readthedocs.io/en/latest/usage.html
|
||||
# - https://addons-server.readthedocs.io/en/latest/topics/api/auth.html
|
||||
# - https://addons-server.readthedocs.io/en/latest/topics/api/signing.html
|
||||
#
|
||||
|
||||
amo_api_key = ''
|
||||
amo_secret = ''
|
||||
|
||||
def get_jwt_auth():
|
||||
global amo_api_key
|
||||
if amo_api_key == '':
|
||||
amo_api_key = input_secret('AMO API key', 'amo_api_key')
|
||||
global amo_secret
|
||||
if amo_secret == '':
|
||||
amo_secret = input_secret('AMO API secret', 'amo_secret')
|
||||
amo_nonce = os.urandom(8).hex()
|
||||
jwt_payload = {
|
||||
'iss': amo_api_key,
|
||||
'jti': amo_nonce,
|
||||
'iat': datetime.datetime.utcnow(),
|
||||
'exp': datetime.datetime.utcnow() + datetime.timedelta(seconds=15),
|
||||
}
|
||||
return 'JWT ' + jwt.encode(jwt_payload, amo_secret)
|
||||
|
||||
print('Ask AMO to sign self-hosted xpi package...')
|
||||
with open(unsigned_xpi_filepath, 'rb') as f:
|
||||
# https://blog.mozilla.org/addons/2019/11/11/security-improvements-in-amo-upload-tools/
|
||||
# "We recommend allowing up to 15 minutes."
|
||||
interval = 60 # check every 60 seconds
|
||||
countdown = 60 * 60 / interval # for at most 60 minutes
|
||||
headers = { 'Authorization': get_jwt_auth(), }
|
||||
data = { 'channel': 'unlisted' }
|
||||
files = { 'upload': f, }
|
||||
signing_url = 'https://addons.mozilla.org/api/v4/addons/{0}/versions/{1}/'.format(extension_id, ext_version)
|
||||
print('Submitting package to be signed...')
|
||||
response = requests.put(signing_url, headers=headers, data=data, files=files)
|
||||
if response.status_code != 202:
|
||||
print('Error: Creating new version failed -- server error {0}'.format(response.status_code))
|
||||
print(response.text)
|
||||
exit(1)
|
||||
print('Request for signing self-hosted xpi package succeeded.')
|
||||
signing_request_response = response.json();
|
||||
f.close()
|
||||
print('Waiting for AMO to process the request to sign the self-hosted xpi package...')
|
||||
# Wait for signed package to be ready
|
||||
signing_check_url = signing_request_response['url']
|
||||
while True:
|
||||
time.sleep(interval)
|
||||
sys.stdout.write('.')
|
||||
sys.stdout.flush()
|
||||
countdown -= 1
|
||||
if countdown <= 0:
|
||||
print('Error: AMO signing timed out')
|
||||
exit(1)
|
||||
headers = { 'Authorization': get_jwt_auth(), }
|
||||
response = requests.get(signing_check_url, headers=headers)
|
||||
if response.status_code != 200:
|
||||
print('Error: AMO signing failed -- server error {0}'.format(response.status_code))
|
||||
print(response.text)
|
||||
exit(1)
|
||||
signing_check_response = response.json()
|
||||
if not signing_check_response['processed']:
|
||||
continue
|
||||
if not signing_check_response['valid']:
|
||||
print('Error: AMO validation failed')
|
||||
print(response.text)
|
||||
exit(1)
|
||||
if not signing_check_response['files'] or len(signing_check_response['files']) == 0:
|
||||
continue
|
||||
if not signing_check_response['files'][0]['signed']:
|
||||
continue
|
||||
if not signing_check_response['files'][0]['download_url']:
|
||||
print('Error: AMO signing failed')
|
||||
print(response.text)
|
||||
exit(1)
|
||||
print('\r')
|
||||
print('Self-hosted xpi package successfully signed.')
|
||||
download_url = signing_check_response['files'][0]['download_url']
|
||||
print('Downloading signed self-hosted xpi package from {0}...'.format(download_url))
|
||||
response = requests.get(download_url, headers=headers)
|
||||
if response.status_code != 200:
|
||||
print('Error: Download signed package failed -- server error {0}'.format(response.status_code))
|
||||
print(response.text)
|
||||
exit(1)
|
||||
with open(signed_xpi_filepath, 'wb') as f:
|
||||
f.write(response.content)
|
||||
f.close()
|
||||
print('Signed self-hosted xpi package downloaded.')
|
||||
break
|
||||
|
||||
#
|
||||
# Upload signed package to GitHub
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#upload-a-release-asset
|
||||
print('Uploading signed self-hosted xpi package to GitHub...')
|
||||
with open(signed_xpi_filepath, 'rb') as f:
|
||||
url = release_info['upload_url'].replace('{?name,label}', '?name=' + signed_xpi_filename)
|
||||
headers = {
|
||||
'Authorization': github_auth,
|
||||
'Content-Type': 'application/zip',
|
||||
}
|
||||
response = requests.post(url, headers=headers, data=f.read())
|
||||
if response.status_code != 201:
|
||||
print('Error: Upload signed package failed -- server error: {0}'.format(response.status_code))
|
||||
exit(1)
|
||||
|
||||
#
|
||||
# Remove raw package from GitHub
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#delete-a-release-asset
|
||||
print('Remove raw xpi package from GitHub...')
|
||||
headers = { 'Authorization': github_auth, }
|
||||
response = requests.delete(raw_xpi_url, headers=headers)
|
||||
if response.status_code != 204:
|
||||
print('Error: Deletion of raw package failed -- server error: {0}'.format(response.status_code))
|
||||
|
||||
#
|
||||
# Update updates.json to point to new package -- but only if just-signed
|
||||
# package is higher version than current one.
|
||||
#
|
||||
|
||||
# Be sure we are in sync with potentially modified files on remote
|
||||
r = subprocess.run(['git', 'pull', 'origin', 'master'], stdout=subprocess.PIPE)
|
||||
rout = bytes.decode(r.stdout).strip()
|
||||
|
||||
def int_from_version(version):
|
||||
parts = version.split('.')
|
||||
if len(parts) == 3:
|
||||
parts.append('0')
|
||||
return int(parts[0])*10e9 + int(parts[1])*10e6 + int(parts[2])*10e3 + int(parts[3])
|
||||
|
||||
print('Update GitHub to point to newly signed self-hosted xpi package...')
|
||||
updates_json_filepath = os.path.join(projdir, 'dist', 'mv3', 'firefox', 'updates.json')
|
||||
with open(updates_json_filepath) as f:
|
||||
updates_json = json.load(f)
|
||||
f.close()
|
||||
previous_version = updates_json['addons'][extension_id]['updates'][0]['version']
|
||||
if int_from_version(ext_version) > int_from_version(previous_version):
|
||||
with open(os.path.join(projdir, 'dist', 'mv3', 'firefox', 'updates.template.json')) as f:
|
||||
template_json = Template(f.read())
|
||||
f.close()
|
||||
updates_json = template_json.substitute(ext_version=ext_version, tag_version=tag_version, min_browser_version=min_browser_version)
|
||||
with open(updates_json_filepath, 'w') as f:
|
||||
f.write(updates_json)
|
||||
f.close()
|
||||
# - Stage the changed file
|
||||
r = subprocess.run(['git', 'status', '-s', updates_json_filepath], stdout=subprocess.PIPE)
|
||||
rout = bytes.decode(r.stdout).strip()
|
||||
if len(rout) >= 2 and rout[1] == 'M':
|
||||
subprocess.run(['git', 'add', updates_json_filepath])
|
||||
# - Commit the staged file
|
||||
r = subprocess.run(['git', 'status', '-s', updates_json_filepath], stdout=subprocess.PIPE)
|
||||
rout = bytes.decode(r.stdout).strip()
|
||||
if len(rout) >= 2 and rout[0] == 'M':
|
||||
subprocess.run(['git', 'commit', '-m', 'Make Firefox dev build auto-update', updates_json_filepath])
|
||||
subprocess.run(['git', 'push', 'origin', 'HEAD'])
|
||||
|
||||
print('All done.')
|
13
dist/mv3/firefox/updates.json
vendored
13
dist/mv3/firefox/updates.json
vendored
@@ -1,13 +0,0 @@
|
||||
{
|
||||
"addons": {
|
||||
"uBOLite@raymondhill.net": {
|
||||
"updates": [
|
||||
{
|
||||
"version": "1.0.23.8125",
|
||||
"browser_specific_settings": { "gecko": { "strict_min_version": "114.0" } },
|
||||
"update_link": "https://github.com/gorhill/uBlock/releases/download/uBOLite_1.0.23.8125/uBOLite_1.0.23.8125.firefox.signed.mv3.xpi"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
13
dist/mv3/firefox/updates.template.json
vendored
13
dist/mv3/firefox/updates.template.json
vendored
@@ -1,13 +0,0 @@
|
||||
{
|
||||
"addons": {
|
||||
"uBOLite@raymondhill.net": {
|
||||
"updates": [
|
||||
{
|
||||
"version": "$ext_version",
|
||||
"browser_specific_settings": { "gecko": { "strict_min_version": "$min_browser_version" } },
|
||||
"update_link": "https://github.com/gorhill/uBlock/releases/download/$tag_version/$tag_version.firefox.signed.mv3.xpi"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
1584
dist/mv3/log.txt
vendored
1584
dist/mv3/log.txt
vendored
File diff suppressed because one or more lines are too long
2
dist/version
vendored
2
dist/version
vendored
@@ -1 +1 @@
|
||||
1.56.1.0
|
||||
1.66.5.2
|
51
eslint.config.mjs
Normal file
51
eslint.config.mjs
Normal file
@@ -0,0 +1,51 @@
|
||||
import js from "@eslint/js";
|
||||
import globals from "globals";
|
||||
import json from "@eslint/json";
|
||||
|
||||
import { includeIgnoreFile } from "@eslint/compat";
|
||||
import path from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = path.dirname(__filename);
|
||||
const gitignorePath = path.resolve(__dirname, ".gitignore");
|
||||
|
||||
export default [ includeIgnoreFile(gitignorePath), {
|
||||
files: ["**/*.js", "**/*.mjs"],
|
||||
...js.configs.recommended,
|
||||
}, {
|
||||
files: ["**/*.js", "**/*.mjs"],
|
||||
languageOptions: {
|
||||
globals: {
|
||||
...globals.browser,
|
||||
browser: "readonly",
|
||||
chrome: "readonly",
|
||||
vAPI: "readonly",
|
||||
},
|
||||
sourceType: "module",
|
||||
},
|
||||
rules: {
|
||||
eqeqeq: ["warn", "always"],
|
||||
indent: ["error", 4, {
|
||||
ignoredNodes: [
|
||||
"Program > BlockStatement",
|
||||
"Program > ExpressionStatement > CallExpression > ArrowFunctionExpression > BlockStatement",
|
||||
"Program > ExpressionStatement > CallExpression > FunctionExpression > BlockStatement",
|
||||
"Program > IfStatement > BlockStatement",
|
||||
"Program > VariableDeclaration > VariableDeclarator > CallExpression > ArrowFunctionExpression > BlockStatement",
|
||||
"CallExpression > MemberExpression",
|
||||
"ArrayExpression > *",
|
||||
"ObjectExpression > *",
|
||||
],
|
||||
}],
|
||||
"no-control-regex": "off",
|
||||
"no-empty": "off",
|
||||
"sort-imports": "error",
|
||||
"strict": "error",
|
||||
},
|
||||
}, {
|
||||
files: ["**/*.json"],
|
||||
ignores: ["package-lock.json"],
|
||||
language: "json/json",
|
||||
...json.configs.recommended,
|
||||
} ];
|
1163
package-lock.json
generated
Normal file
1163
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
32
package.json
Normal file
32
package.json
Normal file
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"name": "uBlock",
|
||||
"version": "1.0.0",
|
||||
"description": "npm dev tools",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"lint": "eslint --no-warn-ignored --ignore-pattern \"**/lib/\" --ignore-pattern \"**/npm/\" -- \"./src/js/*.js\" \"./src/js/**/*.js\" \"./**/*.json\" \"./platform/**/*.js\"",
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/gorhill/uBlock.git"
|
||||
},
|
||||
"author": "Raymond Hill",
|
||||
"license": "GPLv3",
|
||||
"bugs": {
|
||||
"url": "https://github.com/gorhill/uBlock/issues"
|
||||
},
|
||||
"homepage": "https://github.com/gorhill/uBlock#readme",
|
||||
"engines": {
|
||||
"node": ">=22",
|
||||
"npm": ">=11"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@eslint/compat": "^1.2.4",
|
||||
"@eslint/js": "^9.17.0",
|
||||
"@eslint/json": "^0.13.1",
|
||||
"eslint": "^9.34.0",
|
||||
"eslint-formatter-compact": "^8.40.0",
|
||||
"globals": "^15.14.0"
|
||||
}
|
||||
}
|
@@ -1,123 +0,0 @@
|
||||
/*******************************************************************************
|
||||
|
||||
uBlock Origin - a browser extension to block requests.
|
||||
Copyright (C) 2014-present Raymond Hill
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see {http://www.gnu.org/licenses/}.
|
||||
|
||||
Home: https://github.com/gorhill/uBlock
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
import publicSuffixList from './lib/publicsuffixlist/publicsuffixlist.js';
|
||||
import punycode from './lib/punycode.js';
|
||||
|
||||
import staticNetFilteringEngine from './js/static-net-filtering.js';
|
||||
import { FilteringContext } from './js/filtering-context.js';
|
||||
import { LineIterator } from './js/text-utils.js';
|
||||
import * as sfp from './js/static-filtering-parser.js';
|
||||
|
||||
import {
|
||||
CompiledListReader,
|
||||
CompiledListWriter
|
||||
} from './js/static-filtering-io.js';
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
function compileList(rawText, writer) {
|
||||
const lineIter = new LineIterator(rawText);
|
||||
const parser = new sfp.AstFilterParser({
|
||||
interactive: true,
|
||||
maxTokenLength: staticNetFilteringEngine.MAX_TOKEN_LENGTH,
|
||||
});
|
||||
const compiler = staticNetFilteringEngine.createCompiler();
|
||||
|
||||
while ( lineIter.eot() === false ) {
|
||||
let line = lineIter.next();
|
||||
|
||||
while ( line.endsWith(' \\') ) {
|
||||
if ( lineIter.peek(4) !== ' ' ) { break; }
|
||||
line = line.slice(0, -2).trim() + lineIter.next().trim();
|
||||
}
|
||||
parser.parse(line);
|
||||
|
||||
if ( parser.isFilter() === false ) { continue; }
|
||||
if ( parser.isNetworkFilter() === false ) { continue; }
|
||||
if ( compiler.compile(parser, writer) ) { continue; }
|
||||
if ( compiler.error !== undefined ) {
|
||||
console.info(JSON.stringify({
|
||||
realm: 'message',
|
||||
type: 'error',
|
||||
text: compiler.error
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
return writer.toString();
|
||||
}
|
||||
|
||||
function applyList(name, raw) {
|
||||
const writer = new CompiledListWriter();
|
||||
writer.properties.set('name', name);
|
||||
const compiled = compileList(raw, writer);
|
||||
const reader = new CompiledListReader(compiled);
|
||||
staticNetFilteringEngine.fromCompiled(reader);
|
||||
}
|
||||
|
||||
function enableWASM(path) {
|
||||
return Promise.all([
|
||||
publicSuffixList.enableWASM(`${path}/lib/publicsuffixlist`),
|
||||
staticNetFilteringEngine.enableWASM(`${path}/js`),
|
||||
]);
|
||||
}
|
||||
|
||||
function pslInit(raw) {
|
||||
if ( typeof raw !== 'string' || raw.trim() === '' ) {
|
||||
console.info('Unable to populate public suffix list');
|
||||
return;
|
||||
}
|
||||
publicSuffixList.parse(raw, punycode.toASCII);
|
||||
console.info('Public suffix list populated');
|
||||
}
|
||||
|
||||
function restart(lists) {
|
||||
// Remove all filters
|
||||
reset();
|
||||
|
||||
if ( Array.isArray(lists) && lists.length !== 0 ) {
|
||||
// Populate filtering engine with filter lists
|
||||
for ( const { name, raw } of lists ) {
|
||||
applyList(name, raw);
|
||||
}
|
||||
// Commit changes
|
||||
staticNetFilteringEngine.freeze();
|
||||
staticNetFilteringEngine.optimize();
|
||||
}
|
||||
|
||||
return staticNetFilteringEngine;
|
||||
}
|
||||
|
||||
function reset() {
|
||||
staticNetFilteringEngine.reset();
|
||||
}
|
||||
|
||||
export {
|
||||
FilteringContext,
|
||||
enableWASM,
|
||||
pslInit,
|
||||
restart,
|
||||
};
|
@@ -1,71 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>uBO Static Network Filtering Engine</title>
|
||||
</head>
|
||||
<body>
|
||||
<script type="module">
|
||||
import {
|
||||
FilteringContext,
|
||||
enableWASM,
|
||||
pslInit,
|
||||
restart,
|
||||
} from './main.js';
|
||||
|
||||
(async ( ) => {
|
||||
await enableWASM('.');
|
||||
|
||||
await fetch('./data/effective_tld_names.dat').then(response => {
|
||||
return response.text();
|
||||
}).then(pslRaw => {
|
||||
pslInit(pslRaw);
|
||||
});
|
||||
|
||||
const snfe = await Promise.all([
|
||||
fetch('./data/easylist.txt').then(response => {
|
||||
return response.text();
|
||||
}),
|
||||
fetch('./data/easyprivacy.txt').then(response => {
|
||||
return response.text();
|
||||
}),
|
||||
]).then(rawLists => {
|
||||
return restart([
|
||||
{ name: 'easylist', raw: rawLists[0] },
|
||||
{ name: 'easyprivacy', raw: rawLists[1] },
|
||||
]);
|
||||
});
|
||||
|
||||
// Reuse filtering context: it's what uBO does
|
||||
const fctxt = new FilteringContext();
|
||||
|
||||
// Tests
|
||||
// Not blocked
|
||||
fctxt.setDocOriginFromURL('https://www.bloomberg.com/');
|
||||
fctxt.setURL('https://www.bloomberg.com/tophat/assets/v2.6.1/that.css');
|
||||
fctxt.setType('stylesheet');
|
||||
if ( snfe.matchRequest(fctxt) !== 0 ) {
|
||||
console.log(snfe.toLogData());
|
||||
}
|
||||
|
||||
// Blocked
|
||||
fctxt.setDocOriginFromURL('https://www.bloomberg.com/');
|
||||
fctxt.setURL('https://securepubads.g.doubleclick.net/tag/js/gpt.js');
|
||||
fctxt.setType('script');
|
||||
if ( snfe.matchRequest(fctxt) !== 0 ) {
|
||||
console.log(snfe.toLogData());
|
||||
}
|
||||
|
||||
// Unblocked
|
||||
fctxt.setDocOriginFromURL('https://www.bloomberg.com/');
|
||||
fctxt.setURL('https://sourcepointcmp.bloomberg.com/ccpa.js');
|
||||
fctxt.setType('script');
|
||||
if ( snfe.matchRequest(fctxt) !== 0 ) {
|
||||
console.log(snfe.toLogData());
|
||||
}
|
||||
|
||||
restart();
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
@@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title></title>
|
||||
<script async src="js/is-webrtc-supported.js"></script>
|
||||
<script async src="js/is-webrtc-supported.js" type="module"></script>
|
||||
</head>
|
||||
<body></body>
|
||||
</html>
|
||||
|
@@ -30,11 +30,9 @@
|
||||
// collected.
|
||||
|
||||
(function() {
|
||||
'use strict';
|
||||
|
||||
var pc = null;
|
||||
let pc = null;
|
||||
try {
|
||||
var PC = self.RTCPeerConnection || self.webkitRTCPeerConnection;
|
||||
const PC = self.RTCPeerConnection || self.webkitRTCPeerConnection;
|
||||
if ( PC ) {
|
||||
pc = new PC(null);
|
||||
}
|
||||
|
@@ -57,8 +57,7 @@
|
||||
"https://filterlists.com/*",
|
||||
"https://forums.lanik.us/*",
|
||||
"https://github.com/*",
|
||||
"https://*.github.io/*",
|
||||
"https://*.letsblock.it/*"
|
||||
"https://*.github.io/*"
|
||||
],
|
||||
"js": [
|
||||
"/js/scriptlets/subscriber.js"
|
||||
@@ -90,13 +89,14 @@
|
||||
},
|
||||
"incognito": "split",
|
||||
"manifest_version": 2,
|
||||
"minimum_chrome_version": "73.0",
|
||||
"minimum_chrome_version": "93.0",
|
||||
"name": "uBlock Origin",
|
||||
"options_ui": {
|
||||
"page": "dashboard.html",
|
||||
"open_in_tab": true
|
||||
},
|
||||
"permissions": [
|
||||
"alarms",
|
||||
"contextMenus",
|
||||
"privacy",
|
||||
"storage",
|
||||
|
@@ -19,10 +19,6 @@
|
||||
Home: https://github.com/gorhill/uBlock
|
||||
*/
|
||||
|
||||
/* globals browser */
|
||||
|
||||
'use strict';
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// https://github.com/uBlockOrigin/uBlock-issues/issues/1659
|
||||
@@ -30,6 +26,8 @@
|
||||
// so we synthetize these missing events when this happens.
|
||||
// https://github.com/uBlockOrigin/uAssets/issues/10323
|
||||
// Also mind whether the new tab is launched from an external application.
|
||||
// https://github.com/uBlockOrigin/uBlock-issues/issues/2227
|
||||
// Revert commit related to issue above.
|
||||
|
||||
vAPI.Tabs = class extends vAPI.Tabs {
|
||||
constructor() {
|
||||
@@ -70,8 +68,7 @@ vAPI.Tabs = class extends vAPI.Tabs {
|
||||
const isClientRedirect =
|
||||
Array.isArray(details.transitionQualifiers) &&
|
||||
details.transitionQualifiers.includes('client_redirect');
|
||||
const isStartPage = details.transitionType === 'start_page';
|
||||
if ( isClientRedirect === false && isStartPage === false ) { return; }
|
||||
if ( isClientRedirect === false ) { return; }
|
||||
this.onCreatedNavigationTargetHandler({
|
||||
tabId: details.tabId,
|
||||
sourceTabId: details.tabId,
|
||||
@@ -90,71 +87,47 @@ vAPI.Tabs = class extends vAPI.Tabs {
|
||||
['gif','image'],['ico','image'],['jpeg','image'],['jpg','image'],['png','image'],['webp','image']
|
||||
]);
|
||||
|
||||
const headerValue = (headers, name) => {
|
||||
let i = headers.length;
|
||||
while ( i-- ) {
|
||||
if ( headers[i].name.toLowerCase() === name ) {
|
||||
return headers[i].value.trim();
|
||||
}
|
||||
}
|
||||
return '';
|
||||
};
|
||||
|
||||
const parsedURL = new URL('https://www.example.org/');
|
||||
|
||||
// Extend base class to normalize as per platform.
|
||||
// Extend base class to normalize as per platform
|
||||
|
||||
vAPI.Net = class extends vAPI.Net {
|
||||
normalizeDetails(details) {
|
||||
// Chromium 63+ supports the `initiator` property, which contains
|
||||
// the URL of the origin from which the network request was made.
|
||||
if (
|
||||
typeof details.initiator === 'string' &&
|
||||
details.initiator !== 'null'
|
||||
) {
|
||||
// the URL of the origin from which the network request was made
|
||||
if ( details.initiator && details.initiator !== 'null' ) {
|
||||
details.documentUrl = details.initiator;
|
||||
}
|
||||
|
||||
let type = details.type;
|
||||
|
||||
const type = details.type;
|
||||
if ( type === 'imageset' ) {
|
||||
details.type = 'image';
|
||||
return;
|
||||
}
|
||||
|
||||
// The rest of the function code is to normalize type
|
||||
if ( type !== 'other' ) { return; }
|
||||
|
||||
// Try to map known "extension" part of URL to request type.
|
||||
parsedURL.href = details.url;
|
||||
const path = parsedURL.pathname,
|
||||
pos = path.indexOf('.', path.length - 6);
|
||||
if ( pos !== -1 && (type = extToTypeMap.get(path.slice(pos + 1))) ) {
|
||||
details.type = type;
|
||||
// Try to map known "extension" part of URL to request type
|
||||
if ( details.responseHeaders === undefined ) {
|
||||
parsedURL.href = details.url;
|
||||
const path = parsedURL.pathname;
|
||||
const pos = path.indexOf('.', path.length - 6);
|
||||
if ( pos !== -1 ) {
|
||||
details.type = extToTypeMap.get(path.slice(pos + 1)) || type;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Try to extract type from response headers if present.
|
||||
if ( details.responseHeaders ) {
|
||||
type = headerValue(details.responseHeaders, 'content-type');
|
||||
if ( type.startsWith('font/') ) {
|
||||
details.type = 'font';
|
||||
return;
|
||||
}
|
||||
if ( type.startsWith('image/') ) {
|
||||
details.type = 'image';
|
||||
return;
|
||||
}
|
||||
if ( type.startsWith('audio/') || type.startsWith('video/') ) {
|
||||
details.type = 'media';
|
||||
return;
|
||||
}
|
||||
// Try to extract type from response headers
|
||||
const ctype = this.headerValue(details.responseHeaders, 'content-type');
|
||||
if ( ctype.startsWith('font/') ) {
|
||||
details.type = 'font';
|
||||
} else if ( ctype.startsWith('image/') ) {
|
||||
details.type = 'image';
|
||||
} else if ( ctype.startsWith('audio/') || ctype.startsWith('video/') ) {
|
||||
details.type = 'media';
|
||||
}
|
||||
}
|
||||
|
||||
// https://www.reddit.com/r/uBlockOrigin/comments/9vcrk3/
|
||||
// Some types can be mapped from 'other', thus include 'other' if and
|
||||
// only if the caller is interested in at least one of those types.
|
||||
// only if the caller is interested in at least one of those types
|
||||
denormalizeTypes(types) {
|
||||
if ( types.length === 0 ) {
|
||||
return Array.from(this.validTypes);
|
||||
@@ -236,19 +209,43 @@ vAPI.prefetching = (( ) => {
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
vAPI.scriptletsInjector = ((doc, details) => {
|
||||
let script;
|
||||
try {
|
||||
script = doc.createElement('script');
|
||||
script.appendChild(doc.createTextNode(details.scriptlets));
|
||||
(doc.head || doc.documentElement).appendChild(script);
|
||||
self.uBO_scriptletsInjected = details.filters;
|
||||
} catch (ex) {
|
||||
}
|
||||
if ( script ) {
|
||||
script.remove();
|
||||
script.textContent = '';
|
||||
}
|
||||
}).toString();
|
||||
vAPI.scriptletsInjector = (( ) => {
|
||||
const parts = [
|
||||
'(',
|
||||
function(details) {
|
||||
if ( self.uBO_scriptletsInjected !== undefined ) { return; }
|
||||
const doc = document;
|
||||
const { location } = doc;
|
||||
if ( location === null ) { return; }
|
||||
const { hostname } = location;
|
||||
if ( hostname !== '' && details.hostname !== hostname ) { return; }
|
||||
let script;
|
||||
try {
|
||||
script = doc.createElement('script');
|
||||
script.appendChild(doc.createTextNode(details.scriptlets));
|
||||
(doc.head || doc.documentElement).appendChild(script);
|
||||
self.uBO_scriptletsInjected = details.filters;
|
||||
} catch {
|
||||
}
|
||||
if ( script ) {
|
||||
script.remove();
|
||||
script.textContent = '';
|
||||
}
|
||||
return 0;
|
||||
}.toString(),
|
||||
')(',
|
||||
'json-slot',
|
||||
');',
|
||||
];
|
||||
const jsonSlot = parts.indexOf('json-slot');
|
||||
return (hostname, details) => {
|
||||
parts[jsonSlot] = JSON.stringify({
|
||||
hostname,
|
||||
scriptlets: details.mainWorld,
|
||||
filters: details.filters,
|
||||
});
|
||||
return parts.join('');
|
||||
};
|
||||
})();
|
||||
|
||||
/******************************************************************************/
|
||||
|
@@ -19,41 +19,56 @@
|
||||
Home: https://github.com/gorhill/uBlock
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
// `webext` is a promisified api of `chrome`. Entries are added as
|
||||
// the promisification of uBO progress.
|
||||
|
||||
const promisifyNoFail = function(thisArg, fnName, outFn = r => r) {
|
||||
const fn = thisArg[fnName];
|
||||
return function() {
|
||||
return function(...args) {
|
||||
return new Promise(resolve => {
|
||||
fn.call(thisArg, ...arguments, function() {
|
||||
if ( chrome.runtime.lastError instanceof Object ) {
|
||||
void chrome.runtime.lastError.message;
|
||||
}
|
||||
resolve(outFn(...arguments));
|
||||
});
|
||||
try {
|
||||
fn.call(thisArg, ...args, function(...args) {
|
||||
void chrome.runtime.lastError;
|
||||
resolve(outFn(...args));
|
||||
});
|
||||
} catch(ex) {
|
||||
console.error(ex);
|
||||
resolve(outFn());
|
||||
}
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
const promisify = function(thisArg, fnName) {
|
||||
const fn = thisArg[fnName];
|
||||
return function() {
|
||||
return function(...args) {
|
||||
return new Promise((resolve, reject) => {
|
||||
fn.call(thisArg, ...arguments, function() {
|
||||
const lastError = chrome.runtime.lastError;
|
||||
if ( lastError instanceof Object ) {
|
||||
return reject(lastError.message);
|
||||
}
|
||||
resolve(...arguments);
|
||||
});
|
||||
try {
|
||||
fn.call(thisArg, ...args, function(...args) {
|
||||
const lastError = chrome.runtime.lastError;
|
||||
if ( lastError instanceof Object ) {
|
||||
return reject(lastError.message);
|
||||
}
|
||||
resolve(...args);
|
||||
});
|
||||
} catch(ex) {
|
||||
console.error(ex);
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
const webext = {
|
||||
// https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/alarms
|
||||
alarms: {
|
||||
clear: promisifyNoFail(chrome.alarms, 'clear'),
|
||||
clearAll: promisifyNoFail(chrome.alarms, 'clearAll'),
|
||||
create: promisifyNoFail(chrome.alarms, 'create'),
|
||||
get: promisifyNoFail(chrome.alarms, 'get'),
|
||||
getAll: promisifyNoFail(chrome.alarms, 'getAll'),
|
||||
onAlarm: chrome.alarms.onAlarm,
|
||||
},
|
||||
// https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/browserAction
|
||||
browserAction: {
|
||||
setBadgeBackgroundColor: promisifyNoFail(chrome.browserAction, 'setBadgeBackgroundColor'),
|
||||
@@ -95,6 +110,7 @@ const webext = {
|
||||
query: promisifyNoFail(chrome.tabs, 'query', tabs => Array.isArray(tabs) ? tabs : []),
|
||||
reload: promisifyNoFail(chrome.tabs, 'reload'),
|
||||
remove: promisifyNoFail(chrome.tabs, 'remove'),
|
||||
sendMessage: promisifyNoFail(chrome.tabs, 'sendMessage'),
|
||||
update: promisifyNoFail(chrome.tabs, 'update', tab => tab instanceof Object ? tab : null),
|
||||
},
|
||||
// https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webNavigation
|
||||
|
@@ -22,14 +22,10 @@
|
||||
|
||||
// For background page
|
||||
|
||||
/* globals browser */
|
||||
|
||||
'use strict';
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
import webext from './webext.js';
|
||||
import { ubolog } from './console.js';
|
||||
import webext from './webext.js';
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
@@ -52,7 +48,7 @@ vAPI.supportsUserStylesheets = vAPI.webextFlavor.soup.has('user_stylesheet');
|
||||
vAPI.app = {
|
||||
name: manifest.name.replace(/ dev\w+ build/, ''),
|
||||
version: (( ) => {
|
||||
let version = manifest.version;
|
||||
let version = manifest.version_name || manifest.version;
|
||||
const match = /(\d+\.\d+\.\d+)(?:\.(\d+))?/.exec(version);
|
||||
if ( match && match[2] ) {
|
||||
const v = parseInt(match[2], 10);
|
||||
@@ -109,9 +105,9 @@ vAPI.generateSecret = (size = 1) => {
|
||||
*
|
||||
* */
|
||||
|
||||
vAPI.sessionStorage = {
|
||||
vAPI.sessionStorage = browser.storage.session || {
|
||||
get() {
|
||||
return Promise.resolve({});
|
||||
return Promise.resolve();
|
||||
},
|
||||
set() {
|
||||
return Promise.resolve();
|
||||
@@ -122,7 +118,7 @@ vAPI.sessionStorage = {
|
||||
clear() {
|
||||
return Promise.resolve();
|
||||
},
|
||||
implemented: false,
|
||||
unavailable: true,
|
||||
};
|
||||
|
||||
/*******************************************************************************
|
||||
@@ -137,46 +133,21 @@ vAPI.sessionStorage = {
|
||||
|
||||
vAPI.storage = {
|
||||
get(key, ...args) {
|
||||
if ( vAPI.sessionStorage.implemented !== true ) {
|
||||
return webext.storage.local.get(key, ...args).catch(reason => {
|
||||
console.log(reason);
|
||||
});
|
||||
}
|
||||
return vAPI.sessionStorage.get(key, ...args).then(bin => {
|
||||
const size = Object.keys(bin).length;
|
||||
if ( size === 1 && typeof key === 'string' && bin[key] === null ) {
|
||||
return {};
|
||||
}
|
||||
if ( size !== 0 ) { return bin; }
|
||||
return webext.storage.local.get(key, ...args).then(bin => {
|
||||
if ( bin instanceof Object === false ) { return bin; }
|
||||
// Mirror empty result as null value in order to prevent
|
||||
// from falling back to storage.local when there is no need.
|
||||
const tomirror = Object.assign({}, bin);
|
||||
if ( typeof key === 'string' && Object.keys(bin).length === 0 ) {
|
||||
Object.assign(tomirror, { [key]: null });
|
||||
}
|
||||
vAPI.sessionStorage.set(tomirror);
|
||||
return bin;
|
||||
}).catch(reason => {
|
||||
console.log(reason);
|
||||
});
|
||||
return webext.storage.local.get(key, ...args).catch(reason => {
|
||||
console.log(reason);
|
||||
});
|
||||
},
|
||||
set(...args) {
|
||||
vAPI.sessionStorage.set(...args);
|
||||
return webext.storage.local.set(...args).catch(reason => {
|
||||
console.log(reason);
|
||||
});
|
||||
},
|
||||
remove(...args) {
|
||||
vAPI.sessionStorage.remove(...args);
|
||||
return webext.storage.local.remove(...args).catch(reason => {
|
||||
console.log(reason);
|
||||
});
|
||||
},
|
||||
clear(...args) {
|
||||
vAPI.sessionStorage.clear(...args);
|
||||
return webext.storage.local.clear(...args).catch(reason => {
|
||||
console.log(reason);
|
||||
});
|
||||
@@ -216,9 +187,9 @@ vAPI.browserSettings = (( ) => {
|
||||
|
||||
set: function(details) {
|
||||
for ( const setting in details ) {
|
||||
if ( details.hasOwnProperty(setting) === false ) { continue; }
|
||||
if ( Object.hasOwn(details, setting) === false ) { continue; }
|
||||
switch ( setting ) {
|
||||
case 'prefetching':
|
||||
case 'prefetching': {
|
||||
const enabled = !!details[setting];
|
||||
if ( enabled ) {
|
||||
bp.network.networkPredictionEnabled.clear({
|
||||
@@ -234,9 +205,9 @@ vAPI.browserSettings = (( ) => {
|
||||
vAPI.prefetching(enabled);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'hyperlinkAuditing':
|
||||
if ( !!details[setting] ) {
|
||||
}
|
||||
case 'hyperlinkAuditing': {
|
||||
if ( details[setting] ) {
|
||||
bp.websites.hyperlinkAuditingEnabled.clear({
|
||||
scope: 'regular',
|
||||
});
|
||||
@@ -247,7 +218,7 @@ vAPI.browserSettings = (( ) => {
|
||||
});
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
case 'webrtcIPAddress': {
|
||||
// https://github.com/uBlockOrigin/uBlock-issues/issues/1928
|
||||
// https://www.reddit.com/r/uBlockOrigin/comments/sl7p74/
|
||||
@@ -339,14 +310,14 @@ vAPI.Tabs = class {
|
||||
}
|
||||
this.onRemovedHandler(tabId, details);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
async executeScript() {
|
||||
async executeScript(...args) {
|
||||
let result;
|
||||
try {
|
||||
result = await webext.tabs.executeScript(...arguments);
|
||||
result = await webext.tabs.executeScript(...args);
|
||||
}
|
||||
catch(reason) {
|
||||
catch {
|
||||
}
|
||||
return Array.isArray(result) ? result : [];
|
||||
}
|
||||
@@ -360,7 +331,7 @@ vAPI.Tabs = class {
|
||||
try {
|
||||
tab = await webext.tabs.get(tabId);
|
||||
}
|
||||
catch(reason) {
|
||||
catch {
|
||||
}
|
||||
return tab instanceof Object ? tab : null;
|
||||
}
|
||||
@@ -377,7 +348,7 @@ vAPI.Tabs = class {
|
||||
try {
|
||||
await webext.tabs.insertCSS(...arguments);
|
||||
}
|
||||
catch(reason) {
|
||||
catch {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -386,7 +357,7 @@ vAPI.Tabs = class {
|
||||
try {
|
||||
tabs = await webext.tabs.query(queryInfo);
|
||||
}
|
||||
catch(reason) {
|
||||
catch {
|
||||
}
|
||||
return Array.isArray(tabs) ? tabs : [];
|
||||
}
|
||||
@@ -398,7 +369,7 @@ vAPI.Tabs = class {
|
||||
try {
|
||||
await webext.tabs.removeCSS(...arguments);
|
||||
}
|
||||
catch(reason) {
|
||||
catch {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -458,22 +429,26 @@ vAPI.Tabs = class {
|
||||
// For some reasons, some platforms do not honor the left,top
|
||||
// position when specified. I found that further calling
|
||||
// windows.update again with the same position _may_ help.
|
||||
//
|
||||
// https://github.com/uBlockOrigin/uBlock-issues/issues/2249
|
||||
// Mind that the creation of the popup window might fail.
|
||||
if ( details.popup !== undefined && vAPI.windows instanceof Object ) {
|
||||
const createDetails = {
|
||||
const basicDetails = {
|
||||
url: details.url,
|
||||
type: details.popup,
|
||||
};
|
||||
if ( details.box instanceof Object ) {
|
||||
Object.assign(createDetails, details.box);
|
||||
const shouldRestorePosition = details.box instanceof Object;
|
||||
const extraDetails = shouldRestorePosition
|
||||
? Object.assign({}, basicDetails, details.box)
|
||||
: basicDetails;
|
||||
const win = await vAPI.windows.create(extraDetails);
|
||||
if ( win === null ) {
|
||||
if ( shouldRestorePosition === false ) { return; }
|
||||
return vAPI.windows.create(basicDetails);
|
||||
}
|
||||
const win = await vAPI.windows.create(createDetails);
|
||||
if ( win === null ) { return; }
|
||||
if ( details.box instanceof Object === false ) { return; }
|
||||
if (
|
||||
win.left === details.box.left &&
|
||||
win.top === details.box.top
|
||||
) {
|
||||
return;
|
||||
if ( shouldRestorePosition === false ) { return; }
|
||||
if ( win.left === details.box.left ) {
|
||||
if ( win.top === details.box.top ) { return; }
|
||||
}
|
||||
vAPI.windows.update(win.id, {
|
||||
left: details.box.left,
|
||||
@@ -552,7 +527,7 @@ vAPI.Tabs = class {
|
||||
try {
|
||||
tab = await webext.tabs.update(...arguments);
|
||||
}
|
||||
catch (reason) {
|
||||
catch {
|
||||
}
|
||||
return tab instanceof Object ? tab : null;
|
||||
}
|
||||
@@ -569,7 +544,7 @@ vAPI.Tabs = class {
|
||||
targetURL = vAPI.getURL(targetURL);
|
||||
}
|
||||
|
||||
vAPI.tabs.update(tabId, { url: targetURL });
|
||||
return vAPI.tabs.update(tabId, { url: targetURL });
|
||||
}
|
||||
|
||||
async remove(tabId) {
|
||||
@@ -578,7 +553,7 @@ vAPI.Tabs = class {
|
||||
try {
|
||||
await webext.tabs.remove(tabId);
|
||||
}
|
||||
catch (reason) {
|
||||
catch {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -591,7 +566,7 @@ vAPI.Tabs = class {
|
||||
{ bypassCache: bypassCache === true }
|
||||
);
|
||||
}
|
||||
catch (reason) {
|
||||
catch {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -690,7 +665,7 @@ if ( webext.windows instanceof Object ) {
|
||||
try {
|
||||
win = await webext.windows.get(...arguments);
|
||||
}
|
||||
catch (reason) {
|
||||
catch {
|
||||
}
|
||||
return win instanceof Object ? win : null;
|
||||
},
|
||||
@@ -699,7 +674,7 @@ if ( webext.windows instanceof Object ) {
|
||||
try {
|
||||
win = await webext.windows.create(...arguments);
|
||||
}
|
||||
catch (reason) {
|
||||
catch {
|
||||
}
|
||||
return win instanceof Object ? win : null;
|
||||
},
|
||||
@@ -708,7 +683,7 @@ if ( webext.windows instanceof Object ) {
|
||||
try {
|
||||
win = await webext.windows.update(...arguments);
|
||||
}
|
||||
catch (reason) {
|
||||
catch {
|
||||
}
|
||||
return win instanceof Object ? win : null;
|
||||
},
|
||||
@@ -724,7 +699,7 @@ if ( webext.browserAction instanceof Object ) {
|
||||
try {
|
||||
await webext.browserAction.setTitle(...arguments);
|
||||
}
|
||||
catch (reason) {
|
||||
catch {
|
||||
}
|
||||
},
|
||||
};
|
||||
@@ -734,28 +709,28 @@ if ( webext.browserAction instanceof Object ) {
|
||||
try {
|
||||
await webext.browserAction.setBadgeTextColor(...arguments);
|
||||
}
|
||||
catch (reason) {
|
||||
catch {
|
||||
}
|
||||
};
|
||||
vAPI.browserAction.setBadgeBackgroundColor = async function() {
|
||||
try {
|
||||
await webext.browserAction.setBadgeBackgroundColor(...arguments);
|
||||
}
|
||||
catch (reason) {
|
||||
catch {
|
||||
}
|
||||
};
|
||||
vAPI.browserAction.setBadgeText = async function() {
|
||||
try {
|
||||
await webext.browserAction.setBadgeText(...arguments);
|
||||
}
|
||||
catch (reason) {
|
||||
catch {
|
||||
}
|
||||
};
|
||||
vAPI.browserAction.setIcon = async function() {
|
||||
try {
|
||||
await webext.browserAction.setIcon(...arguments);
|
||||
}
|
||||
catch (reason) {
|
||||
catch {
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -829,7 +804,7 @@ if ( webext.browserAction instanceof Object ) {
|
||||
let data;
|
||||
try {
|
||||
data = ctx.getImageData(0, 0, w, h);
|
||||
} catch(ex) {
|
||||
} catch {
|
||||
}
|
||||
return data;
|
||||
};
|
||||
@@ -890,8 +865,8 @@ if ( webext.browserAction instanceof Object ) {
|
||||
const hasUnprocessedRequest = vAPI.net && vAPI.net.hasUnprocessedRequest(tabId);
|
||||
const { parts, state } = details;
|
||||
const { badge, color } = hasUnprocessedRequest
|
||||
? { badge: '!', color: '#FC0' }
|
||||
: details;
|
||||
? { badge: '!', color: '#FC0' }
|
||||
: details;
|
||||
|
||||
if ( browserAction.setIcon !== undefined ) {
|
||||
if ( parts === undefined || (parts & 0b0001) !== 0 ) {
|
||||
@@ -980,6 +955,7 @@ vAPI.messaging = {
|
||||
|
||||
onPortDisconnect: function(port) {
|
||||
this.ports.delete(port.name);
|
||||
void browser.runtime.lastError;
|
||||
},
|
||||
|
||||
// https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/Port
|
||||
@@ -1050,7 +1026,7 @@ vAPI.messaging = {
|
||||
});
|
||||
break;
|
||||
}
|
||||
case 'userCSS':
|
||||
case 'userCSS': {
|
||||
if ( tabId === undefined ) { break; }
|
||||
const promises = [];
|
||||
if ( msg.add ) {
|
||||
@@ -1081,6 +1057,9 @@ vAPI.messaging = {
|
||||
});
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
// Use a wrapper to avoid closure and to allow reuse.
|
||||
@@ -1102,7 +1081,7 @@ vAPI.messaging = {
|
||||
msgId: this.msgId,
|
||||
msg: response !== undefined ? response : null,
|
||||
});
|
||||
} catch (ex) {
|
||||
} catch {
|
||||
this.messaging.onPortDisconnect(this.port);
|
||||
}
|
||||
// Store for reuse
|
||||
@@ -1238,7 +1217,7 @@ vAPI.Net = class {
|
||||
{
|
||||
const wrrt = browser.webRequest.ResourceType;
|
||||
for ( const typeKey in wrrt ) {
|
||||
if ( wrrt.hasOwnProperty(typeKey) ) {
|
||||
if ( Object.hasOwn(wrrt, typeKey) ) {
|
||||
this.validTypes.add(wrrt[typeKey]);
|
||||
}
|
||||
}
|
||||
@@ -1400,6 +1379,14 @@ vAPI.Net = class {
|
||||
if ( this.suspendDepth !== 0 ) { return; }
|
||||
this.unsuspendAllRequests(discard);
|
||||
}
|
||||
headerValue(headers, name) {
|
||||
for ( const header of headers ) {
|
||||
if ( header.name.toLowerCase() === name ) {
|
||||
return header.value.trim();
|
||||
}
|
||||
}
|
||||
return '';
|
||||
}
|
||||
static canSuspend() {
|
||||
return false;
|
||||
}
|
||||
@@ -1483,7 +1470,7 @@ vAPI.adminStorage = (( ) => {
|
||||
let store;
|
||||
try {
|
||||
store = await webext.storage.managed.get();
|
||||
} catch(ex) {
|
||||
} catch {
|
||||
}
|
||||
vAPI.storage.set({ cachedManagedStorage: store || {} });
|
||||
};
|
||||
@@ -1498,7 +1485,7 @@ vAPI.adminStorage = (( ) => {
|
||||
} else {
|
||||
bin = bin.cachedManagedStorage;
|
||||
}
|
||||
} catch(ex) {
|
||||
} catch {
|
||||
bin = {};
|
||||
}
|
||||
cacheManagedStorage();
|
||||
@@ -1541,10 +1528,7 @@ vAPI.localStorage = {
|
||||
if ( this.cache instanceof Promise ) { return this.cache; }
|
||||
if ( this.cache instanceof Object ) { return this.cache; }
|
||||
this.cache = vAPI.storage.get('localStorage').then(bin => {
|
||||
this.cache = bin instanceof Object &&
|
||||
bin.localStorage instanceof Object
|
||||
? bin.localStorage
|
||||
: {};
|
||||
this.cache = bin && bin.localStorage || {};
|
||||
});
|
||||
return this.cache;
|
||||
},
|
||||
@@ -1671,10 +1655,7 @@ vAPI.cloud = (( ) => {
|
||||
|
||||
const push = async function(details) {
|
||||
const { datakey, data, encode } = details;
|
||||
if (
|
||||
data === undefined ||
|
||||
typeof data === 'string' && data === ''
|
||||
) {
|
||||
if ( data === undefined || typeof data === 'string' && data === '' ) {
|
||||
return deleteChunks(datakey, 0);
|
||||
}
|
||||
const item = {
|
||||
@@ -1682,10 +1663,9 @@ vAPI.cloud = (( ) => {
|
||||
tstamp: Date.now(),
|
||||
data,
|
||||
};
|
||||
const json = JSON.stringify(item);
|
||||
const encoded = encode instanceof Function
|
||||
? await encode(json)
|
||||
: json;
|
||||
? await encode(item)
|
||||
: JSON.stringify(item);
|
||||
|
||||
// Chunkify taking into account QUOTA_BYTES_PER_ITEM:
|
||||
// https://developer.chrome.com/extensions/storage#property-sync
|
||||
@@ -1705,7 +1685,7 @@ vAPI.cloud = (( ) => {
|
||||
// operation to fail.
|
||||
try {
|
||||
await deleteChunks(datakey, chunkCount + 1);
|
||||
} catch (reason) {
|
||||
} catch {
|
||||
}
|
||||
|
||||
// Push the data to browser-provided cloud storage.
|
||||
@@ -1750,13 +1730,16 @@ vAPI.cloud = (( ) => {
|
||||
i += 1;
|
||||
}
|
||||
encoded = encoded.join('');
|
||||
const json = decode instanceof Function
|
||||
? await decode(encoded)
|
||||
: encoded;
|
||||
|
||||
let entry = null;
|
||||
try {
|
||||
entry = JSON.parse(json);
|
||||
} catch(ex) {
|
||||
if ( decode instanceof Function ) {
|
||||
entry = await decode(encoded) || null;
|
||||
}
|
||||
if ( typeof entry === 'string' ) {
|
||||
entry = JSON.parse(entry);
|
||||
}
|
||||
} catch {
|
||||
}
|
||||
return entry;
|
||||
};
|
||||
@@ -1777,7 +1760,7 @@ vAPI.cloud = (( ) => {
|
||||
webext.storage.sync.getBytesInUse(keys),
|
||||
webext.storage.sync.getBytesInUse(null),
|
||||
]);
|
||||
} catch(ex) {
|
||||
} catch {
|
||||
}
|
||||
if ( Array.isArray(results) === false ) { return; }
|
||||
return { used: results[0], total: results[1], max: QUOTA_BYTES };
|
||||
@@ -1805,15 +1788,24 @@ vAPI.cloud = (( ) => {
|
||||
/******************************************************************************/
|
||||
/******************************************************************************/
|
||||
|
||||
vAPI.alarms = browser.alarms || {
|
||||
create() {
|
||||
vAPI.alarms = {
|
||||
create(...args) {
|
||||
webext.alarms.create(...args);
|
||||
},
|
||||
clear() {
|
||||
createIfNotPresent(name, ...args) {
|
||||
webext.alarms.get(name).then(details => {
|
||||
if ( details !== undefined ) { return; }
|
||||
webext.alarms.create(name, ...args);
|
||||
});
|
||||
},
|
||||
async clear(...args) {
|
||||
return webext.alarms.clear(...args);
|
||||
},
|
||||
onAlarm: {
|
||||
addListener() {
|
||||
}
|
||||
}
|
||||
addListener(...args) {
|
||||
webext.alarms.onAlarm.addListener(...args);
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
@@ -22,10 +22,6 @@
|
||||
|
||||
// For non-background page
|
||||
|
||||
/* globals browser */
|
||||
|
||||
'use strict';
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// https://github.com/chrisaljoudi/uBlock/issues/456
|
||||
@@ -85,6 +81,7 @@ vAPI.messaging = {
|
||||
portTimerDelay: 10000,
|
||||
msgIdGenerator: 1,
|
||||
pending: new Map(),
|
||||
waitStartTime: 0,
|
||||
shuttingDown: false,
|
||||
|
||||
shutdown: function() {
|
||||
@@ -115,16 +112,11 @@ vAPI.messaging = {
|
||||
// revisited to isolate the picker dialog DOM from the page DOM.
|
||||
messageListener: function(details) {
|
||||
if ( typeof details !== 'object' || details === null ) { return; }
|
||||
|
||||
// Response to specific message previously sent
|
||||
if ( details.msgId !== undefined ) {
|
||||
const resolver = this.pending.get(details.msgId);
|
||||
if ( resolver !== undefined ) {
|
||||
this.pending.delete(details.msgId);
|
||||
resolver(details.msg);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if ( details.msgId === undefined ) { return; }
|
||||
const resolver = this.pending.get(details.msgId);
|
||||
if ( resolver === undefined ) { return; }
|
||||
this.pending.delete(details.msgId);
|
||||
resolver(details.msg);
|
||||
},
|
||||
messageListenerBound: null,
|
||||
|
||||
@@ -173,7 +165,7 @@ vAPI.messaging = {
|
||||
}
|
||||
try {
|
||||
this.port = browser.runtime.connect({name: vAPI.sessionId}) || null;
|
||||
} catch (ex) {
|
||||
} catch {
|
||||
this.port = null;
|
||||
}
|
||||
// Not having a valid port at this point means the main process is
|
||||
@@ -203,13 +195,18 @@ vAPI.messaging = {
|
||||
// the main process is no longer reachable: memory leaks and bad
|
||||
// performance become a risk -- especially for long-lived, dynamic
|
||||
// pages. Guard against this.
|
||||
if ( this.pending.size > 50 ) {
|
||||
vAPI.shutdown.exec();
|
||||
if ( this.pending.size > 64 ) {
|
||||
if ( (Date.now() - this.waitStartTime) > 60000 ) {
|
||||
vAPI.shutdown.exec();
|
||||
}
|
||||
}
|
||||
const port = this.getPort();
|
||||
if ( port === null ) {
|
||||
return Promise.resolve();
|
||||
}
|
||||
if ( this.pending.size === 0 ) {
|
||||
this.waitStartTime = Date.now();
|
||||
}
|
||||
const msgId = this.msgIdGenerator++;
|
||||
const promise = new Promise(resolve => {
|
||||
this.pending.set(msgId, resolve);
|
||||
|
@@ -22,19 +22,14 @@
|
||||
|
||||
// For background page or non-background pages
|
||||
|
||||
/* global browser */
|
||||
|
||||
'use strict';
|
||||
|
||||
/******************************************************************************/
|
||||
/******************************************************************************/
|
||||
|
||||
vAPI.T0 = Date.now();
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
vAPI.setTimeout = vAPI.setTimeout || self.setTimeout.bind(self);
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
vAPI.defer = {
|
||||
create(callback) {
|
||||
return new this.Client(callback);
|
||||
@@ -168,9 +163,12 @@ vAPI.webextFlavor = {
|
||||
|
||||
// This is always true.
|
||||
soup.add('ublock').add('webext');
|
||||
soup.add('ipaddress');
|
||||
|
||||
// Whether this is a dev build.
|
||||
if ( /^\d+\.\d+\.\d+\D/.test(browser.runtime.getManifest().version) ) {
|
||||
const manifest = browser.runtime.getManifest();
|
||||
const version = manifest.version_name || manifest.version;
|
||||
if ( /^\d+\.\d+\.\d+\D/.test(version) ) {
|
||||
soup.add('devbuild');
|
||||
}
|
||||
|
||||
@@ -182,8 +180,11 @@ vAPI.webextFlavor = {
|
||||
soup.add('native_css_has');
|
||||
}
|
||||
|
||||
const extensionOrigin = browser.runtime.getURL('');
|
||||
|
||||
// Order of tests is important
|
||||
if ( browser.runtime.getURL('').startsWith('moz-extension://') ) {
|
||||
flavor.isGecko = extensionOrigin.startsWith('moz-extension://');
|
||||
if ( flavor.isGecko ) {
|
||||
soup.add('firefox')
|
||||
.add('user_stylesheet')
|
||||
.add('html_filtering');
|
||||
|
@@ -19,10 +19,6 @@
|
||||
Home: https://github.com/gorhill/uBlock
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
/* global HTMLDocument, XMLDocument */
|
||||
|
||||
// For background page, auxiliary pages, and content scripts.
|
||||
|
||||
/******************************************************************************/
|
||||
|
@@ -19,22 +19,12 @@
|
||||
Home: https://github.com/gorhill/uBlock
|
||||
*/
|
||||
|
||||
/* eslint-disable-next-line no-redeclare */
|
||||
/* globals process */
|
||||
|
||||
'use strict';
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
import { strict as assert } from 'assert';
|
||||
import { StaticNetFilteringEngine, enableWASM } from './index.js';
|
||||
import { mkdir, readFile, writeFile } from 'fs/promises';
|
||||
import { createRequire } from 'module';
|
||||
import { readFile, writeFile, mkdir } from 'fs/promises';
|
||||
import { dirname } from 'path';
|
||||
import { fileURLToPath } from 'url';
|
||||
|
||||
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||||
|
||||
import { enableWASM, StaticNetFilteringEngine } from './index.js';
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
|
@@ -17,10 +17,10 @@
|
||||
"browser_specific_settings": {
|
||||
"gecko": {
|
||||
"id": "uBlock0@raymondhill.net",
|
||||
"strict_min_version": "78.0"
|
||||
"strict_min_version": "92.0"
|
||||
},
|
||||
"gecko_android": {
|
||||
"strict_min_version": "79.0"
|
||||
"strict_min_version": "92.0"
|
||||
}
|
||||
},
|
||||
"commands": {
|
||||
@@ -71,8 +71,7 @@
|
||||
"https://filterlists.com/*",
|
||||
"https://forums.lanik.us/*",
|
||||
"https://github.com/*",
|
||||
"https://*.github.io/*",
|
||||
"https://*.letsblock.it/*"
|
||||
"https://*.github.io/*"
|
||||
],
|
||||
"js": [
|
||||
"/js/scriptlets/subscriber.js"
|
||||
@@ -100,7 +99,8 @@
|
||||
"32": "img/ublock.svg",
|
||||
"48": "img/ublock.svg",
|
||||
"64": "img/ublock.svg",
|
||||
"96": "img/ublock.svg"
|
||||
"96": "img/ublock.svg",
|
||||
"128": "img/ublock.svg"
|
||||
},
|
||||
"manifest_version": 2,
|
||||
"name": "uBlock Origin",
|
||||
|
@@ -19,12 +19,6 @@
|
||||
Home: https://github.com/gorhill/uBlock
|
||||
*/
|
||||
|
||||
/* globals browser */
|
||||
|
||||
'use strict';
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
import {
|
||||
domainFromHostname,
|
||||
hostnameFromNetworkURL,
|
||||
@@ -32,26 +26,20 @@ import {
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// Canonical name-uncloaking feature.
|
||||
let cnameUncloakEnabled = browser.dns instanceof Object;
|
||||
let cnameUncloakProxied = false;
|
||||
|
||||
// https://github.com/uBlockOrigin/uBlock-issues/issues/911
|
||||
// We detect here whether network requests are proxied, and if so,
|
||||
// de-aliasing of hostnames will be disabled to avoid possible
|
||||
// DNS leaks.
|
||||
const proxyDetector = function(details) {
|
||||
if ( details.proxyInfo instanceof Object ) {
|
||||
cnameUncloakEnabled = false;
|
||||
proxyDetectorTryCount = 0;
|
||||
const dnsAPI = browser.dns || {
|
||||
resolve() {
|
||||
return Promise.resolve();
|
||||
}
|
||||
if ( proxyDetectorTryCount === 0 ) {
|
||||
browser.webRequest.onHeadersReceived.removeListener(proxyDetector);
|
||||
return;
|
||||
}
|
||||
proxyDetectorTryCount -= 1;
|
||||
};
|
||||
let proxyDetectorTryCount = 0;
|
||||
|
||||
const isPromise = o => o instanceof Promise;
|
||||
const isResolvedObject = o => o instanceof Object &&
|
||||
o instanceof Promise === false;
|
||||
const reIPv4 = /^\d+\.\d+\.\d+\.\d+$/
|
||||
const skipDNS = proxyInfo =>
|
||||
proxyInfo && (proxyInfo.proxyDNS || proxyInfo.type?.charCodeAt(0) === 0x68 /* h */);
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// Related issues:
|
||||
// - https://github.com/gorhill/uBlock/issues/1327
|
||||
@@ -64,26 +52,27 @@ vAPI.Net = class extends vAPI.Net {
|
||||
constructor() {
|
||||
super();
|
||||
this.pendingRequests = [];
|
||||
this.canUncloakCnames = browser.dns instanceof Object;
|
||||
this.cnames = new Map([ [ '', null ] ]);
|
||||
this.dnsList = []; // ring buffer
|
||||
this.dnsWritePtr = 0; // next write pointer in ring buffer
|
||||
this.dnsMaxCount = 512; // max size of ring buffer
|
||||
this.dnsDict = new Map(); // hn to index in ring buffer
|
||||
this.dnsCacheTTL = 600; // TTL in seconds
|
||||
this.canUncloakCnames = true;
|
||||
this.cnameUncloakEnabled = true;
|
||||
this.cnameIgnoreList = null;
|
||||
this.cnameIgnore1stParty = true;
|
||||
this.cnameIgnoreExceptions = true;
|
||||
this.cnameIgnoreRootDocument = true;
|
||||
this.cnameMaxTTL = 120;
|
||||
this.cnameReplayFullURL = false;
|
||||
this.cnameFlushTime = Date.now() + this.cnameMaxTTL * 60000;
|
||||
this.dnsResolveEnabled = true;
|
||||
}
|
||||
|
||||
setOptions(options) {
|
||||
super.setOptions(options);
|
||||
if ( 'cnameUncloakEnabled' in options ) {
|
||||
cnameUncloakEnabled =
|
||||
this.canUncloakCnames &&
|
||||
this.cnameUncloakEnabled =
|
||||
options.cnameUncloakEnabled !== false;
|
||||
}
|
||||
if ( 'cnameUncloakProxied' in options ) {
|
||||
cnameUncloakProxied = options.cnameUncloakProxied === true;
|
||||
}
|
||||
if ( 'cnameIgnoreList' in options ) {
|
||||
this.cnameIgnoreList =
|
||||
this.regexFromStrList(options.cnameIgnoreList);
|
||||
@@ -100,54 +89,41 @@ vAPI.Net = class extends vAPI.Net {
|
||||
this.cnameIgnoreRootDocument =
|
||||
options.cnameIgnoreRootDocument !== false;
|
||||
}
|
||||
if ( 'cnameMaxTTL' in options ) {
|
||||
this.cnameMaxTTL = options.cnameMaxTTL || 120;
|
||||
}
|
||||
if ( 'cnameReplayFullURL' in options ) {
|
||||
this.cnameReplayFullURL = options.cnameReplayFullURL === true;
|
||||
}
|
||||
this.cnames.clear(); this.cnames.set('', null);
|
||||
this.cnameFlushTime = Date.now() + this.cnameMaxTTL * 60000;
|
||||
// https://github.com/uBlockOrigin/uBlock-issues/issues/911
|
||||
// Install/remove proxy detector.
|
||||
if ( vAPI.webextFlavor.major < 80 ) {
|
||||
const wrohr = browser.webRequest.onHeadersReceived;
|
||||
if ( cnameUncloakEnabled === false || cnameUncloakProxied ) {
|
||||
if ( wrohr.hasListener(proxyDetector) ) {
|
||||
wrohr.removeListener(proxyDetector);
|
||||
}
|
||||
} else if ( wrohr.hasListener(proxyDetector) === false ) {
|
||||
wrohr.addListener(
|
||||
proxyDetector,
|
||||
{ urls: [ '*://*/*' ] },
|
||||
[ 'blocking' ]
|
||||
);
|
||||
}
|
||||
proxyDetectorTryCount = 32;
|
||||
if ( 'dnsCacheTTL' in options ) {
|
||||
this.dnsCacheTTL = options.dnsCacheTTL;
|
||||
}
|
||||
if ( 'dnsResolveEnabled' in options ) {
|
||||
this.dnsResolveEnabled = options.dnsResolveEnabled === true;
|
||||
}
|
||||
this.dnsList.fill(null);
|
||||
this.dnsDict.clear();
|
||||
}
|
||||
normalizeDetails(details) {
|
||||
const type = details.type;
|
||||
|
||||
normalizeDetails(details) {
|
||||
// https://github.com/uBlockOrigin/uBlock-issues/issues/3379
|
||||
if ( skipDNS(details.proxyInfo) && details.ip === '0.0.0.0' ) {
|
||||
details.ip = null;
|
||||
}
|
||||
const type = details.type;
|
||||
if ( type === 'imageset' ) {
|
||||
details.type = 'image';
|
||||
return;
|
||||
}
|
||||
|
||||
if ( type !== 'object' ) { return; }
|
||||
// Try to extract type from response headers if present.
|
||||
if ( details.responseHeaders === undefined ) { return; }
|
||||
const ctype = this.headerValue(details.responseHeaders, 'content-type');
|
||||
// https://github.com/uBlockOrigin/uBlock-issues/issues/345
|
||||
// Re-categorize an embedded object as a `sub_frame` if its
|
||||
// content type is that of a HTML document.
|
||||
if ( type === 'object' && Array.isArray(details.responseHeaders) ) {
|
||||
for ( const header of details.responseHeaders ) {
|
||||
if ( header.name.toLowerCase() === 'content-type' ) {
|
||||
if ( header.value.startsWith('text/html') ) {
|
||||
details.type = 'sub_frame';
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ( ctype === 'text/html' ) {
|
||||
details.type = 'sub_frame';
|
||||
}
|
||||
}
|
||||
|
||||
denormalizeTypes(types) {
|
||||
if ( types.length === 0 ) {
|
||||
return Array.from(this.validTypes);
|
||||
@@ -166,77 +142,21 @@ vAPI.Net = class extends vAPI.Net {
|
||||
}
|
||||
return Array.from(out);
|
||||
}
|
||||
|
||||
canonicalNameFromHostname(hn) {
|
||||
const cnRecord = this.cnames.get(hn);
|
||||
if ( cnRecord !== undefined && cnRecord !== null ) {
|
||||
return cnRecord.cname;
|
||||
}
|
||||
}
|
||||
processCanonicalName(hn, cnRecord, details) {
|
||||
if ( cnRecord === null ) { return; }
|
||||
if ( cnRecord.isRootDocument ) { return; }
|
||||
const hnBeg = details.url.indexOf(hn);
|
||||
if ( hnBeg === -1 ) { return; }
|
||||
const oldURL = details.url;
|
||||
let newURL = oldURL.slice(0, hnBeg) + cnRecord.cname;
|
||||
const hnEnd = hnBeg + hn.length;
|
||||
if ( this.cnameReplayFullURL ) {
|
||||
newURL += oldURL.slice(hnEnd);
|
||||
} else {
|
||||
const pathBeg = oldURL.indexOf('/', hnEnd);
|
||||
if ( pathBeg !== -1 ) {
|
||||
newURL += oldURL.slice(hnEnd, pathBeg + 1);
|
||||
}
|
||||
}
|
||||
details.url = newURL;
|
||||
details.aliasURL = oldURL;
|
||||
return super.onBeforeSuspendableRequest(details);
|
||||
}
|
||||
recordCanonicalName(hn, record, isRootDocument) {
|
||||
if ( (this.cnames.size & 0b111111) === 0 ) {
|
||||
const now = Date.now();
|
||||
if ( now >= this.cnameFlushTime ) {
|
||||
this.cnames.clear(); this.cnames.set('', null);
|
||||
this.cnameFlushTime = now + this.cnameMaxTTL * 60000;
|
||||
}
|
||||
}
|
||||
let cname =
|
||||
typeof record.canonicalName === 'string' &&
|
||||
record.canonicalName !== hn
|
||||
? record.canonicalName
|
||||
: '';
|
||||
if (
|
||||
cname !== '' &&
|
||||
this.cnameIgnore1stParty &&
|
||||
domainFromHostname(cname) === domainFromHostname(hn)
|
||||
) {
|
||||
cname = '';
|
||||
}
|
||||
if (
|
||||
cname !== '' &&
|
||||
this.cnameIgnoreList !== null &&
|
||||
this.cnameIgnoreList.test(cname)
|
||||
) {
|
||||
cname = '';
|
||||
}
|
||||
const cnRecord = cname !== '' ? { cname, isRootDocument } : null;
|
||||
this.cnames.set(hn, cnRecord);
|
||||
return cnRecord;
|
||||
if ( hn === '' ) { return; }
|
||||
const dnsEntry = this.dnsFromCache(hn, true);
|
||||
if ( isResolvedObject(dnsEntry) === false ) { return; }
|
||||
return dnsEntry.cname;
|
||||
}
|
||||
|
||||
regexFromStrList(list) {
|
||||
if (
|
||||
typeof list !== 'string' ||
|
||||
list.length === 0 ||
|
||||
list === 'unset' ||
|
||||
browser.dns instanceof Object === false
|
||||
) {
|
||||
if ( typeof list !== 'string' || list.length === 0 || list === 'unset' ) {
|
||||
return null;
|
||||
}
|
||||
if ( list === '*' ) {
|
||||
return /^./;
|
||||
}
|
||||
if ( list === '*' ) { return /^./; }
|
||||
return new RegExp(
|
||||
'(?:^|\.)(?:' +
|
||||
'(?:^|\\.)(?:' +
|
||||
list.trim()
|
||||
.split(/\s+/)
|
||||
.map(a => a.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'))
|
||||
@@ -244,9 +164,14 @@ vAPI.Net = class extends vAPI.Net {
|
||||
')$'
|
||||
);
|
||||
}
|
||||
|
||||
onBeforeSuspendableRequest(details) {
|
||||
const hn = hostnameFromNetworkURL(details.url);
|
||||
const dnsEntry = this.dnsFromCache(hn);
|
||||
if ( isResolvedObject(dnsEntry) && dnsEntry.ip ) {
|
||||
details.ip = dnsEntry.ip;
|
||||
}
|
||||
const r = super.onBeforeSuspendableRequest(details);
|
||||
if ( cnameUncloakEnabled === false ) { return r; }
|
||||
if ( r !== undefined ) {
|
||||
if (
|
||||
r.cancel === true ||
|
||||
@@ -256,24 +181,144 @@ vAPI.Net = class extends vAPI.Net {
|
||||
return r;
|
||||
}
|
||||
}
|
||||
const hn = hostnameFromNetworkURL(details.url);
|
||||
const cnRecord = this.cnames.get(hn);
|
||||
if ( cnRecord !== undefined ) {
|
||||
return this.processCanonicalName(hn, cnRecord, details);
|
||||
if ( isResolvedObject(dnsEntry) ) {
|
||||
return this.onAfterDNSResolution(hn, details, dnsEntry);
|
||||
}
|
||||
const documentUrl = details.documentUrl || details.url;
|
||||
const isRootDocument = this.cnameIgnoreRootDocument &&
|
||||
hn === hostnameFromNetworkURL(documentUrl);
|
||||
return browser.dns.resolve(hn, [ 'canonical_name' ]).then(
|
||||
rec => {
|
||||
const cnRecord = this.recordCanonicalName(hn, rec, isRootDocument);
|
||||
return this.processCanonicalName(hn, cnRecord, details);
|
||||
},
|
||||
( ) => {
|
||||
this.cnames.set(hn, null);
|
||||
}
|
||||
);
|
||||
if ( skipDNS(details.proxyInfo) ) { return; }
|
||||
if ( this.dnsShouldResolve(hn) === false ) { return; }
|
||||
const promise = dnsEntry || this.dnsResolve(hn, details);
|
||||
return promise.then(( ) => this.onAfterDNSResolution(hn, details));
|
||||
}
|
||||
|
||||
onAfterDNSResolution(hn, details, dnsEntry) {
|
||||
if ( dnsEntry === undefined ) {
|
||||
dnsEntry = this.dnsFromCache(hn);
|
||||
if ( isResolvedObject(dnsEntry) === false ) { return; }
|
||||
}
|
||||
let proceed = false;
|
||||
if ( dnsEntry.cname && this.cnameUncloakEnabled ) {
|
||||
const newURL = this.uncloakURL(hn, dnsEntry, details);
|
||||
if ( newURL ) {
|
||||
details.aliasURL = details.url;
|
||||
details.url = newURL;
|
||||
proceed = true;
|
||||
}
|
||||
}
|
||||
if ( dnsEntry.ip && details.ip !== dnsEntry.ip ) {
|
||||
details.ip = dnsEntry.ip
|
||||
proceed = true;
|
||||
}
|
||||
if ( proceed === false ) { return; }
|
||||
// Must call method on base class
|
||||
return super.onBeforeSuspendableRequest(details);
|
||||
}
|
||||
|
||||
dnsToCache(hn, record, details) {
|
||||
const dnsEntry = { hn, until: Date.now() + this.dnsCacheTTL * 1000 };
|
||||
if ( record ) {
|
||||
const cname = this.cnameFromRecord(hn, record, details);
|
||||
if ( cname ) { dnsEntry.cname = cname; }
|
||||
const ip = this.ipFromRecord(record);
|
||||
if ( ip ) { dnsEntry.ip = ip; }
|
||||
}
|
||||
this.dnsSetCache(-1, hn, dnsEntry);
|
||||
return dnsEntry;
|
||||
}
|
||||
|
||||
dnsFromCache(hn, passive = false) {
|
||||
const i = this.dnsDict.get(hn);
|
||||
if ( i === undefined ) { return; }
|
||||
if ( isPromise(i) ) { return i; }
|
||||
const dnsEntry = this.dnsList[i];
|
||||
if ( dnsEntry !== null && dnsEntry.hn === hn ) {
|
||||
if ( passive || dnsEntry.until >= Date.now() ) {
|
||||
return dnsEntry;
|
||||
}
|
||||
}
|
||||
this.dnsSetCache(i);
|
||||
}
|
||||
|
||||
dnsSetCache(i, hn, after) {
|
||||
if ( i < 0 ) {
|
||||
const j = this.dnsDict.get(hn);
|
||||
if ( typeof j === 'number' ) {
|
||||
this.dnsList[j] = after;
|
||||
return;
|
||||
}
|
||||
i = this.dnsWritePtr++;
|
||||
this.dnsWritePtr %= this.dnsMaxCount;
|
||||
}
|
||||
const before = this.dnsList[i];
|
||||
if ( before ) {
|
||||
this.dnsDict.delete(before.hn);
|
||||
}
|
||||
if ( after ) {
|
||||
this.dnsDict.set(hn, i);
|
||||
this.dnsList[i] = after;
|
||||
} else {
|
||||
if ( hn ) { this.dnsDict.delete(hn); }
|
||||
this.dnsList[i] = null;
|
||||
}
|
||||
}
|
||||
|
||||
dnsShouldResolve(hn) {
|
||||
if ( this.dnsResolveEnabled === false ) { return false; }
|
||||
if ( hn === '' ) { return false; }
|
||||
const c0 = hn.charCodeAt(0);
|
||||
if ( c0 === 0x5B /* [ */ ) { return false; }
|
||||
if ( c0 > 0x39 /* 9 */ ) { return true; }
|
||||
return reIPv4.test(hn) === false;
|
||||
}
|
||||
|
||||
dnsResolve(hn, details) {
|
||||
const promise = dnsAPI.resolve(hn, [ 'canonical_name' ]).then(
|
||||
rec => this.dnsToCache(hn, rec, details),
|
||||
( ) => this.dnsToCache(hn)
|
||||
);
|
||||
this.dnsDict.set(hn, promise);
|
||||
return promise;
|
||||
}
|
||||
|
||||
cnameFromRecord(hn, record, details) {
|
||||
const cn = record.canonicalName;
|
||||
if ( cn === undefined ) { return; }
|
||||
if ( cn === hn ) { return; }
|
||||
if ( this.cnameIgnore1stParty ) {
|
||||
if ( domainFromHostname(cn) === domainFromHostname(hn) ) { return; }
|
||||
}
|
||||
if ( this.cnameIgnoreList !== null ) {
|
||||
if ( this.cnameIgnoreList.test(cn) ) { return; }
|
||||
}
|
||||
if ( this.cnameIgnoreRootDocument ) {
|
||||
const origin = hostnameFromNetworkURL(details.documentUrl || details.url);
|
||||
if ( hn === origin ) { return; }
|
||||
}
|
||||
return cn;
|
||||
}
|
||||
|
||||
uncloakURL(hn, dnsEntry, details) {
|
||||
const hnBeg = details.url.indexOf(hn);
|
||||
if ( hnBeg === -1 ) { return; }
|
||||
const oldURL = details.url;
|
||||
const newURL = oldURL.slice(0, hnBeg) + dnsEntry.cname;
|
||||
const hnEnd = hnBeg + hn.length;
|
||||
if ( this.cnameReplayFullURL ) {
|
||||
return newURL + oldURL.slice(hnEnd);
|
||||
}
|
||||
const pathBeg = oldURL.indexOf('/', hnEnd);
|
||||
if ( pathBeg !== -1 ) {
|
||||
return newURL + oldURL.slice(hnEnd, pathBeg + 1);
|
||||
}
|
||||
return newURL;
|
||||
}
|
||||
|
||||
ipFromRecord(record) {
|
||||
const { addresses } = record;
|
||||
if ( Array.isArray(addresses) === false ) { return; }
|
||||
if ( addresses.length === 0 ) { return; }
|
||||
return addresses.join('\n');
|
||||
}
|
||||
|
||||
suspendOneRequest(details) {
|
||||
const pending = {
|
||||
details: Object.assign({}, details),
|
||||
@@ -286,6 +331,7 @@ vAPI.Net = class extends vAPI.Net {
|
||||
this.pendingRequests.push(pending);
|
||||
return pending.promise;
|
||||
}
|
||||
|
||||
unsuspendAllRequests(discard = false) {
|
||||
const pendingRequests = this.pendingRequests;
|
||||
this.pendingRequests = [];
|
||||
@@ -297,6 +343,7 @@ vAPI.Net = class extends vAPI.Net {
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
static canSuspend() {
|
||||
return true;
|
||||
}
|
||||
@@ -304,25 +351,77 @@ vAPI.Net = class extends vAPI.Net {
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
vAPI.scriptletsInjector = ((doc, details) => {
|
||||
let script, url;
|
||||
try {
|
||||
const blob = new self.Blob(
|
||||
[ details.scriptlets ],
|
||||
{ type: 'text/javascript; charset=utf-8' }
|
||||
);
|
||||
url = self.URL.createObjectURL(blob);
|
||||
script = doc.createElement('script');
|
||||
script.async = false;
|
||||
script.src = url;
|
||||
(doc.head || doc.documentElement || doc).append(script);
|
||||
self.uBO_scriptletsInjected = details.filters;
|
||||
} catch (ex) {
|
||||
}
|
||||
if ( url ) {
|
||||
if ( script ) { script.remove(); }
|
||||
self.URL.revokeObjectURL(url);
|
||||
}
|
||||
}).toString();
|
||||
vAPI.scriptletsInjector = (( ) => {
|
||||
const parts = [
|
||||
'(',
|
||||
function(details) {
|
||||
if ( self.uBO_scriptletsInjected !== undefined ) { return; }
|
||||
const doc = document;
|
||||
const { location } = doc;
|
||||
if ( location === null ) { return; }
|
||||
const { hostname } = location;
|
||||
if ( hostname !== '' && details.hostname !== hostname ) { return; }
|
||||
// Use a page world sentinel to verify that execution was
|
||||
// successful
|
||||
const { sentinel } = details;
|
||||
let script;
|
||||
try {
|
||||
const code = [
|
||||
`self['${sentinel}'] = true;`,
|
||||
details.scriptlets,
|
||||
].join('\n');
|
||||
script = doc.createElement('script');
|
||||
script.appendChild(doc.createTextNode(code));
|
||||
(doc.head || doc.documentElement).appendChild(script);
|
||||
} catch {
|
||||
}
|
||||
if ( script ) {
|
||||
script.remove();
|
||||
script.textContent = '';
|
||||
script = undefined;
|
||||
}
|
||||
if ( self.wrappedJSObject[sentinel] ) {
|
||||
delete self.wrappedJSObject[sentinel];
|
||||
self.uBO_scriptletsInjected = details.filters;
|
||||
return 0;
|
||||
}
|
||||
// https://github.com/uBlockOrigin/uBlock-issues/issues/235
|
||||
// Fall back to blob injection if execution through direct
|
||||
// injection failed
|
||||
let url;
|
||||
try {
|
||||
const blob = new self.Blob(
|
||||
[ details.scriptlets ],
|
||||
{ type: 'text/javascript; charset=utf-8' }
|
||||
);
|
||||
url = self.URL.createObjectURL(blob);
|
||||
script = doc.createElement('script');
|
||||
script.async = false;
|
||||
script.src = url;
|
||||
(doc.head || doc.documentElement || doc).append(script);
|
||||
self.uBO_scriptletsInjected = details.filters;
|
||||
} catch {
|
||||
}
|
||||
if ( url ) {
|
||||
if ( script ) { script.remove(); }
|
||||
self.URL.revokeObjectURL(url);
|
||||
}
|
||||
return 0;
|
||||
}.toString(),
|
||||
')(',
|
||||
'json-slot',
|
||||
');',
|
||||
];
|
||||
const jsonSlot = parts.indexOf('json-slot');
|
||||
return (hostname, details) => {
|
||||
parts[jsonSlot] = JSON.stringify({
|
||||
hostname,
|
||||
scriptlets: details.mainWorld,
|
||||
filters: details.filters,
|
||||
sentinel: vAPI.generateSecret(3),
|
||||
});
|
||||
return parts.join('');
|
||||
};
|
||||
})();
|
||||
|
||||
/******************************************************************************/
|
||||
|
@@ -19,6 +19,4 @@
|
||||
Home: https://github.com/gorhill/uBlock
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
export default browser;
|
||||
|
@@ -7,17 +7,21 @@ The following assumes a linux environment.
|
||||
1. Open Bash console
|
||||
2. `git clone https://github.com/gorhill/uBlock.git`
|
||||
3. `cd uBlock`
|
||||
4. `make mv3-[platform]`, where `[platform]` is either `chromium` or `firefox`
|
||||
5. This will fully build uBO Lite, and during the process filter lists will be downloaded from their respective remote servers
|
||||
4. `git submodule init`
|
||||
5. `git submodule update`
|
||||
6. `make mv3-[platform]`, where `[platform]` is either `chromium`, `edge`, `firefox`, or `safari`
|
||||
7. This will fully build uBO Lite, and during the process filter lists will be downloaded from their respective remote servers
|
||||
|
||||
Upon completion of the script, the resulting extension package will become present in:
|
||||
|
||||
- Chromium: `dist/build/uBOLite.chromium`
|
||||
- Firefox: `dist/build/uBOLite.firefox`
|
||||
- Edge: `dist/build/uBOLite.edge`
|
||||
- Firefox: `dist/build/uBOLite.firefox`
|
||||
- Safari: `dist/build/uBOLite.safari`
|
||||
|
||||
The folder `dist/build/mv3-data` will cache data fetched from remote server, so as to avoid fetching repeatedly from remote server with repeated build commands. Remove `dist/build/mv3-data` if you want to build with latest versions of filter lists.
|
||||
The folder `dist/build/mv3-data` will cache data fetched from remote servers, so as to avoid fetching repeatedly from remote servers with repeated build commands. Use `make cleanassets` to remove all locally cached filter lists if you want to build with latest versions of filter lists.
|
||||
|
||||
The file `dist/build/mv3-data/log.txt` will contain information about what happened during the build process.
|
||||
The file `dist/build/uBOLite.[platform]/log.txt` will contain information about what happened during the build process.
|
||||
|
||||
The entry in the `Makefile` which implement the build process is `tools/make-mv3.sh [platform]`.[1] This Bash script copy various files from uBlock Origin branch and MV3-specific branch into a single folder which will be the final extension package.
|
||||
|
||||
@@ -27,5 +31,4 @@ All the final rulesets are present in the `dist/build/uBOLite.[platform]/ruleset
|
||||
|
||||
---
|
||||
|
||||
[1] https://github.com/gorhill/uBlock/blob/c4d324362fdb95ff8ef20f0b18f42f0eec955433/tools/make-mv3.sh
|
||||
[2] https://github.com/gorhill/uBlock/blob/c4d324362fdb95ff8ef20f0b18f42f0eec955433/tools/make-mv3.sh#L103
|
||||
[1] https://github.com/gorhill/uBlock/blob/c4d324362fdb95ff8ef20f0b18f42f0eec955433/tools/make-mv3.sh<br>
|
||||
|
@@ -12,12 +12,24 @@
|
||||
"service_worker": "/js/background.js",
|
||||
"type": "module"
|
||||
},
|
||||
"commands": {
|
||||
"enter-zapper-mode": {
|
||||
"description": "__MSG_zapperTipEnter__"
|
||||
},
|
||||
"enter-picker-mode": {
|
||||
"description": "__MSG_pickerTipEnter__"
|
||||
}
|
||||
},
|
||||
"declarative_net_request": {
|
||||
"rule_resources": [
|
||||
]
|
||||
},
|
||||
"default_locale": "en",
|
||||
"description": "__MSG_extShortDesc__",
|
||||
"host_permissions": [
|
||||
"<all_urls>"
|
||||
],
|
||||
"incognito": "split",
|
||||
"icons": {
|
||||
"16": "img/icon_16.png",
|
||||
"32": "img/icon_32.png",
|
||||
@@ -25,12 +37,9 @@
|
||||
"128": "img/icon_128.png"
|
||||
},
|
||||
"manifest_version": 3,
|
||||
"minimum_chrome_version": "105.0",
|
||||
"minimum_chrome_version": "122.0",
|
||||
"name": "__MSG_extName__",
|
||||
"options_page": "dashboard.html",
|
||||
"optional_host_permissions": [
|
||||
"<all_urls>"
|
||||
],
|
||||
"permissions": [
|
||||
"activeTab",
|
||||
"declarativeNetRequest",
|
||||
@@ -42,5 +51,42 @@
|
||||
"managed_schema": "managed_storage.json"
|
||||
},
|
||||
"version": "1.0",
|
||||
"web_accessible_resources": []
|
||||
"web_accessible_resources": [
|
||||
{
|
||||
"resources": [
|
||||
"/strictblock.html"
|
||||
],
|
||||
"matches": [
|
||||
"<all_urls>"
|
||||
],
|
||||
"use_dynamic_url": true
|
||||
},
|
||||
{
|
||||
"resources": [
|
||||
"/zapper-ui.html"
|
||||
],
|
||||
"matches": [
|
||||
"<all_urls>"
|
||||
],
|
||||
"use_dynamic_url": true
|
||||
},
|
||||
{
|
||||
"resources": [
|
||||
"/picker-ui.html"
|
||||
],
|
||||
"matches": [
|
||||
"<all_urls>"
|
||||
],
|
||||
"use_dynamic_url": true
|
||||
},
|
||||
{
|
||||
"resources": [
|
||||
"/unpicker-ui.html"
|
||||
],
|
||||
"matches": [
|
||||
"<all_urls>"
|
||||
],
|
||||
"use_dynamic_url": true
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@@ -1,30 +1,9 @@
|
||||
## Description
|
||||
|
||||
**uBO Lite** (uBOL), a **permission-less** [MV3 API-based](https://developer.chrome.com/docs/extensions/mv3/intro/) content blocker.
|
||||
**uBO Lite** (uBOL), an efficient [MV3 API-based](https://developer.chrome.com/docs/extensions/mv3/intro/) content blocker.
|
||||
|
||||
uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is [performed reliably](https://developer.chrome.com/docs/extensions/reference/scripting/#method-registerContentScripts) by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
|
||||
|
||||
uBOL does not require broad "read/modify data" [permission](https://developer.chrome.com/docs/extensions/mv3/declare_permissions/) at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read/modify data" permissions at install time. <details><summary>**However, [...]**</summary>
|
||||
uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using declarative cosmetic and scriptlet injections.
|
||||
|
||||
To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
|
||||
|
||||

|
||||
|
||||
The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request:
|
||||
|
||||

|
||||
|
||||
If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site:
|
||||
|
||||

|
||||
|
||||
You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to modify and read data on all websites:
|
||||
|
||||

|
||||
|
||||
</details>
|
||||
|
||||
The default ruleset corresponds to at least uBlock Origin's default filterset:
|
||||
|
||||
- uBlock Origin's built-in filter lists
|
||||
@@ -33,9 +12,3 @@ The default ruleset corresponds to at least uBlock Origin's default filterset:
|
||||
- Peter Lowe’s Ad and tracking server list
|
||||
|
||||
You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
|
||||
|
||||
Keep in mind this is still a work in progress, with these end goals:
|
||||
|
||||
- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
|
||||
|
||||
- Entirely declarative for reliability and CPU/memory efficiency.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
uBO الخفيف (uBOL) مانع محتوى *لا يحتاج لتصاريح* مبني على MV3.
|
||||
uBO Lite (uBOL) هو مانع محتوى يعتمد على MV3.
|
||||
|
||||
تتوافق مجموعة القواعد الافتراضية مع مجموعة عوامل التصفية الافتراضية لـ uBlock Origin:
|
||||
|
||||
@@ -7,30 +7,6 @@ uBO الخفيف (uBOL) مانع محتوى *لا يحتاج لتصاريح* م
|
||||
- الخصوصية السهلة
|
||||
- قائمة خادم الإعلانات والتتبع لبيتر لوي
|
||||
|
||||
يمكنك إضافة المزيد من القواعد من خلال زيارة صفحة الخيارات ومن ثم أنقر على رمز _Cogs_ في اللوحة المنبثقة.
|
||||
يمكنك تفعيل المزيد من مجموعات القواعد من خلال زيارة صفحة الخيارات - انقر على أيقونة _الترس_ في لوحة الإشعارات.
|
||||
|
||||
uBOL صريح تمامًا، مما يعني أنه لا تحتاج إلى uBOL بشكل دائم لحدوث تصفية المحتوى، يتم إجراء تصفية المحتوى من خلال إضافة CSS/JS بشكل موثوق به بواسطة المتصفح نفسه بدلًا من الإضافة.
|
||||
هذا يعني أن uBOL نفسه لا يستهلك موارد وحدة المعالجة المركزية/الذاكرة أثناء استمراره في حظر المحتوى. عملية عامل الخدمة في uBOL مطلوبة _فقط_ عند التفاعل مع اللوحة المنبثقة أو صفحة الخيارات.
|
||||
|
||||
لا يتطلب uBOL صلاحية واسعة «لقراءة البيانات وتعديلها» في وقت التثبيت، وبالتالي فإن قدراته محدودة مقارنة بـ uBlock Origin أو إضافات حظر الإعلانات الأخرى التي تتطلب صلاحية واسعة «قراءة البيانات وتعديلها» في وقت التثبيت.
|
||||
|
||||
|
||||
ومع ذلك، يسمح لك uBOL "بوضوح" بمنح صلاحيات موسعة على مواقع محددة من اختيارك حتى يتمكن من التصفية بشكل أفضل على تلك المواقع باستخدام التصفية التجميلية وإضافة النص.
|
||||
|
||||
|
||||
لمنح صلاحيات موسعة على موقع معين، افتح اللوحة المنبثقة واختر وضع التصفية إما الأمثل أو الكامل.
|
||||
|
||||
سيحذرك المتصفح من مخاطر منح صلاحيات إضافية التي يطلبها الامتداد على الموقع الحالي، وسيتعين عليك إختيار بما إذا كنت تقبل الطلب أو ترفضه.
|
||||
|
||||
|
||||
إذا قبلت طلب uBOL بالحصول على صلاحيات إضافية على الموقع الحالي، فستتمكن من تصفية المحتوى بشكل أفضل للموقع الحالي.
|
||||
|
||||
|
||||
بإمكانك اختيار وضع التصفية الافتراضية من خلال صفحة خيارات uBOL. إذا اخترت الوضع الأمثل أو الكامل باعتباره الوضع الافتراضي، فستحتاج إلى منح uBOL الإذن لقراءة البيانات وتعديلها على جميع مواقع الويب.
|
||||
|
||||
|
||||
ضع في اعتبارك أن هذا لا يزال عملًا قيد التنفيذ، هذه هي الأهداف النهائية:
|
||||
|
||||
لا يمكنك تحديد الأذونات المستخدمة لاحقًا في التثبيت، تحديدك للأذونات سيكون خلال زيارتك لكل موقع.
|
||||
|
||||
تقريري تمامًا للموثوقية ولكفاءة وحدة المعالجة المركزية/الذاكرة.
|
||||
uBOL صريح تمامًا، مما يعني أنه لا تحتاج إلى uBOL بشكل دائم لحدوث تصفية المحتوى، يتم إجراء تصفية المحتوى من خلال إضافة CSS/JS بشكل موثوق به بواسطة المتصفح نفسه بدلًا من الإضافة. هذا يعني أن uBOL نفسه لا يستهلك موارد وحدة المعالجة المركزية/الذاكرة أثناء استمراره في حظر المحتوى.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
uBO Lite (uBOL) *icazəsiz* MV3 əsaslı məzmun bloklayıcısıdır.
|
||||
uBO Lite (uBOL) is an MV3-based content blocker.
|
||||
|
||||
Defolt qaydalar dəsti uBlock Origin-in defolt filtr dəstinə uyğundur:
|
||||
|
||||
@@ -7,24 +7,6 @@ Defolt qaydalar dəsti uBlock Origin-in defolt filtr dəstinə uyğundur:
|
||||
- EasyPrivacy
|
||||
- Peter Lowe-un Reklam və izləyici server siyahısı
|
||||
|
||||
You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
|
||||
You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
|
||||
|
||||
uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
|
||||
|
||||
uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
|
||||
|
||||
However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
|
||||
|
||||
To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
|
||||
|
||||
The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
|
||||
|
||||
If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
|
||||
|
||||
You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
|
||||
|
||||
Keep in mind this is still a work in progress, with these end goals:
|
||||
|
||||
- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
|
||||
|
||||
- Entirely declarative for reliability and CPU/memory efficiency.
|
||||
|
@@ -1,30 +1,12 @@
|
||||
uBO Lite (uBOL) is a *permission-less* MV3-based content blocker.
|
||||
uBO Lite (uBOL) гэта базаваны на MV3 блакавальнік змесціва.
|
||||
|
||||
The default ruleset corresponds to uBlock Origin's default filterset:
|
||||
Прадвызначаны набор правіл адпавядае тыпавому набору фільтраў uBlock Origin:
|
||||
|
||||
- uBlock Origin's built-in filter lists
|
||||
- Убудаваныя спісы фільтраў uBlock Origin
|
||||
- EasyList
|
||||
- EasyPrivacy
|
||||
- Peter Lowe’s Ad and tracking server list
|
||||
- Спіс сервераў з рэкламай і адсочвання ад Peter Lowe
|
||||
|
||||
You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
|
||||
Вы можаце ўключыць больш набораў правіл праз старонку налад -- націсніце на значок _Шасцярэнькі_ на ўсплывальнай панэлі.
|
||||
|
||||
uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
|
||||
|
||||
uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
|
||||
|
||||
However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
|
||||
|
||||
To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
|
||||
|
||||
The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
|
||||
|
||||
If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
|
||||
|
||||
You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
|
||||
|
||||
Keep in mind this is still a work in progress, with these end goals:
|
||||
|
||||
- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
|
||||
|
||||
- Entirely declarative for reliability and CPU/memory efficiency.
|
||||
uBOL цалкам дэкларатыўны, то-бок не мае неабходнасці ў сталым uBOL працэсе дзеля фільтрацыі, а фільтрацыя змесціва на аснове інʼекцыі CSS/JS надзейна выконваецца пераважна самім браўзерам замест пашырэння. Гэта значыць, што uBOL не спажывае рэсурсаў працэсара/памяці пры блакаванні зместу -- службовы працэс uBOL патрэбны _толькі_ падчас узаемадзеяння з усплывальнай панэллю або наладамі.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
uBO Lite (uBOL) е блокер за съдържание *без разрешения*, базиран на MV3.
|
||||
uBO Lite (uBOL) е блокер за съдържание, базиран на MV3.
|
||||
|
||||
Наборът от правила по подразбиране съответства на набора от филтри по подразбиране на uBlock Origin:
|
||||
|
||||
@@ -7,24 +7,6 @@ uBO Lite (uBOL) е блокер за съдържание *без разреше
|
||||
- EasyPrivacy
|
||||
- Списък със сървъри на Peter Lowe за реклами и проследяване
|
||||
|
||||
Можете да добавите още набори от правила, като посетите страницата с опции – щракнете върху иконата _зъбно колело_ в изскачащия панел.
|
||||
Можете да включите още набори от правила, като посетите страницата с опции – щракнете върху иконата „зъбно колело“ в изскачащия панел.
|
||||
|
||||
uBOL е изцяло декларативен, което означава, че няма нужда от постоянен процес на uBOL за филтриране, а филтрирането на съдържание, базирано на инжектиране на CSS/JS, се извършва надеждно от самия браузър, а не от разширението. Това означава, че самият uBOL не консумира ресурси на процесора/паметта, докато тече блокирането на съдържанието – работният процес на услугата на uBOL е необходим _само_ когато взаимодействате с изскачащия панел или страниците с опции.
|
||||
|
||||
uBOL не изисква широко разрешение за "четене и промяна на данни" по време на инсталиране, поради което възможностите му са ограничени в сравнение с uBlock Origin или други блокери на съдържание, изискващи широко разрешение за "четене и промяна на данни" по време на инсталиране.
|
||||
|
||||
Въпреки това uBOL ви позволява да предоставите *изрично* разширени разрешения за определени сайтове по ваш избор, за да може да филтрира по-добре тези сайтове, като използва козметично филтриране и инжектиране на скриптове.
|
||||
|
||||
За да предоставите разширени разрешения за даден сайт, отворете изскачащия панел и изберете по-висок режим на филтриране, например Оптимален или Пълен.
|
||||
|
||||
След това браузърът ще ви предупреди за последиците от предоставянето на допълнителните разрешения, поискани от разширението, за текущия сайт и ще трябва да кажете на браузъра дали приемате или отхвърляте искането.
|
||||
|
||||
Ако приемете искането на uBOL за допълнителни разрешения за текущия сайт, той ще може да филтрира по-добре съдържанието на текущия сайт.
|
||||
|
||||
Можете да зададете режима на филтриране по подразбиране от страницата с опции на uBOL. Ако изберете оптимален или пълен режим по подразбиране, ще трябва да предоставите на uBOL разрешение за четене и промяна на данни във всички уебсайтове.
|
||||
|
||||
Имайте предвид, че това все още е в процес на разработка с тези крайни цели:
|
||||
|
||||
- По време на инсталацията няма широки разрешения за хоста – разширените разрешения се предоставят изрично от потребителя за всеки сайт.
|
||||
|
||||
- Изцяло декларативен за надеждност и ефективност на процесора/паметта.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
uBO Lite (uBOL) হল একটি *অনুমতি-হীন* MV3-ভিত্তিক কন্টেন্ট ব্লকার।
|
||||
uBO Lite (uBOL) হলো একটি ম্যানিফেস্ট ভার্সন ৩ ভিত্তিক কনটেন্ট ব্লকার
|
||||
|
||||
পূর্ব নির্ধারিত নিয়ম সেট uBlock অরিজিনের ডিফল্ট ফিল্টারসেটের সাথে মিলে যায়:
|
||||
|
||||
@@ -7,24 +7,6 @@ uBO Lite (uBOL) হল একটি *অনুমতি-হীন* MV3-ভিত
|
||||
- সহজ গোপনীয়তা
|
||||
- পিটার লো এর বিজ্ঞাপন এবং ট্র্যাকিং সার্ভার তালিকা
|
||||
|
||||
আপনি অপশন পেজে গিয়ে আরও নিয়ম সেট যোগ করতে পারেন -- পপআপ প্যানেলে _Cogs_ আইকনে ক্লিক করুন।
|
||||
তুমি অপশন পাতায় গিয়ে আরও নিয়ম যোগ করতে পারো -- পপআপ প্যানেলে _গিয়ার_ আইকনে ক্লিক করে।
|
||||
|
||||
uBOL সম্পূর্ণরূপে ঘোষণামূলক, অর্থাৎ ফিল্টারিং করতে একটি স্থায়ী uBOL প্রক্রিয়ার প্রয়োজন নেই, এবং CSS/JS ইনজেকশন-ভিত্তিক বিষয়বস্তু ফিল্টারিং এক্সটেনশনের পরিবর্তে ব্রাউজার নিজেই নির্ভরযোগ্যভাবে এই কাজ করে থাকে। এর মানে হল যে কন্টেন্ট ব্লকিং চলমান থাকা অবস্থায় uBOL নিজেই CPU/মেমরি রিসোর্স ব্যবহার করে না -- uBOL-এর পরিষেবার প্রক্রিয়ার প্রয়োজন শুধুমাত্র_ যখন আপনি পপআপ প্যানেল বা অপশন পেজগুলির সাথে ইন্টারঅ্যাক্ট করেন।
|
||||
|
||||
uBOL-এর ইন্সটল করার সময় বিস্তৃত "পড়ার ও ডেটা পরিবর্তন করার" অনুমতির প্রয়োজন হয় না, তাই ইউব্লক অরিজিন বা অন্যান্য কনটেন্ট ব্লকের তুলনায় এটির সীমিত ক্ষমতা বাক্সের বাইরে রয়েছে যার জন্য ইন্সটল করার সময় বিস্তৃত "ডেটা পড়ুন এবং পরিবর্তন করুন" অনুমতি প্রয়োজন।
|
||||
|
||||
যাইহোক, uBOL আপনাকে আপনার পছন্দের নির্দিষ্ট সাইটে *স্পষ্টভাবে* বর্ধিত অনুমতি প্রদান করে যাতে এটি কসমেটিক ফিল্টারিং এবং স্ক্রিপ্টলেট ইনজেকশন ব্যবহার করে সেই সাইটগুলিতে আরও ভাল ফিল্টার করতে পারে।
|
||||
|
||||
একটি সাইটে বর্ধিত অনুমতি প্রদানের জন্য, পপআপ প্যানেল খুলুন এবং একটি উচ্চতর ফিল্টারিং মোড বাছাই করুন যেমন অপটিমাল বা কমপ্লিট।
|
||||
|
||||
ব্রাউজারটি তখন বর্তমান সাইটে এক্সটেনশন দ্বারা অনুরোধ করা অতিরিক্ত অনুমতি প্রদানের প্রভাব সম্পর্কে আপনাকে সতর্ক করবে এবং আপনি অনুরোধটি গ্রহণ করবেন বা প্রত্যাখ্যান করবেন কিনা তা আপনার ব্রাউজারকে বলতে হবে।
|
||||
|
||||
আপনি যদি বর্তমান সাইটে অতিরিক্ত অনুমতির জন্য uBOL-এর অনুরোধ গ্রহণ করেন, তাহলে এটি বর্তমান সাইটের জন্য আরও ভালভাবে ফিল্টার করতে সক্ষম হবে।
|
||||
|
||||
আপনি uBOL এর বিকল্প পৃষ্ঠা থেকে ডিফল্ট ফিল্টারিং মোড সেট করতে পারেন। আপনি যদি অপটিমাল বা কমপ্লিট মোডটিকে ডিফল্ট হিসেবে বেছে নেন, তাহলে আপনাকে uBOL-কে সমস্ত ওয়েবসাইটের ডেটা পড়তে এবং পরিবর্তন করার অনুমতি দিতে হবে।
|
||||
|
||||
মনে রাখবেন এই শেষ লক্ষ্যগুলির ফলাফলের সাথে এখনও সংস্করণ কাজ চলছে:
|
||||
|
||||
- ইনস্টল করার সময় কোনও বিস্তৃত অনুমতি নেই -- বর্ধিত অনুমতিগুলি প্রতি-সাইট ভিত্তিতে ব্যবহারকারীর দ্বারা স্পষ্টভাবে প্র্রদান করা হয়।
|
||||
|
||||
- নির্ভরযোগ্যতা এবং CPU/মেমরি দক্ষতার জন্য সম্পূর্ণরূপে পূর্বঘোষণামুূলক।
|
||||
|
@@ -1,30 +1,12 @@
|
||||
uBO Lite (uBOL) zo ur stanker noazadurioù *hep aotre rekis ebet* diazezet war ar manifesto MV3.
|
||||
uBO Lite (uBOL) zo ur stanker noazadurioù diazezet war ar manifesto MV3.
|
||||
|
||||
Ar reolennoù dre ziouer a glot gant silañ dre ziouer uBlock Origin:
|
||||
|
||||
- Rolloù siloù genidik a uBlock Origin
|
||||
- EasyList
|
||||
- EasyPrivacy
|
||||
- Peter Lowe’s Ad and tracking server list
|
||||
- Roll ar servijerioù brudañ ha heuliañ eus Peter Lowe
|
||||
|
||||
Tu zo deoc'h ouzhpennañ reolennoù all en arventennoù -- klikit war an ikon _kendentadur_ er banell popup.
|
||||
|
||||
uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
|
||||
|
||||
uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
|
||||
|
||||
Koulskoude ez eus tu deoc'h reiñ *sklaer* aotreoù ouzhpenn da uBOL el lec'hiennoù ma fell deoc'h, mod-se e vint silet gwelloc'h en ur implij siloù kened hag ensinkladurioù scriplet.
|
||||
|
||||
Evit reiñ aotreoù ouzhpenn da uBOL en ul lec'hienn bennak, n'ho peus nemet digeriñ ar prenestr pop-up ha diuzañ ul live silañ uheloc'h evel ar mod Gwellañ pe ar mod Klok
|
||||
|
||||
The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
|
||||
|
||||
Ma asantit da reiñ muioc'h a aotreoù da uBOL war ar bajenn-mañ e vo silet gwelloc'h.
|
||||
|
||||
Gallout a rit termeniñ ar mod silañ dre ziouer e pajenn arventennoù uBOL. Ma tibabit ar mod Gwellañ pe an hini Klok evel ar mod dre ziouer e vo ret deoc'h aotren uBOL da lenn ha kemmañ roadennoù en holl lec'hiennoù.
|
||||
|
||||
Dalc'hit soñj ez eo uBOL ur raktres war ober c'hoazh hag a zo e bal:
|
||||
|
||||
- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
|
||||
|
||||
- Entirely declarative for reliability and CPU/memory efficiency.
|
||||
Disklêriañ a ra uBOL penn-da-benn, da lavaret eo n'eus ket ezhomm eus un argerzh uBOL padus evit ma c'hoarvezfe ar silañ, ha silañ endalc'hadoù diazezet war enlakaat CSS/JS a vez graet en un doare fizius gant ar merdeer e-unan kentoc'h eget gant an astenn. Kement-se a dalvez ne vez ket gounezet gant uBOL e-unan arc'hwelioù CPU/memor e-pad ma vez stanket an endalc'hadoù -- ezhomm zo eus argerzh al labourer servij uBOL _nemet_ pa vez etregweredet gant ar banell digeriñ pe ar pajennoù dibarzhioù.
|
||||
|
@@ -1,30 +1,12 @@
|
||||
uBO Lite (uBOL) je blokator sadržaja zasnovan na MV3 *bez dozvole*.
|
||||
uBO Lite (uBOL) je blokator sadržaja baziran na MV3.
|
||||
|
||||
Zadani skup pravila odgovara zadanom skupu filtera uBlock Origin:
|
||||
|
||||
- UBlock Origin ugrađene liste filtera
|
||||
- EasyList
|
||||
- EasyPrivacy
|
||||
- Oglas Peter Lowe i lista servera za praćenje
|
||||
- Peter Lowe-ova lista servera za oglase i praćenje
|
||||
|
||||
Možete dodati još skupova pravila tako što ćete posjetiti stranicu sa opcijama -- kliknite na ikonu _Cogs_ na iskačućoj ploči.
|
||||
Možete omogućiti više skupova pravila posjetom stranice s opcijama -- kliknite na ikonu _Cogs_ u skočnom panelu.
|
||||
|
||||
uBOL je potpuno deklarativno, što znači da nema potrebe za trajnim uBOL procesom da bi se filtriranje dogodilo, a filtriranje sadržaja zasnovano na CSS/JS injekcijama se pouzdano izvodi od strane samog pretraživača, a ne ekstenzije. To znači da sam uBOL ne troši CPU/memorijske resurse dok je blokiranje sadržaja u toku -- proces uBOL-a servisnog radnika je potreban _samo_ kada stupite u interakciju sa iskačućim panelom ili stranicama sa opcijama.
|
||||
|
||||
uBOL ne zahtijeva široku dozvolu za "čitanje i modificiranje podataka" u vrijeme instalacije, stoga su njegove ograničene mogućnosti izvan kutije u poređenju sa uBlock Origin-om ili drugim blokatorima sadržaja koji zahtijevaju široke dozvole za "čitanje i modificiranje podataka" u vrijeme instalacije.
|
||||
|
||||
Međutim, uBOL vam omogućava da *eksplicitno* dodijelite proširene dozvole na određenim web lokacijama po vašem izboru kako bi mogao bolje filtrirati te stranice koristeći kozmetičko filtriranje i injekcije skriptleta.
|
||||
|
||||
Da biste dali proširene dozvole za datu web lokaciju, otvorite iskačući panel i odaberite viši način filtriranja kao što je Optimal ili Complete.
|
||||
|
||||
Pregledač će vas tada upozoriti na efekte odobravanja dodatnih dozvola koje ekstenzija traži na trenutnoj web stranici, a vi ćete morati reći pretraživaču da li prihvatate ili odbijate zahtjev.
|
||||
|
||||
Ako prihvatite uBOL-ov zahtjev za dodatnim dozvolama na trenutnoj stranici, moći će bolje filtrirati sadržaj za trenutnu stranicu.
|
||||
|
||||
Možete postaviti zadani način filtriranja sa uBOL-ove stranice sa opcijama. Ako odaberete Optimal ili Kompletan način kao zadani, morat ćete dati uBOL-u dozvolu da čita i mijenja podatke na svim web stranicama.
|
||||
|
||||
Imajte na umu da je ovo još uvijek u toku, sa ovim krajnjim ciljevima:
|
||||
|
||||
- Nema širokih dozvola za host u vrijeme instalacije - proširene dozvole se eksplicitno dodeljuju od strane korisnika na bazi po lokaciji.
|
||||
|
||||
- Potpuno deklarativno za pouzdanost i efikasnost CPU/memorije.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
L'uBO Lite (uBOL) és un blocador de contingut *sense permisos* basat en MV3.
|
||||
L'uBO Lite (uBOL) és un blocador de contingut basat en MV3.
|
||||
|
||||
El conjunt de regles per defecte correspon al conjunt de filtres per defecte d'uBlock Origin:
|
||||
|
||||
@@ -7,26 +7,8 @@ El conjunt de regles per defecte correspon al conjunt de filtres per defecte d'u
|
||||
- EasyPrivacy
|
||||
- Llista de servidors de seguiment i anuncis de Peter Lowe
|
||||
|
||||
Podeu afegir més conjunts de regles si visiteu la pàgina d'opcions: feu clic a la icona _Cogs_ al tauler emergent.
|
||||
Podeu habilitar més conjunts de regles si visiteu la pàgina d'opcions: feu clic a la icona _Cogs_ al tauler emergent.
|
||||
|
||||
L'uBOL és totalment declaratiu, és a dir, no cal un procés uBOL permanent perquè es produeixi el filtratge, i el filtratge de contingut basat en injecció CSS/JS es realitza de manera fiable pel propi navegador més que per l'extensió.
|
||||
Això vol dir que l'uBOL en si no consumeix recursos de CPU/memòria mentre el bloqueig de contingut està en curs; el procés de treballador de servei d'uBOL només es requereix quan interactueu amb el tauler emergent o les pàgines d'opcions.
|
||||
|
||||
|
||||
L'uBOL no requereix un ampli permís de "lectura i modificació de dades" en el moment de la instal·lació, per tant, les seves capacitats limitades en comparació amb l'uBlock Origin o altres blocadors de contingut que requereixen amplis permisos de "lectura i modificació de dades" en el moment de la instal·lació.
|
||||
|
||||
Tanmateix, l'uBOL us permet concedir *explícitament* permisos ampliats en llocs específics que trieu perquè pugui filtrar millor en aquests llocs mitjançant filtres cosmètics i injeccions de scriptlet.
|
||||
|
||||
Per concedir permisos ampliats en un lloc determinat, obriu el tauler emergent i seleccioneu un mode de filtrat superior, com ara Òptim o Complet.
|
||||
|
||||
Aleshores, el navegador us avisarà sobre els efectes de la concessió dels permisos addicionals sol·licitats per l'extensió al lloc actual, i haureu d'indicar-li al navegador si accepteu o rebutgeu la sol·licitud.
|
||||
|
||||
Si accepteu la sol·licitud d'uBOL de permisos addicionals al lloc actual, podrà filtrar millor el contingut del lloc actual.
|
||||
|
||||
Podeu establir el mode de filtratge per defecte des de la pàgina d'opcions d'uBOL. Si trieu el mode Òptim o Complet per defecte, haureu de concedir a l'uBOL el permís per llegir i modificar dades a tots els llocs web.
|
||||
|
||||
Tingueu en compte que encara és un treball en curs, amb aquests objectius finals:
|
||||
|
||||
- No hi ha permisos d'amfitrió amplis en el moment de la instal·lació; els permisos ampliats els concedeix explícitament l'usuari per lloc.
|
||||
|
||||
- Totalment declaratiu per a la fiabilitat i l'eficiència de la CPU/memòria.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
uBO Lite (uBOL) je blokovač obsahu vyžadující méně oprávnění, založený na MV3.
|
||||
uBO Lite (uBOL) je blokovač obsahu založený na MV3.
|
||||
|
||||
Výchozí sada pravidel koresponduje k výchozím sadám filtrů uBlock Origin:
|
||||
|
||||
@@ -7,24 +7,6 @@ Výchozí sada pravidel koresponduje k výchozím sadám filtrů uBlock Origin:
|
||||
- EasyPrivacy
|
||||
- Peter Lowe’s Ad and tracking server list
|
||||
|
||||
Můžete přidat více sad pravidel navštívením stránky nastavení -- klikněte na ikonu ozubených kol ve vyskakovácím panelu.
|
||||
Další sady pravidel můžete povolit na stránce nastavení - klikněte na ikonu _Ozubeného kolečka_ ve vyskakovacím panelu.
|
||||
|
||||
uBOL je zcela deklarativní, což znamená, že pro filtrování není potřeba permanentní proces uBOL a filtrování obsahu založené na vstřikování CSS/JS je spolehlivě prováděno samotným prohlížečem, nikoli rozšířením. To znamená, že samotný uBOL nespotřebovává zdroje CPU/paměti, zatímco probíhá blokování obsahu – proces servisního pracovníka uBOL je vyžadován _pouze_ při interakci s vyskakovacím panelem nebo stránkami nastavení.
|
||||
|
||||
uBOL nevyžaduje rozsáhlá oprávnění ke "čtení a úpravě dat" v době instalace, a proto má ihned po instalaci omezené možnosti ve srovnání s uBlock Origin nebo jinými blokovači obsahu, které vyžadují rozsáhlá oprávnění ke "čtení a úpravě dat" v době instalace.
|
||||
|
||||
Nicméně, uBOL vám umožňuje *explicitně* udělit rozšířená oprávnění na konkrétních webech podle vašeho výběru, aby mohl na těchto webech lépe filtrovat pomocí kosmetického filtrování a vstřikování skriptů.
|
||||
|
||||
Chcete-li na daném webu udělit rozšířená oprávnění, otevřete vyskakovací panel a vyberte vyšší režim filtrování, například optimální nebo kompletní.
|
||||
|
||||
Prohlížeč vás poté upozorní na důsledky udělení dalších oprávnění požadovaných rozšířením na aktuálním webu a vy budete muset prohlížeči sdělit, zda žádost přijímáte nebo odmítáte.
|
||||
|
||||
Pokud přijmete žádost uBOL o další oprávnění na aktuálním webu, bude moci lépe filtrovat obsah aktuálního webu.
|
||||
|
||||
Výchozí filtrovací režim můžete nastavit na stránce nastavení uBOL. Pokud jako výchozí zvolíte režim optimální nebo kompletní, budete muset uBOL udělit oprávnění ke čtení a úpravě dat na všech webových stránkách.
|
||||
|
||||
Mějte na paměti, že toto je stále nedokončená práce s těmito konečnými cíli:
|
||||
|
||||
- Žádná rozsáhlá oprávnění hostitele v době instalace -- rozšířená oprávnění uděluje explicitně uživatel na jednotlivých stránkách.
|
||||
|
||||
- Zcela deklarativní pro spolehlivost a efektivitu CPU/paměti.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
uBO Lite (uBOL) is a *permission-less* MV3-based content blocker.
|
||||
uBO Lite (uBOL) is an MV3-based content blocker.
|
||||
|
||||
The default ruleset corresponds to uBlock Origin's default filterset:
|
||||
|
||||
@@ -7,24 +7,6 @@ The default ruleset corresponds to uBlock Origin's default filterset:
|
||||
- EasyPrivacy
|
||||
- Peter Lowe’s Ad and tracking server list
|
||||
|
||||
You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
|
||||
You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
|
||||
|
||||
uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
|
||||
|
||||
uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
|
||||
|
||||
However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
|
||||
|
||||
To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
|
||||
|
||||
The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
|
||||
|
||||
If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
|
||||
|
||||
You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
|
||||
|
||||
Keep in mind this is still a work in progress, with these end goals:
|
||||
|
||||
- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
|
||||
|
||||
- Entirely declarative for reliability and CPU/memory efficiency.
|
||||
|
@@ -1,30 +1,12 @@
|
||||
uBO Lite (uBOL) is a *permission-less* MV3-based content blocker.
|
||||
uBO Lite (uBOL) is an MV3-based content blocker.
|
||||
|
||||
The default ruleset corresponds to uBlock Origin's default filterset:
|
||||
Mae'r set reolau ddiofyn yn cyfateb i set hidlo diofyn uBlock Origin:
|
||||
|
||||
- uBlock Origin's built-in filter lists
|
||||
- EasyList
|
||||
- EasyPrivacy
|
||||
- Peter Lowe’s Ad and tracking server list
|
||||
|
||||
You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
|
||||
You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
|
||||
|
||||
uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
|
||||
|
||||
uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
|
||||
|
||||
However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
|
||||
|
||||
To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
|
||||
|
||||
The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
|
||||
|
||||
If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
|
||||
|
||||
You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
|
||||
|
||||
Keep in mind this is still a work in progress, with these end goals:
|
||||
|
||||
- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
|
||||
|
||||
- Entirely declarative for reliability and CPU/memory efficiency.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
uBO Lite (uBOL) er en *tilladelsesløs* MV3-baseret indholdsblocker.
|
||||
uBO Lite (uBOL) er en MV3-baseret indholdsblocker.
|
||||
|
||||
Standardregelsættet svarer til uBlock Origins standardfiltersæt:
|
||||
|
||||
@@ -7,24 +7,6 @@ Standardregelsættet svarer til uBlock Origins standardfiltersæt:
|
||||
- EasyPrivacy
|
||||
- Peter Lowe’s Ad and tracking server list
|
||||
|
||||
Flere regelsæt kan tilføjes ved at gå til indstillingssiden -- klik på ikonet _Cogs_ i pop op-panelet.
|
||||
Flere regelsæt kan aktiveres ved at gå til indstillingssiden -- klik på ikonet _Tandhjul_ i pop op-panelet.
|
||||
|
||||
uBOL er fuldstændig deklarativ, hvilket betyder, at ingen permanent uBOL-proces behøves for at filtreringen kan finde sted, og CSS/JS-injektionsbaseret indholdsfiltrering udføres pålideligt af browseren selv i stedet for af udvidelsen. Dette betyder, at uBOL ikke selv forbruger CPU-/hukommelsesressourcer under indholdsblokeringen -- uBOLs tjenestearbejdsproces er _kun_ nødvendig under interaktion med pop op-panelet eller indstillingssiderne.
|
||||
|
||||
uBOL kræver ikke en omfattende "læse og ændre data" tilladelse under installationen, derfor dens begrænsede egenskaber fra start af sammenlignet med uBlock Origin eller andre indholdsblockere, som kræver omfattende "læse/ændre data" tilladelser under installationen.
|
||||
|
||||
uBOL giver dog mulighed for *eksplicit* at tildele udvidede tilladelser på bestemte websteder efter eget valg, så den bedre kan filtrere på disse websteder vha. kosmetisk filtrering og scriptlet-injektioner.
|
||||
|
||||
For at tildele udvidede tilladelser på et givent websted, åbn pop op-panelet og vælg en højere filtreringstilstand, såsom Optimal eller Komplet.
|
||||
|
||||
Browseren advarer derefter om virkningerne af de ekstra tildelte tilladelser, som udvidelsen anmoder om på det aktuelle websted, og man vil skulle fortælle browseren, hvorvidt anmodningen accepteres eller afslås.
|
||||
|
||||
Accepteres uBOLs anmodning om ekstra tilladelser på det aktuelle websted, vil den bedre kunne filtrere indhold på webstedet.
|
||||
|
||||
Standardfiltreringstilstanden kan angives via uBOLs indstillingsside. Hvis tilstanden Optimal eller Komplet vælges som standardtilstand, skal uBOL tildeles tilladelse til at læse og ændre data på alle websteder.
|
||||
|
||||
Husk dog, at dette stadig er et igangværende arbejde med disse slutmål:
|
||||
|
||||
- Ingen omfattende værtstilladelser under installationen -- udvidede tilladelser tildeles eksplicit af brugeren på webstedsbasis.
|
||||
|
||||
- Fuldstændig deklarativ for pålidelighed og CPU-/hukommelseseffektivitet.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
uBO Lite (uBOL) ist ein Inhaltsblocker, der *ohne Berechtigungen* auskommt und auf MV3 basiert.
|
||||
uBO Lite (uBOL) ist ein MV3-basierter Inhaltsblocker.
|
||||
|
||||
Die Standardregeln entsprechen den Standardfiltern von uBlock Origin:
|
||||
|
||||
@@ -7,24 +7,6 @@ Die Standardregeln entsprechen den Standardfiltern von uBlock Origin:
|
||||
- EasyPrivacy
|
||||
- Peter Lowe’s Ad and tracking server list
|
||||
|
||||
Sie können weitere Regeln hinzufügen, indem Sie die Optionen aufrufen — klicken Sie dazu im Pop-up-Fenster auf das Symbol mit den _Zahnrädern_.
|
||||
Sie können weitere Regeln aktivieren, indem Sie die Einstellungen aufrufen — klicken Sie dazu im Pop-up-Fenster auf das Symbol mit den _Zahnrädern_.
|
||||
|
||||
uBOL ist vollständig deklarativ, d. h. es ist kein dauerhafter uBOL-Prozess für das Filtern erforderlich, und die auf CSS/JS-Injektion basierende Inhaltsfilterung wird zuverlässig vom Browser selbst und nicht von der Erweiterung durchgeführt. Das bedeutet, dass uBOL selbst keine CPU-/Speicherressourcen verbraucht, während der Inhalt blockiert wird — der uBOL-Service-Worker-Prozess wird _nur_ benötigt, wenn Sie mit dem Pop-up-Fenster oder den Optionen interagieren.
|
||||
|
||||
uBOL erfordert bei der Installation keine weitreichende Berechtigung zum Lesen und Ändern von Daten, daher sind die Möglichkeiten im Vergleich zu uBlock Origin oder anderen Inhaltsblockern, die bei der Installation weitreichende Berechtigungen zum Lesen und Ändern von Daten erfordern, von vornherein begrenzt.
|
||||
|
||||
Allerdings können Sie mit uBOL *explizit* erweiterte Berechtigungen für bestimmte Websites Ihrer Wahl erteilen, sodass diese Websites durch kosmetisches Filtern und Scriptlet-Injektionen besser gefiltert werden können.
|
||||
|
||||
Um erweiterte Berechtigungen für eine bestimmte Website zu erteilen, öffnen Sie das Pop-up-Fenster und wählen Sie einen stärkeren Filtermodus wie »Optimal« oder »Vollständig«.
|
||||
|
||||
Der Browser warnt Sie anschließend über die Auswirkungen der zusätzlichen Berechtigungen, die von der Erweiterung für die aktuelle Website angefordert werden, und Sie können entscheiden, ob Sie zustimmen oder ablehnen.
|
||||
|
||||
Wenn Sie die Anfrage von uBOL nach zusätzlichen Berechtigungen für die aktuelle Website zustimmen, kann uBOL die Inhalte für die aktuelle Website besser filtern.
|
||||
|
||||
Sie können den Standardfiltermodus in den Optionen von uBOL festlegen. Wenn Sie den Modus »Optimal« oder »Vollständig« als Standardmodus wählen, müssen Sie uBOL die Berechtigung erteilen, Daten auf allen Websites lesen und ändern zu dürfen.
|
||||
|
||||
Denken Sie daran, dass sich dieses Projekt noch in Entwicklung befindet und folgende Ziele verfolgt:
|
||||
|
||||
- Keine weitreichenden Host-Berechtigungen bei der Installation — erweiterte Berechtigungen werden explizit von Ihnen für jede einzelne Website erteilt.
|
||||
|
||||
- Vollständig deklarativ für Zuverlässigkeit und CPU-/Speichereffizienz.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
Το uBO Lite (uBOL) είναι ένας blocker περιεχομένου *χωρίς άδειες* που βασίζεται σε MV3.
|
||||
Το uBO Lite (uBOL) είναι εργαλείο φραγής περιεχομένου, που βασίζεται στο MV3.
|
||||
|
||||
Το προεπιλεγμένο σύνολο κανόνων αντιστοιχεί στο προεπιλεγμένο σύνολο φίλτρων του uBlock Origin:
|
||||
|
||||
@@ -7,24 +7,6 @@
|
||||
- EasyPrivacy
|
||||
- Peter Lowe’s Ad and tracking server list
|
||||
|
||||
Μπορείτε να προσθέσετε περισσότερα σύνολα κανόνων μεταβαίνοντας στη σελίδα επιλογών -- κάντε κλικ στο εικονίδιο _Cogs_ στον αναδυόμενο πίνακα.
|
||||
Μπορείτε να προσθέσετε περισσότερα σύνολα κανόνων από τη σελίδα επιλογών -- κάντε κλικ στο εικονίδιο _γρανάζι_ στον αναδυόμενο πίνακα.
|
||||
|
||||
Το uBOL είναι εξ'ολοκλήρου δηλωτικό, πράγμα που σημαίνει ότι δεν υπάρχει ανάγκη για μόνιμη διαδικασία uBOL για να πραγματοποιηθεί το φιλτράρισμα, και το φιλτράρισμα περιεχομένου που βασίζεται σε έγχυση CSS/JS εκτελείται αξιόπιστα από το ίδιο το πρόγραμμα περιήγησης και όχι από την επέκταση. Αυτό σημαίνει ότι το ίδιο το uBOL δεν καταναλώνει πόρους CPU/μνήμης ενώ ο αποκλεισμός περιεχομένου είναι σε εξέλιξη -- η διαδικασία του service worker του uBOL απαιτείται _μόνο_ όταν αλληλεπιδράτε με τον αναδυόμενο πίνακα ή τις σελίδες επιλογών.
|
||||
|
||||
Το uBOL δεν απαιτεί ευρεία άδεια "ανάγνωσης και τροποποίησης δεδομένων" κατά τον χρόνο εγκατάστασης, επομένως έχει εξαρχής περιορισμένες δυνατότητές σε σύγκριση με το uBlock Origin ή άλλα προγράμματα αποκλεισμού περιεχομένου που απαιτούν ευρείες άδειες "ανάγνωσης/τροποποίησης δεδομένων" κατά την εγκατάσταση.
|
||||
|
||||
Ωστόσο, το uBOL σάς επιτρέπει *ρητά* να εκχωρείτε εκτεταμένες άδειες σε συγκεκριμένους ιστότοπους της επιλογής σας, ώστε να μπορεί να φιλτράρει καλύτερα σε αυτούς τους ιστότοπους χρησιμοποιώντας κοσμητικό φιλτράρισμα και έγχυση scriptlet.
|
||||
|
||||
Για να εκχωρήσετε εκτεταμένα δικαιώματα σε έναν δεδομένο ιστότοπο, ανοίξτε το αναδυόμενο πλαίσιο και επιλέξτε μια υψηλότερη λειτουργία φιλτραρίσματος, όπως Βέλτιστη ή Ολοκληρωμένη.
|
||||
|
||||
Στη συνέχεια, το πρόγραμμα περιήγησης θα σας προειδοποιήσει για τα αποτελέσματα της χορήγησης των πρόσθετων δικαιωμάτων που ζητούνται από την επέκταση στον τρέχοντα ιστότοπο και θα πρέπει να ενημερώσετε το πρόγραμμα περιήγησης εάν αποδέχεστε ή απορρίπτετε το αίτημα.
|
||||
|
||||
Εάν αποδεχτείτε το αίτημα του uBOL για πρόσθετα δικαιώματα στον τρέχοντα ιστότοπο, θα μπορεί να φιλτράρει καλύτερα το περιεχόμενο για τον τρέχοντα ιστότοπο.
|
||||
|
||||
Μπορείτε να ορίσετε την προεπιλεγμένη λειτουργία φιλτραρίσματος από τη σελίδα επιλογών του uBOL. Εάν επιλέξετε τη λειτουργία Βέλτιστη ή Ολοκληρωμένη ως προεπιλεγμένη, θα πρέπει να εκχωρήσετε στην uBOL την άδεια ανάγνωσης και τροποποίησης δεδομένων σε όλους τους ιστότοπους.
|
||||
|
||||
Λάβετε υπόψη ότι αυτό είναι ακόμη ένα έργο σε εξέλιξη, με αυτούς τους τελικούς στόχους:
|
||||
|
||||
- Να μην υπάρχουν ευρείες άδειες hosts κατά την εγκατάσταση -- οι εκτεταμένες άδειες παραχωρούνται ρητά από τον χρήστη σε βάση ανά τοποθεσία.
|
||||
|
||||
- Εντελώς δηλωτικό για αξιοπιστία και απόδοση CPU/μνήμης.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
uBO Lite (uBOL) is a *permission-less* MV3-based content blocker.
|
||||
uBO Lite (uBOL) is an MV3-based content blocker.
|
||||
|
||||
The default ruleset corresponds to uBlock Origin's default filterset:
|
||||
|
||||
@@ -7,24 +7,6 @@ The default ruleset corresponds to uBlock Origin's default filterset:
|
||||
- EasyPrivacy
|
||||
- Peter Lowe’s Ad and tracking server list
|
||||
|
||||
You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
|
||||
You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
|
||||
|
||||
uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
|
||||
|
||||
uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
|
||||
|
||||
However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
|
||||
|
||||
To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
|
||||
|
||||
The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
|
||||
|
||||
If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
|
||||
|
||||
You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
|
||||
|
||||
Keep in mind this is still a work in progress, with these end goals:
|
||||
|
||||
- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
|
||||
|
||||
- Entirely declarative for reliability and CPU/memory efficiency.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
uBO Lite (uBOL) is a *permission-less* MV3-based content blocker.
|
||||
uBO Lite (uBOL) is an MV3-based content blocker.
|
||||
|
||||
The default ruleset corresponds to uBlock Origin's default filterset:
|
||||
|
||||
@@ -7,24 +7,6 @@ The default ruleset corresponds to uBlock Origin's default filterset:
|
||||
- EasyPrivacy
|
||||
- Peter Lowe’s Ad and tracking server list
|
||||
|
||||
You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
|
||||
You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
|
||||
|
||||
uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
|
||||
|
||||
uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
|
||||
|
||||
However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
|
||||
|
||||
To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
|
||||
|
||||
The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
|
||||
|
||||
If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
|
||||
|
||||
You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
|
||||
|
||||
Keep in mind this is still a work in progress, with these end goals:
|
||||
|
||||
- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
|
||||
|
||||
- Entirely declarative for reliability and CPU/memory efficiency.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
uBO Lite (uBOL) es un bloqueador de contenido con *menos permisos* basado en MV3.
|
||||
uBO Lite (uBOL) es un bloqueador de contenido basado en MV3.
|
||||
|
||||
Por defecto ya trae configuradas las siguientes listas de filtros:
|
||||
|
||||
@@ -7,24 +7,6 @@ Por defecto ya trae configuradas las siguientes listas de filtros:
|
||||
- EasyPrivacy
|
||||
- Peter Lowe’s Ad and tracking server list
|
||||
|
||||
Puedes añadir más conjuntos de reglas visitando la página de opciones, haz clic en el icono de _engranaje_ del panel emergente.
|
||||
Puedes habilitar más conjuntos de reglas visitando la página de opciones, haz clic en el icono de _engranaje_ del panel emergente.
|
||||
|
||||
uBOL es completamente declarativo, lo que significa que no hay necesidad de un proceso uBOL permanente para que se produzca el filtrado, y el filtrado de contenido basado en la inyección de CSS/JS se realiza de forma confiable por el propio navegador en lugar de la extensión. Esto significa que uBOL en sí mismo no consume recursos de CPU/memoria mientras el bloqueo de contenido está en curso, el proceso service worker de uBOL se requiere _solo_ cuando se interactúa con el panel emergente o las páginas de opciones.
|
||||
|
||||
uBOL no requiere amplios permisos para "leer y modificar datos" en el momento de la instalación, de ahí sus capacidades limitadas en comparación con uBlock Origin u otros bloqueadores de contenido que requieren amplios permisos para "leer y modificar datos" en el momento de la instalación.
|
||||
|
||||
Sin embargo, uBOL te permite otorgar *explícitamente* permisos extendidos en sitios específicos de tu elección para que pueda filtrar mejor en esos sitios usando filtrado cosmético e inyecciones de scriptlet.
|
||||
|
||||
Para otorgar permisos extendidos en un sitio determinado, abre el panel emergente y elige un modo de filtrado superior, como óptimo o completo.
|
||||
|
||||
Después el navegador te advertirá sobre los efectos de otorgar los permisos adicionales solicitados por la extensión en el sitio actual, y deberás indicar al navegador si aceptas o rechazas la solicitud.
|
||||
|
||||
Si aceptas la solicitud de uBOL para permisos adicionales en el sitio actual, será capaz de filtrar mejor el contenido para el sitio actual.
|
||||
|
||||
Puedes establecer el modo de filtrado predeterminado desde la página de opciones de uBOL. Si eliges como predeterminado el modo óptimo o completo, tendrás que otorgar a uBOL el permiso para leer y modificar datos en todos los sitios web.
|
||||
|
||||
Téngase en cuenta que esto todavía es un trabajo en progreso, con estos objetivos finales:
|
||||
|
||||
- Sin amplios permisos de host en el momento de la instalación, los permisos ampliados son otorgados explícitamente por el usuario en cada sitio.
|
||||
|
||||
- Completamente declarativo para confiabilidad y eficiencia de la CPU/memoria.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
uBO Lite (uBOL) on MV3-l põhinev *lubadeta* sisutõkestaja.
|
||||
uBO Lite (uBOL) on MV3-l põhinev sisutõkestaja.
|
||||
|
||||
Tavaline reeglitekogum vastab uBlock Origini tavalisele filtritekogumile:
|
||||
|
||||
@@ -7,24 +7,6 @@ Tavaline reeglitekogum vastab uBlock Origini tavalisele filtritekogumile:
|
||||
- EasyPrivacy
|
||||
Peter Lowe'i reklaamide ja jälitusserverite loend
|
||||
|
||||
Reeglitekogumeid saate lisada valikute lehelt ehk avanenud paneelis klõpsake _Cogs_ ikooni.
|
||||
Rohkem reegleid valikutest ehk toksake _Cogs_ ikooni hüpikpaneelis.
|
||||
|
||||
uBOL on läbinisti deklaratiivne ehk filtreerimiseks pole vaja kogu aeg töötavat uBOLi protsessi ja CSS/JS süstipõhist sisu filtreerib tegelikult brauser, mitte laiendus. Teisisõnu, uBOL ei kasuta sisu tõkestamisel protsessori/mälu ressursse. uBOLi teenuse toimimise protsessi on vaja _vaid_ juhul, kui kasutate hüpikpaneeli või valikute lehekülgi.
|
||||
|
||||
uBOL ei nõua paigaldamise ajal teadatuntud andmete lugemise ja muutmise luba, seega võrreldes seda nõudva laiendusega uBlock Origin või muu sisutõkestiga on uBOL-i piiratus üks selle funktsioonidest.
|
||||
|
||||
Kuid uBOL võimaldab *selgesõnaliselt* anda täpsemaid lubasid teie valitud veebilehtedele, et neid saaks paremini filtreerida ilufiltrite ja skriptisüstidega.
|
||||
|
||||
Veebilehele täpsustatud lubade andmiseks ava hüpikpaneel ja vali põhjalikum filtreerimisrežiim, näiteks Optimaalne või Põhjalik.
|
||||
|
||||
Seejärel hoiatab brauser teid praeguse saidi laienduse taotletud täiendavate õiguste andmise tagajärgede eest ja peate brauserile ütlema, kas nõustute taotlusega või keeldute sellest.
|
||||
|
||||
Kui nõustute uBOLi taotlusega täiendavate õiguste saamiseks praegusel saidil, saab see praeguse saidi sisu paremini filtreerida.
|
||||
|
||||
Vaikimisi filtreerimisrežiimi saate määrata uBOLi suvandite lehelt Kui määrate optimaalse või põhjaliku režiimi tavaliseks, peate andma uBOLile loa kõikide veebilehtede andmete lugemiseks ja muutmiseks.
|
||||
|
||||
Pidage meeles, et see on veel pooleliolev töö, mille lõppeesmärgid on järgmised:
|
||||
|
||||
- Installimise ajal laialdased hostiõigused puuduvad – kasutaja annab laiendatud load selgesõnaliselt saidipõhiselt.
|
||||
|
||||
- Täiesti deklaratiivne töökindluse ja protsessori/mälu tõhususe osas.
|
||||
|
@@ -1,30 +1,12 @@
|
||||
uBO Lite (uBOL) is a *permission-less* MV3-based content blocker.
|
||||
uBO Lite (uBOL) is an MV3-based content blocker.
|
||||
|
||||
The default ruleset corresponds to uBlock Origin's default filterset:
|
||||
Lehenespenez, iragazki-zerrenda hauek ditu konfiguratuta:
|
||||
|
||||
- uBlock Origin's built-in filter lists
|
||||
- EasyList
|
||||
- EasyPrivacy
|
||||
- Peter Lowe’s Ad and tracking server list
|
||||
UblockOrigin-eko filtro lista
|
||||
ZerrendaErraza
|
||||
PribazitateaErraza
|
||||
Peter Lowe-ren Ad and tracker zerrenda
|
||||
|
||||
You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
|
||||
Ruleta gehiago aktibatu ahal duzu aukerak orria --klikatu _Cogs_ ikonoa panelearen lehioan
|
||||
|
||||
uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
|
||||
|
||||
uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
|
||||
|
||||
However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
|
||||
|
||||
To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
|
||||
|
||||
The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
|
||||
|
||||
If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
|
||||
|
||||
You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
|
||||
|
||||
Keep in mind this is still a work in progress, with these end goals:
|
||||
|
||||
- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
|
||||
|
||||
- Entirely declarative for reliability and CPU/memory efficiency.
|
||||
uBOL guztiz deklaratiboa da, hau da, ez dago uBOL prozesu iraunkor baten beharrik iragazketa gertatzeko, eta CSS/JS injekzioan oinarritutako edukien iragazketa nabigatzaileak berak egiten du fidagarritasunez, luzapenaren arabera beharrean. Horrek esan nahi du uBOLek berak ez duela CPU/memoria baliabiderik kontsumitzen edukien blokeoa martxan dagoen bitartean... uBOLren zerbitzuko langileen prozesua _only_ behar da popup panelarekin edo aukera orriekin elkarreragiten denean.
|
||||
|
@@ -1,30 +1,12 @@
|
||||
uBO Lite (uBOL) is a *permission-less* MV3-based content blocker.
|
||||
uBO Lite (uBOL) is an MV3-based content blocker.
|
||||
|
||||
The default ruleset corresponds to uBlock Origin's default filterset:
|
||||
مجموعه قوانین پیش فرض آن مطابق با مجموعه قوانین پیش فرض uBlock Origin است:
|
||||
|
||||
- uBlock Origin's built-in filter lists
|
||||
- EasyList
|
||||
- EasyPrivacy
|
||||
- Peter Lowe’s Ad and tracking server list
|
||||
|
||||
You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
|
||||
You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
|
||||
|
||||
uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
|
||||
|
||||
uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
|
||||
|
||||
However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
|
||||
|
||||
To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
|
||||
|
||||
The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
|
||||
|
||||
If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
|
||||
|
||||
You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
|
||||
|
||||
Keep in mind this is still a work in progress, with these end goals:
|
||||
|
||||
- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
|
||||
|
||||
- Entirely declarative for reliability and CPU/memory efficiency.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
uBO Lite (uBOL) on *käyttöoikeudeton* MV3-pohjainen sisällönestotyökalu.
|
||||
uBO Lite (uBOL) on MV3-pohjainen sisällönestotyökalu.
|
||||
|
||||
Oletusarvoiset sääntömääritykset vastaavat uBlock Origin -laajennuksen oletuksia:
|
||||
|
||||
@@ -7,24 +7,6 @@ Oletusarvoiset sääntömääritykset vastaavat uBlock Origin -laajennuksen olet
|
||||
- EasyPrivacy
|
||||
- Peter Lowe’s Ad and tracking server list
|
||||
|
||||
Voit lisätä sääntömäärityksiä asetussivulta -- paina ponnahduspaneelin _Rataskuvaketta_.
|
||||
Voit aktivoida lisää sääntömäärityksiä laajennuksen asetuksista – paina ponnahduspaneelin _Ratas_-kuvaketta.
|
||||
|
||||
uBOL on täysin deklaratiivinen, eli suodatus ei edellytä pysyvää uBOL-prosessia ja CSS-/JS-koodin manipulointiin perustuva sisällönsuodatuksen suorittaa laajennusprosessin sijaan luotettavasti selainsovellus. Tämän ansiosta itse uBOL ei kuormita prosessoria tai keskusmuistia sisällöneston tapahtuessa -- uBOL:n työprosessia tarvitaan _ainoastaan_ ponnahduspaneelia ja asetussivuja käytettäessä.
|
||||
|
||||
uBOL ei edellytä laajan tietojen luku- ja muokkausoikeuden myöntämistä asennuksen yhteydessä, jonka vuoksi sen oletusarvoiset valmiudet ovat uBlock Originia ja muita vastaavia sisällönestotyökaluja rajallisemmat.
|
||||
|
||||
On kuitenkin mahdollista myöntää *yksinomaisesti* uBOL:lle laajennetut käyttöoikeudet sivustokohtaisesti niiden suodatuksen tehostamiseksi kosmeettisella suodatuksella ja scriplet-injektoinnilla.
|
||||
|
||||
Laajemmat oikeudet myönnetään avoimelle sivustolle avaamalla ponnahduspaneeli ja valitsemalla korkeampi suodatustaso, kuten Optimaalinen tai Täysi.
|
||||
|
||||
Tällöin selain varoittaa laajennuksen avoimelle sivustolle pyytämien käyttöoikeuksien seurauksista ja pyytää hyväksymään tai hylkäämään pyynnön.
|
||||
|
||||
Jos uBOL:n käyttöoikeuspyyntö avoimelle sivustolle hyväksytään, se pystyy suodattamaan sivuston sisältöä tehokkaammin.
|
||||
|
||||
Voit asettaa oletusarvoisen suodatustilan uBOL:n asetussivulta. Jos valitset oletustilaksi Optimaalinen tai Täysi, on uBOL:lle myönnettävä oikeus lukea ja muokata tietojasi kaikilla verkkosivustoilla.
|
||||
|
||||
Huomioithan, että laajennuksen kehitys vielä kesken, seuraavilla tavoitteilla:
|
||||
|
||||
- Laajoja käyttöoikeuksia ei tarvita asennusvaiheesssa, vaan laajennetut oikeudet myönnetään aina sivustokohtaisesti käyttäjän toimesta.
|
||||
|
||||
- Täysin deklaratiivinen luotettavuutta ja prosessorin/muistin kuormituksen keventämiseksi.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
Ang uBO Lite (uBOL) ay isang eksperimental at *permission-less* na tagaharang ng content na nakabase sa MV3.
|
||||
Isang content blocker na nakabase sa MV3 ang uBO Lite (uBOL).
|
||||
|
||||
Tulad ng uBlock Origin, ito rin ang mga default na listahan ng mga filter:
|
||||
|
||||
@@ -7,24 +7,6 @@ Tulad ng uBlock Origin, ito rin ang mga default na listahan ng mga filter:
|
||||
- EasyPrivacy
|
||||
- Listahan ni Peter Lowe sa mga ad at tracking server (Peter Lowe’s Ad and tracking server list)
|
||||
|
||||
Makakapagdagdag ka ng higit pang mga patakaran sa pahina ng mga opsyon -- pindutin ang icon ng _gulong_ sa popup panel.
|
||||
Maaring magpagana ng mas maraming ruleset sa page ng options -- pindutin ang _Cogs_ sa popup na panel.
|
||||
|
||||
Deklaratibo lamang ang uBOL, kaya hindi nito kailangan ng permanenteng proseso upang mag-filter, at mainam na ginagawa ng browser mismo imbes na ekstensyon ang pagfi-filter sa content na nakabase sa CSS o JS. Ibig-sabihin, hindi kumokonsyumo ng CPU o memorya ang uBOL habang nanghaharang -- ang proseso ng trabahante ng serbisyo ay kailangan _lang_ kung nasa popup panel o pahina ng opsyon ka.
|
||||
|
||||
Hindi kailangan ng uBOL ang malawakang pahintulot para "basahin at baguhin ang data" pagka-install, kaya kung bago pa lang itong install ay limitado ang kakayahan nito kumpara sa uBlock Origin o iba pang mga pangharang ng content na nangangailangan ng malawakang pahintulot para "basahin at baguhin ang data" pagka-install.
|
||||
|
||||
Ngunit, pwede mong *pasadyang* pahintulutan ang uBOL na magkaroon ng pinalawak na pahintulot sa mga website na pipiliin mo para mas mapabuti ang pagfi-filter sa mga site na iyon gamit ang kosmetikong pagfi-filter at injeksyon ng scriptlet.
|
||||
|
||||
Upang bigyan ito ng pinalawak na pahintulot sa isang site, buksan ang popup panel at pumili ng isang mode sa pagfi-filter tulad ng Pinainam o Kumpleto.
|
||||
|
||||
Babalaan ka ng browser tungkol sa mga epekto ng pagbibigay ng karagdagang pahintulot na hinihiling ng ekstensyon sa kasalukuyang site, at kailangan mong tumugon kung pinapahintulutan mo ba ito o hindi.
|
||||
|
||||
Kung tatanggapin mo ang hiling ng uBOL para sa karagdagang mga pahintulot sa kasalukuyang site, mas magiging mainam ang pagfi-filter nito sa content para sa kasalukuyang site.
|
||||
|
||||
Maitatakda mo ang default na mode sa pagfi-filter sa pahina ng mga opsyon ng uBOL. Kailangan mong pahintulutan ang uBOL na basahin o baguhin ang datos sa lahat ng mga website kung pipiliin mo ang Pinainam o Kumpleto bilang default na mode sa pagfi-filter.
|
||||
|
||||
Tandaang kasalukuyan pang binubuo ang ekstensyong ito, at nilalayon nitong:
|
||||
|
||||
- Walang kakailanganing malawakang pahintulot pagka-install -- ibibigay lang ng user ang karagdagang pahintulot sa mga piling site.
|
||||
|
||||
- Deklaratibo lamang upang maging mapagkakatiwalaan at matipid sa CPU at memorya.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
uBO Lite (uBOL) est un bloqueur de contenu *sans permission* basé sur le manifeste MV3.
|
||||
uBO Lite (uBOL) est un bloqueur de contenu basé sur le manifeste MV3.
|
||||
|
||||
Les règles par défaut correspondent au filtrage par défaut d'uBlock Origin :
|
||||
|
||||
@@ -7,24 +7,6 @@ Les règles par défaut correspondent au filtrage par défaut d'uBlock Origin :
|
||||
- EasyPrivacy
|
||||
- La liste anti-serveurs pub et pistage de Peter Lowe
|
||||
|
||||
Vous pouvez ajouter plus de règles en consultant la page des paramètres -- Cliquez sur l'_Engrenage_ dans le panneau pop-up.
|
||||
Vous pouvez ajouter plus de règles en consultant la page des paramètres -- Cliquez sur l'icône de l'_Engrenage_ dans le panneau pop-up.
|
||||
|
||||
uBOL est entièrement déclarative, c'est-à-dire qu'il n'y a pas besoin d'un processus uBOL permanent pour filtrer, et le filtrage basé sur l'injection CSS/JavaScript se fait en toute fiabilité par le navigateur lui-même. Cela veut dire qu'en soi, uBOL ne consomme pas de ressources processeur/mémoire pendant le blocage de contenu -- l'agent de service d'uBOL n'est sollicité _que_ quand vous interagissez avec le panneau pop-up ou la page des paramètres.
|
||||
|
||||
Contrairement à uBlock Origin ou d'autres extensions de blocage, uBOL ne nécessite pas de larges permissions de "lecture/modification des données" au moment de l'installation, ce qui explique ses capacités au départ limitées.
|
||||
|
||||
Cependant, uBOL vous permet *explicitement* d'accorder des permissions étendues sur les sites Web de votre choix, pour qu'elle puisse mieux les filtrer en utilisant le filtrage esthétique et des injections de scriptlet.
|
||||
|
||||
Pour accorder des permissions étendues sur un site Web donné, ouvrez le panneau pop-up et choisissez un mode de filtrage plus élevé comme le mode Optimal ou le mode Complet.
|
||||
|
||||
Le navigateur vous préviendra alors des effets de l'accord de permissions additionnelles requises par l'extension sur le site Web en cours de consultation et vous devrez indiquer votre choix au navigateur (Accepter/Refuser).
|
||||
|
||||
Si vous acceptez la requête d'uBOL pour des permissions additionnelles sur le site Web en cours de consultation, le filtrage de son contenu sera renforcé.
|
||||
|
||||
Vous pouvez définir le mode de filtrage par défaut depuis la page des paramètres d'uBOL. Si vous choisissez le mode Optimal ou Complet en tant que mode par défaut, vous devrez accorder à uBOL l'autorisation de lire et de modifier des données sur tous les sites Web.
|
||||
|
||||
Gardez à l'esprit que c'est en cours de développement, avec comme objectifs :
|
||||
|
||||
- De ne pas accorder de permissions globales au moment de l'installation -- les permissions étendues s'accordent explicitement par l'utilisateur site par site.
|
||||
|
||||
- De travailler de manière entièrement déclarative pour la fiabilité et l'efficacité processeur/mémoire.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
uBO Lite (uBOL) is in *tastimmingsleaze* MV3-basearre ynhâldsblokkearder.
|
||||
uBO Lite (uBOL) is in MV3-basearre ynhâldsblokkearder.
|
||||
|
||||
De standert regelset komt oerien mei de standert filterset fan uBlock Origin:
|
||||
|
||||
@@ -7,24 +7,6 @@ De standert regelset komt oerien mei de standert filterset fan uBlock Origin:
|
||||
- EasyPrivacy
|
||||
- Peter Lowe’s Ad and tracking-serverlist
|
||||
|
||||
Jo kinne mear regelsets tafoegje troch de opsjesside te besykjen – klik op it _tântsjilpiktogram_ yn it pop-uppaniel.
|
||||
Jo kinne mear regelsets ynskeakelje troch de opsjesside te besykjen – klik op it _tântsjilpiktogram_ yn it pop-uppaniel.
|
||||
|
||||
uBOL is folslein deklaratyf, wat betsjut dat in permanint uBOL-proses foar de filtering net nedich is, en ynhâldsfiltering op basis fan CSS/JS-ynjeksje op in betroubere manier troch de browser sels útfierd wurdt yn stee fan de útwreiding. Dit betsjut dat uBOL sels gjin CPU-/ûnthâldboarnen brûkt wylst ynhâldsblokkearring aktyf is – it serviceworker-proses fan uBOL is _allinnich_ fereaske as jo mei it pop-uppaniel of de opsjessiden wurkje.
|
||||
|
||||
uBOL fereasket gjin brede tastimming foar it ‘lêzen en oanpassen fan gegevens’ wylst ynstallaasje, fan dêr de beheinde ynboude mooglikheden dêrfan yn fergeliking mei uBlock Origin of oare ynhâldsblokkearders dy’t brede tastimmingen foar it ‘lêzen en oanpassen fan gegevens’ fereaskje wylst de ynstallaasje.
|
||||
|
||||
Jo kinne yn uBOL echter *eksplisyt* wiidweidige tastimmingen ferliene op bepaalde websites fan jo kar, sadat it op dy websites better filterje kin fia kosmetyske filtering en scriptlet-ynjeksjes.
|
||||
|
||||
Om wiidweidige tastimmingen op in bepaalde website te ferlienen, iepenje jo it pop-uppaniel en kieze jo in hegere filtermodus, lykas Optimaal of Folslein.
|
||||
|
||||
De browser warskôget jo dan oer de gefolgen fan it ferlienen fan de troch de útwreiding oanfrege oanfoljende tastimmingen op de aktuele website, en jo moatte de browser witte litte oft jo de oanfraach akseptearje of wegerje.
|
||||
|
||||
As jo de oanfraach fan uBOL foar oanfoljende tastimmingen op de aktuele website akseptearje, sil it ynhâld foar de aktuele website better filterje kinne.
|
||||
|
||||
Jo kinne de standert filtermodus ynstelle fan de opsjesside fan uBOL ôf. As jo de modus Optimaal of Folslein as de standertmodus kieze, moatte jo uBOL de tastimming foar it lêzen en oanpassen fan gegevens op alle websites te ferlienen.
|
||||
|
||||
Unthâld dat dit noch wurk yn útfiering is, mei dizze eindoelen:
|
||||
|
||||
- Gjin brede host-tastimmingen wylst ynstallaasje – wiidweidige tastimmingen wurde eksplisyt en per website ferliend troch de brûker.
|
||||
|
||||
- Folslein deklaratyf omwille fan betrouberheid en CPU-/ûnthâldeffisjinsje.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
uBO Lite (uBOL) é un bloqueador de contido baseado en MV3 *sen permisos.
|
||||
uBO Lite (uBOL) é un bloqueador de contido baseado en MV3.
|
||||
|
||||
O conxunto de regras predeterminado corresponde ao conxunto de filtros predeterminado de uBlock Origin:
|
||||
|
||||
@@ -7,24 +7,6 @@ O conxunto de regras predeterminado corresponde ao conxunto de filtros predeterm
|
||||
- EasyPrivacy
|
||||
Lista de servidores de seguimento e anuncios de Peter Lowe
|
||||
|
||||
Podes engadir máis conxuntos de regras visitando a páxina de opcións: fai clic na icona _Cogs_ no panel emerxente.
|
||||
Podes activar máis grupos de regras indo á páxina de opcións -- preme na roda dentada no panel emerxente.
|
||||
|
||||
uBOL é totalmente declarativo, o que significa que non é necesario un proceso permanente de uBOL para que se produza o filtrado e o filtrado de contido baseado en inxección de CSS/JS realízao de forma fiable o propio navegador en lugar da extensión. Isto significa que o propio uBOL non consume recursos de CPU/memoria mentres o bloqueo de contido está en curso -- o proceso do traballador do servizo de uBOL é necesario _só_ cando interactúas co panel emerxente ou coas páxinas de opcións.
|
||||
|
||||
uBOL non require amplos permisos de "ler e modificar datos" no momento da instalación, de aí as súas capacidades limitadas fóra da caixa en comparación con uBlock Origin ou outros bloqueadores de contido que requiren amplos permisos de "ler e modificar datos" no momento da instalación.
|
||||
|
||||
Non obstante, uBOL permítelle *de forma explícita* conceder permisos estendidos en sitios específicos da súa elección para que poida filtrar mellor neses sitios mediante filtrado cosmético e inxeccións de scriptlet.
|
||||
|
||||
Para conceder permisos estendidos nun sitio determinado, abra o panel emerxente e escolle un modo de filtrado superior, como Óptimo ou Completa.
|
||||
|
||||
A continuación, o navegador avisará sobre os efectos da concesión dos permisos adicionais solicitados pola extensión no sitio actual, e terá que indicarlle ao navegador se acepta ou rexeita a solicitude.
|
||||
|
||||
Se aceptas a solicitude de uBOL de permisos adicionais no sitio actual, poderá filtrar mellor o contido do sitio actual.
|
||||
|
||||
Podes establecer o modo de filtrado predeterminado desde a páxina de opcións de uBOL. Se escolle o modo Óptimo ou Completo como o predeterminado, terá que conceder a uBOL o permiso para ler e modificar datos en todos os sitios web.
|
||||
|
||||
Teña en conta que este aínda é un traballo en curso, cos seguintes obxectivos finais:
|
||||
|
||||
- Non hai permisos de host amplos no momento da instalación. Os permisos estendidos son concedidos explícitamente polo usuario por cada sitio.
|
||||
|
||||
- Totalmente declarativo para a fiabilidade e a eficiencia da CPU/memoria.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
uBO Lite (uBOL) is a *permission-less* MV3-based content blocker.
|
||||
uBO Lite (uBOL) is an MV3-based content blocker.
|
||||
|
||||
The default ruleset corresponds to uBlock Origin's default filterset:
|
||||
|
||||
@@ -7,24 +7,6 @@ The default ruleset corresponds to uBlock Origin's default filterset:
|
||||
- EasyPrivacy
|
||||
- Peter Lowe’s Ad and tracking server list
|
||||
|
||||
You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
|
||||
You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
|
||||
|
||||
uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
|
||||
|
||||
uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
|
||||
|
||||
However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
|
||||
|
||||
To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
|
||||
|
||||
The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
|
||||
|
||||
If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
|
||||
|
||||
You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
|
||||
|
||||
Keep in mind this is still a work in progress, with these end goals:
|
||||
|
||||
- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
|
||||
|
||||
- Entirely declarative for reliability and CPU/memory efficiency.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
uBO Lite (uBOL) הוא חוסם תוכן *ללא הרשאות* מבוסס MV3.
|
||||
uBO Lite (uBOL) הוא חוסם תוכן מבוסס MV3.
|
||||
|
||||
ערכת הכללים ברירת מחדל שמתכתבת עם ערכת המסננים של uBlock Origin:
|
||||
|
||||
@@ -7,24 +7,6 @@ uBO Lite (uBOL) הוא חוסם תוכן *ללא הרשאות* מבוסס MV3.
|
||||
- EasyPrivacy
|
||||
- רשימת שרתי מודעות ומעקב של פיטר לואו
|
||||
|
||||
ניתן להוסיף ערכות כללים נוספות מעמוד האפשרויות –על ידי הקשה על סמל _Cogs_ בלוח הצץ.
|
||||
ניתן לאפשר קבוצות חוקים נוספות בדף האפשרויות - עם לחיצה על סמליל _גלגלי השיניים_ בחלונית הקופצת.
|
||||
|
||||
uBOL הוא הכרזתי לחלוטין, כלומר אין צורך בתהליך uBOL קבוע כדי שהסינון יתרחש, וסינון תוכן מבוסס הזרקת CSS/JS מבוצע באופן אמין על ידי הדפדפן עצמו ולא על ידי ההרחבה. המשמעות היא ש־uBOL עצמו לא צורכך משאבי מעבד/זיכרון בזמן שחסימת התוכן מתרחשת – תהליך ה־service worker של uBOL נדרש _אך ורק_ בזמן הידוד עם החלון הקופץ או עם עמוד האפשרויות.
|
||||
|
||||
uBOL לא דורש הרשאת "קריאה ושינוי נתונים" נרחבות במהלך ההתקנה, לכן היכולות המוגבלות שלה הישר מהקופסה בהשוואה ל־uBlock Origin או חוסמי תוכן אחרים הדורשים הרשאות "קריאה ושינוי נתונים" נרחבות כבר בזמן ההתקנה.
|
||||
|
||||
עם זאת, uBOL מאפשר להעניק *באופן מפורש* הרשאות נרחבות לאתרים מסויימים על פי בחירה, למיטוב הסינון באתרים אלה, באמצעות סינון קוסמטי והזרקות סקריפלטים.
|
||||
|
||||
כדי להעניק הרשאות נרחבות באתר נתון, נא לפתוח את הלוח הקופץ ולבחור באופן סינון גבוה יותר כגון מיטבי או מלא.
|
||||
|
||||
לאחר מכן, תוצג אזהרת דפדפן על השפעות מתן הרשאות נוספות אותן מבקשת ההרחה באתר הנוכחי, הדפדפן ימתין לקבלת תשובה האם לקבל או לדוחות את בקשת ההרשאה.
|
||||
|
||||
אם תקבל את הבקשה של uBOL להרשאות נוספות באתר הנוכחי, הוא יוכל לסנן טוב יותר תוכן עבור האתר הנוכחי.
|
||||
|
||||
ניתן להגדיר את מצב הסינון המוגדר כברירת מחדל מדף האפשרויות של uBOL. אם הבחירה היתה באופןסינון מיטבי או מלא כברירת המחדל, יידרש להעניק ל־uBOL הרשאת קריאה שנוי נתונים בכל אתרי הרשת.
|
||||
|
||||
יש לזכור שזו עדיין 'עבודה בתהליך', עם המטרות הבאות:
|
||||
|
||||
- אין הרשאות מארח רחבות בזמן ההתקנה -- הרשאות מורחבות מוענקות במפורש על ידי המשתמש על בסיס לכל אתר.
|
||||
|
||||
הכרזתי לחלוטין, אמין ויעיל בצריכת משאבי מעבד/זיכרון.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
uBO Lite (uBOL) एक *अनुमति-रहित* MV3-आधारित कन्टेन्ट ब्लॉकर है।
|
||||
uBO Lite (uBOL) is an MV3-based content blocker.
|
||||
|
||||
डिफ़ॉल्ट रूलसेट uBlock Origin के डिफ़ॉल्ट फ़िल्टर सेट के अनुरूप होता है:
|
||||
|
||||
@@ -7,24 +7,6 @@ uBO Lite (uBOL) एक *अनुमति-रहित* MV3-आधारित
|
||||
- EasyPrivacy
|
||||
- Peter Lowe की विज्ञापन एवं ट्रैकिंग सर्वर सूची
|
||||
|
||||
आप विकल्प पृष्ठ पर जाकर और अधिक रूलसेट जोड़ सकते हैं -- पॉपअप पैनल में _Cogs_ आइकन पर क्लिक करें।
|
||||
आप विकल्प पृष्ठ पर जाकर और अधिक नियम-सेट सक्षम कर सकते हैं -- पॉपअप पैनल में _Cogs_ आइकन पर क्लिक करें।
|
||||
|
||||
uBOL पूरी तरह से वर्णनात्मक है, जिसका यह अर्थ है कि फ़िल्टरिंग के लिए एक स्थायी uBOL प्रक्रिया की कोई आवश्यकता नहीं है, और CSS/JS इंजेक्शन-आधारित कन्टेन्ट फ़िल्टरिंग एक्सटेंशन के बजाय ब्राउज़र द्वारा विश्वसनीय रूप से की जाती है। इसका यह अर्थ है कि कन्टेन्ट ब्लॉक करते समय uBOL द्वारा सीपीयू/मेमोरी संसाधनों का उपभोग स्वयं नहीं किया जाता है -- uBOL की सर्विस प्रोसेस की आवश्यकता _केवल_ तब होती है जब आप पॉपअप पैनल या विकल्प पृष्ठों पर कोई अंत:क्रिया करते हैं।
|
||||
|
||||
uBOL को इन्सटॉल करते समय "डेटा को पढ़ने और संशोधित करने" की व्यापक अनुमति की आवश्यकता नहीं होती है, अतः इसकी सीमित क्षमताओं तत्काल उपयोगिता की तुलना में uBlock Origin या अन्य कन्टेन्ट ब्लॉकर को इन्सटॉलेशन के समय "डेटा को पढ़ने और संशोधित करने" की व्यापक अनुमतियों की आवश्यकता होती है।
|
||||
|
||||
हालांकि, uBOL आपको अपनी मनपसंद विशिष्ट साइटों पर विस्तारित अनुमतियां देना *स्पष्ट रूप से* अनुमत करता है ताकि यह कॉस्मेटिक फ़िल्टरिंग और स्क्रिप्टलेट इंजेक्शन का उपयोग करके उन साइटों पर अच्छी तरह से फ़िल्टर कर सके।
|
||||
|
||||
किसी एक साइट पर विस्तारित अनुमतियां देने के लिए, पॉपअप पैनल खोलें और उच्च फ़िल्टरिंग मोड, जैसे कि 'अनुकूलतम' (ऑप्टिमल) या 'पूर्ण' (कंपलीट) चुनें।
|
||||
|
||||
इसके बाद ब्राउज़र द्वारा आपको वर्तमान साइट पर एक्सटेंशन द्वारा अनुरोधित अतिरिक्त अनुमतियों को देने के प्रभावों के बारे में चेतावनी दी जाएगी, और आपको ब्राउज़र को यह बताना होगा कि आप अनुरोध को स्वीकार करते हैं या अस्वीकार करते हैं।
|
||||
|
||||
यदि आप वर्तमान साइट पर अतिरिक्त अनुमतियों के लिए uBOL के अनुरोध को स्वीकार करते हैं, तो यह वर्तमान साइट के लिए कन्टेन्ट अच्छी तरह से फ़िल्टर करने में सक्षम होगा।
|
||||
|
||||
आप uBOL के विकल्प पृष्ठ से डिफ़ॉल्ट फ़िल्टरिंग मोड को सेट कर सकते हैं। यदि आप 'अनुकूलतम' (ऑप्टिमल) या 'पूर्ण' (कंपलीट) मोड को डिफ़ॉल्ट रूप से चुनते हैं, तो आपको uBOL को सभी वेबसाइटों पर डेटा को पढ़ने और संशोधित करने के लिए अनुमत करना होगा।
|
||||
|
||||
ध्यान रखें कि यह कार्य अभी भी प्रगतिधीन है, और इसके निम्नांकित अंतिम लक्ष्यों तय किये गए हैं:
|
||||
|
||||
- इन्सटॉल करते समय कोई व्यापक होस्ट अनुमतियां नहीं -- विस्तारित अनुमतियां उपयोगकर्ता द्वारा हर एक साइट के आधार पर स्पष्ट रूप से दी जाती हैं।
|
||||
|
||||
- विश्वसनीयता और सीपीयू/मेमोरी दक्षता के लिए पूरी तरह वर्णनात्मक।
|
||||
|
@@ -1,4 +1,4 @@
|
||||
uBO Lite (uBOL) je bloker sadržaja *bez dopuštenja* baziran na MV3.
|
||||
uBO Lite (uBOL) je bloker sadržaja baziran na MV3.
|
||||
|
||||
Zadana lista pravila odgovara uBlock Origin-ovoj zadanoj listi filtera:
|
||||
|
||||
@@ -7,24 +7,6 @@ Zadana lista pravila odgovara uBlock Origin-ovoj zadanoj listi filtera:
|
||||
- EasyPrivacy
|
||||
- Peter Lowe-ova lista oglasa i pratećih servera
|
||||
|
||||
Možete dodati više skupova pravila tako što ćete posjetiti stranicu s opcijama -- kliknite ikonu _zupčanika_ na skočnoj ploči.
|
||||
Možete omogućiti više skupova pravila tako što ćete posjetiti stranicu s opcijama -- kliknite ikonu _Cogs_ na skočnoj ploči.
|
||||
|
||||
uBOL je u potpunosti deklarativan, što znači da nema potrebe za trajnim uBOL procesom za filtriranje, a filtriranje sadržaja temeljeno na ubacivanju CSS/JS pouzdano izvodi sam preglednik, a ne ekstenzija. To znači da sam uBOL ne troši CPU/memorijske resurse dok je blokiranje sadržaja u tijeku -- uBOL-ov servisni radni proces potreban je _samo_ kada komunicirate s skočnom pločom ili stranicama s opcijama.
|
||||
|
||||
uBOL ne zahtijeva široku dozvolu za "čitanje i izmjenu podataka" u vrijeme instalacije, stoga ima zadane ograničene mogućnosti u usporedbi s uBlock Origin ili drugim blokatorima sadržaja koji zahtijevaju veću dozvolu za "čitanje i izmjenu podataka" u vrijeme instalacije.
|
||||
|
||||
Međutim, uBOL vam omogućuje da *eksplicitno* dodijelite proširena dopuštenja na određenim web-stranicama po vašem izboru tako da može bolje filtrirati te web-stranice koristeći kozmetičko filtriranje i injekcijske skripte.
|
||||
|
||||
Da biste dodijelili proširena dopuštenja na određenoj web stranici, otvorite skočnu ploču i odaberite viši način filtriranja kao što je Optimalno ili Potpuno.
|
||||
|
||||
Preglednik će vas tada upozoriti o učincima dodjele dodatnih dopuštenja koje traži ekstenzija na trenutnom mjestu, a vi ćete morati reći pregledniku prihvaćate li ili odbijate zahtjev.
|
||||
|
||||
Ako prihvatite uBOL-ov zahtjev za dodatnim dozvolama na trenutnoj stranici, moći će bolje filtrirati sadržaj na njoj.
|
||||
|
||||
Zadani način filtriranja možete postaviti na stranici s opcijama uBOL-a. Ako kao zadano odaberete Optimalni ili Potpuni način rada, morati ćete dati uBOL-u dopuštenje za čitanje i izmjenu podataka na svim web stranicama.
|
||||
|
||||
Imajte na umu da je ovo još u tijeku, sa sljedećim krajnjim ciljevima:
|
||||
|
||||
- Nema širokih dopuštenja hosta u vrijeme instalacije -- proširena dopuštenja izričito dodjeljuje korisnik za svaku pojedinačnu stranicu.
|
||||
|
||||
- Potpuno deklarativno za pouzdanost i učinkovitost CPU/memorije.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
Az uBO Lite (uBOL) egy *engedélyt nem igénylő* MV3-alapú tartalomblokkoló.
|
||||
A uBO Lite (uBOL) egy MV3-alapú tartalomblokkoló.
|
||||
|
||||
Az alapértelmezett szabálykészlet megfelel a uBlock Origin alapértelmezett szűrőkészletének:
|
||||
|
||||
@@ -7,24 +7,6 @@ Az alapértelmezett szabálykészlet megfelel a uBlock Origin alapértelmezett s
|
||||
- EasyPrivacy
|
||||
- Peter Lowe hirdetési és nyomkövető-kiszolgálókat tartalmazó listája
|
||||
|
||||
További szabályokat adhat hozzá a beállítások oldalon – kattintson a _Fogaskerekek_ ikonra a felugró panelen.
|
||||
További szabályokat engedélyezhet a beállítások oldalon – kattintson a _Fogaskerekek_ ikonra a felugró panelen.
|
||||
|
||||
Az uBOL teljes mértékben deklaratív, vagyis nincs szükség állandó uBOL folyamatra a szűréshez, és a CSS/JS injektálás-alapú tartalomszűrést maga a böngésző végzi megbízhatóan, nem pedig a kiegészítő. Ez azt jelenti, hogy az uBOL maga nem fogyaszt CPU/memória erőforrásokat, amíg a tartalom blokkolása folyamatban van – az uBOL service worker folyamatára _csak_ akkor van szükség, amikor az felugró panellel vagy a beállítási oldalakkal érintkezik.
|
||||
|
||||
Az uBOL nem igényel széles körű „adatok módosítása és olvasása” engedélyt a telepítéskor, ezért korlátozott képességei vannak az uBlock Originhez vagy más tartalomblokkolókhoz képest, amelyek széles körű „adatok olvasása és módosítása” engedélyeket igényelnek a telepítésükkor.
|
||||
|
||||
Az uBOL azonban lehetővé teszi, hogy *kifejezetten* kiterjesztett engedélyeket adjon az Ön által választott bizonyos webhelyekhez, hogy jobban szűrhessen ezeken a webhelyeken kozmetikai szűréssel és szkriptlet-injekciókkal.
|
||||
|
||||
Ha kiterjesztett engedélyeket szeretne adni egy adott webhelyen, nyissa meg az előugró panelt, és válasszon magasabb szűrési módot, például Optimális vagy Teljes.
|
||||
|
||||
A böngésző ekkor figyelmezteti Önt a bővítmény által kért további engedélyek megadásának hatásaira az aktuális webhelyen, és közölnie kell a böngészővel, hogy elfogadja-e vagy elutasítja a kérést.
|
||||
|
||||
Ha elfogadja az uBOL további engedélyekre vonatkozó kérését az aktuális webhelyen, akkor jobban tudja szűrni az aktuális webhely tartalmát.
|
||||
|
||||
Az alapértelmezett szűrési módot az uBOL beállítási oldalán állíthatja be. Ha az Optimális vagy a Teljes módot választja alapértelmezettként, akkor az uBOL-nak engedélyt kell adnia az adatok olvasására és módosítására az összes webhelyen.
|
||||
|
||||
Ne feledje, hogy ez még folyamatban van, a következő célokkal:
|
||||
|
||||
- Nincsenek széles körű gazdagép-engedélyek a telepítés során – a kiterjesztett engedélyeket a felhasználó kifejezetten webhelyenként adja meg.
|
||||
|
||||
- Teljesen deklaratív a nagyobb megbízhatóság illetve CPU- és memóriahatékonyság érdekében.
|
||||
A uBOL teljes mértékben deklaratív, vagyis nincs szükség állandó uBOL folyamatra a szűréshez, és a CSS/JS injektálás-alapú tartalomszűrést maga a böngésző végzi megbízhatóan, nem pedig a kiegészítő. Ez azt jelenti, hogy az uBOL maga nem fogyaszt CPU/memória erőforrásokat, amíg a tartalom blokkolása folyamatban van – az uBOL service worker folyamatára _csak_ akkor van szükség, amikor az felugró panellel vagy a beállítási oldalakkal érintkezik.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
uBO Lite (uBOL)-ը բովանդակության արգելափակիչ է, որը *չի պահանջում թույլտվություններ*, և հիմնված է MV3-ի վրա։
|
||||
uBO Lite (uBOL) is an MV3-based content blocker.
|
||||
|
||||
Կանոնների լռելյայն փաթեթը համապատասխանում է uBlock Origin-ի լռելյայն զտիչների փաթեթին։
|
||||
|
||||
@@ -7,28 +7,6 @@ uBO Lite (uBOL)-ը բովանդակության արգելափակիչ է, որ
|
||||
- EasyPrivacy
|
||||
- Peter Lowe-ի գովազդային և հետագծող սպասարկիչների ցուցակ
|
||||
|
||||
Դուք կարող եք ավելացնել ուրիշ կանոններ՝ այցելելով ընտրանքների էջը. կտտացրեք Ժանանվակի_պատկերակին դուրս լողացող վահանակում։
|
||||
You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
|
||||
|
||||
uBOL-ն ամբողջությամբ դեկլարատիվ է, այսինքն՝ զտման համար անընդհատ կատարվող uBOL գործընթացի կարիք չկա, իսկ CSS/JS արմատավորման վրա հիմնված բովանդակության զտումը հուսալիորեն իրականացվում է զննիչի կողմից, այլ ոչ թե ընդլայնման միջոցով։ Սա նշանակում է, որ uBOL հավելումը չի սպառում մշակիչի/հիշողության որևէ ռեսուրս, երբ տեղի է ունենում գովազդի արգելափակումը. uBOL աշխատանքային գործընթացն աշխատում է _միայն_ երբ Դուք փոփոխություններ եք կատարում դուրս լողացող վահանակում կամ ընտրանքների էջում։
|
||||
|
||||
uBOL-ը տեղադրման ժամանակ «տվյելները լիովին ընթերցելու և փոփոխելու» թույլտվություն չի պահանջում, ուստի այն ունի սահմանափակ հնարավորություններ՝ համեմատած uBlock Origin-ի և բովանդակության այլ արգելափակիչների հետ, որոնք տեղադրման ժամանակ պահանջում են այդպիսի թույլտվություն։
|
||||
|
||||
Однако uBOL позволяет *намеренно* давать расширенные разрешения для определенных сайтов - по вашему усмотрению, чтобы эффективнее работать, используя косметическую фильтрацию и scriptlet-внедрения.
|
||||
|
||||
Այնուամենայնիվ, uBOL-ը թույլ է տալիս *դիտմամբ* տրամադրել ընդլայնված թույլտվություններ Ձեր ընտրած կայքերի համար, որպեսզի այն կարողանա էլ ավելի լավ զտել այդ կայքերը՝ օգտագործելով կոսմետիկ զտումը և սցենարների արմատավորումները։
|
||||
|
||||
Для предоставления расширенных разрешений на текущем сайте - откройте всплывающую панель и выберите повышенный режим фильтрации: Оптимальный или Полный.
|
||||
|
||||
Ընթացիկ կայքում ընդլայնված թույլտվություններ տրամադրելու համար բացեք դուրս լողացող վահանակը և ընտրեք ընդլայնված զտման ռեժիմ՝ Գերադասելի կամ Ամբողջական։
|
||||
|
||||
Այնուհետև զննիչը կզգուշացնի Ձեզ ընթացիկ կայքում ընդլայնման կողմից պահանջվող լրացուցիչ թույլտվությունների տրամադրման հետևանքների մասին, և Դուք պետք է ընտրեք՝ ընդունում եք, թե մերժում եք հայտը։
|
||||
|
||||
Եթե ընդունեք uBOL-ին լրացուցիչ թույլտվություններ տալու հայտը, ապա այն կկարողանա ավելի արդյունավետ կերպով զտել ընթացիկ կայքի բովանդակությունը։
|
||||
|
||||
Դուք կարող եք սահմանել զտման լռելյայն ռեժիմը uBOL-ի ընտրանքների էջում։ Եթե որպես լռելյայն ընտրեք «Գերադասելի» կամ «Ամբողջական» ռեժիմը, պետք կլինի uBOL-ին թույլտվություն տրամադրեք կարդալու և փոփոխելու տվյալները բոլոր կայքերում։
|
||||
|
||||
Հիշեք, որ այս նախագիծը մշակման ակտիվ փուլում է, որ ունի հետևյալ նպատակները.
|
||||
|
||||
- Տեղադրման ընթացքում Սահմանափակ թույլտվություններով աշխատանք տեղադրման ժամանակ. օգտվողը ընդլայնված թույլտվություններ է տալիս իր հայեցողությամբ, յուրաքանչյուր կայքի համար առանձին։
|
||||
|
||||
- Ամբողջովին դեկլարատիվ է հուսալիության և մշակիչի/հիշողության արտադրողականության համար։
|
||||
|
@@ -1,4 +1,4 @@
|
||||
uBO Lite (uBOL) adalah pemblokir konten berbasis MV3 yang membutuhkan lebih sedikit perizinan.
|
||||
uBO Lite (uBOL) adalah pemblokir konten berbasis MV3.
|
||||
|
||||
Kumpulan aturan bawaan sesuai dengan kumpulan penyaringan bawaan uBlock Origin:
|
||||
|
||||
@@ -7,24 +7,6 @@ Kumpulan aturan bawaan sesuai dengan kumpulan penyaringan bawaan uBlock Origin:
|
||||
- EasyPrivacy
|
||||
- Daftar server iklan dan pelacak Peter Lowe
|
||||
|
||||
kamu dapat menambahkan rulesets di halaman opsi -- klik ikon _Cogs_ di panel popup.
|
||||
Anda dapat mengaktifkan lebih banyak rangkaian aturan dengan mengunjungi halaman opsi -- klik ikon _Cogs_ di panel popup.
|
||||
|
||||
uBOL sepenuhnya deklaratif, yang mana tidak membutuhkan proses permanen uBOL agar penyaringan dapat terjadi, dan penyaringan konten berbasis injeksi CSS/JS dilakukan sepenuhnya oleh peramban itu sendiri ketimbang oleh ekstensi. Ini berarti bahwa uBOL sendiri tidak mengkonsumsi sumber daya CPU/memori selama melakukan pemblokiran konten -- proses pekerja layanan uBOL dibutuhkan _hanya_ ketika Anda berinteraksi dengan panel popup atau opsi halaman.
|
||||
|
||||
uBOL tidak membutuhkan izin "baca dan modifikasi data" pada waktu penginstalan, maka kemampuannya lebih terbatas jika dibandingkan dengan uBlock Origin atau pemblokir konten lain yang memerlukan izin "baca dan modifikasi data" pada waktu penginstalan.
|
||||
|
||||
Namun, uBOL memberi anda opsi untuk *secara eksplisit* memberikan izin tambahan pada situs pilihan Anda, sehingga dapat memfilter situs tersebut dengan lebih baik menggunakan pemfilteran kosmetik dan injeksi scriptlet.
|
||||
|
||||
Untuk memberikan izin tambahan pada situs tertentu, buka panel popup dan pilih mode pemfilteran yang lebih tinggi seperti Optimal atau Complete.
|
||||
|
||||
Perambaan kemudian akan memperingatkan anda tentang efek memberikan izin tambahan yang diminta oleh ekstensi pada situs saat ini, dan Anda harus memberitahu perambaan apakah anda menyetujui atau menolak permintaan.
|
||||
|
||||
Jika Anda menyetujui permintaan uBOL untuk izin tambahan pada situs terkini, uBOL akan dapat menyaring konten dengan lebih baik untuk situs terkini.
|
||||
|
||||
Anda dapat menentukan mode penyaringan bawaan dari halaman pengaturan uBOL Jika Anda memilih mode Optimal atau Complete sebagai mode bawaan, Anda perlu memberikan uBOL izin untuk membaca dan mengubah data pada semua situs web.
|
||||
|
||||
Mohon diingat bahwa ini msaih dalam tahap proses pengerjaan, dengan tujuan akhir sebagai berikut:
|
||||
|
||||
- Tidak ada izin pengguna yang luas saat penginstalan -- izin tambahan diberikan secara eksplisit oleh pengguna berdasarkan tiap situs.
|
||||
|
||||
- Sepenuhnya delkaratif untuk reliabilitas dan CPU/efisiensi memori.
|
||||
uBOL sepenuhnya bersifat deklaratif, artinya tidak diperlukan proses uBOL permanen agar penyaringan dapat terjadi, dan penyaringan konten berbasis injeksi CSS/JS dilakukan secara andal oleh browser itu sendiri dan bukan oleh ekstensi. Artinya uBOL sendiri tidak mengonsumsi sumber daya CPU/memori saat pemblokiran konten sedang berlangsung -- proses pekerja layanan uBOL diperlukan _hanya_ saat Anda berinteraksi dengan panel popup atau halaman opsi.
|
||||
|
@@ -1,30 +1,12 @@
|
||||
uBO Lite (uBOL) è un sistema per bloccare contenuti che *non richiede autorizzazioni* basato su MV3.
|
||||
uBO Lite (uBOL) è un sistema di blocco dei contenuti basato su MV3.
|
||||
|
||||
L'insieme di regole predefinite corrisponde a quello di uBlock Origin:
|
||||
L'insieme di regole predefinito corrisponde all'insieme di filtri predefinito di uBlock Origin:
|
||||
|
||||
- Elenco dei filtri integrati in uBlock Origin
|
||||
- Liste dei filtri integrati di uBlock Origin
|
||||
- EasyList
|
||||
- EasyPrivacy
|
||||
- Elenco dei server di tracciatura e pubblicità di Peter Lowe
|
||||
- Elenco dei server pubblicitari e di tracciamento di Peter Lowe
|
||||
|
||||
Puoi aggiungere altre regole nella pagina delle opzioni. Clicca sull'icona _Ingranaggi_ nel pannello a comparsa.
|
||||
Puoi abilitare altri set di regole visitando la pagina delle opzioni: clicca sull'icona _Cogs_ nel pannello a comparsa.
|
||||
|
||||
uBOL è interamente dichiarativo ovvero non è necessario un processo uBOL permanente per eseguire il filtraggio e il filtraggio dei contenuti CSS/JS inietattai viene eseguito in modo affidabile dal browser stesso piuttosto che dall'estensione. Ciò significa che lo stesso uBOL non consuma risorse di CPU/memoria mentre il blocco dei contenuti è in corso: il processo di lavoro di servizio di uBOL è richiesto _solo_ quando interagisci con il pannello popup o le pagine delle opzioni.
|
||||
|
||||
uBOL non richiede un'ampia autorizzazione di "lettura e modifica dei dati" al momento dell'installazione, da qui le sue capacità limitate rispetto a uBlock Origin o ad altre estensioni che richiedono ampie autorizzazioni di "lettura e modifica dei dati" al momento dell'installazione.
|
||||
|
||||
Tuttavia, uBOL consente di concedere *esplicitamente* permessi estesi a siti specifici di vostra scelta, in modo da poter filtrare meglio tali siti utilizzando il filtraggio cosmetico e le iniezioni di scriptlet.
|
||||
|
||||
Per concedere autorizzazioni estese su un determinato sito, apri il pannello popup e scegli una modalità di filtraggio più restrittiva come Ottimale o Completa.
|
||||
|
||||
Il browser ti avviserà degli effetti della concessione delle autorizzazioni aggiuntive richieste dall'estensione sul sito corrente e dovrai comunicare al browser se accetti o rifiuti la richiesta.
|
||||
|
||||
Se accetti la richiesta di uBOL per ulteriori autorizzazioni sul sito corrente, sarà in grado di filtrare meglio i contenuti per il sito corrente.
|
||||
|
||||
Puoi impostare la modalità di filtraggio predefinita dalla pagina delle opzioni di uBOL. Se scegli come predefinita la modalità Ottimale o Completa, dovrai concedere a uBOL il permesso di leggere e modificare i dati di tutti i siti web.
|
||||
|
||||
Tieni presente che questo è ancora un work in progress, con questi obiettivi finali:
|
||||
|
||||
- Nessuna autorizzazione host ampia al momento dell'installazione: le autorizzazioni estese vengono concesse esplicitamente dall'utente in base al sito.
|
||||
|
||||
- Interamente dichiarativo per l'affidabilità e l'efficienza della CPU/memoria.
|
||||
uBOL è interamente dichiarativo, ovvero non è necessario che ci sia un processo di uBOL permanente per poter eseguire il filtraggio; e il filtraggio dei contenuti basato sull'iniezione di elementi CSS/JS viene eseguito in modo affidabile dal browser stesso piuttosto che dall'estensione. Ciò significa che lo stesso uBOL non consuma risorse di CPU o memoria mentre il blocco dei contenuti viene eseguito: il processo che esegue il servizio di uBOL è richiesto _solamente_ quando interagisci con il pannello a comparsa o con le pagine delle opzioni.
|
||||
|
@@ -1,30 +1,12 @@
|
||||
uBO Lite (uBOL) は権限を必要としない MV3 ベースのコンテンツブロッカーです。
|
||||
uBO Lite (uBOL) は MV3 ベースのコンテンツブロッカーです。
|
||||
|
||||
デフォルトのルールセットは以下の通り。uBlock Origin のデフォルトフィルターセットと同じです。
|
||||
デフォルトのルールセットは以下の通りです。uBlock Origin のデフォルトフィルターセットと同じです。
|
||||
|
||||
- uBlock Origin の内製フィルターリスト
|
||||
- uBlock Origin の内蔵フィルターリスト
|
||||
- EasyList
|
||||
- EasyPrivacy
|
||||
- Peter Lowe’s Ad and tracking server list
|
||||
|
||||
オプションページでルールセットを追加できます -- ポップアップ パネルの「歯車」アイコンをクリックします。
|
||||
オプションページでルールセットを有効化できます。ポップアップパネルの「歯車」アイコンをクリックしてください。
|
||||
|
||||
uBOL は完全に宣言的です。つまり、フィルタリングを行うための恒久的な uBOL プロセスは必要なく、CSS/JS インジェクション ベースのコンテンツフィルタリングは拡張機能ではなくブラウザによって、確実に実行されます。 これは uBOL がコンテンツブロッキングの際に CPU、メモリを消費しないことを意味します。uBOL のサービス ワーカーは ポップアップ パネルや設定ページでのみ必要とされます。
|
||||
|
||||
uBOL はインストール時に広範な「データの読み取りと変更」の権限を要求しません。したがって uBlock Origin やその他の、インストール時に広範な「データの読み取りと変更」の権限を要求するコンテンツ ブロッカーに比べて、行えることが制限されています。
|
||||
|
||||
しかし、ユーザーの選んだ特定のサイトに対する拡張権限を「明示的に」付与すれば、そのサイト上で整形フィルターやスクリプトレットの挿入を用いた優れたフィルタリングを行うことができます。
|
||||
|
||||
特定のサイトで拡張された権限を付与するには、ポップアップ パネルを開いて、「最適」や「完全」のようなより高いフィルタリングモードを選択します。
|
||||
|
||||
ブラウザは、現在のサイトで拡張機能によってリクエストされた追加の権限を付与することによってもたらされる影響について警告します。承認または拒否することができます。
|
||||
|
||||
閲覧中のサイトに対するuBOLの追加的な権限要求リクエストを承認すると、そのサイトへのコンテンツフィルタリングの品質をあげることができます。
|
||||
|
||||
uBOL の設定ページで既定のフィルタリングモードを設定できます。 「最適」または「完全」を規定のフィルタリング モードに設定した場合、すべてのWebサイトで「データの読み取りと変更」権限を付与する必要があります。
|
||||
|
||||
注意として、uBOL はまだ開発途中で、これらの開発目標があります。
|
||||
|
||||
- インストール時に広範なホスト権限は不要 -- 拡張された権限はサイトごとにユーザーによって明示的に付与されます。
|
||||
|
||||
- 完全に宣言的で、CPU、メモリの効率性が良い
|
||||
|
@@ -1,30 +1,12 @@
|
||||
uBO Lite (uBOL) *ნებართვებისგან თავისუფალი* MV3-ზე დაფუძნებული შიგთავსის შემზღუდავია.
|
||||
uBO Lite (uBOL) შიგთავსის შემზღუდავია MV3-ის მიხედვით.
|
||||
|
||||
წესების ნაგულისხმევი კრებული იგივეა, რასაც uBlock Origin იყენებს:
|
||||
|
||||
- uBlock Origin – ფილტრების ჩაშენებული სიები
|
||||
- ჩაშენებული ფილტრებით, uBlock Origin რომ იყენებს
|
||||
- EasyList
|
||||
- EasyPrivacy
|
||||
- Peter Lowe – სარეკლამო სერვერების სია
|
||||
|
||||
შეგიძლიათ სხვა კრებულებიც დაამატეთ პარამეტრების გვერდიდან -- დაწკაპეთ _Cogs_ ხატულაზე ამომხტომ არეში.
|
||||
შეგიძლიათ სხვა კრებულებიც აამოქმედოთ პარამეტრების გვერდიდან -- დაწკაპეთ _Cogs_ ხატულაზე ამომხტომ არეში.
|
||||
|
||||
uBOL სრულად დეკლარაციულია, ანუ არაა საჭირო მუდმივად იყოს გაშვებული uBOL-პროცესი გასაფილტრად, CSS/JS ჩანაცვლებით შიგთავსის გაფილტვრას თავად ბრაუზერი უზრუნველყოფს ნაცვლად გაფართოებისა, რაც მეტად საიმედოა. შესაბამისად, uBOL თავად არ დატვირთავს პროცესორს/ოპერატიულს შიგთავსის შეზღუდვის დროს -- uBOL-ის შუამავალი მომსახურე პროცესი საჭიროა _მხოლოდ_ მაშინ, როცა ამომხტომ არესთან ურთიერთქმედებთ ან ცვლით პარამეტრებს.
|
||||
|
||||
uBOL არ საჭიროებს „მონაცემთა წაკითხვისა და შეცვლის“ სრულ ნებართვას დაყენებისას, ვინაიდან მოკვეცილი შესაძლებლობებითაა წარმოდგენილი uBlock Origin-თან ან რეკლამის სხვა შემზღუდავებთან შედარებით, რომლებიც ერთბაშად ითხოვს „მონაცემთა წაკითხვისა და შეცვლის“ უფლებას დაყენებისთანავე.
|
||||
|
||||
ამასთანავე, uBOL საშუალებას გაძლევთ *მკაფიო* თანხმობით მიუთითოთ გაფართოებული ნებართვები ცალკეულ საიტებზე სურვილისამებრ, რომ უკეთ შეიზღუდოს შიგთავსი ხილული ელემენტების გაფილტვრითა და პროგრამული ჩამატებებით.
|
||||
|
||||
გაფართოებული ნებართვების მისაცემად მითითებულ საიტზე, გახსენით ამომხტომი არე და აირჩიეთ ფილტრაციის უფრო მაღალი დონე, როგორიცაა „წონასწორული“ ან „სრული“.
|
||||
|
||||
შემდეგ ბრაუზერი გაგაფრთხილებთ გაფართოების მიერ დამატებითი ნებართვების მოთხოვნის შესახებ მოცემულ საიტზე და აირჩევთ, დათანხმდებით თუ უარყოფთ მოთხოვნას.
|
||||
|
||||
თუ დათანხმდებით uBOL-ს მოთხოვნას დამატებითი ნებართვებისთვის მიმდინარე საიტზე, უკეთ შეძლებს შიგთავსის შეზღუდვას აღნიშნულ საიტზე.
|
||||
|
||||
შეგიძლიათ მიუთითოთ გაფილტვრის ნაგულისხმევი რეჟიმი uBOL-ის პარამეტრების გვერდიდან. თუ აირჩევთ „წონასწორულ“ ან „სრულ“ რეჟიმს ნაგულისხმევად, uBOL-ს უნდა დართოთ ყველა საიტზე მონაცემთა წაკითხვისა და შეცვლის ნება.
|
||||
|
||||
დაიხსომეთ, რომ ჯერ კიდევ მუშავდება შემდეგი მიზნებისთვის:
|
||||
|
||||
- არანაირი სრული ნებართვების ერთბაშად მოთხოვნა დაყენებისას -- დამატებითი უფლებები შეიძლება მიეცეს მომხმარებლის მკაფიო თანხმობით თითოეულ საიტზე ცალ-ცალკე.
|
||||
|
||||
- სრულად დეკლარაციულია პროცესორის/მეხსიერების დასაზოგად.
|
||||
uBOL მოქმედებს სრულად დადგენილი წესებით, შესაბამისად, არ ესაჭიროება მუდმივად გაშვებული uBOL-პროცესი გასაფილტრად, ხოლო როცა შიგთავსის შეზღუდვა ითხოვს ჩანაცვლდეს CSS/JS, ამას თავად ბრაუზერი უზრუნველყოფს საიმედო გზით, ნაცვლად გაფართოებისა. აქედან გამომდინარე, uBOL თავად არ მოიხმარს პროცესორს/მეხსიერებას შიგთავსის შეზღუდვისას -- uBOL საჭიროებს შუამავალ მომსახურე პროცესს _მხოლოდ_ მაშინ, როცა ამომხტომ არესთან ურთიერთქმედებთ ან ცვლით პარამეტრებს.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
uBO Lite (uBOL) is a *permission-less* MV3-based content blocker.
|
||||
uBO Lite (uBOL) is an MV3-based content blocker.
|
||||
|
||||
The default ruleset corresponds to uBlock Origin's default filterset:
|
||||
|
||||
@@ -7,24 +7,6 @@ The default ruleset corresponds to uBlock Origin's default filterset:
|
||||
- EasyPrivacy
|
||||
- Peter Lowe’s Ad and tracking server list
|
||||
|
||||
You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
|
||||
You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
|
||||
|
||||
uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
|
||||
|
||||
uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
|
||||
|
||||
However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
|
||||
|
||||
To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
|
||||
|
||||
The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
|
||||
|
||||
If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
|
||||
|
||||
You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
|
||||
|
||||
Keep in mind this is still a work in progress, with these end goals:
|
||||
|
||||
- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
|
||||
|
||||
- Entirely declarative for reliability and CPU/memory efficiency.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
uBO Lite (uBOL) is a *permission-less* MV3-based content blocker.
|
||||
uBO Lite (uBOL) is an MV3-based content blocker.
|
||||
|
||||
The default ruleset corresponds to uBlock Origin's default filterset:
|
||||
|
||||
@@ -7,24 +7,6 @@ The default ruleset corresponds to uBlock Origin's default filterset:
|
||||
- EasyPrivacy
|
||||
- Peter Lowe’s Ad and tracking server list
|
||||
|
||||
You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
|
||||
You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
|
||||
|
||||
uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
|
||||
|
||||
uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
|
||||
|
||||
However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
|
||||
|
||||
To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
|
||||
|
||||
The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
|
||||
|
||||
If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
|
||||
|
||||
You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
|
||||
|
||||
Keep in mind this is still a work in progress, with these end goals:
|
||||
|
||||
- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
|
||||
|
||||
- Entirely declarative for reliability and CPU/memory efficiency.
|
||||
uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. ಇದರರ್ಥ ವಿಷಯ ನಿರ್ಬಂಧಿಸುವಿಕೆಯು ನಡೆಯುತ್ತಿರುವಾಗ uBOL ಸ್ವತಃ CPU/ಮೆಮೊರಿ ಸಂಪನ್ಮೂಲಗಳನ್ನು ಬಳಸುವುದಿಲ್ಲ -- ನೀವು ಪಾಪ್ಅಪ್ ಪ್ಯಾನೆಲ್ ಅಥವಾ ಆಯ್ಕೆಯ ಪುಟಗಳೊಂದಿಗೆ ಸಂವಹನ ನಡೆಸಿದಾಗ uBOL ನ ಸೇವಾ ವರ್ಕರ್ ಪ್ರಕ್ರಿಯೆಯು _ಮಾತ್ರಾ_ ಅಗತ್ಯವಿದೆ.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
uBO Lite(uBOL)는 *적은 권한을 요구하는* MV3 기반 콘텐츠 차단기입니다.
|
||||
uBO Lite (uBOL)는 MV3 기반 콘텐츠 차단기입니다.
|
||||
|
||||
기본 규칙 목록은 uBlock Origin의 기본 필터 목록과 대응됩니다.
|
||||
|
||||
@@ -7,24 +7,6 @@ uBO Lite(uBOL)는 *적은 권한을 요구하는* MV3 기반 콘텐츠 차단기
|
||||
- EasyPrivacy
|
||||
- Peter Lowe’s Ad and tracking server list
|
||||
|
||||
설정 페이지에서 규칙 목록을 더욱 추가할 수 있습니다. 팝업 창의 _Cogs_ 아이콘을 누르세요.
|
||||
설정 페이지에서 규칙 목록을 더 활성화할 수 있습니다. 팝업 창의 _Cogs_ 아이콘을 누르세요.
|
||||
|
||||
uBOL은 완전히 선언적이라 필터링 중 영구적으로 실행되는 uBOL 프로세스를 필요로 하지 않으며, CSS/JS 주입 기반 콘텐츠 필터링이 확장 프로그램이 아닌 브라우저 자체에서 더욱 안정적으로 동작합니다. 즉 uBOL 자체는 콘텐츠 차단을 하는 동안 CPU/메모리 리소스를 소비하지 않습니다. uBOL 서비스워커 프로세스는 사용자가 팝업 창이나 설정을 열었을 _때에만_ 동작합니다.
|
||||
|
||||
uBOL은 설치 시 광범위한 "읽기 및 수정" 권한을 요구하지 않으므로, 설치 후 즉시 쓸 수 있는 기능들은 uBlock Origin이나 설치 시 광범위한 "읽기 및 수정" 권한을 요구하는 다른 콘텐츠 차단기에 비해 제한됩니다.
|
||||
|
||||
하지만 uBOL에서는 원하는 특정 사이트에 대해 확장된 권한을 부여하여, 해당 사이트를 표면 필터링 및 스크립트 주입을 바탕으로 더욱 잘 필터링할 수 있습니다.
|
||||
|
||||
주어진 사이트에 확장된 권한을 부여하려면, 팝업 창을 열고 필터링 모드를 '최적'이나 '완전'과 같이 더 높은 수준으로 선택하세요.
|
||||
|
||||
브라우저는 확장 프로그램에 현재 사이트에 대한 추가 권한을 부여했을 때 발생할 수 있는 일에 대해 경고할 것이며, 권한 요청을 수락할지 거부할지 선택해야 합니다.
|
||||
|
||||
현재 사이트에 대해 uBOL에 추가 권한을 부여하면, 해당 사이트의 콘텐츠를 더욱 잘 필터링할 수 있습니다.
|
||||
|
||||
uBOL 설정 페이지에서 기본 필터링 모드를 설정할 수 있습니다. 기본 모드를 '최적' 혹은 '완전'으로 설정하는 경우, uBOL에 모든 웹사이트에서 데이터를 읽고 수정할 수 있는 권한을 부여해야 합니다.
|
||||
|
||||
본 확장 프로그램은 여전히 아래 목표를 달성하기 위해 개발 중인 단계입니다.
|
||||
|
||||
- 설치 시 광범위한 호스트 권한을 요구하지 않고, 사용자가 사이트마다 명시적으로 확장된 권한을 부여할 수 있도록 합니다.
|
||||
|
||||
- 완전히 선언적으로 구현하여 CPU/메모리 효율성과 신뢰성을 확보합니다.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
uBO Lite (uBOL) is a *permission-less* MV3-based content blocker.
|
||||
uBO Lite (uBOL) is an MV3-based content blocker.
|
||||
|
||||
The default ruleset corresponds to uBlock Origin's default filterset:
|
||||
|
||||
@@ -7,24 +7,6 @@ The default ruleset corresponds to uBlock Origin's default filterset:
|
||||
- EasyPrivacy
|
||||
- Peter Lowe’s Ad and tracking server list
|
||||
|
||||
You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
|
||||
You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
|
||||
|
||||
uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
|
||||
|
||||
uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
|
||||
|
||||
However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
|
||||
|
||||
To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
|
||||
|
||||
The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
|
||||
|
||||
If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
|
||||
|
||||
You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
|
||||
|
||||
Keep in mind this is still a work in progress, with these end goals:
|
||||
|
||||
- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
|
||||
|
||||
- Entirely declarative for reliability and CPU/memory efficiency.
|
||||
|
@@ -1,30 +1,12 @@
|
||||
uBO Lite (uBOL) ir *bezatļauju* uz MV3 balstīts satura aizturētājs.
|
||||
uBO Lite (uBOL) — uz MV3 balstīts satura aizturētājs.
|
||||
|
||||
Noklusējuma nosacījumu kopa atbilst uBokc Origin noklusējuma aizturēšanas kopai:
|
||||
Noklusējuma nosacījumu kopa atbilst uBock Origin noklusējuma aizturēšanas kopai:
|
||||
|
||||
- uBlock Origin iebūvētie aizturēšanas saraksti
|
||||
- EasyList
|
||||
- EasyPrivacy
|
||||
- Pētera Lova (Peter Lowe) reklāmu un izsakošanas serveru saraksts
|
||||
- Pētera Lova (Peter Lowe) reklāmu un izsekošanas serveru saraksts
|
||||
|
||||
Vairāk nosacījumu kopu var pievienot iestatījumu sadaļā -- jāklikšķina _Zobratu_ ikona uznirstošajā logā.
|
||||
Vairāk nosacījumu kopu var iespējot iestatījumu sadaļā -- jāklikšķina _Zobratu_ ikona uznirstošajā logā.
|
||||
|
||||
uBOL ir pilnībā vispārīgs, kas nozīmē, ka nav nepieciešamības pēc pastāvīga uBOL procesa, lai notiktu aizturēšana, un uz CSS/JS ievietošanu balstīta satura aizturēšanu uzticami veic pārlūks, nevis paplašinājums. Tas nozīmē, ka uBOL pats par sevi neizmanto procesoru un atmiņu, kamēr satura aizturēšana ir notiekoša -- uBOL pakalpojuma strādņa process ir nepieciešams _tikai_ tad, kad notiek mijiedarbība ar uznirstošo logu vai iestatījumu sadaļām.
|
||||
|
||||
uBOL nav nepieciešamas plašas "lasīt un pārveidot datus" atļaujas uzstādīšanas laikā, tāpēc tam ir ierobežotas spējas pēc noklusējuma, salīdzinājumā ar uBlock Origin vai citiem satura aizturētājiem, kas pieprasa plašas "lasīt un pārveidot datus" atļaujas uzstādīšanas laikā.
|
||||
|
||||
Tomēr uBOL ļauj piešķirt paplašinātās atļaujas *tieši* noteiktās vietnēs pēc izvēles, lai tas varētu labāk veikt aizturēšanu tajās, izmantojot kosmētisku aizturēšanu un skriptu ievietošanu.
|
||||
|
||||
Lai nodrošinātu paplašinātas piekļuves tiesības noteiktā vietnē, jāatver uznirstošais logs un jāizvēlas striktāks aizturēšanas veids, kā, piemēram, "Labākais" vai "Pilnīgais".
|
||||
|
||||
Pārlūks tad brīdinās ietekmi, ko radīs paplašinājuma pieprasīto papildu atļauju nodrošināšana pašreizējā vietnē, un būs jānorāda, vai pieprasījums tiek apstiprināts vai noraidīts.
|
||||
|
||||
Ja pašreizējā vietnē tiek apstiprināts uBOL papildu atļauju pieprasījums, paplašinājums varēs labāk veikt satura aizturēšanu.
|
||||
|
||||
Noklusējuma aizturēšanas veids ir norādāms uBOL uzstādījumu lapā. Ja tiek izvēlēts "Labākais" vai "Pilnīgais" kā noklusējuma, tad būs nepieciešams nodrošināt uBOL tiesības rakstīt un pārveidot datus visās tīmekļa vietnēs.
|
||||
|
||||
Jāpatur prātā, ka šī iespēja joprojām tiek izstrādāta ar šādiem mērķiem:
|
||||
|
||||
- Nav plašu saimniekdatora atļauju uzstādīšanas laikā -- paplašinātas atļaujas nodrošina lietotājs atsevišķi katrai vietnei.
|
||||
|
||||
- Pilnībā vispārīgs - uzticamībai un procesora/atmiņas lietderīgai izmantošanai.
|
||||
|
@@ -1,30 +1,12 @@
|
||||
uBO Lite (uBOL) is a *permission-less* MV3-based content blocker.
|
||||
uBO Lite (uBOL) is an MV3-based content blocker.
|
||||
|
||||
The default ruleset corresponds to uBlock Origin's default filterset:
|
||||
Стандардниот сет на правила одговара на стандардниот филтер сет на uBlock Origin:
|
||||
|
||||
- uBlock Origin's built-in filter lists
|
||||
- Вградени филтер листи на uBlock Origin
|
||||
- EasyList
|
||||
- EasyPrivacy
|
||||
- Peter Lowe’s Ad and tracking server list
|
||||
- Листа на реклами и следачи на Peter Lowe
|
||||
|
||||
You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
|
||||
Можете да овозможите повеќе сетови на правила посетувајќи ја страницата со опции - кликнете на иконата _запчаник_ во попап панел.
|
||||
|
||||
uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
|
||||
|
||||
uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
|
||||
|
||||
However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
|
||||
|
||||
To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
|
||||
|
||||
The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
|
||||
|
||||
If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
|
||||
|
||||
You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
|
||||
|
||||
Keep in mind this is still a work in progress, with these end goals:
|
||||
|
||||
- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
|
||||
|
||||
- Entirely declarative for reliability and CPU/memory efficiency.
|
||||
uBOL е целосно декларативен, што значи дека не е потребен траен процес на uBOL за филтрирање да се одвива, а филтрирањето на содржини врз основа на инјекција на CSS/JS се извршува со сигурност од самото браузер, а не од самата екстензија. Ова значи дека самиот uBOL не консумира ресурси на CPU/меморија додека блокирањето на содржини е во тек - процесот на службениот работник на uBOL е потребен _само_ кога ќе е потребен со попап панел или страниците со опции.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
uBO Lite (uBOL) ഒരു *അനുമതി-കുറവ്* MV3 അടിസ്ഥാനമാക്കിയുള്ള ഉള്ളടക്ക ബ്ലോക്കറാണ്.
|
||||
uBO Lite (uBOL) is an MV3-based content blocker.
|
||||
|
||||
ഡിഫോൾട്ട് റൂൾസെറ്റ് uBlock Origin-ന്റെ ഡിഫോൾട്ട് ഫിൽട്ടർസെറ്റുമായി യോജിക്കുന്നു:
|
||||
|
||||
@@ -7,24 +7,6 @@ uBO Lite (uBOL) ഒരു *അനുമതി-കുറവ്* MV3 അടിസ
|
||||
- ഈസി സ്വകാര്യത
|
||||
- പീറ്റർ ലോവിന്റെ പരസ്യവും ട്രാക്കിംഗ് സെർവർ ലിസ്റ്റും
|
||||
|
||||
ഓപ്ഷനുകൾ പേജ് സന്ദർശിച്ച് നിങ്ങൾക്ക് കൂടുതൽ നിയമങ്ങൾ ചേർക്കാൻ കഴിയും -- പോപ്പ്അപ്പ് പാനലിലെ _Cogs_ ഐക്കണിൽ ക്ലിക്കുചെയ്യുക.
|
||||
You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
|
||||
|
||||
uBOL പൂർണ്ണമായും ഡിക്ലറേറ്റീവ് ആണ്, അതായത് ഫിൽട്ടറിംഗ് സംഭവിക്കുന്നതിന് ഒരു സ്ഥിരമായ uBOL പ്രക്രിയയുടെ ആവശ്യമില്ല, കൂടാതെ CSS/JS ഇഞ്ചക്ഷൻ അടിസ്ഥാനമാക്കിയുള്ള ഉള്ളടക്ക ഫിൽട്ടറിംഗ്, എക്സ്റ്റൻഷനേക്കാൾ വിശ്വസനീയമായി ബ്രൗസർ തന്നെ നിർവഹിക്കുന്നു. ഉള്ളടക്കം തടയൽ നടന്നുകൊണ്ടിരിക്കുമ്പോൾ uBOL തന്നെ CPU/മെമ്മറി ഉറവിടങ്ങൾ ഉപയോഗിക്കില്ല എന്നാണ് ഇതിനർത്ഥം -- നിങ്ങൾ പോപ്പ്അപ്പ് പാനലുമായോ ഓപ്ഷൻ പേജുകളുമായോ സംവദിക്കുമ്പോൾ _only_ uBOL-ന്റെ സേവന വർക്കർ പ്രോസസ്സ് ആവശ്യമാണ്.
|
||||
|
||||
ഇൻസ്റ്റാളേഷൻ സമയത്ത് uBOL ന് വിശാലമായ "ഡാറ്റ വായിക്കാനും പരിഷ്ക്കരിക്കാനും" അനുമതി ആവശ്യമില്ല, അതിനാൽ uBlock ഒറിജിൻ അല്ലെങ്കിൽ മറ്റ് ഉള്ളടക്ക ബ്ലോക്കറുകൾ എന്നിവയുമായി താരതമ്യപ്പെടുത്തുമ്പോൾ അതിന്റെ പരിമിതമായ കഴിവുകൾ ഇൻസ്റ്റാളേഷൻ സമയത്ത് വിശാലമായ "ഡാറ്റ വായിക്കാനും പരിഷ്ക്കരിക്കാനും" അനുമതികൾ ആവശ്യമാണ്.
|
||||
|
||||
എന്നിരുന്നാലും, നിങ്ങൾ തിരഞ്ഞെടുക്കുന്ന നിർദ്ദിഷ്ട സൈറ്റുകളിൽ വിപുലീകൃത അനുമതികൾ *വ്യക്തമായി* നൽകാൻ uBOL നിങ്ങളെ അനുവദിക്കുന്നു, അതുവഴി കോസ്മെറ്റിക് ഫിൽട്ടറിംഗും സ്ക്രിപ്റ്റ്ലെറ്റ് കുത്തിവയ്പ്പുകളും ഉപയോഗിച്ച് ആ സൈറ്റുകളിൽ മികച്ച രീതിയിൽ ഫിൽട്ടർ ചെയ്യാൻ കഴിയും.
|
||||
|
||||
തന്നിരിക്കുന്ന സൈറ്റിൽ വിപുലമായ അനുമതികൾ നൽകുന്നതിന്, പോപ്പ്അപ്പ് പാനൽ തുറന്ന് ഒപ്റ്റിമൽ അല്ലെങ്കിൽ കംപ്ലീറ്റ് പോലുള്ള ഉയർന്ന ഫിൽട്ടറിംഗ് മോഡ് തിരഞ്ഞെടുക്കുക.
|
||||
|
||||
നിലവിലെ സൈറ്റിൽ വിപുലീകരണം അഭ്യർത്ഥിച്ച അധിക അനുമതികൾ നൽകുന്നതിന്റെ ഫലങ്ങളെക്കുറിച്ച് ബ്രൗസർ നിങ്ങൾക്ക് മുന്നറിയിപ്പ് നൽകും, നിങ്ങൾ അഭ്യർത്ഥന സ്വീകരിക്കുകയോ നിരസിക്കുകയോ ചെയ്യണോ എന്ന് നിങ്ങൾ ബ്രൗസറിനോട് പറയേണ്ടിവരും.
|
||||
|
||||
നിലവിലെ സൈറ്റിൽ കൂടുതൽ അനുമതികൾക്കായുള്ള uBOL-ന്റെ അഭ്യർത്ഥന നിങ്ങൾ അംഗീകരിക്കുകയാണെങ്കിൽ, നിലവിലെ സൈറ്റിനായി മികച്ച ഉള്ളടക്കം ഫിൽട്ടർ ചെയ്യാൻ അതിന് കഴിയും.
|
||||
|
||||
uBOL-ന്റെ ഓപ്ഷൻ പേജിൽ നിന്ന് നിങ്ങൾക്ക് ഡിഫോൾട്ട് ഫിൽട്ടറിംഗ് മോഡ് സജ്ജമാക്കാൻ കഴിയും. ഒപ്റ്റിമൽ അല്ലെങ്കിൽ കംപ്ലീറ്റ് മോഡ് ഡിഫോൾട്ടായി നിങ്ങൾ തിരഞ്ഞെടുക്കുകയാണെങ്കിൽ, എല്ലാ വെബ്സൈറ്റുകളിലെയും ഡാറ്റ വായിക്കാനും പരിഷ്ക്കരിക്കാനും നിങ്ങൾ uBOL-ന് അനുമതി നൽകേണ്ടതുണ്ട്.
|
||||
|
||||
ഈ അന്തിമ ലക്ഷ്യങ്ങളോടെ ഇത് ഇപ്പോഴും പുരോഗമിക്കുന്ന ഒരു ജോലിയാണെന്ന് ഓർമ്മിക്കുക:
|
||||
|
||||
- ഇൻസ്റ്റാളേഷൻ സമയത്ത് ബ്രോഡ് ഹോസ്റ്റ് അനുമതികളൊന്നുമില്ല -- ഓരോ സൈറ്റിന്റെ അടിസ്ഥാനത്തിൽ വിപുലീകൃത അനുമതികൾ ഉപയോക്താവ് വ്യക്തമായി നൽകുന്നു.
|
||||
|
||||
- വിശ്വാസ്യതയ്ക്കും സിപിയു/മെമ്മറി കാര്യക്ഷമതയ്ക്കും പൂർണ്ണമായും പ്രഖ്യാപനം.
|
||||
|
@@ -1,30 +1,12 @@
|
||||
uBO Lite (uBOL) is a *permission-less* MV3-based content blocker.
|
||||
uBO Lite (uBOL) हे MV3-आधारित कंटेंट ब्लॉकर आहे.
|
||||
|
||||
The default ruleset corresponds to uBlock Origin's default filterset:
|
||||
डीफॉल्ट नियमसंच uBlock Origin च्या डीफॉल्ट फिल्टरसेटशी संबंधित आहे:
|
||||
|
||||
- uBlock Origin's built-in filter lists
|
||||
- uBlock Origin च्या बिल्ट-इन फिल्टर लिस्ट
|
||||
- EasyList
|
||||
- EasyPrivacy
|
||||
- Peter Lowe’s Ad and tracking server list
|
||||
- पीटर लोवची जाहिरात आणि ट्रॅकिंग सर्व्हर यादी
|
||||
|
||||
You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
|
||||
तुम्ही पर्याय पृष्ठाला भेट देऊन अधिक नियम संच सक्षम करू शकता -- पॉपअप पॅनेलमधील _Cogs_ चिन्हावर क्लिक करा.
|
||||
|
||||
uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
|
||||
|
||||
uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
|
||||
|
||||
However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
|
||||
|
||||
To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
|
||||
|
||||
The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
|
||||
|
||||
If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
|
||||
|
||||
You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
|
||||
|
||||
Keep in mind this is still a work in progress, with these end goals:
|
||||
|
||||
- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
|
||||
|
||||
- Entirely declarative for reliability and CPU/memory efficiency.
|
||||
uBOL पूर्णपणे घोषणात्मक आहे, म्हणजे फिल्टरिंगसाठी कायमस्वरूपी uBOL प्रक्रियेची गरज नाही, आणि CSS/JS इंजेक्शनवर आधारित सामग्री फिल्टरिंग ब्राउझरच्याच मदतीने विश्वासार्हपणे होते, विस्ताराद्वारे नव्हे. याचा अर्थ असा की सामग्री ब्लॉकिंग चालू असताना uBOL स्वतः CPU/मेमरी संसाधने वापरत नाही — uBOL चा सर्व्हिस वर्कर प्रोसेस फक्त तेव्हाच लागतो जेव्हा तुम्ही पॉपअप पॅनल किंवा पर्याय पृष्ठांशी संवाद साधता.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
uBO Lite (uBOL) ialah penyekat kandungan berasaskan MV3.
|
||||
uBO Lite (uBOL) is an MV3-based content blocker.
|
||||
|
||||
Set peraturan lalai sepadan dengan set penapis lalai uBlock Origin:
|
||||
|
||||
@@ -7,24 +7,6 @@ Set peraturan lalai sepadan dengan set penapis lalai uBlock Origin:
|
||||
- EasyPrivacy
|
||||
- Senarai pelayan iklan dan penjejakan 'Peter Lowe'
|
||||
|
||||
Anda boleh menambah lebih banyak set peraturan dengan melawat halaman pilihan -- klik the _Cogs_ icon pada panel timbul.
|
||||
You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
|
||||
|
||||
uBOL adalah deklaratif sepenuhnya, bermakna tidak ada keperluan untuk proses uBOL kekal untuk penapisan berlaku, dan penapisan kandungan berasaskan suntikan CSS/JS dilakukan sepenuhnya oleh penyemak imbas itu sendiri dan bukannya oleh sambungan. Ini bermakna uBOL sendiri tidak menggunakan sumber CPU/memori semasa penyekatan kandungan sedang berjalan -- proses pekerja perkhidmatan uBOL diperlukan _hanya_ apabila anda berinteraksi dengan panel timbul atau halaman pilihan.
|
||||
|
||||
uBOL tidak memerlukan kebenaran "baca dan ubah suai data" yang luas pada masa pemasangan, oleh itu keupayaan terhadnya di luar kotak berbanding dengan uBlock Origin atau penyekat kandungan lain yang memerlukan kebenaran "baca dan ubah suai data" yang luas pada masa pemasangan.
|
||||
|
||||
Walau bagaimanapun, uBOL membenarkan anda *dengan jelas* memberikan kebenaran lanjutan pada tapak tertentu pilihan anda supaya ia boleh menapis dengan lebih baik pada tapak tersebut menggunakan penapisan kosmetik dan suntikan skrip.
|
||||
|
||||
Untuk memberikan kebenaran lanjutan pada tapak tertentu, buka panel timbul dan pilih mod penapisan yang lebih tinggi seperti Optimum atau Lengkap.
|
||||
|
||||
Penyemak imbas kemudian akan memberi amaran kepada anda tentang kesan pemberian kebenaran tambahan yang diminta oleh sambungan pada tapak semasa dan anda perlu memberitahu penyemak imbas sama ada anda menerima atau menolak permintaan tersebut.
|
||||
|
||||
Jika anda menerima permintaan uBOL untuk mendapatkan kebenaran tambahan pada tapak semasa, ia akan dapat menapis kandungan dengan lebih baik untuk tapak semasa.
|
||||
|
||||
Anda boleh menetapkan mod penapisan lalai dari halaman pilihan 'uBOL'. Jika anda memilih mod Optimum atau Lengkap sebagai mod lalai, anda perlu memberikan uBOL kebenaran untuk membaca dan mengubah suai data pada semua tapak web.
|
||||
|
||||
Perlu diingat bahawa ini masih dalam proses, dengan matlamat akhir ini:
|
||||
|
||||
- Tiada kebenaran hos pada masa pemasangan -- kebenaran lanjutan diberikan secara eksplisit oleh pengguna pada asas setiap tapak.
|
||||
|
||||
- Deklaratif sepenuhnya untuk kebolehpercayaan dan kecekapan CPU/memori.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
uBO Lite (uBOL) er en *tillatelses-begrenset* MV3-basert innholdsblokkerer.
|
||||
uBO Lite (uBOL) er en MV3-basert innholdsblokkerer.
|
||||
|
||||
Standardregelsettet tilsvarer standardfiltersettet til uBlock Origin:
|
||||
|
||||
@@ -10,21 +10,3 @@ Standardregelsettet tilsvarer standardfiltersettet til uBlock Origin:
|
||||
Du kan legge til flere regelsett ved å gå til innstillingssiden -- klikk _Tannhjul_-ikonet i oppsprettspanelet.
|
||||
|
||||
uBOL er fullstendig deklarativ, noe som betyr at det ikke er behov for en permanent uBOL-prosess for at filtreringen skal skje, og CSS/JS-injeksjonsbasert innholdsfiltrering utføres pålitelig av nettleseren selv i stedet for av utvidelsen. Dette betyr at uBOL selv ikke bruker CPU/minneressurser mens innholdsblokkering pågår -- uBOL's service worker-prosess kreves _bare_ når du samhandler med oppsprettspanelet eller innstillingssidene.
|
||||
|
||||
uBOL krever ikke bred "lese og endre data"-tillatelse under installasjonen, derav begrensede muligheter i utgangspunktet sammenlignet med uBlock Origin eller andre innholdsblokkerere som krever bred "lese og endre data"-tillatelse under installasjonen.
|
||||
|
||||
Men, uBOL lar deg *uttrykkelig* gi utvidede tillatelser på bestemte nettsteder du velger, slik at uBOL bedre kan filtrere på disse nettstedene ved bruk av kosmetisk filtrering og skriptlet-injeksjoner.
|
||||
|
||||
For å gi utvidede tillatelser på et gitt nettsted, åpne oppsprettspanelet og velg en høyere filtreringsmodus som Optimal eller Fullstendig.
|
||||
|
||||
Nettleseren vil da advare deg om effektene av å gi de ekstra tillatelsene som utvidelsen ber om på det gjeldende nettstedet, og du må fortelle nettleseren om du godtar eller avslår forespørselen.
|
||||
|
||||
Hvis du godtar forespørselen fra uBOL om ekstra tillatelser på det gjeldende nettstedet, vil uBOL være i stand til å filtrere innhold bedre for det gjeldende nettstedet.
|
||||
|
||||
Du kan angi standard filtreringsmodus fra innstillingssiden i uBOL. Hvis du velger Optimal eller Fullstendig modus som standard, må du gi uBOL tillatelsen til å lese og endre data på alle nettsteder.
|
||||
|
||||
Husk at dette fortsatt er et arbeid som pågår, med disse sluttmålene:
|
||||
|
||||
- Ingen brede vertstillatelser under installasjonen -- utvidede tillatelser gis uttrykkelig av brukeren på per-side-basis.
|
||||
|
||||
- Helt deklarativt for pålitelighet og CPU/minneeffektivitet.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
uBO Lite (uBOL) is een *toestemmingsloze* MV3-gebaseerde inhoudsblokkeerder.
|
||||
uBO Lite (uBOL) is een op MV3 gebaseerde inhoudsblokkeerder.
|
||||
|
||||
De standaard regelset komt overeen met de standaard filterset van uBlock Origin:
|
||||
|
||||
@@ -7,24 +7,6 @@ De standaard regelset komt overeen met de standaard filterset van uBlock Origin:
|
||||
- EasyPrivacy
|
||||
- Peter Lowe’s Ad and tracking server list
|
||||
|
||||
U kunt meer regelsets toevoegen door de optiespagina te bezoeken -- klik op het _tandwielpictogram_ in het pop-uppaneel.
|
||||
U kunt meer regelsets inschakelen door de optiespagina te bezoeken -- klik hiervoor op het _tandwielpictogram_ in het pop-uppaneel.
|
||||
|
||||
uBOL is volledig declaratief, wat betekent dat er geen permanent uBOL-proces voor de filtering nodig is, en inhoudsfiltering op basis van CSS/JS-injectie op een betrouwbare manier door de browser zelf wordt uitgevoerd in plaats van door de extensie. Dit betekent dat uBOL zelf geen CPU-/geheugenbronnen gebruikt terwijl inhoudsblokkering actief is -- het serviceworker-proces van uBOL is _alleen_ vereist als u met het pop-uppaneel of de optiespagina’s werkt.
|
||||
|
||||
uBOL vereist geen brede toestemming voor het ‘lezen en aanpassen van gegevens’ tijdens installatie, vandaar de beperkte ingebouwde mogelijkheden ervan in vergelijking met uBlock Origin of andere inhoudsblokkeerders die brede toestemmingen voor het ‘lezen en aanpassen van gegevens’ vereisen tijdens installatie.
|
||||
|
||||
U kunt in uBOL echter *expliciet* uitgebreide toestemmingen verlenen op bepaalde websites van uw keuze, zodat het op die websites beter kan filteren via cosmetische filtering en scriptlet-injecties.
|
||||
|
||||
Om uitgebreide toestemmingen op een bepaalde website te verlenen, opent u het pop-uppaneel en kiest u een hogere filtermodus, zoals Optimaal of Volledig.
|
||||
|
||||
De browser waarschuwt u dan over de gevolgen van het verlenen van de door de extensie aangevraagde aanvullende toestemmingen op de huidige website, en u dient de browser te laten weten of u de aanvraag accepteert of weigert.
|
||||
|
||||
Als u de aanvraag van uBOL voor aanvullende toestemmingen op de huidige website accepteert, zal het inhoud voor de huidige website beter kunnen filteren.
|
||||
|
||||
U kunt de standaard filtermodus instellen vanaf de optiespagina van uBOL. Als u de modus Optimaal of Volledig als de standaardmodus kiest, dient u uBOL de toestemming voor het lezen en aanpassen van gegevens op alle websites te verlenen.
|
||||
|
||||
Onthoud dat dit nog werk in uitvoering is, met deze einddoelen:
|
||||
|
||||
- Geen brede host-toestemmingen tijdens installatie -- uitgebreide toestemmingen worden expliciet en per website verleend door de gebruiker.
|
||||
|
||||
- Volledig declaratief omwille van betrouwbaarheid en CPU-/geheugenefficiëntie.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
uBO Lite (uBOL) is a *permission-less* MV3-based content blocker.
|
||||
uBO Lite (uBOL) is an MV3-based content blocker.
|
||||
|
||||
The default ruleset corresponds to uBlock Origin's default filterset:
|
||||
|
||||
@@ -7,24 +7,6 @@ The default ruleset corresponds to uBlock Origin's default filterset:
|
||||
- EasyPrivacy
|
||||
- Peter Lowe’s Ad and tracking server list
|
||||
|
||||
You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
|
||||
You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
|
||||
|
||||
uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
|
||||
|
||||
uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
|
||||
|
||||
However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
|
||||
|
||||
To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
|
||||
|
||||
The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
|
||||
|
||||
If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
|
||||
|
||||
You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
|
||||
|
||||
Keep in mind this is still a work in progress, with these end goals:
|
||||
|
||||
- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
|
||||
|
||||
- Entirely declarative for reliability and CPU/memory efficiency.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
uBO Lite (uBOL) ਇੱਕ *ਬਿਨਾਂ ਇਜਾਜ਼ਤਾਂ* ਵਾਲਾ MV3-ਅਧਾਰਿਤ ਸਮੱਗਰੀ ਬਲਾਕਰ ਹੈ।
|
||||
uBO Lite (uBOL) is an MV3-based content blocker.
|
||||
|
||||
ਮੂਲ ਨਿਯਮ-ਸਮੂਹ uBlock Origin ਦੇ ਮੂਲ ਫਿਲਟਰ-ਸਮੂਹ ਨਾਲ ਸੰਬੰਧਿਤ ਹੈ:
|
||||
|
||||
@@ -7,24 +7,6 @@ uBO Lite (uBOL) ਇੱਕ *ਬਿਨਾਂ ਇਜਾਜ਼ਤਾਂ* ਵਾਲਾ M
|
||||
-ਸੌਖੀ ਪਰਦੇਦਾਰੀ
|
||||
- Peter Lowe ਦੀ ਇਸ਼ਤਿਹਾਰ ਅਤੇ ਟਰੈਕਿੰਗ ਸਰਵਰ ਸੂਚੀ
|
||||
|
||||
You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
|
||||
ਤੁਸੀਂ ਚੋਣਾਂ ਸਫ਼ੇ ਨੂੰ ਖੋਲ੍ਹ ਕੇ ਹੋਰ ਰੂਲ-ਸੈੱਟ ਸਮਰੱਥ ਕਰ ਕਦੇ ਹੋ -- ਪੌਪ-ਅੱਪ ਪੈਨਲ ਵਿੱਚ _Cogs_ icon ਨੂੰ ਕਲਿੱਕ ਕਰੋ।
|
||||
|
||||
uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
|
||||
|
||||
uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
|
||||
|
||||
However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
|
||||
|
||||
To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
|
||||
|
||||
The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
|
||||
|
||||
If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
|
||||
|
||||
You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
|
||||
|
||||
ਯਾਦ ਰੱਖੋ ਕਿ ਇਹ ਕੰਮ ਹਾਲੇ ਵੀ ਜਾਰੀ ਹੈ, ਜਿਸ ਦੇ ਟੀਚੇ ਇਹ ਹਨ:
|
||||
|
||||
- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
|
||||
|
||||
- Entirely declarative for reliability and CPU/memory efficiency.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
uBO Lite (uBOL) to *niewymagający uprawnień* bloker treści oparty na MV3.
|
||||
uBO Lite (uBOL) to bloker treści oparty na MV3.
|
||||
|
||||
Domyślny zestaw reguł odpowiada domyślnemu zestawowi filtrów uBlock Origin:
|
||||
|
||||
@@ -7,24 +7,6 @@ Domyślny zestaw reguł odpowiada domyślnemu zestawowi filtrów uBlock Origin:
|
||||
– EasyPrivacy
|
||||
– lista serwerów śledzących i reklam Petera Lowe'a
|
||||
|
||||
Możesz dodać więcej zestawów reguł, odwiedzając stronę opcji – kliknij ikonę _koła zębatego_ w wyskakującym panelu.
|
||||
Możesz włączyć więcej zestawów reguł, odwiedzając stronę opcji – kliknij ikonę _koła zębatego_ w wyskakującym panelu.
|
||||
|
||||
uBOL jest całkowicie deklaratywny, co oznacza, że nie jest potrzebny stały proces uBOL w celu filtrowania, a filtrowanie treści oparte na wstrzykiwaniu CSS/JS jest wykonywane niezawodnie przez samą przeglądarkę, a nie przez rozszerzenie. Oznacza to, że sam uBOL nie zużywa zasobów procesora/pamięci, gdy trwa blokowanie treści – proces Service Worker uBOL jest wymagany _tylko_ podczas interakcji z panelem wyskakującym lub stronami opcji.
|
||||
|
||||
uBOL w trakcie instalacji nie wymaga szerokich uprawnień do „odczytu i modyfikacji danych”, stąd jego ograniczone możliwości w porównaniu z uBlock Origin lub innymi blokerami treści, które w czasie instalacji wymagają szerokich uprawnień do „odczytu i modyfikacji danych”.
|
||||
|
||||
Jednakże uBOL umożliwia *jawnie* udzielanie rozszerzonych uprawnień na określonych wybranych witrynach, dzięki czemu może lepiej filtrować te witryny za pomocą filtrowania kosmetycznego i wstrzykiwania skryptletów.
|
||||
|
||||
Aby przyznać rozszerzone uprawnienia na danej witrynie, otwórz panel wyskakujący i wybierz wyższy tryb filtrowania, taki jak Optymalny lub Kompletny.
|
||||
|
||||
Przeglądarka wyświetli ostrzeżenie o skutkach przyznania dodatkowych uprawnień wymaganych przez rozszerzenie na bieżącej witrynie i będziesz musiał poinformować przeglądarkę, czy akceptujesz, czy odrzucasz żądanie.
|
||||
|
||||
Jeśli zaakceptujesz żądanie uBOL o dodatkowe uprawnienia na bieżącej witrynie, będzie on w stanie lepiej filtrować zawartość bieżącej witryny.
|
||||
|
||||
Możesz ustawić domyślny tryb filtrowania na stronie opcji uBOL. Jeśli tryb Optymalny lub Pełny zostanie wybrany jako domyślny, trzeba będzie przyznać uBOL uprawnienia do odczytu i modyfikacji danych na wszystkich stronach internetowych.
|
||||
|
||||
Należy pamiętać, że nadal trwają prace z następującymi celami końcowymi:
|
||||
|
||||
– Brak szerokich uprawnień hosta w czasie instalacji – rozszerzone uprawnienia są przyznawane jawnie przez użytkownika na podstawie poszczególnych witryn.
|
||||
|
||||
– Całkowicie deklaratywna niezawodność i wydajność procesora/pamięci.
|
||||
|
@@ -1,30 +1,12 @@
|
||||
O uBO Lite (uBOL) é um bloqueador de conteúdo baseado no MV3 com menor permissão.
|
||||
O uBO Lite (uBOL) é um bloqueador de conteúdo baseado no MV3.
|
||||
|
||||
O conjunto de regras padrão corresponde ao conjunto de filtros padrão do uBlock Origin:
|
||||
|
||||
- Listas embutidas dos filtros do uBlock Origin
|
||||
- EasyList
|
||||
- EasyPrivacy
|
||||
- Lista de servidores de anúncios e rastreadores do Peter Lowe
|
||||
- Lista de servidores de anúncios e rastreamento por Peter Lowe
|
||||
|
||||
Você pode adicionar mais conjuntos de regras visitando a página das opções -- clique no ícone _Engrenagens_ no painel do pop-up.
|
||||
Você pode ativar mais conjuntos de regras visitando a página de opções — clique no ícone da _Engranagem_ no painel do pop-up.
|
||||
|
||||
O uBOL é totalmente declarativo, significando que não há necessidade de um processo permanente do uBOL para a filtragem ocorrer e a filtragem de conteúdo baseada em injeção do CSS/JS é realizada confiavelmente pelo próprio navegador ao invés da extensão. Isto significa que o próprio uBOL não consome recursos de CPU/memória enquanto o bloqueio de conteúdo está em andamento -- o processo do service worker do uBOL _só_ é necessário quando você interage com o painel do pop-up ou as páginas das opções.
|
||||
|
||||
O uBOL não requer permissão ampla pra "ler e modificar dados" na hora da instalação, logo suas capacidades limitadas fora da caixa comparadas com o uBlock Origin ou outros bloqueadores de conteúdo requerem permissões amplas pra "ler e modificar dados" na hora da instalação.
|
||||
|
||||
Contudo, o uBOL permite a você garantir *explicitamente* permissões estendidas em sites específicos de sua escolha pra que possa filtrar melhor esses sites usando filtragem cosmética e injeções de scriptlet.
|
||||
|
||||
Pra conceder permissões estendidas num site dado, abra o painel do pop-up e escolha um modo de filtragem superior tal como Otimizado ou Completo.
|
||||
|
||||
O navegador então avisará você sobre os efeitos de garantir as permissões adicionais requisitadas pela extensão no site atual e você terá que dizer ao navegador se você aceita ou recusa a requisição.
|
||||
|
||||
Se você aceitar a requisição do uBOL por permissões adicionais no site atual ele será capaz de filtrar melhor o conteúdo do site atual.
|
||||
|
||||
Você pode definir o modo de filtragem padrão na página de opções do uBOL. Se você escolher o Modo Otimizado ou Completo como o modo padrão você precisará garantir ao uBOL a permissão de ler e modificar os dados em todos os sites.
|
||||
|
||||
Mantenha em mente que este ainda é um trabalho em progresso com estes objetivos finais:
|
||||
|
||||
- Sem permissões amplas do hospedeiro na hora da instalação -- as permissões estendidas são garantidas explicitamente pelo usuário numa base por site.
|
||||
|
||||
- Totalmente declarativo para confiabilidade e eficiência de CPU/memória.
|
||||
O uBOL é totalmente declarativo, significando que não há necessidade de um processo permanente do uBOL para a filtragem ocorrer, e filtragem de conteúdo baseada em injeção de CSS/JS é realizada corretamente pelo próprio navegador ao invés da extensão. Isto significa que o uBOL em si não consome recursos de CPU/memória ao bloquear conteúdo -- o processo do service worker do uBOL _só_ é necessário quando você interage com o painel do pop-up ou as páginas de opções.
|
||||
|
@@ -1,30 +1,12 @@
|
||||
O uBO Lite (uBOL) é um bloqueador de conteúdo baseado no MV3 *sem permissões*.
|
||||
O uBO Lite (uBOL) é um bloqueador de conteúdo baseado em MV3.
|
||||
|
||||
O conjunto de regras padrão corresponde ao conjunto de filtros padrão do uBlock Origin:
|
||||
O conjunto de regras predefinido corresponde ao conjunto de filtros predefinido do uBlock Origin:
|
||||
|
||||
- Listas de filtros integrados do uBlock Origin
|
||||
- EasyList
|
||||
- EasyPrivacy
|
||||
- Peter Lowe’s Ad and tracking server list
|
||||
|
||||
Pode adicionar mais conjuntos de regras visitando a página de opções -- clique no ícone _Cogs_ na janela flutuante.
|
||||
Pode ativar mais conjuntos de regras visitando a página de opções -- clique no ícone _Cogs_ no painel popup.
|
||||
|
||||
O uBOL é totalmente declarativo, o que elimina a necessidade de um processo ativo constante para a filtragem ocorrer. A injeção de CSS e JS para filtragem de conteúdo é efetuada de maneira confiável pelo navegador, não dependendo da extensão. Isso significa que o uBOL por si só não gasta recursos de CPU/memória enquanto o bloqueio de conteúdo está a acontecer -- o processo do trabalhador de serviço do uBOL é necessário apenas quando se interage com a janela flutuante ou as páginas de opções.
|
||||
|
||||
uBOL não requer ampla permissão de "ler e modificar dados" no momento da instalação, daí as suas capacidades limitadas de pronto a usar em comparação com uBlock Origin ou outros bloqueadores de conteúdo que requerem amplas permissões de "ler e modificar dados" no momento da instalação.
|
||||
|
||||
No entanto, o uBOL permite-lhe que *explicitamente* conceda permissões alargadas em websites específicos de sua escolha, para que possa filtrar melhor esses websites usando filtragem cosmética e injeções de scriptlet.
|
||||
|
||||
Para conceder permissões alargadas num determinado sítio web, abra a janela flutuante e escolha um modo de filtragem superior, como 'Ideal' ou 'Completo'.
|
||||
|
||||
O navegador irá avisá-lo sobre os efeitos da concessão das permissões adicionais solicitadas pela extensão no site atual, e terá que informar ao navegador se aceita ou recusa o pedido.
|
||||
|
||||
Se aceitar o pedido do uBOL para permissões adicionais no site atual, o mesmo poderá filtrar melhor o conteúdo do site atual.
|
||||
|
||||
Pode definir o modo de filtragem padrão na página de opções do uBOL. Se escolher o modo Ideal ou Completo como o modo predefinido, terá de conceder ao uBOL a permissão para ler e modificar dados em todos os sítios web.
|
||||
|
||||
Tenha em mente que este ainda é um trabalho em curso, com estes objetivos finais:
|
||||
|
||||
- Sem permissões amplas de anfitrião no momento da instalação -- permissões estendidas são concedidas explicitamente pelo utilizador numa base por site.
|
||||
|
||||
- Totalmente declarativo para fiabilidade e eficiência de CPU/memória
|
||||
O uBOL é totalmente declarativo, o que significa que não é necessário um processo permanente do uBOL para que a filtragem ocorra, e a filtragem de conteúdos baseada em injeção de CSS/JS é realizada de forma fiável pelo próprio navegador, e não pela extensão. Isto significa que o próprio uBOL não consome recursos de CPU/memória enquanto o bloqueio de conteúdo está ativo -- o processo do service worker do uBOL é necessário apenas quando interage com o painel popup ou com as páginas de opções.
|
||||
|
@@ -1,30 +1,12 @@
|
||||
uBO Lite (uBOL) este blocant de conținut experimental *fără permisiuni* bazat pe MV3.
|
||||
uBO Lite (uBOL) este un blocker de conținut bazat pe MV3.
|
||||
|
||||
Setul de reguli implicit corespunde setului de filtre implicit al uBlock Origin:
|
||||
|
||||
Listele de filtre încorporate de uBlock Origin
|
||||
- EasyList
|
||||
- EasyPrivacy
|
||||
- Oglas Peter Lowe i lista servera za praćenje
|
||||
- -Lista de servere de anunț și de urmărire a lui Peter Lowe
|
||||
|
||||
Puteți adăuga mai multe seturi de reguli vizitând pagina de opțiuni -- făcând clic pe pictograma _Cogs_ din panoul pop-up
|
||||
Puteți activa mai multe seturi de reguli accesând pagina de opțiuni - faceți clic pe pictograma _Cogs_ din panoul pop-up.
|
||||
|
||||
uBOL este în întregime declarativ, ceea ce înseamnă că nu este nevoie de un proces uBOL permanent pentru ca filtrarea să aibă loc, iar filtrarea conținutului pe bază de injecție CSS/JS este realizată în mod sigur de browser în sine, mai degrabă decât de extensie. Aceasta înseamnă că uBOL în sine nu consumă resurse CPU/memorie în timp ce blocarea conținutului este în desfășurare -- procesul de lucru al serviciului uBOL este necesar _doar_ atunci când interacționați cu panoul pop-up sau cu paginile de opțiuni.
|
||||
|
||||
uBOL nu necesită permisiunii extinse de „citire și modificare a datelor” în momentul instalării, astfel capacitățile sale limitate din momentul instalării în comparație cu uBlock Origin sau alte blocare de conținut necesită permisiuni largi de „citire și modificare a datelor” în momentul instalării.
|
||||
|
||||
Cu toate acestea, uBOL vă permite să acordați *explicit* permisiuni extinse pe anumite site-uri alese de dvs., astfel încât să poată filtra mai bine pe acele site-uri folosind filtrarea cosmetică și injecțiile de scriptlet.
|
||||
|
||||
Pentru a acorda permisiuni extinse pe un anumit site, deschideți panoul pop-up și alegeți un mod de filtrare mai ridicat, cum ar fi Optimal sau Complet.
|
||||
|
||||
Browser-ul vă va avertiza apoi cu privire la efectele acordării permisiunilor suplimentare solicitate de extensie pe site-ul curent și va trebui să-i precizați browserului dacă acceptați sau refuzați cererea.
|
||||
|
||||
Dacă acceptați solicitarea uBOL pentru permisiuni suplimentare pe site-ul curent, acesta va putea filtra mai bine conținutul pentru site-ul curent.
|
||||
|
||||
Puteți seta modul implicit de filtrare din pagina de opțiuni a uBOL. Dacă alegeți modul optim sau complet ca implicit, va trebui să acordați lui uBOL permisiunea de a citi și modifica datele de pe toate site-urile web.
|
||||
|
||||
Rețineți că aceasta este în curs de desfășurare, cu aceste obiective finale:
|
||||
|
||||
- Fără permisiuni de gazdă largi în momentul instalării - permisiunile extinse sunt acordate în mod explicit de către utilizator pe bază de site.
|
||||
|
||||
- Complet declarativ pentru fiabilitate și eficiență CPU/memorie.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
uBO Lite (uBOL) — это блокировщик содержимого, *не требующий разрешений*, и основанный на MV3.
|
||||
uBO Lite (uBOL) — это блокировщик веб-элементов на базе MV3.
|
||||
|
||||
Стандартный набор правил соответствует типовому набору фильтров uBlock Origin:
|
||||
|
||||
@@ -7,24 +7,6 @@ uBO Lite (uBOL) — это блокировщик содержимого, *не
|
||||
- EasyPrivacy
|
||||
- Список рекламных и отслеживающих серверов от Peter Lowe
|
||||
|
||||
Вы можете добавить больше правил, посетив страницу настроек -- нажмите на значок_Шестеренок на всплывающей панели.
|
||||
Вы можете активировать больше списков правил на странице настроек -- нажмите на значок _Шестерёнки_ на всплывающей панели.
|
||||
|
||||
uBOL - полностью декларативный, т.е. для фильтрации не нужен постоянно выполняющийся uBOL процесс, а фильтрация контента, основанная на внедрении CSS/JS, производится непосредственно браузером. Это значит, что дополнение uBOL не расходует ресурсы ЦПУ/памяти, когда происходит блокировка рекламы -- служебный процесс uBOL запускается, _только_ когда вы вносите изменения на всплывающей панели или странице настроек.
|
||||
|
||||
uBOL не требует разрешение на полное "чтение и изменение данных" в момент установки, поэтому имеет ограниченные возможности по сравнению с uBlock Origin, и другими блокировщиками контента, которые требуют полное разрешение на "чтение и изменение данных" в момент установки.
|
||||
|
||||
Однако uBOL позволяет *намеренно* давать расширенные разрешения для определенных сайтов - по вашему усмотрению, чтобы эффективнее работать, используя косметическую фильтрацию и scriptlet-внедрения.
|
||||
|
||||
Для предоставления расширенных разрешений на текущем сайте - откройте всплывающую панель и выберите повышенный режим фильтрации: Оптимальный или Полный.
|
||||
|
||||
Далее браузер выдаст предупреждение об эффектах предоставления расширенных разрешений, запрошенных дополнением на текущем сайте, и надо будет выбрать: принять или отклонить этот запрос.
|
||||
|
||||
Если вы принимаете запрос uBOL на предоставление дополнительных разрешений, тогда дополнение сможет эффективнее фильтровать контент на текущем сайте.
|
||||
|
||||
Вы можете установить стандартный режим фильтрации на странице настроек uBOL. Если вы выбираете Оптимальный или Полный режим - режимом по умолчанию, необходимо предоставить uBOL разрешение на чтение и изменение данных на всех веб-сайтах.
|
||||
|
||||
Помните, что данный проект - в активной фазе разработки, преследующей следующие цели:
|
||||
|
||||
- Работа с ограниченными разрешениями при установке -- расширенные разрешения пользователь выдает по своему усмотрению, каждому сайту отдельно.
|
||||
|
||||
- Полностью декларативная работа - для надежности и эффективного использования ЦПУ/памяти.
|
||||
|
@@ -1,30 +1,12 @@
|
||||
uBO Lite (uBOL) is a *permission-less* MV3-based content blocker.
|
||||
uBO Lite (uBOL) යනු MV3-පාදක අන්තර්ගත අවහිර කරන්නා වේ.
|
||||
|
||||
The default ruleset corresponds to uBlock Origin's default filterset:
|
||||
පෙරනිමි රීති කට්ටලය uBlock Origin හි පෙරනිමි පෙරහන් කට්ටලයට අනුරූප වේ:
|
||||
|
||||
- uBlock Origin's built-in filter lists
|
||||
- EasyList
|
||||
- EasyPrivacy
|
||||
- Peter Lowe’s Ad and tracking server list
|
||||
- uBlock Origin හි බිල්ට් පෙරහන් ලැයිස්තු
|
||||
- පහසු ලැයිස්තුව
|
||||
- පහසු පෞද්ගලිකත්වය
|
||||
- පීටර් ලෝගේ දැන්වීම් සහ ලුහුබැඳීමේ සේවාදායක ලැයිස්තුව
|
||||
|
||||
You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
|
||||
විකල්ප පිටුවට පිවිසීමෙන් ඔබට තවත් නීති කට්ටල සක්රීය කළ හැකිය -- උත්පතන පැනලයේ _Cogs_ නිරූපකය ක්ලික් කරන්න.
|
||||
|
||||
uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
|
||||
|
||||
uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
|
||||
|
||||
However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
|
||||
|
||||
To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
|
||||
|
||||
The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
|
||||
|
||||
If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
|
||||
|
||||
You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
|
||||
|
||||
Keep in mind this is still a work in progress, with these end goals:
|
||||
|
||||
- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
|
||||
|
||||
- Entirely declarative for reliability and CPU/memory efficiency.
|
||||
uBOL සම්පූර්ණයෙන්ම ප්රකාශනාත්මකයි, එනම් පෙරීම සිදුවීමට ස්ථිර uBOL ක්රියාවලියක් අවශ්ය නොවන අතර, CSS/JS එන්නත්-පාදක අන්තර්ගත පෙරීම දිගුව මගින් නොව බ්රවුසරය විසින්ම විශ්වාසදායක ලෙස සිදු කරයි. මෙයින් අදහස් කරන්නේ අන්තර්ගත අවහිර කිරීම සිදුවෙමින් පවතින අතරතුර uBOL විසින්ම CPU/මතක සම්පත් පරිභෝජනය නොකරන බවයි -- ඔබ උත්පතන පැනලය හෝ විකල්ප පිටු සමඟ අන්තර් ක්රියා කරන විට uBOL හි සේවා සේවක ක්රියාවලිය _only_ අවශ්ය වේ.
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user