Compare commits
2817 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
ce395e626f | ||
![]() |
b0f93588bb | ||
![]() |
d456e5e45c | ||
![]() |
84e47bad7e | ||
![]() |
deee2391ba | ||
![]() |
5cdd06ca2f | ||
![]() |
6245a86a6f | ||
![]() |
c72e8bd88d | ||
![]() |
c58719348f | ||
![]() |
40525a9d6d | ||
![]() |
eac5d6d127 | ||
![]() |
9cd7af6b99 | ||
![]() |
5cd441c0cb | ||
![]() |
32cc778ed3 | ||
![]() |
c966b3f371 | ||
![]() |
9baa0128df | ||
![]() |
42fbc7ab66 | ||
![]() |
8272118e29 | ||
![]() |
1dc8d4f926 | ||
![]() |
4beb93055b | ||
![]() |
e66ec6823d | ||
![]() |
1d2b01df5c | ||
![]() |
5defcd6592 | ||
![]() |
13451f6843 | ||
![]() |
6d1d6f1e6e | ||
![]() |
bb064e47f7 | ||
![]() |
4e239f6089 | ||
![]() |
b35b458001 | ||
![]() |
315c28234e | ||
![]() |
d996cd6dda | ||
![]() |
8a61e12cc8 | ||
![]() |
99f4cbab4b | ||
![]() |
1b4da6f26d | ||
![]() |
14ebc8f2b6 | ||
![]() |
f97c1a0895 | ||
![]() |
533448d835 | ||
![]() |
cbcf3fd7f1 | ||
![]() |
4f4fd65a56 | ||
![]() |
d2a7b471f6 | ||
![]() |
df05071636 | ||
![]() |
bd8aee7b2c | ||
![]() |
3459112732 | ||
![]() |
8e8c02840d | ||
![]() |
f376f0e03a | ||
![]() |
59f6d767b3 | ||
![]() |
e46857af00 | ||
![]() |
e987e47d18 | ||
![]() |
588cd27d5b | ||
![]() |
d9efc4793a | ||
![]() |
9d5983938b | ||
![]() |
9686f45d24 | ||
![]() |
cb0a0a7aa4 | ||
![]() |
254495cd3d | ||
![]() |
6da9da0e8f | ||
![]() |
d8260a4aaa | ||
![]() |
000635252c | ||
![]() |
faac4dbe22 | ||
![]() |
a3007a266d | ||
![]() |
3f0f1048fe | ||
![]() |
c016d212ed | ||
![]() |
8f228b20de | ||
![]() |
a64945a8dd | ||
![]() |
2986876810 | ||
![]() |
166ef3ba52 | ||
![]() |
8bbd36a7dd | ||
![]() |
55c2254c3f | ||
![]() |
f7e72829ad | ||
![]() |
cd6829ca64 | ||
![]() |
a88942f58a | ||
![]() |
b4d79ce4a4 | ||
![]() |
51b4f95f79 | ||
![]() |
125da8d843 | ||
![]() |
8385cb436e | ||
![]() |
95ffeceb7f | ||
![]() |
1e3cff6174 | ||
![]() |
3f29a0382b | ||
![]() |
e42d26f965 | ||
![]() |
8f91a98b65 | ||
![]() |
58f62e21ff | ||
![]() |
fc45d47e15 | ||
![]() |
5409bc6392 | ||
![]() |
dcad453069 | ||
![]() |
5ef1678a8c | ||
![]() |
a682dff069 | ||
![]() |
8afa11913c | ||
![]() |
2cf139145e | ||
![]() |
a219bee4f0 | ||
![]() |
2efb0972f6 | ||
![]() |
7b33c63f78 | ||
![]() |
0df093383d | ||
![]() |
cdf65aedcb | ||
![]() |
b9dfb937f1 | ||
![]() |
2ea3b57499 | ||
![]() |
fd9200cbb0 | ||
![]() |
40d422c6f3 | ||
![]() |
9d6bbbc4e3 | ||
![]() |
3fa8433a0e | ||
![]() |
82af341261 | ||
![]() |
436519f4f4 | ||
![]() |
6be5984868 | ||
![]() |
503d10145a | ||
![]() |
97ed8d1728 | ||
![]() |
8c16ed243a | ||
![]() |
0c482175a2 | ||
![]() |
acfd7896ea | ||
![]() |
8d6e0bd43d | ||
![]() |
b35ef61515 | ||
![]() |
ec18dac5e5 | ||
![]() |
ccdc33e476 | ||
![]() |
3f5972be7b | ||
![]() |
5fbf3c3f72 | ||
![]() |
5c497d7563 | ||
![]() |
7ee3f63eff | ||
![]() |
ee85a76678 | ||
![]() |
e691524416 | ||
![]() |
ce0f6f7ebe | ||
![]() |
dfa5cb567f | ||
![]() |
bcf854b7bb | ||
![]() |
be0e811e45 | ||
![]() |
ab009cfbd7 | ||
![]() |
3fc7ebf80b | ||
![]() |
8c02c0cb30 | ||
![]() |
11c015c24e | ||
![]() |
d937730ab7 | ||
![]() |
b2b5b1e4c9 | ||
![]() |
d84b3088ec | ||
![]() |
24f2a4731e | ||
![]() |
152fba9ba7 | ||
![]() |
3e2edcb815 | ||
![]() |
9c8e92b2bc | ||
![]() |
24c9e1b8d9 | ||
![]() |
127cad8bc1 | ||
![]() |
1d4f4b829f | ||
![]() |
66d7135a5c | ||
![]() |
635eee980d | ||
![]() |
23f2370c4b | ||
![]() |
f2b88002a3 | ||
![]() |
6c41265625 | ||
![]() |
b939cb8b4c | ||
![]() |
d74710260a | ||
![]() |
609a15cfb1 | ||
![]() |
644532d4db | ||
![]() |
e9b0ffef0f | ||
![]() |
31a133e7f0 | ||
![]() |
277a24f8e0 | ||
![]() |
6c07411755 | ||
![]() |
6894eee6d4 | ||
![]() |
babdeb5d6e | ||
![]() |
7f08d84989 | ||
![]() |
32053d963f | ||
![]() |
5994ea9465 | ||
![]() |
7384a3825a | ||
![]() |
e31bf214a7 | ||
![]() |
48c143d47c | ||
![]() |
35d17d4274 | ||
![]() |
1e2b8cab02 | ||
![]() |
0a9a45b33b | ||
![]() |
63a512306d | ||
![]() |
190c0c687c | ||
![]() |
c7094986c9 | ||
![]() |
c201a65f82 | ||
![]() |
dd167a476f | ||
![]() |
b255bbf62a | ||
![]() |
e19300f424 | ||
![]() |
aeb0512eaf | ||
![]() |
192abef237 | ||
![]() |
2d278c563e | ||
![]() |
7de9066dda | ||
![]() |
5a2a2371fb | ||
![]() |
a433a25b16 | ||
![]() |
9098aaee3e | ||
![]() |
ea28b788bc | ||
![]() |
bd9981b998 | ||
![]() |
b7f1b087e8 | ||
![]() |
b0fdf25b24 | ||
![]() |
58f6e4cf00 | ||
![]() |
d6fe396c76 | ||
![]() |
5a01c6c9a5 | ||
![]() |
dc98b2b5c2 | ||
![]() |
60626c2a07 | ||
![]() |
0459ce07fa | ||
![]() |
b480865031 | ||
![]() |
c928d38ec0 | ||
![]() |
1f44602f38 | ||
![]() |
932d007745 | ||
![]() |
a1dd839909 | ||
![]() |
12b1c6c886 | ||
![]() |
e4a4a4a469 | ||
![]() |
2ffb8f7cf8 | ||
![]() |
25dec8b977 | ||
![]() |
8b4ee292b1 | ||
![]() |
2f8b64d6fb | ||
![]() |
b608e594af | ||
![]() |
9652440579 | ||
![]() |
55d2ae2050 | ||
![]() |
bdde0c3c63 | ||
![]() |
08afa44e09 | ||
![]() |
3ec3fa2d1e | ||
![]() |
df74a4eb20 | ||
![]() |
fdaf483293 | ||
![]() |
5ab4d0c29b | ||
![]() |
d6fab5fd6c | ||
![]() |
8df35650e5 | ||
![]() |
c5b682dc89 | ||
![]() |
86d49c6704 | ||
![]() |
9e251b3ea0 | ||
![]() |
8630cd8df6 | ||
![]() |
e42c8859b4 | ||
![]() |
3636db3f85 | ||
![]() |
fd4d03db58 | ||
![]() |
2c3ea0cfef | ||
![]() |
bc34b4f198 | ||
![]() |
e93503066c | ||
![]() |
c4351acf7c | ||
![]() |
bffd7bbb3b | ||
![]() |
aad131c913 | ||
![]() |
77faf7a84c | ||
![]() |
86a7c4772e | ||
![]() |
7430e258b1 | ||
![]() |
4efdd90066 | ||
![]() |
4c0da272ce | ||
![]() |
cf48b5348f | ||
![]() |
aa74262564 | ||
![]() |
209383274e | ||
![]() |
c6b1f206a6 | ||
![]() |
be504fc1fc | ||
![]() |
7118f7fec1 | ||
![]() |
7451a735e6 | ||
![]() |
604a900664 | ||
![]() |
d7066de378 | ||
![]() |
f0bfb051c3 | ||
![]() |
54c4eb512f | ||
![]() |
3750b4d7d0 | ||
![]() |
29c5f8c8e7 | ||
![]() |
6b87edf63b | ||
![]() |
9b3180d74f | ||
![]() |
70331a0383 | ||
![]() |
2220b852c0 | ||
![]() |
e5fa171df5 | ||
![]() |
d083c10ae3 | ||
![]() |
7a37b1c641 | ||
![]() |
e54449fbdb | ||
![]() |
b5b384772a | ||
![]() |
733755bb5a | ||
![]() |
d6341d8ab6 | ||
![]() |
b39384258c | ||
![]() |
dfa032d3f2 | ||
![]() |
f28fc08a57 | ||
![]() |
e20e35c48d | ||
![]() |
bddb47b0bd | ||
![]() |
469b21bb29 | ||
![]() |
0a8213b851 | ||
![]() |
460a4edb13 | ||
![]() |
2855ec0372 | ||
![]() |
0f34ed3ccd | ||
![]() |
cbb73e4e15 | ||
![]() |
99de2cd0ae | ||
![]() |
aed7d06af5 | ||
![]() |
2c348b51f1 | ||
![]() |
14ac8327cf | ||
![]() |
c520f17f3b | ||
![]() |
6c3d3ed322 | ||
![]() |
f4cf3840e4 | ||
![]() |
3b2f116af0 | ||
![]() |
bba8f87687 | ||
![]() |
41b799b369 | ||
![]() |
d59c6af32c | ||
![]() |
1b5023793a | ||
![]() |
f01a62c83b | ||
![]() |
ca84202f4c | ||
![]() |
9d7ffd1ae1 | ||
![]() |
8f6886db82 | ||
![]() |
da5e708e0f | ||
![]() |
ff6993478f | ||
![]() |
a54950f101 | ||
![]() |
6b567fdc05 | ||
![]() |
a4788fae45 | ||
![]() |
1ba1a7aa40 | ||
![]() |
835057d970 | ||
![]() |
48f39e70c3 | ||
![]() |
3314640b01 | ||
![]() |
83d9730d93 | ||
![]() |
4e6dcd16ac | ||
![]() |
6debf45004 | ||
![]() |
66b57e11db | ||
![]() |
1fc1c8a025 | ||
![]() |
6076f52390 | ||
![]() |
3f33dbf6e8 | ||
![]() |
33f0dd8d43 | ||
![]() |
921fb0012b | ||
![]() |
2bdad9c411 | ||
![]() |
01f60c829d | ||
![]() |
1d6c0e1c6f | ||
![]() |
fb74f1d72b | ||
![]() |
33e1c08273 | ||
![]() |
23c32f1211 | ||
![]() |
c8a5d693ed | ||
![]() |
4a54d01ca8 | ||
![]() |
359a7a7b98 | ||
![]() |
aaa25deaa9 | ||
![]() |
cd07ae4d2e | ||
![]() |
1e8c1efe2f | ||
![]() |
ce405fc4f6 | ||
![]() |
50a6efd568 | ||
![]() |
2c6f881093 | ||
![]() |
e4bf0392af | ||
![]() |
fcb9133f27 | ||
![]() |
5c6f24dc39 | ||
![]() |
ce562f3bca | ||
![]() |
9ef477f04b | ||
![]() |
5268fee5b5 | ||
![]() |
68e28faedc | ||
![]() |
12f63db62e | ||
![]() |
08e1c87fa6 | ||
![]() |
8ee962b729 | ||
![]() |
3d8b45ecdd | ||
![]() |
2347d9cea2 | ||
![]() |
8a57f490ce | ||
![]() |
a880f5cbb8 | ||
![]() |
df5a7c7e0c | ||
![]() |
b7b82456d8 | ||
![]() |
6b19e54c23 | ||
![]() |
75d04858e6 | ||
![]() |
9332551791 | ||
![]() |
32117a573b | ||
![]() |
d4d3316d18 | ||
![]() |
43a7eb233c | ||
![]() |
178093861b | ||
![]() |
3fb26534b7 | ||
![]() |
19a9fdfd38 | ||
![]() |
6438e97324 | ||
![]() |
b29492e8eb | ||
![]() |
5ab4f10230 | ||
![]() |
80b251e12c | ||
![]() |
bfd8b12a4f | ||
![]() |
1c2e94658b | ||
![]() |
286da28cd6 | ||
![]() |
a4ee93a355 | ||
![]() |
ab56cb1788 | ||
![]() |
32435e4d8e | ||
![]() |
900cdf9d9a | ||
![]() |
e79019266f | ||
![]() |
deee7361f0 | ||
![]() |
bdcf09c618 | ||
![]() |
7b5d6dcd9b | ||
![]() |
0595d87759 | ||
![]() |
fab0a0d6e2 | ||
![]() |
3eb6b36866 | ||
![]() |
50327158e2 | ||
![]() |
a99756ef85 | ||
![]() |
1c25dbed66 | ||
![]() |
7e8c5c0c3c | ||
![]() |
0b747b901c | ||
![]() |
8dd5051201 | ||
![]() |
f7b0fedc9d | ||
![]() |
0411d0b242 | ||
![]() |
3fcc793269 | ||
![]() |
fd27a0efef | ||
![]() |
4474a2568e | ||
![]() |
9d944243a3 | ||
![]() |
8ef38ebab1 | ||
![]() |
f457a23eab | ||
![]() |
5d1eeaf1d8 | ||
![]() |
77f732c6a4 | ||
![]() |
ac07f04ad8 | ||
![]() |
dddd760efd | ||
![]() |
0f7fbacb17 | ||
![]() |
2697107770 | ||
![]() |
e1e1cd0574 | ||
![]() |
93786aa510 | ||
![]() |
d8b9a8715b | ||
![]() |
e8783b15b1 | ||
![]() |
0995d5c5a2 | ||
![]() |
0852045928 | ||
![]() |
04de0e9a50 | ||
![]() |
951b693d17 | ||
![]() |
308f357c4f | ||
![]() |
206ddd6d36 | ||
![]() |
b4cf963bd6 | ||
![]() |
77b493c9b0 | ||
![]() |
95a5ff5625 | ||
![]() |
190753aa99 | ||
![]() |
f778696a76 | ||
![]() |
ce4fb49d4c | ||
![]() |
91b89b79d2 | ||
![]() |
3cd3e19199 | ||
![]() |
ed36ceadbc | ||
![]() |
8736c9dfe6 | ||
![]() |
e44f33bf14 | ||
![]() |
6e39b73f07 | ||
![]() |
01703e5584 | ||
![]() |
fee7cb41cb | ||
![]() |
bb14af8b40 | ||
![]() |
54b849e548 | ||
![]() |
8f50482896 | ||
![]() |
b3b82e7595 | ||
![]() |
9c4e0a4ae6 | ||
![]() |
0b656999d8 | ||
![]() |
7605a512ba | ||
![]() |
2018a29968 | ||
![]() |
dbf335a05d | ||
![]() |
ad5a7e9d70 | ||
![]() |
f8477fa88d | ||
![]() |
a22ddb05ba | ||
![]() |
9455edf2da | ||
![]() |
4a2244327f | ||
![]() |
708a800a25 | ||
![]() |
a34193ca16 | ||
![]() |
a4886975e4 | ||
![]() |
8b6a015602 | ||
![]() |
f915560752 | ||
![]() |
f2f0910771 | ||
![]() |
9316e2ce15 | ||
![]() |
128573e73e | ||
![]() |
3d132ad803 | ||
![]() |
6f671325fa | ||
![]() |
7e6ac77341 | ||
![]() |
51bafe8259 | ||
![]() |
f1bbbcfedf | ||
![]() |
7d99b154c0 | ||
![]() |
575da76235 | ||
![]() |
c3b3b9b9a6 | ||
![]() |
7432de3d33 | ||
![]() |
03ce87d710 | ||
![]() |
5e9fb8bd84 | ||
![]() |
68a205486e | ||
![]() |
94c106a87a | ||
![]() |
1b2a04bd2a | ||
![]() |
a048939cf1 | ||
![]() |
6296846078 | ||
![]() |
e530d12f7f | ||
![]() |
adc3c16ef3 | ||
![]() |
5458b10774 | ||
![]() |
9ad403af00 | ||
![]() |
8d7f16caed | ||
![]() |
e5c20ca9a7 | ||
![]() |
bd4a7d8cbb | ||
![]() |
5b116737b6 | ||
![]() |
8adc799041 | ||
![]() |
41e657b64e | ||
![]() |
f16cda51fb | ||
![]() |
886510d721 | ||
![]() |
427b3dcd73 | ||
![]() |
138fa1454f | ||
![]() |
7ec9b03990 | ||
![]() |
65a91c5709 | ||
![]() |
e679f47c1a | ||
![]() |
337ecafa56 | ||
![]() |
2c46098fb5 | ||
![]() |
35247af220 | ||
![]() |
e71da1f659 | ||
![]() |
91daa1958b | ||
![]() |
900a9cb34f | ||
![]() |
297a7f541e | ||
![]() |
049085fb7a | ||
![]() |
f594a2d0f4 | ||
![]() |
ffd13accca | ||
![]() |
edf2503ee5 | ||
![]() |
4d0c303660 | ||
![]() |
49bc00102b | ||
![]() |
29f074267c | ||
![]() |
7671c37f2a | ||
![]() |
91ad9e4c41 | ||
![]() |
ed48349e39 | ||
![]() |
2df02a9d70 | ||
![]() |
1d027613e4 | ||
![]() |
e9de73d2f6 | ||
![]() |
7b9b01688c | ||
![]() |
afcf2fddb1 | ||
![]() |
78de3ba691 | ||
![]() |
2cfefee94d | ||
![]() |
d50940cdf8 | ||
![]() |
e38ee663dc | ||
![]() |
5a160a76f7 | ||
![]() |
c504f27a51 | ||
![]() |
3f5155e9b5 | ||
![]() |
dcb85073da | ||
![]() |
2a5f3491a6 | ||
![]() |
6f6b01344d | ||
![]() |
73810758d9 | ||
![]() |
6cb527fd58 | ||
![]() |
7316352ff5 | ||
![]() |
ad76d5d8e2 | ||
![]() |
539f307500 | ||
![]() |
5f68d08cbc | ||
![]() |
bc8bea11c0 | ||
![]() |
9bb02e5bf6 | ||
![]() |
ae68e6372c | ||
![]() |
69593994ef | ||
![]() |
cb52ebe65b | ||
![]() |
9b989ebac6 | ||
![]() |
f13bef4ac8 | ||
![]() |
29b1aa0d9b | ||
![]() |
5aa2e47c49 | ||
![]() |
773d104306 | ||
![]() |
b8e948b009 | ||
![]() |
49298d2f3f | ||
![]() |
ac19567f2b | ||
![]() |
bc627fc55c | ||
![]() |
eb6c2d0f73 | ||
![]() |
436757c71d | ||
![]() |
5d09b7e38b | ||
![]() |
a8cf67198f | ||
![]() |
06539db1a0 | ||
![]() |
de10890bd8 | ||
![]() |
8dc5375d55 | ||
![]() |
1d23076191 | ||
![]() |
cbdc061891 | ||
![]() |
9536d76b61 | ||
![]() |
7a030901c8 | ||
![]() |
bcc02047ca | ||
![]() |
c61616388e | ||
![]() |
499486f559 | ||
![]() |
179d231fd8 | ||
![]() |
2e4a391eda | ||
![]() |
3d214fee4b | ||
![]() |
509a4c7955 | ||
![]() |
c754046eaf | ||
![]() |
92571d9133 | ||
![]() |
add425abdb | ||
![]() |
1890d9e2ee | ||
![]() |
83f2926f0c | ||
![]() |
738ced81ec | ||
![]() |
b22c1ae520 | ||
![]() |
e2e7489b1f | ||
![]() |
6ae7b8303d | ||
![]() |
55f40af51c | ||
![]() |
7a784cea3b | ||
![]() |
f86cccec0c | ||
![]() |
9d90a28d76 | ||
![]() |
1724cf7c17 | ||
![]() |
d64d92ccf5 | ||
![]() |
f64ced8677 | ||
![]() |
db1c0468aa | ||
![]() |
77c5d3276a | ||
![]() |
ec2b1ec3f0 | ||
![]() |
85bf76dd98 | ||
![]() |
bfa326af2c | ||
![]() |
534c47935a | ||
![]() |
31a6f2b421 | ||
![]() |
66c106722c | ||
![]() |
9d0204f2fa | ||
![]() |
fceb0e2158 | ||
![]() |
14e7caaa5d | ||
![]() |
744e009690 | ||
![]() |
713dcd9083 | ||
![]() |
e03ec67b5c | ||
![]() |
7e27e2757f | ||
![]() |
f05c5ff617 | ||
![]() |
1afb26f04a | ||
![]() |
7873905cde | ||
![]() |
41a9100477 | ||
![]() |
b8cc1eb993 | ||
![]() |
adbbfd9dc2 | ||
![]() |
84da99d56c | ||
![]() |
aaf8f09cfd | ||
![]() |
6da464fd1b | ||
![]() |
efaa41ba49 | ||
![]() |
67e8e1d819 | ||
![]() |
532f8f8e4c | ||
![]() |
0109e8e57c | ||
![]() |
6e720b2798 | ||
![]() |
d3f2a97dd4 | ||
![]() |
9f7b04b0ec | ||
![]() |
c4118c78b7 | ||
![]() |
84147c558f | ||
![]() |
4cb51a2d32 | ||
![]() |
4727780a3d | ||
![]() |
df20f5063d | ||
![]() |
d2a5f4c5c1 | ||
![]() |
64ba85aa9b | ||
![]() |
51c33989fe | ||
![]() |
4713822122 | ||
![]() |
e10de62a7a | ||
![]() |
14b235e3a4 | ||
![]() |
eb4aac3902 | ||
![]() |
180bf33a28 | ||
![]() |
935a254c97 | ||
![]() |
3c678f0e92 | ||
![]() |
a053e1c1de | ||
![]() |
b8fa1751ba | ||
![]() |
c4243d54a9 | ||
![]() |
1767f54fed | ||
![]() |
7e465cdbbe | ||
![]() |
47f67fcba9 | ||
![]() |
3fff20fb13 | ||
![]() |
06a2d87129 | ||
![]() |
a8076e306a | ||
![]() |
05e5829260 | ||
![]() |
5a91416f34 | ||
![]() |
70db1d0066 | ||
![]() |
26c936d19e | ||
![]() |
3b0ae3f80d | ||
![]() |
2570d85543 | ||
![]() |
b274c4160e | ||
![]() |
f9d5d9e30b | ||
![]() |
8cdf5ff6df | ||
![]() |
409ebf6e14 | ||
![]() |
a3d34ba919 | ||
![]() |
242bb1a428 | ||
![]() |
4a25ed0627 | ||
![]() |
f65fbf9d55 | ||
![]() |
6169acd478 | ||
![]() |
481f1a7c36 | ||
![]() |
16726789da | ||
![]() |
e71f650ade | ||
![]() |
e8a7f571e1 | ||
![]() |
3117c8a98f | ||
![]() |
90b845f3db | ||
![]() |
f5dd972e38 | ||
![]() |
4b210e1a6a | ||
![]() |
1a7eb3c1df | ||
![]() |
52f84d8603 | ||
![]() |
f92d218c0c | ||
![]() |
81c5ece8a9 | ||
![]() |
a97bc38f3e | ||
![]() |
aacfb5e221 | ||
![]() |
f88ac3c04e | ||
![]() |
1fb53acc46 | ||
![]() |
ae3b0d5437 | ||
![]() |
f9b2da1bb0 | ||
![]() |
d0bea052ad | ||
![]() |
c012faa958 | ||
![]() |
c8cfd1ee65 | ||
![]() |
e8da0bcd80 | ||
![]() |
591ff9095a | ||
![]() |
6df91d3078 | ||
![]() |
288c14efce | ||
![]() |
ee8d636ca8 | ||
![]() |
a3ceecae91 | ||
![]() |
5ad89a3b3d | ||
![]() |
e1089cc18d | ||
![]() |
f9e780187c | ||
![]() |
42cbe96a14 | ||
![]() |
1f23b11dcc | ||
![]() |
ad3b4bbd58 | ||
![]() |
455f4ffa27 | ||
![]() |
1d867b8aca | ||
![]() |
1f9c18e615 | ||
![]() |
5bf439851d | ||
![]() |
9df3f99a1c | ||
![]() |
f41232703b | ||
![]() |
abc4e53943 | ||
![]() |
f846508fc1 | ||
![]() |
7343003287 | ||
![]() |
25ca3d610b | ||
![]() |
9d286786d4 | ||
![]() |
91037ebdd6 | ||
![]() |
26b2eafea0 | ||
![]() |
432beedd94 | ||
![]() |
3a919bab45 | ||
![]() |
11af9b808d | ||
![]() |
af35335772 | ||
![]() |
7b9047cc82 | ||
![]() |
4cad36572c | ||
![]() |
b5625a4550 | ||
![]() |
ec41d8053c | ||
![]() |
284cfe6989 | ||
![]() |
ad8f363c5d | ||
![]() |
3d3cf73c30 | ||
![]() |
fd9bd28361 | ||
![]() |
d2919dece0 | ||
![]() |
a86442bff7 | ||
![]() |
4b915d43cf | ||
![]() |
b20c3d84a6 | ||
![]() |
d2bbf5ffc4 | ||
![]() |
4ef9411f35 | ||
![]() |
168d13d6e6 | ||
![]() |
1e921a9fd5 | ||
![]() |
9e438ed674 | ||
![]() |
3a02a7dad8 | ||
![]() |
1744316656 | ||
![]() |
1e4a86da8e | ||
![]() |
2b31b6a6b0 | ||
![]() |
c7a3f40eba | ||
![]() |
8b9710df9f | ||
![]() |
ce6f750fa5 | ||
![]() |
468eb02ff3 | ||
![]() |
dfca7f1340 | ||
![]() |
7bfa56d199 | ||
![]() |
c579cbdf10 | ||
![]() |
0b3609c775 | ||
![]() |
be52eb9b3f | ||
![]() |
5f5156561f | ||
![]() |
d47f92f396 | ||
![]() |
2a30bc9a56 | ||
![]() |
a427b7a1af | ||
![]() |
05d5e70c58 | ||
![]() |
62858caaa4 | ||
![]() |
b9b48a55ef | ||
![]() |
7276ec185b | ||
![]() |
e063ac10c5 | ||
![]() |
eca9a7ea13 | ||
![]() |
86d9a72bbf | ||
![]() |
073707b2d0 | ||
![]() |
b971fbaac6 | ||
![]() |
86795f1091 | ||
![]() |
5b9dd4fb80 | ||
![]() |
5ff31e197b | ||
![]() |
0bd5e64b86 | ||
![]() |
3089b56f70 | ||
![]() |
46bf0eae40 | ||
![]() |
97f411130f | ||
![]() |
b9ce7bc99d | ||
![]() |
9d3ecda43d | ||
![]() |
8356f6d128 | ||
![]() |
05a084dadf | ||
![]() |
f338fa552e | ||
![]() |
7ab9d01bac | ||
![]() |
5b0aaf66eb | ||
![]() |
6a4e92a999 | ||
![]() |
0a4b652493 | ||
![]() |
eebc1af672 | ||
![]() |
41fa045999 | ||
![]() |
4b52c89a75 | ||
![]() |
28dcf8bc1e | ||
![]() |
5af469282a | ||
![]() |
4c58dc61bc | ||
![]() |
c4bf80c262 | ||
![]() |
e485e8936f | ||
![]() |
e495e0d2e6 | ||
![]() |
3695e6db15 | ||
![]() |
ac7df96f68 | ||
![]() |
cf17a39446 | ||
![]() |
87cc5f790c | ||
![]() |
b03987290c | ||
![]() |
1f4969547b | ||
![]() |
d12d201ef4 | ||
![]() |
c91a4c9da1 | ||
![]() |
1213e95ddd | ||
![]() |
90a836d587 | ||
![]() |
973c2ebafd | ||
![]() |
24f52aee46 | ||
![]() |
4d2c0e4161 | ||
![]() |
b687546fcd | ||
![]() |
3c701aaf86 | ||
![]() |
d50e99c17b | ||
![]() |
41d5e0ab24 | ||
![]() |
c99e864dbc | ||
![]() |
f39adfdf87 | ||
![]() |
0d1ffb581f | ||
![]() |
4add44f3bd | ||
![]() |
baae9f6f39 | ||
![]() |
0a9958f45f | ||
![]() |
7e5d25cf2c | ||
![]() |
9666e6b4d3 | ||
![]() |
c937cb94f9 | ||
![]() |
5e54d093f5 | ||
![]() |
c7f099276e | ||
![]() |
ee4235ba71 | ||
![]() |
71066d69fb | ||
![]() |
4581376198 | ||
![]() |
04ebde62bc | ||
![]() |
fec47f05cf | ||
![]() |
b9e2fb74ed | ||
![]() |
a1d6637dd1 | ||
![]() |
e6fa5a07ce | ||
![]() |
eec6226c8d | ||
![]() |
356fe8180e | ||
![]() |
30c120596a | ||
![]() |
c6e330ea8d | ||
![]() |
dca55d12ac | ||
![]() |
4426da6233 | ||
![]() |
381fe2f436 | ||
![]() |
28cd7a67de | ||
![]() |
97f75cea52 | ||
![]() |
5e788f0da4 | ||
![]() |
1fc9d034d0 | ||
![]() |
dc8f14c23a | ||
![]() |
e9717da916 | ||
![]() |
73c328f90b | ||
![]() |
25a6f7041a | ||
![]() |
ff278c8bea | ||
![]() |
35dd6a5ac3 | ||
![]() |
98ea238087 | ||
![]() |
3830b0d831 | ||
![]() |
b6de5a2268 | ||
![]() |
77327c7a40 | ||
![]() |
26664a8351 | ||
![]() |
912964104b | ||
![]() |
63653ccb01 | ||
![]() |
5df54700b8 | ||
![]() |
f952dde1d4 | ||
![]() |
2c0aac5eed | ||
![]() |
4e3a2c4bb8 | ||
![]() |
17ccfcfb53 | ||
![]() |
f2959ada85 | ||
![]() |
e427c12ac2 | ||
![]() |
874837666c | ||
![]() |
c66532d18f | ||
![]() |
2bc572b4cc | ||
![]() |
2db01f3d5c | ||
![]() |
a0a116b7bf | ||
![]() |
aec7d53414 | ||
![]() |
09416c9893 | ||
![]() |
0e7fe670aa | ||
![]() |
bd805f1d88 | ||
![]() |
b984aecaf2 | ||
![]() |
56efffffa3 | ||
![]() |
2f92be1da0 | ||
![]() |
baa52921a0 | ||
![]() |
20e0c44f9a | ||
![]() |
ebc83c8f60 | ||
![]() |
2d48d9fd87 | ||
![]() |
5eb06a3a52 | ||
![]() |
9917a1c7e1 | ||
![]() |
e9c886e871 | ||
![]() |
0074f8da1b | ||
![]() |
1c98b51e6a | ||
![]() |
837bdb1b43 | ||
![]() |
48e034be0e | ||
![]() |
b067162ce6 | ||
![]() |
db42d5b065 | ||
![]() |
c41ccf7821 | ||
![]() |
f5fd523ca7 | ||
![]() |
5f9482e7d5 | ||
![]() |
bb98ee27a1 | ||
![]() |
3506dd3656 | ||
![]() |
88d0b09c88 | ||
![]() |
25b88f89a6 | ||
![]() |
85343b80b7 | ||
![]() |
6766fbdfb3 | ||
![]() |
c488fca2f2 | ||
![]() |
ea51460169 | ||
![]() |
80e7af30d0 | ||
![]() |
8f20edaed0 | ||
![]() |
4d7b2d7215 | ||
![]() |
d0993a8988 | ||
![]() |
b68af344cb | ||
![]() |
58fdeb50f3 | ||
![]() |
1af3c42001 | ||
![]() |
8ef066adda | ||
![]() |
5cc7fa8e8b | ||
![]() |
fc998ac57c | ||
![]() |
9e4fe16f56 | ||
![]() |
0cc00101dc | ||
![]() |
227cfd6e2f | ||
![]() |
876f659847 | ||
![]() |
555501d534 | ||
![]() |
eb392b1251 | ||
![]() |
e32bf34830 | ||
![]() |
94ff21649d | ||
![]() |
35ff0ab2b6 | ||
![]() |
c3e3007cd5 | ||
![]() |
fadc80166b | ||
![]() |
9201b5318b | ||
![]() |
c94a9671a2 | ||
![]() |
7b3f52505e | ||
![]() |
313afbd6db | ||
![]() |
0c4f02f288 | ||
![]() |
b2d33fba66 | ||
![]() |
a673393db5 | ||
![]() |
9f55d4057d | ||
![]() |
c00a58fc06 | ||
![]() |
f49db22311 | ||
![]() |
204f43e717 | ||
![]() |
77a8894ced | ||
![]() |
f85122b141 | ||
![]() |
0cd07cd605 | ||
![]() |
eb8604f926 | ||
![]() |
8b3cb850a5 | ||
![]() |
48d1b9444c | ||
![]() |
fda0a991a2 | ||
![]() |
bb61bd0c96 | ||
![]() |
10e89e656a | ||
![]() |
741756d114 | ||
![]() |
4f36ff0233 | ||
![]() |
5be69edf2e | ||
![]() |
730cdceab1 | ||
![]() |
fa0600afe0 | ||
![]() |
fc7db7f23c | ||
![]() |
e09429f932 | ||
![]() |
947cd32e85 | ||
![]() |
65a3c7dae4 | ||
![]() |
0374f58a11 | ||
![]() |
a7ff8678b5 | ||
![]() |
b85ae2f77f | ||
![]() |
9f93353519 | ||
![]() |
37935ed467 | ||
![]() |
8ed9e44a78 | ||
![]() |
a796a68e8a | ||
![]() |
f2b467c5e7 | ||
![]() |
21d22b60b4 | ||
![]() |
f76d204e09 | ||
![]() |
6775d4da9b | ||
![]() |
0264430831 | ||
![]() |
76c1077b8e | ||
![]() |
6efb4eeb6e | ||
![]() |
f7eb7322fb | ||
![]() |
cf8b8bad01 | ||
![]() |
07fc3360b6 | ||
![]() |
61f57e3f53 | ||
![]() |
cd8696076e | ||
![]() |
fb45e7148a | ||
![]() |
404823eadb | ||
![]() |
324822599a | ||
![]() |
053530ed34 | ||
![]() |
4f1cb005d7 | ||
![]() |
f3d2183a23 | ||
![]() |
cdac86d104 | ||
![]() |
291627ac15 | ||
![]() |
0025f3b526 | ||
![]() |
678e80bb8b | ||
![]() |
88c37cdcac | ||
![]() |
8ed2ca9018 | ||
![]() |
27c99ef894 | ||
![]() |
41bed99b4c | ||
![]() |
b127b772fe | ||
![]() |
2698c2d3b5 | ||
![]() |
7c984d20d7 | ||
![]() |
844085d7a7 | ||
![]() |
404cc016e2 | ||
![]() |
98f643f98e | ||
![]() |
9985f85aad | ||
![]() |
959f2cd61d | ||
![]() |
2a2ef53e4f | ||
![]() |
3648b56fc1 | ||
![]() |
d422fa58cd | ||
![]() |
ee7e9b328d | ||
![]() |
450c1224fd | ||
![]() |
7885d73f80 | ||
![]() |
7bdcdcc1ce | ||
![]() |
d375588f7c | ||
![]() |
2484894d43 | ||
![]() |
d82fe69469 | ||
![]() |
cb5657e15c | ||
![]() |
16e2ee2759 | ||
![]() |
5621b280ff | ||
![]() |
8cd6efbc38 | ||
![]() |
0f4f862840 | ||
![]() |
14f74a561c | ||
![]() |
bd970cf215 | ||
![]() |
57052013bb | ||
![]() |
8e11e2e3fc | ||
![]() |
ef58503537 | ||
![]() |
a46d230308 | ||
![]() |
e85ac32c2d | ||
![]() |
a7e27c2419 | ||
![]() |
a4c9a93b6d | ||
![]() |
1f3837a8c6 | ||
![]() |
d92044cf6a | ||
![]() |
aa4ef6745a | ||
![]() |
865fd25af1 | ||
![]() |
2cdcbcc80e | ||
![]() |
5ea0f23389 | ||
![]() |
196a93dc4d | ||
![]() |
eb6d9d66cf | ||
![]() |
142de603bd | ||
![]() |
8ed710965f | ||
![]() |
dc2a7ca2d5 | ||
![]() |
32cdbb70d6 | ||
![]() |
f2e168bd0a | ||
![]() |
311a5cc9e3 | ||
![]() |
878f2f9015 | ||
![]() |
2923950d40 | ||
![]() |
0cd1cd787a | ||
![]() |
ae8a87c40b | ||
![]() |
c3597941db | ||
![]() |
d26524767d | ||
![]() |
8d61a52eaa | ||
![]() |
d5bad25c63 | ||
![]() |
165e0a3d54 | ||
![]() |
e74c1f2ac6 | ||
![]() |
42d4e6610f | ||
![]() |
4179685bb6 | ||
![]() |
a81a34cd76 | ||
![]() |
118db9b267 | ||
![]() |
fd67d5cb4c | ||
![]() |
cb0f95ee7d | ||
![]() |
029b92935c | ||
![]() |
bc13538167 | ||
![]() |
9b41023c43 | ||
![]() |
9f1ede0e3e | ||
![]() |
fcfd9239c1 | ||
![]() |
10e9d3f32f | ||
![]() |
11439afde7 | ||
![]() |
359d3b4392 | ||
![]() |
d53d45f797 | ||
![]() |
c6ea5419ff | ||
![]() |
7dcb979983 | ||
![]() |
034d529afa | ||
![]() |
fb764abeae | ||
![]() |
d0bce21993 | ||
![]() |
5ba4d0a8c4 | ||
![]() |
8864158d85 | ||
![]() |
85b8749f02 | ||
![]() |
b412b4a9ff | ||
![]() |
081ad9adcf | ||
![]() |
80f2cc6728 | ||
![]() |
bc627da923 | ||
![]() |
c1b77365a0 | ||
![]() |
7994aa96e2 | ||
![]() |
ccc79eac91 | ||
![]() |
f0fbff824b | ||
![]() |
7293baa1f9 | ||
![]() |
20abea6744 | ||
![]() |
b666fdcc1a | ||
![]() |
70c3357f39 | ||
![]() |
9d49636cd1 | ||
![]() |
67afe968b4 | ||
![]() |
09cc5afad6 | ||
![]() |
ab53d80fcf | ||
![]() |
1d520473ed | ||
![]() |
4636768810 | ||
![]() |
01e9402b2c | ||
![]() |
947690870b | ||
![]() |
dd93551ebf | ||
![]() |
bf237c3dca | ||
![]() |
7e108e9f5c | ||
![]() |
75dbbd115b | ||
![]() |
09ca24b032 | ||
![]() |
f3d125a3f9 | ||
![]() |
51a9666b91 | ||
![]() |
2118fc1f0a | ||
![]() |
4182e2bd6d | ||
![]() |
c349711e0d | ||
![]() |
810b4c7191 | ||
![]() |
9f730f23e9 | ||
![]() |
8a6c9a9e35 | ||
![]() |
3a98f5a419 | ||
![]() |
597784a3e8 | ||
![]() |
48354ece42 | ||
![]() |
be8624250d | ||
![]() |
168f73e988 | ||
![]() |
a4d62c7c7a | ||
![]() |
83eab954f1 | ||
![]() |
f934fb171a | ||
![]() |
fe3d95f394 | ||
![]() |
10e5caa766 | ||
![]() |
5fb8f5a8c7 | ||
![]() |
1673957aa6 | ||
![]() |
91db717485 | ||
![]() |
be90e179c6 | ||
![]() |
3b1b8e9493 | ||
![]() |
4a1ed5a3ca | ||
![]() |
212db199e8 | ||
![]() |
b57a43b26c | ||
![]() |
a1ba5b1316 | ||
![]() |
92457f91ae | ||
![]() |
e84bae9e84 | ||
![]() |
1b2682c228 | ||
![]() |
6fa825f15d | ||
![]() |
beae1c2860 | ||
![]() |
6f975acbb6 | ||
![]() |
5e7bed8db3 | ||
![]() |
177510afdf | ||
![]() |
d912cd3b75 | ||
![]() |
c426748fe2 | ||
![]() |
64d80f8f48 | ||
![]() |
c1d767b0ae | ||
![]() |
edeb09eee2 | ||
![]() |
bdb5081c05 | ||
![]() |
7dc410691d | ||
![]() |
772b9d0ae7 | ||
![]() |
b0ff4533e2 | ||
![]() |
72a09434e3 | ||
![]() |
87df50b7e7 | ||
![]() |
d3d21be588 | ||
![]() |
5b92ebfabd | ||
![]() |
a9d1d8f034 | ||
![]() |
436ded4f4f | ||
![]() |
de55794761 | ||
![]() |
a23ef386ea | ||
![]() |
572aa662f6 | ||
![]() |
8b10bee881 | ||
![]() |
f492458d85 | ||
![]() |
d2289039d6 | ||
![]() |
019fbf5268 | ||
![]() |
8d7b04b0e2 | ||
![]() |
6e1f8d0533 | ||
![]() |
b412d2a30a | ||
![]() |
cbd9f57468 | ||
![]() |
2e0ee21964 | ||
![]() |
24b20b8d32 | ||
![]() |
d1843e2e27 | ||
![]() |
30e7aa23d8 | ||
![]() |
9f5c22e7c2 | ||
![]() |
4f88739b01 | ||
![]() |
18c50c82bc | ||
![]() |
0b87b16cba | ||
![]() |
d454cf7493 | ||
![]() |
66e5b36d16 | ||
![]() |
f582cd5c71 | ||
![]() |
bf731897a3 | ||
![]() |
a823792d8d | ||
![]() |
9e894dfd55 | ||
![]() |
bd90ebeafd | ||
![]() |
ee12027739 | ||
![]() |
e02f3558eb | ||
![]() |
f410e1c4fa | ||
![]() |
e41bc54d43 | ||
![]() |
1599e06ffb | ||
![]() |
84c49a23c9 | ||
![]() |
95c94758cb | ||
![]() |
3bc5c5914b | ||
![]() |
69d2cd3b6d | ||
![]() |
4bca467bd3 | ||
![]() |
20061ae5a1 | ||
![]() |
78867c3cc9 | ||
![]() |
f8911cad32 | ||
![]() |
dd9a461cf5 | ||
![]() |
1516ce86f4 | ||
![]() |
58ab04f2f4 | ||
![]() |
3e651e3ea2 | ||
![]() |
b02c00eb41 | ||
![]() |
a9ee45d977 | ||
![]() |
156e66438a | ||
![]() |
9ac34badad | ||
![]() |
fdf145657d | ||
![]() |
f93e0a624e | ||
![]() |
c8e3af32be | ||
![]() |
62b3a49b5f | ||
![]() |
be88eee8f6 | ||
![]() |
e7fb192f5d | ||
![]() |
18e2ca89b7 | ||
![]() |
ec8c388f99 | ||
![]() |
a1518df41a | ||
![]() |
312ef38d62 | ||
![]() |
ed3e0a9d9c | ||
![]() |
d7ca93b9fa | ||
![]() |
910dfd6ad2 | ||
![]() |
041415519b | ||
![]() |
0ba877fef1 | ||
![]() |
839c93961c | ||
![]() |
30b1be97dd | ||
![]() |
55be57ad21 | ||
![]() |
58064ec633 | ||
![]() |
d63044a15e | ||
![]() |
5422697397 | ||
![]() |
36c2f8fe5d | ||
![]() |
2defddc153 | ||
![]() |
fb9a219349 | ||
![]() |
3b5e4276c8 | ||
![]() |
fab2e08a0d | ||
![]() |
19e9099a78 | ||
![]() |
91c2b07cd8 | ||
![]() |
fd00c7bd81 | ||
![]() |
8919082179 | ||
![]() |
2f7c191547 | ||
![]() |
80519dc366 | ||
![]() |
4d53c813e4 | ||
![]() |
750f479d58 | ||
![]() |
e9a7e99108 | ||
![]() |
ebf10b3452 | ||
![]() |
5d621f5318 | ||
![]() |
35dedfc7e4 | ||
![]() |
39094adfcf | ||
![]() |
74a25bfaa0 | ||
![]() |
04ef2f0c8d | ||
![]() |
fb99906a8c | ||
![]() |
da0d3e4129 | ||
![]() |
3ffe90146c | ||
![]() |
81cea41154 | ||
![]() |
3ff4f53bbd | ||
![]() |
a77f67fc32 | ||
![]() |
47c45d48b1 | ||
![]() |
cdd9585cb8 | ||
![]() |
db60188847 | ||
![]() |
21a2e5f415 | ||
![]() |
2377c9b4cb | ||
![]() |
296f6b1553 | ||
![]() |
e15643ca46 | ||
![]() |
9632ba40cc | ||
![]() |
a2cdeeb6c7 | ||
![]() |
a23857ce3c | ||
![]() |
78677b3aa7 | ||
![]() |
7dd264953f | ||
![]() |
17af9c3ab6 | ||
![]() |
4b49f8fbb8 | ||
![]() |
e253225c66 | ||
![]() |
6abb6f90f6 | ||
![]() |
9fb2743a38 | ||
![]() |
17792716a7 | ||
![]() |
ae7282358e | ||
![]() |
abc082f7c0 | ||
![]() |
bf1163ae84 | ||
![]() |
be74ca472a | ||
![]() |
31b472fa47 | ||
![]() |
b502627494 | ||
![]() |
a8017369d0 | ||
![]() |
3f0b5e4318 | ||
![]() |
aea8f93e02 | ||
![]() |
874411990b | ||
![]() |
780268f70e | ||
![]() |
3a8a374e87 | ||
![]() |
488f36d491 | ||
![]() |
4d48b0be99 | ||
![]() |
44f3888c24 | ||
![]() |
a76fb4c173 | ||
![]() |
e4aa003157 | ||
![]() |
247f334334 | ||
![]() |
509cdae832 | ||
![]() |
5ff59b3339 | ||
![]() |
2b1a785f24 | ||
![]() |
2c0b137848 | ||
![]() |
ef68e633cf | ||
![]() |
e9e63ba950 | ||
![]() |
3fd6167e71 | ||
![]() |
6b0573ded1 | ||
![]() |
328dc80324 | ||
![]() |
24d8617f81 | ||
![]() |
e2c3d4f2fb | ||
![]() |
60229d73c9 | ||
![]() |
40235463bc | ||
![]() |
c6cbadc514 | ||
![]() |
3c3c67a34c | ||
![]() |
72eedd2ff9 | ||
![]() |
a7e9d5a60b | ||
![]() |
c3d081b700 | ||
![]() |
57f62c919c | ||
![]() |
19bdd4fa2a | ||
![]() |
9d8391583f | ||
![]() |
6037b0acc5 | ||
![]() |
09c5efc161 | ||
![]() |
16c2aefe7b | ||
![]() |
06cfa207fc | ||
![]() |
0be8bbc19f | ||
![]() |
bad85375de | ||
![]() |
6c11a7a6c4 | ||
![]() |
6f38c6f339 | ||
![]() |
fb1d727db9 | ||
![]() |
d98d286dc4 | ||
![]() |
1be279dbaa | ||
![]() |
90e6feeb4c | ||
![]() |
f1f9f235c7 | ||
![]() |
eb3f938281 | ||
![]() |
d6ef923134 | ||
![]() |
5b01577810 | ||
![]() |
2a111d472a | ||
![]() |
a8809e89b9 | ||
![]() |
1ab9a49d01 | ||
![]() |
f92c116564 | ||
![]() |
b54539b647 | ||
![]() |
87fc6522fb | ||
![]() |
b0408d1d6e | ||
![]() |
39779ca8d5 | ||
![]() |
8c34f7559d | ||
![]() |
740c7c2476 | ||
![]() |
abd43dd471 | ||
![]() |
c24b5410bc | ||
![]() |
cde7d0f463 | ||
![]() |
54548c3ed0 | ||
![]() |
221d1edf0f | ||
![]() |
02e75f9539 | ||
![]() |
6bed2ff106 | ||
![]() |
f3e1e4d1da | ||
![]() |
370f6384d9 | ||
![]() |
0105587d04 | ||
![]() |
e327970ab9 | ||
![]() |
9e247f39ff | ||
![]() |
09f3a10b46 | ||
![]() |
c3679a84e5 | ||
![]() |
75f8d5e7d9 | ||
![]() |
6ba4fa50b9 | ||
![]() |
f5e130f2a6 | ||
![]() |
cd5dcd87b0 | ||
![]() |
54f319af0e | ||
![]() |
96949059cf | ||
![]() |
763368db99 | ||
![]() |
f622ea654f | ||
![]() |
70c4e6c287 | ||
![]() |
d7692e875a | ||
![]() |
0a94010668 | ||
![]() |
50bd1d9a5d | ||
![]() |
d45121a93b | ||
![]() |
a55e3fb225 | ||
![]() |
426b2f5858 | ||
![]() |
3d10b5e538 | ||
![]() |
b639599620 | ||
![]() |
63c51c6ee0 | ||
![]() |
f39934c274 | ||
![]() |
adec1643bf | ||
![]() |
229ea7d3ab | ||
![]() |
03899f042d | ||
![]() |
46d7cee639 | ||
![]() |
eb0c378138 | ||
![]() |
79d1bf30a4 | ||
![]() |
5786434f37 | ||
![]() |
3633d7ada1 | ||
![]() |
b95d4aed11 | ||
![]() |
c2f599a33c | ||
![]() |
89361cfce4 | ||
![]() |
278a6c504a | ||
![]() |
e140ddf7be | ||
![]() |
f00ba4e704 | ||
![]() |
8128656a9e | ||
![]() |
f2f7a6de6b | ||
![]() |
8651d81b73 | ||
![]() |
2458255e22 | ||
![]() |
ea12c6e2c0 | ||
![]() |
2e22bd2ecf | ||
![]() |
777cb0033e | ||
![]() |
127c126ef5 | ||
![]() |
01ff8d171a | ||
![]() |
457c23fffa | ||
![]() |
b07911ec68 | ||
![]() |
fb211d59a8 | ||
![]() |
4e586d35a9 | ||
![]() |
52f2461fe6 | ||
![]() |
ac7dab8b6e | ||
![]() |
5e171c2ad1 | ||
![]() |
b4a139515c | ||
![]() |
30219f6b6f | ||
![]() |
d19e6bdd03 | ||
![]() |
65ce0a5e54 | ||
![]() |
c2659d68dc | ||
![]() |
773c7ba14b | ||
![]() |
93e617f488 | ||
![]() |
f7959c073f | ||
![]() |
6953970be7 | ||
![]() |
1496fdaf80 | ||
![]() |
0fc034b1ac | ||
![]() |
c3312c918e | ||
![]() |
5a13964ced | ||
![]() |
fe07b1cb7f | ||
![]() |
d805a70508 | ||
![]() |
0f0009e0db | ||
![]() |
4c4cb2bb17 | ||
![]() |
fe319a529f | ||
![]() |
91bea1f6c7 | ||
![]() |
01745f7c65 | ||
![]() |
5d3943ffa8 | ||
![]() |
e66d7babc5 | ||
![]() |
80e5645a84 | ||
![]() |
a766faeae9 | ||
![]() |
4d2d226446 | ||
![]() |
61e83b10c3 | ||
![]() |
ed675f0956 | ||
![]() |
9cce8ab214 | ||
![]() |
daa409cd82 | ||
![]() |
9d65415fdc | ||
![]() |
8c40917cc2 | ||
![]() |
871f886702 | ||
![]() |
f19075c50a | ||
![]() |
71da205ab7 | ||
![]() |
a34cc47a11 | ||
![]() |
cbddaf1d19 | ||
![]() |
1f1ed2da4c | ||
![]() |
8d81bd0dc0 | ||
![]() |
5773a5bfa6 | ||
![]() |
7275a48102 | ||
![]() |
8f84dd610c | ||
![]() |
f1f466ed23 | ||
![]() |
0ca5237139 | ||
![]() |
20549bfdf0 | ||
![]() |
d692bb3c52 | ||
![]() |
44cd1e9223 | ||
![]() |
f0fec654ff | ||
![]() |
4e04e5e0c0 | ||
![]() |
4991fb2769 | ||
![]() |
4d90d554f8 | ||
![]() |
e5468713ac | ||
![]() |
77013f982d | ||
![]() |
0460cdedd7 | ||
![]() |
73f5bf69e8 | ||
![]() |
750c0d7df2 | ||
![]() |
2fcebdd281 | ||
![]() |
e4e65a4cd5 | ||
![]() |
e010ecb03f | ||
![]() |
fc74db668d | ||
![]() |
1bac3418b4 | ||
![]() |
53df8c48b7 | ||
![]() |
92702fe47e | ||
![]() |
017c4c12cd | ||
![]() |
830d246ba4 | ||
![]() |
6b33afa916 | ||
![]() |
69a3efd534 | ||
![]() |
2d0adb8f4c | ||
![]() |
da9d8cb138 | ||
![]() |
2acaca8582 | ||
![]() |
11cf82c6a4 | ||
![]() |
1ef66c962a | ||
![]() |
03f20599ba | ||
![]() |
d150b10b3e | ||
![]() |
c4f323aae3 | ||
![]() |
8297f8ccd0 | ||
![]() |
f336241576 | ||
![]() |
f6d9a7e7c3 | ||
![]() |
80d1ee7543 | ||
![]() |
e55a254353 | ||
![]() |
555a0f276c | ||
![]() |
792632d726 | ||
![]() |
9cac293efc | ||
![]() |
cd8bfca29c | ||
![]() |
b5b437b878 | ||
![]() |
cc2947063a | ||
![]() |
2864a9027f | ||
![]() |
e11f547308 | ||
![]() |
cdce7aa5e2 | ||
![]() |
82cea185b2 | ||
![]() |
f92a4bb195 | ||
![]() |
9f4f88df9c | ||
![]() |
e69803cbd1 | ||
![]() |
f164661ef2 | ||
![]() |
c9d993b838 | ||
![]() |
65f35dc9f4 | ||
![]() |
b600d462c1 | ||
![]() |
fa5a82c9ab | ||
![]() |
a9885be09e | ||
![]() |
7b011f4a91 | ||
![]() |
41c404abe6 | ||
![]() |
2089a761cf | ||
![]() |
0ee2df010d | ||
![]() |
466844c016 | ||
![]() |
bbf9a08649 | ||
![]() |
c985c66652 | ||
![]() |
f9dc96320e | ||
![]() |
42552789fe | ||
![]() |
1a2ffeb0b5 | ||
![]() |
4f75493249 | ||
![]() |
42193695fb | ||
![]() |
02af0de21e | ||
![]() |
5f8e10e524 | ||
![]() |
cee93d746c | ||
![]() |
08704a383f | ||
![]() |
7c596be638 | ||
![]() |
07265f594b | ||
![]() |
392cb1ba89 | ||
![]() |
e6f33e997f | ||
![]() |
a44387f250 | ||
![]() |
b1b1b7592b | ||
![]() |
ca668898f4 | ||
![]() |
fcd437c89f | ||
![]() |
7f7d7edc7f | ||
![]() |
bd827f946a | ||
![]() |
ad8aa1c179 | ||
![]() |
3ebaf83ce0 | ||
![]() |
39b1978ff3 | ||
![]() |
bddff17e5e | ||
![]() |
0ac9120064 | ||
![]() |
d90f75425f | ||
![]() |
dec7d537dc | ||
![]() |
11e95ea092 | ||
![]() |
c5e9b69eb3 | ||
![]() |
120c11b181 | ||
![]() |
a1ae832129 | ||
![]() |
3a4833818f | ||
![]() |
8814fc9c9c | ||
![]() |
e6e02ece89 | ||
![]() |
9059c149dd | ||
![]() |
7d8e70b2ac | ||
![]() |
89105f5641 | ||
![]() |
1813d17b4c | ||
![]() |
ce27b36fd0 | ||
![]() |
e635a87628 | ||
![]() |
80c52433cc | ||
![]() |
1472f0b141 | ||
![]() |
4d914f5c0a | ||
![]() |
0318f7344f | ||
![]() |
413fbb3d0c | ||
![]() |
8bc47baf4f | ||
![]() |
e3f6d42a47 | ||
![]() |
8230935fd3 | ||
![]() |
f968d05ea0 | ||
![]() |
d6e5dc2167 | ||
![]() |
460147fea2 | ||
![]() |
cea44834bb | ||
![]() |
1af50fd7b8 | ||
![]() |
b18013025f | ||
![]() |
acdf7c244f | ||
![]() |
399eb60809 | ||
![]() |
ed67e3506b | ||
![]() |
a72b6745aa | ||
![]() |
24086e9023 | ||
![]() |
c3d4b5ad38 | ||
![]() |
cc618a83e5 | ||
![]() |
9eaa0b27db | ||
![]() |
a8835a679e | ||
![]() |
656bc6df84 | ||
![]() |
019aaf7d82 | ||
![]() |
76bafbf398 | ||
![]() |
030bcb99b1 | ||
![]() |
d8ff37fc45 | ||
![]() |
2fcc3bb1ea | ||
![]() |
2e680c3d1e | ||
![]() |
af0a0ef41b | ||
![]() |
bbfccb0bbf | ||
![]() |
c89eb5d69f | ||
![]() |
ebde84214e | ||
![]() |
03fbae7b6d | ||
![]() |
f90e9596d4 | ||
![]() |
944f9524e2 | ||
![]() |
c61050244e | ||
![]() |
90337adbbc | ||
![]() |
7b67e41c5b | ||
![]() |
91db24fcfc | ||
![]() |
bb53db905f | ||
![]() |
0e9a1efe46 | ||
![]() |
289cd3e200 | ||
![]() |
e0f847e539 | ||
![]() |
c2842b486e | ||
![]() |
7235ade42f | ||
![]() |
850be2df1d | ||
![]() |
d504501440 | ||
![]() |
208392f12c | ||
![]() |
0fe036c640 | ||
![]() |
a40c41f0b0 | ||
![]() |
4affa5b710 | ||
![]() |
4eb574d991 | ||
![]() |
2c1577ea24 | ||
![]() |
b87e7e50b6 | ||
![]() |
36215d50bd | ||
![]() |
5ff1245d0c | ||
![]() |
ebd189fb27 | ||
![]() |
6f724827bd | ||
![]() |
b6a0982012 | ||
![]() |
c3e375e8a5 | ||
![]() |
302409fd83 | ||
![]() |
a2046461c1 | ||
![]() |
6660c34120 | ||
![]() |
b88ccf0ddd | ||
![]() |
b898bbf94c | ||
![]() |
787e89eb95 | ||
![]() |
1022c2c438 | ||
![]() |
ba21c62ed4 | ||
![]() |
bfe66c919b | ||
![]() |
3dacf7f661 | ||
![]() |
c0a3ae2612 | ||
![]() |
da612ef789 | ||
![]() |
df9cb7cf6e | ||
![]() |
9c1a26110e | ||
![]() |
0883d18a6c | ||
![]() |
c7246c61a5 | ||
![]() |
c5a1431fc0 | ||
![]() |
f0118a0dff | ||
![]() |
cffe96e46f | ||
![]() |
a9256578f0 | ||
![]() |
05ed202904 | ||
![]() |
963b63389a | ||
![]() |
e04706dc74 | ||
![]() |
04d4ce5ce1 | ||
![]() |
24cf3730fa | ||
![]() |
0700be86e2 | ||
![]() |
7cca509eb3 | ||
![]() |
7d7193cb63 | ||
![]() |
1cf10d05ff | ||
![]() |
2ec25a7729 | ||
![]() |
2a9065a61e | ||
![]() |
7518e30dcf | ||
![]() |
dc3c80e3ce | ||
![]() |
a25f61f6be | ||
![]() |
e70fb71a04 | ||
![]() |
f499630c2b | ||
![]() |
43319a8588 | ||
![]() |
d62b943c5d | ||
![]() |
8baddf2ea3 | ||
![]() |
600482660b | ||
![]() |
72ab5c143e | ||
![]() |
96ab0e7b4c | ||
![]() |
b60903e2b4 | ||
![]() |
b4f4d3f267 | ||
![]() |
6e017c86e8 | ||
![]() |
afcfc2dca5 | ||
![]() |
59e22a12a9 | ||
![]() |
b740ac3e01 | ||
![]() |
9719f0df03 | ||
![]() |
d4be599538 | ||
![]() |
f88195c90a | ||
![]() |
3b33f7e752 | ||
![]() |
67a37294f7 | ||
![]() |
fd88955696 | ||
![]() |
9d248dbb5a | ||
![]() |
20ec4104c6 | ||
![]() |
6c232d116d | ||
![]() |
2ef78bcd40 | ||
![]() |
94ce658ab9 | ||
![]() |
d8cf4cd341 | ||
![]() |
0360337df9 | ||
![]() |
119d38ea08 | ||
![]() |
bee77afb7f | ||
![]() |
16d4b16872 | ||
![]() |
951b2346ab | ||
![]() |
b29ff0e94b | ||
![]() |
c8dd8341ca | ||
![]() |
8bcf44bc16 | ||
![]() |
50b37a8420 | ||
![]() |
22df795733 | ||
![]() |
7e3bf06db1 | ||
![]() |
6630ca595c | ||
![]() |
5d01e19ce7 | ||
![]() |
56df89f8dd | ||
![]() |
13de984ce3 | ||
![]() |
15fc0e30d7 | ||
![]() |
4289c11185 | ||
![]() |
a3f564e702 | ||
![]() |
f6734a0c98 | ||
![]() |
72fb416239 | ||
![]() |
833f5b09d2 | ||
![]() |
b21b21f30a | ||
![]() |
2f77a3f6d2 | ||
![]() |
0bda655452 | ||
![]() |
4f80bb7031 | ||
![]() |
fbe7b3cc9b | ||
![]() |
8402f0abd7 | ||
![]() |
149b2ee5a7 | ||
![]() |
f9d5af0600 | ||
![]() |
72c4ccaee8 | ||
![]() |
92999dcaf2 | ||
![]() |
5bbd318518 | ||
![]() |
8807894890 | ||
![]() |
63b7820717 | ||
![]() |
9e7e2d6977 | ||
![]() |
89e4c280ae | ||
![]() |
b6c9f29be4 | ||
![]() |
74cbbc84ed | ||
![]() |
ead4197670 | ||
![]() |
4fc69ccdc8 | ||
![]() |
f556cb44b9 | ||
![]() |
45b540d375 | ||
![]() |
af2d36a3c9 | ||
![]() |
42a4f92cfa | ||
![]() |
ccb9ed3489 | ||
![]() |
773b2aa3d1 | ||
![]() |
30d5b8d65b | ||
![]() |
763676a18c | ||
![]() |
e166ad6780 | ||
![]() |
034c96d070 | ||
![]() |
f34f8d304c | ||
![]() |
944000c05c | ||
![]() |
e2503cdb47 | ||
![]() |
52db63bca2 | ||
![]() |
55dfd9e2a1 | ||
![]() |
d193cbf2b7 | ||
![]() |
bdec56a543 | ||
![]() |
e0a6d9740c | ||
![]() |
0ce9c057e1 | ||
![]() |
12a2fdbc20 | ||
![]() |
57c294bc89 | ||
![]() |
9758757805 | ||
![]() |
f9350fa35f | ||
![]() |
e120da4ecd | ||
![]() |
328a10b70c | ||
![]() |
1ed97c8deb | ||
![]() |
91b970e2aa | ||
![]() |
99af1bb479 | ||
![]() |
11ddcbdee3 | ||
![]() |
6e8a1086d8 | ||
![]() |
c78945436e | ||
![]() |
6eff8fde74 | ||
![]() |
726d5a177e | ||
![]() |
33495b5cb3 | ||
![]() |
fe159a13a9 | ||
![]() |
22a1dc0566 | ||
![]() |
02e6b732e9 | ||
![]() |
cc6fa135ac | ||
![]() |
5747732156 | ||
![]() |
581d1617d8 | ||
![]() |
6152fd20bf | ||
![]() |
19300ca65c | ||
![]() |
2f3d744e19 | ||
![]() |
724e812972 | ||
![]() |
9a6246fd4e | ||
![]() |
34f44de59c | ||
![]() |
16e446c121 | ||
![]() |
8f232a9da9 | ||
![]() |
ebeb7f8578 | ||
![]() |
f790673068 | ||
![]() |
335ab5ab54 | ||
![]() |
00e0d6ce2c | ||
![]() |
414fb6d303 | ||
![]() |
9c35a12211 | ||
![]() |
bb4fe5174f | ||
![]() |
3ffd6ff5a2 | ||
![]() |
b05feb5bf7 | ||
![]() |
fa171f237d | ||
![]() |
f2ccb684eb | ||
![]() |
ffea6522ac | ||
![]() |
3d40a7df00 | ||
![]() |
638c41476b | ||
![]() |
c6d3088374 | ||
![]() |
0f93be9dd4 | ||
![]() |
f59982c9c5 | ||
![]() |
dff67a5e54 | ||
![]() |
6adcc3b2ed | ||
![]() |
877ed3663c | ||
![]() |
6000a82917 | ||
![]() |
6805f9b3e0 | ||
![]() |
1366c785f9 | ||
![]() |
70540b4500 | ||
![]() |
0967f23b6e | ||
![]() |
1f7d66169c | ||
![]() |
af501f5eeb | ||
![]() |
60be60c923 | ||
![]() |
48746101e0 | ||
![]() |
af9c5c6ab7 | ||
![]() |
602284d38c | ||
![]() |
26898142c2 | ||
![]() |
b0a8d7abe9 | ||
![]() |
dc2b266b75 | ||
![]() |
07bbd9506a | ||
![]() |
14bb218287 | ||
![]() |
29f238c929 | ||
![]() |
a39a1d4fa5 | ||
![]() |
15117c63f5 | ||
![]() |
507ffb6fc6 | ||
![]() |
6b2e0164cf | ||
![]() |
02e06eb1de | ||
![]() |
1b50f78733 | ||
![]() |
ead629407c | ||
![]() |
0abbc9e7dd | ||
![]() |
37681e859e | ||
![]() |
caabdc68f3 | ||
![]() |
9e97eaf24d | ||
![]() |
4cd06a789b | ||
![]() |
a3ffd968de | ||
![]() |
0cf40563aa | ||
![]() |
3e7e7f864b | ||
![]() |
6ae415e36a | ||
![]() |
6cefa3ae26 | ||
![]() |
70de3af3ea | ||
![]() |
66ed814527 | ||
![]() |
e12cc3b7a8 | ||
![]() |
93ea19d7ad | ||
![]() |
79d592b431 | ||
![]() |
c9c3a0be82 | ||
![]() |
f04be199dd | ||
![]() |
f36cb1cc66 | ||
![]() |
a5597e3df9 | ||
![]() |
7f4c28053e | ||
![]() |
ea24043b22 | ||
![]() |
44ef60c8a2 | ||
![]() |
bd68ff2cf3 | ||
![]() |
0e8a592b26 | ||
![]() |
d3b51bf94a | ||
![]() |
cc137ee1cc | ||
![]() |
c088482cef | ||
![]() |
70e3febe0a | ||
![]() |
f500cce293 | ||
![]() |
c6b836b7be | ||
![]() |
15485da1bb | ||
![]() |
7195f55a44 | ||
![]() |
176f8803eb | ||
![]() |
5a3a925a3c | ||
![]() |
29bfb9d19b | ||
![]() |
86b0dfdd33 | ||
![]() |
ab04f2fce0 | ||
![]() |
be9f836b21 | ||
![]() |
818bc96aab | ||
![]() |
14d12c21f2 | ||
![]() |
aa5250a37c | ||
![]() |
2053a041e5 | ||
![]() |
0534a0a41e | ||
![]() |
d2f9a99beb | ||
![]() |
9625047dc3 | ||
![]() |
d6b18ce536 | ||
![]() |
df00af1dfa | ||
![]() |
3570ec0430 | ||
![]() |
a111b014f8 | ||
![]() |
50eebe834a | ||
![]() |
f965e9f218 | ||
![]() |
0ac5fdab49 | ||
![]() |
39099909bf | ||
![]() |
999ce8e366 | ||
![]() |
8678e30cc8 | ||
![]() |
8a59e9d9c8 | ||
![]() |
dddace9d6a | ||
![]() |
388cb7db3a | ||
![]() |
46b74b3e1c | ||
![]() |
d53e80c88a | ||
![]() |
d8a8f36676 | ||
![]() |
dafdbbf552 | ||
![]() |
52bc52293b | ||
![]() |
0733aefb64 | ||
![]() |
aac6dec5da | ||
![]() |
d44c59ea3e | ||
![]() |
9b3c3881c4 | ||
![]() |
cdd722dca0 | ||
![]() |
9ad7a80496 | ||
![]() |
b85597b15d | ||
![]() |
ebb98d975b | ||
![]() |
c1b320710b | ||
![]() |
1201794bef | ||
![]() |
dc58c9bd2f | ||
![]() |
9787da7240 | ||
![]() |
b0f989dbac | ||
![]() |
a0ec6b8ea7 | ||
![]() |
fac6868305 | ||
![]() |
ed8fa59639 | ||
![]() |
e8edda01a9 | ||
![]() |
380a369eca | ||
![]() |
781fffee42 | ||
![]() |
69b5de3346 | ||
![]() |
0d8c83f27c | ||
![]() |
8ca58de2ba | ||
![]() |
d8cd24fab0 | ||
![]() |
f918081168 | ||
![]() |
f88fb9bc1d | ||
![]() |
062fbd7d27 | ||
![]() |
6b6af008d0 | ||
![]() |
4d35def548 | ||
![]() |
b369d6bd5c | ||
![]() |
63dfe2726c | ||
![]() |
1002d29cc2 | ||
![]() |
868240666a | ||
![]() |
02a88fdc9c | ||
![]() |
bc4adf7107 | ||
![]() |
bd67785802 | ||
![]() |
68c90e8ebe | ||
![]() |
64519a9fd4 | ||
![]() |
d21da0211c | ||
![]() |
2e919b788f | ||
![]() |
2d2056f2bd | ||
![]() |
334dabc1de | ||
![]() |
dfa2c951d6 | ||
![]() |
e28d1c7569 | ||
![]() |
9ce0f96de3 | ||
![]() |
a408b19bbe | ||
![]() |
f9a17b8021 | ||
![]() |
5eeb200913 | ||
![]() |
f87981eeee | ||
![]() |
761ae807db | ||
![]() |
643a0e6b13 | ||
![]() |
e7e5f76e9e | ||
![]() |
247acd81a9 | ||
![]() |
a2457a6ac4 | ||
![]() |
af7a320493 | ||
![]() |
4dd8b7e85d | ||
![]() |
3a4392af40 | ||
![]() |
44f70f0009 | ||
![]() |
238c4cf181 | ||
![]() |
9171c49d85 | ||
![]() |
5e967e24ff | ||
![]() |
70ac07d60e | ||
![]() |
81ee670dc2 | ||
![]() |
faf215685b | ||
![]() |
255c07d1ab | ||
![]() |
83e9711274 | ||
![]() |
0aa9201770 | ||
![]() |
534e43f72d | ||
![]() |
8f50080647 | ||
![]() |
cdc70875e5 | ||
![]() |
e6962d6fab | ||
![]() |
3703563939 | ||
![]() |
e81b145735 | ||
![]() |
7f4145ee56 | ||
![]() |
3967cf40b3 | ||
![]() |
84b0d56c4c | ||
![]() |
e081d8d4ca | ||
![]() |
b6ad7149d8 | ||
![]() |
0f36f60cb4 | ||
![]() |
1284eef9e2 | ||
![]() |
dec264ee6a | ||
![]() |
e25e1d88d6 | ||
![]() |
60a7f7f146 | ||
![]() |
897f7a031d | ||
![]() |
4feff8835c | ||
![]() |
8dfd892b71 | ||
![]() |
9e8cfd76c8 | ||
![]() |
a6a4bb6599 | ||
![]() |
5ca8a0d886 | ||
![]() |
6840496791 | ||
![]() |
0128831649 | ||
![]() |
56fa24e401 | ||
![]() |
e011870a60 | ||
![]() |
8d78ee08c1 | ||
![]() |
2752319e50 | ||
![]() |
a26c19cbd2 | ||
![]() |
f14571dc42 | ||
![]() |
484d17f53f | ||
![]() |
924119651a | ||
![]() |
c6d49dacbc | ||
![]() |
0be790fa31 | ||
![]() |
b7f6eb8290 | ||
![]() |
f1bda0b2e1 | ||
![]() |
bae44b4708 | ||
![]() |
35115607bc | ||
![]() |
51255bb446 | ||
![]() |
bd758a156e | ||
![]() |
51929fb607 | ||
![]() |
9599a31239 | ||
![]() |
9fdb125960 | ||
![]() |
534c0a6001 | ||
![]() |
58bfcfda91 | ||
![]() |
8d0802f05d | ||
![]() |
5cd8c5d229 | ||
![]() |
fa3c4436d9 | ||
![]() |
d32d95918c | ||
![]() |
34899757d5 | ||
![]() |
111dbdcd7f | ||
![]() |
0c38509f1c | ||
![]() |
652aa1f69b | ||
![]() |
dc380c38da | ||
![]() |
8555e04f50 | ||
![]() |
c23bbf81f1 | ||
![]() |
7dd7de8ff6 | ||
![]() |
2ca8bafde3 | ||
![]() |
79f6c3f1ca | ||
![]() |
fce0b315cf | ||
![]() |
56c7a8f2e4 | ||
![]() |
5ef2f157f2 | ||
![]() |
738afbe475 | ||
![]() |
791a81a4c7 | ||
![]() |
aa82d7a2c9 | ||
![]() |
f57d2e54d2 | ||
![]() |
fea1a2e51b | ||
![]() |
bda5347f1e | ||
![]() |
98d9c37922 | ||
![]() |
e3bde41a25 | ||
![]() |
5fb2f7749d | ||
![]() |
a56bdf2372 | ||
![]() |
9d991df32f | ||
![]() |
c4a3f89d1c | ||
![]() |
ea223bab51 | ||
![]() |
dd94392317 | ||
![]() |
baa2845916 | ||
![]() |
97ae4ea13e | ||
![]() |
d1c5f0c70f | ||
![]() |
95bff3005f | ||
![]() |
c0b06496b1 | ||
![]() |
2105e1f259 | ||
![]() |
e546414c2f | ||
![]() |
1f4660a930 | ||
![]() |
a2165c2e01 | ||
![]() |
1af920739f | ||
![]() |
868e8228f0 | ||
![]() |
2bbc74560d | ||
![]() |
5d2caa456d | ||
![]() |
9069a99a15 | ||
![]() |
fa56a44d85 | ||
![]() |
248acaee75 | ||
![]() |
ef75f12abe | ||
![]() |
854814c226 | ||
![]() |
b6a322f447 | ||
![]() |
161b9602f4 | ||
![]() |
62669bff07 | ||
![]() |
02bd299714 | ||
![]() |
f71dabfbfa | ||
![]() |
8d31cedafc | ||
![]() |
a88d6c1c47 | ||
![]() |
d35a13fc0b | ||
![]() |
8e4029c1cd | ||
![]() |
9a9f852540 | ||
![]() |
c66497a4de | ||
![]() |
1f9ecbf0be | ||
![]() |
423a6f7013 | ||
![]() |
ef0ca38362 | ||
![]() |
ae9bfd69b0 | ||
![]() |
3d231c3456 | ||
![]() |
95d0d0047a | ||
![]() |
d05aee19f2 | ||
![]() |
125765faa6 | ||
![]() |
70c0b1d8c0 | ||
![]() |
72e8660ae3 | ||
![]() |
2127bf32c2 | ||
![]() |
2b9acc239e | ||
![]() |
47a6188097 | ||
![]() |
8abce1469a | ||
![]() |
8a2bee2136 | ||
![]() |
e7a532f0cc | ||
![]() |
2cb1678577 | ||
![]() |
d249bc6575 | ||
![]() |
e409b45873 | ||
![]() |
f2d26c1909 | ||
![]() |
898e3d7138 | ||
![]() |
78cc0f7b6f | ||
![]() |
b14ca6a464 | ||
![]() |
4691c1259a | ||
![]() |
69f07cb015 | ||
![]() |
a426f4c7bd | ||
![]() |
3430a2d093 | ||
![]() |
4ecc8c799d | ||
![]() |
fa02a58fc4 | ||
![]() |
2905d172b8 | ||
![]() |
5f6e5e4c8b | ||
![]() |
d68c2a0170 | ||
![]() |
76c7ad5e24 | ||
![]() |
1cf65a0145 | ||
![]() |
0c8602f1d5 | ||
![]() |
2dc4990804 | ||
![]() |
47ecd2e900 | ||
![]() |
01d8e9cf4e | ||
![]() |
da52f980c4 | ||
![]() |
366b7ef946 | ||
![]() |
0e7c0fd528 | ||
![]() |
fb28b238cf | ||
![]() |
b375bbc75c | ||
![]() |
74ebd6e4a0 | ||
![]() |
72f2b92d4f | ||
![]() |
178eeec041 | ||
![]() |
7ff950b5e3 | ||
![]() |
11409b723e | ||
![]() |
a59c8b4f57 | ||
![]() |
690e273257 | ||
![]() |
0133a1ba97 | ||
![]() |
809b0e67a6 | ||
![]() |
a702271efd | ||
![]() |
ec4f8ddd3e | ||
![]() |
839f66c82f | ||
![]() |
9ae2775452 | ||
![]() |
c9818358ee | ||
![]() |
6e3a88ffcb | ||
![]() |
4c54d68fad | ||
![]() |
c351ba7820 | ||
![]() |
3c2d72f611 | ||
![]() |
f557407589 | ||
![]() |
a0a4ce4dd9 | ||
![]() |
281971f4a4 | ||
![]() |
12b13e974c | ||
![]() |
9d27fa7eaa | ||
![]() |
9f1385b03a | ||
![]() |
8c019a6d0b | ||
![]() |
87faf5942c | ||
![]() |
8c9977c136 | ||
![]() |
1ffa66af4f | ||
![]() |
3d5d2de80b | ||
![]() |
12c313235e | ||
![]() |
c63acba0a5 | ||
![]() |
5aaf8e6308 | ||
![]() |
f7d6d41a90 | ||
![]() |
0d79a41527 | ||
![]() |
fef8c14586 | ||
![]() |
1bfd4cfc34 | ||
![]() |
a8e48e06a1 | ||
![]() |
d59dd7e44a | ||
![]() |
e5431648fd | ||
![]() |
2ddbca4641 | ||
![]() |
d944827f3d | ||
![]() |
bd01d81d1d | ||
![]() |
9d52bd9ae8 | ||
![]() |
4f782ac219 | ||
![]() |
77377ba63f | ||
![]() |
6afb985121 | ||
![]() |
47fb538311 | ||
![]() |
5644a2ff0b | ||
![]() |
c87aeb6cc4 | ||
![]() |
37ce882337 | ||
![]() |
afc2efee1b | ||
![]() |
8f79f862b9 | ||
![]() |
016386b350 | ||
![]() |
ab16fb3a3f | ||
![]() |
973b1e42ef | ||
![]() |
bd1f3a2f01 | ||
![]() |
5d82443389 | ||
![]() |
43eb8bd99b | ||
![]() |
06e77a4f16 | ||
![]() |
0ca2c313ec | ||
![]() |
c0b70e87bc | ||
![]() |
5a76716b5a | ||
![]() |
3f9e5fffbe | ||
![]() |
90346a6b5f | ||
![]() |
57fda16c9c | ||
![]() |
ae409bdaea | ||
![]() |
a560427b95 | ||
![]() |
cd57d7035a | ||
![]() |
7753e8f169 | ||
![]() |
e352832096 | ||
![]() |
63cc7b5a75 | ||
![]() |
753176588f | ||
![]() |
10c1296a7c | ||
![]() |
76b5c32e31 | ||
![]() |
abe14c1665 | ||
![]() |
ba1b1a73b6 | ||
![]() |
f0b86edb53 | ||
![]() |
ce0f405d1e | ||
![]() |
f1af362117 | ||
![]() |
d2b1b30ef5 | ||
![]() |
aa9b8a7ca5 | ||
![]() |
e3bd8b1c21 | ||
![]() |
3b67350e8c | ||
![]() |
4db098d01d | ||
![]() |
1133b340e9 | ||
![]() |
4bf5a28804 | ||
![]() |
1872fd4547 | ||
![]() |
dc6c5104d4 | ||
![]() |
3a3f3f7663 | ||
![]() |
e8b14d5570 | ||
![]() |
9aed2632f7 | ||
![]() |
d1dd2d3c18 | ||
![]() |
48a17629bb | ||
![]() |
cc4a7c1a16 | ||
![]() |
b57dd8de40 | ||
![]() |
ce0c27b687 | ||
![]() |
39d05b75db | ||
![]() |
83bbd6b64f | ||
![]() |
95e5800b36 | ||
![]() |
f0c031ecdb | ||
![]() |
858efafe77 | ||
![]() |
0a7c0f30fd | ||
![]() |
1a4b92a8a4 | ||
![]() |
b9837ae7f3 | ||
![]() |
0a05413e22 | ||
![]() |
c264ec49e9 | ||
![]() |
918cf2df28 | ||
![]() |
28d46d0097 | ||
![]() |
b54340c3dc | ||
![]() |
c875401cd6 | ||
![]() |
d02dfefd30 | ||
![]() |
5ff8a9ab44 | ||
![]() |
d6c3c0fa4f | ||
![]() |
ceda2ca896 | ||
![]() |
85114ebd74 | ||
![]() |
fe30e4e3a5 | ||
![]() |
623eb37b64 | ||
![]() |
1a91b6d03e | ||
![]() |
a92221e6f3 | ||
![]() |
8004d6c46a | ||
![]() |
b1731f9ab6 | ||
![]() |
a8d280cfba | ||
![]() |
ed86218817 | ||
![]() |
ee09143676 | ||
![]() |
79821f00fb | ||
![]() |
e30e2fdf3e | ||
![]() |
1c77fd93c0 | ||
![]() |
725ba338a7 | ||
![]() |
62c8435437 | ||
![]() |
f2649e25b7 | ||
![]() |
c5e1233d11 | ||
![]() |
8bc276489d | ||
![]() |
c2620629ba | ||
![]() |
564cf5a413 | ||
![]() |
5c4219fbd0 | ||
![]() |
6d77178d61 | ||
![]() |
45a44c137e | ||
![]() |
269bb041bc | ||
![]() |
c5ef18bc7a | ||
![]() |
089fff7d0f | ||
![]() |
7b92bfcdda | ||
![]() |
34a18fe104 | ||
![]() |
bfb312de44 | ||
![]() |
41672a72c6 | ||
![]() |
49d11a6986 | ||
![]() |
59f3d775ce | ||
![]() |
1dd58d9887 | ||
![]() |
1193f1dba3 | ||
![]() |
43c3bb61a3 | ||
![]() |
22db8b7ae0 | ||
![]() |
4ff95be53b | ||
![]() |
0d6ccd489d | ||
![]() |
746b9478b4 | ||
![]() |
14dfd8fb04 | ||
![]() |
4e49160f09 | ||
![]() |
03ef7826c1 | ||
![]() |
a1eca0ff65 | ||
![]() |
7f190469fa | ||
![]() |
d3d79b56b3 | ||
![]() |
e2d297ebc0 | ||
![]() |
33aad0f436 | ||
![]() |
b5c93d87bc | ||
![]() |
8989986ee7 | ||
![]() |
beb8da9283 | ||
![]() |
fd1eea21d2 | ||
![]() |
46a953a9d8 | ||
![]() |
46ef86e478 | ||
![]() |
fa1a85f682 | ||
![]() |
e477de6dd0 | ||
![]() |
d5f92eed8c | ||
![]() |
7cdb790f4e | ||
![]() |
43f1a15970 | ||
![]() |
c67c076ab3 | ||
![]() |
3297639d09 | ||
![]() |
20bb851c4e | ||
![]() |
728dd446b3 | ||
![]() |
f8abc8193b | ||
![]() |
e7d1b6ec00 | ||
![]() |
83c819a130 | ||
![]() |
d29459fa37 | ||
![]() |
100557e975 | ||
![]() |
102aaeb390 | ||
![]() |
67b3461c24 | ||
![]() |
5e4a0fd4ec | ||
![]() |
f840d491e5 | ||
![]() |
521a203b06 | ||
![]() |
8f175186bc | ||
![]() |
ddb413ca52 | ||
![]() |
5415b67baa | ||
![]() |
454563c9df | ||
![]() |
19f6af475a | ||
![]() |
65a3bac543 | ||
![]() |
f91a53d893 | ||
![]() |
f848e3f226 | ||
![]() |
bc94878225 | ||
![]() |
bcf52bb2c3 | ||
![]() |
2c25188f70 | ||
![]() |
567aeacff5 | ||
![]() |
4b9168e596 | ||
![]() |
8b79b28916 | ||
![]() |
45706cc0ef | ||
![]() |
c1e3f4e68e | ||
![]() |
6cbbc97893 | ||
![]() |
fa09523821 | ||
![]() |
7cb527d9ba | ||
![]() |
5320f29fb0 | ||
![]() |
7527af4656 | ||
![]() |
6adb92b074 | ||
![]() |
6dc3844682 | ||
![]() |
bfb16c27ee | ||
![]() |
ed1cc0b81c | ||
![]() |
c66c1c9d2a | ||
![]() |
1748fcf909 | ||
![]() |
bdac8d58ae | ||
![]() |
4e21801163 | ||
![]() |
4929687956 | ||
![]() |
4ba7ad8a4b | ||
![]() |
800fdaeaef | ||
![]() |
08a89a924d | ||
![]() |
5b057d2275 | ||
![]() |
bdc9bd1345 | ||
![]() |
d8dc677906 | ||
![]() |
9c312b0e26 | ||
![]() |
8d28f68e0b | ||
![]() |
317c9308cc | ||
![]() |
01cd3de5b3 | ||
![]() |
bc2774093a | ||
![]() |
afb999187f | ||
![]() |
54d0598d92 | ||
![]() |
163e60e32e | ||
![]() |
ccbcc2a738 | ||
![]() |
07e1882401 | ||
![]() |
e56589d19e | ||
![]() |
bfb5367d27 | ||
![]() |
712c0ef27d | ||
![]() |
94b2ddef45 | ||
![]() |
b84a83adf4 | ||
![]() |
c8514f58c6 | ||
![]() |
841ddb036b | ||
![]() |
982a37a413 | ||
![]() |
741af7cce5 | ||
![]() |
9954080672 | ||
![]() |
f47f4b4a5c | ||
![]() |
1a3fab9cd9 | ||
![]() |
b683bf6f18 | ||
![]() |
976ae1bf44 | ||
![]() |
ffc63383dc | ||
![]() |
c6ea6de5c2 | ||
![]() |
fe812530d8 | ||
![]() |
75d07175ae | ||
![]() |
544580bd8b | ||
![]() |
d30d307f80 | ||
![]() |
5ccdfe258c | ||
![]() |
8f8b550608 | ||
![]() |
7836d0b059 | ||
![]() |
4b9cbe9ca7 | ||
![]() |
034b223f8f | ||
![]() |
f87326620b | ||
![]() |
b4a526ed18 | ||
![]() |
410cc171c6 | ||
![]() |
558b897700 | ||
![]() |
e804757d83 | ||
![]() |
bd434ed02d | ||
![]() |
df89f5c8b8 | ||
![]() |
3aebd8311f | ||
![]() |
f025296331 | ||
![]() |
1a58a962bb | ||
![]() |
079d6b0de8 | ||
![]() |
321841101b | ||
![]() |
8071ca0d66 | ||
![]() |
c1141c5267 | ||
![]() |
f1fdd4524d | ||
![]() |
02dd2c7f1a | ||
![]() |
fc3a323a21 | ||
![]() |
d92f501b50 | ||
![]() |
be408ba6ea | ||
![]() |
c81a204e0c | ||
![]() |
fce1d619e8 | ||
![]() |
3e146d5f94 | ||
![]() |
cb5c0ac2f5 | ||
![]() |
4798657b70 | ||
![]() |
f565e60bcf | ||
![]() |
89461c598f | ||
![]() |
b320d08a5e | ||
![]() |
a930d4fc7b | ||
![]() |
d42197fc2e | ||
![]() |
2d3138af76 | ||
![]() |
4ee4b6f332 | ||
![]() |
fc6c048fad | ||
![]() |
dae9c4288d | ||
![]() |
9f37149369 | ||
![]() |
e476647ab8 | ||
![]() |
eb23be979c | ||
![]() |
6d9d6a6779 | ||
![]() |
1c0cb1ae71 | ||
![]() |
0ba5dc3900 | ||
![]() |
872717feeb | ||
![]() |
85b51f06a4 | ||
![]() |
94df60d054 | ||
![]() |
7395284480 | ||
![]() |
b537fa5467 | ||
![]() |
dca58c20d2 | ||
![]() |
0a3030f7d0 | ||
![]() |
81cc6f3104 | ||
![]() |
cc0b9c6933 | ||
![]() |
5671f1c6a4 | ||
![]() |
89dee86f39 | ||
![]() |
b414068ada | ||
![]() |
3be7952e9f | ||
![]() |
137b5da4aa | ||
![]() |
2ee1639acb | ||
![]() |
a05b184595 | ||
![]() |
f3bacae1dc | ||
![]() |
af5fb99fe6 | ||
![]() |
0ebe4ad7a3 | ||
![]() |
0cf99037c8 | ||
![]() |
b913debc57 | ||
![]() |
abe3f1f5e9 | ||
![]() |
d30b88364c | ||
![]() |
4840b7acf7 | ||
![]() |
f5bac11fae | ||
![]() |
68a70a94fc | ||
![]() |
bf7436ddf8 | ||
![]() |
b99155a084 | ||
![]() |
027e62a6ea | ||
![]() |
c6b6c8afbd | ||
![]() |
1236a09247 | ||
![]() |
6a4d38045e | ||
![]() |
281aed2797 | ||
![]() |
3e47f9943a | ||
![]() |
f6d27dd17d | ||
![]() |
073704c7af | ||
![]() |
809db02ca2 | ||
![]() |
2e45ff6a32 | ||
![]() |
02d6974be9 | ||
![]() |
e530afb2fe | ||
![]() |
dba15f0e8b | ||
![]() |
8f771c60c5 | ||
![]() |
d9b1ca8c48 | ||
![]() |
9e247c119a | ||
![]() |
08b5e21e96 | ||
![]() |
2101d3aa5b | ||
![]() |
aa80fb5d4a | ||
![]() |
63727f6514 | ||
![]() |
ade35cbb2d | ||
![]() |
6ec9059ccc | ||
![]() |
c93d1711cf | ||
![]() |
e734ad0413 | ||
![]() |
047dee3a70 | ||
![]() |
8c76089caf | ||
![]() |
ab6cf2dba3 | ||
![]() |
65a309e605 | ||
![]() |
f37e713640 | ||
![]() |
bc1e9245bd | ||
![]() |
2fa82bde16 | ||
![]() |
140249172c | ||
![]() |
9677d1288a | ||
![]() |
133ae7d171 | ||
![]() |
5b92a43361 | ||
![]() |
b839bf6918 | ||
![]() |
7ea4ba1d5a | ||
![]() |
f000dbd657 | ||
![]() |
36e4a24527 | ||
![]() |
861cc83014 | ||
![]() |
d2b273dc3b | ||
![]() |
e49ad120f3 | ||
![]() |
6f441f35ec | ||
![]() |
14a5c429bb | ||
![]() |
100125ad5a | ||
![]() |
f8c414aafc | ||
![]() |
14aedb07aa | ||
![]() |
40b01e0ad3 | ||
![]() |
f9f6718174 | ||
![]() |
c41723b09f | ||
![]() |
1b6effd369 | ||
![]() |
1bbf7a45a8 | ||
![]() |
0a5e021128 | ||
![]() |
52ebde60fc | ||
![]() |
c77cf79f5d | ||
![]() |
1233abe5b0 | ||
![]() |
f2f2b09ff1 | ||
![]() |
5bf87b7efe | ||
![]() |
526321adb6 | ||
![]() |
f816daa59e | ||
![]() |
5d6f75ec05 | ||
![]() |
28994d001c | ||
![]() |
9e7b6790fd | ||
![]() |
8fae064156 | ||
![]() |
8451f4830c | ||
![]() |
deded2bcf7 | ||
![]() |
51fcaff90e | ||
![]() |
ce8794f7dd | ||
![]() |
c61abc3327 | ||
![]() |
2bff683d52 | ||
![]() |
4c408c7330 | ||
![]() |
4505a80383 | ||
![]() |
ed3e46953d | ||
![]() |
79fd6c202b | ||
![]() |
aef25ef565 | ||
![]() |
a53d786515 | ||
![]() |
27b8b81d4e | ||
![]() |
369d9d5641 | ||
![]() |
56b77d3cf8 | ||
![]() |
0d2eb2c07c | ||
![]() |
5bc1fe1f2c | ||
![]() |
83bf229f5b | ||
![]() |
492d550410 | ||
![]() |
22a72d87ea | ||
![]() |
d5ef52ec17 | ||
![]() |
42c811a523 | ||
![]() |
51e3c11acb | ||
![]() |
b9ab18f5a9 | ||
![]() |
00357c2f07 | ||
![]() |
2f756c9988 | ||
![]() |
4c55a19c6d | ||
![]() |
a6eb0971a4 | ||
![]() |
2e25e000de | ||
![]() |
e3a15532bf | ||
![]() |
3dcf721c53 | ||
![]() |
b20b975935 | ||
![]() |
2e6905c74c | ||
![]() |
8bb97f2e4c | ||
![]() |
684a8531b6 | ||
![]() |
0b6ee98f05 | ||
![]() |
a66225c67f | ||
![]() |
67f1d76efe | ||
![]() |
fdd14c601a | ||
![]() |
5fb31512c4 | ||
![]() |
8ab0581661 | ||
![]() |
f71d9adb75 | ||
![]() |
26f44edfd2 | ||
![]() |
71d3265ddd | ||
![]() |
484fe48076 | ||
![]() |
b6f60f3785 | ||
![]() |
eb1aa1ef47 | ||
![]() |
1f1955490d | ||
![]() |
533af40ac6 | ||
![]() |
e2f61e36e1 | ||
![]() |
aeb59f5bb8 | ||
![]() |
501bb9638f | ||
![]() |
2f96db4e45 | ||
![]() |
c88dba2364 | ||
![]() |
f146d7bcb6 | ||
![]() |
5b4de85926 | ||
![]() |
f6449a7f32 | ||
![]() |
42849da497 | ||
![]() |
f044ea7c85 | ||
![]() |
d1f8b4e8d6 | ||
![]() |
69520b7c96 | ||
![]() |
43d09a19c5 | ||
![]() |
c85caef2d0 | ||
![]() |
8c02039e44 | ||
![]() |
6245555e9a | ||
![]() |
d119f2a0f1 | ||
![]() |
ee8d1cfdc9 | ||
![]() |
69a79fa191 | ||
![]() |
ee48a049fe | ||
![]() |
e7908ab8bb | ||
![]() |
c2edb0e393 | ||
![]() |
ec5b2ce30b | ||
![]() |
4c36e545ba | ||
![]() |
7f846f114d | ||
![]() |
58abaa723d | ||
![]() |
853ee415ae | ||
![]() |
ff6409be3f | ||
![]() |
7ce7bd8a30 | ||
![]() |
6af37026c9 | ||
![]() |
a4966573a8 | ||
![]() |
18b2a5f105 | ||
![]() |
03bdbd13c8 | ||
![]() |
5e60e81a98 | ||
![]() |
91d2738d6c | ||
![]() |
01db424280 | ||
![]() |
532e0bcf01 | ||
![]() |
32de11c4bb | ||
![]() |
3187cb69ec | ||
![]() |
aec8a9f70d | ||
![]() |
0cc9f4661b | ||
![]() |
0483412c3c | ||
![]() |
e22a08d8c9 | ||
![]() |
2aa94faa50 | ||
![]() |
575b00b7b1 | ||
![]() |
d66c57dabe | ||
![]() |
07f7b33fd9 | ||
![]() |
8abb20d24e | ||
![]() |
dfdff31b3c | ||
![]() |
32e34bc72d | ||
![]() |
29e69785c6 | ||
![]() |
01e7c0175e | ||
![]() |
e52246a5f0 | ||
![]() |
7d78972528 | ||
![]() |
2be5b2eb03 | ||
![]() |
d379d295db | ||
![]() |
eabd6f2b0e | ||
![]() |
b05d80a7e6 | ||
![]() |
9e518e8b66 | ||
![]() |
7981bd3080 | ||
![]() |
880f552001 | ||
![]() |
6e75942dda | ||
![]() |
254fbbbc75 | ||
![]() |
a97296df45 | ||
![]() |
7e83dfd4bc | ||
![]() |
53eeb0e446 | ||
![]() |
f3e1e27b61 | ||
![]() |
4952a6050b | ||
![]() |
48a9eee425 | ||
![]() |
670ccead0b | ||
![]() |
1bfaf1728f | ||
![]() |
4ff138c35e | ||
![]() |
07162ff341 | ||
![]() |
bf3100b012 | ||
![]() |
724675378f | ||
![]() |
cafb702d87 | ||
![]() |
2b41542330 | ||
![]() |
8db7797ed7 | ||
![]() |
de92233314 | ||
![]() |
1942305b77 | ||
![]() |
590e13a2bf | ||
![]() |
94e8661441 | ||
![]() |
cda3baa1ae | ||
![]() |
e6eb1b2ae1 | ||
![]() |
ddad9da1c1 | ||
![]() |
db4cbbd9fa | ||
![]() |
81ef070129 | ||
![]() |
cab6699ac6 | ||
![]() |
5bb4ab1a2c | ||
![]() |
93af018037 | ||
![]() |
30148d47b1 | ||
![]() |
0a4460f035 | ||
![]() |
4de7eb6e62 | ||
![]() |
3942fb4707 | ||
![]() |
41d0881f51 | ||
![]() |
794a49a591 | ||
![]() |
1dd9821da2 | ||
![]() |
b1eb2aadbc | ||
![]() |
706028b20a | ||
![]() |
1a2d0303bf | ||
![]() |
c0d7cbca88 | ||
![]() |
1af05ed96a | ||
![]() |
96b05f7884 | ||
![]() |
553e1890d1 | ||
![]() |
cc486a3313 | ||
![]() |
565d61674d | ||
![]() |
f1581a9375 | ||
![]() |
e6c4ba8133 | ||
![]() |
db9132987c | ||
![]() |
0d0c45a4cf | ||
![]() |
4c3dccfc0b | ||
![]() |
1075e3a005 | ||
![]() |
a54ffb2896 | ||
![]() |
74abc85518 | ||
![]() |
b917113d9b | ||
![]() |
68a11ea2ff | ||
![]() |
ad72e7b624 | ||
![]() |
7704aca20e | ||
![]() |
1f472b484f | ||
![]() |
749e778939 | ||
![]() |
e175a6ec9f | ||
![]() |
dad8fff12d | ||
![]() |
a6a175ede1 | ||
![]() |
a01607fd97 | ||
![]() |
345084a764 | ||
![]() |
27582319fa | ||
![]() |
44bb99259c | ||
![]() |
9b0e83d971 | ||
![]() |
db882ebb6f | ||
![]() |
c501bf4e16 | ||
![]() |
c0eb873feb | ||
![]() |
0926c92245 | ||
![]() |
e880d7da6c | ||
![]() |
6ad90ecfa8 | ||
![]() |
fbd51f0079 | ||
![]() |
60b60fda8d | ||
![]() |
612db86141 | ||
![]() |
49911d15d3 | ||
![]() |
8a1aa08200 | ||
![]() |
64bd853b07 | ||
![]() |
e7890eb6b9 | ||
![]() |
b59db33435 | ||
![]() |
ef5a4bc078 | ||
![]() |
f662319bf1 | ||
![]() |
83277ccbaf | ||
![]() |
bf1a4a4be3 | ||
![]() |
7bd39f44a7 | ||
![]() |
0b5ac1daec | ||
![]() |
3f86bf6557 | ||
![]() |
a251c9a1a7 | ||
![]() |
c696666b32 | ||
![]() |
a8ade110e6 | ||
![]() |
f5cad1b142 | ||
![]() |
b247852bf8 | ||
![]() |
c5feafb893 | ||
![]() |
99e6769f48 | ||
![]() |
c78e75db78 | ||
![]() |
d90292eb0c | ||
![]() |
c972869688 | ||
![]() |
409967a17f | ||
![]() |
ed848c986c | ||
![]() |
d6cbfa5b06 | ||
![]() |
d032e89f48 | ||
![]() |
c6c58daaef | ||
![]() |
f9c1923fa8 | ||
![]() |
dc36113c06 | ||
![]() |
f4a5ef8292 | ||
![]() |
f221c4da64 | ||
![]() |
b1716a1dda | ||
![]() |
b25a8ef5d4 | ||
![]() |
4317e76104 | ||
![]() |
1529a2eded | ||
![]() |
893bac8b3b | ||
![]() |
605700b98e | ||
![]() |
4ad51672c1 | ||
![]() |
89a58dc596 | ||
![]() |
e1672e539b | ||
![]() |
518f6e9677 | ||
![]() |
1e61ea1591 | ||
![]() |
90a4fe471d | ||
![]() |
b2368b04db | ||
![]() |
d253df4574 | ||
![]() |
cf0351225f | ||
![]() |
a1692ebc7c | ||
![]() |
5c38084af5 | ||
![]() |
a090d6e820 | ||
![]() |
12cd3714e0 | ||
![]() |
e08b2a9481 | ||
![]() |
b452ad2fb5 | ||
![]() |
fa43a70019 | ||
![]() |
5861f6da5d | ||
![]() |
c56d5a2154 | ||
![]() |
e03fcfe297 | ||
![]() |
6ab00d5249 | ||
![]() |
15c726ff24 | ||
![]() |
377a920c24 | ||
![]() |
7d6766a514 | ||
![]() |
23d452b99e | ||
![]() |
6fb112d000 | ||
![]() |
14f7ff13ec | ||
![]() |
05dd381502 | ||
![]() |
859c0c3491 | ||
![]() |
8b00648295 | ||
![]() |
829b4012e6 | ||
![]() |
1d49cb475d | ||
![]() |
4ff6ec7767 | ||
![]() |
98fff94f89 | ||
![]() |
3063bb7ac1 | ||
![]() |
a0fa5666c6 | ||
![]() |
f9cd25c424 | ||
![]() |
161bce1a42 | ||
![]() |
66437f31c0 | ||
![]() |
34186cf45f | ||
![]() |
f59209aaa3 | ||
![]() |
2b542ee337 | ||
![]() |
dac56eb677 | ||
![]() |
7069623c9a | ||
![]() |
6699081ad0 | ||
![]() |
b6a8a80ff4 | ||
![]() |
5db472f552 | ||
![]() |
bb75e2cc59 | ||
![]() |
14a8301e1f | ||
![]() |
f7ca7e127a | ||
![]() |
394066b271 | ||
![]() |
c99418250e | ||
![]() |
7be1e1cf74 | ||
![]() |
97a08558de | ||
![]() |
117a40cbf1 | ||
![]() |
a149487a3e | ||
![]() |
1992b08dcf | ||
![]() |
c773f207d2 | ||
![]() |
e127341228 | ||
![]() |
dd8f43d85e | ||
![]() |
4e0f34ce1d | ||
![]() |
eb5543aae3 | ||
![]() |
2c3059fcbf | ||
![]() |
49c4c007bc | ||
![]() |
f14acd70b7 | ||
![]() |
a9e085dc39 | ||
![]() |
b783d6bab4 | ||
![]() |
dfc9693a0e | ||
![]() |
c039498e8b | ||
![]() |
d5e567a8e3 | ||
![]() |
f3f8451184 | ||
![]() |
3e8f319821 | ||
![]() |
b03ccead4b | ||
![]() |
c54e4672e8 | ||
![]() |
b92377097c | ||
![]() |
fcc59f877c | ||
![]() |
87ef08cf7a | ||
![]() |
3d19d4ae52 | ||
![]() |
7d881427d4 | ||
![]() |
87862ba18b | ||
![]() |
3853255638 | ||
![]() |
12c624fa58 | ||
![]() |
97c4758de2 | ||
![]() |
f20c08f0f7 | ||
![]() |
1641d6bce2 | ||
![]() |
f5d2cb5c61 | ||
![]() |
26941f62c6 | ||
![]() |
06461bb9ee | ||
![]() |
9f4624283d | ||
![]() |
d4b696d03a | ||
![]() |
219fdecc50 | ||
![]() |
7af9ad9869 | ||
![]() |
a858dd4453 | ||
![]() |
f47377d181 | ||
![]() |
bc197bc958 | ||
![]() |
1836dd7312 | ||
![]() |
b844a8e9d5 | ||
![]() |
a4ed163b62 | ||
![]() |
f40e1ff0cc | ||
![]() |
d261fdbbc0 | ||
![]() |
6b0a42af27 | ||
![]() |
107d9fd2c8 | ||
![]() |
4116b9eaf2 | ||
![]() |
ecd71ef5ff | ||
![]() |
058602352c | ||
![]() |
59c39fab13 | ||
![]() |
ab4f97ff20 | ||
![]() |
79640d6861 | ||
![]() |
d305c7e401 | ||
![]() |
8afaca36d9 | ||
![]() |
9950fafff7 | ||
![]() |
0d9857db63 | ||
![]() |
10c932876d | ||
![]() |
d5d7a527a0 | ||
![]() |
9eb8595130 | ||
![]() |
8c46e5b3d9 | ||
![]() |
73bd877993 | ||
![]() |
de6cbf8a22 | ||
![]() |
89f618d732 | ||
![]() |
4955df3911 | ||
![]() |
6785f50a1f | ||
![]() |
a549327170 | ||
![]() |
1f018d87f2 | ||
![]() |
769ee734fa | ||
![]() |
6419185228 | ||
![]() |
b77cbeca22 | ||
![]() |
4cce10a7d7 | ||
![]() |
1a6fd7d72e | ||
![]() |
97ce939a73 | ||
![]() |
3f2a7a561e | ||
![]() |
332af15e3c | ||
![]() |
fe184ce84a | ||
![]() |
661c7f45ba | ||
![]() |
01c0545409 | ||
![]() |
c6492d3d58 | ||
![]() |
638a2ab684 | ||
![]() |
650f79d0fd | ||
![]() |
a64817cea1 | ||
![]() |
c32c3c1370 | ||
![]() |
29ad7ab0cf | ||
![]() |
11716fa9d3 | ||
![]() |
210f11ffd8 | ||
![]() |
814751d76a | ||
![]() |
440cf139bb | ||
![]() |
276d8ffc66 | ||
![]() |
d9cdc1f079 | ||
![]() |
414c600356 | ||
![]() |
e37c19fdcd | ||
![]() |
d69b919961 | ||
![]() |
1311db8060 | ||
![]() |
ed9e7520f1 | ||
![]() |
8fe6da0cad | ||
![]() |
b8eac630ed | ||
![]() |
a5b9d7eb3b | ||
![]() |
06c453c3bc | ||
![]() |
97b7567770 | ||
![]() |
34345ea8a7 | ||
![]() |
fc166b7bee | ||
![]() |
cf3112c7c0 | ||
![]() |
e7dd74a443 | ||
![]() |
b5acf15877 | ||
![]() |
f62603fd9d | ||
![]() |
d000b9e7cd | ||
![]() |
0e1f858dfd | ||
![]() |
bcf28282f6 | ||
![]() |
abfbb068d7 | ||
![]() |
9643a87320 | ||
![]() |
b3817240b8 | ||
![]() |
8d53f8639e | ||
![]() |
f850283147 | ||
![]() |
27f90b61e6 | ||
![]() |
c9a57fe8fe | ||
![]() |
9516f2fa63 | ||
![]() |
7be88b7816 | ||
![]() |
faabb039a5 | ||
![]() |
15e4cf1243 | ||
![]() |
75764e59e1 | ||
![]() |
f664cf09c0 | ||
![]() |
0c3e9dd5e0 | ||
![]() |
0bc7d28f58 | ||
![]() |
17bb34941b | ||
![]() |
04cd3377ee | ||
![]() |
326bd5e094 | ||
![]() |
987799e9db | ||
![]() |
19c846afaf | ||
![]() |
ea9265b30b | ||
![]() |
0516353afd | ||
![]() |
5f1b726bab | ||
![]() |
ed130ca82c | ||
![]() |
9f22f924f1 | ||
![]() |
a8083eb52b | ||
![]() |
665afccb45 | ||
![]() |
372bfaceda | ||
![]() |
1625b37b44 | ||
![]() |
72c1352acf | ||
![]() |
2f2a945905 | ||
![]() |
9870e73069 | ||
![]() |
f2874d778a | ||
![]() |
e9940c9221 | ||
![]() |
7797a0746a | ||
![]() |
6df010a71e | ||
![]() |
671c5e7c12 | ||
![]() |
ec4ed8fb2d | ||
![]() |
34786130b7 | ||
![]() |
6cb520cd2c | ||
![]() |
47ce59d555 | ||
![]() |
985a105930 | ||
![]() |
52560dd986 | ||
![]() |
de81502fdf | ||
![]() |
51876bac62 | ||
![]() |
a5b994259e | ||
![]() |
c85c825bad | ||
![]() |
1cd1c31467 | ||
![]() |
8984e3131d | ||
![]() |
93fa28991e | ||
![]() |
b694bf1f41 | ||
![]() |
0bbfbfc762 | ||
![]() |
319f525199 | ||
![]() |
ee62f6e356 | ||
![]() |
0f27b62924 | ||
![]() |
6274f6f2f6 | ||
![]() |
32da569ef6 | ||
![]() |
1625fdc2f4 | ||
![]() |
a0795b1afe | ||
![]() |
c512c07630 | ||
![]() |
105623e398 | ||
![]() |
6c75bc6d51 | ||
![]() |
a068741d05 | ||
![]() |
4e83106853 | ||
![]() |
0b688a909e | ||
![]() |
fabcad6db9 |
@@ -1,57 +1,136 @@
|
||||
# サーバーのメンテナ情報
|
||||
name: example-instance-name # Name of your instance
|
||||
description: example-description # Description of your instance
|
||||
|
||||
maintainer:
|
||||
# メンテナの名前
|
||||
name:
|
||||
name: example-maitainer-name # Your name
|
||||
url: http://example.com/ # Your contact (http or mailto)
|
||||
repository_url: https://github.com/syuilo/misskey # Repository URL
|
||||
feedback_url: https://github.com/syuilo/misskey/issues # Feedback URL (e.g. github issue)
|
||||
|
||||
# メンテナの連絡先(URLかmailto形式のURL)
|
||||
url:
|
||||
# URL and Port settings overview
|
||||
# e.g., If you want to realize following structure:
|
||||
#
|
||||
# +--- https://example.com:123 ----------+
|
||||
# +------+ |+-------------+ +---------------+|
|
||||
# | User | ---> || Proxy (123) | ---> | Misskey (456) ||
|
||||
# +------+ |+-------------+ +---------------+|
|
||||
# +--------------------------------------+
|
||||
#
|
||||
# You need to set 'https://example.com:123' to 'url' prop and
|
||||
# You need to set 456 to 'port' prop.
|
||||
#
|
||||
# In other words, the 'url' prop should be the final accessible URL seen by a user.
|
||||
# 'port' prop is a port that the Misskey server should actually listen
|
||||
# on and it is not necessarily the port that a user accesses.
|
||||
|
||||
# (Misskeyを動かす)URL
|
||||
url:
|
||||
url: http://localhost/
|
||||
|
||||
# 待受ポート
|
||||
port:
|
||||
# A port that your Misskey server should listen.
|
||||
# This value is not a port to use when accessing with a browser.
|
||||
port: 80
|
||||
|
||||
# TLSの設定(利用しない場合は省略してください)
|
||||
https:
|
||||
# 証明書のパス...
|
||||
key:
|
||||
cert:
|
||||
|
||||
# MongoDBの設定
|
||||
mongodb:
|
||||
host: localhost
|
||||
port: 27017
|
||||
db: misskey
|
||||
user:
|
||||
pass:
|
||||
user: example-misskey-user
|
||||
pass: example-misskey-pass
|
||||
|
||||
# Redisの設定
|
||||
redis:
|
||||
host: localhost
|
||||
port: 6379
|
||||
pass:
|
||||
pass: example-pass
|
||||
|
||||
# reCAPTCHAの設定
|
||||
recaptcha:
|
||||
site_key:
|
||||
secret_key:
|
||||
# Drive capacity of a local user (MB)
|
||||
localDriveCapacityMb: 256
|
||||
|
||||
# ServiceWrokerの設定
|
||||
sw:
|
||||
# VAPIDの公開鍵
|
||||
public_key:
|
||||
# Drive capacity of a remote user (MB)
|
||||
remoteDriveCapacityMb: 8
|
||||
|
||||
# VAPIDの秘密鍵
|
||||
private_key:
|
||||
# If enabled:
|
||||
# Server will not cache remote files (Using direct link instead).
|
||||
# You can save your storage.
|
||||
# Users cannot see remote images when they turn off "Show media from a remote server" setting.
|
||||
preventCache: false
|
||||
|
||||
# Google Maps API
|
||||
google_maps_api_key:
|
||||
drive:
|
||||
storage: 'db'
|
||||
|
||||
# Twitterインテグレーションの設定(利用しない場合は省略可能)
|
||||
twitter:
|
||||
# インテグレーション用アプリのコンシューマーキー
|
||||
consumer_key:
|
||||
# OR
|
||||
|
||||
# インテグレーション用アプリのコンシューマーシークレット
|
||||
consumer_secret:
|
||||
# storage: 'minio'
|
||||
# bucket:
|
||||
# prefix:
|
||||
# config:
|
||||
# endPoint:
|
||||
# port:
|
||||
# secure:
|
||||
# accessKey:
|
||||
# secretKey:
|
||||
|
||||
# S3 example
|
||||
# storage: 'minio'
|
||||
# bucket: bucket-name
|
||||
# prefix: files
|
||||
# config:
|
||||
# endPoint: s3-us-west-2.amazonaws.com
|
||||
# region: us-west-2
|
||||
# secure: true
|
||||
# accessKey: XXX
|
||||
# secretKey: YYY
|
||||
|
||||
# S3 example (with CDN, custom domain)
|
||||
# storage: 'minio'
|
||||
# bucket: drive.example.com
|
||||
# prefix: files
|
||||
# baseUrl: https://drive.example.com
|
||||
# config:
|
||||
# endPoint: s3-us-west-2.amazonaws.com
|
||||
# region: us-west-2
|
||||
# secure: true
|
||||
# accessKey: XXX
|
||||
# secretKey: YYY
|
||||
|
||||
#
|
||||
# Below settings are optional
|
||||
#
|
||||
|
||||
# TLS
|
||||
# https:
|
||||
# # path for certification
|
||||
# key: example-tls-key
|
||||
# cert: example-tls-cert
|
||||
|
||||
# Elasticsearch
|
||||
# elasticsearch:
|
||||
# host: localhost
|
||||
# port: 9200
|
||||
# pass: null
|
||||
|
||||
# reCAPTCHA
|
||||
# recaptcha:
|
||||
# site_key: example-site-key
|
||||
# secret_key: example-secret-key
|
||||
|
||||
# ServiceWorker
|
||||
# sw:
|
||||
# # Public key of VAPID
|
||||
# public_key: example-sw-public-key
|
||||
|
||||
# # Private key of VAPID
|
||||
# private_key: example-sw-private-key
|
||||
|
||||
# google_maps_api_key: example-google-maps-api-key
|
||||
|
||||
# Twitter integration
|
||||
# twitter:
|
||||
# consumer_key: example-twitter-consumer-key
|
||||
# consumer_secret: example-twitter-consumer-secret-key
|
||||
|
||||
# Ghost
|
||||
# Ghost account is an account used for the purpose of delegating
|
||||
# followers when putting users in the list.
|
||||
# ghost: user-id-of-your-ghost-account
|
||||
|
||||
# Clustering
|
||||
# clusterLimit: 1
|
||||
|
@@ -22,6 +22,7 @@
|
||||
"globals": {
|
||||
"ENV": true,
|
||||
"VERSION": true,
|
||||
"API": true
|
||||
"API": true,
|
||||
"LANGS": true
|
||||
}
|
||||
}
|
||||
|
2
.gitattributes
vendored
@@ -1,3 +1,5 @@
|
||||
*.svg -diff -text
|
||||
*.psd -diff -text
|
||||
*.ai -diff -text
|
||||
yarn.lock -diff -text
|
||||
package-lock.json -diff -text
|
||||
|
7
.github/ISSUE_TEMPLATE
vendored
@@ -1,7 +0,0 @@
|
||||
<!--
|
||||
Misskeyへの貢献ありがとうございます。
|
||||
|
||||
バグの報告や提案などで、可能であれば以下の情報を含めてください。
|
||||
* お使いのブラウザ
|
||||
* デスクトップ版Misskeyかモバイル版Misskeyか
|
||||
-->
|
22
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
---
|
||||
name: Bug Report
|
||||
about: Create a report to help us improve
|
||||
---
|
||||
|
||||
# Summary
|
||||
<!-- Tell us what the bug is -->
|
||||
|
||||
# Expected Behavior
|
||||
<!--- Tell us what should happen -->
|
||||
|
||||
# Actual Behavior
|
||||
<!--- Tell us what happens instead of the expected behavior -->
|
||||
|
||||
# Steps to Reproduce
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
|
||||
# Environment
|
||||
<!-- Tell us where on the platform it happens -->
|
||||
<!-- e.g. desktop or mobile version, your browser, your OS -->
|
11
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
name: Feature Request
|
||||
about: Suggest an idea for this project
|
||||
---
|
||||
|
||||
# Summary
|
||||
<!-- Tell us what the suggestion is -->
|
||||
|
||||
# Environment
|
||||
<!-- Tell us where on the platform it related -->
|
||||
<!-- e.g. desktop or mobile version, your browser, your OS -->
|
3
.gitignore
vendored
@@ -5,8 +5,9 @@
|
||||
/build
|
||||
/built
|
||||
/data
|
||||
/.cache-loader
|
||||
npm-debug.log
|
||||
*.pem
|
||||
run.bat
|
||||
api-docs.json
|
||||
package-lock.json
|
||||
*.log
|
||||
|
15
.travis.yml
@@ -4,10 +4,14 @@
|
||||
notifications:
|
||||
email: false
|
||||
|
||||
branches:
|
||||
except:
|
||||
- l10n_master
|
||||
|
||||
language: node_js
|
||||
|
||||
node_js:
|
||||
- 9.8.0
|
||||
- 10.1.0
|
||||
|
||||
env:
|
||||
- CXX=g++-4.8 NODE_ENV=production
|
||||
@@ -22,19 +26,14 @@ addons:
|
||||
|
||||
cache:
|
||||
directories:
|
||||
# パッケージをキャッシュすると本来は動かないはずなのに動いてしまう
|
||||
# 場合があり危険なのでキャッシュはしない:
|
||||
#- node_modules
|
||||
- node_modules
|
||||
|
||||
services:
|
||||
- mongodb
|
||||
- redis-server
|
||||
|
||||
before_script:
|
||||
# Travisはproduction環境なので(10行目により)、
|
||||
# npm install しただけでは devDependencies はインストールされないので、
|
||||
# --only=dev オプションを付けてそれらもインストールされるようにする:
|
||||
- npm install --only=dev
|
||||
- npm install
|
||||
|
||||
# 設定ファイルを配置
|
||||
- cp ./.travis/default.yml ./.config
|
||||
|
12
.vscode/extensions.json
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"recommendations": [
|
||||
"ducksoupdev.vue2",
|
||||
"editorconfig.editorconfig",
|
||||
"eg2.tslint",
|
||||
"eg2.vscode-npm-script",
|
||||
"hollowtree.vue-snippets",
|
||||
"ms-vscode.typescript-javascript-grammar",
|
||||
"octref.vetur",
|
||||
"sysoev.language-stylus"
|
||||
]
|
||||
}
|
37
CHANGELOG.md
Normal file
@@ -0,0 +1,37 @@
|
||||
ChangeLog
|
||||
=========
|
||||
|
||||
破壊的変更のみ記載。
|
||||
|
||||
This document describes breaking changes only.
|
||||
|
||||
5.0.0
|
||||
-----
|
||||
|
||||
### Migration
|
||||
|
||||
起動する前に、`node cli/migration/5.0.0`してください。
|
||||
|
||||
Please run `node cli/migration/5.0.0` before launch.
|
||||
|
||||
4.0.0
|
||||
-----
|
||||
|
||||
オセロがリバーシに変更されました。
|
||||
|
||||
Othello is now Reversi.
|
||||
|
||||
### Migration
|
||||
|
||||
MongoDBの、`othelloGames`と`othelloMatchings`コレクションをそれぞれ`reversiGames`と`reversiMatchings`にリネームしてください。
|
||||
|
||||
You need to rename `othelloGames` and `othelloMatchings` MongoDB collections to `reversiGames` and `reversiMatchings`.
|
||||
|
||||
3.0.0
|
||||
-----
|
||||
|
||||
### Migration
|
||||
|
||||
起動する前に、`node cli/recount-stats`してください。
|
||||
|
||||
Please run `node cli/recount-stats` before launch.
|
64
README.md
@@ -5,26 +5,28 @@
|
||||
|
||||
[![][travis-badge]][travis-link]
|
||||
[![][dependencies-badge]][dependencies-link]
|
||||
[![][himawari-badge]][himasaku]
|
||||
[![][sakurako-badge]][himasaku]
|
||||
[](http://makeapullrequest.com)
|
||||
[](http://makeapullrequest.com) [](https://greenkeeper.io/)
|
||||
|
||||
> Lead Maintainer: [syuilo][syuilo-link]
|
||||
**Microblogging. Redefined.**
|
||||
|
||||
**[Misskey](https://misskey.xyz)** is a completely open source,
|
||||
ultimately sophisticated new type of mini-blog based SNS.
|
||||
ultimately sophisticated professional microblogging software.
|
||||
|
||||
<a href="https://www.patreon.com/syuilo"><img src="https://c5.patreon.com/external/logo/become_a_patron_button@2x.png" alt="Become a Patron!" width="160" /></a>
|
||||
|
||||

|
||||
|
||||
:sparkles: Features
|
||||
----------------------------------------------------------------
|
||||
* Automatically updated timeline
|
||||
* Rich text contents
|
||||
* Reactions
|
||||
* User lists
|
||||
* Customizable column view (called MisskeyDeck)
|
||||
* and widgets!
|
||||
* Private messages
|
||||
* ServiceWorker support
|
||||
* ActivityPub compatible
|
||||
* ActivityPub support
|
||||
|
||||
and more! You can touch with your own eyes at https://misskey.xyz/.
|
||||
and more! You can see it with your own eyes at [misskey.xyz](https://misskey.xyz).
|
||||
|
||||
:package: Create your instance
|
||||
----------------------------------------------------------------
|
||||
@@ -35,31 +37,21 @@ please see [Setup and installation guide](./docs/setup.en.md).
|
||||
----------------------------------------------------------------
|
||||
**[PR](https://github.com/syuilo/misskey/pulls)s welcome!**
|
||||
|
||||
If you want to translate Misskey, please see [Translation guide](./docs/translate.en.md).
|
||||
If you want to...
|
||||
* i18n ... please see [Translation guide](./docs/translate.en.md).
|
||||
* l10n ... please visit https://crowdin.com/project/misskey
|
||||
|
||||
:heart: Backers & Sponsors
|
||||
----------------------------------------------------------------
|
||||
[![Backers][backers-image]][support-url]
|
||||
[![Sponsors][sponsors-image]][support-url]
|
||||
|
||||
:mortar_board: Notable contributors
|
||||
----------------------------------------------------------------
|
||||
| ![syuilo][syuilo-icon] | ![Morisawa Aya][ayamorisawa-icon] | ![otofune][otofune-icon] | ![akihikodaki][akihikodaki-icon] | ![tamaina][tamaina-icon] | ![rinsuki][rinsuki-icon] |
|
||||
|:-:|:-:|:-:|:-:|:-:|:-:|
|
||||
| [syuilo][syuilo-link]<br>Owner | [Aya Morisawa][ayamorisawa-link]<br>Collaborator | [otofune][otofune-link]<br>Collaborator | [akihikodaki][akihikodaki-link] | [tamaina][tamaina-link] | [rinsuki][rinsuki-link] |
|
||||
|
||||
[List of all contributors](https://github.com/syuilo/misskey/graphs/contributors)
|
||||
|
||||
### :earth_americas: Translators
|
||||
| ![][mirro-san-icon] | ![][Conan-kun-icon] |
|
||||
|:-:|:-:|
|
||||
| [Mirro][mirro-san-link]<br>English, French | [Asriel][Conan-kun-link]<br>English, French |
|
||||
| <img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/619786/32cf01444db24e578cd1982c197f6fc6/1?token-time=2145916800&token-hash=tB1e_r8RlZ5sFL0KV_e8dugapxatNBRK1Z3h67TO1g8%3D"> | <img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12378075/0156f769e20f412594fa6b87d85fe228/1?token-time=2145916800&token-hash=IsIJRUXszzoD6-7pDnRY8I05T9nSznc4GTaxj7C9SwU%3D"> | <img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/4503830/ccf2cc867ea64de0b524bb2e24b9a1cb/1?token-time=2145916800&token-hash=S1zP0QyLU52Dqq6dtc9qNYyWfW86XrYHiR4NMbeOrnA%3D"> | <img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12531784/93a45137841849329ba692da92ac7c60/1?token-time=2145916800&token-hash=tMosUojzUYJCH_3t--tvYA-SMCyrS__hzSndyaRSnbo%3D"> |
|
||||
|:-:|:-:|:-:|:-:|
|
||||
| [Gargron](https://www.patreon.com/mastodon) | [39ff](https://www.patreon.com/user/creators?u=12378075) | [dansup](https://www.patreon.com/dansup) | [Takashi Shibuya](https://www.patreon.com/user/creators?u=12531784) |
|
||||
|
||||
:four_leaf_clover: Copyright
|
||||
----------------------------------------------------------------
|
||||
> Copyright (c) 2014-2018 syuilo
|
||||
|
||||
Misskey is an open-source software licensed under [GNU AGPLv3](LICENSE).
|
||||
Misskey is an open-source software licensed under the [GNU AGPLv3](LICENSE).
|
||||
|
||||
[![][agpl-3.0-badge]][AGPL-3.0]
|
||||
|
||||
@@ -69,9 +61,6 @@ Misskey is an open-source software licensed under [GNU AGPLv3](LICENSE).
|
||||
[travis-badge]: http://img.shields.io/travis/syuilo/misskey/master.svg?style=flat-square
|
||||
[dependencies-link]: https://david-dm.org/syuilo/misskey
|
||||
[dependencies-badge]: https://img.shields.io/david/syuilo/misskey.svg?style=flat-square
|
||||
[himasaku]: https://himasaku.net
|
||||
[himawari-badge]: https://img.shields.io/badge/%E5%8F%A4%E8%B0%B7-%E5%90%91%E6%97%A5%E8%91%B5-1684c5.svg?style=flat-square
|
||||
[sakurako-badge]: https://img.shields.io/badge/%E5%A4%A7%E5%AE%A4-%E6%AB%BB%E5%AD%90-efb02a.svg?style=flat-square
|
||||
|
||||
[backer-url]: #backers
|
||||
[backer-badge]: https://opencollective.com/misskey/backers/badge.svg
|
||||
@@ -81,22 +70,5 @@ Misskey is an open-source software licensed under [GNU AGPLv3](LICENSE).
|
||||
[sponsors-image]: https://opencollective.com/misskey/sponsors.svg
|
||||
[support-url]: https://opencollective.com/misskey#support
|
||||
|
||||
<!-- Contributors Info -->
|
||||
[syuilo-link]: https://syuilo.com
|
||||
[syuilo-icon]: https://avatars2.githubusercontent.com/u/4439005?v=3&s=70
|
||||
[ayamorisawa-link]: https://github.com/ayamorisawa
|
||||
[ayamorisawa-icon]: https://avatars0.githubusercontent.com/u/10798641?v=3&s=70
|
||||
[otofune-link]: https://github.com/otofune
|
||||
[otofune-icon]: https://avatars0.githubusercontent.com/u/15062473?v=3&s=70
|
||||
[akihikodaki-link]: https://github.com/akihikodaki
|
||||
[akihikodaki-icon]: https://avatars2.githubusercontent.com/u/17036990?s=70&v=4
|
||||
[rinsuki-link]: https://github.com/rinsuki
|
||||
[rinsuki-icon]: https://avatars0.githubusercontent.com/u/6533808?s=70&v=4
|
||||
[tamaina-link]: https://github.com/tamaina
|
||||
[tamaina-icon]: https://avatars1.githubusercontent.com/u/7973572?s=70&v=4
|
||||
|
||||
[mirro-san-link]: https://github.com/mirro-san
|
||||
[mirro-san-icon]: https://avatars1.githubusercontent.com/u/17948612?s=70&v=4
|
||||
[Conan-kun-link]: https://github.com/Conan-kun
|
||||
[Conan-kun-icon]: https://avatars3.githubusercontent.com/u/30003708?s=70&v=4
|
||||
|
||||
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 352 KiB After Width: | Height: | Size: 264 KiB |
Before Width: | Height: | Size: 2.3 KiB |
@@ -1,161 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="896"
|
||||
height="896"
|
||||
viewBox="0 0 237.06667 237.06667"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.1 r15371"
|
||||
sodipodi:docname="128.svg"
|
||||
inkscape:export-filename="C:\Users\syuilo\projects\misskey\assets\favicon\128.png"
|
||||
inkscape:export-xdpi="13.714286"
|
||||
inkscape:export-ydpi="13.714286">
|
||||
<defs
|
||||
id="defs2">
|
||||
<inkscape:path-effect
|
||||
effect="simplify"
|
||||
id="path-effect5115"
|
||||
is_visible="true"
|
||||
steps="1"
|
||||
threshold="0.000408163"
|
||||
smooth_angles="360"
|
||||
helper_size="0"
|
||||
simplify_individual_paths="false"
|
||||
simplify_just_coalesce="false"
|
||||
simplifyindividualpaths="false"
|
||||
simplifyJustCoalesce="false" />
|
||||
<inkscape:path-effect
|
||||
effect="simplify"
|
||||
id="path-effect5111"
|
||||
is_visible="true"
|
||||
steps="1"
|
||||
threshold="0.000408163"
|
||||
smooth_angles="360"
|
||||
helper_size="0"
|
||||
simplify_individual_paths="false"
|
||||
simplify_just_coalesce="false"
|
||||
simplifyindividualpaths="false"
|
||||
simplifyJustCoalesce="false" />
|
||||
<inkscape:path-effect
|
||||
effect="simplify"
|
||||
id="path-effect5104"
|
||||
is_visible="true"
|
||||
steps="1"
|
||||
threshold="0.000408163"
|
||||
smooth_angles="360"
|
||||
helper_size="0"
|
||||
simplify_individual_paths="false"
|
||||
simplify_just_coalesce="false"
|
||||
simplifyindividualpaths="false"
|
||||
simplifyJustCoalesce="false" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.7071068"
|
||||
inkscape:cx="908.16505"
|
||||
inkscape:cy="468.2779"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="g4502"
|
||||
showgrid="true"
|
||||
units="px"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-center="true"
|
||||
inkscape:snap-page="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1017"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="1072"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:object-paths="true"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
objecttolerance="1"
|
||||
guidetolerance="1"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:snap-others="false"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:snap-bbox-midpoints="true">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid4504"
|
||||
spacingx="4.2333334"
|
||||
spacingy="4.2333334"
|
||||
empcolor="#ff3fff"
|
||||
empopacity="0.25098039"
|
||||
empspacing="4" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="レイヤー 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-30.809093,-10.18601)">
|
||||
<g
|
||||
id="g4502"
|
||||
transform="matrix(1.096096,0,0,1.096096,47.839369,-94.823577)"
|
||||
inkscape:export-xdpi="6"
|
||||
inkscape:export-ydpi="6">
|
||||
<rect
|
||||
style="opacity:1;fill:#2fa1bb;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.96554804;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.97647059"
|
||||
id="rect4506"
|
||||
width="216.28276"
|
||||
height="216.28278"
|
||||
x="-15.537212"
|
||||
y="95.803268" />
|
||||
<g
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
transform="translate(-1.3333333e-6,-1.3439941e-6)"
|
||||
id="g5125">
|
||||
<g
|
||||
transform="matrix(0.91391326,0,0,0.91391326,7.9719907,17.595761)"
|
||||
id="text4489"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:141.03404236px;line-height:476.69509888px;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.28950602px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
aria-label="Mi">
|
||||
<path
|
||||
sodipodi:nodetypes="zccssscssccscczzzccsccsscscsccz"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5210"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';fill:#ffffff;fill-opacity:1;stroke-width:0.28950602px"
|
||||
d="m 75.196381,231.17126 c -5.855419,0.0202 -10.885068,-3.50766 -13.2572,-7.61584 -1.266603,-1.79454 -3.772419,-2.43291 -3.807919,0 v 11.2332 c 0,4.51309 -1.645397,8.41504 -4.936191,11.70583 -3.196772,3.19677 -7.098714,4.79516 -11.705826,4.79516 -4.513089,0 -8.415031,-1.59839 -11.705825,-4.79516 -3.196772,-3.29079 -4.795158,-7.19274 -4.795158,-11.70583 v -61.7729 c 0,-3.47884 0.987238,-6.6286 2.961715,-9.44928 2.068499,-2.91471 4.701135,-4.9362 7.897906,-6.06447 1.786431,-0.65816 3.666885,-0.98724 5.641362,-0.98724 5.077225,0 9.308247,1.97448 12.693064,5.92343 1.786431,1.97448 2.820681,3.00873 3.102749,3.10275 0,0 13.408119,16.21319 13.78421,16.49526 0.376091,0.28206 1.480789,2.43848 4.127113,2.43848 2.646324,0 3.89218,-2.15642 4.26827,-2.43848 0.376091,-0.28207 13.784088,-16.49526 13.784088,-16.49526 0.09402,0.094 1.081261,-0.94022 2.961715,-3.10275 3.478837,-3.94895 7.756866,-5.92343 12.834096,-5.92343 1.88045,0 3.76091,0.32908 5.64136,0.98724 3.19677,1.12827 5.7824,3.14976 7.75688,6.06447 2.06849,2.82068 3.10274,5.97044 3.10274,9.44928 v 61.7729 c 0,4.51309 -1.6454,8.41504 -4.93619,11.70583 -3.19677,3.19677 -7.09871,4.79516 -11.70582,4.79516 -4.51309,0 -8.41504,-1.59839 -11.705828,-4.79516 -3.196772,-3.29079 -4.795158,-7.19274 -4.795158,-11.70583 v -11.2332 c -0.277898,-3.06563 -2.987588,-1.13379 -3.948953,0 -2.538613,4.70114 -7.401781,7.59567 -13.2572,7.61584 z" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5212"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';fill:#ffffff;fill-opacity:1;stroke-width:0.28950602px"
|
||||
d="m 145.83461,185.00361 q -5.92343,0 -10.15445,-4.08999 -4.08999,-4.23102 -4.08999,-10.15445 0,-5.92343 4.08999,-10.01342 4.23102,-4.23102 10.15445,-4.23102 5.92343,0 10.15445,4.23102 4.23102,4.08999 4.23102,10.01342 0,5.92343 -4.23102,10.15445 -4.23102,4.08999 -10.15445,4.08999 z m 0.14103,2.82068 q 5.92343,0 10.01342,4.23102 4.23102,4.23102 4.23102,10.15445 v 34.83541 q 0,5.92343 -4.23102,10.15445 -4.08999,4.08999 -10.01342,4.08999 -5.92343,0 -10.15445,-4.08999 -4.23102,-4.23102 -4.23102,-10.15445 v -34.83541 q 0,-5.92343 4.23102,-10.15445 4.23102,-4.23102 10.15445,-4.23102 z" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 7.5 KiB |
Before Width: | Height: | Size: 518 B |
Before Width: | Height: | Size: 4.7 KiB |
@@ -1,161 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="896"
|
||||
height="896"
|
||||
viewBox="0 0 237.06667 237.06667"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.1 r15371"
|
||||
sodipodi:docname="256.svg"
|
||||
inkscape:export-filename="C:\Users\syuilo\projects\misskey\assets\favicon\256.png"
|
||||
inkscape:export-xdpi="27.428572"
|
||||
inkscape:export-ydpi="27.428572">
|
||||
<defs
|
||||
id="defs2">
|
||||
<inkscape:path-effect
|
||||
effect="simplify"
|
||||
id="path-effect5115"
|
||||
is_visible="true"
|
||||
steps="1"
|
||||
threshold="0.000408163"
|
||||
smooth_angles="360"
|
||||
helper_size="0"
|
||||
simplify_individual_paths="false"
|
||||
simplify_just_coalesce="false"
|
||||
simplifyindividualpaths="false"
|
||||
simplifyJustCoalesce="false" />
|
||||
<inkscape:path-effect
|
||||
effect="simplify"
|
||||
id="path-effect5111"
|
||||
is_visible="true"
|
||||
steps="1"
|
||||
threshold="0.000408163"
|
||||
smooth_angles="360"
|
||||
helper_size="0"
|
||||
simplify_individual_paths="false"
|
||||
simplify_just_coalesce="false"
|
||||
simplifyindividualpaths="false"
|
||||
simplifyJustCoalesce="false" />
|
||||
<inkscape:path-effect
|
||||
effect="simplify"
|
||||
id="path-effect5104"
|
||||
is_visible="true"
|
||||
steps="1"
|
||||
threshold="0.000408163"
|
||||
smooth_angles="360"
|
||||
helper_size="0"
|
||||
simplify_individual_paths="false"
|
||||
simplify_just_coalesce="false"
|
||||
simplifyindividualpaths="false"
|
||||
simplifyJustCoalesce="false" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.7071068"
|
||||
inkscape:cx="908.16505"
|
||||
inkscape:cy="468.2779"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="g4502"
|
||||
showgrid="true"
|
||||
units="px"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-center="true"
|
||||
inkscape:snap-page="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1017"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="1072"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:object-paths="true"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
objecttolerance="1"
|
||||
guidetolerance="1"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:snap-others="false"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:snap-bbox-midpoints="true">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid4504"
|
||||
spacingx="4.2333334"
|
||||
spacingy="4.2333334"
|
||||
empcolor="#ff3fff"
|
||||
empopacity="0.25098039"
|
||||
empspacing="4" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="レイヤー 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-30.809093,-10.18601)">
|
||||
<g
|
||||
id="g4502"
|
||||
transform="matrix(1.096096,0,0,1.096096,47.839369,-94.823577)"
|
||||
inkscape:export-xdpi="6"
|
||||
inkscape:export-ydpi="6">
|
||||
<rect
|
||||
style="opacity:1;fill:#2fa1bb;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.96554804;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.97647059"
|
||||
id="rect4506"
|
||||
width="216.28276"
|
||||
height="216.28278"
|
||||
x="-15.537212"
|
||||
y="95.803268" />
|
||||
<g
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
transform="translate(-1.3333333e-6,-1.3439941e-6)"
|
||||
id="g5125">
|
||||
<g
|
||||
transform="matrix(0.91391326,0,0,0.91391326,7.9719907,17.595761)"
|
||||
id="text4489"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:141.03404236px;line-height:476.69509888px;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.28950602px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
aria-label="Mi">
|
||||
<path
|
||||
sodipodi:nodetypes="zccssscssccscczzzccsccsscscsccz"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5210"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';fill:#ffffff;fill-opacity:1;stroke-width:0.28950602px"
|
||||
d="m 75.196381,231.17126 c -5.855419,0.0202 -10.885068,-3.50766 -13.2572,-7.61584 -1.266603,-1.79454 -3.772419,-2.43291 -3.807919,0 v 11.2332 c 0,4.51309 -1.645397,8.41504 -4.936191,11.70583 -3.196772,3.19677 -7.098714,4.79516 -11.705826,4.79516 -4.513089,0 -8.415031,-1.59839 -11.705825,-4.79516 -3.196772,-3.29079 -4.795158,-7.19274 -4.795158,-11.70583 v -61.7729 c 0,-3.47884 0.987238,-6.6286 2.961715,-9.44928 2.068499,-2.91471 4.701135,-4.9362 7.897906,-6.06447 1.786431,-0.65816 3.666885,-0.98724 5.641362,-0.98724 5.077225,0 9.308247,1.97448 12.693064,5.92343 1.786431,1.97448 2.820681,3.00873 3.102749,3.10275 0,0 13.408119,16.21319 13.78421,16.49526 0.376091,0.28206 1.480789,2.43848 4.127113,2.43848 2.646324,0 3.89218,-2.15642 4.26827,-2.43848 0.376091,-0.28207 13.784088,-16.49526 13.784088,-16.49526 0.09402,0.094 1.081261,-0.94022 2.961715,-3.10275 3.478837,-3.94895 7.756866,-5.92343 12.834096,-5.92343 1.88045,0 3.76091,0.32908 5.64136,0.98724 3.19677,1.12827 5.7824,3.14976 7.75688,6.06447 2.06849,2.82068 3.10274,5.97044 3.10274,9.44928 v 61.7729 c 0,4.51309 -1.6454,8.41504 -4.93619,11.70583 -3.19677,3.19677 -7.09871,4.79516 -11.70582,4.79516 -4.51309,0 -8.41504,-1.59839 -11.705828,-4.79516 -3.196772,-3.29079 -4.795158,-7.19274 -4.795158,-11.70583 v -11.2332 c -0.277898,-3.06563 -2.987588,-1.13379 -3.948953,0 -2.538613,4.70114 -7.401781,7.59567 -13.2572,7.61584 z" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5212"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';fill:#ffffff;fill-opacity:1;stroke-width:0.28950602px"
|
||||
d="m 145.83461,185.00361 q -5.92343,0 -10.15445,-4.08999 -4.08999,-4.23102 -4.08999,-10.15445 0,-5.92343 4.08999,-10.01342 4.23102,-4.23102 10.15445,-4.23102 5.92343,0 10.15445,4.23102 4.23102,4.08999 4.23102,10.01342 0,5.92343 -4.23102,10.15445 -4.23102,4.08999 -10.15445,4.08999 z m 0.14103,2.82068 q 5.92343,0 10.01342,4.23102 4.23102,4.23102 4.23102,10.15445 v 34.83541 q 0,5.92343 -4.23102,10.15445 -4.08999,4.08999 -10.01342,4.08999 -5.92343,0 -10.15445,-4.08999 -4.23102,-4.23102 -4.23102,-10.15445 v -34.83541 q 0,-5.92343 4.23102,-10.15445 4.23102,-4.23102 10.15445,-4.23102 z" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 7.5 KiB |
Before Width: | Height: | Size: 761 B |
Before Width: | Height: | Size: 1.2 KiB |
BIN
assets/favicon/favicon.png
Normal file
After Width: | Height: | Size: 3.9 KiB |
@@ -15,7 +15,7 @@
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.1 r15371"
|
||||
sodipodi:docname="16.svg"
|
||||
sodipodi:docname="favicon.svg"
|
||||
inkscape:export-filename="C:\Users\syuilo\projects\misskey\assets\favicon\16.png"
|
||||
inkscape:export-xdpi="3"
|
||||
inkscape:export-ydpi="3">
|
||||
@@ -66,7 +66,7 @@
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.4142136"
|
||||
inkscape:cx="110.21885"
|
||||
inkscape:cx="15.466544"
|
||||
inkscape:cy="235.92965"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="g4502"
|
||||
@@ -79,7 +79,7 @@
|
||||
inkscape:snap-center="true"
|
||||
inkscape:snap-page="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1017"
|
||||
inkscape:window-height="1027"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="1072"
|
||||
inkscape:window-maximized="1"
|
||||
@@ -111,7 +111,7 @@
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 6.9 KiB |
BIN
assets/icons/128.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
assets/icons/16.png
Normal file
After Width: | Height: | Size: 446 B |
BIN
assets/icons/192.png
Normal file
After Width: | Height: | Size: 3.8 KiB |
BIN
assets/icons/256.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
assets/icons/32.png
Normal file
After Width: | Height: | Size: 774 B |
BIN
assets/icons/64.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
@@ -69,7 +69,7 @@
|
||||
inkscape:cx="232.39583"
|
||||
inkscape:cy="251.50613"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
inkscape:current-layer="g4502"
|
||||
showgrid="true"
|
||||
units="px"
|
||||
inkscape:snap-bbox="true"
|
||||
@@ -79,7 +79,7 @@
|
||||
inkscape:snap-center="true"
|
||||
inkscape:snap-page="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1017"
|
||||
inkscape:window-height="1027"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="1072"
|
||||
inkscape:window-maximized="1"
|
||||
@@ -111,7 +111,7 @@
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
@@ -124,25 +124,19 @@
|
||||
id="g4502"
|
||||
transform="matrix(1.096096,0,0,1.096096,-2.960633,-44.023579)">
|
||||
<g
|
||||
style="fill:#2fa1bb;fill-opacity:0.94117647"
|
||||
style="fill:#000000;fill-opacity:1"
|
||||
transform="translate(-1.3333333e-6,-1.3439941e-6)"
|
||||
id="g5125">
|
||||
<g
|
||||
transform="matrix(0.91391326,0,0,0.91391326,7.9719907,17.595761)"
|
||||
id="text4489"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:141.03404236px;line-height:476.69509888px;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';letter-spacing:0px;word-spacing:0px;fill:#2fa1bb;fill-opacity:0.94117647;stroke:none;stroke-width:0.28950602px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:141.03404236px;line-height:476.69509888px;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28950602px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
aria-label="Mi">
|
||||
<path
|
||||
sodipodi:nodetypes="zccssscssccscczzzccsccsscscsccz"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5210"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';fill:#2fa1bb;fill-opacity:0.94117647;stroke-width:0.28950602px"
|
||||
d="m 75.196381,231.17126 c -5.855419,0.0202 -10.885068,-3.50766 -13.2572,-7.61584 -1.266603,-1.79454 -3.772419,-2.43291 -3.807919,0 v 11.2332 c 0,4.51309 -1.645397,8.41504 -4.936191,11.70583 -3.196772,3.19677 -7.098714,4.79516 -11.705826,4.79516 -4.513089,0 -8.415031,-1.59839 -11.705825,-4.79516 -3.196772,-3.29079 -4.795158,-7.19274 -4.795158,-11.70583 v -61.7729 c 0,-3.47884 0.987238,-6.6286 2.961715,-9.44928 2.068499,-2.91471 4.701135,-4.9362 7.897906,-6.06447 1.786431,-0.65816 3.666885,-0.98724 5.641362,-0.98724 5.077225,0 9.308247,1.97448 12.693064,5.92343 1.786431,1.97448 2.820681,3.00873 3.102749,3.10275 0,0 13.408119,16.21319 13.78421,16.49526 0.376091,0.28206 1.480789,2.43848 4.127113,2.43848 2.646324,0 3.89218,-2.15642 4.26827,-2.43848 0.376091,-0.28207 13.784088,-16.49526 13.784088,-16.49526 0.09402,0.094 1.081261,-0.94022 2.961715,-3.10275 3.478837,-3.94895 7.756866,-5.92343 12.834096,-5.92343 1.88045,0 3.76091,0.32908 5.64136,0.98724 3.19677,1.12827 5.7824,3.14976 7.75688,6.06447 2.06849,2.82068 3.10274,5.97044 3.10274,9.44928 v 61.7729 c 0,4.51309 -1.6454,8.41504 -4.93619,11.70583 -3.19677,3.19677 -7.09871,4.79516 -11.70582,4.79516 -4.51309,0 -8.41504,-1.59839 -11.705828,-4.79516 -3.196772,-3.29079 -4.795158,-7.19274 -4.795158,-11.70583 v -11.2332 c -0.277898,-3.06563 -2.987588,-1.13379 -3.948953,0 -2.538613,4.70114 -7.401781,7.59567 -13.2572,7.61584 z" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5212"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';fill:#2fa1bb;fill-opacity:0.94117647;stroke-width:0.28950602px"
|
||||
d="m 145.83461,185.00361 q -5.92343,0 -10.15445,-4.08999 -4.08999,-4.23102 -4.08999,-10.15445 0,-5.92343 4.08999,-10.01342 4.23102,-4.23102 10.15445,-4.23102 5.92343,0 10.15445,4.23102 4.23102,4.08999 4.23102,10.01342 0,5.92343 -4.23102,10.15445 -4.23102,4.08999 -10.15445,4.08999 z m 0.14103,2.82068 q 5.92343,0 10.01342,4.23102 4.23102,4.23102 4.23102,10.15445 v 34.83541 q 0,5.92343 -4.23102,10.15445 -4.08999,4.08999 -10.01342,4.08999 -5.92343,0 -10.15445,-4.08999 -4.23102,-4.23102 -4.23102,-10.15445 v -34.83541 q 0,-5.92343 4.23102,-10.15445 4.23102,-4.23102 10.15445,-4.23102 z" />
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';fill:#000000;fill-opacity:1;stroke-width:1.09609616px"
|
||||
d="M 62.474609 76.585938 C 54.999059 76.585938 47.878825 77.832365 41.115234 80.324219 C 29.011968 84.595952 19.044417 92.249798 11.212891 103.28516 C 3.7373405 113.96451 0 125.88934 0 139.06055 L 0 372.93945 C 0 390.02642 6.0510264 404.79858 18.154297 417.25781 C 30.613543 429.36108 45.387643 435.41406 62.474609 435.41406 C 79.917556 435.41406 94.689698 429.36108 106.79297 417.25781 C 119.25222 404.79858 125.48242 390.02642 125.48242 372.93945 L 125.48242 330.4082 C 125.61683 321.19698 135.10492 323.61391 139.90039 330.4082 C 148.8815 345.96215 167.92265 359.32062 190.0918 359.24414 C 212.26095 359.16778 230.67374 348.20715 240.28516 330.4082 C 243.92497 326.11557 254.18418 318.80145 255.23633 330.4082 L 255.23633 372.93945 C 255.23633 390.02642 261.28735 404.79858 273.39062 417.25781 C 285.84985 429.36108 300.62397 435.41406 317.71094 435.41406 C 335.15388 435.41406 349.92603 429.36108 362.0293 417.25781 C 374.48853 404.79858 380.71875 390.02642 380.71875 372.93945 L 380.71875 139.06055 C 380.71875 125.88934 376.80415 113.96451 368.97266 103.28516 C 361.49709 92.249798 351.70678 84.595952 339.60352 80.324219 C 332.48396 77.832365 325.3637 76.585938 318.24414 76.585938 C 299.02128 76.585938 282.82549 84.062587 269.6543 99.013672 C 262.53473 107.20121 258.79542 111.11761 258.43945 110.76172 C 258.43945 110.76172 207.67587 172.14495 206.25195 173.21289 C 204.82804 174.2808 200.11102 182.44531 190.0918 182.44531 C 180.07257 182.44531 175.89071 174.2808 174.4668 173.21289 C 173.04288 172.14495 122.2793 110.76172 122.2793 110.76172 C 121.21136 110.40575 117.29484 106.48923 110.53125 99.013672 C 97.716024 84.062587 81.697447 76.585938 62.474609 76.585938 z M 457.53516 76.585938 C 442.58406 76.585937 429.7692 81.926117 419.08984 92.605469 C 408.76646 102.92885 403.60547 115.56648 403.60547 130.51758 C 403.60547 145.46868 408.76646 158.28354 419.08984 168.96289 C 429.7692 179.28627 442.58406 184.44922 457.53516 184.44922 C 472.48625 184.44922 485.30112 179.28627 495.98047 168.96289 C 506.65982 158.28354 512 145.46868 512 130.51758 C 512 115.56648 506.65982 102.92885 495.98047 92.605469 C 485.30112 81.926117 472.48625 76.585938 457.53516 76.585938 z M 458.06836 195.12695 C 443.11726 195.12695 430.3024 200.46713 419.62305 211.14648 C 408.94369 221.82584 403.60547 234.6407 403.60547 249.5918 L 403.60547 381.48242 C 403.60547 396.43352 408.94369 409.24838 419.62305 419.92773 C 430.3024 430.25112 443.11726 435.41406 458.06836 435.41406 C 473.01946 435.41406 485.65709 430.25112 495.98047 419.92773 C 506.65982 409.24838 512 396.43352 512 381.48242 L 512 249.5918 C 512 234.6407 506.65982 221.82584 495.98047 211.14648 C 485.65709 200.46713 473.01946 195.12695 458.06836 195.12695 z "
|
||||
transform="matrix(0.26412464,0,0,0.26412464,24.988264,136.28626)"
|
||||
id="path5210" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
|
Before Width: | Height: | Size: 7.0 KiB After Width: | Height: | Size: 7.3 KiB |
BIN
assets/title.png
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 3.8 KiB |
101
cli/clean-cached-remote-files.js
Normal file
@@ -0,0 +1,101 @@
|
||||
const chalk = require('chalk');
|
||||
const log = require('single-line-log').stdout;
|
||||
const sequential = require('promise-sequential');
|
||||
const { default: DriveFile, DriveFileChunk } = require('../built/models/drive-file');
|
||||
const { default: DriveFileThumbnail, DriveFileThumbnailChunk } = require('../built/models/drive-file-thumbnail');
|
||||
const { default: User } = require('../built/models/user');
|
||||
|
||||
const q = {
|
||||
'metadata._user.host': {
|
||||
$ne: null
|
||||
},
|
||||
'metadata.withoutChunks': false
|
||||
};
|
||||
|
||||
async function main() {
|
||||
const promiseGens = [];
|
||||
|
||||
const count = await DriveFile.count(q);
|
||||
|
||||
let prev;
|
||||
|
||||
for (let i = 0; i < count; i++) {
|
||||
promiseGens.push(() => {
|
||||
const promise = new Promise(async (res, rej) => {
|
||||
const file = await DriveFile.findOne(prev ? Object.assign({
|
||||
_id: { $lt: prev._id }
|
||||
}, q) : q, {
|
||||
sort: {
|
||||
_id: -1
|
||||
}
|
||||
});
|
||||
|
||||
prev = file;
|
||||
|
||||
function skip() {
|
||||
res([i, file, false]);
|
||||
}
|
||||
|
||||
if (file == null) return skip();
|
||||
|
||||
log(chalk`{gray ${i}} scanning {bold ${file._id}} ${file.filename} ...`);
|
||||
|
||||
const attachingUsersCount = await User.count({
|
||||
$or: [{
|
||||
avatarId: file._id
|
||||
}, {
|
||||
bannerId: file._id
|
||||
}]
|
||||
}, { limit: 1 });
|
||||
if (attachingUsersCount !== 0) return skip();
|
||||
|
||||
Promise.all([
|
||||
// チャンクをすべて削除
|
||||
DriveFileChunk.remove({
|
||||
files_id: file._id
|
||||
}),
|
||||
|
||||
DriveFile.update({ _id: file._id }, {
|
||||
$set: {
|
||||
'metadata.withoutChunks': true
|
||||
}
|
||||
})
|
||||
]).then(async () => {
|
||||
res([i, file, true]);
|
||||
|
||||
//#region サムネイルもあれば削除
|
||||
const thumbnail = await DriveFileThumbnail.findOne({
|
||||
'metadata.originalId': file._id
|
||||
});
|
||||
|
||||
if (thumbnail) {
|
||||
DriveFileThumbnailChunk.remove({
|
||||
files_id: thumbnail._id
|
||||
});
|
||||
|
||||
DriveFileThumbnail.remove({ _id: thumbnail._id });
|
||||
}
|
||||
//#endregion
|
||||
});
|
||||
});
|
||||
|
||||
promise.then(([i, file, deleted]) => {
|
||||
if (deleted) {
|
||||
log(chalk`{gray ${i}} {red deleted: {bold ${file._id}} ${file.filename}}`);
|
||||
} else {
|
||||
log(chalk`{gray ${i}} {green skipped: {bold ${file._id}} ${file.filename}}`);
|
||||
}
|
||||
log.clear();
|
||||
console.log();
|
||||
});
|
||||
|
||||
return promise;
|
||||
});
|
||||
}
|
||||
|
||||
return await sequential(promiseGens);
|
||||
}
|
||||
|
||||
main().then(() => {
|
||||
console.log('ALL DONE');
|
||||
}).catch(console.error);
|
80
cli/clean-unused-drive-files.js
Normal file
@@ -0,0 +1,80 @@
|
||||
const chalk = require('chalk');
|
||||
const log = require('single-line-log').stdout;
|
||||
const sequential = require('promise-sequential');
|
||||
const { default: DriveFile, deleteDriveFile } = require('../built/models/drive-file');
|
||||
const { default: Note } = require('../built/models/note');
|
||||
const { default: MessagingMessage } = require('../built/models/messaging-message');
|
||||
const { default: User } = require('../built/models/user');
|
||||
|
||||
async function main() {
|
||||
const promiseGens = [];
|
||||
|
||||
const count = await DriveFile.count({});
|
||||
|
||||
let prev;
|
||||
|
||||
for (let i = 0; i < count; i++) {
|
||||
promiseGens.push(() => {
|
||||
const promise = new Promise(async (res, rej) => {
|
||||
const file = await DriveFile.findOne(prev ? {
|
||||
_id: { $lt: prev._id }
|
||||
} : {}, {
|
||||
sort: {
|
||||
_id: -1
|
||||
}
|
||||
});
|
||||
|
||||
prev = file;
|
||||
|
||||
function skip() {
|
||||
res([i, file, false]);
|
||||
}
|
||||
|
||||
if (file == null) return skip();
|
||||
|
||||
log(chalk`{gray ${i}} scanning {bold ${file._id}} ${file.filename} ...`);
|
||||
|
||||
const attachingUsersCount = await User.count({
|
||||
$or: [{
|
||||
avatarId: file._id
|
||||
}, {
|
||||
bannerId: file._id
|
||||
}]
|
||||
}, { limit: 1 });
|
||||
if (attachingUsersCount !== 0) return skip();
|
||||
|
||||
const attachingNotesCount = await Note.count({
|
||||
mediaIds: file._id
|
||||
}, { limit: 1 });
|
||||
if (attachingNotesCount !== 0) return skip();
|
||||
|
||||
const attachingMessagesCount = await MessagingMessage.count({
|
||||
fileId: file._id
|
||||
}, { limit: 1 });
|
||||
if (attachingMessagesCount !== 0) return skip();
|
||||
|
||||
deleteDriveFile(file).then(() => {
|
||||
res([i, file, true]);
|
||||
}).catch(rej);
|
||||
});
|
||||
|
||||
promise.then(([i, file, deleted]) => {
|
||||
if (deleted) {
|
||||
log(chalk`{gray ${i}} {red deleted: {bold ${file._id}} ${file.filename}}`);
|
||||
} else {
|
||||
log(chalk`{gray ${i}} {green skipped: {bold ${file._id}} ${file.filename}}`);
|
||||
}
|
||||
log.clear();
|
||||
console.log();
|
||||
});
|
||||
|
||||
return promise;
|
||||
});
|
||||
}
|
||||
|
||||
return await sequential(promiseGens);
|
||||
}
|
||||
|
||||
main().then(() => {
|
||||
console.log('done');
|
||||
}).catch(console.error);
|
164
cli/init.js
@@ -1,164 +0,0 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const yaml = require('js-yaml');
|
||||
const inquirer = require('inquirer');
|
||||
const chalk = require('chalk');
|
||||
|
||||
const configDirPath = `${__dirname}/../.config`;
|
||||
const configPath = `${configDirPath}/default.yml`;
|
||||
|
||||
const form = [{
|
||||
type: 'input',
|
||||
name: 'maintainerName',
|
||||
message: 'Your name:'
|
||||
}, {
|
||||
type: 'input',
|
||||
name: 'maintainerUrl',
|
||||
message: 'Your home page URL or your mailto URL:'
|
||||
}, {
|
||||
type: 'input',
|
||||
name: 'url',
|
||||
message: 'URL you want to run Misskey:'
|
||||
}, {
|
||||
type: 'input',
|
||||
name: 'port',
|
||||
message: 'Listen port (e.g. 443):'
|
||||
}, {
|
||||
type: 'confirm',
|
||||
name: 'https',
|
||||
message: 'Use TLS?',
|
||||
default: false
|
||||
}, {
|
||||
type: 'input',
|
||||
name: 'https_key',
|
||||
message: 'Path of tls key:',
|
||||
when: ctx => ctx.https
|
||||
}, {
|
||||
type: 'input',
|
||||
name: 'https_cert',
|
||||
message: 'Path of tls cert:',
|
||||
when: ctx => ctx.https
|
||||
}, {
|
||||
type: 'input',
|
||||
name: 'https_ca',
|
||||
message: 'Path of tls ca:',
|
||||
when: ctx => ctx.https
|
||||
}, {
|
||||
type: 'input',
|
||||
name: 'mongo_host',
|
||||
message: 'MongoDB\'s host:',
|
||||
default: 'localhost'
|
||||
}, {
|
||||
type: 'input',
|
||||
name: 'mongo_port',
|
||||
message: 'MongoDB\'s port:',
|
||||
default: '27017'
|
||||
}, {
|
||||
type: 'input',
|
||||
name: 'mongo_db',
|
||||
message: 'MongoDB\'s db:',
|
||||
default: 'misskey'
|
||||
}, {
|
||||
type: 'input',
|
||||
name: 'mongo_user',
|
||||
message: 'MongoDB\'s user:'
|
||||
}, {
|
||||
type: 'password',
|
||||
name: 'mongo_pass',
|
||||
message: 'MongoDB\'s password:'
|
||||
}, {
|
||||
type: 'input',
|
||||
name: 'redis_host',
|
||||
message: 'Redis\'s host:',
|
||||
default: 'localhost'
|
||||
}, {
|
||||
type: 'input',
|
||||
name: 'redis_port',
|
||||
message: 'Redis\'s port:',
|
||||
default: '6379'
|
||||
}, {
|
||||
type: 'password',
|
||||
name: 'redis_pass',
|
||||
message: 'Redis\'s password:'
|
||||
}, {
|
||||
type: 'confirm',
|
||||
name: 'elasticsearch',
|
||||
message: 'Use Elasticsearch?',
|
||||
default: false
|
||||
}, {
|
||||
type: 'input',
|
||||
name: 'es_host',
|
||||
message: 'Elasticsearch\'s host:',
|
||||
default: 'localhost',
|
||||
when: ctx => ctx.elasticsearch
|
||||
}, {
|
||||
type: 'input',
|
||||
name: 'es_port',
|
||||
message: 'Elasticsearch\'s port:',
|
||||
default: '9200',
|
||||
when: ctx => ctx.elasticsearch
|
||||
}, {
|
||||
type: 'password',
|
||||
name: 'es_pass',
|
||||
message: 'Elasticsearch\'s password:',
|
||||
when: ctx => ctx.elasticsearch
|
||||
}, {
|
||||
type: 'input',
|
||||
name: 'recaptcha_site',
|
||||
message: 'reCAPTCHA\'s site key:'
|
||||
}, {
|
||||
type: 'input',
|
||||
name: 'recaptcha_secret',
|
||||
message: 'reCAPTCHA\'s secret key:'
|
||||
}];
|
||||
|
||||
inquirer.prompt(form).then(as => {
|
||||
// Mapping answers
|
||||
const conf = {
|
||||
maintainer: {
|
||||
name: as['maintainerName'],
|
||||
url: as['maintainerUrl']
|
||||
},
|
||||
url: as['url'],
|
||||
port: parseInt(as['port'], 10),
|
||||
mongodb: {
|
||||
host: as['mongo_host'],
|
||||
port: parseInt(as['mongo_port'], 10),
|
||||
db: as['mongo_db'],
|
||||
user: as['mongo_user'],
|
||||
pass: as['mongo_pass']
|
||||
},
|
||||
redis: {
|
||||
host: as['redis_host'],
|
||||
port: parseInt(as['redis_port'], 10),
|
||||
pass: as['redis_pass']
|
||||
},
|
||||
elasticsearch: {
|
||||
enable: as['elasticsearch'],
|
||||
host: as['es_host'] || null,
|
||||
port: parseInt(as['es_port'], 10) || null,
|
||||
pass: as['es_pass'] || null
|
||||
},
|
||||
recaptcha: {
|
||||
site_key: as['recaptcha_site'],
|
||||
secret_key: as['recaptcha_secret']
|
||||
}
|
||||
};
|
||||
|
||||
if (as['https']) {
|
||||
conf.https = {
|
||||
key: as['https_key'] || null,
|
||||
cert: as['https_cert'] || null,
|
||||
ca: as['https_ca'] || null
|
||||
};
|
||||
}
|
||||
|
||||
console.log(`Thanks. Writing the configuration to ${chalk.bold(path.resolve(configPath))}`);
|
||||
|
||||
try {
|
||||
fs.writeFileSync(configPath, yaml.dump(conf));
|
||||
console.log(chalk.green('Well done.'));
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
});
|
23
cli/mark-admin.js
Normal file
@@ -0,0 +1,23 @@
|
||||
const mongo = require('mongodb');
|
||||
const User = require('../built/models/user').default;
|
||||
|
||||
const args = process.argv.slice(2);
|
||||
|
||||
const user = args[0];
|
||||
|
||||
const q = user.startsWith('@') ? {
|
||||
username: user.split('@')[1],
|
||||
host: user.split('@')[2] || null
|
||||
} : { _id: new mongo.ObjectID(user) };
|
||||
|
||||
console.log(`Mark as admin ${user}...`);
|
||||
|
||||
User.update(q, {
|
||||
$set: {
|
||||
isAdmin: true
|
||||
}
|
||||
}).then(() => {
|
||||
console.log(`Done ${user}`);
|
||||
}, e => {
|
||||
console.error(e);
|
||||
});
|
23
cli/mark-verified.js
Normal file
@@ -0,0 +1,23 @@
|
||||
const mongo = require('mongodb');
|
||||
const User = require('../built/models/user').default;
|
||||
|
||||
const args = process.argv.slice(2);
|
||||
|
||||
const user = args[0];
|
||||
|
||||
const q = user.startsWith('@') ? {
|
||||
username: user.split('@')[1],
|
||||
host: user.split('@')[2] || null
|
||||
} : { _id: new mongo.ObjectID(user) };
|
||||
|
||||
console.log(`Mark as verfied ${user}...`);
|
||||
|
||||
User.update(q, {
|
||||
$set: {
|
||||
isVerified: true
|
||||
}
|
||||
}).then(() => {
|
||||
console.log(`Done ${user}`);
|
||||
}, e => {
|
||||
console.error(e);
|
||||
});
|
57
cli/migration/2.0.0.js
Normal file
@@ -0,0 +1,57 @@
|
||||
// for Node.js interpret
|
||||
|
||||
const chalk = require('chalk');
|
||||
const sequential = require('promise-sequential');
|
||||
|
||||
const { default: User } = require('../../built/models/user');
|
||||
const { default: DriveFile } = require('../../built/models/drive-file');
|
||||
|
||||
async function main() {
|
||||
const promiseGens = [];
|
||||
|
||||
const count = await DriveFile.count({});
|
||||
|
||||
let prev;
|
||||
|
||||
for (let i = 0; i < count; i++) {
|
||||
promiseGens.push(() => {
|
||||
const promise = new Promise(async (res, rej) => {
|
||||
const file = await DriveFile.findOne(prev ? {
|
||||
_id: { $gt: prev._id }
|
||||
} : {}, {
|
||||
sort: {
|
||||
_id: 1
|
||||
}
|
||||
});
|
||||
|
||||
prev = file;
|
||||
|
||||
const user = await User.findOne({ _id: file.metadata.userId });
|
||||
|
||||
DriveFile.update({
|
||||
_id: file._id
|
||||
}, {
|
||||
$set: {
|
||||
'metadata._user': {
|
||||
host: user.host
|
||||
}
|
||||
}
|
||||
}).then(() => {
|
||||
res([i, file]);
|
||||
}).catch(rej);
|
||||
});
|
||||
|
||||
promise.then(([i, file]) => {
|
||||
console.log(chalk`{gray ${i}} {green done: {bold ${file._id}} ${file.filename}}`);
|
||||
});
|
||||
|
||||
return promise;
|
||||
});
|
||||
}
|
||||
|
||||
return await sequential(promiseGens);
|
||||
}
|
||||
|
||||
main().then(() => {
|
||||
console.log('ALL DONE');
|
||||
}).catch(console.error);
|
71
cli/migration/2.4.0.js
Normal file
@@ -0,0 +1,71 @@
|
||||
// for Node.js interpret
|
||||
|
||||
const chalk = require('chalk');
|
||||
const sequential = require('promise-sequential');
|
||||
|
||||
const { default: User } = require('../../built/models/user');
|
||||
const { default: DriveFile } = require('../../built/models/drive-file');
|
||||
|
||||
async function main() {
|
||||
const promiseGens = [];
|
||||
|
||||
const count = await User.count({});
|
||||
|
||||
let prev;
|
||||
|
||||
for (let i = 0; i < count; i++) {
|
||||
promiseGens.push(() => {
|
||||
const promise = new Promise(async (res, rej) => {
|
||||
const user = await User.findOne(prev ? {
|
||||
_id: { $gt: prev._id }
|
||||
} : {}, {
|
||||
sort: {
|
||||
_id: 1
|
||||
}
|
||||
});
|
||||
|
||||
prev = user;
|
||||
|
||||
const set = {};
|
||||
|
||||
if (user.avatarId != null) {
|
||||
const file = await DriveFile.findOne({ _id: user.avatarId });
|
||||
|
||||
if (file && file.metadata.properties.avgColor) {
|
||||
set.avatarColor = file.metadata.properties.avgColor;
|
||||
}
|
||||
}
|
||||
|
||||
if (user.bannerId != null) {
|
||||
const file = await DriveFile.findOne({ _id: user.bannerId });
|
||||
|
||||
if (file && file.metadata.properties.avgColor) {
|
||||
set.bannerColor = file.metadata.properties.avgColor;
|
||||
}
|
||||
}
|
||||
|
||||
if (Object.keys(set).length === 0) return res([i, user]);
|
||||
|
||||
User.update({
|
||||
_id: user._id
|
||||
}, {
|
||||
$set: set
|
||||
}).then(() => {
|
||||
res([i, user]);
|
||||
}).catch(rej);
|
||||
});
|
||||
|
||||
promise.then(([i, user]) => {
|
||||
console.log(chalk`{gray ${i}} {green done: {bold ${user._id}} @${user.username}}`);
|
||||
});
|
||||
|
||||
return promise;
|
||||
});
|
||||
}
|
||||
|
||||
return await sequential(promiseGens);
|
||||
}
|
||||
|
||||
main().then(() => {
|
||||
console.log('ALL DONE');
|
||||
}).catch(console.error);
|
9
cli/migration/5.0.0.js
Normal file
@@ -0,0 +1,9 @@
|
||||
const { default: DriveFile } = require('../../built/models/drive-file');
|
||||
|
||||
DriveFile.update({}, {
|
||||
$rename: {
|
||||
'metadata.isMetaOnly': 'metadata.withoutChunks'
|
||||
}
|
||||
}, {
|
||||
multi: true
|
||||
});
|
42
cli/recount-stats.js
Normal file
@@ -0,0 +1,42 @@
|
||||
const { default: Note } = require('../built/models/note');
|
||||
const { default: Meta } = require('../built/models/meta');
|
||||
const { default: User } = require('../built/models/user');
|
||||
|
||||
async function main() {
|
||||
const meta = await Meta.findOne({});
|
||||
|
||||
const notesCount = await Note.count();
|
||||
|
||||
const usersCount = await User.count();
|
||||
|
||||
const originalNotesCount = await Note.count({
|
||||
'_user.host': null
|
||||
});
|
||||
|
||||
const originalUsersCount = await User.count({
|
||||
host: null
|
||||
});
|
||||
|
||||
const stats = {
|
||||
notesCount,
|
||||
usersCount,
|
||||
originalNotesCount,
|
||||
originalUsersCount
|
||||
};
|
||||
|
||||
if (meta) {
|
||||
await Meta.update({}, {
|
||||
$set: {
|
||||
stats
|
||||
}
|
||||
});
|
||||
} else {
|
||||
await Meta.insert({
|
||||
stats
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
main().then(() => {
|
||||
console.log('done');
|
||||
}).catch(console.error);
|
29
cli/reset-password.js
Normal file
@@ -0,0 +1,29 @@
|
||||
const mongo = require('mongodb');
|
||||
const bcrypt = require('bcryptjs');
|
||||
const User = require('../built/models/user').default;
|
||||
|
||||
const args = process.argv.slice(2);
|
||||
|
||||
const user = args[0];
|
||||
|
||||
const q = user.startsWith('@') ? {
|
||||
username: user.split('@')[1],
|
||||
host: user.split('@')[2] || null
|
||||
} : { _id: new mongo.ObjectID(user) };
|
||||
|
||||
console.log(`Resetting password for ${user}...`);
|
||||
|
||||
const passwd = 'yo';
|
||||
|
||||
// Generate hash of password
|
||||
const hash = bcrypt.hashSync(passwd);
|
||||
|
||||
User.update(q, {
|
||||
$set: {
|
||||
password: hash
|
||||
}
|
||||
}).then(() => {
|
||||
console.log(`Password of ${user} is now '${passwd}'`);
|
||||
}, e => {
|
||||
console.error(e);
|
||||
});
|
@@ -3,16 +3,21 @@ const User = require('../built/models/user').default;
|
||||
|
||||
const args = process.argv.slice(2);
|
||||
|
||||
const userId = new mongo.ObjectID(args[0]);
|
||||
const user = args[0];
|
||||
|
||||
console.log(`Suspending ${userId}...`);
|
||||
const q = user.startsWith('@') ? {
|
||||
username: user.split('@')[1],
|
||||
host: user.split('@')[2] || null
|
||||
} : { _id: new mongo.ObjectID(user) };
|
||||
|
||||
User.update({ _id: userId }, {
|
||||
console.log(`Suspending ${user}...`);
|
||||
|
||||
User.update(q, {
|
||||
$set: {
|
||||
isSuspended: true
|
||||
}
|
||||
}).then(() => {
|
||||
console.log(`Suspended ${userId}`);
|
||||
console.log(`Suspended ${user}`);
|
||||
}, e => {
|
||||
console.error(e);
|
||||
});
|
||||
|
12
cli/update-remote-user.js
Normal file
@@ -0,0 +1,12 @@
|
||||
const updatePerson = require('../built/remote/activitypub/models/person').updatePerson;
|
||||
|
||||
const args = process.argv.slice(2);
|
||||
const user = args[0];
|
||||
|
||||
console.log(`Updating ${user}...`);
|
||||
|
||||
updatePerson(user).then(() => {
|
||||
console.log(`Updated ${user}`);
|
||||
}, e => {
|
||||
console.error(e);
|
||||
});
|
3
crowdin.yml
Normal file
@@ -0,0 +1,3 @@
|
||||
files:
|
||||
- source: /locales/ja.yml
|
||||
translation: /locales/%two_letters_code%.yml
|
@@ -14,7 +14,7 @@ RUN pacman -S --noconfirm pacman
|
||||
RUN pacman-db-upgrade
|
||||
RUN pacman -S --noconfirm archlinux-keyring
|
||||
RUN pacman -Syyu --noconfirm
|
||||
RUN pacman -S --noconfirm git nodejs npm mongodb redis imagemagick
|
||||
RUN pacman -S --noconfirm git nodejs npm mongodb redis
|
||||
|
||||
COPY misskey.sh /root/misskey.sh
|
||||
RUN chmod u+x /root/misskey.sh
|
||||
|
@@ -22,8 +22,4 @@ The list of people who have sent donation for Misskey.
|
||||
|
||||
---
|
||||
|
||||
If your name is missing, please contact us!
|
||||
|
||||
If you want to donate to Misskey, please get in touch with [@syuilo][syuilo-link].
|
||||
|
||||
[syuilo-link]: https://syuilo.com
|
||||
If your name is missing, please contact us!
|
6
docs/README.md
Normal file
@@ -0,0 +1,6 @@
|
||||
# Docs
|
||||
These docs are for contributors of Misskey or admins of instance of Misskey.
|
||||
Docs for users are located in `src/docs`.
|
||||
|
||||
これらのドキュメントはMisskeyの開発者またはMisskeyインスタンス運営者向けです。
|
||||
利用者向けのドキュメントは`src/docs`にあります。
|
@@ -1,26 +0,0 @@
|
||||
# Misskeyにカンパする方法
|
||||
Misskeyのサポートにご興味をお持ちいただきありがとうございます!
|
||||
Misskeyにカンパをしていただくと、貴方のお名前と好きなURLなどをMisskeyのリポジトリに刻む権利がもらえます。
|
||||
|
||||
Misskeyにカンパして開発・運営をサポートするには、次のいくつかの方法があります:
|
||||
|
||||
## ConoHaカードを購入する
|
||||
(本家)Misskeyは、ConoHaというVPSサービスを利用しています。ConoHaカードを購入して、
|
||||
カードに記載されているクーポンコードを syuilotan@yahoo.co.jp までお送りいただければ、
|
||||
そのクーポンをチャージしてサーバーの運営費に充てることができます。
|
||||
|
||||
ConoHaカードについてはこちらをご覧ください: https://www.conoha.jp/conohacard/
|
||||
|
||||
Amazonでも買えます: https://www.amazon.co.jp/dp/B01N9E3416
|
||||
|
||||
## Amazonギフトカード
|
||||
これは間接的な方法です。
|
||||
|
||||
## 銀行振込
|
||||
syuilotan@yahoo.co.jp までお問い合わせください。
|
||||
|
||||
## 手渡し
|
||||
オフ会を行ったときなどに行使できる方法です。
|
||||
|
||||
## その他
|
||||
なにかいいアイデアがあればお教えください。
|
46
docs/manage.en.md
Normal file
@@ -0,0 +1,46 @@
|
||||
# Management guide
|
||||
|
||||
## Check the status of the job queue
|
||||
coming soon
|
||||
|
||||
## Mark as 'admin' user
|
||||
``` shell
|
||||
node cli/mark-admin (User-ID or Username)
|
||||
```
|
||||
|
||||
## Mark as 'verified' user
|
||||
``` shell
|
||||
node cli/mark-verified (User-ID or Username)
|
||||
```
|
||||
|
||||
## Suspend users
|
||||
``` shell
|
||||
node cli/suspend (User-ID or Username)
|
||||
```
|
||||
e.g.
|
||||
``` shell
|
||||
# Use id
|
||||
node cli/suspend 57d01a501fdf2d07be417afe
|
||||
|
||||
# Use username
|
||||
node cli/suspend @syuilo
|
||||
|
||||
# Use username (remote)
|
||||
node cli/suspend @syuilo@misskey.xyz
|
||||
```
|
||||
|
||||
## Reset password
|
||||
``` shell
|
||||
node cli/reset-password (User-ID or Username)
|
||||
```
|
||||
|
||||
## Clean up cached remote files
|
||||
``` shell
|
||||
node cli/clean-cached-remote-files
|
||||
```
|
||||
|
||||
## Clean up unused drive files
|
||||
``` shell
|
||||
node cli/clean-unused-drive-files
|
||||
```
|
||||
> We recommend that you announce a user that unused drive files will be deleted before performing this operation, as it may delete the user's important files.
|
@@ -1,13 +1,46 @@
|
||||
# 運営ガイド
|
||||
|
||||
## ジョブキューの状態を調べる
|
||||
Misskeyのディレクトリで:
|
||||
coming soon
|
||||
|
||||
## 管理者ユーザーを設定する
|
||||
``` shell
|
||||
node_modules/kue/bin/kue-dashboard -p 3050
|
||||
node cli/mark-admin (ユーザーID または ユーザー名)
|
||||
```
|
||||
|
||||
## 'verified'ユーザーを設定する
|
||||
``` shell
|
||||
node cli/mark-verified (ユーザーID または ユーザー名)
|
||||
```
|
||||
ポート3050にアクセスするとUIが表示されます
|
||||
|
||||
## ユーザーを凍結する
|
||||
``` shell
|
||||
node cli/suspend (ユーザーID)
|
||||
node cli/suspend (ユーザーID または ユーザー名)
|
||||
```
|
||||
例:
|
||||
``` shell
|
||||
# ユーザーID
|
||||
node cli/suspend 57d01a501fdf2d07be417afe
|
||||
|
||||
# ユーザー名
|
||||
node cli/suspend @syuilo
|
||||
|
||||
# ユーザー名 (リモート)
|
||||
node cli/suspend @syuilo@misskey.xyz
|
||||
```
|
||||
|
||||
## ユーザーのパスワードをリセットする
|
||||
``` shell
|
||||
node cli/reset-password (ユーザーID または ユーザー名)
|
||||
```
|
||||
|
||||
## キャッシュされたリモートファイルをクリーンアップする
|
||||
``` shell
|
||||
node cli/clean-cached-remote-files
|
||||
```
|
||||
|
||||
## 使われていないドライブのファイルをクリーンアップする
|
||||
``` shell
|
||||
node cli/clean-unused-drive-files
|
||||
```
|
||||
> ユーザーの大事なファイルを削除する可能性があるので、この操作を実行する前にユーザーに告知することをお勧めします。
|
||||
|
123
docs/setup.en.md
@@ -8,18 +8,13 @@ This guide describes how to install and setup Misskey.
|
||||
|
||||
----------------------------------------------------------------
|
||||
|
||||
*1.* reCAPTCHA tokens
|
||||
*1.* Create Misskey user
|
||||
----------------------------------------------------------------
|
||||
Misskey requires reCAPTCHA tokens.
|
||||
Please visit https://www.google.com/recaptcha/intro/ and generate keys.
|
||||
Running misskey on root is not a good idea so we create a user for that.
|
||||
In debian for exemple :
|
||||
|
||||
*(optional)* Generating VAPID keys
|
||||
----------------------------------------------------------------
|
||||
If you want to enable ServiceWroker, you need to generate VAPID keys:
|
||||
|
||||
``` shell
|
||||
npm install web-push -g
|
||||
web-push generate-vapid-keys
|
||||
```
|
||||
adduser --disabled-password --disabled-login misskey
|
||||
```
|
||||
|
||||
*2.* Install dependencies
|
||||
@@ -27,47 +22,109 @@ web-push generate-vapid-keys
|
||||
Please install and setup these softwares:
|
||||
|
||||
#### Dependencies :package:
|
||||
* *Node.js* and *npm*
|
||||
* **[MongoDB](https://www.mongodb.com/)**
|
||||
* **[Node.js](https://nodejs.org/en/)**
|
||||
* **[MongoDB](https://www.mongodb.com/)** >= 3.6
|
||||
* **[Redis](https://redis.io/)**
|
||||
* **[ImageMagick](http://www.imagemagick.org/script/index.php)** >= 7.0
|
||||
|
||||
##### Optional
|
||||
* [Elasticsearch](https://www.elastic.co/) - used to provide searching feature instead of MongoDB
|
||||
|
||||
*3.* Install Misskey
|
||||
|
||||
*3.* Setup MongoDB
|
||||
----------------------------------------------------------------
|
||||
1. `git clone -b master git://github.com/syuilo/misskey.git`
|
||||
2. `cd misskey`
|
||||
3. `npm install`
|
||||
In root :
|
||||
1. `mongo` Go to the mongo shell
|
||||
2. `use misskey` Use the misskey database
|
||||
3. `db.users.save( {dummy:"dummy"} )` Write dummy data to initialize the db.
|
||||
4. `db.createUser( { user: "misskey", pwd: "<password>", roles: [ { role: "readWrite", db: "misskey" } ] } )` Create the misskey user.
|
||||
5. `exit` You're done !
|
||||
|
||||
*4.* Prepare configuration
|
||||
*4.* Install Misskey
|
||||
----------------------------------------------------------------
|
||||
1. Copy `example.yml` of `.config` directory
|
||||
2. Rename it to `default.yml`
|
||||
3. Edit it
|
||||
1. `su - misskey` Connect to misskey user.
|
||||
2. `git clone -b master git://github.com/syuilo/misskey.git` Clone the misskey repo from master branch.
|
||||
3. `cd misskey` Navigate to misskey directory
|
||||
4. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)` Checkout to the [latest release](https://github.com/syuilo/misskey/releases/latest)
|
||||
5. `npm install` Install misskey dependencies.
|
||||
|
||||
---
|
||||
|
||||
Or you can generate config file via `npm run config` command.
|
||||
|
||||
*5.* Build Misskey
|
||||
*(optional)* reCAPTCHA tokens
|
||||
----------------------------------------------------------------
|
||||
We need to use `node-gyp` to build the `crypto` module.
|
||||
If you want to enable reCAPTCHA, you need to generate reCAPTCHA tokens:
|
||||
Please visit https://www.google.com/recaptcha/intro/ and generate keys.
|
||||
|
||||
*(optional)* Generating VAPID keys
|
||||
----------------------------------------------------------------
|
||||
If you want to enable ServiceWroker, you need to generate VAPID keys:
|
||||
Unless you have set your global node_modules location elsewhere, you need to run this in root.
|
||||
|
||||
``` shell
|
||||
npm install web-push -g
|
||||
web-push generate-vapid-keys
|
||||
```
|
||||
|
||||
*5.* Make configuration file
|
||||
----------------------------------------------------------------
|
||||
1. `cp .config/example.yml .config/default.yml` Copy the `.config/example.yml` and rename it to `default.yml`.
|
||||
2. Edit `default.yml`
|
||||
|
||||
*6.* Build Misskey
|
||||
----------------------------------------------------------------
|
||||
|
||||
Build misskey with the following:
|
||||
|
||||
`npm run build`
|
||||
|
||||
If you're on Debian, you will need to install the `build-essential` package.
|
||||
|
||||
If you're still encountering errors about some modules, use node-gyp:
|
||||
|
||||
1. `npm install -g node-gyp`
|
||||
2. `node-gyp configure`
|
||||
3. `node-gyp build`
|
||||
4. `npm run build`
|
||||
|
||||
*6.* That is it.
|
||||
*7.* That is it.
|
||||
----------------------------------------------------------------
|
||||
Well done! Now, you have an environment that run to Misskey.
|
||||
|
||||
### Launch
|
||||
Just `sudo npm start`. GLHF!
|
||||
### Launch normally
|
||||
Just `npm start`. GLHF!
|
||||
|
||||
### Launch with systemd
|
||||
|
||||
1. Create a systemd service here: `/etc/systemd/system/misskey.service`
|
||||
2. Edit it, and paste this and save:
|
||||
|
||||
```
|
||||
[Unit]
|
||||
Description=Misskey daemon
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=misskey
|
||||
ExecStart=/usr/bin/npm start
|
||||
WorkingDirectory=/home/misskey/misskey
|
||||
TimeoutSec=60
|
||||
StandardOutput=syslog
|
||||
StandardError=syslog
|
||||
SyslogIdentifier=misskey
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
3. `systemctl daemon-reload ; systemctl enable misskey` Reload systemd and enable the misskey service.
|
||||
4. `systemctl start misskey` Start the misskey service.
|
||||
|
||||
You can check if the service is running with `systemctl status misskey`.
|
||||
|
||||
### Way to Update to latest version of your Misskey
|
||||
1. `git reset --hard && git pull origin master`
|
||||
2. `npm install`
|
||||
3. `npm run build`
|
||||
1. `git fetch`
|
||||
2. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)`
|
||||
3. `npm install`
|
||||
4. `npm run build`
|
||||
|
||||
----------------------------------------------------------------
|
||||
|
||||
If you have any questions or troubles, feel free to contact us!
|
||||
|
127
docs/setup.ja.md
@@ -8,10 +8,48 @@ Misskeyサーバーの構築にご関心をお寄せいただきありがとう
|
||||
|
||||
----------------------------------------------------------------
|
||||
|
||||
*1.* reCAPTCHAトークンの用意
|
||||
*1.* Misskeyユーザーの作成
|
||||
----------------------------------------------------------------
|
||||
MisskeyはreCAPTCHAトークンを必要とします。
|
||||
https://www.google.com/recaptcha/intro/ にアクセスしてトークンを生成してください。
|
||||
Misskeyのrootで実行しない方がよいため、代わりにユーザーを作成します。
|
||||
Debianの例:
|
||||
|
||||
```
|
||||
adduser --disabled-password --disabled-login misskey
|
||||
```
|
||||
|
||||
*2.* 依存関係をインストールする
|
||||
----------------------------------------------------------------
|
||||
これらのソフトウェアをインストール・設定してください:
|
||||
|
||||
#### 依存関係 :package:
|
||||
* **[Node.js](https://nodejs.org/en/)**
|
||||
* **[MongoDB](https://www.mongodb.com/)** (3.6以上)
|
||||
* **[Redis](https://redis.io/)**
|
||||
|
||||
##### オプション
|
||||
* [Elasticsearch](https://www.elastic.co/) - 検索機能を向上させるために用います。
|
||||
|
||||
*3.* MongoDBの設定
|
||||
----------------------------------------------------------------
|
||||
ルートで:
|
||||
1. `mongo` mongoシェルを起動
|
||||
2. `use misskey` misskeyデータベースを使用
|
||||
3. `db.users.save( {dummy:"dummy"} )` ダミーデータを書き込みDBを初期化
|
||||
4. `db.createUser( { user: "misskey", pwd: "<password>", roles: [ { role: "readWrite", db: "misskey" } ] } )` misskeyユーザーを作成
|
||||
5. `exit` mongoシェルを終了
|
||||
|
||||
*4.* Misskeyのインストール
|
||||
----------------------------------------------------------------
|
||||
1. `su - misskey` misskeyユーザーを使用
|
||||
2. `git clone -b master git://github.com/syuilo/misskey.git` masterブランチからMisskeyレポジトリをクローン
|
||||
3. `cd misskey` misskeyディレクトリに移動
|
||||
4. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)` [最新のリリース](https://github.com/syuilo/misskey/releases/latest)を確認
|
||||
5. `npm install` Misskeyの依存パッケージをインストール
|
||||
|
||||
*(オプション)* reCAPTCHAトークン
|
||||
----------------------------------------------------------------
|
||||
reCAPTCHAを有効にする場合、reCAPTCHAトークンを取得する必要があります。
|
||||
https://www.google.com/recaptcha/intro/ にアクセスしてトークンを取得してください。
|
||||
|
||||
*(オプション)* VAPIDキーペアの生成
|
||||
----------------------------------------------------------------
|
||||
@@ -22,48 +60,67 @@ npm install web-push -g
|
||||
web-push generate-vapid-keys
|
||||
```
|
||||
|
||||
*2.* 依存関係をインストールする
|
||||
*5.* 設定ファイルを作成する
|
||||
----------------------------------------------------------------
|
||||
これらのソフトウェアをインストール・設定してください:
|
||||
1. `cp .config/example.yml .config/default.yml` `.config/example.yml`をコピーし名前を`default.yml`にする。
|
||||
2. `default.yml` を編集する。
|
||||
|
||||
#### 依存関係 :package:
|
||||
* *Node.js* と *npm*
|
||||
* **[MongoDB](https://www.mongodb.com/)**
|
||||
* **[Redis](https://redis.io/)**
|
||||
* **[ImageMagick](http://www.imagemagick.org/script/index.php)**
|
||||
|
||||
##### オプション
|
||||
* [Elasticsearch](https://www.elastic.co/) - 検索機能を向上させるために用います。
|
||||
|
||||
*3.* Misskeyのインストール
|
||||
*6.* Misskeyのビルド
|
||||
----------------------------------------------------------------
|
||||
1. `git clone -b master git://github.com/syuilo/misskey.git`
|
||||
2. `cd misskey`
|
||||
3. `npm install`
|
||||
|
||||
*4.* 設定ファイルを用意する
|
||||
----------------------------------------------------------------
|
||||
1. `.config`ディレクトリ内の`example.yml`をコピー
|
||||
2. `default.yml`にリネーム
|
||||
3. 編集する
|
||||
次のコマンドでMisskeyをビルドしてください:
|
||||
|
||||
---
|
||||
`npm run build`
|
||||
|
||||
または、`npm run config`コマンドを利用して、ガイドに従って情報を
|
||||
入力して設定ファイルを生成することもできます。
|
||||
Debianをお使いであれば、`build-essential`パッケージをインストールする必要があります。
|
||||
|
||||
*5.* Misskeyのビルド
|
||||
----------------------------------------------------------------
|
||||
1. `npm run build`
|
||||
何らかのモジュールでエラーが発生する場合はnode-gypを使ってください:
|
||||
1. `npm install -g node-gyp`
|
||||
2. `node-gyp configure`
|
||||
3. `node-gyp build`
|
||||
4. `npm run build`
|
||||
|
||||
*6.* 以上です!
|
||||
*7.* 以上です!
|
||||
----------------------------------------------------------------
|
||||
お疲れ様でした。これでMisskeyを動かす準備は整いました。
|
||||
|
||||
### 起動
|
||||
`sudo npm start`するだけです。GLHF!
|
||||
### 通常起動
|
||||
`npm start`するだけです。GLHF!
|
||||
|
||||
### systemdを用いた起動
|
||||
1. systemdサービスのファイルを作成: `/etc/systemd/system/misskey.service`
|
||||
2. エディタで開き、以下のコードを貼り付けて保存:
|
||||
|
||||
```
|
||||
[Unit]
|
||||
Description=Misskey daemon
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=misskey
|
||||
ExecStart=/usr/bin/npm start
|
||||
WorkingDirectory=/home/misskey/misskey
|
||||
TimeoutSec=60
|
||||
StandardOutput=syslog
|
||||
StandardError=syslog
|
||||
SyslogIdentifier=misskey
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
3. `systemctl daemon-reload ; systemctl enable misskey` systemdを再読み込みしmisskeyサービスを有効化
|
||||
4. `systemctl start misskey` misskeyサービスの起動
|
||||
|
||||
`systemctl status misskey`と入力すると、サービスの状態を調べることができます。
|
||||
|
||||
### Misskeyを最新バージョンにアップデートする方法:
|
||||
1. `git reset --hard && git pull origin master`
|
||||
2. `npm install`
|
||||
3. `npm run build`
|
||||
1. `git fetch`
|
||||
2. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)`
|
||||
3. `npm install`
|
||||
4. `npm run build`
|
||||
|
||||
----------------------------------------------------------------
|
||||
|
||||
なにかお困りのことがありましたらお気軽にご連絡ください。
|
||||
|
@@ -1,26 +1,22 @@
|
||||
Misskey's Translation - English version
|
||||
============
|
||||
|
||||
How to add a new language?
|
||||
----------------------
|
||||
Copy a language file to `/locales` and rename it after the language you wish to add.
|
||||
Misskey's Translation
|
||||
=====================
|
||||
|
||||
If you find an untranslated part on Misskey:
|
||||
-------------------------------
|
||||
--------------------------------------------
|
||||
|
||||
1. Look for untranslated parts in the miskey's source code.
|
||||
1. Look for untranslated parts in the misskey's source code.
|
||||
- For instance, if you find an untranslated part in: `src/client/app/mobile/views/pages/home.vue`.
|
||||
|
||||
2. Replace the untranslated portion with a character string of the form `%i18n:@foo%`.
|
||||
- In fact, `foo` should be a word that is appropriate for the situation and is easy to understand in English.
|
||||
- For example, if the untranslated portion is the following "タイムライン" you must write: `%i18n:@timeline%`.
|
||||
|
||||
3. Open each language file in /locales, check whether the <strong>file name (path)</strong> found in step 1 exists, if not, create it.
|
||||
3. Open the `locales/ja.yml`, check whether the <strong>file name (path)</strong> found in step 1 exists, if not, create it.
|
||||
- Do not put the beginning of the path `src/client/app/` in the locale file.
|
||||
- For example, in this case we want to modify untranslated parts of `src/client/app/mobile/views/pages/home.vue`, so the key is `mobile/views/pages/home.vue`.
|
||||
|
||||
4. Add the translated text property using the `foo` keyword below the path that you found or created in step 2. Make sure to type your text in quotation marks. Text should always be inside of quotes.
|
||||
- For example, in this case we add timeline: `timeline: "Timeline"` to `locales/en.yml`, and `timeline: "タイムライン"` to `locales/ja.yml`.
|
||||
4. Add the text property using the `foo` keyword below the path that you found or created in step 2. Make sure to type your text in quotation marks. Text should always be inside of quotes.
|
||||
- For example, in this case we add timeline: `timeline: "タイムライン"` to `locales/ja.yml`.
|
||||
|
||||
5. And done!
|
||||
|
||||
|
@@ -1,12 +1,8 @@
|
||||
Traduction de Misskey - Version Française
|
||||
============
|
||||
|
||||
Comment ajouter une nouvelle langue ?
|
||||
----------------------
|
||||
Veuillez copier un fichier de langue dans /locales puis renommez-le du nom de la langue que vous voulez ajouter et modifier.
|
||||
Traduction de Misskey
|
||||
=====================
|
||||
|
||||
Si vous trouvez un segment non-traduit sur Misskey :
|
||||
-------------------------------
|
||||
----------------------------------------------------
|
||||
|
||||
1. Veuillez chercher des parties non-traduites dans le code source de Misskey.
|
||||
- Par exemple, supposons que vous trouviez un segment non-traduit dans : `src/client/app/mobile/views/pages/home.vue`.
|
||||
|
@@ -1,10 +1,6 @@
|
||||
Misskeyの翻訳
|
||||
============
|
||||
|
||||
新たな言語を追加するには
|
||||
----------------------
|
||||
/locales 内に既にある何らかの言語ファイルをコピーして、追加したい言語名にリネームして編集してください。
|
||||
|
||||
Misskey内の未翻訳箇所を見つけたら
|
||||
-------------------------------
|
||||
|
||||
@@ -15,12 +11,12 @@ Misskey内の未翻訳箇所を見つけたら
|
||||
- `foo`は実際にはその場に適したわかりやすい(英語の)名前にしてください。
|
||||
- 例えば未翻訳箇所が「タイムライン」というテキストだった場合、`%i18n:@timeline%`のようにします。
|
||||
|
||||
3. /locales 内にあるそれぞれの言語ファイルを開き、1.で見つけた<strong>ファイル名(パス)</strong>のキーが存在するか確認し、無ければ作成してください。
|
||||
3. `locales/ja.yml`を開き、1.で見つけた<strong>ファイル名(パス)</strong>のキーが存在するか確認し、無ければ作成してください。
|
||||
- パスの`src/client/app/`は省略してください。
|
||||
- 例えば、今回の例では`src/client/app/mobile/views/pages/home.vue`の未翻訳箇所を修正したいので、キーは`mobile/views/pages/home.vue`になります。
|
||||
|
||||
4. そのキーの直下に2.で置換した`foo`の部分をキーとし、翻訳後のテキストを値とするプロパティを追加します。
|
||||
- 例えば、今回の例で言うと`locales/ja.yml`に`timeline: "タイムライン"`、`locales/en.yml`に`timeline: "Timeline"`を追加します。
|
||||
4. そのキーの直下に2.で置換した`foo`の部分をキーとし、テキストを値とするプロパティを追加します。
|
||||
- 例えば、今回の例で言うと`locales/ja.yml`に`timeline: "タイムライン"`を追加します。
|
||||
|
||||
5. 完了です!
|
||||
|
||||
|
@@ -1,6 +0,0 @@
|
||||
How to create indexes
|
||||
=====================
|
||||
|
||||
``` shell
|
||||
curl -XPOST localhost:9200/misskey -d @path/to/mappings.json
|
||||
```
|
@@ -1,65 +0,0 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"analyzer": {
|
||||
"bigram": {
|
||||
"tokenizer": "bigram_tokenizer"
|
||||
}
|
||||
},
|
||||
"tokenizer": {
|
||||
"bigram_tokenizer": {
|
||||
"type": "nGram",
|
||||
"min_gram": 2,
|
||||
"max_gram": 2,
|
||||
"token_chars": [
|
||||
"letter",
|
||||
"digit"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"mappings": {
|
||||
"user": {
|
||||
"properties": {
|
||||
"username": {
|
||||
"type": "string",
|
||||
"index": "analyzed",
|
||||
"analyzer": "bigram"
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"index": "analyzed",
|
||||
"analyzer": "bigram"
|
||||
},
|
||||
"bio": {
|
||||
"type": "string",
|
||||
"index": "analyzed",
|
||||
"analyzer": "kuromoji"
|
||||
}
|
||||
}
|
||||
},
|
||||
"post": {
|
||||
"properties": {
|
||||
"text": {
|
||||
"type": "string",
|
||||
"index": "analyzed",
|
||||
"analyzer": "kuromoji"
|
||||
}
|
||||
}
|
||||
},
|
||||
"drive_file": {
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"index": "analyzed",
|
||||
"analyzer": "kuromoji"
|
||||
},
|
||||
"user": {
|
||||
"type": "string",
|
||||
"index": "not_analyzed"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
54
gulpfile.ts
@@ -8,20 +8,21 @@ import * as gutil from 'gulp-util';
|
||||
import * as ts from 'gulp-typescript';
|
||||
const sourcemaps = require('gulp-sourcemaps');
|
||||
import tslint from 'gulp-tslint';
|
||||
import cssnano = require('gulp-cssnano');
|
||||
const cssnano = require('gulp-cssnano');
|
||||
const stylus = require('gulp-stylus');
|
||||
import * as uglifyComposer from 'gulp-uglify/composer';
|
||||
import pug = require('gulp-pug');
|
||||
import * as rimraf from 'rimraf';
|
||||
import chalk from 'chalk';
|
||||
import imagemin = require('gulp-imagemin');
|
||||
const imagemin = require('gulp-imagemin');
|
||||
import * as rename from 'gulp-rename';
|
||||
import * as mocha from 'gulp-mocha';
|
||||
import * as replace from 'gulp-replace';
|
||||
import * as htmlmin from 'gulp-htmlmin';
|
||||
const uglifyes = require('uglify-es');
|
||||
|
||||
import { fa } from './src/build/fa';
|
||||
const client = require('./built/client/meta.json');
|
||||
const locales = require('./locales');
|
||||
import { fa } from './src/misc/fa';
|
||||
import config from './src/config';
|
||||
|
||||
const uglify = uglifyComposer(uglifyes, console);
|
||||
@@ -37,8 +38,6 @@ if (isDebug) {
|
||||
|
||||
const constants = require('./src/const.json');
|
||||
|
||||
require('./src/client/docs/gulpfile.ts');
|
||||
|
||||
gulp.task('build', [
|
||||
'build:ts',
|
||||
'build:copy',
|
||||
@@ -46,8 +45,6 @@ gulp.task('build', [
|
||||
'doc'
|
||||
]);
|
||||
|
||||
gulp.task('rebuild', ['clean', 'build']);
|
||||
|
||||
gulp.task('build:ts', () => {
|
||||
const tsProject = ts.createProject('./tsconfig.json');
|
||||
|
||||
@@ -59,9 +56,15 @@ gulp.task('build:ts', () => {
|
||||
.pipe(gulp.dest('./built/'));
|
||||
});
|
||||
|
||||
gulp.task('build:copy', () =>
|
||||
gulp.task('build:copy:views', () =>
|
||||
gulp.src('./src/server/web/views/**/*').pipe(gulp.dest('./built/server/web/views'))
|
||||
);
|
||||
|
||||
gulp.task('build:copy', ['build:copy:views'], () =>
|
||||
gulp.src([
|
||||
'./build/Release/crypto_key.node',
|
||||
'./src/const.json',
|
||||
'./src/server/web/views/**/*',
|
||||
'./src/**/assets/**/*',
|
||||
'!./src/client/app/**/assets/**/*'
|
||||
]).pipe(gulp.dest('./built/'))
|
||||
@@ -78,19 +81,19 @@ gulp.task('lint', () =>
|
||||
);
|
||||
|
||||
gulp.task('format', () =>
|
||||
gulp.src('./src/**/*.ts')
|
||||
.pipe(tslint({
|
||||
formatter: 'verbose',
|
||||
fix: true
|
||||
}))
|
||||
.pipe(tslint.report())
|
||||
gulp.src('./src/**/*.ts')
|
||||
.pipe(tslint({
|
||||
formatter: 'verbose',
|
||||
fix: true
|
||||
}))
|
||||
.pipe(tslint.report())
|
||||
);
|
||||
|
||||
gulp.task('mocha', () =>
|
||||
gulp.src([])
|
||||
gulp.src('./test/**/*.ts')
|
||||
.pipe(mocha({
|
||||
exit: true,
|
||||
compilers: 'ts:ts-node/register'
|
||||
require: 'ts-node/register'
|
||||
} as any))
|
||||
);
|
||||
|
||||
@@ -111,16 +114,18 @@ gulp.task('build:client', [
|
||||
'copy:client'
|
||||
]);
|
||||
|
||||
gulp.task('build:client:script', () =>
|
||||
gulp.src(['./src/client/app/boot.js', './src/client/app/safe.js'])
|
||||
gulp.task('build:client:script', () => {
|
||||
const client = require('./built/client/meta.json');
|
||||
return gulp.src(['./src/client/app/boot.js', './src/client/app/safe.js'])
|
||||
.pipe(replace('VERSION', JSON.stringify(client.version)))
|
||||
.pipe(replace('API', JSON.stringify(config.api_url)))
|
||||
.pipe(replace('ENV', JSON.stringify(env)))
|
||||
.pipe(replace('LANGS', JSON.stringify(Object.keys(locales))))
|
||||
.pipe(isProduction ? uglify({
|
||||
toplevel: true
|
||||
} as any) : gutil.noop())
|
||||
.pipe(gulp.dest('./built/client/assets/')) as any
|
||||
);
|
||||
.pipe(gulp.dest('./built/client/assets/'));
|
||||
});
|
||||
|
||||
gulp.task('build:client:styles', () =>
|
||||
gulp.src('./src/client/app/init.css')
|
||||
@@ -193,3 +198,10 @@ gulp.task('build:client:pug', [
|
||||
}))
|
||||
.pipe(gulp.dest('./built/client/app/'))
|
||||
);
|
||||
|
||||
gulp.task('doc', () =>
|
||||
gulp.src('./src/docs/**/*.styl')
|
||||
.pipe(stylus())
|
||||
.pipe((cssnano as any)())
|
||||
.pipe(gulp.dest('./built/docs/assets/'))
|
||||
);
|
||||
|
1137
locales/ca.yml
Normal file
1137
locales/de.yml
Normal file
940
locales/en.yml
1137
locales/es.yml
Normal file
818
locales/fr.yml
27
locales/index.js
Normal file
@@ -0,0 +1,27 @@
|
||||
/**
|
||||
* Languages Loader
|
||||
*/
|
||||
|
||||
const fs = require('fs');
|
||||
const yaml = require('js-yaml');
|
||||
|
||||
const loadLang = lang => yaml.safeLoad(
|
||||
fs.readFileSync(`${__dirname}/${lang}.yml`, 'utf-8'));
|
||||
|
||||
const native = loadLang('ja');
|
||||
|
||||
const langs = {
|
||||
'de': loadLang('de'),
|
||||
'en': loadLang('en'),
|
||||
'fr': loadLang('fr'),
|
||||
'ja': native,
|
||||
'pl': loadLang('pl'),
|
||||
'es': loadLang('es')
|
||||
};
|
||||
|
||||
Object.values(langs).forEach(locale => {
|
||||
// Extend native language (Japanese)
|
||||
locale = Object.assign({}, native, locale);
|
||||
});
|
||||
|
||||
module.exports = langs;
|
@@ -1,24 +0,0 @@
|
||||
/**
|
||||
* Languages Loader
|
||||
*/
|
||||
|
||||
import * as fs from 'fs';
|
||||
import * as yaml from 'js-yaml';
|
||||
|
||||
const loadLang = lang => yaml.safeLoad(
|
||||
fs.readFileSync(`./locales/${lang}.yml`, 'utf-8'));
|
||||
|
||||
const native = loadLang('ja');
|
||||
|
||||
const langs = {
|
||||
'en': loadLang('en'),
|
||||
'fr': loadLang('fr'),
|
||||
'ja': native
|
||||
};
|
||||
|
||||
Object.entries(langs).map(([, locale]) => {
|
||||
// Extend native language (Japanese)
|
||||
locale = Object.assign({}, native, locale);
|
||||
});
|
||||
|
||||
export default langs;
|
1137
locales/it.yml
Normal file
754
locales/ja.yml
1137
locales/ko.yml
Normal file
1137
locales/pl.yml
Normal file
1137
locales/pt.yml
Normal file
1137
locales/ru.yml
Normal file
1137
locales/zh.yml
Normal file
@@ -1,49 +0,0 @@
|
||||
// for Node.js interpret
|
||||
|
||||
const { default: User } = require('../built/models/user');
|
||||
const { default: Following } = require('../built/models/following');
|
||||
const { default: zip } = require('@prezzemolo/zip')
|
||||
|
||||
const migrate = async (following) => {
|
||||
const follower = await User.findOne({ _id: following.followerId });
|
||||
const followee = await User.findOne({ _id: following.followeeId });
|
||||
const result = await Following.update(following._id, {
|
||||
$set: {
|
||||
stalk: true,
|
||||
_follower: {
|
||||
host: follower.host,
|
||||
inbox: follower.host != null ? follower.inbox : undefined
|
||||
},
|
||||
_followee: {
|
||||
host: followee.host,
|
||||
inbox: followee.host != null ? followee.inbox : undefined
|
||||
}
|
||||
}
|
||||
});
|
||||
return result.ok === 1;
|
||||
}
|
||||
|
||||
async function main() {
|
||||
const count = await Following.count({});
|
||||
|
||||
const dop = Number.parseInt(process.argv[2]) || 5
|
||||
const idop = ((count - (count % dop)) / dop) + 1
|
||||
|
||||
return zip(
|
||||
1,
|
||||
async (time) => {
|
||||
console.log(`${time} / ${idop}`)
|
||||
const doc = await Following.find({}, {
|
||||
limit: dop, skip: time * dop
|
||||
})
|
||||
return Promise.all(doc.map(migrate))
|
||||
},
|
||||
idop
|
||||
).then(a => {
|
||||
const rv = []
|
||||
a.forEach(e => rv.push(...e))
|
||||
return rv
|
||||
})
|
||||
}
|
||||
|
||||
main().then(console.dir).catch(console.error)
|
@@ -1,11 +0,0 @@
|
||||
Misskeyの破壊的変更に対応するいくつかのスニペットがあります。
|
||||
MongoDBシェルで実行する必要のあるものとnodeで直接実行する必要のあるものがあります。
|
||||
ファイル名が `shell.` から始まるものは前者、 `node.` から始まるものは後者です。
|
||||
|
||||
MongoDBシェルで実行する場合、`use`でデータベースを選択しておく必要があります。
|
||||
|
||||
nodeで実行するいくつかのスニペットは、並列処理させる数を引数で設定できるものがあります。
|
||||
処理中にエラーで落ちる場合は、メモリが足りていない可能性があるので、少ない数に設定してみてください。
|
||||
※デフォルトは`5`です。
|
||||
|
||||
ファイルを作成する際は `../init-migration-file.sh -t _type_ -n _name_` を実行すると _type_._unixtime_._name_.js が生成されます
|
@@ -1,37 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
usage() {
|
||||
echo "$0 [-t type] [-n name]"
|
||||
echo " type: [node | shell]"
|
||||
echo " name: if no present, set untitled"
|
||||
exit 0
|
||||
}
|
||||
|
||||
while getopts :t:n:h OPT
|
||||
do
|
||||
case $OPT in
|
||||
t) type=$OPTARG
|
||||
;;
|
||||
n) name=$OPTARG
|
||||
;;
|
||||
h) usage
|
||||
;;
|
||||
\?) usage
|
||||
;;
|
||||
:) usage
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ "$type" = "" ]
|
||||
then
|
||||
echo "no type present!!!"
|
||||
usage
|
||||
fi
|
||||
|
||||
if [ "$name" = "" ]
|
||||
then
|
||||
name="untitled"
|
||||
fi
|
||||
|
||||
touch "$(realpath $(dirname $BASH_SOURCE))/migration/$type.$(date +%s).$name.js"
|
220
package.json
@@ -1,21 +1,18 @@
|
||||
{
|
||||
"name": "misskey",
|
||||
"author": "syuilo <i@syuilo.com>",
|
||||
"version": "1.0.0",
|
||||
"clientVersion": "1.0.0",
|
||||
"version": "5.11.0",
|
||||
"clientVersion": "1.0.7938",
|
||||
"codename": "nighthike",
|
||||
"main": "./built/index.js",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"config": "node ./cli/init.js",
|
||||
"start": "node ./built",
|
||||
"debug": "DEBUG=misskey:* node ./built",
|
||||
"swagger": "node ./swagger.js",
|
||||
"build": "webpack && gulp build",
|
||||
"webpack": "webpack",
|
||||
"watch": "webpack --watch",
|
||||
"gulp": "gulp build",
|
||||
"rebuild": "gulp rebuild",
|
||||
"clean": "gulp clean",
|
||||
"cleanall": "gulp cleanall",
|
||||
"lint": "gulp lint",
|
||||
@@ -23,21 +20,19 @@
|
||||
"format": "gulp format"
|
||||
},
|
||||
"dependencies": {
|
||||
"@fortawesome/fontawesome": "1.0.1",
|
||||
"@fortawesome/fontawesome-free-brands": "5.0.2",
|
||||
"@fortawesome/fontawesome-free-regular": "5.0.2",
|
||||
"@fortawesome/fontawesome-free-solid": "5.0.2",
|
||||
"@koa/cors": "2.2.1",
|
||||
"@fortawesome/fontawesome": "1.1.8",
|
||||
"@fortawesome/fontawesome-free-brands": "5.0.13",
|
||||
"@fortawesome/fontawesome-free-regular": "5.0.13",
|
||||
"@fortawesome/fontawesome-free-solid": "5.0.13",
|
||||
"@koa/cors": "2.2.2",
|
||||
"@prezzemolo/rap": "0.1.2",
|
||||
"@prezzemolo/zip": "0.0.3",
|
||||
"@types/bcryptjs": "2.4.1",
|
||||
"@types/chai": "4.1.2",
|
||||
"@types/chai-http": "3.0.4",
|
||||
"@types/dateformat": "1.0.1",
|
||||
"@types/debug": "0.0.30",
|
||||
"@types/deep-equal": "1.0.1",
|
||||
"@types/elasticsearch": "5.0.22",
|
||||
"@types/eventemitter3": "2.0.2",
|
||||
"@types/gm": "1.17.33",
|
||||
"@types/elasticsearch": "5.0.25",
|
||||
"@types/file-type": "5.2.1",
|
||||
"@types/gulp": "3.8.36",
|
||||
"@types/gulp-htmlmin": "1.3.32",
|
||||
"@types/gulp-mocha": "0.0.32",
|
||||
@@ -45,175 +40,192 @@
|
||||
"@types/gulp-replace": "0.0.31",
|
||||
"@types/gulp-uglify": "3.0.5",
|
||||
"@types/gulp-util": "3.0.34",
|
||||
"@types/inquirer": "0.0.41",
|
||||
"@types/is-root": "1.0.0",
|
||||
"@types/is-url": "1.2.28",
|
||||
"@types/js-yaml": "3.11.1",
|
||||
"@types/koa": "2.0.45",
|
||||
"@types/koa-bodyparser": "4.2.0",
|
||||
"@types/koa-compress": "^2.0.8",
|
||||
"@types/js-yaml": "3.11.2",
|
||||
"@types/jsdom": "11.0.6",
|
||||
"@types/koa": "2.0.46",
|
||||
"@types/koa-bodyparser": "5.0.1",
|
||||
"@types/koa-compress": "2.0.8",
|
||||
"@types/koa-favicon": "2.0.19",
|
||||
"@types/koa-logger": "^3.1.0",
|
||||
"@types/koa-logger": "3.1.0",
|
||||
"@types/koa-mount": "3.0.1",
|
||||
"@types/koa-multer": "1.0.0",
|
||||
"@types/koa-router": "7.0.27",
|
||||
"@types/koa-router": "7.0.31",
|
||||
"@types/koa-send": "4.1.1",
|
||||
"@types/koa__cors": "2.2.2",
|
||||
"@types/kue": "0.11.8",
|
||||
"@types/license-checker": "15.0.0",
|
||||
"@types/koa-views": "2.0.3",
|
||||
"@types/koa__cors": "2.2.3",
|
||||
"@types/minio": "6.0.2",
|
||||
"@types/mkdirp": "0.5.2",
|
||||
"@types/mocha": "5.0.0",
|
||||
"@types/mongodb": "3.0.15",
|
||||
"@types/monk": "6.0.0",
|
||||
"@types/mocha": "5.2.3",
|
||||
"@types/mongodb": "3.1.3",
|
||||
"@types/ms": "0.7.30",
|
||||
"@types/node": "9.6.5",
|
||||
"@types/nopt": "3.0.29",
|
||||
"@types/node": "10.5.5",
|
||||
"@types/parse5": "5.0.0",
|
||||
"@types/portscanner": "2.1.0",
|
||||
"@types/pug": "2.0.4",
|
||||
"@types/qrcode": "0.8.1",
|
||||
"@types/qrcode": "1.2.0",
|
||||
"@types/ratelimiter": "2.1.28",
|
||||
"@types/redis": "2.8.6",
|
||||
"@types/request": "2.47.0",
|
||||
"@types/request-promise-native": "1.0.14",
|
||||
"@types/request": "2.47.1",
|
||||
"@types/request-promise-native": "1.0.15",
|
||||
"@types/rimraf": "2.0.2",
|
||||
"@types/seedrandom": "2.4.27",
|
||||
"@types/sharp": "0.17.9",
|
||||
"@types/showdown": "1.7.5",
|
||||
"@types/single-line-log": "1.1.0",
|
||||
"@types/speakeasy": "2.0.2",
|
||||
"@types/systeminformation": "3.23.0",
|
||||
"@types/tmp": "0.0.33",
|
||||
"@types/uuid": "3.4.3",
|
||||
"@types/webpack": "4.1.3",
|
||||
"@types/webpack": "4.4.9",
|
||||
"@types/webpack-stream": "3.2.10",
|
||||
"@types/websocket": "0.0.38",
|
||||
"@types/ws": "4.0.2",
|
||||
"@types/websocket": "0.0.39",
|
||||
"@types/ws": "5.1.2",
|
||||
"animejs": "2.2.0",
|
||||
"autosize": "4.0.1",
|
||||
"autosize": "4.0.2",
|
||||
"autwh": "0.1.0",
|
||||
"bcryptjs": "2.4.3",
|
||||
"bootstrap-vue": "2.0.0-rc.6",
|
||||
"cafy": "6.0.0",
|
||||
"chai": "4.1.2",
|
||||
"chai-http": "4.0.0",
|
||||
"chalk": "2.4.0",
|
||||
"bee-queue": "1.2.2",
|
||||
"bootstrap-vue": "2.0.0-rc.11",
|
||||
"cafy": "11.3.0",
|
||||
"chalk": "2.4.1",
|
||||
"commander": "2.16.0",
|
||||
"crc-32": "1.2.0",
|
||||
"css-loader": "0.28.11",
|
||||
"css-loader": "1.0.0",
|
||||
"dateformat": "3.0.3",
|
||||
"debug": "3.1.0",
|
||||
"deep-equal": "1.0.1",
|
||||
"deepcopy": "0.6.3",
|
||||
"diskusage": "0.2.4",
|
||||
"dompurify": "1.0.3",
|
||||
"elasticsearch": "14.2.2",
|
||||
"element-ui": "2.3.4",
|
||||
"emojilib": "2.2.12",
|
||||
"dompurify": "1.0.5",
|
||||
"elasticsearch": "15.1.1",
|
||||
"element-ui": "2.4.5",
|
||||
"emojilib": "2.3.0",
|
||||
"escape-regexp": "0.0.1",
|
||||
"eslint": "4.19.1",
|
||||
"eslint-plugin-vue": "4.4.0",
|
||||
"eventemitter3": "3.0.1",
|
||||
"eslint": "5.0.1",
|
||||
"eslint-plugin-vue": "4.7.1",
|
||||
"eventemitter3": "3.1.0",
|
||||
"exif-js": "2.3.0",
|
||||
"file-loader": "1.1.11",
|
||||
"file-type": "7.6.0",
|
||||
"file-type": "8.1.0",
|
||||
"fuckadblock": "3.2.1",
|
||||
"gm": "1.23.1",
|
||||
"gulp": "3.9.1",
|
||||
"gulp-cssnano": "2.1.3",
|
||||
"gulp-htmlmin": "4.0.0",
|
||||
"gulp-imagemin": "4.1.0",
|
||||
"gulp-mocha": "5.0.0",
|
||||
"gulp-mocha": "6.0.0",
|
||||
"gulp-pug": "4.0.1",
|
||||
"gulp-rename": "1.2.2",
|
||||
"gulp-replace": "0.6.1",
|
||||
"gulp-rename": "1.4.0",
|
||||
"gulp-replace": "1.0.0",
|
||||
"gulp-sourcemaps": "2.6.4",
|
||||
"gulp-stylus": "2.7.0",
|
||||
"gulp-tslint": "8.1.3",
|
||||
"gulp-typescript": "4.0.2",
|
||||
"gulp-uglify": "3.0.0",
|
||||
"gulp-uglify": "3.0.1",
|
||||
"gulp-util": "3.0.8",
|
||||
"hard-source-webpack-plugin": "0.6.4",
|
||||
"hard-source-webpack-plugin": "0.12.0",
|
||||
"highlight.js": "9.12.0",
|
||||
"html-minifier": "3.5.15",
|
||||
"html-minifier": "3.5.19",
|
||||
"http-signature": "1.2.0",
|
||||
"inquirer": "5.2.0",
|
||||
"insert-text-at-cursor": "0.1.1",
|
||||
"is-root": "2.0.0",
|
||||
"is-url": "1.2.4",
|
||||
"js-yaml": "3.11.0",
|
||||
"jsdom": "11.8.0",
|
||||
"koa": "2.5.0",
|
||||
"koa-bodyparser": "4.2.0",
|
||||
"jquery": "3.3.1",
|
||||
"js-yaml": "3.12.0",
|
||||
"jsdom": "11.12.0",
|
||||
"koa": "2.5.1",
|
||||
"koa-bodyparser": "4.2.1",
|
||||
"koa-compress": "3.0.0",
|
||||
"koa-favicon": "2.0.1",
|
||||
"koa-json-body": "^5.3.0",
|
||||
"koa-logger": "^3.2.0",
|
||||
"koa-json-body": "5.3.0",
|
||||
"koa-logger": "3.2.0",
|
||||
"koa-mount": "3.0.0",
|
||||
"koa-multer": "1.0.2",
|
||||
"koa-router": "7.4.0",
|
||||
"koa-send": "4.1.3",
|
||||
"koa-slow": "^2.1.0",
|
||||
"kue": "0.11.6",
|
||||
"license-checker": "18.0.0",
|
||||
"koa-send": "5.0.0",
|
||||
"koa-slow": "2.1.0",
|
||||
"koa-views": "6.1.4",
|
||||
"loader-utils": "1.1.0",
|
||||
"mecab-async": "0.1.2",
|
||||
"minio": "6.0.0",
|
||||
"mkdirp": "0.5.1",
|
||||
"mocha": "5.1.0",
|
||||
"mocha": "5.2.0",
|
||||
"moji": "0.5.1",
|
||||
"mongodb": "3.0.7",
|
||||
"monk": "6.0.5",
|
||||
"mongodb": "3.1.1",
|
||||
"monk": "6.0.6",
|
||||
"ms": "2.1.1",
|
||||
"nan": "2.10.0",
|
||||
"node-sass": "4.8.3",
|
||||
"node-sass-json-importer": "3.2.0",
|
||||
"nopt": "4.0.1",
|
||||
"node-sass": "4.9.2",
|
||||
"node-sass-json-importer": "3.3.1",
|
||||
"nprogress": "0.2.0",
|
||||
"object-assign-deep": "0.4.0",
|
||||
"on-build-webpack": "0.1.0",
|
||||
"os-utils": "0.0.14",
|
||||
"parse5": "5.0.0",
|
||||
"portscanner": "2.2.0",
|
||||
"progress-bar-webpack-plugin": "1.11.0",
|
||||
"prominence": "0.2.0",
|
||||
"promise-sequential": "1.1.1",
|
||||
"pug": "2.0.3",
|
||||
"punycode": "2.1.0",
|
||||
"qrcode": "1.2.0",
|
||||
"ratelimiter": "3.0.3",
|
||||
"punycode": "2.1.1",
|
||||
"qrcode": "1.2.2",
|
||||
"ratelimiter": "3.2.0",
|
||||
"recaptcha-promise": "0.1.3",
|
||||
"reconnecting-websocket": "3.2.2",
|
||||
"redis": "2.8.0",
|
||||
"request": "2.85.0",
|
||||
"request": "2.87.0",
|
||||
"request-promise-native": "1.0.5",
|
||||
"rimraf": "2.6.2",
|
||||
"rndstr": "1.0.0",
|
||||
"s-age": "1.1.2",
|
||||
"sass-loader": "7.0.1",
|
||||
"sass-loader": "7.1.0",
|
||||
"seedrandom": "2.4.3",
|
||||
"sharp": "0.20.5",
|
||||
"showdown": "1.8.6",
|
||||
"showdown-highlightjs-extension": "0.1.2",
|
||||
"single-line-log": "1.1.2",
|
||||
"speakeasy": "2.0.0",
|
||||
"style-loader": "0.21.0",
|
||||
"stylus": "0.54.5",
|
||||
"stylus-loader": "3.0.2",
|
||||
"summaly": "2.0.4",
|
||||
"swagger-jsdoc": "1.9.7",
|
||||
"summaly": "2.0.6",
|
||||
"systeminformation": "3.42.8",
|
||||
"syuilo-password-strength": "0.0.1",
|
||||
"tcp-port-used": "0.1.2",
|
||||
"textarea-caret": "3.1.0",
|
||||
"tmp": "0.0.33",
|
||||
"ts-loader": "4.2.0",
|
||||
"ts-node": "6.0.0",
|
||||
"tslint": "5.9.1",
|
||||
"typescript": "2.8.1",
|
||||
"typescript-eslint-parser": "15.0.0",
|
||||
"ts-loader": "4.4.1",
|
||||
"ts-node": "7.0.0",
|
||||
"tslint": "5.10.0",
|
||||
"typescript": "2.9.2",
|
||||
"typescript-eslint-parser": "17.0.1",
|
||||
"uglify-es": "3.3.9",
|
||||
"url-loader": "1.0.1",
|
||||
"uuid": "3.2.1",
|
||||
"uuid": "3.3.2",
|
||||
"v-animate-css": "0.0.2",
|
||||
"vue": "2.5.16",
|
||||
"vue-cropperjs": "2.2.0",
|
||||
"vue-js-modal": "1.3.13",
|
||||
"vue-json-tree-view": "2.1.3",
|
||||
"vue-loader": "14.2.2",
|
||||
"vue": "2.5.17",
|
||||
"vue-cropperjs": "2.2.1",
|
||||
"vue-js-modal": "1.3.16",
|
||||
"vue-json-tree-view": "2.1.4",
|
||||
"vue-loader": "15.2.6",
|
||||
"vue-router": "3.0.1",
|
||||
"vue-template-compiler": "2.5.16",
|
||||
"vue-style-loader": "4.1.1",
|
||||
"vue-template-compiler": "2.5.17",
|
||||
"vuedraggable": "2.16.0",
|
||||
"vuex": "^3.0.1",
|
||||
"web-push": "3.3.0",
|
||||
"vuex": "3.0.1",
|
||||
"vuex-persistedstate": "2.5.4",
|
||||
"web-push": "3.3.2",
|
||||
"webfinger.js": "2.6.6",
|
||||
"webpack": "4.6.0",
|
||||
"webpack-cli": "2.0.14",
|
||||
"webpack-replace-loader": "1.3.0",
|
||||
"websocket": "1.0.25",
|
||||
"ws": "5.1.1",
|
||||
"xev": "2.0.0"
|
||||
"webpack": "4.16.4",
|
||||
"webpack-cli": "3.1.0",
|
||||
"websocket": "1.0.26",
|
||||
"ws": "6.0.0",
|
||||
"xev": "2.0.1"
|
||||
},
|
||||
"greenkeeper": {
|
||||
"ignore": [
|
||||
"deepcopy",
|
||||
"cafy",
|
||||
"@types/gulp"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
@@ -1,3 +0,0 @@
|
||||
export default user => {
|
||||
return user.host === null ? user.username : `${user.username}@${user.host}`;
|
||||
};
|
@@ -1,78 +0,0 @@
|
||||
/**
|
||||
* Replace i18n texts
|
||||
*/
|
||||
|
||||
import locale from '../../locales';
|
||||
|
||||
export default class Replacer {
|
||||
private lang: string;
|
||||
|
||||
public pattern = /%i18n:([a-z_\-@\.\!]+?)%/g;
|
||||
|
||||
constructor(lang: string) {
|
||||
this.lang = lang;
|
||||
|
||||
this.get = this.get.bind(this);
|
||||
this.replacement = this.replacement.bind(this);
|
||||
}
|
||||
|
||||
private get(path: string, key: string) {
|
||||
const texts = locale[this.lang];
|
||||
|
||||
if (texts == null) {
|
||||
console.warn(`lang '${this.lang}' is not supported`);
|
||||
return key; // Fallback
|
||||
}
|
||||
|
||||
let text = texts;
|
||||
|
||||
if (path) {
|
||||
if (text.hasOwnProperty(path)) {
|
||||
text = text[path];
|
||||
} else {
|
||||
console.warn(`path '${path}' not found in '${this.lang}'`);
|
||||
return key; // Fallback
|
||||
}
|
||||
}
|
||||
|
||||
// Check the key existance
|
||||
const error = key.split('.').some(k => {
|
||||
if (text.hasOwnProperty(k)) {
|
||||
text = text[k];
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
if (error) {
|
||||
console.warn(`key '${key}' not found in '${path}' of '${this.lang}'`);
|
||||
return key; // Fallback
|
||||
} else {
|
||||
return text;
|
||||
}
|
||||
}
|
||||
|
||||
public replacement(ctx, match, key) {
|
||||
const client = '/src/client/app/';
|
||||
let name = null;
|
||||
|
||||
const shouldEscape = key[0] == '!';
|
||||
if (shouldEscape) {
|
||||
key = key.substr(1);
|
||||
}
|
||||
|
||||
if (key[0] == '@') {
|
||||
name = ctx.src.substr(ctx.src.indexOf(client) + client.length);
|
||||
key = key.substr(1);
|
||||
}
|
||||
|
||||
if (ctx && ctx.lang) this.lang = ctx.lang;
|
||||
|
||||
const txt = this.get(name, key);
|
||||
|
||||
return shouldEscape
|
||||
? txt.replace(/'/g, '\\x27').replace(/"/g, '\\x22')
|
||||
: txt.replace(/"/g, '"');
|
||||
}
|
||||
}
|
1
src/client/app/auth/assets/icon.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 512 512" width="512" height="512"><defs><clipPath id="_clipPath_P6eAE2OaBltOJ3gHGVajfqsOnfv4xIns"><rect width="512" height="512"/></clipPath></defs><g clip-path="url(#_clipPath_P6eAE2OaBltOJ3gHGVajfqsOnfv4xIns)"><clipPath id="_clipPath_P6q7MZAUp3XpQhVgs2GuAbegX9v4gkom"><rect x="0" y="0" width="512" height="512" transform="matrix(1,0,0,1,0,0)" fill="rgb(255,255,255)"/></clipPath><g clip-path="url(#_clipPath_P6q7MZAUp3XpQhVgs2GuAbegX9v4gkom)"><g id="Group"><g id="g4502"><g id="g5125"><g id="text4489"><path d=" M 190.093 359.243 C 167.923 359.32 148.881 345.963 139.9 330.409 C 135.104 323.615 125.617 321.198 125.482 330.409 L 125.482 372.939 C 125.482 390.026 119.253 404.799 106.794 417.258 C 94.69 429.362 79.917 435.413 62.474 435.413 C 45.387 435.413 30.614 429.362 18.155 417.258 C 6.052 404.799 0 390.026 0 372.939 L 0 139.061 C 0 125.89 3.738 113.965 11.213 103.285 C 19.045 92.25 29.012 84.596 41.116 80.325 C 47.879 77.833 54.999 76.587 62.474 76.587 C 81.697 76.587 97.716 84.062 110.531 99.013 C 117.295 106.489 121.211 110.405 122.279 110.761 C 122.279 110.761 173.043 172.145 174.467 173.213 C 175.891 174.281 180.073 182.446 190.093 182.446 C 200.112 182.446 204.829 174.281 206.253 173.213 C 207.676 172.145 258.44 110.761 258.44 110.761 C 258.796 111.117 262.534 107.201 269.654 99.013 C 282.825 84.062 299.022 76.587 318.245 76.587 C 325.364 76.587 332.484 77.833 339.603 80.325 C 351.707 84.596 361.496 92.25 368.972 103.285 C 376.803 113.965 380.719 125.89 380.719 139.061 L 380.719 372.939 C 380.719 390.026 374.489 404.799 362.03 417.258 C 349.927 429.362 335.154 435.413 317.711 435.413 C 300.624 435.413 285.851 429.362 273.391 417.258 C 261.288 404.799 255.237 390.026 255.237 372.939 L 255.237 330.409 C 254.184 318.802 243.925 326.116 240.285 330.409 C 230.674 348.208 212.262 359.167 190.093 359.243 Z M 457.535 184.448 Q 435.109 184.448 419.09 168.963 Q 403.605 152.944 403.605 130.518 Q 403.605 108.091 419.09 92.606 Q 435.109 76.587 457.535 76.587 Q 479.962 76.587 495.981 92.606 Q 512 108.091 512 130.518 Q 512 152.944 495.981 168.963 Q 479.962 184.448 457.535 184.448 Z M 458.069 195.128 Q 480.496 195.128 495.981 211.147 Q 512 227.166 512 249.592 L 512 381.482 Q 512 403.909 495.981 419.928 Q 480.496 435.413 458.069 435.413 Q 435.643 435.413 419.624 419.928 Q 403.605 403.909 403.605 381.482 L 403.605 249.592 Q 403.605 227.166 419.624 211.147 Q 435.643 195.128 458.069 195.128 Z " fill-rule="evenodd" fill="rgb(157,157,157)"/></g></g></g></g></g></g></svg>
|
After Width: | Height: | Size: 2.6 KiB |
@@ -1,7 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
|
||||
y="0px" width="1024px" height="512px" viewBox="0 256 1024 512" enable-background="new 0 256 1024 512" xml:space="preserve">
|
||||
<polyline opacity="0.5" fill="none" stroke="#000000" stroke-width="34" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
|
||||
896.5,608.5 800.5,416.5 704.5,608.5 608.5,416.5 512.5,608.5 416.5,416.5 320.5,608.5 224.5,416.5 128.5,608.5 "/>
|
||||
</svg>
|
Before Width: | Height: | Size: 646 B |
@@ -15,11 +15,12 @@ import Index from './views/index.vue';
|
||||
* init
|
||||
*/
|
||||
init(launch => {
|
||||
document.title = 'Misskey | アプリの連携';
|
||||
document.title = '%i18n:common.name% | %i18n:common.application-authorization%';
|
||||
|
||||
// Init router
|
||||
const router = new VueRouter({
|
||||
mode: 'history',
|
||||
base: '/auth/',
|
||||
routes: [
|
||||
{ path: '/:token', component: Index },
|
||||
]
|
||||
|
@@ -1,8 +1,8 @@
|
||||
<template>
|
||||
<div class="form">
|
||||
<header>
|
||||
<h1><i>{{ app.name }}</i>があなたのアカウントにアクセスすることを<b>許可</b>しますか?</h1>
|
||||
<img :src="`${app.iconUrl}?thumbnail&size=64`"/>
|
||||
<h1>%i18n:@share-access%</h1>
|
||||
<img :src="app.iconUrl"/>
|
||||
</header>
|
||||
<div class="app">
|
||||
<section>
|
||||
@@ -11,25 +11,25 @@
|
||||
<p class="description">{{ app.description }}</p>
|
||||
</section>
|
||||
<section>
|
||||
<h2>このアプリは次の権限を要求しています:</h2>
|
||||
<h2>%i18n:@permission-ask%</h2>
|
||||
<ul>
|
||||
<template v-for="p in app.permission">
|
||||
<li v-if="p == 'account-read'">アカウントの情報を見る。</li>
|
||||
<li v-if="p == 'account-write'">アカウントの情報を操作する。</li>
|
||||
<li v-if="p == 'note-write'">投稿する。</li>
|
||||
<li v-if="p == 'like-write'">いいねしたりいいね解除する。</li>
|
||||
<li v-if="p == 'following-write'">フォローしたりフォロー解除する。</li>
|
||||
<li v-if="p == 'drive-read'">ドライブを見る。</li>
|
||||
<li v-if="p == 'drive-write'">ドライブを操作する。</li>
|
||||
<li v-if="p == 'notification-read'">通知を見る。</li>
|
||||
<li v-if="p == 'notification-write'">通知を操作する。</li>
|
||||
<li v-if="p == 'account-read'">%i18n:@account-read%</li>
|
||||
<li v-if="p == 'account-write'">%i18n:@account-write%</li>
|
||||
<li v-if="p == 'note-write'">%i18n:@note-write%</li>
|
||||
<li v-if="p == 'like-write'">%i18n:@like-write%</li>
|
||||
<li v-if="p == 'following-write'">%i18n:@following-write%</li>
|
||||
<li v-if="p == 'drive-read'">%i18n:@drive-read%</li>
|
||||
<li v-if="p == 'drive-write'">%i18n:@drive-write%</li>
|
||||
<li v-if="p == 'notification-read'">%i18n:@notification-read%</li>
|
||||
<li v-if="p == 'notification-write'">%i18n:@notification-write%</li>
|
||||
</template>
|
||||
</ul>
|
||||
</section>
|
||||
</div>
|
||||
<div class="action">
|
||||
<button @click="cancel">キャンセル</button>
|
||||
<button @click="accept">アクセスを許可</button>
|
||||
<button @click="cancel">%i18n:@cancel%</button>
|
||||
<button @click="accept">%i18n:@accept%</button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -94,13 +94,13 @@ export default Vue.extend({
|
||||
margin 0 auto -38px auto
|
||||
border solid 5px #fff
|
||||
border-radius 100%
|
||||
box-shadow 0 2px 2px rgba(0, 0, 0, 0.1)
|
||||
box-shadow 0 2px 2px rgba(#000, 0.1)
|
||||
|
||||
> .app
|
||||
padding 44px 16px 0 16px
|
||||
color #555
|
||||
background #eee
|
||||
box-shadow 0 2px 2px rgba(0, 0, 0, 0.1) inset
|
||||
box-shadow 0 2px 2px rgba(#000, 0.1) inset
|
||||
|
||||
&:after
|
||||
content ''
|
||||
|
@@ -1,8 +1,9 @@
|
||||
<template>
|
||||
<div class="index">
|
||||
<main v-if="os.isSignedIn">
|
||||
<p class="fetching" v-if="fetching">読み込み中<mk-ellipsis/></p>
|
||||
<main v-if="$store.getters.isSignedIn">
|
||||
<p class="fetching" v-if="fetching">%i18n:@loading%<mk-ellipsis/></p>
|
||||
<x-form
|
||||
class="form"
|
||||
ref="form"
|
||||
v-if="state == 'waiting'"
|
||||
:session="session"
|
||||
@@ -10,23 +11,23 @@
|
||||
@accepted="accepted"
|
||||
/>
|
||||
<div class="denied" v-if="state == 'denied'">
|
||||
<h1>アプリケーションの連携をキャンセルしました。</h1>
|
||||
<p>このアプリがあなたのアカウントにアクセスすることはありません。</p>
|
||||
<h1>%i18n:@denied%</h1>
|
||||
<p>%i18n:@denied-paragraph%</p>
|
||||
</div>
|
||||
<div class="accepted" v-if="state == 'accepted'">
|
||||
<h1>{{ session.app.isAuthorized ? 'このアプリは既に連携済みです' : 'アプリケーションの連携を許可しました' }}</h1>
|
||||
<p v-if="session.app.callbackUrl">アプリケーションに戻っています<mk-ellipsis/></p>
|
||||
<p v-if="!session.app.callbackUrl">アプリケーションに戻って、やっていってください。</p>
|
||||
<h1>{{ session.app.isAuthorized ? '%i18n:@already-authorized%' : '%i18n:@allowed%' }}</h1>
|
||||
<p v-if="session.app.callbackUrl">%i18n:@callback-url%<mk-ellipsis/></p>
|
||||
<p v-if="!session.app.callbackUrl">%i18n:@please-go-back%</p>
|
||||
</div>
|
||||
<div class="error" v-if="state == 'fetch-session-error'">
|
||||
<p>セッションが存在しません。</p>
|
||||
<p>%i18n:@error%</p>
|
||||
</div>
|
||||
</main>
|
||||
<main class="signin" v-if="!os.isSignedIn">
|
||||
<h1>サインインしてください</h1>
|
||||
<main class="signin" v-if="!$store.getters.isSignedIn">
|
||||
<h1>%i18n:@sign-in%</h1>
|
||||
<mk-signin/>
|
||||
</main>
|
||||
<footer><img src="/assets/auth/logo.svg" alt="Misskey"/></footer>
|
||||
<footer><img src="/assets/auth/icon.svg" alt="Misskey"/></footer>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -51,7 +52,7 @@ export default Vue.extend({
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
if (!this.$root.$data.os.isSignedIn) return;
|
||||
if (!this.$store.getters.isSignedIn) return;
|
||||
|
||||
// Fetch session
|
||||
(this as any).api('auth/session/show', {
|
||||
@@ -62,7 +63,7 @@ export default Vue.extend({
|
||||
|
||||
// 既に連携していた場合
|
||||
if (this.session.app.isAuthorized) {
|
||||
this.$root.$data.os.api('auth/accept', {
|
||||
(this as any).api('auth/accept', {
|
||||
token: this.session.token
|
||||
}).then(() => {
|
||||
this.accepted();
|
||||
@@ -72,6 +73,7 @@ export default Vue.extend({
|
||||
}
|
||||
}).catch(error => {
|
||||
this.state = 'fetch-session-error';
|
||||
this.fetching = false;
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
@@ -94,14 +96,14 @@ export default Vue.extend({
|
||||
margin 0 auto
|
||||
text-align center
|
||||
background #fff
|
||||
box-shadow 0px 4px 16px rgba(0, 0, 0, 0.2)
|
||||
box-shadow 0px 4px 16px rgba(#000, 0.2)
|
||||
|
||||
> .fetching
|
||||
margin 0
|
||||
padding 32px
|
||||
color #555
|
||||
|
||||
> div
|
||||
> div:not(.form)
|
||||
padding 64px
|
||||
|
||||
> h1
|
||||
@@ -142,8 +144,8 @@ export default Vue.extend({
|
||||
> footer
|
||||
> img
|
||||
display block
|
||||
width 64px
|
||||
height 64px
|
||||
margin 0 auto
|
||||
width 32px
|
||||
height 32px
|
||||
margin 16px auto
|
||||
|
||||
</style>
|
||||
|
@@ -1,3 +1,5 @@
|
||||
block vars
|
||||
|
||||
doctype html
|
||||
|
||||
!= '\n<!-- Thank you for using Misskey! @syuilo -->\n'
|
||||
@@ -9,9 +11,17 @@ html
|
||||
meta(name='application-name' content='Misskey')
|
||||
meta(name='theme-color' content=themeColor)
|
||||
meta(name='referrer' content='origin')
|
||||
meta(property='og:site_name' content='Misskey')
|
||||
link(rel='manifest' href='/manifest.json')
|
||||
|
||||
title Misskey
|
||||
title
|
||||
block title
|
||||
| Misskey
|
||||
|
||||
block desc
|
||||
meta(name='description' content='A planet of fediverse')
|
||||
|
||||
block meta
|
||||
|
||||
style
|
||||
include ./../../../built/client/assets/init.css
|
||||
@@ -32,7 +42,7 @@ html
|
||||
| JavaScriptを有効にしてください
|
||||
br
|
||||
| Please turn on your JavaScript
|
||||
div#ini: p
|
||||
span .
|
||||
span .
|
||||
span .
|
||||
div#ini.
|
||||
<svg viewBox="0 0 50 50">
|
||||
<path fill=#{themeColor} d="M25.251,6.461c-10.318,0-18.683,8.365-18.683,18.683h4.068c0-8.071,6.543-14.615,14.615-14.615V6.461z" />
|
||||
</svg>
|
||||
|
@@ -18,22 +18,35 @@
|
||||
return;
|
||||
}
|
||||
|
||||
//#region Load settings
|
||||
let settings = null;
|
||||
const vuex = localStorage.getItem('vuex');
|
||||
if (vuex) {
|
||||
settings = JSON.parse(vuex);
|
||||
}
|
||||
//#endregion
|
||||
|
||||
// Get the current url information
|
||||
const url = new URL(location.href);
|
||||
|
||||
//#region Detect app name
|
||||
let app = null;
|
||||
|
||||
if (url.pathname == '/docs') app = 'docs';
|
||||
if (url.pathname == '/dev') app = 'dev';
|
||||
if (url.pathname == '/auth') app = 'auth';
|
||||
if (url.pathname == '/docs' || url.pathname.startsWith('/docs/')) app = 'docs';
|
||||
if (url.pathname == '/dev' || url.pathname.startsWith('/dev/')) app = 'dev';
|
||||
if (url.pathname == '/auth' || url.pathname.startsWith('/auth/')) app = 'auth';
|
||||
//#endregion
|
||||
|
||||
// Detect the user language
|
||||
// Note: The default language is Japanese
|
||||
//#region Detect the user language
|
||||
let lang = navigator.language.split('-')[0];
|
||||
if (!/^(en|ja)$/.test(lang)) lang = 'ja';
|
||||
if (localStorage.getItem('lang')) lang = localStorage.getItem('lang');
|
||||
|
||||
// The default language is English
|
||||
if (!LANGS.includes(lang)) lang = 'en';
|
||||
|
||||
if (settings) {
|
||||
if (settings.device.lang) lang = settings.device.lang;
|
||||
}
|
||||
//#endregion
|
||||
|
||||
// Detect the user agent
|
||||
const ua = navigator.userAgent.toLowerCase();
|
||||
@@ -61,20 +74,15 @@
|
||||
}
|
||||
|
||||
// Dark/Light
|
||||
if (localStorage.getItem('darkmode') == 'true') {
|
||||
document.documentElement.setAttribute('data-darkmode', 'true');
|
||||
if (settings) {
|
||||
if (settings.device.darkmode) {
|
||||
document.documentElement.setAttribute('data-darkmode', 'true');
|
||||
}
|
||||
}
|
||||
|
||||
// Script version
|
||||
const ver = localStorage.getItem('v') || VERSION;
|
||||
|
||||
// Whether in debug mode
|
||||
const isDebug = localStorage.getItem('debug') == 'true';
|
||||
|
||||
// Whether use raw version script
|
||||
const raw = (localStorage.getItem('useRawScript') == 'true' && isDebug)
|
||||
|| ENV != 'production';
|
||||
|
||||
// Get salt query
|
||||
const salt = localStorage.getItem('salt')
|
||||
? '?salt=' + localStorage.getItem('salt')
|
||||
@@ -84,7 +92,7 @@
|
||||
// Note: 'async' make it possible to load the script asyncly.
|
||||
// 'defer' make it possible to run the script when the dom loaded.
|
||||
const script = document.createElement('script');
|
||||
script.setAttribute('src', `/assets/${app}.${ver}.${lang}.${raw ? 'raw' : 'min'}.js${salt}`);
|
||||
script.setAttribute('src', `/assets/${app}.${ver}.${lang}.js${salt}`);
|
||||
script.setAttribute('async', 'true');
|
||||
script.setAttribute('defer', 'true');
|
||||
head.appendChild(script);
|
||||
|
@@ -1,15 +0,0 @@
|
||||
/**
|
||||
* Channels
|
||||
*/
|
||||
|
||||
// Style
|
||||
import './style.styl';
|
||||
|
||||
require('./tags');
|
||||
import init from '../init';
|
||||
|
||||
/**
|
||||
* init
|
||||
*/
|
||||
init(() => {
|
||||
});
|
@@ -1,10 +0,0 @@
|
||||
@import "../app"
|
||||
|
||||
html
|
||||
padding 8px
|
||||
background #efefef
|
||||
|
||||
#wait
|
||||
top auto
|
||||
bottom 15px
|
||||
left 15px
|
@@ -1,409 +0,0 @@
|
||||
<mk-channel>
|
||||
<mk-header/>
|
||||
<hr>
|
||||
<main v-if="!fetching">
|
||||
<h1>{ channel.title }</h1>
|
||||
|
||||
<div v-if="$root.$data.os.isSignedIn">
|
||||
<p v-if="channel.isWatching">このチャンネルをウォッチしています <a @click="unwatch">ウォッチ解除</a></p>
|
||||
<p v-if="!channel.isWatching"><a @click="watch">このチャンネルをウォッチする</a></p>
|
||||
</div>
|
||||
|
||||
<div class="share">
|
||||
<mk-twitter-button/>
|
||||
<mk-line-button/>
|
||||
</div>
|
||||
|
||||
<div class="body">
|
||||
<p v-if="notesFetching">読み込み中<mk-ellipsis/></p>
|
||||
<div v-if="!notesFetching">
|
||||
<p v-if="notes == null || notes.length == 0">まだ投稿がありません</p>
|
||||
<template v-if="notes != null">
|
||||
<mk-channel-note each={ note in notes.slice().reverse() } note={ note } form={ parent.refs.form }/>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<mk-channel-form v-if="$root.$data.os.isSignedIn" channel={ channel } ref="form"/>
|
||||
<div v-if="!$root.$data.os.isSignedIn">
|
||||
<p>参加するには<a href={ _URL_ }>ログインまたは新規登録</a>してください</p>
|
||||
</div>
|
||||
<hr>
|
||||
<footer>
|
||||
<small><a href={ _URL_ }>Misskey</a> ver { _VERSION_ } (葵 aoi)</small>
|
||||
</footer>
|
||||
</main>
|
||||
<style lang="stylus" scoped>
|
||||
:scope
|
||||
display block
|
||||
|
||||
> main
|
||||
> h1
|
||||
font-size 1.5em
|
||||
color #f00
|
||||
|
||||
> .share
|
||||
> *
|
||||
margin-right 4px
|
||||
|
||||
> .body
|
||||
margin 8px 0 0 0
|
||||
|
||||
> mk-channel-form
|
||||
max-width 500px
|
||||
|
||||
</style>
|
||||
<script lang="typescript">
|
||||
import Progress from '../../common/scripts/loading';
|
||||
import ChannelStream from '../../common/scripts/streaming/channel-stream';
|
||||
|
||||
this.mixin('i');
|
||||
this.mixin('api');
|
||||
|
||||
this.id = this.opts.id;
|
||||
this.fetching = true;
|
||||
this.notesFetching = true;
|
||||
this.channel = null;
|
||||
this.notes = null;
|
||||
this.connection = new ChannelStream(this.id);
|
||||
this.unreadCount = 0;
|
||||
|
||||
this.on('mount', () => {
|
||||
document.documentElement.style.background = '#efefef';
|
||||
|
||||
Progress.start();
|
||||
|
||||
let fetched = false;
|
||||
|
||||
// チャンネル概要読み込み
|
||||
this.$root.$data.os.api('channels/show', {
|
||||
channelId: this.id
|
||||
}).then(channel => {
|
||||
if (fetched) {
|
||||
Progress.done();
|
||||
} else {
|
||||
Progress.set(0.5);
|
||||
fetched = true;
|
||||
}
|
||||
|
||||
this.update({
|
||||
fetching: false,
|
||||
channel: channel
|
||||
});
|
||||
|
||||
document.title = channel.title + ' | Misskey'
|
||||
});
|
||||
|
||||
// 投稿読み込み
|
||||
this.$root.$data.os.api('channels/notes', {
|
||||
channelId: this.id
|
||||
}).then(notes => {
|
||||
if (fetched) {
|
||||
Progress.done();
|
||||
} else {
|
||||
Progress.set(0.5);
|
||||
fetched = true;
|
||||
}
|
||||
|
||||
this.update({
|
||||
notesFetching: false,
|
||||
notes: notes
|
||||
});
|
||||
});
|
||||
|
||||
this.connection.on('note', this.onNote);
|
||||
document.addEventListener('visibilitychange', this.onVisibilitychange, false);
|
||||
});
|
||||
|
||||
this.on('unmount', () => {
|
||||
this.connection.off('note', this.onNote);
|
||||
this.connection.close();
|
||||
document.removeEventListener('visibilitychange', this.onVisibilitychange);
|
||||
});
|
||||
|
||||
this.onNote = note => {
|
||||
this.notes.unshift(note);
|
||||
this.update();
|
||||
|
||||
if (document.hidden && this.$root.$data.os.isSignedIn && note.userId !== this.$root.$data.os.i.id) {
|
||||
this.unreadCount++;
|
||||
document.title = `(${this.unreadCount}) ${this.channel.title} | Misskey`;
|
||||
}
|
||||
};
|
||||
|
||||
this.onVisibilitychange = () => {
|
||||
if (!document.hidden) {
|
||||
this.unreadCount = 0;
|
||||
document.title = this.channel.title + ' | Misskey'
|
||||
}
|
||||
};
|
||||
|
||||
this.watch = () => {
|
||||
this.$root.$data.os.api('channels/watch', {
|
||||
channelId: this.id
|
||||
}).then(() => {
|
||||
this.channel.isWatching = true;
|
||||
this.update();
|
||||
}, e => {
|
||||
alert('error');
|
||||
});
|
||||
};
|
||||
|
||||
this.unwatch = () => {
|
||||
this.$root.$data.os.api('channels/unwatch', {
|
||||
channelId: this.id
|
||||
}).then(() => {
|
||||
this.channel.isWatching = false;
|
||||
this.update();
|
||||
}, e => {
|
||||
alert('error');
|
||||
});
|
||||
};
|
||||
</script>
|
||||
</mk-channel>
|
||||
|
||||
<mk-channel-note>
|
||||
<header>
|
||||
<a class="index" @click="reply">{ note.index }:</a>
|
||||
<a class="name" href={ _URL_ + '/@' + acct }><b>{ getUserName(note.user) }</b></a>
|
||||
<mk-time time={ note.createdAt }/>
|
||||
<mk-time time={ note.createdAt } mode="detail"/>
|
||||
<span>ID:<i>{ acct }</i></span>
|
||||
</header>
|
||||
<div>
|
||||
<a v-if="note.reply">>>{ note.reply.index }</a>
|
||||
{ note.text }
|
||||
<div class="media" v-if="note.media">
|
||||
<template each={ file in note.media }>
|
||||
<a href={ file.url } target="_blank">
|
||||
<img src={ file.url + '?thumbnail&size=512' } alt={ file.name } title={ file.name }/>
|
||||
</a>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
<style lang="stylus" scoped>
|
||||
:scope
|
||||
display block
|
||||
margin 0
|
||||
padding 0
|
||||
|
||||
> header
|
||||
position -webkit-sticky
|
||||
position sticky
|
||||
z-index 1
|
||||
top 0
|
||||
background rgba(239, 239, 239, 0.9)
|
||||
|
||||
> .index
|
||||
margin-right 0.25em
|
||||
color #000
|
||||
|
||||
> .name
|
||||
margin-right 0.5em
|
||||
color #008000
|
||||
|
||||
> mk-time
|
||||
margin-right 0.5em
|
||||
|
||||
&:first-of-type
|
||||
display none
|
||||
|
||||
@media (max-width 600px)
|
||||
> mk-time
|
||||
&:first-of-type
|
||||
display initial
|
||||
|
||||
&:last-of-type
|
||||
display none
|
||||
|
||||
> div
|
||||
padding 0 0 1em 2em
|
||||
|
||||
> .media
|
||||
> a
|
||||
display inline-block
|
||||
|
||||
> img
|
||||
max-width 100%
|
||||
vertical-align bottom
|
||||
|
||||
</style>
|
||||
<script lang="typescript">
|
||||
import getAcct from '../../../../acct/render';
|
||||
import getUserName from '../../../../renderers/get-user-name';
|
||||
|
||||
this.note = this.opts.note;
|
||||
this.form = this.opts.form;
|
||||
this.acct = getAcct(this.note.user);
|
||||
this.name = getUserName(this.note.user);
|
||||
|
||||
this.reply = () => {
|
||||
this.form.update({
|
||||
reply: this.note
|
||||
});
|
||||
};
|
||||
</script>
|
||||
</mk-channel-note>
|
||||
|
||||
<mk-channel-form>
|
||||
<p v-if="reply"><b>>>{ reply.index }</b> ({ getUserName(reply.user) }): <a @click="clearReply">[x]</a></p>
|
||||
<textarea ref="text" disabled={ wait } oninput={ update } onkeydown={ onkeydown } onpaste={ onpaste } placeholder="%i18n:ch.tags.mk-channel-form.textarea%"></textarea>
|
||||
<div class="actions">
|
||||
<button @click="selectFile">%fa:upload%%i18n:ch.tags.mk-channel-form.upload%</button>
|
||||
<button @click="drive">%fa:cloud%%i18n:ch.tags.mk-channel-form.drive%</button>
|
||||
<button :class="{ wait: wait }" ref="submit" disabled={ wait || (refs.text.value.length == 0) } @click="note">
|
||||
<template v-if="!wait">%fa:paper-plane%</template>{ wait ? '%i18n:!ch.tags.mk-channel-form.posting%' : '%i18n:!ch.tags.mk-channel-form.note%' }<mk-ellipsis v-if="wait"/>
|
||||
</button>
|
||||
</div>
|
||||
<mk-uploader ref="uploader"/>
|
||||
<ol v-if="files">
|
||||
<li each={ files }>{ name }</li>
|
||||
</ol>
|
||||
<input ref="file" type="file" accept="image/*" multiple="multiple" onchange={ changeFile }/>
|
||||
<style lang="stylus" scoped>
|
||||
:scope
|
||||
display block
|
||||
|
||||
> textarea
|
||||
width 100%
|
||||
max-width 100%
|
||||
min-width 100%
|
||||
min-height 5em
|
||||
|
||||
> .actions
|
||||
display flex
|
||||
|
||||
> button
|
||||
> [data-fa]
|
||||
margin-right 0.25em
|
||||
|
||||
&:last-child
|
||||
margin-left auto
|
||||
|
||||
&.wait
|
||||
cursor wait
|
||||
|
||||
> input[type='file']
|
||||
display none
|
||||
|
||||
</style>
|
||||
<script lang="typescript">
|
||||
import getUserName from '../../../../renderers/get-user-name';
|
||||
|
||||
this.mixin('api');
|
||||
|
||||
this.channel = this.opts.channel;
|
||||
this.files = null;
|
||||
|
||||
this.on('mount', () => {
|
||||
this.$refs.uploader.on('uploaded', file => {
|
||||
this.update({
|
||||
files: [file]
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
this.upload = file => {
|
||||
this.$refs.uploader.upload(file);
|
||||
};
|
||||
|
||||
this.clearReply = () => {
|
||||
this.update({
|
||||
reply: null
|
||||
});
|
||||
};
|
||||
|
||||
this.clear = () => {
|
||||
this.clearReply();
|
||||
this.update({
|
||||
files: null
|
||||
});
|
||||
this.$refs.text.value = '';
|
||||
};
|
||||
|
||||
this.note = () => {
|
||||
this.update({
|
||||
wait: true
|
||||
});
|
||||
|
||||
const files = this.files && this.files.length > 0
|
||||
? this.files.map(f => f.id)
|
||||
: undefined;
|
||||
|
||||
this.$root.$data.os.api('notes/create', {
|
||||
text: this.$refs.text.value == '' ? undefined : this.$refs.text.value,
|
||||
mediaIds: files,
|
||||
replyId: this.reply ? this.reply.id : undefined,
|
||||
channelId: this.channel.id
|
||||
}).then(data => {
|
||||
this.clear();
|
||||
}).catch(err => {
|
||||
alert('失敗した');
|
||||
}).then(() => {
|
||||
this.update({
|
||||
wait: false
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
this.changeFile = () => {
|
||||
Array.from(this.$refs.file.files).forEach(this.upload);
|
||||
};
|
||||
|
||||
this.selectFile = () => {
|
||||
this.$refs.file.click();
|
||||
};
|
||||
|
||||
this.drive = () => {
|
||||
window['cb'] = files => {
|
||||
this.update({
|
||||
files: files
|
||||
});
|
||||
};
|
||||
|
||||
window.open(_URL_ + '/selectdrive?multiple=true',
|
||||
'drive_window',
|
||||
'height=500,width=800');
|
||||
};
|
||||
|
||||
this.onkeydown = e => {
|
||||
if ((e.which == 10 || e.which == 13) && (e.ctrlKey || e.metaKey)) this.post();
|
||||
};
|
||||
|
||||
this.onpaste = e => {
|
||||
Array.from(e.clipboardData.items).forEach(item => {
|
||||
if (item.kind == 'file') {
|
||||
this.upload(item.getAsFile());
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
this.getUserName = getUserName;
|
||||
</script>
|
||||
</mk-channel-form>
|
||||
|
||||
<mk-twitter-button>
|
||||
<a href="https://twitter.com/share?ref_src=twsrc%5Etfw" class="twitter-share-button" data-show-count="false">Tweet</a>
|
||||
<script lang="typescript">
|
||||
this.on('mount', () => {
|
||||
const head = document.getElementsByTagName('head')[0];
|
||||
const script = document.createElement('script');
|
||||
script.setAttribute('src', 'https://platform.twitter.com/widgets.js');
|
||||
script.setAttribute('async', 'async');
|
||||
head.appendChild(script);
|
||||
});
|
||||
</script>
|
||||
</mk-twitter-button>
|
||||
|
||||
<mk-line-button>
|
||||
<div class="line-it-button" data-lang="ja" data-type="share-a" data-url={ _CH_URL_ } style="display: none;"></div>
|
||||
<script lang="typescript">
|
||||
this.on('mount', () => {
|
||||
const head = document.getElementsByTagName('head')[0];
|
||||
const script = document.createElement('script');
|
||||
script.setAttribute('src', 'https://d.line-scdn.net/r/web/social-plugin/js/thirdparty/loader.min.js');
|
||||
script.setAttribute('async', 'async');
|
||||
head.appendChild(script);
|
||||
});
|
||||
</script>
|
||||
</mk-line-button>
|
@@ -1,20 +0,0 @@
|
||||
<mk-header>
|
||||
<div>
|
||||
<a href={ _CH_URL_ }>Index</a> | <a href={ _URL_ }>Misskey</a>
|
||||
</div>
|
||||
<div>
|
||||
<a v-if="!$root.$data.os.isSignedIn" href={ _URL_ }>ログイン(新規登録)</a>
|
||||
<a v-if="$root.$data.os.isSignedIn" href={ _URL_ + '/@' + I.username }>{ I.username }</a>
|
||||
</div>
|
||||
<style lang="stylus" scoped>
|
||||
:scope
|
||||
display flex
|
||||
|
||||
> div:last-child
|
||||
margin-left auto
|
||||
|
||||
</style>
|
||||
<script lang="typescript">
|
||||
this.mixin('i');
|
||||
</script>
|
||||
</mk-header>
|
@@ -1,37 +0,0 @@
|
||||
<mk-index>
|
||||
<mk-header/>
|
||||
<hr>
|
||||
<button @click="n">%i18n:ch.tags.mk-index.new%</button>
|
||||
<hr>
|
||||
<ul v-if="channels">
|
||||
<li each={ channels }><a href={ '/' + this.id }>{ this.title }</a></li>
|
||||
</ul>
|
||||
<style lang="stylus" scoped>
|
||||
:scope
|
||||
display block
|
||||
|
||||
</style>
|
||||
<script lang="typescript">
|
||||
this.mixin('api');
|
||||
|
||||
this.on('mount', () => {
|
||||
this.$root.$data.os.api('channels', {
|
||||
limit: 100
|
||||
}).then(channels => {
|
||||
this.update({
|
||||
channels: channels
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
this.n = () => {
|
||||
const title = window.prompt('%i18n:!ch.tags.mk-index.channel-title%');
|
||||
|
||||
this.$root.$data.os.api('channels/create', {
|
||||
title: title
|
||||
}).then(channel => {
|
||||
location.href = '/' + channel.id;
|
||||
});
|
||||
};
|
||||
</script>
|
||||
</mk-index>
|
@@ -1,3 +0,0 @@
|
||||
require('./index.tag');
|
||||
require('./channel.tag');
|
||||
require('./header.tag');
|
@@ -9,70 +9,67 @@ export default function<T extends object>(data: {
|
||||
widget: {
|
||||
type: Object
|
||||
},
|
||||
isMobile: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
platform: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
isCustomizeMode: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
},
|
||||
|
||||
computed: {
|
||||
id(): string {
|
||||
return this.widget.id;
|
||||
},
|
||||
|
||||
props(): T {
|
||||
return this.widget.data;
|
||||
}
|
||||
},
|
||||
|
||||
data() {
|
||||
return {
|
||||
props: data.props ? data.props() : {} as T,
|
||||
bakedOldProps: null,
|
||||
preventSave: false
|
||||
bakedOldProps: null
|
||||
};
|
||||
},
|
||||
|
||||
created() {
|
||||
if (this.props) {
|
||||
Object.keys(this.props).forEach(prop => {
|
||||
if (this.widget.data.hasOwnProperty(prop)) {
|
||||
this.props[prop] = this.widget.data[prop];
|
||||
}
|
||||
});
|
||||
}
|
||||
this.mergeProps();
|
||||
|
||||
this.$watch('props', () => {
|
||||
this.mergeProps();
|
||||
});
|
||||
|
||||
this.bakeProps();
|
||||
|
||||
this.$watch('props', newProps => {
|
||||
if (this.preventSave) {
|
||||
this.preventSave = false;
|
||||
this.bakeProps();
|
||||
return;
|
||||
}
|
||||
if (this.bakedOldProps == JSON.stringify(newProps)) return;
|
||||
|
||||
this.bakeProps();
|
||||
|
||||
if (this.isMobile) {
|
||||
(this as any).api('i/update_mobile_home', {
|
||||
id: this.id,
|
||||
data: newProps
|
||||
}).then(() => {
|
||||
(this as any).os.i.clientSettings.mobileHome.find(w => w.id == this.id).data = newProps;
|
||||
});
|
||||
} else {
|
||||
(this as any).api('i/update_home', {
|
||||
id: this.id,
|
||||
data: newProps
|
||||
}).then(() => {
|
||||
(this as any).os.i.clientSettings.home.find(w => w.id == this.id).data = newProps;
|
||||
});
|
||||
}
|
||||
}, {
|
||||
deep: true
|
||||
});
|
||||
},
|
||||
|
||||
methods: {
|
||||
bakeProps() {
|
||||
this.bakedOldProps = JSON.stringify(this.props);
|
||||
},
|
||||
|
||||
mergeProps() {
|
||||
if (data.props) {
|
||||
const defaultProps = data.props();
|
||||
Object.keys(defaultProps).forEach(prop => {
|
||||
if (!this.props.hasOwnProperty(prop)) {
|
||||
Vue.set(this.props, prop, defaultProps[prop]);
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
save() {
|
||||
if (this.bakedOldProps == JSON.stringify(this.props)) return;
|
||||
|
||||
this.bakeProps();
|
||||
|
||||
(this as any).api('i/update_widget', {
|
||||
id: this.id,
|
||||
data: this.props
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@@ -1,4 +1,4 @@
|
||||
import MiOS from '../mios';
|
||||
import MiOS from '../../mios';
|
||||
import { version as current } from '../../config';
|
||||
|
||||
export default async function(mios: MiOS, force = false, silent = false) {
|
||||
@@ -23,7 +23,10 @@ export default async function(mios: MiOS, force = false, silent = false) {
|
||||
}
|
||||
|
||||
if (!silent) {
|
||||
alert('%i18n:!common.update-available%'.replace('{newer}', newer).replace('{current}', current));
|
||||
mios.apis.dialog({
|
||||
title: '%i18n:common.update-available-title%',
|
||||
text: '%i18n:common.update-available%'.replace('{newer}', newer).replace('{current}', current)
|
||||
});
|
||||
}
|
||||
|
||||
return newer;
|
||||
|
@@ -1,6 +1,6 @@
|
||||
import getNoteSummary from '../../../../renderers/get-note-summary';
|
||||
import getReactionEmoji from '../../../../renderers/get-reaction-emoji';
|
||||
import getUserName from '../../../../renderers/get-user-name';
|
||||
import getNoteSummary from '../../../../misc/get-note-summary';
|
||||
import getReactionEmoji from '../../../../misc/get-reaction-emoji';
|
||||
import getUserName from '../../../../misc/get-user-name';
|
||||
|
||||
type Notification = {
|
||||
title: string;
|
||||
@@ -15,53 +15,59 @@ export default function(type, data): Notification {
|
||||
switch (type) {
|
||||
case 'drive_file_created':
|
||||
return {
|
||||
title: 'ファイルがアップロードされました',
|
||||
title: '%i18n:common.notification.file-uploaded%',
|
||||
body: data.name,
|
||||
icon: data.url + '?thumbnail&size=64'
|
||||
};
|
||||
|
||||
case 'mention':
|
||||
return {
|
||||
title: `${getUserName(data.user)}さんから:`,
|
||||
body: getNoteSummary(data),
|
||||
icon: data.user.avatarUrl + '?thumbnail&size=64'
|
||||
};
|
||||
|
||||
case 'reply':
|
||||
return {
|
||||
title: `${getUserName(data.user)}さんから返信:`,
|
||||
body: getNoteSummary(data),
|
||||
icon: data.user.avatarUrl + '?thumbnail&size=64'
|
||||
};
|
||||
|
||||
case 'quote':
|
||||
return {
|
||||
title: `${getUserName(data.user)}さんが引用:`,
|
||||
body: getNoteSummary(data),
|
||||
icon: data.user.avatarUrl + '?thumbnail&size=64'
|
||||
};
|
||||
|
||||
case 'reaction':
|
||||
return {
|
||||
title: `${getUserName(data.user)}: ${getReactionEmoji(data.reaction)}:`,
|
||||
body: getNoteSummary(data.note),
|
||||
icon: data.user.avatarUrl + '?thumbnail&size=64'
|
||||
icon: data.url
|
||||
};
|
||||
|
||||
case 'unread_messaging_message':
|
||||
return {
|
||||
title: `${getUserName(data.user)}さんからメッセージ:`,
|
||||
title: '%i18n:common.notification.message-from%'.split("{}")[0] + `${getUserName(data.user)}` + '%i18n:common.notification.message-from%'.split("{}")[1] ,
|
||||
body: data.text, // TODO: getMessagingMessageSummary(data),
|
||||
icon: data.user.avatarUrl + '?thumbnail&size=64'
|
||||
icon: data.user.avatarUrl
|
||||
};
|
||||
|
||||
case 'othello_invited':
|
||||
case 'reversi_invited':
|
||||
return {
|
||||
title: '対局への招待があります',
|
||||
body: `${getUserName(data.parent)}さんから`,
|
||||
icon: data.parent.avatarUrl + '?thumbnail&size=64'
|
||||
title: '%i18n:common.notification.reversi-invited%',
|
||||
body: '%i18n:common.notification.reversi-invited-by%'.split("{}")[0] + `${getUserName(data.parent)}` + '%i18n:common.notification.reversi-invited-by%'.split("{}")[1],
|
||||
icon: data.parent.avatarUrl
|
||||
};
|
||||
|
||||
case 'notification':
|
||||
switch (data.type) {
|
||||
case 'mention':
|
||||
return {
|
||||
title: '%i18n:common.notification.notified-by%'.split("{}")[0] + `${getUserName(data.user)}さんから:` + '%i18n:common.notification.notified-by%'.split("{}")[1],
|
||||
body: getNoteSummary(data),
|
||||
icon: data.user.avatarUrl
|
||||
};
|
||||
|
||||
case 'reply':
|
||||
return {
|
||||
title: '%i18n:common.notification.reply-from%'.split("{}")[0] + `${getUserName(data.user)}` + '%i18n:common.notification.reply-from%'.split("{}")[1],
|
||||
body: getNoteSummary(data),
|
||||
icon: data.user.avatarUrl
|
||||
};
|
||||
|
||||
case 'quote':
|
||||
return {
|
||||
title: '%i18n:common.notification.quoted-by%'.split("{}")[0] + `${getUserName(data.user)}` + '%i18n:common.notification.quoted-by%'.split("{}")[1],
|
||||
body: getNoteSummary(data),
|
||||
icon: data.user.avatarUrl
|
||||
};
|
||||
|
||||
case 'reaction':
|
||||
return {
|
||||
title: `${getUserName(data.user)}: ${getReactionEmoji(data.reaction)}:`,
|
||||
body: getNoteSummary(data.note),
|
||||
icon: data.user.avatarUrl
|
||||
};
|
||||
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
|
@@ -1,12 +1,12 @@
|
||||
export default date => {
|
||||
if (typeof date == 'string') date = new Date(date);
|
||||
return (
|
||||
date.getFullYear() + '年' +
|
||||
(date.getMonth() + 1) + '月' +
|
||||
date.getDate() + '日' +
|
||||
date.getFullYear() + '%i18n:common.date.full-year%' +
|
||||
(date.getMonth() + 1) + '%i18n:common.date.month%' +
|
||||
date.getDate() + '%i18n:common.date.day%' +
|
||||
' ' +
|
||||
date.getHours() + '時' +
|
||||
date.getMinutes() + '分' +
|
||||
date.getHours() + '%i18n:common.date.hours%' +
|
||||
date.getMinutes() + '%i18n:common.date.minutes%' +
|
||||
' ' +
|
||||
`(${['日', '月', '火', '水', '木', '金', '土'][date.getDay()]})`
|
||||
);
|
||||
|
@@ -5,8 +5,8 @@ declare const fuckAdBlock: any;
|
||||
export default (os) => {
|
||||
function adBlockDetected() {
|
||||
os.apis.dialog({
|
||||
title: '%fa:exclamation-triangle%広告ブロッカーを無効にしてください',
|
||||
text: '<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。',
|
||||
title: '%fa:exclamation-triangle%%i18n:common.adblock.detected%',
|
||||
text: '%i18n:common.adblock.warning%',
|
||||
actins: [{
|
||||
text: 'OK'
|
||||
}]
|
||||
|
@@ -1,5 +1,5 @@
|
||||
export default () => [
|
||||
'(=^・・^=)',
|
||||
'v(‘ω’)v',
|
||||
'v(\'ω\')v',
|
||||
'🐡( \'-\' 🐡 )フグパンチ!!!!'
|
||||
][Math.floor(Math.random() * 3)];
|
||||
|
@@ -1,13 +0,0 @@
|
||||
import Stream from './stream';
|
||||
import MiOS from '../../mios';
|
||||
|
||||
/**
|
||||
* Channel stream connection
|
||||
*/
|
||||
export default class Connection extends Stream {
|
||||
constructor(os: MiOS, channelId) {
|
||||
super(os, 'channel', {
|
||||
channel: channelId
|
||||
});
|
||||
}
|
||||
}
|
@@ -1,6 +1,6 @@
|
||||
import Stream from './stream';
|
||||
import StreamManager from './stream-manager';
|
||||
import MiOS from '../../mios';
|
||||
import MiOS from '../../../mios';
|
||||
|
||||
/**
|
||||
* Drive stream connection
|
||||
|
@@ -0,0 +1,11 @@
|
||||
import Stream from '../../stream';
|
||||
import MiOS from '../../../../../mios';
|
||||
|
||||
export class ReversiGameStream extends Stream {
|
||||
constructor(os: MiOS, me, game) {
|
||||
super(os, 'games/reversi-game', {
|
||||
i: me ? me.token : null,
|
||||
game: game.id
|
||||
});
|
||||
}
|
||||
}
|