Compare commits
857 Commits
Author | SHA1 | Date | |
---|---|---|---|
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 | |||
b4e0b2ad86 | |||
37505e3461 | |||
4e455ba392 | |||
2c4b7761ee | |||
668c307ffb | |||
76bd6c9399 | |||
5d427e2a15 | |||
0a58b3e91c | |||
616ce65772 | |||
f01f99f7d1 | |||
369678e02b | |||
eb0694e8bc | |||
49df457954 | |||
1eca16f9b4 | |||
e10fe65024 | |||
08b0a7cc92 | |||
de21ffd178 | |||
3ddbd01811 | |||
5f8b3b52e0 | |||
e18a85adb8 | |||
1ca7ef1442 | |||
e66fbf1335 | |||
c78b02a5de | |||
b27811b0f9 | |||
bb1e02220c | |||
6504744cc8 | |||
3e27f5bb78 | |||
b924d1ef98 | |||
6a04e894e3 | |||
f7ecc665b0 | |||
7be1dad1cd | |||
13133749a4 | |||
b64439a9b2 | |||
d6d62a0ea8 | |||
f87a860188 | |||
530f7bc39d | |||
26d3718dc0 | |||
cb2386da6c | |||
cae26373c3 | |||
9767982e8c | |||
022610258d | |||
38bfb4ca50 | |||
53d37bbafa | |||
0aed6c57db | |||
b48b4935ec | |||
85fbbde60d | |||
3ce8350fec | |||
f7c1c6791c | |||
f10a6d89c9 | |||
443a6cdf83 | |||
4248af6b78 | |||
2b2b9133a4 | |||
acf5a7a54d | |||
ebdd81c764 | |||
e0e7fc4c32 | |||
9d3fb13d76 | |||
4a6fbddb01 | |||
d4d6440be9 | |||
46157a5659 | |||
32c4e5a1dc | |||
ffbbb43110 | |||
7b80d3c733 | |||
df1e1e42e8 | |||
2fcd21083e | |||
d17fa573a9 | |||
3af7679932 | |||
49d8b9f6d6 | |||
1898460071 | |||
bb206ec8fb | |||
b73324e391 | |||
31c77a6225 | |||
bb605524c0 | |||
1438b4ac4f | |||
fd3311297d | |||
e00a80fd8b | |||
00e99d2b65 | |||
069d821413 | |||
4d0e5825a2 | |||
a00316d1c9 | |||
3bf64d5714 | |||
eba5ae463a | |||
1eccc39ca5 | |||
b5a1e3ff5d | |||
894dda6d60 | |||
6435c2795a | |||
01263ad61f | |||
9ab13cec87 | |||
4ca669951d | |||
fe50cf94b5 | |||
bd226c716e | |||
5e94428cb3 | |||
f507603cec | |||
27ac8f97f8 |
14
.gitattributes
vendored
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
## * text=auto
|
||||||
|
|
||||||
|
*.js text=auto
|
||||||
|
*.md text=auto
|
||||||
|
*.yml text=auto
|
||||||
|
*.txt text=auto
|
||||||
|
*.sh text=auto
|
||||||
|
*.bat eol=crlf
|
||||||
|
|
||||||
|
*.png binary
|
||||||
|
|
||||||
|
.gitattributes export-ignore
|
||||||
|
*.yml export-ignore
|
||||||
|
wikipiki export-ignore
|
7
.travis.yml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
language: node_js
|
||||||
|
node_js:
|
||||||
|
- "node"
|
||||||
|
before_script:
|
||||||
|
- npm install -g acorn
|
||||||
|
script:
|
||||||
|
- acorn user.js
|
21
README.md
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
###  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.
|
||||||
|
|
||||||
|
###  ghacks user.js
|
||||||
|
The `ghacks user.js` is a **template**, which, as provided, 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).
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
||||||
|
###  acknowledgments
|
||||||
|
Literally thousands of sources, references and suggestions. That said...
|
||||||
|
|
||||||
|
* Martin Brinkmann at [ghacks](https://www.ghacks.net/) <sup>1</sup>
|
||||||
|
* The ghacks community and commentators
|
||||||
|
* [12bytes](http://12bytes.org/tech/firefox/firefoxgecko-configuration-guide-for-privacy-and-performance-buffs)
|
||||||
|
* The 12bytes article now uses this user.js and supplements it with an additonal JS hosted right [here](https://github.com/atomGit/Firefox-user.js) at github
|
||||||
|
|
||||||
|
<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.
|
||||||
|
|
||||||
|
###  [](https://opensource.org/licenses/MIT)
|
1
_config.yml
Normal file
@ -0,0 +1 @@
|
|||||||
|
theme: jekyll-theme-midnight
|
108
prefsCleaner.bat
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
@ECHO OFF & SETLOCAL DisableDelayedExpansion
|
||||||
|
TITLE prefs.js cleaner
|
||||||
|
|
||||||
|
REM ### prefs.js cleaner for Windows
|
||||||
|
REM ## author: @claustromaniac
|
||||||
|
REM ## version: 2.1
|
||||||
|
|
||||||
|
:begin
|
||||||
|
ECHO:
|
||||||
|
ECHO:
|
||||||
|
ECHO ########################################
|
||||||
|
ECHO #### prefs.js cleaner for Windows ####
|
||||||
|
ECHO #### by claustromaniac ####
|
||||||
|
ECHO #### v2.1 ####
|
||||||
|
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"); }
|
||||||
|
|
||||||
|
})();
|
188
scratchpad-scripts/ghacks-clear-FF60inclusive-[deprecated].js
Normal file
@ -0,0 +1,188 @@
|
|||||||
|
/***
|
||||||
|
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 : nothing */
|
||||||
|
/* 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"); }
|
||||||
|
|
||||||
|
})();
|
127
scratchpad-scripts/ghacks-clear-[removed].js
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
/***
|
||||||
|
This will reset the preferences that have been removed completely from the ghacks user.js.
|
||||||
|
|
||||||
|
Last updated: 27-May-2018
|
||||||
|
|
||||||
|
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',
|
||||||
|
'dom.allow_scripts_to_close_windows',
|
||||||
|
'dom.disable_window_flip',
|
||||||
|
'network.http.fast-fallback-to-IPv4',
|
||||||
|
'offline-apps.quota.warn',
|
||||||
|
/* 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"); }
|
||||||
|
|
||||||
|
})();
|
216
scratchpad-scripts/troubleshooter.js
Normal file
@ -0,0 +1,216 @@
|
|||||||
|
|
||||||
|
/*** ghacks-user.js troubleshooter.js v1.5 ***/
|
||||||
|
|
||||||
|
(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.workers.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',
|
||||||
|
|
||||||
|
/* Forms */
|
||||||
|
'browser.formfill.enable',
|
||||||
|
'signon.autofillForms',
|
||||||
|
'signon.formlessCapture.enabled',
|
||||||
|
|
||||||
|
/* HTTPS */
|
||||||
|
'security.cert_pinning.enforcement_level',
|
||||||
|
'security.family_safety.mode',
|
||||||
|
'security.mixed_content.use_hsts',
|
||||||
|
'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-img-cross-origin-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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
})();
|
263
updater.bat
Normal file
@ -0,0 +1,263 @@
|
|||||||
|
@ECHO OFF & SETLOCAL EnableDelayedExpansion
|
||||||
|
TITLE ghacks user.js updater
|
||||||
|
|
||||||
|
REM ## ghacks-user.js updater for Windows
|
||||||
|
REM ## author: @claustromaniac
|
||||||
|
REM ## version: 4.5
|
||||||
|
REM ## instructions: https://github.com/ghacksuserjs/ghacks-user.js/wiki/3.3-Updater-Scripts
|
||||||
|
|
||||||
|
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 script
|
||||||
|
REM * Begin the normal routine
|
||||||
|
REN "[updated]!_myname!.bat" "[updated]!_myname!.bat.old"
|
||||||
|
DEL /F "[updated]!_myname!.bat.old"
|
||||||
|
CALL :message "Script updated^!"
|
||||||
|
TIMEOUT 3 >nul
|
||||||
|
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 the powershell call for testing.
|
||||||
|
REM COPY /B /V /Y "!_myname!.bat" "[updated]!_myname!.bat"
|
||||||
|
(
|
||||||
|
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 * Copy itself overwriting the original batch
|
||||||
|
REM * Start that script in a new CMD instance
|
||||||
|
REM * Exit
|
||||||
|
IF EXIST "!_myname:~9!.bat" (
|
||||||
|
REN "!_myname:~9!.bat" "!_myname:~9!.bat.old"
|
||||||
|
DEL /F "!_myname:~9!.bat.old"
|
||||||
|
)
|
||||||
|
COPY /B /V /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: #### v4.5 ####
|
||||||
|
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 /V /Y user.js-overrides\*.js user-overrides-merged.js
|
||||||
|
CALL :merge user-overrides-merged.js
|
||||||
|
COPY /B /V /Y user.js.new+user-overrides-merged.js user.js.new
|
||||||
|
CALL :merge user.js.new
|
||||||
|
) ELSE (
|
||||||
|
CALL :message "Appending..."
|
||||||
|
COPY /B /V /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 /V /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."
|
||||||
|
)
|
||||||
|
)
|
||||||
|
) 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 (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
|
||||||
|
REM #####################################
|
119
updater.sh
Executable file
@ -0,0 +1,119 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
### ghacks-user.js updater for Mac/Linux
|
||||||
|
## author: @overdodactyl
|
||||||
|
## version: 1.3
|
||||||
|
|
||||||
|
## DON'T GO HIGHER THAN VERSION x.9 !! ( because of ASCII comparison in check_for_update() )
|
||||||
|
|
||||||
|
ghacksjs="https://raw.githubusercontent.com/ghacksuserjs/ghacks-user.js/master/user.js"
|
||||||
|
updater="https://raw.githubusercontent.com/ghacksuserjs/ghacks-user.js/master/updater.sh"
|
||||||
|
update_pref=${1:--ask}
|
||||||
|
|
||||||
|
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}")"
|
||||||
|
|
||||||
|
## Used to check if a new version of updater.sh is available
|
||||||
|
update_available="no"
|
||||||
|
check_for_update () {
|
||||||
|
online_version="$(curl -s ${updater} | sed -n '5 s/.*[[:blank:]]\([[:digit:]]*\.[[:digit:]]*\)/\1/p')"
|
||||||
|
path_to_script="$(dirname "${sfp}")/updater.sh"
|
||||||
|
current_version="$(sed -n '5 s/.*[[:blank:]]\([[:digit:]]*\.[[:digit:]]*\)/\1/p' "$path_to_script")"
|
||||||
|
if [[ "$current_version" < "$online_version" ]]; then
|
||||||
|
update_available="yes"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
## Used to backup the current script, and download and execute the latest version of updater.sh
|
||||||
|
update_script () {
|
||||||
|
echo -e "This script will be backed up and the latest version of updater.sh will be executed.\n"
|
||||||
|
mv updater.sh "updater.sh.backup.$(date +"%Y-%m-%d_%H%M")"
|
||||||
|
curl -O ${updater} && echo -e "\nThe latest updater script has been downloaded\n"
|
||||||
|
|
||||||
|
# make new file executable
|
||||||
|
chmod +x updater.sh
|
||||||
|
|
||||||
|
# execute new updater script
|
||||||
|
./updater.sh -donotupdate
|
||||||
|
|
||||||
|
# exit script
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
main () {
|
||||||
|
## create backup folder if it doesn't exist
|
||||||
|
mkdir -p userjs_backups;
|
||||||
|
|
||||||
|
echo -e "\nThis script should be run from your Firefox profile directory.\n"
|
||||||
|
|
||||||
|
echo -e "Updating the user.js for Firefox profile:\n$(pwd)\n"
|
||||||
|
|
||||||
|
if [ -e user.js ]; then
|
||||||
|
echo "Your current user.js file for this profile will be backed up and the latest ghacks version from github will take its place."
|
||||||
|
echo -e "\nIf currently using the ghacks user.js, please compare versions:"
|
||||||
|
echo " Available online: $(curl -s ${ghacksjs} | sed -n '4p')"
|
||||||
|
echo " Currently using: $(sed -n '4p' user.js)"
|
||||||
|
else
|
||||||
|
echo "A user.js file does not exist in this profile. If you continue, the latest ghacks version from github will be downloaded."
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "\nIf a user-overrides.js file exists in this profile, it will be appended to the user.js.\n"
|
||||||
|
|
||||||
|
read -p "Continue Y/N? " -n 1 -r
|
||||||
|
echo -e "\n\n"
|
||||||
|
|
||||||
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||||
|
if [ -e user.js ]; then
|
||||||
|
# backup current user.js
|
||||||
|
bakfile="userjs_backups/user.js.backup.$(date +"%Y-%m-%d_%H%M")"
|
||||||
|
mv user.js "${bakfile}" && echo "Your previous user.js file was backed up: ${bakfile}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# download latest ghacks user.js
|
||||||
|
echo "downloading latest ghacks user.js file"
|
||||||
|
curl -O ${ghacksjs} && echo "ghacks user.js has been downloaded"
|
||||||
|
|
||||||
|
if [ -e user-overrides.js ]; then
|
||||||
|
echo "user-overrides.js file found"
|
||||||
|
cat user-overrides.js >> user.js && echo "user-overrides.js has been appended to user.js"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "Process aborted"
|
||||||
|
fi
|
||||||
|
|
||||||
|
## change directory back to the original working directory
|
||||||
|
cd "${currdir}"
|
||||||
|
}
|
||||||
|
|
||||||
|
update_pref="$(echo $update_pref | tr '[A-Z]' '[a-z]')"
|
||||||
|
if [ $update_pref = "-donotupdate" ]; then
|
||||||
|
main
|
||||||
|
else
|
||||||
|
check_for_update
|
||||||
|
if [ $update_available = "no" ]; then
|
||||||
|
main
|
||||||
|
else
|
||||||
|
## there is an update available
|
||||||
|
if [ $update_pref = "-update" ]; then
|
||||||
|
## update without asking
|
||||||
|
update_script
|
||||||
|
else
|
||||||
|
read -p "There is a newer version of updater.sh available. Download and execute? Y/N? " -n 1 -r
|
||||||
|
echo -e "\n\n"
|
||||||
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||||
|
update_script
|
||||||
|
else
|
||||||
|
main
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
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/exceptions01.png
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
wikipiki/exceptions02.png
Normal file
After Width: | Height: | Size: 85 KiB |
BIN
wikipiki/exceptions03.png
Normal file
After Width: | Height: | Size: 95 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 |