Compare commits
1132 Commits
v52.0-alph
...
v67.0-beta
Author | SHA1 | Date | |
---|---|---|---|
a633622d11 | |||
caaf76e3fb | |||
8811a28c56 | |||
fdc9db9a08 | |||
c079c3c632 | |||
6f76a9bfd2 | |||
dfab1516ef | |||
57339d09b1 | |||
ed23a88c08 | |||
dae1087082 | |||
7a103b0c23 | |||
5d5a9acaa4 | |||
76c476ee3c | |||
b3c6561ba8 | |||
a4c2bb80aa | |||
a173d30d4e | |||
fc801db06a | |||
61ce537f20 | |||
7a766cd2a7 | |||
842a78692e | |||
540f5ce868 | |||
be7c50c198 | |||
473e88c784 | |||
da4cfce10f | |||
2a30436905 | |||
7f6d7c6a52 | |||
720253eca3 | |||
7394f2f553 | |||
ccec62f66b | |||
329719fe25 | |||
57f4bd46e9 | |||
59a85bcdda | |||
dab27cd143 | |||
1ff14e31c0 | |||
c55ecbd8b2 | |||
99eb835e7a | |||
1e0b3d74f9 | |||
7bb0bfefe1 | |||
f1d28f3878 | |||
57618a31dc | |||
600f9677e9 | |||
0d40613268 | |||
11f40f8a84 | |||
c3a74a7c6e | |||
4dd40bddcc | |||
9da3cf4be8 | |||
50869a734f | |||
bb788682c9 | |||
50afeb1861 | |||
0eb107abf3 | |||
675577fb8d | |||
b28677a594 | |||
48f3dfec84 | |||
59930d4697 | |||
579aa3aa9c | |||
ed687fc7ca | |||
ce3d5a8cbe | |||
8ffbd81813 | |||
4119be3a86 | |||
8d874401fa | |||
b4a4856223 | |||
8a86097997 | |||
7a9763d129 | |||
a39516ff0e | |||
3e5e1bfdd2 | |||
7b667db766 | |||
8f1a489e36 | |||
6f8d0263df | |||
25b8b404fb | |||
528d0de6b4 | |||
c9c1671e4a | |||
8765231de0 | |||
e6017af4bd | |||
053808ba97 | |||
2d0182ce6e | |||
98f65da430 | |||
6a0c44d0a4 | |||
882d25f725 | |||
c3210d1be9 | |||
d4f7590c83 | |||
d6ccf7ba64 | |||
0922215670 | |||
f849e1c602 | |||
986c900193 | |||
b8367959da | |||
b05cfc32de | |||
358ddfdfce | |||
8a68fc48c5 | |||
87959d621c | |||
8b07fd57d0 | |||
4989928c1e | |||
c2775a3441 | |||
50d31a7aa2 | |||
9fbe3080c5 | |||
8a98cd1890 | |||
2d62b9f729 | |||
bb7f8df647 | |||
373602f0f0 | |||
e56665ecd1 | |||
59d056de27 | |||
d41372a7f0 | |||
f62f781645 | |||
408d1d0e26 | |||
d491cf1e89 | |||
ca0f2a5a88 | |||
fd10c35049 | |||
6ed3581cb0 | |||
c2034617f0 | |||
6231d6ebed | |||
411805b05c | |||
8c12f4bb14 | |||
e3349d0f07 | |||
92082621d6 | |||
54f86f4be6 | |||
585415b534 | |||
99586c4a3b | |||
8419b4d71b | |||
79e316a26f | |||
26a70f3cd7 | |||
bee47f33cd | |||
2fcec590b4 | |||
3c4b312cc7 | |||
0354895a2e | |||
462db2062c | |||
d9e24e5095 | |||
b1aa1f5619 | |||
a349662f69 | |||
28a7226235 | |||
97f08ad3cd | |||
68584a3397 | |||
8b4f45774a | |||
f8428dcc0a | |||
6d6cd5f410 | |||
eae8434853 | |||
2cff24f12e | |||
60be8be5ec | |||
981dd83c15 | |||
5c703f0262 | |||
de0ebbed21 | |||
e448015704 | |||
d3b1ed45ad | |||
ed140425ea | |||
3847f97f41 | |||
d81e8ae583 | |||
7a8381d894 | |||
649699ad22 | |||
1d5289dd94 | |||
74c8f294d6 | |||
a0508eccf6 | |||
25acd9f63e | |||
74a08114a8 | |||
71ffc661b2 | |||
e432a22693 | |||
f06c78f897 | |||
847eb80877 | |||
ec0e58099f | |||
e6eb473071 | |||
f1b892bc1c | |||
524b5f79dc | |||
24f2e1d982 | |||
c6060e5645 | |||
d0b8a08a4b | |||
f047fe93c0 | |||
6147fed61c | |||
54f79604da | |||
2f351fa5ce | |||
5dc3ea66cd | |||
d9a87b3ac4 | |||
95b75a065d | |||
8c96432eb8 | |||
1c09ec36e3 | |||
f1e6d164f7 | |||
3b90e6e592 | |||
45bd5ccc02 | |||
7bf5790f2b | |||
075d6fe6e4 | |||
4604cf0d4e | |||
b845f8fe3a | |||
96063027ba | |||
186fb1c9be | |||
ac4e764c37 | |||
5b0952f60a | |||
5bd5f6b28e | |||
55c2cacbce | |||
4badc42879 | |||
6946a01232 | |||
da80e39064 | |||
c1d6d81528 | |||
d5ece0f6f4 | |||
f6ea20a8b0 | |||
645492e82f | |||
15c68dc344 | |||
04b797f1aa | |||
e60abd6c44 | |||
d55b8176ad | |||
31adbba774 | |||
3c247a2c5b | |||
879f0abf28 | |||
d97d0ec0f5 | |||
3916e38681 | |||
51ac69874b | |||
2d956d04f3 | |||
9d6bfb650c | |||
ccdd4decf0 | |||
f0fbfd3086 | |||
88b747ef36 | |||
c6ebe36165 | |||
7684e83aba | |||
4f37975566 | |||
26b874bed7 | |||
61be5ae563 | |||
ef1e61ebcd | |||
205c48d9d3 | |||
0e1b0a4b6e | |||
778dc89bb6 | |||
23733097a9 | |||
71a2d393f3 | |||
74ebacc0dd | |||
45e3b3a0e0 | |||
8172f730d3 | |||
5c85e61bb4 | |||
0a67cdec8b | |||
b85668c2cd | |||
786839ffc1 | |||
8313f2e01a | |||
0a87c99a0e | |||
91fed43fc7 | |||
74f029566e | |||
571be93ae0 | |||
11b16c9c6d | |||
c4ec4dbc77 | |||
67998eb4af | |||
834857b564 | |||
25923f1acd | |||
85eaba2571 | |||
51237f6889 | |||
74e753d0c5 | |||
db56940422 | |||
400d764a93 | |||
f3e2bfa76d | |||
d4907faa8e | |||
62351bfbf5 | |||
b182946ae4 | |||
2ae3a3e4e1 | |||
0ff610c056 | |||
661a314e28 | |||
106f46d053 | |||
643cba63cf | |||
b5c5d8e9d1 | |||
36b90cd5e6 | |||
299a03663f | |||
13550d18a1 | |||
c12eb0fdc6 | |||
acbf881b1f | |||
7351e561c4 | |||
4e42bad6a1 | |||
b85e748b53 | |||
0cc4007eda | |||
3003f2dd85 | |||
ce48306a0d | |||
3423d39fa9 | |||
4834472107 | |||
f214e4bc4e | |||
8fd6061bcc | |||
92acb6b2f7 | |||
b6b9733afa | |||
89bc0bee16 | |||
f8fc465d0a | |||
58fa4e9b6d | |||
afee555045 | |||
5a36b4e016 | |||
7b3e6f5143 | |||
452c717502 | |||
661af196d9 | |||
39a30d710b | |||
8f10300c15 | |||
806d047729 | |||
0efebe3e83 | |||
49d9314b0a | |||
b4b5e3a068 | |||
29d832e350 | |||
68e44285c5 | |||
e8bfa93696 | |||
1abe1fd4df | |||
24f7847f73 | |||
56206f77ba | |||
587194ce84 | |||
7aac6d476a | |||
9e073ea5d5 | |||
732c438148 | |||
58931bc15d | |||
21b18cbe49 | |||
cbcd293e68 | |||
aacf5d4a0b | |||
ec5fb6e3a1 | |||
b2fc9bc266 | |||
ca1cc2001f | |||
f88af1dac6 | |||
1c6c5ea2ff | |||
2d316ceedd | |||
36c791c4bc | |||
ee213f2bab | |||
01a978e33a | |||
6717bc0674 | |||
11a94c7e32 | |||
b7c0e816a0 | |||
8b5547a973 | |||
f0c29cf8a6 | |||
e7a71143a8 | |||
9e342deaf2 | |||
109d4cf916 | |||
c805dd8b3b | |||
a89e8fc1e0 | |||
f2065a463c | |||
299489c701 | |||
50a578c32a | |||
7d417da5fd | |||
e6a13e5a93 | |||
9a46fafb53 | |||
6fb2f25e65 | |||
9e67f982ab | |||
5b6ed92da4 | |||
2969c6660f | |||
776e32c27f | |||
9e1c368cd9 | |||
572d16d5a5 | |||
29e2461cd1 | |||
f39112f914 | |||
0145ccfec3 | |||
c2c8e6227c | |||
ab404680df | |||
cfa2da8fea | |||
b3b3ae4660 | |||
c4d131aaf9 | |||
9c975b318a | |||
a1638868ea | |||
3806ccc68c | |||
06b69bb95a | |||
d8bfdaa058 | |||
03efb99754 | |||
b390d9787b | |||
2e908f38d2 | |||
f973422581 | |||
5bcbe56f4b | |||
833f816b99 | |||
5ccea3262f | |||
9611eac1cf | |||
43119694fb | |||
cbea3adc7e | |||
4813aa549b | |||
96706cf11e | |||
a81d013e45 | |||
857cbd8c24 | |||
c9543519c7 | |||
d34894e965 | |||
70abeda9d4 | |||
dceef9d1db | |||
9386fb5581 | |||
56acb4cff5 | |||
1eac4185d2 | |||
05021ac62e | |||
a2b5e1e7cf | |||
d9a1c83300 | |||
a4a9b9a675 | |||
c61e633236 | |||
8783ae9ce8 | |||
3264fbd9c3 | |||
b8b3a4f7ed | |||
7f1f9e124b | |||
9b1cf28e89 | |||
acc5a1c2df | |||
9a4032f4cd | |||
f113cf84c3 | |||
c92ece7960 | |||
3e5667fb34 | |||
2bf238f384 | |||
3edf7af85e | |||
4b8b2d81a0 | |||
fde8035332 | |||
01bd2a4f6d | |||
6d4b49d061 | |||
8e60f412e4 | |||
f60a87f97f | |||
449e32a8ca | |||
35a9d3d1e1 | |||
c66d1b08e7 | |||
0a63b6545d | |||
a8051b88e4 | |||
87ce12925d | |||
d6a7531c67 | |||
3a77e18ae8 | |||
a635ae5dfb | |||
02bac31e6a | |||
e5d23f6b40 | |||
5fc48a1027 | |||
de7a8650f7 | |||
9c7170fc26 | |||
9406f32194 | |||
33759ab604 | |||
f97c9a05a9 | |||
94abd71787 | |||
45f1dfa912 | |||
d6280d2d7a | |||
67360332ab | |||
b880c9da61 | |||
1b0c9f66d9 | |||
7eda26a1d0 | |||
b89e247263 | |||
35fd4e343c | |||
47cf0e1640 | |||
5e7258ba2d | |||
6e6a993494 | |||
772fa4e06e | |||
78dc31f6d6 | |||
459396ed5b | |||
88b08c79cd | |||
cf269c982b | |||
36c11cb5d4 | |||
517b8665c0 | |||
149aab6b1e | |||
c5a1a038d2 | |||
cd322f39a4 | |||
8f2b674910 | |||
7d65d8c173 | |||
8b6eec2b46 | |||
13164a2d0d | |||
c4a1583e99 | |||
d10c8598f7 | |||
40db113d07 | |||
041e14a4d5 | |||
e67fdc2ce4 | |||
75534b4e6c | |||
94c0665343 | |||
71adc43d17 | |||
94f86465e6 | |||
bb4bf835b0 | |||
b4f1b4dbbf | |||
f90c17f748 | |||
fdac8fba6a | |||
d055560f6f | |||
27f87240ec | |||
17d83c1a1a | |||
8fa3a9db6b | |||
b0fb59f735 | |||
64d08dd6bc | |||
824dec4f9e | |||
3d2b0703be | |||
e25137ce94 | |||
6ee25c2bf5 | |||
6309822d33 | |||
d04ff8457e | |||
c6e3c013e0 | |||
e373a0f6e1 | |||
acce871308 | |||
61e706641e | |||
1e5e2ca418 | |||
c62bff5c70 | |||
3bae3ed5ba | |||
aa91ea1680 | |||
d244198438 | |||
871e7ed87b | |||
48901d156a | |||
8b4e6c95aa | |||
fd1aa74ff3 | |||
b3e92ab7cc | |||
30fbaba4df | |||
72e1858926 | |||
3ad6ed465e | |||
3fcad90996 | |||
383b8ca943 | |||
6a98aa7ba0 | |||
2037449fbd | |||
e18bd0f32c | |||
715fff06cf | |||
3675a68009 | |||
062dd6c023 | |||
bc17b4e450 | |||
682e12fe57 | |||
6cb27ca78c | |||
c38ae56232 | |||
04f1449003 | |||
53a69ff5bc | |||
e8c02278eb | |||
457611f079 | |||
09aca71822 | |||
f90193ab76 | |||
ffced9b4c0 | |||
0b3395b520 | |||
d4a20165ef | |||
089f0826cf | |||
b83d53e681 | |||
14456b5a29 | |||
517e40703f | |||
7f7282a975 | |||
6fd415eab2 | |||
d4083e6a3e | |||
3192027f52 | |||
2a402310cc | |||
1469e13df8 | |||
92585ecd93 | |||
205d64ab29 | |||
3812aed9e9 | |||
a83f5a0f5f | |||
19c40eeb18 | |||
61d2b46a02 | |||
b93c7e026c | |||
ec687cad75 | |||
6b691ae7e3 | |||
40da3653d3 | |||
77a5894fa0 | |||
11bcf46063 | |||
2dd2f5febe | |||
2de13258ff | |||
40391a26a2 | |||
50186412e4 | |||
9892c3cbb7 | |||
887e93a4f2 | |||
7f1a82365c | |||
8996071cd0 | |||
cc166b8091 | |||
0260176fef | |||
09e2b181e4 | |||
4dafbb89df | |||
5e08ad8c60 | |||
6366ab8afc | |||
2980073bca | |||
e8b9f72885 | |||
b502317caf | |||
5385b8c4ab | |||
17fe261170 | |||
3d5276484a | |||
542b814814 | |||
0473c73860 | |||
a6fd4d1db1 | |||
95251e98da | |||
08a5410b88 | |||
93a8f89191 | |||
4fdf322193 | |||
ca11a88189 | |||
a290b3ad3d | |||
d924c01518 | |||
1738f9efb1 | |||
3ef5ba3ac7 | |||
2969ab5b13 | |||
3405bae6d8 | |||
a4eaf9494e | |||
ea6e9be787 | |||
0ebe5d0fa8 | |||
ff77f7260c | |||
93c3457d18 | |||
bc371c8c9d | |||
622b70aa37 | |||
c83670f708 | |||
c399bb1d2d | |||
0a11a87fd0 | |||
91521dbc84 | |||
14c1620994 | |||
0da73d606b | |||
6a0f162d64 | |||
038201fb07 | |||
91c8da5f12 | |||
22198d420a | |||
6becf50fe6 | |||
4fb3040042 | |||
5005376742 | |||
48f95f2ac7 | |||
e5c14eb700 | |||
7a3810f6ca | |||
c8d7694fd3 | |||
343f77c5e9 | |||
a0ec17955d | |||
e195aceb54 | |||
6882a64bf2 | |||
806d6edc6d | |||
d1ab8fd10c | |||
db97478cd1 | |||
48ec3da18d | |||
8c35bf5d11 | |||
a3bffb83bd | |||
b30b988137 | |||
f820ecbacb | |||
3acef78f59 | |||
ac16b9c77b | |||
1069915372 | |||
978e51b515 | |||
c5374b60d8 | |||
2a2b80902a | |||
d82791a933 | |||
d89e9834ff | |||
04c7ed94da | |||
c82d6f70fe | |||
dd29583735 | |||
e3ad7055dd | |||
c1c368bce9 | |||
73f03c449f | |||
31ec621d3f | |||
8f02a5bc40 | |||
73811e49be | |||
d7ab2f83e4 | |||
c0f9e6ab2b | |||
7cd2c650cb | |||
a1f10513ea | |||
74f18db85a | |||
2ad3fbdbd3 | |||
68a44bcbb4 | |||
1f15e287fb | |||
65b64f44b6 | |||
643206a3da | |||
05ac6dd0ec | |||
daff5f6fa6 | |||
018fb2a321 | |||
4f22afac7f | |||
94bbb6bab4 | |||
b9266bba1d | |||
68efac4cc8 | |||
db5706d949 | |||
3ffdd67904 | |||
83de87b18d | |||
99016960fa | |||
52efb2af7a | |||
dbe0056c95 | |||
987c996cce | |||
a1cae1ae74 | |||
0938d7bab2 | |||
490d81657f | |||
4170529e39 | |||
ffae671b27 | |||
48861e57e1 | |||
b74b79f11c | |||
13534e33bc | |||
148daa94cf | |||
88b08d4ac5 | |||
ea76ea91af | |||
8af0d4fa7a | |||
877d6a5af2 | |||
e0cd64391c | |||
464ffcd7e6 | |||
16e8d6ca7a | |||
21b21d2adb | |||
6973bb459c | |||
1571e067e7 | |||
1789fd902b | |||
8f4ab83301 | |||
eeef37154d | |||
be563241d6 | |||
002780df8c | |||
901670fffc | |||
3a403cd120 | |||
25321e7262 | |||
ca947c6ae4 | |||
c9f62822a6 | |||
240bcbfbee | |||
1262edee61 | |||
2f5ae9b294 | |||
fbd9f344af | |||
323da46204 | |||
28f06b41e3 | |||
77ca6af2d9 | |||
e663b8a968 | |||
f8ec9cebdd | |||
24df3274f1 | |||
f5a4ec0cbd | |||
abbbf8ef0e | |||
b9c8329778 | |||
8f68ee3e9e | |||
4d2c26790f | |||
ab492c58c3 | |||
4fc7490405 | |||
11b0b779b8 | |||
4ae5967e09 | |||
ebd233bf6e | |||
f2ed64c576 | |||
f09c860d96 | |||
753c4695a6 | |||
7655648174 | |||
f8472fe501 | |||
d82475a7c3 | |||
008257283b | |||
d9e935de3c | |||
e73eeefa64 | |||
744944a9ab | |||
5631fadd4a | |||
ea54827582 | |||
28ba2a705a | |||
a9def5992f | |||
9aa9752dc4 | |||
eb2a9b2493 | |||
60cfacadb3 | |||
85e633dc60 | |||
61aeaa4714 | |||
b802ecb18f | |||
9b5d4521d1 | |||
8f34f8e0ff | |||
f683383ba3 | |||
83aa56e353 | |||
467b3d8602 | |||
183a62448f | |||
ac751a74f2 | |||
457ef9ec2f | |||
a6c93b3982 | |||
ccaf06973b | |||
ce3c077d06 | |||
edec5cc366 | |||
8a99bb350c | |||
fc47792df2 | |||
e5d00be8f0 | |||
ac7ad78d1d | |||
cf6f614f5b | |||
00e17281dc | |||
9a4982ec0e | |||
0a97660506 | |||
3737b65f53 | |||
635cacfe54 | |||
a126a32109 | |||
c9e7f1ccfa | |||
ff9370b714 | |||
b1fd2ba48b | |||
bdf69cd198 | |||
22695f464b | |||
44e129ea3d | |||
6ff3d1eb36 | |||
a389572243 | |||
51d98fac09 | |||
d71321027b | |||
ed4c9202b9 | |||
5b931b06e8 | |||
d3eda589bb | |||
0be33e2408 | |||
eba3470a81 | |||
1c997693ff | |||
76b24fa6aa | |||
3b95e04b56 | |||
3ec7dae496 | |||
a269e53f88 | |||
1789fea4f1 | |||
679ca59233 | |||
82d20c328d | |||
41a55ad5f2 | |||
2c1e4ae542 | |||
910d4e2e59 | |||
2bf9e6a773 | |||
d279839ba6 | |||
98bb8ad203 | |||
a281090cdc | |||
44316934f3 | |||
18048832da | |||
497f6ed58c | |||
63b924f101 | |||
e1e40847e0 | |||
5743fe303c | |||
89e0aed652 | |||
59ae0b1028 | |||
69c278c3ba | |||
4290b4e882 | |||
efcaa3de8a | |||
cdeb0abe79 | |||
450adab519 | |||
500c129d48 | |||
7ae034a23c | |||
754ec610d1 | |||
fe752c8be3 | |||
da3ba2a97f | |||
22e51e2a08 | |||
c6d55296fb | |||
f89bb3f1c2 | |||
64a6eb794a | |||
fe46ea79ce | |||
d256908a5f | |||
dedfbf04b6 | |||
e080becba5 | |||
76bc2bce25 | |||
7f4a671b09 | |||
b373fe2a58 | |||
95f1d6ecf6 | |||
3028a7a61a | |||
06d9d61558 | |||
1dd683c81f | |||
2c56d90a6f | |||
df01fb87ce | |||
ce66da10a4 | |||
e1034faf1f | |||
d4cfd1e885 | |||
6cdfd1a443 | |||
ca16792723 | |||
6e2479dc0f | |||
bbb29237cc | |||
fec0c99287 | |||
258e8ff805 | |||
a74170e2b0 | |||
e29a301578 | |||
1031312f82 | |||
ddfdf7cb47 | |||
649e49e0fa | |||
908a8d66f4 | |||
4a91b866a4 | |||
0912b03f62 | |||
12f80bdf65 | |||
88216743a5 | |||
fa94f9b3c1 | |||
620a0ee29c | |||
a25df4c942 | |||
7fa0025baf | |||
80ac9dfa1f | |||
a93ce5d9f1 | |||
367972155a | |||
985c164cd0 | |||
f5ffeff971 | |||
31e7c72f64 | |||
2f6deda172 | |||
39594629e5 | |||
ca30ba4994 | |||
5338b6fb60 | |||
bdf0e5ed56 | |||
89474d014f | |||
c84a59fd95 | |||
598ee751f5 | |||
2e4e0a6327 | |||
4d35be7ccb | |||
f3bd095fe9 | |||
e794611920 | |||
f450c2172b | |||
6a7dac32cc | |||
6900924aa6 | |||
7c2be97879 | |||
5e414ff5cb | |||
13aa4a0290 | |||
76672ed767 | |||
a5ae7d17a3 | |||
54b64e3f3c | |||
17ba1401cf | |||
e09e5ab8db | |||
caed9d833c | |||
d9f76d3add | |||
bb2325cad2 | |||
9a0edfe887 | |||
0277ba8102 | |||
b907dd7e83 | |||
83bb51b988 | |||
f3c87367fb | |||
ffc8280c0c | |||
346b945ee3 | |||
b86f625b02 | |||
431b55f47f | |||
4120419cd5 | |||
9f30adee64 | |||
a19a3d2a35 | |||
b6533689cf | |||
ae83b83590 | |||
4977d01fec | |||
eab3a0b714 | |||
dd25413c98 | |||
3d109664bb | |||
595eaf540c | |||
31b1f6624e | |||
e95d2afc95 | |||
996e760f8c | |||
6c2f3ad33a | |||
f7dea0a1e9 | |||
911a98c675 | |||
cda46d8342 | |||
2182bdfbe8 | |||
21b5c5dea7 | |||
b527e5c65e | |||
1755543594 | |||
cf2a6fd554 | |||
bc58c10f34 | |||
3e3acd5897 | |||
6be84b8516 | |||
7a05580c62 | |||
48511d1f9b | |||
69449f8593 | |||
09ccb74d69 | |||
ebcf5bec9e | |||
3970c1db9e | |||
0861490d39 | |||
80c95cbac4 | |||
f18197c22e | |||
98698c8e68 | |||
ea713abfc6 | |||
eb532d61be | |||
29ce831774 | |||
c7cd524f21 | |||
8538685685 | |||
9e573ea97f | |||
f8cdfbcd93 | |||
0e2e54238c | |||
ed2f829af9 | |||
7e92f86244 | |||
66cf6b7641 | |||
dcf4ebfbad | |||
b24539cc25 | |||
f52cb0e334 | |||
4d0c29672b | |||
a6fe71d24a | |||
fa778f2a87 | |||
12e25652e6 | |||
cb5593f09e | |||
63ed779776 | |||
998069f440 | |||
63ba049ccb | |||
8081967187 | |||
f00cc290b4 | |||
8c3cb3a834 | |||
4397bc9137 | |||
71fd837308 | |||
bb07b0e78c | |||
8d7fceb6da | |||
aeb7846200 | |||
4fac8f71c4 | |||
e4002913d9 | |||
9499122d96 | |||
656b755a34 | |||
0bf6323e6f | |||
dc955fb846 | |||
0eb7a927e6 | |||
989a5816b1 | |||
049841acb1 | |||
16499e9611 | |||
4e36051192 | |||
bcf38ca80b | |||
71c81992f5 | |||
b6567f3de9 | |||
3cdc4a93d7 | |||
34d0054d95 | |||
7d89436f27 | |||
54cf998f78 | |||
35fd208af9 | |||
40a62aa38d | |||
1ed4c45051 | |||
4a0074d1ab | |||
132e0fa503 | |||
c864c8ebb0 | |||
063b731054 | |||
d7c282c0fa | |||
b24dd123d0 | |||
8b0bc463c5 | |||
4d31983e06 | |||
e018583082 | |||
6348826519 | |||
b55a986d52 | |||
ba78702686 | |||
32327e15c1 | |||
d1306aee26 | |||
ac77e65d82 | |||
6b7032ccaf | |||
6ef86fbde6 | |||
0176d8676c | |||
da1b9054ad | |||
fba479944d | |||
791b4114c6 | |||
8cdc6e766c | |||
319db71e82 | |||
907e0aaa24 | |||
5e0f37c925 | |||
06018367a1 | |||
7b2d67976c | |||
7a0fbb6a31 | |||
1f18162d56 | |||
eba592c7e5 | |||
46bfeca8c2 | |||
eeedf0db72 | |||
1ad970741c | |||
f61c951ca0 | |||
b9e321c45a | |||
8a9a4fe427 | |||
44c4a62820 | |||
ab7dfb7f43 | |||
3c7789defc | |||
82432a3d40 | |||
75f6bc8b5d | |||
b53b4832d4 | |||
9719fc319d | |||
9340f8ba04 | |||
dd01dd54c6 | |||
1a04c1314e | |||
ec03969d98 | |||
1621cd5e48 | |||
0006ee04b4 | |||
08fbc37870 | |||
9859cc8889 | |||
a4be5471f1 | |||
d1e02e407b | |||
ed9bc336fa | |||
f84f9b7c44 | |||
f74b327403 | |||
e4a8dcf0dc | |||
9eee26bc35 | |||
76293cab6a | |||
4a0ff9ea33 | |||
8b2b0898c0 | |||
956c94f812 | |||
2336d0a20b | |||
a4a0ec5cee | |||
8abe26083c | |||
c4bba2258e | |||
f84e051b50 | |||
caa1d2c22e | |||
b72c6f57c0 | |||
7c87abbe78 | |||
e6628e56df | |||
c7b34d3b26 | |||
147e02379a | |||
05bbd88f95 | |||
e080614c30 | |||
a0aca310e9 | |||
b5c072dc18 | |||
31d3aec893 | |||
1c82abf074 | |||
1c5988c770 | |||
b8a6f2a7ad | |||
ec9f9fcea8 | |||
7fcb3ce836 | |||
8f5305f383 | |||
9d6da7199d | |||
83cf157178 | |||
21f5333723 | |||
d5c92cd548 | |||
ce90d07e0e | |||
903ba2d2b4 | |||
64351a0c19 | |||
0d09e9c9b5 | |||
ad51e00c8f | |||
195ec514c3 | |||
436db6c02d | |||
cd13d479ee | |||
6516eadc60 | |||
dce198c405 | |||
2a240b4a10 | |||
9249fc6ed0 | |||
9a42dfe73d | |||
84ea69411b | |||
dc15fe7db8 | |||
6cda4ebc14 | |||
d3e1fe3a1c | |||
9a76ccbfda | |||
b6c17138bf | |||
382adf1042 | |||
870f9503c2 | |||
b67f98141b | |||
2a609fc85d | |||
2b52bf895c | |||
eaaecd128c | |||
78bf49adb4 | |||
f024e9bd43 | |||
1b73cb828e | |||
7600d06651 | |||
b365a88a52 | |||
fa74bcaa4a | |||
ad56e58330 | |||
66e807623b | |||
553d1aedde | |||
9ffc3b0d9a | |||
02283833a1 | |||
acb22ac368 | |||
e1a3d681c8 | |||
fc0a045069 | |||
8f0569f3fd | |||
3a39425ab2 | |||
49d229b90f | |||
f5670636f6 | |||
9d3c7949fd | |||
4852318ece | |||
6fdbcd7fae | |||
0bdca802eb | |||
9b65d9788d | |||
b3af6c1f5f | |||
f3a0e8d88c | |||
ffd89807bf | |||
da73ca1759 | |||
30bb523b11 | |||
b26175494b | |||
7496b873b7 | |||
8ca3176ab1 | |||
5cf2de570a | |||
37b8ad66b8 | |||
4d1689b7a5 | |||
d87bcfde58 | |||
c194e21d5c | |||
49e2025bc5 | |||
2d0e27cb43 | |||
9bbe074960 | |||
ec5fdfcdaa | |||
e1a5f80063 | |||
bc70023b54 | |||
551427fccc | |||
a8cfe7f06f | |||
50d19b4628 | |||
d97f8645d4 | |||
d62e92067b | |||
047fe1acd1 | |||
9274c2ba18 | |||
be8ff2268d | |||
dc6246ca8f | |||
cbd5fa7e2f | |||
0fef6f9e15 | |||
0043256b77 | |||
a48c2b5fc5 | |||
76b7d1229c | |||
3c9d17123b | |||
1b28066b82 | |||
5397d2a39a | |||
3cd631ecd3 | |||
e0102ec141 | |||
385aeaa54e | |||
ccbbfeda88 | |||
27ef3be4f6 | |||
cd0d2de04c | |||
e941dc7eba | |||
f4f739929b | |||
fd04f6666b | |||
fa18bccd54 | |||
4ed77022c9 | |||
0dc6e848bf | |||
4ebbbabb2c | |||
35b1bde047 | |||
08363cb217 | |||
9d80dfbf45 | |||
ae60a0ff66 | |||
b2eccc65f4 | |||
6b6f614a72 | |||
f3e7a31e44 | |||
53b8a82e8f | |||
a109e9f17c | |||
e6e1447d9c | |||
dc728f2cd0 | |||
0605bd0d4e | |||
2732eaed21 | |||
073c630b24 | |||
d7bd0521c5 | |||
8f59879992 | |||
4e455ba392 | |||
2c4b7761ee |
15
.gitattributes
vendored
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
* text=auto
|
||||||
|
|
||||||
|
*.js text
|
||||||
|
*.md text
|
||||||
|
*.yml text
|
||||||
|
*.txt text
|
||||||
|
*.sh text
|
||||||
|
## *.bat text eol=crlf
|
||||||
|
*.bat -text
|
||||||
|
|
||||||
|
*.png binary
|
||||||
|
|
||||||
|
.gitattributes export-ignore
|
||||||
|
*.yml export-ignore
|
||||||
|
/wikipiki export-ignore
|
55
README.md
@ -1,48 +1,27 @@
|
|||||||
## ghacks-user.js
|
### ![][b] user.js
|
||||||
|
A `user.js` is a configuration file that can control hundreds of Firefox settings. For a more technical breakdown and explanation, you can read more on the [overview](https://github.com/ghacksuserjs/ghacks-user.js/wiki/1.1-Overview) wiki page.
|
||||||
|
|
||||||
- This is a rough draft, please read the old intro currently at the start of the user.js in the meantime.
|
### ![][b] ghacks user.js
|
||||||
- Paragraph here about not jumping in without reading first, and backing up, and understanding the changes
|
The `ghacks user.js` is a **template** which aims to provide as much privacy and enhanced security as possible, and to reduce tracking and fingerprinting as much as possible - while minimizing any loss of functionality and breakage (but it will happen).
|
||||||
|
|
||||||
### Origins
|
Everyone, experts included, should at least read the [implementation](https://github.com/ghacksuserjs/ghacks-user.js/wiki/1.3-Implementation) wiki page, as it contains important information regarding a few `ghacks user.js` settings.
|
||||||
- yada yada
|
|
||||||
|
|
||||||
### Purpose
|
Note that we do *not* recommend connecting over Tor on Firefox. Use the [Tor Browser](https://www.torproject.org/projects/torbrowser.html.en) if your [threat model](https://www.torproject.org/about/torusers.html.en) calls for it, or for accessing hidden services.
|
||||||
- discuss why use a js (enforcement on startup, migration)
|
|
||||||
- outline trade-offs between security vs privacy etc
|
|
||||||
- explain expectations and site breakage
|
|
||||||
- explain this version is a "compromise" or balance that aims (with addons eg you WILL need uBlock Origin or turn safe browsing and tracking protection back on) to provide as much privacy and enhanced security as possible, and to reduce the fingerpritning attack surface as much as possible - while putting up with some incoveniences and as little site breakage as possible (but it will happen). It's only a starting point.
|
|
||||||
- provide troubleshooting: site breakage will happen. 90=% of the preferences cause no issues. It is only a small core of settings that people may or may not need to look at, depending on their objective.
|
|
||||||
- no one size fits all, this is a template, fork it! Customize it! (see goals, we won't set you wrong)
|
|
||||||
|
|
||||||
|
Also be aware that this `user.js` is made specifically for Firefox. Using it as-is in other Gecko-based browsers can be counterproductive, especially in the Tor Browser.
|
||||||
|
|
||||||
### Goals & Standards
|
Sitemap: [Releases](https://github.com/ghacksuserjs/ghacks-user.js/releases), [changelogs](https://github.com/ghacksuserjs/ghacks-user.js/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3Achangelog), [Wiki](https://github.com/ghacksuserjs/ghacks-user.js/wiki), [stickies](https://github.com/ghacksuserjs/ghacks-user.js/issues?q=is%3Aissue+is%3Aopen+label%3A%22sticky+topic%22). [diffs](https://github.com/ghacksuserjs/ghacks-user.js/issues?q=is%3Aissue+label%3Adiffs)
|
||||||
To be **THE** template and resource all other user.js' come to for news, links, information and more, which means it needs to be:
|
|
||||||
|
|
||||||
- comprehensive (eg some prefs are included at default for completeness/enforcement, a lot are included and changed for future-proofing, etc)
|
### ![][b] acknowledgments
|
||||||
- current and available and change-trackable (hey, we're on github now)
|
Literally thousands of sources, references and suggestions. That said...
|
||||||
- easy to understand (good, simple, less-technincal descriptions)
|
|
||||||
- accountable and a resource (lots of links to authorative authors and tech papers, also repo wiki)
|
|
||||||
- correct and to dispell myths and bad advise (see accountable)
|
|
||||||
- eassy to follow and report and discuss (logical and numbered structure)
|
|
||||||
- give good advise (see trade-offs)
|
|
||||||
- expanded on with more information, such as FF version numbering for introduction and deprecation of preferences, hidden pref tags etc
|
|
||||||
- archived for each stable release (starting with 51)
|
|
||||||
- to provide illustrated wiki topics to help (help wanted please!)
|
|
||||||
- to make it as easy as possible for anyone to use a user.js and get it right for them
|
|
||||||
- to provide two or three future forks with differnent settings from "painless no-breakage no-addons" thru to a "super-hardened" version: for use with multiple profiles
|
|
||||||
|
|
||||||
### Implementation
|
* Martin Brinkmann at [ghacks](https://www.ghacks.net/) <sup>1</sup>
|
||||||
- expectations of the user
|
* The ghacks community and commentators
|
||||||
- link to wiki on testing and tweaking in a portable FF first
|
* [12bytes](https://12bytes.org/articles/tech/firefox/firefoxgecko-configuration-guide-for-privacy-and-performance-buffs)
|
||||||
- backup first: link to wiki article on backup & restore methods
|
* The 12bytes article now uses this user.js and supplements it with an additional JS hosted at [GitLab](https://gitlab.com/labwrat/Firefox-user.js/tree/master)
|
||||||
- changing, resetting preferences: user.js and about:config
|
|
||||||
|
|
||||||
### Troubleshooting
|
<sup>1</sup> The ghacks user.js was an independent project by [Thorin-Oakenpants](https://github.com/Thorin-Oakenpants) started in early 2015 and was [first published](https://www.ghacks.net/2015/08/18/a-comprehensive-list-of-firefox-privacy-and-security-settings/) at ghacks in August 2015. With Martin Brinkmann's blessing, it will keep the ghacks name.
|
||||||
- wiki links
|
|
||||||
|
|
||||||
### Help & Resources
|
### ![][b] [](https://opensource.org/licenses/MIT)
|
||||||
- wiki links, appendices etc
|
|
||||||
|
|
||||||
### Acknowledgements
|
|
||||||
- yada yada
|
|
||||||
|
|
||||||
|
[b]: /wikipiki/bullet01.png
|
||||||
|
@ -1 +1,3 @@
|
|||||||
theme: jekyll-theme-midnight
|
theme: jekyll-theme-midnight
|
||||||
|
title: ghacks-user.js
|
||||||
|
description: An ongoing comprehensive user.js template for configuring and hardening Firefox privacy, security and anti-fingerprinting
|
||||||
|
110
prefsCleaner.bat
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
@ECHO OFF & SETLOCAL DisableDelayedExpansion
|
||||||
|
TITLE prefs.js cleaner
|
||||||
|
|
||||||
|
REM ### prefs.js cleaner for Windows
|
||||||
|
REM ## author: @claustromaniac
|
||||||
|
REM ## version: 2.2
|
||||||
|
|
||||||
|
CD /D "%~dp0"
|
||||||
|
|
||||||
|
:begin
|
||||||
|
ECHO:
|
||||||
|
ECHO:
|
||||||
|
ECHO ########################################
|
||||||
|
ECHO #### prefs.js cleaner for Windows ####
|
||||||
|
ECHO #### by claustromaniac ####
|
||||||
|
ECHO #### v2.2 ####
|
||||||
|
ECHO ########################################
|
||||||
|
ECHO:
|
||||||
|
CALL :message "This script should be run from your Firefox profile directory."
|
||||||
|
ECHO It will remove any entries from prefs.js that also exist in user.js.
|
||||||
|
CALL :message "This will allow inactive preferences to be reset to their default values."
|
||||||
|
ECHO This Firefox profile shouldn't be in use during the process.
|
||||||
|
CALL :message ""
|
||||||
|
TIMEOUT 1 /nobreak >nul
|
||||||
|
CHOICE /C SHE /N /M "Start [S] Help [H] Exit [E]"
|
||||||
|
CLS
|
||||||
|
IF ERRORLEVEL 3 (EXIT /B)
|
||||||
|
IF ERRORLEVEL 2 (GOTO :showhelp)
|
||||||
|
IF NOT EXIST "user.js" (CALL :abort "user.js not found in the current directory." 30)
|
||||||
|
IF NOT EXIST "prefs.js" (CALL :abort "prefs.js not found in the current directory." 30)
|
||||||
|
CALL :FFcheck
|
||||||
|
CALL :message "Backing up prefs.js..."
|
||||||
|
SET "_time=%time: =0%"
|
||||||
|
COPY /B /V /Y prefs.js "prefs-backup-%date:/=-%_%_time::=.%.js"
|
||||||
|
CALL :message "Cleaning prefs.js..."
|
||||||
|
CALL :cleanup
|
||||||
|
CALL :message "All done!"
|
||||||
|
TIMEOUT 5 >nul
|
||||||
|
ENDLOCAL
|
||||||
|
EXIT /B
|
||||||
|
|
||||||
|
REM ########## Abort Function ###########
|
||||||
|
:abort
|
||||||
|
CALL :message %1
|
||||||
|
TIMEOUT %~2 >nul
|
||||||
|
EXIT
|
||||||
|
REM ########## Message Function #########
|
||||||
|
:message
|
||||||
|
ECHO:
|
||||||
|
ECHO: %~1
|
||||||
|
ECHO:
|
||||||
|
GOTO :EOF
|
||||||
|
REM ####### Firefox Check Function ######
|
||||||
|
:FFcheck
|
||||||
|
TASKLIST /FI "IMAGENAME eq firefox.exe" 2>NUL | FIND /I /N "firefox.exe">NUL
|
||||||
|
IF NOT ERRORLEVEL 1 (
|
||||||
|
CLS
|
||||||
|
CALL :message "Firefox is still running."
|
||||||
|
ECHO If you're not currently using this profile you can continue, otherwise
|
||||||
|
CALL :message "close Firefox first!"
|
||||||
|
ECHO:
|
||||||
|
PAUSE
|
||||||
|
CLS
|
||||||
|
CALL :message "Resuming..."
|
||||||
|
TIMEOUT 5 /nobreak >nul
|
||||||
|
)
|
||||||
|
GOTO :EOF
|
||||||
|
REM ######### Cleanup Function ##########
|
||||||
|
:cleanup
|
||||||
|
FOR /F tokens^=2^ delims^=^'^" %%G IN ('FINDSTR /R /C:"^[^\"']*user_pref[ ]*\([ ]*[\"'][^\"']*[\"'][ ]*," user.js') DO (
|
||||||
|
IF NOT ""=="%%G" (SET "[%%G]=1")
|
||||||
|
)
|
||||||
|
(
|
||||||
|
FOR /F "tokens=1,* delims=:" %%G IN ('FINDSTR /N "^" prefs.js') DO (
|
||||||
|
IF ""=="%%H" (
|
||||||
|
ECHO:
|
||||||
|
) ELSE (
|
||||||
|
FOR /F tokens^=1^,2^ delims^=^"^' %%I IN ("%%H") DO (
|
||||||
|
IF NOT DEFINED [%%J] (ECHO:%%H)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)>tempcleanedprefs
|
||||||
|
MOVE /Y tempcleanedprefs prefs.js
|
||||||
|
GOTO :EOF
|
||||||
|
REM ############### Help ##################
|
||||||
|
:showhelp
|
||||||
|
MODE 80,34
|
||||||
|
CLS
|
||||||
|
CALL :message "This script creates a backup of your prefs.js file before doing anything."
|
||||||
|
ECHO It should be safe, but you can follow these steps if something goes wrong:
|
||||||
|
ECHO:
|
||||||
|
CALL :message " 1. Make sure Firefox is closed."
|
||||||
|
ECHO 2. Delete prefs.js in your profile folder.
|
||||||
|
CALL :message " 3. Delete Invalidprefs.js if you have one in the same folder."
|
||||||
|
ECHO 4. Rename or copy your latest backup to prefs.js.
|
||||||
|
CALL :message " 5. Run Firefox and see if you notice anything wrong with it."
|
||||||
|
ECHO 6. If you do notice something wrong, especially with your extensions,
|
||||||
|
CALL :message " and/or with the UI, go to about:support, and restart Firefox with"
|
||||||
|
ECHO add-ons disabled. Then, restart it again normally, and see if the
|
||||||
|
CALL :message " problems were solved."
|
||||||
|
ECHO:
|
||||||
|
CALL :message "If you are able to identify the cause of your issues, please bring it up"
|
||||||
|
ECHO on ghacks-user.js GitHub repository.
|
||||||
|
ECHO:
|
||||||
|
ECHO:
|
||||||
|
PAUSE
|
||||||
|
CLS
|
||||||
|
GOTO :begin
|
||||||
|
REM #####################################
|
99
prefsCleaner.sh
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
## prefs.js cleaner for Linux/Mac
|
||||||
|
## author: @claustromaniac
|
||||||
|
## version: 1.1
|
||||||
|
|
||||||
|
## special thanks to @overdodactyl and @earthlng for a few snippets that I stol..*cough* borrowed from the updater.sh
|
||||||
|
|
||||||
|
currdir=$(pwd)
|
||||||
|
|
||||||
|
## get the full path of this script (readlink for Linux, greadlink for Mac with coreutils installed)
|
||||||
|
sfp=$(readlink -f "${BASH_SOURCE[0]}" 2>/dev/null || greadlink -f "${BASH_SOURCE[0]}" 2>/dev/null)
|
||||||
|
|
||||||
|
## fallback for Macs without coreutils
|
||||||
|
if [ -z "$sfp" ]; then sfp=${BASH_SOURCE[0]}; fi
|
||||||
|
|
||||||
|
## change directory to the Firefox profile directory
|
||||||
|
cd "$(dirname "${sfp}")"
|
||||||
|
|
||||||
|
fQuit() {
|
||||||
|
## change directory back to the original working directory
|
||||||
|
cd "${currdir}"
|
||||||
|
echo -e "\n$2"
|
||||||
|
exit $1
|
||||||
|
}
|
||||||
|
|
||||||
|
fFF_check() {
|
||||||
|
# there are many ways to see if firefox is running or not, some more reliable than others
|
||||||
|
# this isn't elegant and might not be future-proof but should at least be compatible with any environment
|
||||||
|
while [ -e webappsstore.sqlite-shm ]; do
|
||||||
|
echo -e "\nThis Firefox profile seems to be in use. Close Firefox and try again.\n"
|
||||||
|
read -p "Press any key to continue."
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
fClean() {
|
||||||
|
# the magic happens here
|
||||||
|
prefs="@@"
|
||||||
|
prefexp="user_pref[ ]*\([ ]*[\"']([^\"']+)[\"'][ ]*,"
|
||||||
|
while read -r line; do
|
||||||
|
if [[ "$line" =~ $prefexp && $prefs != *"@@${BASH_REMATCH[1]}@@"* ]]; then
|
||||||
|
prefs="${prefs}${BASH_REMATCH[1]}@@"
|
||||||
|
fi
|
||||||
|
done <<< "`grep -E \"$prefexp\" user.js`"
|
||||||
|
|
||||||
|
while IFS='' read -r line || [[ -n "$line" ]]; do
|
||||||
|
if [[ "$line" =~ ^$prefexp ]]; then
|
||||||
|
if [[ $prefs != *"@@${BASH_REMATCH[1]}@@"* ]]; then
|
||||||
|
echo "$line"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "$line"
|
||||||
|
fi
|
||||||
|
done < "$1" > prefs.js
|
||||||
|
}
|
||||||
|
|
||||||
|
echo -e "\n\n"
|
||||||
|
echo " ╔══════════════════════════╗"
|
||||||
|
echo " ║ prefs.js cleaner ║"
|
||||||
|
echo " ║ by claustromaniac ║"
|
||||||
|
echo " ║ v1.1 ║"
|
||||||
|
echo " ╚══════════════════════════╝"
|
||||||
|
echo -e "\nThis script should be run from your Firefox profile directory.\n"
|
||||||
|
echo "It will remove any entries from prefs.js that also exist in user.js."
|
||||||
|
echo "This will allow inactive preferences to be reset to their default values."
|
||||||
|
echo -e "\nThis Firefox profile shouldn't be in use during the process.\n"
|
||||||
|
select option in Start Help Exit; do
|
||||||
|
case $option in
|
||||||
|
Start)
|
||||||
|
if [ ! -e user.js ]; then
|
||||||
|
fQuit 1 "user.js not found in the current directory."
|
||||||
|
elif [ ! -e prefs.js ]; then
|
||||||
|
fQuit 1 "prefs.js not found in the current directory."
|
||||||
|
fi
|
||||||
|
|
||||||
|
fFF_check
|
||||||
|
bakfile="prefs.js.backup.$(date +"%Y-%m-%d_%H%M")"
|
||||||
|
mv prefs.js "${bakfile}" || fQuit 1 "Operation aborted.\nReason: Could not create backup file $bakfile"
|
||||||
|
echo -e "\nprefs.js backed up: $bakfile"
|
||||||
|
echo "Cleaning prefs.js..."
|
||||||
|
fClean "$bakfile"
|
||||||
|
fQuit 0 "All done!"
|
||||||
|
;;
|
||||||
|
Help)
|
||||||
|
echo -e "\nThis script creates a backup of your prefs.js file before doing anything."
|
||||||
|
echo -e "It should be safe, but you can follow these steps if something goes wrong:\n"
|
||||||
|
echo "1. Make sure Firefox is closed."
|
||||||
|
echo "2. Delete prefs.js in your profile folder."
|
||||||
|
echo "3. Delete Invalidprefs.js if you have one in the same folder."
|
||||||
|
echo "4. Rename or copy your latest backup to prefs.js."
|
||||||
|
echo "5. Run Firefox and see if you notice anything wrong with it."
|
||||||
|
echo "6. If you do notice something wrong, especially with your extensions, and/or with the UI, go to about:support, and restart Firefox with add-ons disabled. Then, restart it again normally, and see if the problems were solved."
|
||||||
|
echo -e "If you are able to identify the cause of your issues, please bring it up on ghacks-user.js GitHub repository.\n"
|
||||||
|
;;
|
||||||
|
Exit)
|
||||||
|
fQuit 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
@ -0,0 +1,59 @@
|
|||||||
|
/***
|
||||||
|
This will reset the preferences that are under sections 4600 & 4700 in the ghacks user.js
|
||||||
|
up to and including release 60-beta. These are the prefs that are no longer necessary,
|
||||||
|
or they conflict with, privacy.resistFingerprinting if you have that enabled.
|
||||||
|
|
||||||
|
For instructions see:
|
||||||
|
https://github.com/ghacksuserjs/ghacks-user.js/wiki/3.1-Resetting-Inactive-Prefs-[Scripts]
|
||||||
|
***/
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
let ops = [
|
||||||
|
/* section 4600 */
|
||||||
|
'dom.maxHardwareConcurrency',
|
||||||
|
'dom.enable_resource_timing',
|
||||||
|
'dom.enable_performance',
|
||||||
|
'device.sensors.enabled',
|
||||||
|
'browser.zoom.siteSpecific',
|
||||||
|
'dom.gamepad.enabled',
|
||||||
|
'dom.netinfo.enabled',
|
||||||
|
'media.webspeech.synth.enabled',
|
||||||
|
'media.video_stats.enabled',
|
||||||
|
'dom.w3c_touch_events.enabled',
|
||||||
|
'media.ondevicechange.enabled',
|
||||||
|
'webgl.enable-debug-renderer-info',
|
||||||
|
/* section 4700 */
|
||||||
|
'general.useragent.override',
|
||||||
|
'general.buildID.override',
|
||||||
|
'general.appname.override',
|
||||||
|
'general.appversion.override',
|
||||||
|
'general.platform.override',
|
||||||
|
'general.oscpu.override',
|
||||||
|
/* reset parrot: check your open about:config after running the script */
|
||||||
|
'_user.js.parrot'
|
||||||
|
]
|
||||||
|
|
||||||
|
if("undefined" === typeof(Services)) {
|
||||||
|
alert("about:config needs to be the active tab!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let c = 0;
|
||||||
|
for (let i = 0, len = ops.length; i < len; i++) {
|
||||||
|
if (Services.prefs.prefHasUserValue(ops[i])) {
|
||||||
|
Services.prefs.clearUserPref(ops[i]);
|
||||||
|
if (!Services.prefs.prefHasUserValue(ops[i])) {
|
||||||
|
console.log("reset", ops[i]);
|
||||||
|
c++;
|
||||||
|
} else { console.log("failed to reset", ops[i]); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
focus();
|
||||||
|
|
||||||
|
let d = (c==1) ? " pref" : " prefs";
|
||||||
|
if (c > 0) {
|
||||||
|
alert("successfully reset " + c + d + "\n\nfor details check the Browser Console (Ctrl+Shift+J)");
|
||||||
|
} else { alert("nothing to reset"); }
|
||||||
|
|
||||||
|
})();
|
189
scratchpad-scripts/ghacks-clear-FF60inclusive-[deprecated].js
Normal file
@ -0,0 +1,189 @@
|
|||||||
|
/***
|
||||||
|
This will reset the preferences that have been deprecated by Mozilla
|
||||||
|
and used in the ghacks user.js up to and including release 60-beta
|
||||||
|
|
||||||
|
It is in reverse order, so feel free to remove sections that do not apply
|
||||||
|
|
||||||
|
For instructions see:
|
||||||
|
https://github.com/ghacksuserjs/ghacks-user.js/wiki/3.1-Resetting-Inactive-Prefs-[Scripts]
|
||||||
|
***/
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
let ops = [
|
||||||
|
/* deprecated */
|
||||||
|
|
||||||
|
/* ESR52.x users can remove sections 53-60 but it is not
|
||||||
|
crucial as your user.js will reinstate them */
|
||||||
|
/* 60 */
|
||||||
|
'browser.newtabpage.directory.source',
|
||||||
|
'browser.newtabpage.enhanced',
|
||||||
|
'browser.newtabpage.introShown',
|
||||||
|
'extensions.shield-recipe-client.enabled',
|
||||||
|
'extensions.shield-recipe-client.api_url',
|
||||||
|
'browser.newtabpage.activity-stream.enabled',
|
||||||
|
'dom.workers.enabled',
|
||||||
|
'view_source.tab',
|
||||||
|
/* 59 */
|
||||||
|
'intl.locale.matchOS',
|
||||||
|
'general.useragent.locale',
|
||||||
|
'datareporting.healthreport.about.reportUrl',
|
||||||
|
'dom.flyweb.enabled',
|
||||||
|
'security.mixed_content.use_hsts',
|
||||||
|
'security.mixed_content.send_hsts_priming',
|
||||||
|
'network.http.referer.userControlPolicy',
|
||||||
|
'security.xpconnect.plugin.unrestricted',
|
||||||
|
'media.getusermedia.screensharing.allowed_domains',
|
||||||
|
'camera.control.face_detection.enabled',
|
||||||
|
'dom.disable_window_status_change',
|
||||||
|
'dom.idle-observers-api.enabled',
|
||||||
|
/* 58 */
|
||||||
|
'browser.crashReports.unsubmittedCheck.autoSubmit',
|
||||||
|
/* 57 */
|
||||||
|
'social.whitelist',
|
||||||
|
'social.toast-notifications.enabled',
|
||||||
|
'social.shareDirectory',
|
||||||
|
'social.remote-install.enabled',
|
||||||
|
'social.directories',
|
||||||
|
'social.share.activationPanelEnabled',
|
||||||
|
'social.enabled',
|
||||||
|
'media.eme.chromium-api.enabled',
|
||||||
|
'devtools.webide.autoinstallFxdtAdapters',
|
||||||
|
'browser.casting.enabled',
|
||||||
|
'browser.bookmarks.showRecentlyBookmarked',
|
||||||
|
/* 56 */
|
||||||
|
'extensions.screenshots.system-disabled',
|
||||||
|
'extensions.formautofill.experimental',
|
||||||
|
/* 55 */
|
||||||
|
'geo.security.allowinsecure',
|
||||||
|
'browser.selfsupport.enabled',
|
||||||
|
'browser.selfsupport.url',
|
||||||
|
'browser.newtabpage.directory.ping',
|
||||||
|
'browser.formfill.saveHttpsForms',
|
||||||
|
'browser.formautofill.enabled',
|
||||||
|
'dom.enable_user_timing',
|
||||||
|
'dom.keyboardevent.code.enabled',
|
||||||
|
'browser.tabs.animate',
|
||||||
|
'browser.fullscreen.animate',
|
||||||
|
/* 54 */
|
||||||
|
'browser.safebrowsing.reportMalwareMistakeURL',
|
||||||
|
'browser.safebrowsing.reportPhishMistakeURL',
|
||||||
|
'media.eme.apiVisible',
|
||||||
|
'dom.archivereader.enabled',
|
||||||
|
/* 53 */
|
||||||
|
'security.tls.unrestricted_rc4_fallback',
|
||||||
|
'plugin.scan.Acrobat',
|
||||||
|
'plugin.scan.Quicktime',
|
||||||
|
'plugin.scan.WindowsMediaPlayer',
|
||||||
|
'media.getusermedia.screensharing.allow_on_old_platforms',
|
||||||
|
'dom.beforeAfterKeyboardEvent.enabled',
|
||||||
|
/* End of ESR52.x section */
|
||||||
|
|
||||||
|
/* 52 */
|
||||||
|
'network.http.sendSecureXSiteReferrer',
|
||||||
|
'media.gmp-eme-adobe.enabled',
|
||||||
|
'media.gmp-eme-adobe.visible',
|
||||||
|
'media.gmp-eme-adobe.autoupdate',
|
||||||
|
'dom.telephony.enabled',
|
||||||
|
'dom.battery.enabled',
|
||||||
|
/* 51 */
|
||||||
|
'media.block-play-until-visible',
|
||||||
|
'dom.vr.oculus050.enabled',
|
||||||
|
'network.http.spdy.enabled.v3-1',
|
||||||
|
/* 50 */
|
||||||
|
'browser.usedOnWindows10.introURL',
|
||||||
|
'plugins.update.notifyUser',
|
||||||
|
'browser.safebrowsing.enabled',
|
||||||
|
'security.ssl3.ecdhe_ecdsa_rc4_128_sha',
|
||||||
|
'security.ssl3.ecdhe_rsa_rc4_128_sha',
|
||||||
|
'security.ssl3.rsa_rc4_128_md5',
|
||||||
|
'security.ssl3.rsa_rc4_128_sha',
|
||||||
|
'plugins.update.url',
|
||||||
|
/* 49 */
|
||||||
|
'loop.enabled',
|
||||||
|
'loop.server',
|
||||||
|
'loop.feedback.formURL',
|
||||||
|
'loop.feedback.manualFormURL',
|
||||||
|
'loop.facebook.appId',
|
||||||
|
'loop.facebook.enabled',
|
||||||
|
'loop.facebook.fallbackUrl',
|
||||||
|
'loop.facebook.shareUrl',
|
||||||
|
'loop.logDomains',
|
||||||
|
'dom.disable_window_open_feature.scrollbars',
|
||||||
|
'dom.push.udp.wakeupEnabled',
|
||||||
|
/* 48 */
|
||||||
|
'browser.urlbar.unifiedcomplete',
|
||||||
|
/* 47 */
|
||||||
|
'toolkit.telemetry.unifiedIsOptIn',
|
||||||
|
'datareporting.healthreport.about.reportUrlUnified',
|
||||||
|
'browser.history.allowPopState',
|
||||||
|
'browser.history.allowPushState',
|
||||||
|
'browser.history.allowReplaceState',
|
||||||
|
/* 46 */
|
||||||
|
'datareporting.healthreport.service.enabled',
|
||||||
|
'datareporting.healthreport.documentServerURI',
|
||||||
|
'datareporting.policy.dataSubmissionEnabled.v2',
|
||||||
|
'browser.safebrowsing.appRepURL',
|
||||||
|
'browser.polaris.enabled',
|
||||||
|
'browser.pocket.enabled',
|
||||||
|
'browser.pocket.api',
|
||||||
|
'browser.pocket.site',
|
||||||
|
'browser.pocket.oAuthConsumerKey',
|
||||||
|
/* 45 */
|
||||||
|
'browser.sessionstore.privacy_level_deferred',
|
||||||
|
/* 44 */
|
||||||
|
'browser.safebrowsing.provider.google.appRepURL',
|
||||||
|
'security.tls.insecure_fallback_hosts.use_static_list',
|
||||||
|
'dom.workers.sharedWorkers.enabled',
|
||||||
|
'dom.disable_image_src_set',
|
||||||
|
/* 43 */
|
||||||
|
'browser.safebrowsing.gethashURL',
|
||||||
|
'browser.safebrowsing.updateURL',
|
||||||
|
'browser.safebrowsing.malware.reportURL',
|
||||||
|
'browser.trackingprotection.gethashURL',
|
||||||
|
'browser.trackingprotection.updateURL',
|
||||||
|
'pfs.datasource.url',
|
||||||
|
'browser.search.showOneOffButtons',
|
||||||
|
/* 42 and earlier */
|
||||||
|
'privacy.clearOnShutdown.passwords', // 42
|
||||||
|
'full-screen-api.approval-required', // 42
|
||||||
|
'browser.safebrowsing.reportErrorURL', // 41
|
||||||
|
'browser.safebrowsing.reportGenericURL', // 41
|
||||||
|
'browser.safebrowsing.reportMalwareErrorURL', // 41
|
||||||
|
'browser.safebrowsing.reportMalwareURL', // 41
|
||||||
|
'browser.safebrowsing.reportURL', // 41
|
||||||
|
'plugins.enumerable_names', // 41
|
||||||
|
'network.http.spdy.enabled.http2draft', // 41
|
||||||
|
'camera.control.autofocus_moving_callback.enabled', // 37
|
||||||
|
'privacy.donottrackheader.value', // 36
|
||||||
|
'network.websocket.enabled', // 35
|
||||||
|
'dom.network.enabled', // 31
|
||||||
|
'pageThumbs.enabled', // 25
|
||||||
|
|
||||||
|
/* reset parrot: check your open about:config after running the script */
|
||||||
|
'_user.js.parrot'
|
||||||
|
]
|
||||||
|
|
||||||
|
if("undefined" === typeof(Services)) {
|
||||||
|
alert("about:config needs to be the active tab!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let c = 0;
|
||||||
|
for (let i = 0, len = ops.length; i < len; i++) {
|
||||||
|
if (Services.prefs.prefHasUserValue(ops[i])) {
|
||||||
|
Services.prefs.clearUserPref(ops[i]);
|
||||||
|
if (!Services.prefs.prefHasUserValue(ops[i])) {
|
||||||
|
console.log("reset", ops[i]);
|
||||||
|
c++;
|
||||||
|
} else { console.log("failed to reset", ops[i]); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
focus();
|
||||||
|
|
||||||
|
let d = (c==1) ? " pref" : " prefs";
|
||||||
|
if (c > 0) {
|
||||||
|
alert("successfully reset " + c + d + "\n\nfor details check the Browser Console (Ctrl+Shift+J)");
|
||||||
|
} else { alert("nothing to reset"); }
|
||||||
|
|
||||||
|
})();
|
223
scratchpad-scripts/ghacks-clear-[removed].js
Normal file
@ -0,0 +1,223 @@
|
|||||||
|
/***
|
||||||
|
This will reset the preferences that have been removed completely from the ghacks user.js.
|
||||||
|
|
||||||
|
Last updated: 05-May-2019
|
||||||
|
|
||||||
|
For instructions see:
|
||||||
|
https://github.com/ghacksuserjs/ghacks-user.js/wiki/3.1-Resetting-Inactive-Prefs-[Scripts]
|
||||||
|
***/
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
let ops = [
|
||||||
|
/* removed in ghacks user.js v52-57 */
|
||||||
|
/* 52-alpha */
|
||||||
|
'browser.search.reset.enabled',
|
||||||
|
'browser.search.reset.whitelist',
|
||||||
|
/* 54-alpha */
|
||||||
|
'browser.migrate.automigrate.enabled',
|
||||||
|
'services.sync.enabled',
|
||||||
|
'webextensions.storage.sync.enabled',
|
||||||
|
'webextensions.storage.sync.serverURL',
|
||||||
|
/* 55-alpha */
|
||||||
|
'dom.keyboardevent.dispatch_during_composition', // default is false anyway
|
||||||
|
'dom.vr.oculus.enabled', // covered by dom.vr.enabled
|
||||||
|
'dom.vr.openvr.enabled', // ditto
|
||||||
|
'dom.vr.osvr.enabled', // ditto
|
||||||
|
'extensions.pocket.api', // covered by extensions.pocket.enabled
|
||||||
|
'extensions.pocket.oAuthConsumerKey', // ditto
|
||||||
|
'extensions.pocket.site', // ditto
|
||||||
|
/* 56-alpha: none */
|
||||||
|
/* 57-alpha */
|
||||||
|
'geo.wifi.xhr.timeout', // covered by geo.enabled
|
||||||
|
'browser.search.geoip.timeout', // ditto
|
||||||
|
'media.webspeech.recognition.enable', // default is false anyway
|
||||||
|
'gfx.layerscope.enabled', // default is false anyway
|
||||||
|
/* 58-alpha */
|
||||||
|
// excluding these e10 settings
|
||||||
|
// 'browser.tabs.remote.autostart',
|
||||||
|
// 'browser.tabs.remote.autostart.2',
|
||||||
|
// 'browser.tabs.remote.force-enable',
|
||||||
|
// 'browser.tabs.remote.separateFileUriProcess',
|
||||||
|
// 'extensions.e10sBlocksEnabling',
|
||||||
|
// 'extensions.webextensions.remote',
|
||||||
|
// 'dom.ipc.processCount',
|
||||||
|
// 'dom.ipc.shims.enabledWarnings',
|
||||||
|
// 'dom.ipc.processCount.extension',
|
||||||
|
// 'dom.ipc.processCount.file',
|
||||||
|
// 'security.sandbox.content.level',
|
||||||
|
// 'dom.ipc.plugins.sandbox-level.default',
|
||||||
|
// 'dom.ipc.plugins.sandbox-level.flash',
|
||||||
|
// 'security.sandbox.logging.enabled',
|
||||||
|
'dom.presentation.controller.enabled',
|
||||||
|
'dom.presentation.discoverable',
|
||||||
|
'dom.presentation.discovery.enabled',
|
||||||
|
'dom.presentation.enabled',
|
||||||
|
'dom.presentation.receiver.enabled',
|
||||||
|
'dom.presentation.session_transport.data_channel.enable',
|
||||||
|
/* 59-alpha */
|
||||||
|
'browser.stopReloadAnimation.enabled',
|
||||||
|
'browser.tabs.insertRelatedAfterCurrent',
|
||||||
|
'browser.tabs.loadDivertedInBackground',
|
||||||
|
'browser.tabs.loadInBackground',
|
||||||
|
'browser.tabs.selectOwnerOnClose',
|
||||||
|
'browser.urlbar.clickSelectsAll',
|
||||||
|
'browser.urlbar.doubleClickSelectsAll',
|
||||||
|
'media.flac.enabled',
|
||||||
|
'media.mediasource.enabled',
|
||||||
|
'media.mediasource.mp4.enabled',
|
||||||
|
'media.mediasource.webm.audio.enabled',
|
||||||
|
'media.mediasource.webm.enabled',
|
||||||
|
'media.mp4.enabled',
|
||||||
|
'media.ogg.enabled',
|
||||||
|
'media.ogg.flac.enabled',
|
||||||
|
'media.opus.enabled',
|
||||||
|
'media.raw.enabled',
|
||||||
|
'media.wave.enabled',
|
||||||
|
'media.webm.enabled',
|
||||||
|
'media.wmf.amd.vp9.enabled',
|
||||||
|
'media.wmf.enabled',
|
||||||
|
'media.wmf.vp9.enabled',
|
||||||
|
'ui.submenuDelay',
|
||||||
|
/* 60-beta - these were all at default anyway */
|
||||||
|
'device.storage.enabled',
|
||||||
|
'general.useragent.compatMode.firefox',
|
||||||
|
'network.dns.blockDotOnion',
|
||||||
|
'network.stricttransportsecurity.preloadlist',
|
||||||
|
'security.block_script_with_wrong_mime',
|
||||||
|
'security.fileuri.strict_origin_policy',
|
||||||
|
'security.sri.enable',
|
||||||
|
/* 61-beta */
|
||||||
|
'browser.laterrun.enabled',
|
||||||
|
'browser.offline-apps.notify',
|
||||||
|
'browser.rights.3.shown',
|
||||||
|
'browser.slowStartup.maxSamples',
|
||||||
|
'browser.slowStartup.notificationDisabled',
|
||||||
|
'browser.slowStartup.samples',
|
||||||
|
'browser.storageManager.enabled',
|
||||||
|
'dom.allow_scripts_to_close_windows',
|
||||||
|
'dom.disable_window_flip',
|
||||||
|
'network.http.fast-fallback-to-IPv4',
|
||||||
|
'offline-apps.quota.warn',
|
||||||
|
'services.blocklist.signing.enforced',
|
||||||
|
/* 62-beta */
|
||||||
|
'browser.urlbar.autoFill.typed',
|
||||||
|
'security.tls.version.fallback-limit',
|
||||||
|
/* 63-beta */
|
||||||
|
'extensions.webextensions.keepStorageOnUninstall',
|
||||||
|
'extensions.webextensions.keepUuidOnUninstall',
|
||||||
|
'privacy.trackingprotection.ui.enabled',
|
||||||
|
/* 64-beta */
|
||||||
|
'browser.eme.ui.enabled',
|
||||||
|
'browser.sessionstore.max_windows_undo',
|
||||||
|
'network.auth.subresource-img-cross-origin-http-auth-allow',
|
||||||
|
'media.peerconnection.ice.tcp',
|
||||||
|
'media.peerconnection.identity.enabled',
|
||||||
|
'media.peerconnection.identity.timeout',
|
||||||
|
'media.peerconnection.turn.disable',
|
||||||
|
'media.peerconnection.use_document_iceservers',
|
||||||
|
'media.peerconnection.video.enabled',
|
||||||
|
'media.navigator.video.enabled',
|
||||||
|
/* 65-beta */
|
||||||
|
'browser.contentblocking.enabled',
|
||||||
|
'browser.urlbar.maxHistoricalSearchSuggestions',
|
||||||
|
/* 67-beta */
|
||||||
|
'app.update.service.enabled',
|
||||||
|
'app.update.silent',
|
||||||
|
'app.update.staging.enabled',
|
||||||
|
'browser.cache.disk.capacity',
|
||||||
|
'browser.cache.disk.smart_size.enabled',
|
||||||
|
'browser.cache.disk.smart_size.first_run',
|
||||||
|
'browser.cache.offline.insecure.enable',
|
||||||
|
'browser.safebrowsing.downloads.remote.url',
|
||||||
|
'browser.safebrowsing.provider.google.reportMalwareMistakeURL',
|
||||||
|
'browser.safebrowsing.provider.google.reportPhishMistakeURL',
|
||||||
|
'browser.safebrowsing.provider.google.reportURL',
|
||||||
|
'browser.safebrowsing.provider.google4.dataSharing.enabled',
|
||||||
|
'browser.safebrowsing.provider.google4.dataSharingURL',
|
||||||
|
'browser.safebrowsing.provider.google4.reportMalwareMistakeURL',
|
||||||
|
'browser.safebrowsing.provider.google4.reportPhishMistakeURL',
|
||||||
|
'browser.safebrowsing.provider.google4.reportURL',
|
||||||
|
'browser.safebrowsing.reportPhishURL',
|
||||||
|
'browser.sessionhistory.max_total_viewers',
|
||||||
|
'browser.urlbar.filter.javascript',
|
||||||
|
'canvas.capturestream.enabled',
|
||||||
|
'dom.imagecapture.enabled',
|
||||||
|
'dom.popup_maximum',
|
||||||
|
'gfx.offscreencanvas.enabled',
|
||||||
|
'javascript.options.shared_memory',
|
||||||
|
'media.gmp-gmpopenh264.autoupdate',
|
||||||
|
'media.gmp-gmpopenh264.enabled',
|
||||||
|
'media.gmp-manager.updateEnabled',
|
||||||
|
'media.gmp-manager.url',
|
||||||
|
'media.gmp-manager.url.override',
|
||||||
|
'media.gmp.trial-create.enabled',
|
||||||
|
'media.gmp-widevinecdm.autoupdate',
|
||||||
|
'network.cookie.leave-secure-alone',
|
||||||
|
'network.cookie.same-site.enabled',
|
||||||
|
'network.dnsCacheEntries',
|
||||||
|
'network.dnsCacheExpiration',
|
||||||
|
'network.proxy.autoconfig_url.include_path',
|
||||||
|
'pdfjs.enableWebGL',
|
||||||
|
'plugin.default.state',
|
||||||
|
'plugin.defaultXpi.state',
|
||||||
|
'plugin.scan.plid.all',
|
||||||
|
'security.data_uri.block_toplevel_data_uri_navigations',
|
||||||
|
'security.insecure_field_warning.contextual.enabled',
|
||||||
|
'security.insecure_password.ui.enabled',
|
||||||
|
'signon.autofillForms.http',
|
||||||
|
'signon.storeWhenAutocompleteOff',
|
||||||
|
'xpinstall.whitelist.required',
|
||||||
|
/* 67-beta: Blocklist, SB & TP cleanup: these were all inactive */
|
||||||
|
'browser.safebrowsing.downloads.enabled',
|
||||||
|
'browser.safebrowsing.downloads.remote.block_dangerous',
|
||||||
|
'browser.safebrowsing.downloads.remote.block_dangerous_host',
|
||||||
|
'browser.safebrowsing.downloads.remote.block_potentially_unwanted',
|
||||||
|
'browser.safebrowsing.downloads.remote.block_uncommon',
|
||||||
|
'browser.safebrowsing.blockedURIs.enabled',
|
||||||
|
'browser.safebrowsing.malware.enabled',
|
||||||
|
'browser.safebrowsing.phishing.enabled',
|
||||||
|
'browser.safebrowsing.provider.google.gethashURL',
|
||||||
|
'browser.safebrowsing.provider.google.updateURL',
|
||||||
|
'browser.safebrowsing.provider.google4.gethashURL',
|
||||||
|
'browser.safebrowsing.provider.google4.updateURL',
|
||||||
|
'browser.safebrowsing.provider.mozilla.gethashURL',
|
||||||
|
'browser.safebrowsing.provider.mozilla.updateURL',
|
||||||
|
'browser.urlbar.userMadeSearchSuggestionsChoice',
|
||||||
|
'privacy.trackingprotection.annotate_channels',
|
||||||
|
'privacy.trackingprotection.enabled',
|
||||||
|
'privacy.trackingprotection.lower_network_priority',
|
||||||
|
'privacy.trackingprotection.pbmode.enabled',
|
||||||
|
'services.blocklist.addons.collection',
|
||||||
|
'services.blocklist.gfx.collection',
|
||||||
|
'services.blocklist.onecrl.collection',
|
||||||
|
'services.blocklist.plugins.collection',
|
||||||
|
'services.blocklist.update_enabled',
|
||||||
|
'urlclassifier.trackingTable',
|
||||||
|
/* reset parrot: check your open about:config after running the script */
|
||||||
|
'_user.js.parrot'
|
||||||
|
]
|
||||||
|
|
||||||
|
if("undefined" === typeof(Services)) {
|
||||||
|
alert("about:config needs to be the active tab!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let c = 0;
|
||||||
|
for (let i = 0, len = ops.length; i < len; i++) {
|
||||||
|
if (Services.prefs.prefHasUserValue(ops[i])) {
|
||||||
|
Services.prefs.clearUserPref(ops[i]);
|
||||||
|
if (!Services.prefs.prefHasUserValue(ops[i])) {
|
||||||
|
console.log("reset", ops[i]);
|
||||||
|
c++;
|
||||||
|
} else { console.log("failed to reset", ops[i]); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
focus();
|
||||||
|
|
||||||
|
let d = (c==1) ? " pref" : " prefs";
|
||||||
|
if (c > 0) {
|
||||||
|
alert("successfully reset " + c + d + "\n\nfor details check the Browser Console (Ctrl+Shift+J)");
|
||||||
|
} else { alert("nothing to reset"); }
|
||||||
|
|
||||||
|
})();
|
215
scratchpad-scripts/troubleshooter.js
Normal file
@ -0,0 +1,215 @@
|
|||||||
|
|
||||||
|
/*** ghacks-user.js troubleshooter.js v1.5.2 ***/
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
|
||||||
|
if("undefined" === typeof(Services)) {
|
||||||
|
alert("about:config needs to be the active tab!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getMyList(arr) {
|
||||||
|
let aRet = [];
|
||||||
|
let dummy = 0;
|
||||||
|
for (let i = 0, len = arr.length; i < len; i++) {
|
||||||
|
if (Services.prefs.prefHasUserValue(arr[i])) {
|
||||||
|
dummy = Services.prefs.getPrefType(arr[i]);
|
||||||
|
switch (dummy) {
|
||||||
|
case 32: // string (see https://dxr.mozilla.org/mozilla-central/source/modules/libpref/nsIPrefBranch.idl#31)
|
||||||
|
dummy = Services.prefs.getCharPref(arr[i]);
|
||||||
|
aRet.push({'name':arr[i],'value': dummy,'type':32});
|
||||||
|
break;
|
||||||
|
case 64: // int
|
||||||
|
dummy = Services.prefs.getIntPref(arr[i]);
|
||||||
|
aRet.push({'name':arr[i],'value': dummy,'type':64});
|
||||||
|
break;
|
||||||
|
case 128: // boolean
|
||||||
|
dummy = Services.prefs.getBoolPref(arr[i]);
|
||||||
|
aRet.push({'name':arr[i],'value': dummy,'type':128});
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
console.log("error detecting pref-type for '"+arr[i]+"' !");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return aRet;
|
||||||
|
}
|
||||||
|
|
||||||
|
function reapply(arr) {
|
||||||
|
for (let i = 0, len = arr.length; i < len; i++) {
|
||||||
|
switch (arr[i].type) {
|
||||||
|
case 32: // string
|
||||||
|
Services.prefs.setCharPref(arr[i].name, arr[i].value);
|
||||||
|
break;
|
||||||
|
case 64: // int
|
||||||
|
Services.prefs.setIntPref(arr[i].name, arr[i].value);
|
||||||
|
break;
|
||||||
|
case 128: // boolean
|
||||||
|
Services.prefs.setBoolPref(arr[i].name, arr[i].value);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
console.log("error re-appyling value for '"+arr[i].name+"' !"); // should never happen
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function myreset(arr) {
|
||||||
|
for (let i = 0, len = arr.length; i < len; i++) {
|
||||||
|
Services.prefs.clearUserPref(arr[i].name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let ops = [
|
||||||
|
|
||||||
|
/* known culprits */
|
||||||
|
'network.cookie.cookieBehavior',
|
||||||
|
'network.http.referer.XOriginPolicy',
|
||||||
|
'privacy.firstparty.isolate',
|
||||||
|
'privacy.resistFingerprinting',
|
||||||
|
'security.mixed_content.block_display_content',
|
||||||
|
'svg.disabled',
|
||||||
|
|
||||||
|
/* Storage + Cache */
|
||||||
|
'browser.cache.offline.enable',
|
||||||
|
'dom.indexedDB.enabled',
|
||||||
|
'dom.storage.enabled',
|
||||||
|
'browser.storageManager.enabled',
|
||||||
|
'dom.storageManager.enabled',
|
||||||
|
|
||||||
|
/* Workers, Web + Push Notifications */
|
||||||
|
'dom.caches.enabled',
|
||||||
|
'dom.push.connection.enabled',
|
||||||
|
'dom.push.enabled',
|
||||||
|
'dom.push.serverURL',
|
||||||
|
'dom.serviceWorkers.enabled',
|
||||||
|
'dom.webnotifications.enabled',
|
||||||
|
'dom.webnotifications.serviceworker.enabled',
|
||||||
|
|
||||||
|
/* Fonts */
|
||||||
|
'browser.display.use_document_fonts',
|
||||||
|
'font.blacklist.underline_offset',
|
||||||
|
'gfx.downloadable_fonts.woff2.enabled',
|
||||||
|
'gfx.font_rendering.graphite.enabled',
|
||||||
|
'gfx.font_rendering.opentype_svg.enabled',
|
||||||
|
'layout.css.font-loading-api.enabled',
|
||||||
|
|
||||||
|
/* Misc */
|
||||||
|
'browser.link.open_newwindow.restriction',
|
||||||
|
'canvas.capturestream.enabled',
|
||||||
|
'dom.event.clipboardevents.enabled',
|
||||||
|
'dom.event.contextmenu.enabled',
|
||||||
|
'dom.IntersectionObserver.enabled',
|
||||||
|
'dom.popup_allowed_events',
|
||||||
|
'full-screen-api.enabled',
|
||||||
|
'geo.wifi.uri',
|
||||||
|
'intl.accept_languages',
|
||||||
|
'javascript.options.asmjs',
|
||||||
|
'javascript.options.wasm',
|
||||||
|
'permissions.default.shortcuts',
|
||||||
|
'security.csp.experimentalEnabled',
|
||||||
|
|
||||||
|
/* Hardware */
|
||||||
|
'dom.vr.enabled',
|
||||||
|
'media.ondevicechange.enabled',
|
||||||
|
|
||||||
|
/* Audio + Video */
|
||||||
|
'dom.webaudio.enabled',
|
||||||
|
'media.autoplay.enabled',
|
||||||
|
'media.autoplay.default', // FF63+
|
||||||
|
|
||||||
|
/* Forms */
|
||||||
|
'browser.formfill.enable',
|
||||||
|
'signon.autofillForms',
|
||||||
|
'signon.formlessCapture.enabled',
|
||||||
|
|
||||||
|
/* HTTPS */
|
||||||
|
'security.cert_pinning.enforcement_level',
|
||||||
|
'security.family_safety.mode',
|
||||||
|
'security.OCSP.require',
|
||||||
|
'security.pki.sha1_enforcement_level',
|
||||||
|
'security.ssl.require_safe_negotiation',
|
||||||
|
'security.ssl.treat_unsafe_negotiation_as_broken',
|
||||||
|
'security.ssl3.dhe_rsa_aes_128_sha',
|
||||||
|
'security.ssl3.dhe_rsa_aes_256_sha',
|
||||||
|
'security.ssl3.ecdhe_ecdsa_aes_128_sha',
|
||||||
|
'security.ssl3.ecdhe_rsa_aes_128_sha',
|
||||||
|
'security.ssl3.rsa_aes_128_sha',
|
||||||
|
'security.ssl3.rsa_aes_256_sha',
|
||||||
|
'security.ssl3.rsa_des_ede3_sha',
|
||||||
|
'security.tls.enable_0rtt_data',
|
||||||
|
'security.tls.version.max',
|
||||||
|
'security.tls.version.min',
|
||||||
|
|
||||||
|
/* Plugins + Flash */
|
||||||
|
'plugin.default.state',
|
||||||
|
'plugin.defaultXpi.state',
|
||||||
|
'plugin.sessionPermissionNow.intervalInMinutes',
|
||||||
|
'plugin.state.flash',
|
||||||
|
|
||||||
|
/* unlikely to cause problems */
|
||||||
|
'browser.tabs.remote.allowLinkedWebInFileUriProcess',
|
||||||
|
'dom.popup_maximum',
|
||||||
|
'layout.css.visited_links_enabled',
|
||||||
|
'mathml.disabled',
|
||||||
|
'network.auth.subresource-http-auth-allow',
|
||||||
|
'network.http.redirection-limit',
|
||||||
|
'network.protocol-handler.external.ms-windows-store',
|
||||||
|
'privacy.trackingprotection.enabled',
|
||||||
|
'security.data_uri.block_toplevel_data_uri_navigations',
|
||||||
|
|
||||||
|
'last.one.without.comma'
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
// reset prefs that set the same value as FFs default value
|
||||||
|
let aTEMP = getMyList(ops);
|
||||||
|
myreset(aTEMP);
|
||||||
|
reapply(aTEMP);
|
||||||
|
|
||||||
|
const aBACKUP = getMyList(ops);
|
||||||
|
//console.log(aBACKUP.length, "user-set prefs from our list detected and their values stored.");
|
||||||
|
|
||||||
|
let myArr = aBACKUP;
|
||||||
|
let found = false;
|
||||||
|
let aDbg = [];
|
||||||
|
focus();
|
||||||
|
myreset(aBACKUP); // reset all detected prefs
|
||||||
|
if (confirm("all detected prefs reset.\n\n!! KEEP THIS PROMPT OPEN AND TEST THE SITE IN ANOTHER TAB !!\n\nIF the problem still exists, this script can't help you - click cancel to re-apply your values and exit.\n\nClick OK if your problem is fixed.")) {
|
||||||
|
aDbg = myArr;
|
||||||
|
reapply(aBACKUP);
|
||||||
|
myreset(myArr.slice(0, parseInt(myArr.length/2)));
|
||||||
|
while (myArr.length >= 2) {
|
||||||
|
alert("NOW TEST AGAIN !");
|
||||||
|
if (confirm("if the problem still exists click OK, otherwise click cancel.")) {
|
||||||
|
myArr = myArr.slice(parseInt(myArr.length/2));
|
||||||
|
if (myArr.length == 1) {
|
||||||
|
alert("The problem is caused by more than 1 pref !\n\nNarrowed it down to "+ aDbg.length.toString() +" prefs, check the console ...");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
myArr = myArr.slice(0, parseInt(myArr.length/2));
|
||||||
|
aDbg = myArr;
|
||||||
|
if (myArr.length == 1) { found = true; break; }
|
||||||
|
}
|
||||||
|
reapply(aBACKUP);
|
||||||
|
myreset(myArr.slice(0, parseInt(myArr.length/2))); // reset half of the remaining prefs
|
||||||
|
}
|
||||||
|
reapply(aBACKUP);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
reapply(aBACKUP);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (found) {
|
||||||
|
alert("narrowed it down to:\n\n"+myArr[0].name+"\n");
|
||||||
|
myreset(myArr); // reset the culprit
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
console.log("the problem is caused by a combination of the following prefs:");
|
||||||
|
for (let i = 0, len = aDbg.length; i < len; i++) {
|
||||||
|
console.log(aDbg[i].name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
})();
|
280
updater.bat
Normal file
@ -0,0 +1,280 @@
|
|||||||
|
@ECHO OFF & SETLOCAL EnableDelayedExpansion
|
||||||
|
TITLE ghacks user.js updater
|
||||||
|
|
||||||
|
REM ## ghacks-user.js updater for Windows
|
||||||
|
REM ## author: @claustromaniac
|
||||||
|
REM ## version: 4.6
|
||||||
|
REM ## instructions: https://github.com/ghacksuserjs/ghacks-user.js/wiki/3.3-Updater-Scripts
|
||||||
|
|
||||||
|
SET v=4.7
|
||||||
|
|
||||||
|
VERIFY ON
|
||||||
|
CD /D "%~dp0"
|
||||||
|
SET _myname=%~n0
|
||||||
|
SET _myparams=%*
|
||||||
|
|
||||||
|
:parse
|
||||||
|
IF "%~1"=="" (GOTO endparse)
|
||||||
|
IF /I "%~1"=="-unattended" (SET _ua=1)
|
||||||
|
IF /I "%~1"=="-log" (SET _log=1)
|
||||||
|
IF /I "%~1"=="-logp" (SET _log=1 & SET _logp=1)
|
||||||
|
IF /I "%~1"=="-multioverrides" (SET _multi=1)
|
||||||
|
IF /I "%~1"=="-merge" (SET _merge=1)
|
||||||
|
IF /I "%~1"=="-updatebatch" (SET _updateb=1)
|
||||||
|
IF /I "%~1"=="-singlebackup" (SET _singlebackup=1)
|
||||||
|
SHIFT
|
||||||
|
GOTO parse
|
||||||
|
:endparse
|
||||||
|
|
||||||
|
IF DEFINED _updateb (
|
||||||
|
REM The normal flow here goes from phase 1 to phase 2 and then phase 3.
|
||||||
|
IF NOT "!_myname:~0,9!"=="[updated]" (
|
||||||
|
IF EXIST "[updated]!_myname!.bat" (
|
||||||
|
REM ## Phase 3 ##: The new script, with the original name, will:
|
||||||
|
REM * Delete the [updated]*.bat and *.bat.old scripts
|
||||||
|
REM * Begin the normal routine
|
||||||
|
FC "[updated]!_myname!.bat" "!_myname!.bat.old" >nul
|
||||||
|
IF NOT "!errorlevel!"=="0" (
|
||||||
|
CALL :message "Script updated to version !v!"
|
||||||
|
TIMEOUT 3 >nul
|
||||||
|
)
|
||||||
|
REN "[updated]!_myname!.bat" "[updated]!_myname!.bat.old"
|
||||||
|
DEL /F "!_myname!.bat.old" "[updated]!_myname!.bat.old"
|
||||||
|
GOTO begin
|
||||||
|
)
|
||||||
|
REM ## Phase 1 ##
|
||||||
|
REM * Download new batch and name it [updated]*.bat
|
||||||
|
REM * Start that script in a new CMD window
|
||||||
|
REM * Exit
|
||||||
|
CALL :message "Updating script..."
|
||||||
|
REM Uncomment the next line and comment out the PowerShell call for testing.
|
||||||
|
REM COPY /B /Y "!_myname!.bat" "[updated]!_myname!.bat" >nul
|
||||||
|
(
|
||||||
|
PowerShell -Command "(New-Object Net.WebClient).DownloadFile('https://raw.githubusercontent.com/ghacksuserjs/ghacks-user.js/master/updater.bat', '[updated]!_myname!.bat')"
|
||||||
|
) >nul 2>&1
|
||||||
|
IF EXIST "[updated]!_myname!.bat" (
|
||||||
|
START /min CMD /C "[updated]!_myname!.bat" !_myparams!
|
||||||
|
) ELSE (
|
||||||
|
CALL :message "Failed. Make sure PowerShell is allowed internet access."
|
||||||
|
TIMEOUT 120 >nul
|
||||||
|
)
|
||||||
|
) ELSE (
|
||||||
|
IF "!_myname!"=="[updated]" (
|
||||||
|
CALL :message "The [updated] label is reserved. Rename this script and try again."
|
||||||
|
TIMEOUT 300 >nul
|
||||||
|
) ELSE (
|
||||||
|
REM ## Phase 2 ##: The [updated]*.bat script will:
|
||||||
|
REM * Rename the old script and make a copy of itself with the original name.
|
||||||
|
REM * Run that copy in a new CMD instance
|
||||||
|
REM * Exit
|
||||||
|
IF EXIST "!_myname:~9!.bat" ( REN "!_myname:~9!.bat" "!_myname:~9!.bat.old" )
|
||||||
|
COPY /B /Y "!_myname!.bat" "!_myname:~9!.bat"
|
||||||
|
START CMD /C "!_myname:~9!.bat" !_myparams!
|
||||||
|
)
|
||||||
|
)
|
||||||
|
EXIT /B
|
||||||
|
)
|
||||||
|
|
||||||
|
:begin
|
||||||
|
CLS
|
||||||
|
ECHO:
|
||||||
|
ECHO:
|
||||||
|
ECHO: ########################################
|
||||||
|
ECHO: #### user.js Updater for Windows ####
|
||||||
|
ECHO: #### by claustromaniac ####
|
||||||
|
ECHO: #### v!v! ####
|
||||||
|
ECHO: ########################################
|
||||||
|
ECHO:
|
||||||
|
SET /A "_line=0"
|
||||||
|
IF NOT EXIST user.js (
|
||||||
|
CALL :message "user.js not detected in the current directory."
|
||||||
|
) ELSE (
|
||||||
|
FOR /F "skip=1 tokens=1,* delims=:" %%G IN (user.js) DO (
|
||||||
|
SET /A "_line+=1"
|
||||||
|
IF !_line! GEQ 4 (GOTO exitloop)
|
||||||
|
IF !_line! EQU 1 (SET _name=%%H)
|
||||||
|
IF !_line! EQU 2 (SET _date=%%H)
|
||||||
|
IF !_line! EQU 3 (SET _version=%%G)
|
||||||
|
)
|
||||||
|
:exitloop
|
||||||
|
IF NOT "!_name!"=="" (
|
||||||
|
IF /I NOT "!_name!"=="!_name:ghacks=!" (
|
||||||
|
CALL :message "!_name! !_version:~2!,!_date!"
|
||||||
|
) ELSE (CALL :message "Current user.js version not recognised.")
|
||||||
|
) ELSE (CALL :message "Current user.js version not recognised.")
|
||||||
|
)
|
||||||
|
ECHO:
|
||||||
|
IF NOT DEFINED _ua (
|
||||||
|
CALL :message "This batch should be run from your Firefox profile directory."
|
||||||
|
ECHO: It will download the latest version of ghacks user.js from github and then
|
||||||
|
CALL :message "append any of your own changes from user-overrides.js to it."
|
||||||
|
CALL :message "Visit the wiki for more detailed information."
|
||||||
|
ECHO:
|
||||||
|
TIMEOUT 1 /nobreak >nul
|
||||||
|
CHOICE /C SHE /N /M "Start [S] Help [H] Exit [E]"
|
||||||
|
CLS
|
||||||
|
IF ERRORLEVEL 3 (EXIT /B)
|
||||||
|
IF ERRORLEVEL 2 (GOTO :showhelp)
|
||||||
|
)
|
||||||
|
IF DEFINED _log (
|
||||||
|
CALL :log >>user.js-update-log.txt 2>&1
|
||||||
|
IF DEFINED _logp (START user.js-update-log.txt)
|
||||||
|
EXIT /B
|
||||||
|
:log
|
||||||
|
SET _log=2
|
||||||
|
ECHO:##################################################################
|
||||||
|
ECHO: %date%, %time%
|
||||||
|
)
|
||||||
|
IF EXIST user.js.new (DEL /F "user.js.new")
|
||||||
|
CALL :message "Retrieving latest user.js file from github repository..."
|
||||||
|
(
|
||||||
|
PowerShell -Command "(New-Object Net.WebClient).DownloadFile('https://raw.githubusercontent.com/ghacksuserjs/ghacks-user.js/master/user.js', 'user.js.new')"
|
||||||
|
) >nul 2>&1
|
||||||
|
IF EXIST user.js.new (
|
||||||
|
IF DEFINED _multi (
|
||||||
|
FORFILES /P user.js-overrides /M *.js >nul 2>&1
|
||||||
|
IF NOT ERRORLEVEL 1 (
|
||||||
|
IF DEFINED _merge (
|
||||||
|
CALL :message "Merging..."
|
||||||
|
COPY /B /Y user.js-overrides\*.js user-overrides-merged.js
|
||||||
|
CALL :merge user-overrides-merged.js
|
||||||
|
COPY /B /Y user.js.new+user-overrides-merged.js user.js.new
|
||||||
|
CALL :merge user.js.new
|
||||||
|
) ELSE (
|
||||||
|
CALL :message "Appending..."
|
||||||
|
COPY /B /Y user.js.new+"user.js-overrides\*.js" user.js.new
|
||||||
|
)
|
||||||
|
) ELSE (CALL :message "No override files found.")
|
||||||
|
) ELSE (
|
||||||
|
IF EXIST "user-overrides.js" (
|
||||||
|
COPY /B /Y user.js.new+"user-overrides.js" "user.js.new"
|
||||||
|
IF DEFINED _merge (
|
||||||
|
CALL :message "Merging user-overrides.js..."
|
||||||
|
CALL :merge user.js.new
|
||||||
|
) ELSE (
|
||||||
|
CALL :message "user-overrides.js appended."
|
||||||
|
)
|
||||||
|
) ELSE (CALL :message "user-overrides.js not found.")
|
||||||
|
)
|
||||||
|
IF EXIST user.js (
|
||||||
|
FC user.js.new user.js >nul && SET "_changed=false" || SET "_changed=true"
|
||||||
|
)
|
||||||
|
IF "!_changed!"=="true" (
|
||||||
|
CALL :message "Backing up..."
|
||||||
|
IF DEFINED _singlebackup (
|
||||||
|
MOVE /Y user.js user.js.bak >nul
|
||||||
|
) ELSE (
|
||||||
|
SET "_time=!time: =0!"
|
||||||
|
MOVE /Y user.js "user-backup-!date:/=-!_!_time::=.!.js" >nul
|
||||||
|
)
|
||||||
|
REN user.js.new user.js
|
||||||
|
CALL :message "Update complete."
|
||||||
|
) ELSE (
|
||||||
|
IF "!_changed!"=="false" (
|
||||||
|
DEL /F user.js.new >nul
|
||||||
|
CALL :message "Update completed without changes."
|
||||||
|
) ELSE (
|
||||||
|
REN user.js.new user.js
|
||||||
|
CALL :message "Update complete."
|
||||||
|
SET "_changed=true"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
) ELSE (
|
||||||
|
CALL :message "Update failed. Make sure PowerShell is allowed internet access."
|
||||||
|
ECHO: No changes were made.
|
||||||
|
)
|
||||||
|
IF NOT DEFINED _log (
|
||||||
|
IF NOT DEFINED _ua (
|
||||||
|
IF EXIST prefsCleaner.bat (
|
||||||
|
IF "!_changed!"=="true" (
|
||||||
|
CALL :message "Would you like to run the prefsCleaner now?"
|
||||||
|
CHOICE /C YN /N /M "(Y/N) "
|
||||||
|
IF "1"=="!errorlevel!" ( START "" cmd.exe /C "prefsCleaner.bat" )
|
||||||
|
) ELSE (PAUSE)
|
||||||
|
) ELSE (PAUSE)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
EXIT /B
|
||||||
|
|
||||||
|
REM ########### Message Function ###########
|
||||||
|
:message
|
||||||
|
SETLOCAL DisableDelayedExpansion
|
||||||
|
IF NOT "2"=="%_log%" (ECHO:)
|
||||||
|
ECHO: %~1
|
||||||
|
IF NOT "2"=="%_log%" (ECHO:)
|
||||||
|
ENDLOCAL
|
||||||
|
GOTO :EOF
|
||||||
|
|
||||||
|
REM ############ Merge function ############
|
||||||
|
:merge
|
||||||
|
SETLOCAL DisableDelayedExpansion
|
||||||
|
FOR /F tokens^=2^,^*^ delims^=^'^" %%G IN ('FINDSTR /R /C:"^user_pref[ ]*\([ ]*[\"'].*[\"'][ ]*,.*\)[ ]*;" "%~1"') DO (SET "[%%G]=%%H")
|
||||||
|
FOR /F tokens^=2^,^*^ delims^=^' %%G IN ('FINDSTR /R /C:"^//// --- comment-out --- '[^'][^']*'.*" "%~1"') DO (SET "__unset__%%G=1")
|
||||||
|
(
|
||||||
|
FOR /F "tokens=1,* delims=:" %%I IN ('FINDSTR /N "^" "%~1"') DO (
|
||||||
|
SET "_temp=%%J"
|
||||||
|
SETLOCAL EnableDelayedExpansion
|
||||||
|
IF NOT "!_temp:~0,9!"=="user_pref" (
|
||||||
|
ENDLOCAL & ECHO:%%J
|
||||||
|
) ELSE (
|
||||||
|
IF "!_temp:;=!"=="!_temp!" (
|
||||||
|
ENDLOCAL & ECHO:%%J
|
||||||
|
) ELSE (
|
||||||
|
ENDLOCAL
|
||||||
|
FOR /F tokens^=2^ delims^=^'^" %%K IN ("%%J") DO (
|
||||||
|
IF NOT "_user.js.parrot"=="%%K" (
|
||||||
|
IF DEFINED __unset__%%K (
|
||||||
|
ECHO://%%J
|
||||||
|
) ELSE (
|
||||||
|
IF DEFINED [%%K] (
|
||||||
|
SETLOCAL EnableDelayedExpansion
|
||||||
|
FOR /F "delims=" %%L IN ("![%%K]!") DO (
|
||||||
|
ENDLOCAL & ECHO:user_pref("%%K"%%L
|
||||||
|
SET "[%%K]="
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
) ELSE (ECHO:%%J)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)>updatertempfile
|
||||||
|
MOVE /Y updatertempfile "%~1" >nul
|
||||||
|
ENDLOCAL
|
||||||
|
GOTO :EOF
|
||||||
|
|
||||||
|
REM ############### Help ##################
|
||||||
|
:showhelp
|
||||||
|
MODE 80,46
|
||||||
|
CLS
|
||||||
|
CALL :message "Available arguments (case-insensitive):"
|
||||||
|
CALL :message " -log"
|
||||||
|
ECHO: Write the console output to a logfile (user.js-update-log.txt)
|
||||||
|
CALL :message " -logP"
|
||||||
|
ECHO: Like -log, but also open the logfile after updating.
|
||||||
|
CALL :message " -merge"
|
||||||
|
ECHO: Merge overrides instead of appending them. Single-line comments and
|
||||||
|
ECHO: _user.js.parrot lines are appended normally. Overrides for inactive
|
||||||
|
ECHO: user.js prefs will be appended. When -Merge and -MultiOverrides are used
|
||||||
|
ECHO: together, a user-overrides-merged.js file is also generated in the root
|
||||||
|
ECHO: directory for quick reference. It contains only the merged data from
|
||||||
|
ECHO: override files and can be safely discarded after updating, or used as the
|
||||||
|
ECHO: new user-overrides.js. When there are conflicting records for the same
|
||||||
|
ECHO: pref, the value of the last one declared will be used. Visit the wiki
|
||||||
|
ECHO: for usage examples and more detailed information.
|
||||||
|
CALL :message " -multiOverrides"
|
||||||
|
ECHO: Use any and all .js files in a user.js-overrides sub-folder as overrides
|
||||||
|
ECHO: instead of the default user-overrides.js file. Files are appended in
|
||||||
|
ECHO: alphabetical order.
|
||||||
|
CALL :message " -unattended"
|
||||||
|
ECHO: Run without user input.
|
||||||
|
CALL :message " -singleBackup"
|
||||||
|
ECHO: Use a single backup file and overwrite it on new updates, instead of
|
||||||
|
ECHO: cumulative backups. This was the default behaviour before v4.3.
|
||||||
|
CALL :message " -updatebatch"
|
||||||
|
ECHO: Update the script itself on execution, before the normal routine.
|
||||||
|
CALL :message ""
|
||||||
|
PAUSE
|
||||||
|
MODE 80,25
|
||||||
|
GOTO :begin
|
427
updater.sh
Executable file
@ -0,0 +1,427 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
## ghacks-user.js updater for macOS and Linux
|
||||||
|
|
||||||
|
## version: 2.5
|
||||||
|
## Author: Pat Johnson (@overdodactyl)
|
||||||
|
## Additional contributors: @earthlng, @ema-pe, @claustromaniac
|
||||||
|
|
||||||
|
## DON'T GO HIGHER THAN VERSION x.9 !! ( because of ASCII comparison in update_updater() )
|
||||||
|
|
||||||
|
readonly CURRDIR=$(pwd)
|
||||||
|
|
||||||
|
sfp=$(readlink -f "${BASH_SOURCE[0]}" 2>/dev/null || greadlink -f "${BASH_SOURCE[0]}" 2>/dev/null)
|
||||||
|
if [ -z "$sfp" ]; then sfp=${BASH_SOURCE[0]}; fi
|
||||||
|
readonly SCRIPT_DIR=$(dirname "${sfp}")
|
||||||
|
|
||||||
|
|
||||||
|
#########################
|
||||||
|
# Base variables #
|
||||||
|
#########################
|
||||||
|
|
||||||
|
# Colors used for printing
|
||||||
|
RED='\033[0;31m'
|
||||||
|
BLUE='\033[0;34m'
|
||||||
|
BBLUE='\033[1;34m'
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
ORANGE='\033[0;33m'
|
||||||
|
CYAN='\033[0;36m'
|
||||||
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
|
# Argument defaults
|
||||||
|
UPDATE='check'
|
||||||
|
CONFIRM='yes'
|
||||||
|
OVERRIDE='user-overrides.js'
|
||||||
|
BACKUP='multiple'
|
||||||
|
COMPARE=false
|
||||||
|
SKIPOVERRIDE=false
|
||||||
|
VIEW=false
|
||||||
|
PROFILE_PATH=false
|
||||||
|
ESR=false
|
||||||
|
|
||||||
|
# Download method priority: curl -> wget
|
||||||
|
DOWNLOAD_METHOD=''
|
||||||
|
if [[ $(command -v 'curl') ]]; then
|
||||||
|
DOWNLOAD_METHOD='curl'
|
||||||
|
elif [[ $(command -v 'wget') ]]; then
|
||||||
|
DOWNLOAD_METHOD='wget'
|
||||||
|
else
|
||||||
|
echo -e "${RED}This script requires curl or wget.\nProcess aborted${NC}"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
show_banner () {
|
||||||
|
echo -e "${BBLUE}\n"
|
||||||
|
echo ' ############################################################################'
|
||||||
|
echo ' #### ####'
|
||||||
|
echo ' #### ghacks user.js ####'
|
||||||
|
echo ' #### Hardening the Privacy and Security Settings of Firefox ####'
|
||||||
|
echo ' #### Maintained by @Thorin-Oakenpants and @earthlng ####'
|
||||||
|
echo ' #### Updater for macOS and Linux by @overdodactyl ####'
|
||||||
|
echo ' #### ####'
|
||||||
|
echo ' ############################################################################'
|
||||||
|
echo -e "${NC}\n"
|
||||||
|
echo -e "Documentation for this script is available here: ${CYAN}https://github.com/ghacksuserjs/ghacks-user.js/wiki/3.3-Updater-Scripts${NC}\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
#########################
|
||||||
|
# Arguments #
|
||||||
|
#########################
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
echo -e "${BLUE}\nUsage: $0 [-h] [-p PROFILE] [-u] [-d] [-s] [-n] [-b] [-c] [-v] [-r] [-e] [-o OVERRIDE]\n${NC}" 1>&2 # Echo usage string to standard error
|
||||||
|
echo 'Optional Arguments:'
|
||||||
|
echo -e "\t-h,\t\t Show this help message and exit."
|
||||||
|
echo -e "\t-p PROFILE,\t Path to your Firefox profile (if different than the dir of this script)"
|
||||||
|
echo -e "\t\t\t IMPORTANT: if the path include spaces, wrap the entire argument in quotes."
|
||||||
|
echo -e "\t-l, \t\t Choose your Firefox profile from a list"
|
||||||
|
echo -e "\t-u,\t\t Update updater.sh and execute silently. Do not seek confirmation."
|
||||||
|
echo -e "\t-d,\t\t Do not look for updates to updater.sh."
|
||||||
|
echo -e "\t-s,\t\t Silently update user.js. Do not seek confirmation."
|
||||||
|
echo -e "\t-b,\t\t Only keep one backup of each file."
|
||||||
|
echo -e "\t-c,\t\t Create a diff file comparing old and new user.js within userjs_diffs. "
|
||||||
|
echo -e "\t-o OVERRIDE,\t Filename or path to overrides file (if different than user-overrides.js)."
|
||||||
|
echo -e "\t\t\t If used with -p, paths should be relative to PROFILE or absolute paths"
|
||||||
|
echo -e "\t\t\t If given a directory, all files inside will be appended recursively."
|
||||||
|
echo -e "\t\t\t You can pass multiple files or directories by passing a comma separated list."
|
||||||
|
echo -e "\t\t\t\t Note: If a directory is given, only files inside ending in the extension .js are appended"
|
||||||
|
echo -e "\t\t\t\t IMPORTANT: do not add spaces between files/paths. Ex: -o file1.js,file2.js,dir1"
|
||||||
|
echo -e "\t\t\t\t IMPORTANT: if any files/paths include spaces, wrap the entire argument in quotes."
|
||||||
|
echo -e "\t\t\t\t\t Ex: -o \"override folder\" "
|
||||||
|
echo -e "\t-n,\t\t Do not append any overrides, even if user-overrides.js exists."
|
||||||
|
echo -e "\t-v,\t\t Open the resulting user.js file."
|
||||||
|
echo -e "\t-r,\t\t Only download user.js to a temporary file and open it."
|
||||||
|
echo -e "\t-e,\t\t Activate ESR related preferences."
|
||||||
|
echo -e
|
||||||
|
echo 'Deprecated Arguments (they still work for now):'
|
||||||
|
echo -e "\t-donotupdate,\t Use instead -d"
|
||||||
|
echo -e "\t-update,\t Use instead -u"
|
||||||
|
echo -e
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
legacy_argument () {
|
||||||
|
echo -e "${ORANGE}\nWarning: command line arguments have changed."
|
||||||
|
echo -e "$1 has been deprecated and may not work in the future.\n"
|
||||||
|
echo -e "Please view the new options using the -h argument.${NC}"
|
||||||
|
}
|
||||||
|
|
||||||
|
#########################
|
||||||
|
# File Handling #
|
||||||
|
#########################
|
||||||
|
|
||||||
|
# Download files
|
||||||
|
download_file () {
|
||||||
|
declare -r url=$1
|
||||||
|
declare -r tf=$(mktemp)
|
||||||
|
local dlcmd=''
|
||||||
|
|
||||||
|
if [ $DOWNLOAD_METHOD = 'curl' ]; then
|
||||||
|
dlcmd="curl -o $tf"
|
||||||
|
else
|
||||||
|
dlcmd="wget -O $tf"
|
||||||
|
fi
|
||||||
|
|
||||||
|
$dlcmd "${url}" &>/dev/null && echo "$tf" || echo '' # return the temp-filename (or empty string on error)
|
||||||
|
}
|
||||||
|
|
||||||
|
open_file () { #expects one argument: file_path
|
||||||
|
if [ "$(uname)" == 'Darwin' ]; then
|
||||||
|
open "$1"
|
||||||
|
elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then
|
||||||
|
xdg-open "$1"
|
||||||
|
else
|
||||||
|
echo -e "${RED}Error: Sorry, opening files is not supported for your OS.${NC}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
readIniFile () { # expects one argument: absolute path of profiles.ini
|
||||||
|
declare -r inifile="$1"
|
||||||
|
declare -r tfile=$(mktemp)
|
||||||
|
|
||||||
|
if [ $(grep '^\[Profile' "$inifile" | wc -l) == "1" ]; then ### only 1 profile found
|
||||||
|
grep '^\[Profile' -A 4 "$inifile" | grep -v '^\[Profile' > $tfile
|
||||||
|
else
|
||||||
|
grep -E -v '^\[General\]|^StartWithLastProfile=|^IsRelative=' "$inifile"
|
||||||
|
echo ''
|
||||||
|
read -p 'Select the profile number ( 0 for Profile0, 1 for Profile1, etc ) : ' -r
|
||||||
|
echo -e "\n"
|
||||||
|
if [[ $REPLY =~ ^(0|[1-9][0-9]*)$ ]]; then
|
||||||
|
grep '^\[Profile'${REPLY} -A 4 "$inifile" | grep -v '^\[Profile'${REPLY} > $tfile
|
||||||
|
if [[ "$?" != "0" ]]; then
|
||||||
|
echo "Profile${REPLY} does not exist!" && exit 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "Invalid selection!" && exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
declare -r profpath=$(grep '^Path=' $tfile)
|
||||||
|
declare -r pathisrel=$(grep '^IsRelative=' $tfile)
|
||||||
|
|
||||||
|
rm "$tfile"
|
||||||
|
|
||||||
|
# update global variable
|
||||||
|
if [[ ${pathisrel#*=} == "1" ]]; then
|
||||||
|
PROFILE_PATH="$(dirname "$inifile")/${profpath#*=}"
|
||||||
|
else
|
||||||
|
PROFILE_PATH="${profpath#*=}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
getProfilePath () {
|
||||||
|
declare -r f1=~/Library/Application\ Support/Firefox/profiles.ini
|
||||||
|
declare -r f2=~/.mozilla/firefox/profiles.ini
|
||||||
|
|
||||||
|
if [ "$PROFILE_PATH" = false ]; then
|
||||||
|
PROFILE_PATH="$SCRIPT_DIR"
|
||||||
|
elif [ "$PROFILE_PATH" = 'list' ]; then
|
||||||
|
local ini=''
|
||||||
|
if [[ -f "$f1" ]]; then
|
||||||
|
ini="$f1"
|
||||||
|
elif [[ -f "$f2" ]]; then
|
||||||
|
ini="$f2"
|
||||||
|
else
|
||||||
|
echo -e "${RED}Error: Sorry, -l is not supported for your OS${NC}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
readIniFile "$ini" # updates PROFILE_PATH or exits on error
|
||||||
|
#else
|
||||||
|
# PROFILE_PATH already set by user with -p
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
#########################
|
||||||
|
# Update updater.sh #
|
||||||
|
#########################
|
||||||
|
|
||||||
|
# Returns the version number of a updater.sh file
|
||||||
|
get_updater_version () {
|
||||||
|
echo $(sed -n '5 s/.*[[:blank:]]\([[:digit:]]*\.[[:digit:]]*\)/\1/p' "$1")
|
||||||
|
}
|
||||||
|
|
||||||
|
# Update updater.sh
|
||||||
|
# Default: Check for update, if available, ask user if they want to execute it
|
||||||
|
# Args:
|
||||||
|
# -donotupdate: New version will not be looked for and update will not occur
|
||||||
|
# -update: Check for update, if available, execute without asking
|
||||||
|
update_updater () {
|
||||||
|
if [ $UPDATE = 'no' ]; then
|
||||||
|
return 0 # User signified not to check for updates
|
||||||
|
fi
|
||||||
|
|
||||||
|
declare -r tmpfile=$(download_file 'https://raw.githubusercontent.com/ghacksuserjs/ghacks-user.js/master/updater.sh')
|
||||||
|
|
||||||
|
if [[ $(get_updater_version "${SCRIPT_DIR}/updater.sh") < $(get_updater_version "${tmpfile}") ]]; then
|
||||||
|
if [ $UPDATE = 'check' ]; then
|
||||||
|
echo -e "There is a newer version of updater.sh available. ${RED}Update and execute Y/N?${NC}"
|
||||||
|
read -p "" -n 1 -r
|
||||||
|
echo -e "\n\n"
|
||||||
|
if [[ $REPLY =~ ^[Nn]$ ]]; then
|
||||||
|
return 0 # Update available, but user chooses not to update
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
return 0 # No update available
|
||||||
|
fi
|
||||||
|
mv "${tmpfile}" "${SCRIPT_DIR}/updater.sh"
|
||||||
|
chmod u+x "${SCRIPT_DIR}/updater.sh"
|
||||||
|
"${SCRIPT_DIR}/updater.sh" "$@" -d
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#########################
|
||||||
|
# Update user.js #
|
||||||
|
#########################
|
||||||
|
|
||||||
|
# Returns version number of a user.js file
|
||||||
|
get_userjs_version () {
|
||||||
|
if [ -e $1 ]; then
|
||||||
|
echo "$(sed -n '4p' "$1")"
|
||||||
|
else
|
||||||
|
echo "Not detected."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
add_override () {
|
||||||
|
input=$1
|
||||||
|
if [ -f "$input" ]; then
|
||||||
|
echo "" >> user.js
|
||||||
|
cat "$input" >> user.js
|
||||||
|
echo -e "Status: ${GREEN}Override file appended:${NC} ${input}"
|
||||||
|
elif [ -d "$input" ]; then
|
||||||
|
FSAVEIFS=$IFS
|
||||||
|
IFS=$'\n\b' # Set IFS
|
||||||
|
FILES="${input}"/*.js
|
||||||
|
for f in $FILES
|
||||||
|
do
|
||||||
|
add_override "$f"
|
||||||
|
done
|
||||||
|
IFS=$SAVEIFS # restore $IFS
|
||||||
|
else
|
||||||
|
echo -e "${ORANGE}Warning: Could not find override file:${NC} ${input}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
remove_comments () { # expects 2 arguments: from-file and to-file
|
||||||
|
sed -e 's/^[[:space:]]*\/\/.*$//' -e '/^\/\*/,/\*\//d' -e '/^[[:space:]]*$/d' -e 's/);[[:space:]]*\/\/.*/);/' "$1" > "$2"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Applies latest version of user.js and any custom overrides
|
||||||
|
update_userjs () {
|
||||||
|
declare -r newfile=$(download_file 'https://raw.githubusercontent.com/ghacksuserjs/ghacks-user.js/master/user.js')
|
||||||
|
|
||||||
|
echo 'Please observe the following information:'
|
||||||
|
echo -e "\tFirefox profile: ${ORANGE}$(pwd)${NC}"
|
||||||
|
echo -e "\tAvailable online: ${ORANGE}$(get_userjs_version $newfile)${NC}"
|
||||||
|
echo -e "\tCurrently using: ${ORANGE}$(get_userjs_version user.js)\n${NC}\n"
|
||||||
|
|
||||||
|
if [ $CONFIRM = 'yes' ]; then
|
||||||
|
echo -e "This script will update to the latest user.js file and append any custom configurations from user-overrides.js. ${RED}Continue Y/N? ${NC}"
|
||||||
|
read -p "" -n 1 -r
|
||||||
|
echo -e "\n"
|
||||||
|
if [[ $REPLY =~ ^[Nn]$ ]]; then
|
||||||
|
echo -e "${RED}Process aborted${NC}"
|
||||||
|
rm $newfile
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Copy a version of user.js to diffs folder for later comparison
|
||||||
|
if [ "$COMPARE" = true ]; then
|
||||||
|
mkdir -p userjs_diffs
|
||||||
|
cp user.js userjs_diffs/past_user.js &>/dev/null
|
||||||
|
fi
|
||||||
|
|
||||||
|
# backup user.js
|
||||||
|
mkdir -p userjs_backups
|
||||||
|
local bakname="userjs_backups/user.js.backup.$(date +"%Y-%m-%d_%H%M")"
|
||||||
|
if [ $BACKUP = 'single' ]; then
|
||||||
|
bakname='userjs_backups/user.js.backup'
|
||||||
|
fi
|
||||||
|
cp user.js "$bakname" &>/dev/null
|
||||||
|
|
||||||
|
mv "${newfile}" user.js
|
||||||
|
echo -e "Status: ${GREEN}user.js has been backed up and replaced with the latest version!${NC}"
|
||||||
|
|
||||||
|
if [ "$ESR" = true ]; then
|
||||||
|
sed -e 's/\/\* \(ESR[0-9]\{2,\}\.x still uses all.*\)/\/\/ \1/' user.js > user.js.tmp && mv user.js.tmp user.js
|
||||||
|
echo -e "Status: ${GREEN}ESR related preferences have been activated!${NC}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# apply overrides
|
||||||
|
if [ "$SKIPOVERRIDE" = false ]; then
|
||||||
|
while IFS=',' read -ra FILE; do
|
||||||
|
add_override "$FILE"
|
||||||
|
done <<< "$OVERRIDE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# create diff
|
||||||
|
if [ "$COMPARE" = true ]; then
|
||||||
|
pastuserjs='userjs_diffs/past_user.js'
|
||||||
|
past_nocomments='userjs_diffs/past_userjs.txt'
|
||||||
|
current_nocomments='userjs_diffs/current_userjs.txt'
|
||||||
|
|
||||||
|
remove_comments $pastuserjs $past_nocomments
|
||||||
|
remove_comments user.js $current_nocomments
|
||||||
|
|
||||||
|
diffname="userjs_diffs/diff_$(date +"%Y-%m-%d_%H%M").txt"
|
||||||
|
diff=$(diff -w -B -U 0 $past_nocomments $current_nocomments)
|
||||||
|
if [ ! -z "$diff" ]; then
|
||||||
|
echo "$diff" > "$diffname"
|
||||||
|
echo -e "Status: ${GREEN}A diff file was created:${NC} ${PWD}/${diffname}"
|
||||||
|
else
|
||||||
|
echo -e "Warning: ${ORANGE}Your new user.js file appears to be identical. No diff file was created.${NC}"
|
||||||
|
if [ $BACKUP = 'multiple' ]; then
|
||||||
|
rm $bakname &>/dev/null
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
rm $past_nocomments $current_nocomments $pastuserjs &>/dev/null
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$VIEW" = true ]; then open_file "${PWD}/user.js"; fi
|
||||||
|
}
|
||||||
|
|
||||||
|
#########################
|
||||||
|
# Execute #
|
||||||
|
#########################
|
||||||
|
|
||||||
|
if [ $# != 0 ]; then
|
||||||
|
readonly legacy_lc=$(echo $1 | tr '[A-Z]' '[a-z]')
|
||||||
|
# Display usage if first argument is -help or --help
|
||||||
|
if [ $1 = '--help' ] || [ $1 = '-help' ]; then
|
||||||
|
usage
|
||||||
|
elif [ $legacy_lc = '-donotupdate' ]; then
|
||||||
|
UPDATE='no'
|
||||||
|
legacy_argument $1
|
||||||
|
elif [ $legacy_lc = '-update' ]; then
|
||||||
|
UPDATE='yes'
|
||||||
|
legacy_argument $1
|
||||||
|
else
|
||||||
|
while getopts ":hp:ludsno:bcvre" opt; do
|
||||||
|
case $opt in
|
||||||
|
h)
|
||||||
|
usage
|
||||||
|
;;
|
||||||
|
p)
|
||||||
|
PROFILE_PATH=${OPTARG}
|
||||||
|
;;
|
||||||
|
l)
|
||||||
|
PROFILE_PATH='list'
|
||||||
|
;;
|
||||||
|
u)
|
||||||
|
UPDATE='yes'
|
||||||
|
;;
|
||||||
|
d)
|
||||||
|
UPDATE='no'
|
||||||
|
;;
|
||||||
|
s)
|
||||||
|
CONFIRM='no'
|
||||||
|
;;
|
||||||
|
n)
|
||||||
|
SKIPOVERRIDE=true
|
||||||
|
;;
|
||||||
|
o)
|
||||||
|
OVERRIDE=${OPTARG}
|
||||||
|
;;
|
||||||
|
b)
|
||||||
|
BACKUP='single'
|
||||||
|
;;
|
||||||
|
c)
|
||||||
|
COMPARE=true
|
||||||
|
;;
|
||||||
|
v)
|
||||||
|
VIEW=true
|
||||||
|
;;
|
||||||
|
e)
|
||||||
|
ESR=true
|
||||||
|
;;
|
||||||
|
r)
|
||||||
|
tfile=$(download_file 'https://raw.githubusercontent.com/ghacksuserjs/ghacks-user.js/master/user.js')
|
||||||
|
mv $tfile "${tfile}.js"
|
||||||
|
echo -e "${ORANGE}Warning: user.js was saved to temporary file ${tfile}.js${NC}"
|
||||||
|
open_file "${tfile}.js"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
\?)
|
||||||
|
echo -e "${RED}\n Error! Invalid option: -$OPTARG${NC}" >&2
|
||||||
|
usage
|
||||||
|
;;
|
||||||
|
:)
|
||||||
|
echo -e "${RED}Error! Option -$OPTARG requires an argument.${NC}" >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
show_banner
|
||||||
|
update_updater $@
|
||||||
|
|
||||||
|
getProfilePath # updates PROFILE_PATH or exits on error
|
||||||
|
cd "$PROFILE_PATH" && update_userjs
|
||||||
|
|
||||||
|
cd "$CURRDIR"
|
1
wikipiki/License-MIT-yellow.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="78" height="20"><linearGradient id="b" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="a"><rect width="78" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#a)"><path fill="#555" d="M0 0h47v20H0z"/><path fill="#dfb317" d="M47 0h31v20H47z"/><path fill="url(#b)" d="M0 0h78v20H0z"/></g><g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="110"> <text x="245" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="370">license</text><text x="245" y="140" transform="scale(.1)" textLength="370">license</text><text x="615" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="210">MIT</text><text x="615" y="140" transform="scale(.1)" textLength="210">MIT</text></g> </svg>
|
After Width: | Height: | Size: 950 B |
BIN
wikipiki/backup01.png
Normal file
After Width: | Height: | Size: 5.5 KiB |
BIN
wikipiki/bullet01.png
Normal file
After Width: | Height: | Size: 3.3 KiB |
BIN
wikipiki/concurrent01.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
wikipiki/concurrent02.png
Normal file
After Width: | Height: | Size: 104 KiB |
BIN
wikipiki/concurrent03.png
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
wikipiki/concurrent04.png
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
wikipiki/exclamation.png
Normal file
After Width: | Height: | Size: 3.1 KiB |
BIN
wikipiki/overview01.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
wikipiki/overview02.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
wikipiki/overview03.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
wikipiki/profiles01.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
wikipiki/profiles02.png
Normal file
After Width: | Height: | Size: 26 KiB |