Compare commits
1275 Commits
RAOF/fix-a
...
main
Author | SHA1 | Date | |
---|---|---|---|
f5b1b6f1c7 | |||
5d2e653a3b | |||
ebc9fbc88a | |||
db8cc6e7e8 | |||
2d888d6aa5 | |||
78b290a0dc | |||
59e1123d35 | |||
56f6e46c71 | |||
|
304fb740d8 | ||
|
61e65a55ad | ||
|
3f93212424 | ||
|
20d77c22df | ||
|
24d3b289da | ||
|
20fa2cacf4 | ||
|
4e67eb8317 | ||
|
24c008b0de | ||
|
1cb9459a23 | ||
|
10e06737cf | ||
|
30a3cec87e | ||
|
54af93d8ff | ||
|
9425b44d08 | ||
|
487f296db5 | ||
|
8bdd481e0d | ||
|
19f18421bc | ||
|
e1777e9071 | ||
|
613ccbcd94 | ||
|
b9a09a2511 | ||
|
213628e400 | ||
|
d6bb2bfb72 | ||
|
33bd290679 | ||
|
85ab5393fd | ||
|
98c73bb6df | ||
|
3e9d9a459f | ||
|
a394c3f210 | ||
|
a1a19e091a | ||
|
ec030d500d | ||
|
cfa74f84e7 | ||
|
97cbe7f446 | ||
|
7e4d081027 | ||
|
1e5ae92135 | ||
|
036ee6fac4 | ||
|
6028295748 | ||
|
aa4cfd374d | ||
|
3303a4af84 | ||
|
37a136787b | ||
|
300ff37694 | ||
|
c1d9d39dc1 | ||
|
93d6ee04d4 | ||
|
ae7bf2e132 | ||
|
0020242571 | ||
|
4f796e788c | ||
|
3d192c1179 | ||
|
2f8d188d59 | ||
|
19766662f1 | ||
|
301aad3f73 | ||
|
92a8f8aa4c | ||
|
0c856a5252 | ||
|
2df6138ff1 | ||
|
b2942f3f47 | ||
|
94f20c8fc2 | ||
|
5d48b93c8b | ||
|
bbf2e00920 | ||
|
c97361f5f4 | ||
|
7c799e8abf | ||
|
d196e1dbd0 | ||
|
1679315322 | ||
|
dd3a5f4a5b | ||
|
3580fb04fa | ||
|
699fdc30d9 | ||
|
704e9aa47f | ||
|
d741238ccb | ||
|
9776374d17 | ||
|
2d10ddb9fa | ||
|
e746a0b03f | ||
|
85cacf4239 | ||
|
f138ae6ed9 | ||
|
399af4004a | ||
|
d36f13e984 | ||
|
9a3699160d | ||
|
4103e7513d | ||
|
ed9970b102 | ||
|
afa875366e | ||
|
9696f04c64 | ||
|
40e1a1fc2c | ||
|
ee1e553460 | ||
|
d20ce6dd0b | ||
|
72f7909a42 | ||
|
4e1fb64868 | ||
|
85c1bfa300 | ||
|
172c78c41d | ||
|
3b08d5b485 | ||
|
832479a706 | ||
|
3b3148fa6b | ||
|
b38d55f486 | ||
|
2804a490ed | ||
|
8c098def61 | ||
|
e10ddb50c0 | ||
|
4df2c3e6f6 | ||
|
2f53fc78b6 | ||
|
fded87654d | ||
|
08cd777f81 | ||
|
96b88353c5 | ||
|
302026feb9 | ||
|
ba6d322da7 | ||
|
488563e9c1 | ||
|
130bb4c102 | ||
|
9368aebe70 | ||
|
ca2843822e | ||
|
bd91b4a346 | ||
|
35b951967d | ||
|
63d2cf91e9 | ||
|
263cf9e04f | ||
|
22ebecba67 | ||
|
903b48ed12 | ||
|
a550291c85 | ||
|
47394fc620 | ||
|
b180089b1b | ||
|
a275aa5965 | ||
|
87edb2486c | ||
|
10617f3144 | ||
|
6654ad28b7 | ||
|
771d4325c2 | ||
|
1536a6d3f3 | ||
|
620726cc25 | ||
|
0eef7c0b89 | ||
|
321e40ea3f | ||
|
a218b4ea4f | ||
|
9613ccd0c3 | ||
|
9493c1ad06 | ||
|
e92ac1a13f | ||
|
1517b4d91e | ||
|
38cc4c043d | ||
|
05c1d727dc | ||
|
84645c7ed9 | ||
|
7c505bde7f | ||
|
9f543f1b6b | ||
|
0f7b882749 | ||
|
f9f4375a40 | ||
|
12c2848cc7 | ||
|
4cfb3e2494 | ||
|
090b0a6f0d | ||
|
4502b77094 | ||
|
8f5a86206a | ||
|
340157f80d | ||
|
16b10695df | ||
|
b8eb631aa3 | ||
|
5c9094fede | ||
|
4e2ca515ce | ||
|
eccfbd3fbc | ||
|
8408342b5d | ||
|
c47921bb25 | ||
|
03f470f04c | ||
|
5770c3b85b | ||
|
c92f46b2c9 | ||
|
69eba69528 | ||
|
c302d842e0 | ||
|
f660220495 | ||
|
155df7bdf0 | ||
|
29055d1957 | ||
|
d6ee49b880 | ||
|
248ed265c4 | ||
|
a1f958ee7a | ||
|
abf352b957 | ||
|
393f8e5e0c | ||
|
4dfe300ee3 | ||
|
65829094c9 | ||
|
d5c3e6d6f0 | ||
|
d702dd2fae | ||
|
0d855823c9 | ||
|
2dd33769d4 | ||
|
4ea9f6ecf1 | ||
|
3b0b6c4b0b | ||
|
4328fad5a3 | ||
|
b26822c045 | ||
|
f372282b04 | ||
|
145253ccbf | ||
|
485223a3dd | ||
|
7f75fa74e7 | ||
|
821fce1903 | ||
|
ce484de61e | ||
|
35fb57718d | ||
|
35d12d7cae | ||
|
846154efe1 | ||
|
1ec7acbdfe | ||
|
e384fdfcff | ||
|
ed58e44d2e | ||
|
f151dee339 | ||
|
61f25941e8 | ||
|
0628a14be6 | ||
|
b46ae83377 | ||
|
70bc7f8edf | ||
|
aff481b947 | ||
|
29ef73d307 | ||
|
db205d0d9d | ||
|
57ab7edf23 | ||
|
e4bd9d65cf | ||
|
17e4ddb32d | ||
|
4fd85b30f1 | ||
|
6148f29c66 | ||
|
1a3fad2d6a | ||
|
0945d3bc53 | ||
|
9a824f06c3 | ||
|
eec09d79fe | ||
|
7f63d2a129 | ||
|
79b639c3e6 | ||
|
efef208f53 | ||
|
27e0f755f6 | ||
|
a9d7aae5d6 | ||
|
42e584a363 | ||
|
8c37ea3ec3 | ||
|
3c14fa0058 | ||
|
ab94cca210 | ||
|
ea62388985 | ||
|
a9219efee4 | ||
|
776ed058c7 | ||
|
aa3e196b8f | ||
|
52cb7270a9 | ||
|
66376afb36 | ||
|
96860be1be | ||
|
3bf61efc34 | ||
|
d95549f58b | ||
|
bf24e4878a | ||
|
9ae231fcef | ||
|
c32acb2fcf | ||
|
770c77ee81 | ||
|
aa3e4d7cf8 | ||
|
156a875f02 | ||
|
cfed02bbcf | ||
|
4d3db9af73 | ||
|
c1c606bc86 | ||
|
f401949037 | ||
|
e8dc0942e5 | ||
|
9fbafd8e79 | ||
|
b9ea83a602 | ||
|
2ada5a83af | ||
|
ec25599d1f | ||
|
57551610e2 | ||
|
8948b7acc1 | ||
|
ccf7ff2bc9 | ||
|
39de967141 | ||
|
118cfd7166 | ||
|
c2fd4ab3a5 | ||
|
70b5bee00f | ||
|
de605deb1e | ||
|
116974f811 | ||
|
c57f36ccca | ||
|
9def0355aa | ||
|
4e833c2061 | ||
|
5871ed7301 | ||
|
97632fdbfe | ||
|
1f8da7e63d | ||
|
76ca7c1462 | ||
|
f06f444a13 | ||
|
10dfecf45c | ||
|
a7b899817a | ||
|
e0258003b9 | ||
|
2326eb77cd | ||
|
504d41d887 | ||
|
5a7d5e8099 | ||
|
74a1daac8c | ||
|
1f855601ea | ||
|
f22c4d5c78 | ||
|
ce4b216722 | ||
|
9016995d92 | ||
|
853a1db028 | ||
|
712ee30a1f | ||
|
9e5f9255d1 | ||
|
2e35441483 | ||
|
5c74f598d8 | ||
|
5d711dc47c | ||
|
9ae3057106 | ||
|
b7ea154e51 | ||
|
692e6b1c82 | ||
|
528f1bac48 | ||
|
35aa2374c4 | ||
|
3eb7662aef | ||
|
de4fcaee93 | ||
|
812fd3d956 | ||
|
5d3b480790 | ||
|
2f1801acae | ||
|
0404528908 | ||
|
4529b929d8 | ||
|
889decc720 | ||
|
db0f1a3c46 | ||
|
ef57ef91f0 | ||
|
073b72c9ed | ||
|
45a6744d4d | ||
|
4d19861a25 | ||
|
f5906cacf3 | ||
|
03ba77a577 | ||
|
0fc7372781 | ||
|
6c2846980a | ||
|
0685c59bf3 | ||
|
5f629195f8 | ||
|
13eeedb620 | ||
|
a076c132ca | ||
|
a76e0dfe5b | ||
|
8faac20977 | ||
|
b04edfa05e | ||
|
1f62bf27f8 | ||
|
1e0d1fb97a | ||
|
19d30c12d1 | ||
|
384474930c | ||
|
4cb64e0a8c | ||
|
cd2a2df48d | ||
|
cbf960500b | ||
|
3d434f1923 | ||
|
52022fb597 | ||
|
d96940c848 | ||
|
b17884681d | ||
|
78a001ac89 | ||
|
9b04fb96e6 | ||
|
d23002b817 | ||
|
6282b98b03 | ||
|
d75600ba14 | ||
|
e6ea302319 | ||
|
df005a28f8 | ||
|
15134eed60 | ||
|
7dd56a71e3 | ||
|
06d2f68ecd | ||
|
9a640b3438 | ||
|
9791607793 | ||
|
ccd3c8a3f2 | ||
|
6bbadc78b0 | ||
|
e1673787b4 | ||
|
1dd176dd80 | ||
|
5c59687cb8 | ||
|
a24e3c46e6 | ||
|
267fecba66 | ||
|
fc99d2b7a0 | ||
|
1b32fa1e34 | ||
|
ce42524273 | ||
|
595fa05660 | ||
|
f8a0dff526 | ||
|
06d216c7ed | ||
|
f44bca30f4 | ||
|
e4180b3b38 | ||
|
992a482b96 | ||
|
0ad845e0f7 | ||
|
ee97213c90 | ||
|
6d919da049 | ||
|
6c615d01ad | ||
|
f8870af9fe | ||
|
2fe2505a01 | ||
|
e41fa353e4 | ||
|
effdc44943 | ||
|
fd341bdb22 | ||
|
68c794c54b | ||
|
7b3b00be23 | ||
|
41ccacc5d3 | ||
|
4ef9350ce7 | ||
|
5d08ff6c3b | ||
|
01dca62ce5 | ||
|
6ab1ecd57b | ||
|
b13444895f | ||
|
771c157fe5 | ||
|
b5e1076b0e | ||
|
6cc43c2420 | ||
|
f365041a45 | ||
|
ae9c9262f7 | ||
|
40ce515e6c | ||
|
bc96af7f5f | ||
|
811c20c8fb | ||
|
4b4c22cf8a | ||
|
0524b0b153 | ||
|
cd6c57b9c5 | ||
|
f608f7a4d6 | ||
|
803680186b | ||
|
68a01d5f9b | ||
|
5b3a472b66 | ||
|
2a85f775e9 | ||
|
a958300a58 | ||
|
a8be31b177 | ||
|
6cd68ab8b0 | ||
|
a589435f4f | ||
|
39b49c707e | ||
|
c4bb1f771b | ||
|
28440271bb | ||
|
0ab7774e29 | ||
|
33afe9111e | ||
|
d8a2e1925f | ||
|
2804f44a06 | ||
|
2165c286ae | ||
|
8cbf410faf | ||
|
c521a81373 | ||
|
7ade0550c9 | ||
|
41bc2d6949 | ||
|
de6e9c0e2e | ||
|
38ebc9ea41 | ||
|
8f976be998 | ||
|
e5a2850105 | ||
|
85727c6d4c | ||
|
87247a23b3 | ||
|
61785364e3 | ||
|
76f688c967 | ||
|
05df3b89a1 | ||
|
4e42a34337 | ||
|
62372201e0 | ||
|
036913a828 | ||
|
b2a889b9e4 | ||
|
fae8338772 | ||
|
79b5d9a690 | ||
|
3e54d10981 | ||
|
a1c3bfb646 | ||
|
b2528c21ff | ||
|
fcc9e1d81b | ||
|
3093f713ef | ||
|
4ea29d29a0 | ||
|
6b8d90d8b6 | ||
|
bd3e6a5a91 | ||
|
46f4676efb | ||
|
c814ac5681 | ||
|
0887399048 | ||
|
f2a2bf2b23 | ||
|
e2702a187b | ||
|
d78a57ce47 | ||
|
10acbdd41f | ||
|
73009818f2 | ||
|
fb5027becd | ||
|
86609b51fa | ||
|
44799e94fd | ||
|
f14c307786 | ||
|
174624f5c1 | ||
|
5f91345d69 | ||
|
9ca975113c | ||
|
38a55857c6 | ||
|
9343d3a120 | ||
|
c5656971c9 | ||
|
ed55b66253 | ||
|
713ffb9506 | ||
|
9969e844ca | ||
|
0c61dca9ca | ||
|
957725fbf8 | ||
|
1f6361a9a2 | ||
|
cf870971d1 | ||
|
08ac7227b5 | ||
|
88eb61c320 | ||
|
1c1dbd481a | ||
|
86b4f622ea | ||
|
f854bc5838 | ||
|
489156f4a3 | ||
|
01e8b0bce8 | ||
|
9183d04e66 | ||
|
5e463e2cc9 | ||
|
6e2bff10f7 | ||
|
3e9d9a81b7 | ||
|
98e0754976 | ||
|
da7870eeba | ||
|
c1562f3868 | ||
|
e0390cb105 | ||
|
32cd91cfb9 | ||
|
991dfccf3b | ||
|
16e012ba00 | ||
|
871618f45d | ||
|
680d321a2e | ||
|
c37ff54857 | ||
|
d4018d61d4 | ||
|
21a0059755 | ||
|
05f4c186f4 | ||
|
53512a6167 | ||
|
7cf7700ef7 | ||
|
216855d3a7 | ||
|
23f273e5e8 | ||
|
70949fad02 | ||
|
1f5ce8e504 | ||
|
2316d36e03 | ||
|
2b1ddc71ac | ||
|
b9dac1a21a | ||
|
95fb5a3c71 | ||
|
75b43a738f | ||
|
5bd467c4c1 | ||
|
74d6dc5089 | ||
|
994a4dbb2d | ||
|
67996cc938 | ||
|
f5e776c4d7 | ||
|
e27fc47287 | ||
|
0ed91b89ff | ||
|
00862790a1 | ||
|
ab6f39c192 | ||
|
4edc201c14 | ||
|
a1a7acfe94 | ||
|
6b5a1d2130 | ||
|
85e35fdb5d | ||
|
da9e13622c | ||
|
8f4dd8a57b | ||
|
78b0535063 | ||
|
6323c7aef8 | ||
|
7f0ad56d07 | ||
|
e7eea3901f | ||
|
0979471e54 | ||
|
8d69051a61 | ||
|
55ca1345e1 | ||
|
ad951ca842 | ||
|
cb8e2e9294 | ||
|
038d65acaa | ||
|
e392a89526 | ||
|
d62f51665b | ||
|
e42aa6fe8e | ||
|
ab126563f3 | ||
|
c1b9ebdae6 | ||
|
d3e11c78d7 | ||
|
4ccfec8019 | ||
|
bb5157637d | ||
|
456df3e535 | ||
|
f0112850fa | ||
|
a6a21d5dfa | ||
|
249fbbe891 | ||
|
e925865767 | ||
|
28643fc2c2 | ||
|
3db10a09bb | ||
|
a80a95d471 | ||
|
e407d58ee9 | ||
|
a6d839a766 | ||
|
f3b67ab6c9 | ||
|
66f5628a27 | ||
|
4b3b5c1f40 | ||
|
3e687f3af0 | ||
|
119d3e4f6a | ||
|
a21d66178e | ||
|
52967f3e47 | ||
|
29439f9d02 | ||
|
bc72a4c2d1 | ||
|
3ded0e2166 | ||
|
27c10e5e5c | ||
|
816aefe72a | ||
|
bff50f8e4c | ||
|
be1c22815b | ||
|
08ab7ffd08 | ||
|
8709f6cf9f | ||
|
04cae95635 | ||
|
5d37b2534a | ||
|
eafafdaadf | ||
|
6897b8fa58 | ||
|
16d3279d72 | ||
|
36c76c534d | ||
|
26f460be89 | ||
|
b9fb13104a | ||
|
5cc411158f | ||
|
ca69c93531 | ||
|
95cb7cc904 | ||
|
0a62fa46aa | ||
|
2e60410969 | ||
|
a12d3a591b | ||
|
3cf7c67b6d | ||
|
2cf79f31b7 | ||
|
24cf941303 | ||
|
38cf9b5496 | ||
|
b9607b32ac | ||
|
3393da2560 | ||
|
7566f94690 | ||
|
ee8312fb57 | ||
|
76219704f3 | ||
|
2a43d4e88a | ||
|
f0ce073a37 | ||
|
8047196394 | ||
|
3cf52b3985 | ||
|
ac378e448b | ||
|
daae2038f8 | ||
|
a2356c6e59 | ||
|
44b91c6f07 | ||
|
144565d13e | ||
|
07fd66863d | ||
|
385a5f7c33 | ||
|
8c8c2edc66 | ||
|
f7e393bded | ||
|
1df25e34b0 | ||
|
ed491bad21 | ||
|
306f2d5738 | ||
|
2196cb95c0 | ||
|
b4d494a5c7 | ||
|
e8432f575e | ||
|
eb48723c08 | ||
|
65168202b4 | ||
|
dced3cf881 | ||
|
170fd6026c | ||
|
1ccaa817b3 | ||
|
65ba083720 | ||
|
dba902d262 | ||
|
d52c7a3afa | ||
|
c63f88fb7f | ||
|
4412e0598f | ||
|
eb22c1168e | ||
|
917eda356d | ||
|
bc6580bbdc | ||
|
920cf622c5 | ||
|
13dcb193dc | ||
|
3afb724fed | ||
|
9662936b44 | ||
|
4780472d48 | ||
|
6f68c4504b | ||
|
28e0cdfe63 | ||
|
a5003526c8 | ||
|
ec3d78b509 | ||
|
4205e38605 | ||
|
8438d48c71 | ||
|
52faf5996b | ||
|
69eccc50a3 | ||
|
54cbdb236f | ||
|
34c374de1a | ||
|
113722e4ba | ||
|
3b429909f1 | ||
|
f1cdf4552f | ||
|
7d320e57da | ||
|
e1a598a459 | ||
|
6107842303 | ||
|
65372d2018 | ||
|
4842385ca6 | ||
|
05f55fc1ca | ||
|
e8153d4b42 | ||
|
2087a659f9 | ||
|
1770336c11 | ||
|
9c177f6286 | ||
|
93a2c6d99f | ||
|
5ef76873b7 | ||
|
b97c3fdb87 | ||
|
64838ad864 | ||
|
4df2ce5744 | ||
|
c1f42836d9 | ||
|
0cbc9438d4 | ||
|
ca6cd534d8 | ||
|
f529e803ef | ||
|
e5bc84badf | ||
|
e2077bed59 | ||
|
9ab9d29efb | ||
|
5373a674e1 | ||
|
bfaa2fafaf | ||
|
d4a13a13d4 | ||
|
92c0368dd8 | ||
|
80c0426768 | ||
|
71b21289ab | ||
|
fa861ff314 | ||
|
400d2dee32 | ||
|
3993dda17d | ||
|
b1255efdcd | ||
|
22036c6a94 | ||
|
f2df4b7d7d | ||
|
7c57bf78a1 | ||
|
8d898ff477 | ||
|
a1045dbce9 | ||
|
23a07f3f7b | ||
|
458d87fef1 | ||
|
82df86d09e | ||
|
858cad2995 | ||
|
c0483cf12e | ||
|
57a54cf016 | ||
|
325d8cde08 | ||
|
9e2c76c3bc | ||
|
996b161c1e | ||
|
831ef88431 | ||
|
89517e5988 | ||
|
48dbcf75a9 | ||
|
a56a9bc9c5 | ||
|
918103fa29 | ||
|
c9b8f5a739 | ||
|
d58ff36d80 | ||
|
00d647c0ad | ||
|
a27f196578 | ||
|
abe82b79ce | ||
|
95230c3a23 | ||
|
eade69a12c | ||
|
4f89e214ef | ||
|
2936679326 | ||
|
18a67fe1b5 | ||
|
ba29c8ef6f | ||
|
d253f1a020 | ||
|
03060d6ee2 | ||
|
ac8ad3aae2 | ||
|
14e294efed | ||
|
ec3205b372 | ||
|
45119d9a8c | ||
|
1065078f75 | ||
|
0ce904a985 | ||
|
254eec8e6a | ||
|
0e4cb4f6e1 | ||
|
9b05ac90df | ||
|
f28a7fa508 | ||
|
65e95d8998 | ||
|
808b8f8e98 | ||
|
43b46a8be4 | ||
|
9bbfc71fc8 | ||
|
5d58b31f1c | ||
|
e31a2238fb | ||
|
7de37bc9b7 | ||
|
13f7734751 | ||
|
b4395bce99 | ||
|
7c82b08615 | ||
|
6498dbfbb7 | ||
|
74254aed4a | ||
|
8c48abf48e | ||
|
8958226604 | ||
|
005a6db230 | ||
|
4397abd8ab | ||
|
e53882f555 | ||
|
5d5e61dfa1 | ||
|
c5c6b70a89 | ||
|
6778a0e943 | ||
|
677e238c6d | ||
|
b0bc2372fa | ||
|
6a808c7cc5 | ||
|
d53543ccb1 | ||
|
88d7d54601 | ||
|
0f0c896887 | ||
|
65233c0a9a | ||
|
32e1e4788f | ||
|
181a78876b | ||
|
61d5446113 | ||
|
c786569171 | ||
|
d83a75e3f4 | ||
|
a6f06559ea | ||
|
2084145dd3 | ||
|
dd54058516 | ||
|
4056a54d44 | ||
|
191cd11741 | ||
|
800e74da67 | ||
|
237da47950 | ||
|
ec12539fd0 | ||
|
a537db559b | ||
|
2ba158df67 | ||
|
c0c066547f | ||
|
c3f59b14b9 | ||
|
1d06a8f1ad | ||
|
efaf1295e9 | ||
|
4bc9cf3ad1 | ||
|
1e3851ea69 | ||
|
b6d38536e3 | ||
|
9b4c678aa9 | ||
|
a65775d85b | ||
|
192c7677c3 | ||
|
2a31a7b601 | ||
|
355fd7cb1d | ||
|
40efd73dfc | ||
|
31b144c76d | ||
|
31a46514cb | ||
|
c8d906eb99 | ||
|
2895a1c819 | ||
|
a4a5d08662 | ||
|
b97c9d2165 | ||
|
5b7e8a69a5 | ||
|
9601e99e33 | ||
|
d9a59f1b07 | ||
|
b6a6af906a | ||
|
2c4799ce27 | ||
|
b33b19849c | ||
|
e398f36c57 | ||
|
ee6064eee8 | ||
|
9d012c8f3c | ||
|
8888dbba0a | ||
|
6f8d5c1eb4 | ||
|
62da4a3d5c | ||
|
5cfc8e71a5 | ||
|
a599760891 | ||
|
00324f668f | ||
|
d4549704b9 | ||
|
0836e3d693 | ||
|
0058c3053d | ||
|
2a1a0a23a5 | ||
|
5614e3bd59 | ||
|
acbda3cde1 | ||
|
0755436458 | ||
|
3daf405ae2 | ||
|
53dc3b0c03 | ||
|
371dcc5091 | ||
|
905fe54fa3 | ||
|
62c0827ff5 | ||
|
d6c65ce81a | ||
|
5532b4a4d7 | ||
|
637bd3347b | ||
|
bac373a818 | ||
|
f0e7ea5640 | ||
|
4b981e0fad | ||
|
8fb9d861de | ||
|
199269ba3c | ||
|
0b9ec4c52c | ||
|
0e51565cc8 | ||
|
0418d35b67 | ||
|
bf9d25363b | ||
|
84f00c57d1 | ||
|
7c1a5421fa | ||
|
3815bfe980 | ||
|
de448c3192 | ||
|
967e2dfde6 | ||
|
dd3c1eac5f | ||
|
abc0a794c1 | ||
|
ef628aa498 | ||
|
011bd9602d | ||
|
b0745cfd82 | ||
|
d1b1d9f507 | ||
|
742d545f1c | ||
|
67dec4df22 | ||
|
33f3bbb774 | ||
|
7c1df80695 | ||
|
2adbb6f74c | ||
|
79c05e8381 | ||
|
31a1591043 | ||
|
0ede2ab3ab | ||
|
43656d8e46 | ||
|
b7cc2369a7 | ||
|
05a98175bf | ||
|
346a67fe1c | ||
|
a22f5f2336 | ||
|
55439990c6 | ||
|
3b0f28d061 | ||
|
ac3acfb4ac | ||
|
d5256e9ffc | ||
|
13be46445c | ||
|
c67b702425 | ||
|
e01539ef16 | ||
|
de4380fd34 | ||
|
5651e11ba1 | ||
|
5815602309 | ||
|
a0a69dfb22 | ||
|
d98132db80 | ||
|
25fe2ad802 | ||
|
48fab8ad2c | ||
|
a7d8d49faf | ||
|
388acd6738 | ||
|
d3c035aa39 | ||
|
12a8d00f8e | ||
|
b9ea06a01a | ||
|
1e67b3c13c | ||
|
5a5c8bdac8 | ||
|
44f9d36df1 | ||
|
7d349c2de6 | ||
|
79715ec7c7 | ||
|
f4d7dfb261 | ||
|
c525410062 | ||
|
af5b0b961b | ||
|
2f7a5cbf56 | ||
|
1506802c20 | ||
|
897ea8e11e | ||
|
858806149a | ||
|
0da9572627 | ||
|
94cc260803 | ||
|
7198b06a33 | ||
|
81006e1db8 | ||
|
0f7094a70e | ||
|
a0b661fffe | ||
|
4bef91f08b | ||
|
20c17be124 | ||
|
ae3344f318 | ||
|
9187e4dde9 | ||
|
89c185f819 | ||
|
09b9a37720 | ||
|
12a8bfcf2d | ||
|
b2be00b125 | ||
|
914d394bd0 | ||
|
811db1be0e | ||
|
cd81f042b9 | ||
|
c6111fcd28 | ||
|
82ebdc023c | ||
|
7b110179a9 | ||
|
afd66ce7cb | ||
|
9dac97045b | ||
|
188d4ac063 | ||
|
0fbefe2cdc | ||
|
eedd5fe4e9 | ||
|
27a1a56223 | ||
|
8e3322776a | ||
|
3d4336c548 | ||
|
0c8c607aa4 | ||
|
60d6734fe2 | ||
|
8c372aa6fc | ||
|
d1a74ca8e6 | ||
|
c374e0af4c | ||
|
58e8569048 | ||
|
83dbf2a945 | ||
|
d7d6d5f644 | ||
|
9aa9885a89 | ||
|
7fe1e083e0 | ||
|
a946823554 | ||
|
3a1872c03e | ||
|
5424f9110f | ||
|
a597816617 | ||
|
fa7a44f6bb | ||
|
dfcdcc1833 | ||
|
6345a57498 | ||
|
87457c0ed1 | ||
|
859a1fd528 | ||
|
5069aab584 | ||
|
033fde38fe | ||
|
7b2bab0f9d | ||
|
a419ef5319 | ||
|
f77dce9f12 | ||
|
4c2cd92f0d | ||
|
dd932e1f15 | ||
|
4376810d96 | ||
|
c961f4751b | ||
|
9e5ec0c9df | ||
|
112c034e27 | ||
|
664a3ddeea | ||
|
2ffd357d95 | ||
|
2bc4a13964 | ||
|
58324945cc | ||
|
16953ea907 | ||
|
d3c2dc8286 | ||
|
ebb0b45299 | ||
|
702aa11ecf | ||
|
33221d386e | ||
|
589c159eb9 | ||
|
ea1f4d48d5 | ||
|
462c5a1d42 | ||
|
f90d7ddee3 | ||
|
175055cf9d | ||
|
fe92d95f6c | ||
|
8e50d95a7a | ||
|
9ed36b2aa3 | ||
|
722165a734 | ||
|
74f99e2588 | ||
|
77c08845b5 | ||
|
2bfc26faf2 | ||
|
c26f2623a8 | ||
|
451c3b5c88 | ||
|
af5674074d | ||
|
28380021a7 | ||
|
37cbf537bb | ||
|
9345a1b7a9 | ||
|
d18f1d6d1d | ||
|
621258481d | ||
|
ce285bac17 | ||
|
a7e45bee11 | ||
|
73e075e216 | ||
|
b7c7b6da9f | ||
|
703328601c | ||
|
b2e7664339 | ||
|
ed22c6b103 | ||
|
94ccbd6190 | ||
|
77edc4849f | ||
|
07da97f434 | ||
|
89dd6be7dd | ||
|
60c1a4264e | ||
|
c4c177c530 | ||
|
4a5bffbd57 | ||
|
49b2296015 | ||
|
0ef4a06565 | ||
|
16b1337d67 | ||
|
6599179174 | ||
|
f2411f4607 | ||
|
2c3d429b8e | ||
|
7562cf1e75 | ||
|
de1c3f3245 | ||
|
5d38c3ad70 | ||
|
b55c2ff2f0 | ||
|
056d68804a | ||
|
347bc653d8 | ||
|
6fcece3bc0 | ||
|
e119c5bde9 | ||
|
1bc2749e1b | ||
|
58bb07d11d | ||
|
affe24b9c6 | ||
|
0bcf063b05 | ||
|
24ecb15119 | ||
|
208c515d70 | ||
|
d0ada7fc53 | ||
|
d86bd898cb | ||
|
db581a955b | ||
|
0b8b1bf25f | ||
|
faab5f6b3b | ||
|
6387a1334b | ||
|
10be055381 | ||
|
24c9c7b5a1 | ||
|
ac48744aca | ||
|
f2d2ecb247 | ||
|
1d46bf8d50 | ||
|
4353f2a92d | ||
|
1b9aeae53c | ||
|
540b9af873 | ||
|
d08d2c6958 | ||
|
348259a14b | ||
|
e68ca1151d | ||
|
3c15f5a82f | ||
|
5ba823990a | ||
|
c82c38fe52 | ||
|
e7ab80d5c8 | ||
|
61b68c3a42 | ||
|
6401cb6fb7 | ||
|
9d37408535 | ||
|
ded64e1cf0 | ||
|
3b766fc427 | ||
|
ad285898f6 | ||
|
78be49d57d | ||
|
25e52788c5 | ||
|
5d25a64f13 | ||
|
0dc89fbf23 | ||
|
94ed0eec2a | ||
|
d70e585b64 | ||
|
8f55e50c6e | ||
|
c113c99e1d | ||
|
191239584b | ||
|
bd1caaf5da | ||
|
76f7b5e7ac | ||
|
afe449b951 | ||
|
29f0712ea1 | ||
|
d091c24f79 | ||
|
f9e7d2bb23 | ||
|
dbf36ddf05 | ||
|
8b00853e88 | ||
|
84a3d53075 | ||
|
7967dd91c2 | ||
|
b5eb2628f9 | ||
|
4ef6561cc6 | ||
|
7f54f418a8 | ||
|
8f90ea18bf | ||
|
e12528aae4 | ||
|
042a1fd2b0 | ||
|
be99fe5f99 | ||
|
4a212e5f9e | ||
|
c253bdee54 | ||
|
46fc030df4 | ||
|
02277b1ace | ||
|
ac507d1d42 | ||
|
5148349098 | ||
|
e817941cc5 | ||
|
06962514fe | ||
|
c3c8f6804b | ||
|
6dd730030d | ||
|
6c1dd6608d | ||
|
42fb0cf825 | ||
|
2483303138 | ||
|
47e67d9b64 | ||
|
1d042e1bb2 | ||
|
31418b1079 | ||
|
68d79bfa9c | ||
|
a46b718937 | ||
|
5570494a37 | ||
|
a0cd9dd6bd | ||
|
cd5895d560 | ||
|
fc8ee1c3bc | ||
|
2a8cc5f3ba | ||
|
82524c9dca | ||
|
864379fb81 | ||
|
aae2073146 | ||
|
69963689f9 | ||
|
6ad3359609 | ||
|
6a2ba2260d | ||
|
ccbf2124cb | ||
|
a733ece26e | ||
|
16624fd742 | ||
|
e18be6ec95 | ||
|
1bfed0294f | ||
|
d4d32bcc11 | ||
|
0a148721de | ||
|
cfe097edf4 | ||
|
578768d7df | ||
|
996dc309f7 | ||
|
09d9164a1c | ||
|
43f32d30cb | ||
|
b1d7b3969d | ||
|
89fa208bec | ||
|
a11205324b | ||
|
7d17b12000 | ||
|
885dcf91fe | ||
|
192c0f8efd | ||
|
35e71b0f8a | ||
|
1a24ba44b2 | ||
|
7c00d4a88a | ||
|
476310a217 | ||
|
26ffde726f | ||
|
3fd89e6b48 | ||
|
be939cf169 | ||
|
4a15bef34f | ||
|
6eee4b0b65 | ||
|
f720dcbe9a | ||
|
33fceddc08 | ||
|
dfe83aafc5 | ||
|
0775c8f3f9 | ||
|
4cdc1a3655 | ||
|
bbd415c392 | ||
|
a236f33269 | ||
|
9b593c76e4 | ||
|
012c8d2026 | ||
|
cb05571339 | ||
|
64e4550dea | ||
|
ec8c17482d | ||
|
f167aad0fb | ||
|
24aac22b89 | ||
|
615a5fe346 | ||
|
a6699a7319 | ||
|
0f408bc738 | ||
|
44a7953c20 | ||
|
21069ea18e | ||
|
1e1fd49c8c | ||
|
84621d1d27 | ||
|
ba4476bf5a | ||
|
f87bc455b7 | ||
|
76ec0d2b13 | ||
|
4d547082e0 | ||
|
b9b9af6c44 | ||
|
4a4534d6f3 | ||
|
894c4fee2c | ||
|
27a33c833d | ||
|
b52d8e4e26 | ||
|
b059fb48fc | ||
|
f33b057961 | ||
|
663ca4f530 | ||
|
5892c0b088 | ||
|
044a24eac8 | ||
|
b93ebedaf3 | ||
|
8539bdaf72 | ||
|
c1abd3d6f9 | ||
|
becb40544c | ||
|
ee96d2b754 | ||
|
30093d3a9f | ||
|
29f2239e3f | ||
|
7f1b33a567 | ||
|
d0dd23a1af | ||
|
f8774223d4 | ||
|
bca870f1f8 | ||
|
64d38c88e8 | ||
|
3ac94b3e43 | ||
|
254eef6a2a | ||
|
f1255f477f | ||
|
6c7b95c1b9 | ||
|
e7d17caf9d | ||
|
71dd80f125 | ||
|
ed4761e841 | ||
|
fe05f9a58e | ||
|
51e5a401a5 | ||
|
f1990b782d | ||
|
4e3ed0f4c1 | ||
|
fdb58215c0 | ||
|
47c8711933 | ||
|
20a099c16f | ||
|
3824e4ba25 | ||
|
b163fc8423 | ||
|
b50f723a4d | ||
|
b778933c64 | ||
|
12b97ce713 | ||
|
4025a45d52 | ||
|
8a6d832513 | ||
|
0b0b3a158f | ||
|
6b745ca8f0 | ||
|
1f0cb7e05c | ||
|
c59821945d | ||
|
1a723b78b7 | ||
|
e7ff7e3263 | ||
|
3a6c1aeeef | ||
|
567e011a66 | ||
|
eaf63e0b17 | ||
|
63b31a9154 | ||
|
5885cb5b09 | ||
|
f5ca464b16 | ||
|
1c40d5d3bc | ||
|
7e1abc527f | ||
|
39b2ef72fd | ||
|
17b081a21f | ||
|
c482b1b552 | ||
|
8b16b9aaa4 | ||
|
11acc4172c | ||
|
6187c62cb3 | ||
|
d6b5b9a721 | ||
|
80675f85f3 | ||
|
07a6be424f | ||
|
8cc56d8d81 | ||
|
f8cabcc904 | ||
|
d6a946f5b9 | ||
|
2a5a2ec4d2 | ||
|
106e9417d3 | ||
|
2660efec16 | ||
|
1eaa5a6e31 | ||
|
b2c26f03e8 | ||
|
a75cdaa870 | ||
|
2047355d46 | ||
|
17bbcd1a4b | ||
|
5c8170a97d | ||
|
beaeaf743a | ||
|
fe641620a6 | ||
|
3e1a6e61ad | ||
|
45b46838ae | ||
|
46cdde8687 | ||
|
6b0dfb729c | ||
|
75a4d1abf1 | ||
|
984c0cda6b | ||
|
902612a470 | ||
|
e311d4d423 | ||
|
aa33c8e7d3 | ||
|
60e6d49319 | ||
|
6dbd9b76fb | ||
|
e3877d3022 | ||
|
4c11df65dc | ||
|
f8cfb8cacf | ||
|
9a7e10b560 | ||
|
e131330175 | ||
|
b9066cb7d0 | ||
|
4c4d9fafd5 | ||
|
bbdf2a8293 | ||
|
0d3e1a233f | ||
|
712bc2afbe | ||
|
2eadb80435 | ||
|
de05b9e176 | ||
|
5bf1e81f0b | ||
|
55abbff9b8 | ||
|
5f89401a7c | ||
|
7bd3c1b01e | ||
|
961806247c | ||
|
ac7ffae121 | ||
|
5321f3cf18 | ||
|
5099a00c6b | ||
|
d44c034f6a | ||
|
963e742dcf | ||
|
50462204e8 | ||
|
174ed738bd | ||
|
f8d098f353 | ||
|
f5b18dffaf | ||
|
002d1f1720 | ||
|
23a5634035 | ||
|
5cd8ae9106 | ||
|
350697f89a | ||
|
569979374f | ||
|
3c666080a9 | ||
|
4e6d7b70cf | ||
|
a59f167771 | ||
|
f28ab19dc0 | ||
|
6dd4080d65 | ||
|
eac76e6806 | ||
|
0cd26dfbf4 | ||
|
3de009713d | ||
|
69bcb01715 | ||
|
9ec2d93f50 | ||
|
4da9b24cb1 | ||
|
f40634aa97 | ||
|
83282e0736 | ||
|
43fde90387 | ||
|
ccba8163c9 | ||
|
8975b0f9e9 | ||
|
d626f3366d | ||
|
b24f195e10 | ||
|
003dcf861a | ||
|
5d8efa77a3 | ||
|
fb6d49cc6e | ||
|
48776939f4 | ||
|
104b6c1d0c | ||
|
3881927550 | ||
|
0bec13edc0 | ||
|
191d6da486 | ||
|
9aaff1a484 | ||
|
36fd55a7e4 | ||
|
fc474bf8d1 | ||
|
a050deb557 | ||
|
6de9a1f1c8 | ||
|
5e30bede40 | ||
|
5cca66b346 | ||
|
484659fde2 | ||
|
5fc827c1c9 | ||
|
50753b3a65 | ||
|
c5d03d300b | ||
|
010eac6c4a | ||
|
a107d35492 | ||
|
f9beb2383b | ||
|
7e78cffcaa | ||
|
719fec0828 | ||
|
90fdade566 | ||
|
28576c1fa3 | ||
|
d99b42582d | ||
|
92a386277b | ||
|
297d9fcf40 | ||
|
ef70cb93e6 | ||
|
efb76a3c17 | ||
|
197f0d7ecd | ||
|
3be842c653 | ||
|
dabe904642 | ||
|
180e34b07c | ||
|
847d6f7fac | ||
|
6a3f210dfc | ||
|
73aa301d4a | ||
|
b3d367b174 | ||
|
edaccd1a31 | ||
|
e1bd2eab75 | ||
|
ac7a05b09a | ||
|
71e0a35e06 | ||
|
c217e5e9b3 | ||
|
8ba0c17db5 | ||
|
4e43c676b4 | ||
|
b834d1c282 | ||
|
506fe9955d | ||
|
02c528cae4 |
10
.cargo/config.toml
Normal file
10
.cargo/config.toml
Normal file
@ -0,0 +1,10 @@
|
||||
[target.wasm32-unknown-unknown]
|
||||
# required for clippy
|
||||
rustflags = [
|
||||
"--cfg", "web_sys_unstable_apis",
|
||||
]
|
||||
|
||||
[target.x86_64-unknown-linux-gnu]
|
||||
rustflags = [
|
||||
"--cfg", "web_sys_unstable_apis",
|
||||
]
|
@ -10,8 +10,8 @@ executors:
|
||||
type: boolean
|
||||
default: false
|
||||
docker:
|
||||
- image: plumeorg/plume-buildenv:v0.0.9
|
||||
- image: <<#parameters.postgres>>circleci/postgres:9.6-alpine<</parameters.postgres>><<^parameters.postgres>>alpine:latest<</parameters.postgres>>
|
||||
- image: plumeorg/plume-buildenv:v0.8.0
|
||||
- image: <<#parameters.postgres>>cimg/postgres:14.2<</parameters.postgres>><<^parameters.postgres>>alpine:latest<</parameters.postgres>>
|
||||
environment:
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_DB: plume
|
||||
@ -21,6 +21,7 @@ executors:
|
||||
RUST_TEST_THREADS: 1
|
||||
FEATURES: <<#parameters.postgres>>postgres<</ parameters.postgres>><<^parameters.postgres>>sqlite<</parameters.postgres>>
|
||||
DATABASE_URL: <<#parameters.postgres>>postgres://postgres@localhost/plume<</parameters.postgres>><<^parameters.postgres>>plume.sqlite<</parameters.postgres>>
|
||||
ROCKET_SECRET_KEY: VN5xV1DN7XdpATadOCYcuGeR/dV0hHfgx9mx9TarLdM=
|
||||
|
||||
|
||||
commands:
|
||||
@ -37,7 +38,7 @@ commands:
|
||||
- restore_cache:
|
||||
keys:
|
||||
- v0-<< parameters.cache >>-{{ checksum "Cargo.lock" }}-{{ .Branch }}
|
||||
- v0-<< parameters.cache >>-{{ checksum "Cargo.lock" }}-master
|
||||
- v0-<< parameters.cache >>-{{ checksum "Cargo.lock" }}-main
|
||||
|
||||
cache:
|
||||
description: push cache
|
||||
@ -62,6 +63,7 @@ commands:
|
||||
type: boolean
|
||||
default: false
|
||||
steps:
|
||||
- run: rustup component add clippy --toolchain nightly-2022-07-19-x86_64-unknown-linux-gnu
|
||||
- run: cargo clippy <<^parameters.no_feature>>--no-default-features --features="${FEATURES}"<</parameters.no_feature>> --release -p <<parameters.package>> -- -D warnings
|
||||
|
||||
run_with_coverage:
|
||||
@ -71,7 +73,7 @@ commands:
|
||||
type: string
|
||||
steps:
|
||||
- run: |
|
||||
export RUSTFLAGS="-Zprofile -Zfewer-names -Ccodegen-units=1 -Cinline-threshold=0 -Clink-dead-code -Coverflow-checks=off -Zno-landing-pads -Clink-arg=-Xlinker -Clink-arg=--no-keep-memory -Clink-arg=-Xlinker -Clink-arg=--reduce-memory-overheads"
|
||||
export RUSTFLAGS="-Zprofile -Zfewer-names -Ccodegen-units=1 -Cinline-threshold=0 -Clink-dead-code -Coverflow-checks=off -Clink-arg=-Xlinker -Clink-arg=--no-keep-memory -Clink-arg=-Xlinker -Clink-arg=--reduce-memory-overheads"
|
||||
export CARGO_INCREMENTAL=0
|
||||
<< parameters.cmd >>
|
||||
|
||||
@ -99,7 +101,7 @@ commands:
|
||||
steps:
|
||||
- run: |
|
||||
cmd="cargo build <<#parameters.release>>--release<</parameters.release>> --no-default-features --features="${FEATURES}" -p <<parameters.package>> -j"
|
||||
for i in 36 4 2 1 1; do
|
||||
for i in 16 4 2 1 1; do
|
||||
$cmd $i && exit 0
|
||||
done
|
||||
exit 1
|
||||
@ -110,6 +112,7 @@ jobs:
|
||||
name: default
|
||||
steps:
|
||||
- restore_env
|
||||
- run: rustup component add rustfmt --toolchain nightly-2022-07-19-x86_64-unknown-linux-gnu
|
||||
- run: cargo fmt --all -- --check
|
||||
|
||||
clippy:
|
||||
@ -143,11 +146,14 @@ jobs:
|
||||
cache: <<#parameters.postgres>>postgres<</ parameters.postgres>><<^parameters.postgres>>sqlite<</parameters.postgres>>
|
||||
- run_with_coverage:
|
||||
cmd: |
|
||||
cargo build -p plume-cli --no-default-features --features=${FEATURES} -j 4
|
||||
./target/debug/plm migration run
|
||||
./target/debug/plm search init
|
||||
cmd="cargo test --all --exclude plume-front --exclude plume-macro --no-run --no-default-features --features=${FEATURES} -j"
|
||||
for i in 36 4 2 1 1; do
|
||||
for i in 16 4 2 1 1; do
|
||||
$cmd $i && break
|
||||
done
|
||||
cargo test --all --exclude plume-front --exclude plume-macro --no-default-features --features="${FEATURES}" -j1 -- --test-threads=1
|
||||
cargo test --all --exclude plume-front --exclude plume-macro --no-default-features --features="${FEATURES}" -j1
|
||||
- upload_coverage:
|
||||
type: unit
|
||||
- cache:
|
||||
@ -164,18 +170,18 @@ jobs:
|
||||
steps:
|
||||
- restore_env:
|
||||
cache: <<#parameters.postgres>>postgres<</ parameters.postgres>><<^parameters.postgres>>sqlite<</parameters.postgres>>
|
||||
- run: cargo web deploy -p plume-front
|
||||
- run: wasm-pack build --target web --release plume-front
|
||||
- run_with_coverage:
|
||||
cmd: |
|
||||
cmd="cargo install --debug --no-default-features --features="${FEATURES}",test --force --path . -j"
|
||||
for i in 36 4 2 1 1; do
|
||||
for i in 16 4 2 1 1; do
|
||||
$cmd $i && exit 0
|
||||
done
|
||||
exit 1
|
||||
- run_with_coverage:
|
||||
cmd: |
|
||||
cmd="cargo install --debug --no-default-features --features="${FEATURES}" --force --path plume-cli -j"
|
||||
for i in 36 4 2 1 1; do
|
||||
for i in 16 4 2 1 1; do
|
||||
$cmd $i && exit 0
|
||||
done
|
||||
exit 1
|
||||
@ -199,7 +205,7 @@ jobs:
|
||||
steps:
|
||||
- restore_env:
|
||||
cache: release-<<#parameters.postgres>>postgres<</ parameters.postgres>><<^parameters.postgres>>sqlite<</parameters.postgres>>
|
||||
- run: cargo web deploy -p plume-front --release
|
||||
- run: wasm-pack build --target web --release plume-front
|
||||
- build:
|
||||
package: plume
|
||||
release: true
|
||||
@ -226,6 +232,7 @@ jobs:
|
||||
steps:
|
||||
- restore_env:
|
||||
cache: none
|
||||
- run: cargo build
|
||||
- run: crowdin upload -b master
|
||||
|
||||
workflows:
|
||||
@ -253,4 +260,4 @@ workflows:
|
||||
filters:
|
||||
branches:
|
||||
only:
|
||||
- /^master/
|
||||
- /^main/
|
||||
|
@ -1,6 +1,3 @@
|
||||
localhost:443 {
|
||||
proxy / localhost:7878 {
|
||||
transparent
|
||||
}
|
||||
tls self_signed
|
||||
localhost {
|
||||
reverse_proxy localhost:7878
|
||||
}
|
||||
|
@ -1,21 +1,24 @@
|
||||
FROM debian:stretch-20190326
|
||||
FROM rust:1
|
||||
ENV PATH="/root/.cargo/bin:${PATH}"
|
||||
|
||||
#install native/circleci/build dependancies
|
||||
RUN apt update &&\
|
||||
apt install -y --no-install-recommends git ssh tar gzip ca-certificates default-jre&&\
|
||||
apt install -y --no-install-recommends binutils-dev build-essential cmake curl gcc gettext git libcurl4-openssl-dev libdw-dev libelf-dev libiberty-dev libpq-dev libsqlite3-dev libssl-dev make openssl pkg-config postgresql postgresql-contrib python zlib1g-dev python3-pip zip unzip libclang-dev&&\
|
||||
echo "deb [trusted=yes] https://apt.fury.io/caddy/ /" \
|
||||
| tee -a /etc/apt/sources.list.d/caddy-fury.list &&\
|
||||
wget -qO - https://artifacts.crowdin.com/repo/GPG-KEY-crowdin | apt-key add - &&\
|
||||
echo "deb https://artifacts.crowdin.com/repo/deb/ /" > /etc/apt/sources.list.d/crowdin.list &&\
|
||||
apt update &&\
|
||||
apt install -y --no-install-recommends binutils-dev build-essential cmake curl gcc gettext git libcurl4-openssl-dev libdw-dev libelf-dev libiberty-dev libpq-dev libsqlite3-dev libssl-dev make openssl pkg-config postgresql postgresql-contrib python zlib1g-dev python3-dev python3-pip python3-setuptools zip unzip libclang-dev clang caddy crowdin3 &&\
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
#install and configure rust
|
||||
RUN curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain nightly-2020-01-15 -y &&\
|
||||
rustup component add rustfmt clippy &&\
|
||||
rustup component add rust-std --target wasm32-unknown-unknown
|
||||
#stick rust environment
|
||||
COPY rust-toolchain ./
|
||||
RUN rustup component add rustfmt clippy
|
||||
|
||||
#compile some deps
|
||||
RUN cargo install cargo-web &&\
|
||||
RUN cargo install wasm-pack &&\
|
||||
cargo install grcov &&\
|
||||
strip /root/.cargo/bin/* &&\
|
||||
rm -fr ~/.cargo/registry
|
||||
|
||||
#set some compilation parametters
|
||||
@ -24,14 +27,5 @@ COPY cargo_config /root/.cargo/config
|
||||
#install selenium for front end tests
|
||||
RUN pip3 install selenium
|
||||
|
||||
#install and configure caddy
|
||||
RUN curl https://getcaddy.com | bash -s personal
|
||||
#configure caddy
|
||||
COPY Caddyfile /Caddyfile
|
||||
|
||||
#install crowdin
|
||||
RUN mkdir /crowdin && cd /crowdin &&\
|
||||
curl -O https://downloads.crowdin.com/cli/v2/crowdin-cli.zip &&\
|
||||
unzip crowdin-cli.zip && rm crowdin-cli.zip &&\
|
||||
cd * && mv crowdin-cli.jar /usr/local/bin && cd && rm -rf /crowdin &&\
|
||||
/bin/echo -e '#!/bin/sh\njava -jar /usr/local/bin/crowdin-cli.jar $@' > /usr/local/bin/crowdin &&\
|
||||
chmod +x /usr/local/bin/crowdin
|
||||
|
1
.circleci/images/plume-buildenv/rust-toolchain
Normal file
1
.circleci/images/plume-buildenv/rust-toolchain
Normal file
@ -0,0 +1 @@
|
||||
nightly-2022-07-19
|
@ -3,3 +3,5 @@ data
|
||||
Dockerfile
|
||||
docker-compose.yml
|
||||
.env
|
||||
target
|
||||
data
|
||||
|
12
.env.sample
12
.env.sample
@ -15,6 +15,9 @@ DATABASE_URL=postgres://plume:plume@localhost/plume
|
||||
# The domain of your instance
|
||||
BASE_URL=plu.me
|
||||
|
||||
# Log level for each crate
|
||||
RUST_LOG=info
|
||||
|
||||
# The secret key for private cookies and CSRF protection
|
||||
# You can generate one with `openssl rand -base64 32`
|
||||
ROCKET_SECRET_KEY=
|
||||
@ -45,3 +48,12 @@ ROCKET_ADDRESS=127.0.0.1
|
||||
#PLUME_LOGO_192=icons/trwnh/paragraphs/plumeParagraphs192.png
|
||||
#PLUME_LOGO_256=icons/trwnh/paragraphs/plumeParagraphs256.png
|
||||
#PLUME_LOGO_512=icons/trwnh/paragraphs/plumeParagraphs512.png
|
||||
|
||||
## LDAP CONFIG ##
|
||||
# the object that will be bound is "${USER_NAME_ATTR}=${username},${BASE_DN}"
|
||||
#LDAP_ADDR=ldap://127.0.0.1:1389
|
||||
#LDAP_BASE_DN="ou=users,dc=your-org,dc=eu"
|
||||
#LDAP_USER_NAME_ATTR=cn
|
||||
#LDAP_USER_MAIL_ATTR=mail
|
||||
#LDAP_TLS=false
|
||||
|
||||
|
10
.github/ISSUE_TEMPLATE/bug_report.md
vendored
10
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@ -7,6 +7,16 @@ assignees: ''
|
||||
|
||||
---
|
||||
|
||||
<!--
|
||||
We would appreciated if you report a bug at our Gitea instance's issue page:
|
||||
https://git.joinplu.me/Plume/Plume/issues
|
||||
You can login to the Gitea with your GitHub account.
|
||||
|
||||
We welcome to receive bug reports here, GitHub, too.
|
||||
-->
|
||||
|
||||
|
||||
|
||||
<!-- Describe your bug, explaining how to reproduce it, and what was expected -->
|
||||
|
||||
|
||||
|
9
.github/ISSUE_TEMPLATE/feature_request.md
vendored
9
.github/ISSUE_TEMPLATE/feature_request.md
vendored
@ -7,6 +7,15 @@ assignees: ''
|
||||
|
||||
---
|
||||
|
||||
<!--
|
||||
We would appreciated if you request a feature at our Gitea instance's issue page:
|
||||
https://git.joinplu.me/Plume/Plume/issues
|
||||
You can login to the Gitea with your GitHub account.
|
||||
|
||||
We welcome to receive feature requests here, GitHub, too.
|
||||
-->
|
||||
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
|
6
.github/dependabot.yml
vendored
Normal file
6
.github/dependabot.yml
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: cargo
|
||||
directory: /
|
||||
schedule:
|
||||
interval: daily
|
7
.github/pull_request_template.md
vendored
Normal file
7
.github/pull_request_template.md
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
<!--
|
||||
We would appreciated if you report a bug at our Gitea instance's pull request page:
|
||||
https://git.joinplu.me/Plume/Plume/pulls
|
||||
You can login to the Gitea with your GitHub account.
|
||||
|
||||
We welcome to receive pull requests here, GitHub, too.
|
||||
-->
|
30
.github/workflows/deploy-docker-latest.yaml
vendored
Normal file
30
.github/workflows/deploy-docker-latest.yaml
vendored
Normal file
@ -0,0 +1,30 @@
|
||||
name: cd
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'main'
|
||||
|
||||
jobs:
|
||||
docker:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
-
|
||||
name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v2
|
||||
-
|
||||
name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v2
|
||||
-
|
||||
name: Login to DockerHub
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
-
|
||||
name: Build and push
|
||||
id: docker_build
|
||||
uses: docker/build-push-action@v3
|
||||
with:
|
||||
push: true
|
||||
tags: plumeorg/plume:latest
|
36
.github/workflows/deploy-docker-tag.yaml
vendored
Normal file
36
.github/workflows/deploy-docker-tag.yaml
vendored
Normal file
@ -0,0 +1,36 @@
|
||||
name: cd
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- '*.*.*'
|
||||
|
||||
jobs:
|
||||
docker:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
-
|
||||
name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v2
|
||||
-
|
||||
name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v2
|
||||
-
|
||||
name: Docker meta
|
||||
id: meta
|
||||
uses: docker/metadata-action@v3
|
||||
with:
|
||||
images: plumeorg/plume
|
||||
-
|
||||
name: Login to DockerHub
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
-
|
||||
name: Build and push
|
||||
id: docker_build
|
||||
uses: docker/build-push-action@v3
|
||||
with:
|
||||
push: true
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
4
.gitignore
vendored
4
.gitignore
vendored
@ -18,3 +18,7 @@ tags.*
|
||||
search_index
|
||||
.buildconfig
|
||||
__pycache__
|
||||
.vscode/
|
||||
*-journal
|
||||
.direnv/
|
||||
build.log*
|
||||
|
303
CHANGELOG.md
Normal file
303
CHANGELOG.md
Normal file
@ -0,0 +1,303 @@
|
||||
# Changelog
|
||||
|
||||
<!-- next-header -->
|
||||
|
||||
## [Unreleased] - ReleaseDate
|
||||
|
||||
### Added
|
||||
|
||||
- Add 'My feed' to i18n timeline name (#1084)
|
||||
- Bidirectional support for user page header (#1092)
|
||||
- Add non anonymous bind to LDAP server, taken from https://git.joinplu.me/Plume/Plume/src/branch/ldap-non-anon PR
|
||||
|
||||
### Changed
|
||||
|
||||
- Use blog title as slug (#1094, #1126, #1127)
|
||||
- Bump Rust to nightly 2022-07-19 (#1119)
|
||||
- Force LDAP simple bind with *cn* rdn instead of *uid*
|
||||
- Update rust-toolchain to nightly-2023-04-14
|
||||
- Update chrono from 0.4.0 to 0.4.31
|
||||
- Update scheduled-thread-pool from 0.2.6 to 0.2.7
|
||||
|
||||
### Fixed
|
||||
|
||||
- Malfunction while creating a blog post in Persian (#1116)
|
||||
- Email block list is ignored when email sign-up (#1122)
|
||||
- Bug that some Activity Sytreams properties are not parsed properly (#1129)
|
||||
- Allow empty avatar for remote users (#1129)
|
||||
- Percent encode blog FQN for federation interoperability (#1129)
|
||||
- The same to `preferredUsername` (#1129)
|
||||
- Deprecation warnings during build process(see rust crate updates)
|
||||
- Server error 500 creating new blog with white spaces inside title. Bug reported on https://git.joinplu.me/Plume/Plume/issues/1152
|
||||
- Show _Subscribe_ button in column format instead of row format in screen smaller than 600px. https://git.lainoa.eus/aitzol/Plume/commit/db8cc6e7e8351a5d74f7ce0399126e13493c62d9
|
||||
### To do
|
||||
|
||||
- Choose rdn via environment variables for LDAP simple bind
|
||||
|
||||
## [[0.7.2]] - 2022-05-11
|
||||
|
||||
### Added
|
||||
|
||||
- Basque language (#1013)
|
||||
- Unit tests for ActivityPub (#1021)
|
||||
- Move to action area after liking/boosting/commenting (#1074)
|
||||
|
||||
### Changed
|
||||
|
||||
- Bump Rust to nightly 2022-01-26 (#1015)
|
||||
- Remove "Latest articles" timeline (#1069)
|
||||
- Change order of timeline tabs (#1069, #1070, #1072)
|
||||
- Migrate ActivityPub-related crates from activitypub 0.1 to activitystreams 0.7 (#1022)
|
||||
|
||||
### Fixed
|
||||
|
||||
- Add explanation of sign-up step at sign-up page when email sign-up mode (#1012)
|
||||
- Add NOT NULL constraint to email_blocklist table fields (#1016)
|
||||
- Don't fill empty content when switching rich editor (#1017)
|
||||
- Fix accept header (#1058)
|
||||
- Render 404 page instead of 500 when data is not found (#1062)
|
||||
- Reuse reqwest client on broadcasting (#1059)
|
||||
- Reduce broadcasting HTTP request at once to prevent them being timed out (#1068, #1071)
|
||||
- Some ActivityPub data (#1021)
|
||||
|
||||
## [[0.7.1]] - 2022-01-12
|
||||
|
||||
### Added
|
||||
|
||||
- Introduce environment variable `MAIL_PORT` (#980)
|
||||
- Introduce email sign-up feature (#636, #1002)
|
||||
|
||||
### Changed
|
||||
|
||||
- Some styling improvements (#976, #977, #978)
|
||||
- Respond with error status code when error (#1002)
|
||||
|
||||
### Fiexed
|
||||
|
||||
- Fix comment link (#974)
|
||||
- Fix a bug that prevents posting articles (#975)
|
||||
- Fix a bug that notification page doesn't show (#981)
|
||||
|
||||
## [[0.7.0]] - 2022-01-02
|
||||
|
||||
### Added
|
||||
|
||||
- Allow `dir` attributes for LtoR text in RtoL document (#860)
|
||||
- More translation languages (#862)
|
||||
- Proxy support (#829)
|
||||
- Riker a actor system library (#870)
|
||||
- (request-target) and Host header in HTTP Signature (#872)
|
||||
- Default log levels for RUST_LOG (#885, #886, #919)
|
||||
|
||||
### Changed
|
||||
|
||||
- Upgrade some dependent crates (#858)
|
||||
- Use tracing crate (#868)
|
||||
- Update Rust version to nightly-2021-11-27 (#961)
|
||||
- Upgrade Tantivy to 0.13.3 and lindera-tantivy to 0.7.1 (#878)
|
||||
- Run searcher on actor system (#870)
|
||||
- Extract a function to calculate posts' ap_url and share it with some places (#918)
|
||||
- Use article title as its slug instead of capitalizing and inserting hyphens (#920)
|
||||
- Sign GET requests to other instances (#957)
|
||||
|
||||
### Fixed
|
||||
|
||||
- Percent-encode URI for remote_interact (#866, #857)
|
||||
- Menu animation not opening on iOS (#876, #897)
|
||||
- Make actors subscribe to channel once (#913)
|
||||
- Upsert posts and media instead of trying to insert and fail (#912)
|
||||
- Update post's ActivityPub id when published by update (#915)
|
||||
- Calculate media URI properly even when MEDIA_UPLOAD_DIRECTORY configured (#916)
|
||||
- Prevent duplicated posts in 'all' timeline (#917)
|
||||
- Draw side line for blockquote on start (#933)
|
||||
- Fix URIs of posts on Mastodon (#947)
|
||||
- Place edit link proper position (#956, #963, #964)
|
||||
|
||||
## [[0.6.0]] - 2020-12-29
|
||||
|
||||
### Added
|
||||
|
||||
- Vazir font for better support of languages written in Arabic script (#787)
|
||||
- Login via LDAP (#826)
|
||||
- cargo-release (#835)
|
||||
- Care about weak ETag header for better caching (#840)
|
||||
- Support for right to left languages in post content (#853)
|
||||
|
||||
### Changed
|
||||
|
||||
- Bump Docker base images to Buster flavor (#797)
|
||||
- Upgrade Rocket to 0.4.5 (#800)
|
||||
- Keep tags as-is (#832)
|
||||
- Update Docker image for testing (#838)
|
||||
- Update Dockerfile.dev (#841)
|
||||
|
||||
### Fixed
|
||||
|
||||
- Recreate search index if its format is outdated (#802)
|
||||
- Make it possible to switch to rich text editor (#808)
|
||||
- Fix margins for the mobile devices (#817)
|
||||
- GPU acceleration for the mobile menu (#818)
|
||||
- Natural title position for RtoL languages (#825)
|
||||
- Remove link to unimplemented page (#827)
|
||||
- Fix displaying not found page when submitting a duplicated blocklist email (#831)
|
||||
|
||||
### Security
|
||||
|
||||
- Validate spoofing of activity
|
||||
|
||||
## [0.5.0] - 2020-06-21
|
||||
|
||||
### Added
|
||||
|
||||
- Email blocklisting (#718)
|
||||
- Syntax highlighting (#691)
|
||||
- Persian localization (#782)
|
||||
- Switchable tokenizer - enables Japanese full-text search (#776)
|
||||
- Make database connections configurable by environment variables (#768)
|
||||
|
||||
### Changed
|
||||
|
||||
- Display likes and boost on post cards (#744)
|
||||
- Rust 2018 (#726)
|
||||
- Bump to LLVM to 9.0.0 to fix ARM builds (#737)
|
||||
- Remove dependency on runtime-fmt (#773)
|
||||
- Drop the -alpha suffix in release names, it is implied that Plume is not stable yet because of the 0 major version (Plume 1.0.0 will be the first stable release).
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix parsing of mentions inside a Markdown code block (be430c6)
|
||||
- Fix RSS issues (#720)
|
||||
- Fix Atom feed (#764)
|
||||
- Fix default theme (#746)
|
||||
- Fix shown password on remote interact pages (#741)
|
||||
- Allow unicode hashtags (#757)
|
||||
- Fix French grammar for for 0 (#760)
|
||||
- Don't show boosts and likes for "all" and "local" in timelines (#781)
|
||||
- Fix liking and boosting posts on remote instances (#762)
|
||||
|
||||
## [0.4.0] - 2019-12-23
|
||||
|
||||
### Added
|
||||
|
||||
- Add support for generic timeline (#525)
|
||||
- Federate user deletion (#551)
|
||||
- import migrations and don't require diesel_cli for admins (#555)
|
||||
- Cache local instance (#572)
|
||||
- Initial RTL support #575 (#577)
|
||||
- Confirm deletion of blog (#602)
|
||||
- Make a distinction between moderators and admins (#619)
|
||||
- Theming (#624)
|
||||
- Add clap to plume in order to print help and version (#631)
|
||||
- Add Snapcraft metadata and install/maintenance hooks (#666)
|
||||
- Add environmental variable to control path of media (#683)
|
||||
- Add autosaving to the editor (#688)
|
||||
- CI: Upload artifacts to pull request deploy environment (#539)
|
||||
- CI: Upload artifact of wasm binary (#571)
|
||||
|
||||
### Changed
|
||||
|
||||
- Update follow_remote.rs.html grammar (#548)
|
||||
- Add some feedback when performing some actions (#552)
|
||||
- Theme update (#553)
|
||||
- Remove the new index lock tantivy uses (#556)
|
||||
- Reduce reqwest timeout to 5s (#557)
|
||||
- Improve notification management (#561)
|
||||
- Fix occurrences of 'have been' to 'has been' (#578) + Direct follow-up to #578 (#603)
|
||||
- Store password reset requests in database (#610)
|
||||
- Use futures and tokio to send activities (#620)
|
||||
- Don't ignore dotenv errors (#630)
|
||||
- Replace the input! macro with an Input builder (#646)
|
||||
- Update default license (#659)
|
||||
- Paginate the outbox responses. Fixes #669 (#681)
|
||||
- Use the "classic" editor by default (#697)
|
||||
- Fix issue #705 (#708)
|
||||
- Make comments in styleshhets a bit clearer (#545)
|
||||
- Rewrite circleci config (#558)
|
||||
- Use openssl instead of sha256sum for build.rs (#568)
|
||||
- Update dependencies (#574)
|
||||
- Refactor code to use Shrinkwraprs and diesel-derive-newtype (#598)
|
||||
- Add enum containing all successful route returns (#614)
|
||||
- Update dependencies which depended on nix -- fixes arm32 builds (#615)
|
||||
- Update some documents (#616)
|
||||
- Update dependencies (#643)
|
||||
- Make the comment syntax consistent across all CSS (#487)
|
||||
|
||||
### Fixed
|
||||
|
||||
- Remove r (#535)
|
||||
- Fix certain improper rendering of forms (#560)
|
||||
- make hashtags work in profile summary (#562)
|
||||
- Fix some federation issue (#573)
|
||||
- Prevent comment form submit button distortion on iOS (#592)
|
||||
- Update textarea overflow to scroll (#609)
|
||||
- Fix arm builds (#612)
|
||||
- Fix theme caching (#647)
|
||||
- Fix issue #642, frontend not in English if the user language does not exist (#648)
|
||||
- Don't index drafts (#656)
|
||||
- Fill entirely user on creation (#657)
|
||||
- Delete notification on user deletion (#658)
|
||||
- Order media so that latest added are top (#660)
|
||||
- Fix logo URL (#664)
|
||||
- Snap: Ensure cargo-web doesn't erroneously adopt our workspace. (#667)
|
||||
- Snap: Another fix for building (#668)
|
||||
- Snap: Fix build for non-Tier-1 Rust platforms (#672)
|
||||
- Don't split sentences for translations (#677)
|
||||
- Escape href quotation marks (#678)
|
||||
- Re-add empty strings in translation (#682)
|
||||
- Make the search index creation during migration respect SEARCH_INDEX (#689)
|
||||
- Fix the navigation menu not opening on touch (#690)
|
||||
- Make search items optional (#693)
|
||||
- Various snap fixes (#698)
|
||||
- Fix #637 : Markdown footnotes (#700)
|
||||
- Fix lettre (#706)
|
||||
- CI: Fix Crowdin upload (#576)
|
||||
|
||||
### Removed
|
||||
|
||||
- Remove the Canapi dependency (#540)
|
||||
- Remove use of Rust in migrations (#704)
|
||||
|
||||
## [0.3.0] - 2019-04-19
|
||||
|
||||
### Added
|
||||
|
||||
- Cover for articles (#299, #387)
|
||||
- Password reset (#448)
|
||||
- New editor (#293, #458, #482, #483, #486, #530)
|
||||
- Search (#324, #375, #445)
|
||||
- Edit blogs (#460, #494, #497)
|
||||
- Hashtags in articles (#283, #295)
|
||||
- API endpoints (#245, #285, #307)
|
||||
- A bunch of new translations! (#479, #501, #506, #510, #512, #514)
|
||||
|
||||
### Changed
|
||||
|
||||
- Federation improvements (#216, #217, #357, #364, #399, #443, #446, #455, #502, #519)
|
||||
- Improved build process (#281, #374, #392, #402, #489, #498, #503, #511, #513, #515, #528)
|
||||
|
||||
### Fixes
|
||||
|
||||
- UI usability fixes (#370, #386, #401, #417, #418, #444, #452, #480, #516, #518, #522, #532)
|
||||
|
||||
## [0.2.0] - 2018-09-12
|
||||
|
||||
### Added
|
||||
|
||||
- Article publishing, or save as a draft
|
||||
- Like, or boost an article
|
||||
- Basic Markdown editor
|
||||
- Federated commenting system
|
||||
- User account creation
|
||||
- Limited federation on other platforms and subscribing to users
|
||||
- Ability to create multiple blogs
|
||||
|
||||
<!-- next-url -->
|
||||
[Unreleased]: https://github.com/Plume-org/Plume/compare/0.7.2...HEAD
|
||||
[[0.7.2]]: https://github.com/Plume-org/Plume/compare/0.7.1...0.7.2
|
||||
[[0.7.1]]: https://github.com/Plume-org/Plume/compare/0.7.0...0.7.1
|
||||
[[0.7.0]]: https://github.com/Plume-org/Plume/compare/0.6.0...0.7.0
|
||||
[[0.6.0]]: https://github.com/Plume-org/Plume/compare/0.5.0...0.6.0
|
||||
[0.5.0]: https://github.com/Plume-org/Plume/compare/0.4.0-alpha-4...0.5.0
|
||||
[0.4.0]: https://github.com/Plume-org/Plume/compare/0.3.0-alpha-2...0.4.0-alpha-4
|
||||
[0.3.0]: https://github.com/Plume-org/Plume/compare/0.2.0-alpha-1...0.3.0-alpha-2
|
||||
[0.2.0]: https://github.com/Plume-org/Plume/releases/tag/0.2.0-alpha-1
|
6282
Cargo.lock
generated
6282
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
70
Cargo.toml
70
Cargo.toml
@ -1,39 +1,33 @@
|
||||
[package]
|
||||
authors = ["Plume contributors"]
|
||||
name = "plume"
|
||||
version = "0.4.0"
|
||||
repository = "https://github.com/Plume-org/Plume"
|
||||
edition = "2018"
|
||||
version = "0.7.3-dev-fork"
|
||||
repository = "https://git.lainoa.eus/aitzol/Plume"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
activitypub = "0.1.3"
|
||||
askama_escape = "0.1"
|
||||
atom_syndication = "0.6"
|
||||
atom_syndication = "0.12.0"
|
||||
clap = "2.33"
|
||||
colored = "1.8"
|
||||
dotenv = "0.14"
|
||||
gettext = { git = "https://github.com/Plume-org/gettext/", rev = "294c54d74c699fbc66502b480a37cc66c1daa7f3" }
|
||||
gettext-macros = { git = "https://github.com/Plume-org/gettext-macros/", rev = "a7c605f7edd6bfbfbfe7778026bfefd88d82db10" }
|
||||
gettext-utils = { git = "https://github.com/Plume-org/gettext-macros/", rev = "a7c605f7edd6bfbfbfe7778026bfefd88d82db10" }
|
||||
guid-create = "0.1"
|
||||
heck = "0.3.0"
|
||||
lettre = "0.9.2"
|
||||
dotenv = "0.15.0"
|
||||
gettext = "0.4.0"
|
||||
gettext-macros = "0.6.1"
|
||||
gettext-utils = "0.1.0"
|
||||
guid-create = "0.2"
|
||||
lettre_email = "0.9.2"
|
||||
num_cpus = "1.10"
|
||||
rocket = "0.4.2"
|
||||
rocket_contrib = { version = "0.4.2", features = ["json"] }
|
||||
rocket_i18n = { git = "https://github.com/Plume-org/rocket_i18n", rev = "e922afa7c366038b3433278c03b1456b346074f2" }
|
||||
rpassword = "4.0"
|
||||
runtime-fmt = "0.4.0"
|
||||
scheduled-thread-pool = "0.2.2"
|
||||
serde = "1.0"
|
||||
serde_json = "1.0"
|
||||
serde_qs = "0.5"
|
||||
shrinkwraprs = "0.2.1"
|
||||
syntect = "3.3"
|
||||
validator = "0.8"
|
||||
validator_derive = "0.8"
|
||||
num_cpus = "1.16.0"
|
||||
rocket = "0.4.11"
|
||||
rocket_contrib = { version = "0.4.11", features = ["json"] }
|
||||
rocket_i18n = "0.4.1"
|
||||
scheduled-thread-pool = "0.2.7"
|
||||
serde = "1.0.137"
|
||||
serde_json = "1.0.81"
|
||||
shrinkwraprs = "0.3.0"
|
||||
validator = { version = "0.15", features = ["derive"] }
|
||||
webfinger = "0.4.1"
|
||||
tracing = "0.1.35"
|
||||
tracing-subscriber = "0.3.10"
|
||||
riker = "0.4.2"
|
||||
activitystreams = "=0.7.0-alpha.20"
|
||||
|
||||
[[bin]]
|
||||
name = "plume"
|
||||
@ -41,20 +35,20 @@ path = "src/main.rs"
|
||||
|
||||
[dependencies.chrono]
|
||||
features = ["serde"]
|
||||
version = "0.4"
|
||||
version = "0.4.31"
|
||||
|
||||
[dependencies.ctrlc]
|
||||
features = ["termination"]
|
||||
version = "3.1.2"
|
||||
version = "3.2.2"
|
||||
|
||||
[dependencies.diesel]
|
||||
features = ["r2d2", "chrono"]
|
||||
version = "*"
|
||||
version = "1.4.5"
|
||||
|
||||
[dependencies.multipart]
|
||||
default-features = false
|
||||
features = ["server"]
|
||||
version = "0.16"
|
||||
version = "0.18"
|
||||
|
||||
[dependencies.plume-api]
|
||||
path = "plume-api"
|
||||
@ -66,19 +60,21 @@ path = "plume-common"
|
||||
path = "plume-models"
|
||||
|
||||
[dependencies.rocket_csrf]
|
||||
git = "https://github.com/fdb-hiroshima/rocket_csrf"
|
||||
rev = "29910f2829e7e590a540da3804336577b48c7b31"
|
||||
git = "https://git.joinplu.me/plume/rocket_csrf"
|
||||
rev = "0.1.2"
|
||||
|
||||
[build-dependencies]
|
||||
ructe = "0.9.0"
|
||||
rsass = "0.9"
|
||||
ructe = "0.15.0"
|
||||
rsass = "0.26"
|
||||
|
||||
[features]
|
||||
default = ["postgres"]
|
||||
default = ["postgres", "s3"]
|
||||
postgres = ["plume-models/postgres", "diesel/postgres"]
|
||||
sqlite = ["plume-models/sqlite", "diesel/sqlite"]
|
||||
debug-mailer = []
|
||||
test = []
|
||||
search-lindera = ["plume-models/search-lindera"]
|
||||
s3 = ["plume-models/s3"]
|
||||
|
||||
[workspace]
|
||||
members = ["plume-api", "plume-cli", "plume-models", "plume-common", "plume-front", "plume-macro"]
|
||||
|
11
Dockerfile
11
Dockerfile
@ -1,4 +1,4 @@
|
||||
FROM rust:1-stretch as builder
|
||||
FROM rust:1 as builder
|
||||
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
ca-certificates \
|
||||
@ -18,22 +18,19 @@ COPY script/wasm-deps.sh .
|
||||
RUN chmod a+x ./wasm-deps.sh && sleep 1 && ./wasm-deps.sh
|
||||
|
||||
WORKDIR /app
|
||||
COPY Cargo.toml Cargo.lock rust-toolchain ./
|
||||
RUN cargo install cargo-web
|
||||
|
||||
COPY . .
|
||||
|
||||
RUN cargo install wasm-pack
|
||||
RUN chmod a+x ./script/plume-front.sh && sleep 1 && ./script/plume-front.sh
|
||||
RUN cargo install --path ./ --force --no-default-features --features postgres
|
||||
RUN cargo install --path plume-cli --force --no-default-features --features postgres
|
||||
RUN cargo clean
|
||||
|
||||
FROM debian:stretch-slim
|
||||
FROM debian:stable-slim
|
||||
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
ca-certificates \
|
||||
libpq5 \
|
||||
libssl1.1
|
||||
libpq5
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
FROM rust:1-stretch
|
||||
FROM rust:1-buster
|
||||
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
ca-certificates \
|
||||
@ -10,7 +10,8 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
gcc \
|
||||
make \
|
||||
openssl \
|
||||
libssl-dev
|
||||
libssl-dev\
|
||||
clang
|
||||
|
||||
WORKDIR /scratch
|
||||
COPY script/wasm-deps.sh .
|
||||
@ -19,7 +20,7 @@ RUN chmod a+x ./wasm-deps.sh && sleep 1 && ./wasm-deps.sh
|
||||
WORKDIR /app
|
||||
COPY Cargo.toml Cargo.lock rust-toolchain ./
|
||||
RUN cargo install diesel_cli --no-default-features --features postgres --version '=1.3.0'
|
||||
RUN cargo install cargo-web
|
||||
RUN cargo install wasm-pack
|
||||
|
||||
COPY . .
|
||||
|
||||
|
@ -1,10 +1,10 @@
|
||||
<h1 align="center">
|
||||
<img src="https://raw.githubusercontent.com/Plume-org/Plume/master/assets/icons/trwnh/feather/plumeFeather64.png" alt="Plume's logo">
|
||||
<img src="https://raw.githubusercontent.com/Plume-org/Plume/main/assets/icons/trwnh/feather/plumeFeather64.png" alt="Plume's logo">
|
||||
Plume
|
||||
</h1>
|
||||
<p align="center">
|
||||
<a href="https://github.com/Plume-org/Plume/"><img alt="CircleCI" src="https://img.shields.io/circleci/build/gh/Plume-org/Plume.svg"></a>
|
||||
<a href="https://codecov.io/gh/Plume-org/Plume"><img src="https://codecov.io/gh/Plume-org/Plume/branch/master/graph/badge.svg" alt="Code coverage"></a>
|
||||
<a href="https://codecov.io/gh/Plume-org/Plume"><img src="https://codecov.io/gh/Plume-org/Plume/branch/main/graph/badge.svg" alt="Code coverage"></a>
|
||||
<a title="Crowdin" target="_blank" href="https://crowdin.com/project/plume"><img src="https://d322cqt584bo4o.cloudfront.net/plume/localized.svg"></a>
|
||||
<a href="https://hub.docker.com/r/plumeorg/plume"><img alt="Docker Pulls" src="https://img.shields.io/docker/pulls/plumeorg/plume.svg"></a>
|
||||
<a href="https://liberapay.com/Plume"><img alt="Liberapay patrons" src="https://img.shields.io/liberapay/patrons/Plume.svg"></a>
|
||||
@ -30,11 +30,11 @@ A lot of features are still missing, but what is already here should be quite st
|
||||
- **Media management**: you can upload pictures to illustrate your articles, but also audio files if you host a podcast, and manage them all from Plume.
|
||||
- **Federation**: Plume is part of a network of interconnected websites called the Fediverse. Each of these websites (often called *instances*) have their own
|
||||
rules and thematics, but they can all communicate with each other.
|
||||
- **Collaborative writing**: invite other people to your blogs, and write articles together.
|
||||
- **Collaborative writing**: invite other people to your blogs, and write articles together. (Not implemented yet, but will be in 1.0)
|
||||
|
||||
## Get involved
|
||||
|
||||
If you want to have regular news about the project, the best place is probably [our blog](https://fediverse.blog/~/PlumeDev), or our Matrix room: [`#plume:disroot.org`](https://riot.im/app/#/room/#plume:disroot.org).
|
||||
If you want to have regular news about the project, the best place is probably [our blog](https://fediverse.blog/~/PlumeDev), or our Matrix room: [`#plume-blog:matrix.org`](https://matrix.to/#/#plume-blog:matrix.org).
|
||||
|
||||
If you want to contribute more, a good first step is to read [our contribution guides](https://docs.joinplu.me/contribute). We accept all kind of contribution:
|
||||
|
||||
@ -53,3 +53,4 @@ As we want the various spaces related to the project (GitHub, Matrix, Loomio, et
|
||||
|
||||
We provide various way to install Plume: from source, with pre-built binaries, with Docker or with YunoHost.
|
||||
For detailed explanations, please refer to [the documentation](https://docs.joinplu.me/installation/).
|
||||
|
||||
|
@ -1,3 +1,3 @@
|
||||
* {
|
||||
font-family: monospace;
|
||||
font-family: monospace;
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ main header.article {
|
||||
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: end;
|
||||
justify-content: flex-end;
|
||||
|
||||
h1, .article-info {
|
||||
text-align: center;
|
||||
@ -64,41 +64,41 @@ main header.article {
|
||||
}
|
||||
|
||||
main .article-info {
|
||||
margin: 0 auto 3em;
|
||||
font-size: 0.95em;
|
||||
font-weight: 400;
|
||||
margin: 0 auto 3em;
|
||||
font-size: 0.95em;
|
||||
font-weight: 400;
|
||||
|
||||
.author, .author a {
|
||||
font-weight: 600;
|
||||
}
|
||||
.author, .author a {
|
||||
font-weight: 600;
|
||||
}
|
||||
}
|
||||
|
||||
/* The article itself */
|
||||
main article {
|
||||
max-width: $article-width;
|
||||
margin: 2.5em auto;
|
||||
font-family: $lora;
|
||||
font-size: 1.2em;
|
||||
line-height: 1.7;
|
||||
margin: 2.5em auto;
|
||||
font-family: $lora;
|
||||
font-size: 1.2em;
|
||||
line-height: 1.7;
|
||||
|
||||
a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
img {
|
||||
display: block;
|
||||
margin: 3em auto;
|
||||
max-width: 100%;
|
||||
img {
|
||||
display: block;
|
||||
margin: 3em auto;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
pre {
|
||||
padding: 1em;
|
||||
background: $gray;
|
||||
overflow: auto;
|
||||
padding: 1em;
|
||||
background: $gray;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
border-left: 5px solid $gray;
|
||||
border-inline-start: 5px solid $gray;
|
||||
margin: 1em auto;
|
||||
padding: 0em 2em;
|
||||
}
|
||||
@ -126,7 +126,7 @@ main .article-meta {
|
||||
|
||||
> p {
|
||||
margin: 2em $horizontal-margin;
|
||||
font-size: 0.9em;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
|
||||
/* Article Tags */
|
||||
@ -157,15 +157,15 @@ main .article-meta {
|
||||
/* Likes & Boosts */
|
||||
.actions {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-around;
|
||||
flex-direction: row;
|
||||
justify-content: space-around;
|
||||
}
|
||||
|
||||
.likes, .reshares {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
padding: 0.5em 0;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
padding: 0.5em 0;
|
||||
|
||||
p {
|
||||
font-size: 1.5em;
|
||||
@ -175,34 +175,34 @@ main .article-meta {
|
||||
|
||||
.action {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background: none;
|
||||
color: $text-color;
|
||||
border: none;
|
||||
font-size: 1.1em;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background: none;
|
||||
color: $text-color;
|
||||
border: none;
|
||||
font-size: 1.1em;
|
||||
cursor: pointer;
|
||||
|
||||
svg.feather {
|
||||
transition: background 0.1s ease-in;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
svg.feather {
|
||||
transition: background 0.1s ease-in;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
||||
margin: 0.5em 0;
|
||||
width: 2.5em;
|
||||
height: 2.5em;
|
||||
margin: 0.5em 0;
|
||||
width: 2.5em;
|
||||
height: 2.5em;
|
||||
|
||||
border-radius: 50%;
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
&.reshared, &.liked {
|
||||
svg.feather {
|
||||
color: $background;
|
||||
font-weight: 900;
|
||||
color: $background;
|
||||
font-weight: 900;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -213,14 +213,14 @@ main .article-meta {
|
||||
|
||||
.action svg.feather {
|
||||
padding: 0.7em;
|
||||
box-sizing: border-box;
|
||||
color: $red;
|
||||
fill: none;
|
||||
border: solid $red thin;
|
||||
box-sizing: border-box;
|
||||
color: $red;
|
||||
fill: none;
|
||||
border: solid $red thin;
|
||||
}
|
||||
|
||||
.action:hover svg.feather {
|
||||
background: transparentize($red, 0.85);
|
||||
background: transparentize($red, 0.85);
|
||||
}
|
||||
|
||||
.action.liked svg.feather {
|
||||
@ -228,7 +228,7 @@ main .article-meta {
|
||||
fill: currentColor;
|
||||
}
|
||||
.action.liked:hover svg.feather {
|
||||
background: transparentize($red, 0.75)
|
||||
background: transparentize($red, 0.75);
|
||||
color: $red;
|
||||
}
|
||||
}
|
||||
@ -238,22 +238,22 @@ main .article-meta {
|
||||
|
||||
.action svg.feather {
|
||||
padding: 0.7em;
|
||||
box-sizing: border-box;
|
||||
color: $primary;
|
||||
border: solid $primary thin;
|
||||
font-weight: 600;
|
||||
box-sizing: border-box;
|
||||
color: $primary;
|
||||
border: solid $primary thin;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.action:hover svg.feather {
|
||||
background: transparentize($primary, 0.85);
|
||||
background: transparentize($primary, 0.85);
|
||||
}
|
||||
|
||||
.action.reshared svg.feather {
|
||||
background: $primary;
|
||||
}
|
||||
.action.reshared:hover svg.feather {
|
||||
background: transparentize($primary, 0.75)
|
||||
color: $primary;
|
||||
background: transparentize($primary, 0.75);
|
||||
color: $primary;
|
||||
}
|
||||
}
|
||||
|
||||
@ -262,9 +262,9 @@ main .article-meta {
|
||||
margin: 0 $horizontal-margin;
|
||||
|
||||
h2 {
|
||||
color: $primary;
|
||||
font-size: 1.5em;
|
||||
font-weight: 600;
|
||||
color: $primary;
|
||||
font-size: 1.5em;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
summary {
|
||||
@ -279,16 +279,16 @@ main .article-meta {
|
||||
|
||||
// Respond & delete comment buttons
|
||||
a.button, form.inline, form.inline input {
|
||||
padding: 0;
|
||||
background: none;
|
||||
color: $text-color;
|
||||
margin-right: 2em;
|
||||
font-family: $route159;
|
||||
padding: 0;
|
||||
background: none;
|
||||
color: $text-color;
|
||||
margin-right: 2em;
|
||||
font-family: $route159;
|
||||
font-weight: normal;
|
||||
|
||||
&::before {
|
||||
color: $primary;
|
||||
padding-right: 0.5em;
|
||||
&::before {
|
||||
color: $primary;
|
||||
padding-right: 0.5em;
|
||||
}
|
||||
|
||||
&:hover { color: $primary; }
|
||||
@ -296,8 +296,8 @@ main .article-meta {
|
||||
|
||||
.comment {
|
||||
margin: 1em 0;
|
||||
font-size: 1em;
|
||||
border: none;
|
||||
font-size: 1em;
|
||||
border: none;
|
||||
|
||||
.content {
|
||||
background: $gray;
|
||||
@ -328,36 +328,36 @@ main .article-meta {
|
||||
color: transparentize($text-color, 0.6);
|
||||
}
|
||||
|
||||
.author {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
align-content: center;
|
||||
.author {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
align-content: center;
|
||||
|
||||
* {
|
||||
transition: all 0.1s ease-in;
|
||||
}
|
||||
* {
|
||||
transition: all 0.1s ease-in;
|
||||
}
|
||||
|
||||
.display-name {
|
||||
color: $text-color;
|
||||
.display-name {
|
||||
color: $text-color;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
.display-name { color: $primary; }
|
||||
small { opacity: 1; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
& > .comment {
|
||||
padding-left: 2em;
|
||||
}
|
||||
|
||||
.text {
|
||||
padding: 1.25em 0;
|
||||
font-family: $lora;
|
||||
font-size: 1.1em;
|
||||
line-height: 1.4;
|
||||
text-align: left;
|
||||
.text {
|
||||
padding: 1.25em 0;
|
||||
font-family: $lora;
|
||||
font-size: 1.1em;
|
||||
line-height: 1.4;
|
||||
text-align: left;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -490,3 +490,37 @@ input:checked ~ .cw-container > .cw-text {
|
||||
display: inline;
|
||||
}
|
||||
}
|
||||
|
||||
// Small screens
|
||||
@media screen and (max-width: 600px) {
|
||||
#plume-editor header {
|
||||
flex-direction: column-reverse;
|
||||
|
||||
button {
|
||||
flex: 0 0 0;
|
||||
}
|
||||
}
|
||||
|
||||
.popup {
|
||||
top: 10vh;
|
||||
bottom: 10vh;
|
||||
left: 1vw;
|
||||
right: 1vw;
|
||||
}
|
||||
|
||||
main article {
|
||||
margin: 2.5em .5em;
|
||||
max-width: none;
|
||||
}
|
||||
|
||||
main .article-meta > *, main .article-meta .comments, main .article-meta > .banner > * {
|
||||
margin: 0 5%;
|
||||
}
|
||||
|
||||
.bottom-bar {
|
||||
align-items: center;
|
||||
& > div:nth-child(2) {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,27 +1,27 @@
|
||||
label {
|
||||
display: block;
|
||||
margin: 2em auto .5em;
|
||||
font-size: 1.2em;
|
||||
display: block;
|
||||
margin: 2em auto .5em;
|
||||
font-size: 1.2em;
|
||||
}
|
||||
input, textarea, select {
|
||||
transition: all 0.1s ease-in;
|
||||
display: block;
|
||||
width: 100%;
|
||||
margin: auto;
|
||||
padding: 1em;
|
||||
box-sizing: border-box;
|
||||
transition: all 0.1s ease-in;
|
||||
display: block;
|
||||
width: 100%;
|
||||
margin: auto;
|
||||
padding: 1em;
|
||||
box-sizing: border-box;
|
||||
-webkit-appearance: textarea;
|
||||
|
||||
background: $form-input-background;
|
||||
color: $text-color;
|
||||
border: solid $form-input-border thin;
|
||||
background: $form-input-background;
|
||||
color: $text-color;
|
||||
border: solid $form-input-border thin;
|
||||
|
||||
font-size: 1.2em;
|
||||
font-weight: 400;
|
||||
font-size: 1.2em;
|
||||
font-weight: 400;
|
||||
|
||||
&:focus {
|
||||
border-color: $primary;
|
||||
}
|
||||
&:focus {
|
||||
border-color: $primary;
|
||||
}
|
||||
}
|
||||
form input[type="submit"] {
|
||||
margin: 2em auto;
|
||||
@ -29,18 +29,18 @@ form input[type="submit"] {
|
||||
}
|
||||
|
||||
textarea {
|
||||
resize: vertical;
|
||||
resize: vertical;
|
||||
overflow-y: scroll;
|
||||
font-family: $lora;
|
||||
font-size: 1.1em;
|
||||
line-height: 1.5;
|
||||
font-family: $lora;
|
||||
font-size: 1.1em;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
input[type="checkbox"] {
|
||||
display: inline;
|
||||
margin: initial;
|
||||
min-width: initial;
|
||||
width: initial;
|
||||
display: inline;
|
||||
margin: initial;
|
||||
min-width: initial;
|
||||
width: initial;
|
||||
-webkit-appearance: checkbox;
|
||||
}
|
||||
|
||||
@ -71,31 +71,31 @@ form.inline {
|
||||
}
|
||||
|
||||
.button, .button:visited, input[type="submit"], input[type="submit"].button {
|
||||
transition: all 0.1s ease-in;
|
||||
display: inline-block;
|
||||
transition: all 0.1s ease-in;
|
||||
display: inline-block;
|
||||
-webkit-appearance: none;
|
||||
|
||||
margin: 0.5em auto;
|
||||
padding: 0.75em 1em;
|
||||
margin: 0.5em auto;
|
||||
padding: 0.75em 1em;
|
||||
|
||||
background: $primary;
|
||||
color: $primary-text-color;
|
||||
background: $primary;
|
||||
color: $primary-text-color;
|
||||
font-weight: bold;
|
||||
border: none;
|
||||
|
||||
cursor: pointer;
|
||||
cursor: pointer;
|
||||
|
||||
&:hover {
|
||||
background: transparentize($primary, 0.1);
|
||||
}
|
||||
&:hover {
|
||||
background: transparentize($primary, 0.1);
|
||||
}
|
||||
|
||||
&.destructive {
|
||||
background: $red;
|
||||
&.destructive {
|
||||
background: $red;
|
||||
|
||||
&:hover {
|
||||
background: transparentize($red, 0.1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.secondary {
|
||||
background: $gray;
|
||||
@ -115,26 +115,27 @@ input[type="submit"] {
|
||||
form.new-post {
|
||||
max-width: 60em;
|
||||
.title {
|
||||
margin: 0 auto;
|
||||
padding: 0.75em 0;
|
||||
margin: 0 auto;
|
||||
padding: 0.75em 0;
|
||||
|
||||
background: none;
|
||||
border: none;
|
||||
background: none;
|
||||
border: none;
|
||||
|
||||
font-family: $playfair;
|
||||
font-size: 2em;
|
||||
text-align: left;
|
||||
font-family: $playfair;
|
||||
font-size: 2em;
|
||||
text-align: left;
|
||||
}
|
||||
textarea {
|
||||
min-height: 20em;
|
||||
overflow-y: scroll;
|
||||
resize: none;
|
||||
min-height: 20em;
|
||||
overflow-y: scroll;
|
||||
resize: none;
|
||||
-webkit-appearance: textarea;
|
||||
}
|
||||
}
|
||||
|
||||
.button + .button {
|
||||
margin-left: 1em;
|
||||
margin-inline-start: 1em;
|
||||
}
|
||||
|
||||
.split {
|
||||
|
@ -6,43 +6,43 @@ html {
|
||||
}
|
||||
|
||||
html, body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background: $background;
|
||||
color: $text-color;
|
||||
font-family: $route159;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background: $background;
|
||||
color: $text-color;
|
||||
font-family: $route159;
|
||||
|
||||
::selection {
|
||||
background: transparentize($primary, 0.7);
|
||||
}
|
||||
::-moz-selection {
|
||||
::-moz-selection {
|
||||
background: transparentize($primary, 0.7);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
a, a:visited {
|
||||
color: $primary;
|
||||
text-decoration: none;
|
||||
color: $primary;
|
||||
text-decoration: none;
|
||||
}
|
||||
a::selection {
|
||||
color: $background;
|
||||
color: $background;
|
||||
}
|
||||
a::-moz-selection {
|
||||
color: $background;
|
||||
color: $background;
|
||||
}
|
||||
small {
|
||||
margin-left: 1em;
|
||||
color: transparentize($text-color, 0.6);
|
||||
font-size: 0.75em;
|
||||
word-wrap: break-word;
|
||||
word-break: break-all;
|
||||
margin-left: 1em;
|
||||
color: transparentize($text-color, 0.6);
|
||||
font-size: 0.75em;
|
||||
word-wrap: break-word;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.center {
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
opacity: 0.6;
|
||||
padding: 5em;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
opacity: 0.6;
|
||||
padding: 5em;
|
||||
}
|
||||
|
||||
.right {
|
||||
@ -53,28 +53,28 @@ small {
|
||||
}
|
||||
|
||||
.spaced {
|
||||
margin: 4rem 0;
|
||||
margin: 4rem 0;
|
||||
}
|
||||
|
||||
.banner {
|
||||
background: $gray;
|
||||
padding-top: 2em;
|
||||
padding-bottom: 1em;
|
||||
margin: 3em 0px;
|
||||
background: $gray;
|
||||
padding-top: 2em;
|
||||
padding-bottom: 1em;
|
||||
margin: 3em 0px;
|
||||
}
|
||||
|
||||
.hidden {
|
||||
display: none;
|
||||
appearance: none;
|
||||
display: none;
|
||||
appearance: none;
|
||||
}
|
||||
|
||||
/* Main */
|
||||
body > main > *, .h-feed > * {
|
||||
margin: 1em $horizontal-margin;
|
||||
margin: 1em $horizontal-margin;
|
||||
}
|
||||
|
||||
body > main > .h-entry, .h-feed {
|
||||
margin: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
body > main {
|
||||
@ -98,18 +98,18 @@ main {
|
||||
margin-top: 1em;
|
||||
|
||||
&.article {
|
||||
margin: 1em auto 0.5em;
|
||||
font-family: $playfair;
|
||||
font-size: 2.5em;
|
||||
font-weight: normal;
|
||||
margin: 1em auto 0.5em;
|
||||
font-family: $playfair;
|
||||
font-size: 2.5em;
|
||||
font-weight: normal;
|
||||
}
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1.75em;
|
||||
font-weight: 300;
|
||||
font-size: 1.75em;
|
||||
font-weight: 300;
|
||||
|
||||
&.article {
|
||||
&.article {
|
||||
font-size: 1.25em;
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
@ -139,15 +139,15 @@ main {
|
||||
|
||||
/* Errors */
|
||||
p.error {
|
||||
color: $red;
|
||||
font-weight: bold;
|
||||
color: $red;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* User page */
|
||||
.user h1 {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
@ -156,14 +156,14 @@ p.error {
|
||||
}
|
||||
|
||||
.badge {
|
||||
margin-right: 1em;
|
||||
padding: 0.35em 1em;
|
||||
margin-right: 1em;
|
||||
padding: 0.35em 1em;
|
||||
|
||||
background: $background;
|
||||
color: $primary;
|
||||
border: 1px solid $primary;
|
||||
background: $background;
|
||||
color: $primary;
|
||||
border: 1px solid $primary;
|
||||
|
||||
font-size: 1rem;
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
.user-summary {
|
||||
@ -172,58 +172,111 @@ p.error {
|
||||
|
||||
/* Cards */
|
||||
.cards {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
padding: 0 5%;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
padding: 0 5%;
|
||||
margin: 1rem 0 5rem;
|
||||
}
|
||||
.card {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
min-width: 20em;
|
||||
min-height: 20em;
|
||||
margin: 1em;
|
||||
box-sizing: border-box;
|
||||
position: relative;
|
||||
|
||||
background: $gray;
|
||||
min-width: 20em;
|
||||
min-height: 20em;
|
||||
margin: 1em;
|
||||
box-sizing: border-box;
|
||||
|
||||
text-overflow: ellipsis;
|
||||
background: $gray;
|
||||
|
||||
> * {
|
||||
margin: 20px;
|
||||
}
|
||||
text-overflow: ellipsis;
|
||||
|
||||
.cover {
|
||||
footer.authors {
|
||||
div {
|
||||
float: left;
|
||||
margin-right: 0.25em;
|
||||
}
|
||||
|
||||
.likes { color: $red; }
|
||||
.reshares { color: $primary; }
|
||||
|
||||
span.likes, span.resahres {
|
||||
font-family: "Route159",serif;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
svg.feather {
|
||||
width: 0.85em;
|
||||
height: 0.85em;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
> * {
|
||||
margin: 20px;
|
||||
}
|
||||
|
||||
.cover-link {
|
||||
margin: 0;
|
||||
|
||||
&:hover {
|
||||
opacity: 0.9;
|
||||
}
|
||||
}
|
||||
|
||||
.cover {
|
||||
min-height: 10em;
|
||||
background-position: center;
|
||||
background-size: cover;
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
h3 {
|
||||
margin: 0.75em 20px;
|
||||
font-family: $playfair;
|
||||
font-size: 1.75em;
|
||||
font-weight: normal;
|
||||
a {
|
||||
transition: color 0.1s ease-in;
|
||||
color: $text-color;
|
||||
header {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
&:hover { color: $primary; }
|
||||
}
|
||||
h3 {
|
||||
flex-grow: 1;
|
||||
margin: 0;
|
||||
font-family: $playfair;
|
||||
font-size: 1.75em;
|
||||
font-weight: normal;
|
||||
line-height: 1.10;
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
a {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
padding-block-start: 0.5em;
|
||||
transition: color 0.1s ease-in;
|
||||
color: $text-color;
|
||||
|
||||
&:hover { color: $primary; }
|
||||
}
|
||||
}
|
||||
|
||||
.controls {
|
||||
flex-shrink: 0;
|
||||
text-align: end;
|
||||
|
||||
.button {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
main {
|
||||
flex: 1;
|
||||
flex: 1;
|
||||
|
||||
font-family: $lora;
|
||||
font-size: 1em;
|
||||
line-height: 1.25;
|
||||
text-align: left;
|
||||
overflow: hidden;
|
||||
font-family: $lora;
|
||||
font-size: 1em;
|
||||
line-height: 1.25;
|
||||
text-align: initial;
|
||||
overflow: hidden;
|
||||
}
|
||||
}
|
||||
|
||||
@ -265,15 +318,15 @@ p.error {
|
||||
|
||||
/* Stats */
|
||||
.stats {
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
margin: 2em;
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
margin: 2em;
|
||||
|
||||
> div {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
> div {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
p {
|
||||
@ -426,9 +479,10 @@ figure {
|
||||
|
||||
/// Avatars
|
||||
.avatar {
|
||||
background-position: center;
|
||||
background-position: center !important;
|
||||
background-size: cover;
|
||||
border-radius: 100%;
|
||||
flex-shrink: 0;
|
||||
|
||||
&.small {
|
||||
width: 50px;
|
||||
@ -453,6 +507,7 @@ figure {
|
||||
margin: auto $horizontal-margin 2em;
|
||||
overflow: auto;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
|
||||
a {
|
||||
display: inline-block;
|
||||
@ -469,91 +524,8 @@ figure {
|
||||
|
||||
/// Small screens
|
||||
@media screen and (max-width: 600px) {
|
||||
@keyframes menuOpening {
|
||||
from {
|
||||
transform: scaleX(0);
|
||||
transform-origin: left;
|
||||
opacity: 0;
|
||||
}
|
||||
to {
|
||||
transform: scaleX(1);
|
||||
transform-origin: left;
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
body > header {
|
||||
flex-direction: column;
|
||||
|
||||
nav#menu {
|
||||
display: inline-flex;
|
||||
z-index: 21;
|
||||
}
|
||||
|
||||
#content {
|
||||
display: none;
|
||||
appearance: none;
|
||||
text-align: center;
|
||||
z-index: 20;
|
||||
}
|
||||
}
|
||||
|
||||
body > header:focus-within #content, #content.show {
|
||||
position: fixed;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: flex-start;
|
||||
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
box-sizing: border-box;
|
||||
|
||||
animation: 0.2s menuOpening;
|
||||
|
||||
&::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
transform: skewX(-10deg);
|
||||
top: 0;
|
||||
left: -20%;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
z-index: -10;
|
||||
|
||||
background: $primary;
|
||||
}
|
||||
|
||||
> nav {
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
|
||||
a {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
margin: 0;
|
||||
padding: 1rem 1.5rem;
|
||||
color: $background;
|
||||
font-size: 1.4em;
|
||||
font-weight: 300;
|
||||
|
||||
&.title { font-size: 1.8em; }
|
||||
|
||||
> *:first-child { width: 3rem; }
|
||||
> img:first-child { height: 3rem; }
|
||||
> *:last-child { margin-left: 1rem; }
|
||||
> nav hr {
|
||||
display: block;
|
||||
margin: 0;
|
||||
width: 100%;
|
||||
border: solid $background 0.1rem;
|
||||
}
|
||||
.mobile-label { display: initial; }
|
||||
}
|
||||
}
|
||||
body > main > *, .h-feed > * {
|
||||
margin: 1em;
|
||||
}
|
||||
|
||||
main .article-meta {
|
||||
@ -601,15 +573,7 @@ figure {
|
||||
margin: 0;
|
||||
|
||||
& > * {
|
||||
max-width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.bottom-bar {
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
& > div {
|
||||
margin: 0;
|
||||
max-width: 100% !important;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3,8 +3,8 @@ body > header {
|
||||
|
||||
#content {
|
||||
display: flex;
|
||||
align-content: center;
|
||||
justify-content: space-between;
|
||||
align-content: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
nav#menu {
|
||||
@ -19,44 +19,44 @@ body > header {
|
||||
|
||||
a {
|
||||
transform: skewX(15deg);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 1.4em;
|
||||
height: 1.4em;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
color: $gray;
|
||||
font-size: 1.33em;
|
||||
}
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 1.4em;
|
||||
height: 1.4em;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
color: $gray;
|
||||
font-size: 1.33em;
|
||||
}
|
||||
}
|
||||
|
||||
nav {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
|
||||
hr {
|
||||
height: 100%;
|
||||
width: 0.2em;
|
||||
background: $primary;
|
||||
border: none;
|
||||
transform: skewX(-15deg);
|
||||
hr {
|
||||
height: 100%;
|
||||
width: 0.2em;
|
||||
background: $primary;
|
||||
border: none;
|
||||
transform: skewX(-15deg);
|
||||
}
|
||||
a {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
align-self: stretch;
|
||||
margin: 0;
|
||||
padding: 0 2em;
|
||||
font-size: 1em;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
align-self: stretch;
|
||||
margin: 0;
|
||||
padding: 0 2em;
|
||||
font-size: 1em;
|
||||
|
||||
i { font-size: 1.2em; }
|
||||
i { font-size: 1.2em; }
|
||||
|
||||
&.title {
|
||||
margin: 0;
|
||||
&.title {
|
||||
margin: 0;
|
||||
text-align: center;
|
||||
padding: 0.5em 1em;
|
||||
font-size: 1.75em;
|
||||
@ -70,7 +70,7 @@ body > header {
|
||||
margin: 0;
|
||||
padding-left: 0.5em;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -101,33 +101,237 @@ body > header {
|
||||
}
|
||||
}
|
||||
|
||||
/// Small screens
|
||||
@media screen and (max-width: 600px) {
|
||||
@keyframes menuOpening {
|
||||
from {
|
||||
transform: scaleX(0);
|
||||
transform-origin: left;
|
||||
opacity: 0;
|
||||
}
|
||||
to {
|
||||
transform: scaleX(1);
|
||||
transform-origin: left;
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
@-webkit-keyframes menuOpening {
|
||||
from {
|
||||
-webkit-transform: scaleX(0);
|
||||
transform-origin: left;
|
||||
opacity: 0;
|
||||
}
|
||||
to {
|
||||
-webkit-transform: scaleX(1);
|
||||
transform-origin: left;
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
body > header {
|
||||
flex-direction: column;
|
||||
|
||||
nav#menu {
|
||||
display: inline-flex;
|
||||
z-index: 21;
|
||||
}
|
||||
|
||||
#content {
|
||||
display: none;
|
||||
appearance: none;
|
||||
text-align: center;
|
||||
z-index: 20;
|
||||
}
|
||||
}
|
||||
|
||||
body > header:focus-within #content, .show + #content {
|
||||
position: fixed;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: flex-start;
|
||||
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
box-sizing: border-box;
|
||||
|
||||
animation: 0.2s menuOpening;
|
||||
|
||||
&::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
transform: skewX(-10deg);
|
||||
top: 0;
|
||||
left: -20%;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
z-index: -10;
|
||||
|
||||
background: $primary;
|
||||
}
|
||||
|
||||
> nav {
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
|
||||
a {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
margin: 0;
|
||||
padding: 1rem 1.5rem;
|
||||
color: $background;
|
||||
font-size: 1.4em;
|
||||
font-weight: 300;
|
||||
|
||||
&.title { font-size: 1.8em; }
|
||||
|
||||
> *:first-child { width: 3rem; }
|
||||
> img:first-child { height: 3rem; }
|
||||
> *:last-child { margin-left: 1rem; }
|
||||
> nav hr {
|
||||
display: block;
|
||||
margin: 0;
|
||||
width: 100%;
|
||||
border: solid $background 0.1rem;
|
||||
}
|
||||
.mobile-label { display: initial; }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Only enable label animations on large screens */
|
||||
@media screen and (min-width: 600px) {
|
||||
header nav a {
|
||||
i {
|
||||
transition: all 0.2s ease;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.mobile-label {
|
||||
transition: all 0.2s ease;
|
||||
display: block;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
transform: translate(-50%, 0);
|
||||
opacity: 0;
|
||||
font-size: 0.9em;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
img + .mobile-label { display: none; }
|
||||
|
||||
&:hover {
|
||||
i { margin-bottom: 0.75em; }
|
||||
.mobile-label {
|
||||
opacity: 1;
|
||||
transform: translate(-50%, 80%);
|
||||
}
|
||||
header nav a {
|
||||
i {
|
||||
transition: all 0.2s ease;
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.mobile-label {
|
||||
transition: all 0.2s ease;
|
||||
display: block;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
transform: translateZ(0);
|
||||
opacity: 0;
|
||||
font-size: 0.9em;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
img + .mobile-label { display: none; }
|
||||
|
||||
&:hover {
|
||||
i { margin-bottom: 0.75em; }
|
||||
.mobile-label {
|
||||
opacity: 1;
|
||||
transform: translate(-50%, 80%);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Small screens
|
||||
@media screen and (max-width: 600px) {
|
||||
@keyframes menuOpening {
|
||||
from {
|
||||
transform: scaleX(0);
|
||||
transform-origin: left;
|
||||
opacity: 0;
|
||||
}
|
||||
to {
|
||||
transform: scaleX(1);
|
||||
transform-origin: left;
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
@-webkit-keyframes menuOpening {
|
||||
from {
|
||||
-webkit-transform: scaleX(0);
|
||||
transform-origin: left;
|
||||
opacity: 0;
|
||||
}
|
||||
to {
|
||||
-webkit-transform: scaleX(1);
|
||||
transform-origin: left;
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
body > header {
|
||||
flex-direction: column;
|
||||
|
||||
nav#menu {
|
||||
display: inline-flex;
|
||||
z-index: 21;
|
||||
}
|
||||
|
||||
#content {
|
||||
display: none;
|
||||
appearance: none;
|
||||
text-align: center;
|
||||
z-index: 20;
|
||||
}
|
||||
}
|
||||
|
||||
body > header:focus-within #content, .show + #content {
|
||||
position: fixed;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: flex-start;
|
||||
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
box-sizing: border-box;
|
||||
|
||||
animation: 0.2s menuOpening;
|
||||
|
||||
&::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
transform: skewX(-10deg);
|
||||
top: 0;
|
||||
left: -20%;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
z-index: -10;
|
||||
|
||||
background: $primary;
|
||||
}
|
||||
|
||||
> nav {
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
|
||||
a {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
margin: 0;
|
||||
padding: 1rem 1.5rem;
|
||||
color: $background;
|
||||
font-size: 1.4em;
|
||||
font-weight: 300;
|
||||
|
||||
&.title { font-size: 1.8em; }
|
||||
|
||||
> *:first-child { width: 3rem; }
|
||||
> img:first-child { height: 3rem; }
|
||||
> *:last-child { margin-left: 1rem; }
|
||||
> nav hr {
|
||||
display: block;
|
||||
margin: 0;
|
||||
width: 100%;
|
||||
border: solid $background 0.1rem;
|
||||
}
|
||||
.mobile-label { display: initial; }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,10 +1,10 @@
|
||||
/* Color Scheme */
|
||||
$gray: #F3F3F3;
|
||||
$gray: #f3f3f3;
|
||||
$black: #242424;
|
||||
$white: #F8F8F8;
|
||||
$purple: #7765E3;
|
||||
$white: #f8f8f8;
|
||||
$purple: #7765e3;
|
||||
$lightpurple: #c2bbee;
|
||||
$red: #E92F2F;
|
||||
$red: #e92f2f;
|
||||
$yellow: #ffe347;
|
||||
$green: #23f0c7;
|
||||
|
||||
@ -24,14 +24,14 @@ $margin: 0 $horizontal-margin;
|
||||
|
||||
/* Fonts */
|
||||
|
||||
$route159: "Route159", serif;
|
||||
$playfair: "Playfair Display", serif;
|
||||
$lora: "Lora", serif;
|
||||
$route159: "Shabnam", "Route159", serif;
|
||||
$playfair: "Vazir", "Playfair Display", serif;
|
||||
$lora: "Vazir", "Lora", serif;
|
||||
|
||||
//Code Highlighting
|
||||
$code-keyword-color: #45244a;
|
||||
$code-source-color: #4c588c;
|
||||
$code-constant-color: scale-color(magenta,$lightness:-5%);
|
||||
$code-operator-color: scale-color($code-source-color,$lightness:-5%);
|
||||
$code-constant-color: scale-color(magenta, $lightness: -5%);
|
||||
$code-operator-color: scale-color($code-source-color, $lightness: -5%);
|
||||
$code-string-color: #8a571c;
|
||||
$code-comment-color: #1c4c8a;
|
||||
|
@ -1,12 +1,14 @@
|
||||
/* color palette: https://coolors.co/23f0c7-ef767a-7765e3-6457a6-ffe347 */
|
||||
|
||||
@import url('./feather.css');
|
||||
@import url('./fonts/Route159/Route159.css');
|
||||
@import url('./fonts/Lora/Lora.css');
|
||||
@import url('./fonts/Playfair_Display/PlayfairDisplay.css');
|
||||
@import url("./feather.css");
|
||||
@import url("./fonts/Route159/Route159.css");
|
||||
@import url("./fonts/Lora/Lora.css");
|
||||
@import url("./fonts/Playfair_Display/PlayfairDisplay.css");
|
||||
@import url("./fonts/Vazir_WOL/Vazir_WOL.css");
|
||||
@import url("./fonts/Shabnam_WOL/Shabnam_WOL.css");
|
||||
|
||||
@import 'dark_variables';
|
||||
@import 'global';
|
||||
@import 'header';
|
||||
@import 'article';
|
||||
@import 'forms';
|
||||
@import "dark_variables";
|
||||
@import "global";
|
||||
@import "header";
|
||||
@import "article";
|
||||
@import "forms";
|
||||
|
94
assets/themes/default/fonts/Shabnam_WOL/LICENSE
Normal file
94
assets/themes/default/fonts/Shabnam_WOL/LICENSE
Normal file
@ -0,0 +1,94 @@
|
||||
Copyright (c) 2015, Saber Rastikerdar (saber.rastikerdar@gmail.com),
|
||||
Glyphs and data from Roboto font are licensed under the Apache License, Version 2.0.
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
http://scripts.sil.org/OFL
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-Bold-WOL.eot
Normal file
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-Bold-WOL.eot
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-Bold-WOL.ttf
Normal file
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-Bold-WOL.ttf
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-Bold-WOL.woff
Normal file
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-Bold-WOL.woff
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-Bold-WOL.woff2
Normal file
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-Bold-WOL.woff2
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-Light-WOL.eot
Normal file
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-Light-WOL.eot
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-Light-WOL.ttf
Normal file
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-Light-WOL.ttf
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-Light-WOL.woff
Normal file
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-Light-WOL.woff
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-Light-WOL.woff2
Normal file
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-Light-WOL.woff2
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-Medium-WOL.eot
Normal file
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-Medium-WOL.eot
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-Medium-WOL.ttf
Normal file
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-Medium-WOL.ttf
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-Medium-WOL.woff
Normal file
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-Medium-WOL.woff
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-Medium-WOL.woff2
Normal file
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-Medium-WOL.woff2
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-Thin-WOL.eot
Normal file
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-Thin-WOL.eot
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-Thin-WOL.ttf
Normal file
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-Thin-WOL.ttf
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-Thin-WOL.woff
Normal file
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-Thin-WOL.woff
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-Thin-WOL.woff2
Normal file
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-Thin-WOL.woff2
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-WOL.eot
Normal file
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-WOL.eot
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-WOL.ttf
Normal file
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-WOL.ttf
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-WOL.woff
Normal file
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-WOL.woff
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-WOL.woff2
Normal file
BIN
assets/themes/default/fonts/Shabnam_WOL/Shabnam-WOL.woff2
Normal file
Binary file not shown.
49
assets/themes/default/fonts/Shabnam_WOL/Shabnam_WOL.css
Normal file
49
assets/themes/default/fonts/Shabnam_WOL/Shabnam_WOL.css
Normal file
@ -0,0 +1,49 @@
|
||||
@font-face {
|
||||
font-family: Shabnam;
|
||||
src: url("Shabnam-WOL.eot");
|
||||
src: url("Shabnam-WOL.eot?#iefix") format("embedded-opentype"),
|
||||
url("Shabnam-WOL.woff2") format("woff2"),
|
||||
url("Shabnam-WOL.woff") format("woff"),
|
||||
url("Shabnam-WOL.ttf") format("truetype");
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: Shabnam;
|
||||
src: url("Shabnam-Bold-WOL.eot");
|
||||
src: url("Shabnam-Bold-WOL.eot?#iefix") format("embedded-opentype"),
|
||||
url("Shabnam-Bold-WOL.woff2") format("woff2"),
|
||||
url("Shabnam-Bold-WOL.woff") format("woff"),
|
||||
url("Shabnam-Bold-WOL.ttf") format("truetype");
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: Shabnam;
|
||||
src: url("Shabnam-Thin-WOL.eot");
|
||||
src: url("Shabnam-Thin-WOL.eot?#iefix") format("embedded-opentype"),
|
||||
url("Shabnam-Thin-WOL.woff2") format("woff2"),
|
||||
url("Shabnam-Thin-WOL.woff") format("woff"),
|
||||
url("Shabnam-Thin-WOL.ttf") format("truetype");
|
||||
font-weight: 100;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: Shabnam;
|
||||
src: url("Shabnam-Light-WOL.eot");
|
||||
src: url("Shabnam-Light-WOL.eot?#iefix") format("embedded-opentype"),
|
||||
url("Shabnam-Light-WOL.woff2") format("woff2"),
|
||||
url("Shabnam-Light-WOL.woff") format("woff"),
|
||||
url("Shabnam-Light-WOL.ttf") format("truetype");
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: Shabnam;
|
||||
src: url("Shabnam-Medium-WOL.eot");
|
||||
src: url("Shabnam-Medium-WOL.eot?#iefix") format("embedded-opentype"),
|
||||
url("Shabnam-Medium-WOL.woff2") format("woff2"),
|
||||
url("Shabnam-Medium-WOL.woff") format("woff"),
|
||||
url("Shabnam-Medium-WOL.ttf") format("truetype");
|
||||
font-weight: 500;
|
||||
}
|
51
assets/themes/default/fonts/Vazir_WOL/LICENSE
Normal file
51
assets/themes/default/fonts/Vazir_WOL/LICENSE
Normal file
@ -0,0 +1,51 @@
|
||||
Changes by Saber Rastikerdar (saber.rastikerdar@gmail.com) are in public domain.
|
||||
Glyphs and data from Roboto font are licensed under the Apache License, Version 2.0.
|
||||
|
||||
Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.
|
||||
|
||||
Bitstream Vera Fonts Copyright
|
||||
------------------------------
|
||||
|
||||
Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is
|
||||
a trademark of Bitstream, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of the fonts accompanying this license ("Fonts") and associated
|
||||
documentation files (the "Font Software"), to reproduce and distribute the
|
||||
Font Software, including without limitation the rights to use, copy, merge,
|
||||
publish, distribute, and/or sell copies of the Font Software, and to permit
|
||||
persons to whom the Font Software is furnished to do so, subject to the
|
||||
following conditions:
|
||||
|
||||
The above copyright and trademark notices and this permission notice shall
|
||||
be included in all copies of one or more of the Font Software typefaces.
|
||||
|
||||
The Font Software may be modified, altered, or added to, and in particular
|
||||
the designs of glyphs or characters in the Fonts may be modified and
|
||||
additional glyphs or characters may be added to the Fonts, only if the fonts
|
||||
are renamed to names not containing either the words "Bitstream" or the word
|
||||
"Vera".
|
||||
|
||||
This License becomes null and void to the extent applicable to Fonts or Font
|
||||
Software that has been modified and is distributed under the "Bitstream
|
||||
Vera" names.
|
||||
|
||||
The Font Software may be sold as part of a larger software package but no
|
||||
copy of one or more of the Font Software typefaces may be sold by itself.
|
||||
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT,
|
||||
TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME
|
||||
FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING
|
||||
ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
|
||||
THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE
|
||||
FONT SOFTWARE.
|
||||
|
||||
Except as contained in this notice, the names of Gnome, the Gnome
|
||||
Foundation, and Bitstream Inc., shall not be used in advertising or
|
||||
otherwise to promote the sale, use or other dealings in this Font Software
|
||||
without prior written authorization from the Gnome Foundation or Bitstream
|
||||
Inc., respectively. For further information, contact: fonts at gnome dot
|
||||
org.
|
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Black-WOL.eot
Normal file
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Black-WOL.eot
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Black-WOL.ttf
Normal file
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Black-WOL.ttf
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Black-WOL.woff
Normal file
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Black-WOL.woff
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Black-WOL.woff2
Normal file
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Black-WOL.woff2
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Bold-WOL.eot
Normal file
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Bold-WOL.eot
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Bold-WOL.ttf
Normal file
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Bold-WOL.ttf
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Bold-WOL.woff
Normal file
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Bold-WOL.woff
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Bold-WOL.woff2
Normal file
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Bold-WOL.woff2
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Light-WOL.eot
Normal file
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Light-WOL.eot
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Light-WOL.ttf
Normal file
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Light-WOL.ttf
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Light-WOL.woff
Normal file
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Light-WOL.woff
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Light-WOL.woff2
Normal file
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Light-WOL.woff2
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Medium-WOL.eot
Normal file
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Medium-WOL.eot
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Medium-WOL.ttf
Normal file
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Medium-WOL.ttf
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Medium-WOL.woff
Normal file
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Medium-WOL.woff
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Medium-WOL.woff2
Normal file
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Medium-WOL.woff2
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Thin-WOL.eot
Normal file
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Thin-WOL.eot
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Thin-WOL.ttf
Normal file
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Thin-WOL.ttf
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Thin-WOL.woff
Normal file
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Thin-WOL.woff
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Thin-WOL.woff2
Normal file
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-Thin-WOL.woff2
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-WOL.eot
Normal file
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-WOL.eot
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-WOL.ttf
Normal file
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-WOL.ttf
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-WOL.woff
Normal file
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-WOL.woff
Normal file
Binary file not shown.
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-WOL.woff2
Normal file
BIN
assets/themes/default/fonts/Vazir_WOL/Vazir-WOL.woff2
Normal file
Binary file not shown.
65
assets/themes/default/fonts/Vazir_WOL/Vazir_WOL.css
Normal file
65
assets/themes/default/fonts/Vazir_WOL/Vazir_WOL.css
Normal file
@ -0,0 +1,65 @@
|
||||
@font-face {
|
||||
font-family: Vazir;
|
||||
src: url('Vazir-WOL.eot');
|
||||
src: url('Vazir-WOL.eot?#iefix') format('embedded-opentype'),
|
||||
url('Vazir-WOL.woff2') format('woff2'),
|
||||
url('Vazir-WOL.woff') format('woff'),
|
||||
url('Vazir-WOL.ttf') format('truetype');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: Vazir;
|
||||
src: url('Vazir-Bold-WOL.eot');
|
||||
src: url('Vazir-Bold-WOL.eot?#iefix') format('embedded-opentype'),
|
||||
url('Vazir-Bold-WOL.woff2') format('woff2'),
|
||||
url('Vazir-Bold-WOL.woff') format('woff'),
|
||||
url('Vazir-Bold-WOL.ttf') format('truetype');
|
||||
font-weight: bold;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: Vazir;
|
||||
src: url('Vazir-Black-WOL.eot');
|
||||
src: url('Vazir-Black-WOL.eot?#iefix') format('embedded-opentype'),
|
||||
url('Vazir-Black-WOL.woff2') format('woff2'),
|
||||
url('Vazir-Black-WOL.woff') format('woff'),
|
||||
url('Vazir-Black-WOL.ttf') format('truetype');
|
||||
font-weight: 900;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: Vazir;
|
||||
src: url('Vazir-Medium-WOL.eot');
|
||||
src: url('Vazir-Medium-WOL.eot?#iefix') format('embedded-opentype'),
|
||||
url('Vazir-Medium-WOL.woff2') format('woff2'),
|
||||
url('Vazir-Medium-WOL.woff') format('woff'),
|
||||
url('Vazir-Medium-WOL.ttf') format('truetype');
|
||||
font-weight: 500;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: Vazir;
|
||||
src: url('Vazir-Light-WOL.eot');
|
||||
src: url('Vazir-Light-WOL.eot?#iefix') format('embedded-opentype'),
|
||||
url('Vazir-Light-WOL.woff2') format('woff2'),
|
||||
url('Vazir-Light-WOL.woff') format('woff'),
|
||||
url('Vazir-Light-WOL.ttf') format('truetype');
|
||||
font-weight: 300;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: Vazir;
|
||||
src: url('Vazir-Thin-WOL.eot');
|
||||
src: url('Vazir-Thin-WOL.eot?#iefix') format('embedded-opentype'),
|
||||
url('Vazir-Thin-WOL.woff2') format('woff2'),
|
||||
url('Vazir-Thin-WOL.woff') format('woff'),
|
||||
url('Vazir-Thin-WOL.ttf') format('truetype');
|
||||
font-weight: 100;
|
||||
font-style: normal;
|
||||
}
|
@ -1,12 +1,14 @@
|
||||
/* color palette: https://coolors.co/23f0c7-ef767a-7765e3-6457a6-ffe347 */
|
||||
|
||||
@import url('./feather.css');
|
||||
@import url('./fonts/Route159/Route159.css');
|
||||
@import url('./fonts/Lora/Lora.css');
|
||||
@import url('./fonts/Playfair_Display/PlayfairDisplay.css');
|
||||
@import url("./feather.css");
|
||||
@import url("./fonts/Route159/Route159.css");
|
||||
@import url("./fonts/Lora/Lora.css");
|
||||
@import url("./fonts/Playfair_Display/PlayfairDisplay.css");
|
||||
@import url("./fonts/Vazir_WOL/Vazir_WOL.css");
|
||||
@import url("./fonts/Shabnam_WOL/Shabnam_WOL.css");
|
||||
|
||||
@import 'variables';
|
||||
@import 'global';
|
||||
@import 'header';
|
||||
@import 'article';
|
||||
@import 'forms';
|
||||
@import "variables";
|
||||
@import "global";
|
||||
@import "header";
|
||||
@import "article";
|
||||
@import "forms";
|
||||
|
42
build.rs
42
build.rs
@ -1,5 +1,3 @@
|
||||
use rsass;
|
||||
|
||||
use ructe::Ructe;
|
||||
use std::process::{Command, Stdio};
|
||||
use std::{ffi::OsStr, fs::*, io::Write, path::*};
|
||||
@ -43,26 +41,20 @@ fn main() {
|
||||
.expect("compile templates");
|
||||
|
||||
compile_themes().expect("Theme compilation error");
|
||||
recursive_copy(&Path::new("assets").join("icons"), &Path::new("static"))
|
||||
recursive_copy(&Path::new("assets").join("icons"), Path::new("static"))
|
||||
.expect("Couldn't copy icons");
|
||||
recursive_copy(&Path::new("assets").join("images"), &Path::new("static"))
|
||||
recursive_copy(&Path::new("assets").join("images"), Path::new("static"))
|
||||
.expect("Couldn't copy images");
|
||||
create_dir_all(&Path::new("static").join("media")).expect("Couldn't init media directory");
|
||||
|
||||
let cache_id = &compute_static_hash()[..8];
|
||||
println!("cargo:rerun-if-changed=target/deploy/plume-front.wasm");
|
||||
copy("target/deploy/plume-front.wasm", "static/plume-front.wasm")
|
||||
.and_then(|_| read_to_string("target/deploy/plume-front.js"))
|
||||
.and_then(|js| {
|
||||
write(
|
||||
"static/plume-front.js",
|
||||
js.replace(
|
||||
"\"plume-front.wasm\"",
|
||||
&format!("\"/static/cached/{}/plume-front.wasm\"", cache_id),
|
||||
),
|
||||
)
|
||||
})
|
||||
.ok();
|
||||
println!("cargo:rerun-if-changed=plume-front/pkg/plume_front_bg.wasm");
|
||||
copy(
|
||||
"plume-front/pkg/plume_front_bg.wasm",
|
||||
"static/plume_front_bg.wasm",
|
||||
)
|
||||
.and_then(|_| copy("plume-front/pkg/plume_front.js", "static/plume_front.js"))
|
||||
.ok();
|
||||
|
||||
println!("cargo:rustc-env=CACHE_ID={}", cache_id)
|
||||
}
|
||||
@ -105,12 +97,12 @@ fn compile_theme(path: &Path, out_dir: &Path) -> std::io::Result<()> {
|
||||
.components()
|
||||
.skip_while(|c| *c != Component::Normal(OsStr::new("themes")))
|
||||
.skip(1)
|
||||
.filter_map(|c| {
|
||||
.map(|c| {
|
||||
c.as_os_str()
|
||||
.to_str()
|
||||
.unwrap_or_default()
|
||||
.splitn(2, '.')
|
||||
.next()
|
||||
.split_once('.')
|
||||
.map_or(c.as_os_str().to_str().unwrap_or_default(), |x| x.0)
|
||||
})
|
||||
.collect::<Vec<_>>()
|
||||
.join("-");
|
||||
@ -128,8 +120,14 @@ fn compile_theme(path: &Path, out_dir: &Path) -> std::io::Result<()> {
|
||||
// compile the .scss/.sass file
|
||||
let mut out = File::create(out.join("theme.css"))?;
|
||||
out.write_all(
|
||||
&rsass::compile_scss_file(path, rsass::OutputStyle::Compressed)
|
||||
.expect("SCSS compilation error"),
|
||||
&rsass::compile_scss_path(
|
||||
path,
|
||||
rsass::output::Format {
|
||||
style: rsass::output::Style::Compressed,
|
||||
..rsass::output::Format::default()
|
||||
},
|
||||
)
|
||||
.expect("SCSS compilation error"),
|
||||
)?;
|
||||
|
||||
Ok(())
|
||||
|
@ -1,5 +1,5 @@
|
||||
"project_identifier": "plume"
|
||||
"api_key_env": CROWDIN_API_KEY
|
||||
"project_id": 352097
|
||||
"api_token_env": "CROWDIN_API_KEY"
|
||||
preserve_hierarchy: true
|
||||
files:
|
||||
- source: /po/plume/plume.pot
|
||||
|
116
flake.lock
Normal file
116
flake.lock
Normal file
@ -0,0 +1,116 @@
|
||||
{
|
||||
"nodes": {
|
||||
"flake-utils": {
|
||||
"inputs": {
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1681202837,
|
||||
"narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "cfacdce06f30d2b68473a46042957675eebb3401",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-utils_2": {
|
||||
"inputs": {
|
||||
"systems": "systems_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1681202837,
|
||||
"narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "cfacdce06f30d2b68473a46042957675eebb3401",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1683408522,
|
||||
"narHash": "sha256-9kcPh6Uxo17a3kK3XCHhcWiV1Yu1kYj22RHiymUhMkU=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "897876e4c484f1e8f92009fd11b7d988a121a4e7",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"rust-overlay": "rust-overlay"
|
||||
}
|
||||
},
|
||||
"rust-overlay": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils_2",
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1683857898,
|
||||
"narHash": "sha256-pyVY4UxM6zUX97g6bk6UyCbZGCWZb2Zykrne8YxacRA=",
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"rev": "4e7fba3f37f5e184ada0ef3cf1e4d8ef450f240b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"systems_2": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
60
flake.nix
Normal file
60
flake.nix
Normal file
@ -0,0 +1,60 @@
|
||||
{
|
||||
description = "Developpment shell for Plume including nightly Rust compiler";
|
||||
|
||||
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
inputs.rust-overlay = {
|
||||
url = "github:oxalica/rust-overlay";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
inputs.flake-utils.url = "github:numtide/flake-utils";
|
||||
|
||||
outputs = { self, nixpkgs, flake-utils, rust-overlay, ... }:
|
||||
flake-utils.lib.eachDefaultSystem (system:
|
||||
let
|
||||
overlays = [ (import rust-overlay) ];
|
||||
pkgs = import nixpkgs { inherit system overlays; };
|
||||
inputs = with pkgs; [
|
||||
(rust-bin.nightly.latest.default.override {
|
||||
targets = [ "wasm32-unknown-unknown" ];
|
||||
})
|
||||
wasm-pack
|
||||
openssl
|
||||
pkg-config
|
||||
gettext
|
||||
postgresql
|
||||
sqlite
|
||||
];
|
||||
in {
|
||||
packages.default = pkgs.rustPlatform.buildRustPackage {
|
||||
pname = "plume";
|
||||
version = "0.7.3-dev";
|
||||
|
||||
src = ./.;
|
||||
|
||||
cargoLock = {
|
||||
lockFile = ./Cargo.lock;
|
||||
outputHashes = {
|
||||
"pulldown-cmark-0.8.0" = "sha256-lpfoRDuY3zJ3QmUqJ5k9OL0MEdGDpwmpJ+u5BCj2kIA=";
|
||||
"rocket_csrf-0.1.2" = "sha256-WywZfMiwZqTPfSDcAE7ivTSYSaFX+N9fjnRsLSLb9wE=";
|
||||
};
|
||||
};
|
||||
buildNoDefaultFeatures = true;
|
||||
buildFeatures = ["postgresql" "s3"];
|
||||
|
||||
nativeBuildInputs = inputs;
|
||||
|
||||
buildPhase = ''
|
||||
wasm-pack build --target web --release plume-front
|
||||
cargo build --no-default-features --features postgresql,s3 --path .
|
||||
cargo build --no-default-features --features postgresql,s3 --path plume-cli
|
||||
'';
|
||||
installPhase = ''
|
||||
cargo install --no-default-features --features postgresql,s3 --path . --target-dir $out
|
||||
cargo install --no-default-features --features postgresql,s3 --path plume-cli --target-dir $out
|
||||
'';
|
||||
};
|
||||
devShells.default = pkgs.mkShell {
|
||||
packages = inputs;
|
||||
};
|
||||
});
|
||||
}
|
@ -0,0 +1 @@
|
||||
DROP INDEX medias_index_file_path;
|
@ -0,0 +1 @@
|
||||
CREATE INDEX medias_index_file_path ON medias (file_path);
|
@ -0,0 +1 @@
|
||||
DROP TABLE email_signups;
|
@ -0,0 +1,9 @@
|
||||
CREATE TABLE email_signups (
|
||||
id SERIAL PRIMARY KEY,
|
||||
email VARCHAR NOT NULL,
|
||||
token VARCHAR NOT NULL,
|
||||
expiration_date TIMESTAMP NOT NULL
|
||||
);
|
||||
|
||||
CREATE INDEX email_signups_token ON email_signups (token);
|
||||
CREATE UNIQUE INDEX email_signups_token_requests_email ON email_signups (email);
|
@ -0,0 +1,4 @@
|
||||
ALTER TABLE email_blocklist ALTER COLUMN notification_text DROP NOT NULL;
|
||||
ALTER TABLE email_blocklist ALTER COLUMN notify_user DROP NOT NULL;
|
||||
ALTER TABLE email_blocklist ALTER COLUMN note DROP NOT NULL;
|
||||
ALTER TABLE email_blocklist ALTER COLUMN email_address DROP NOT NULL;
|
@ -0,0 +1,4 @@
|
||||
ALTER TABLE email_blocklist ALTER COLUMN email_address SET NOT NULL;
|
||||
ALTER TABLE email_blocklist ALTER COLUMN note SET NOT NULL;
|
||||
ALTER TABLE email_blocklist ALTER COLUMN notify_user SET NOT NULL;
|
||||
ALTER TABLE email_blocklist ALTER COLUMN notification_text SET NOT NULL;
|
@ -0,0 +1 @@
|
||||
DROP INDEX medias_index_file_path;
|
@ -0,0 +1 @@
|
||||
CREATE INDEX medias_index_file_path ON medias (file_path);
|
@ -0,0 +1 @@
|
||||
DROP TABLE email_signups;
|
@ -0,0 +1,9 @@
|
||||
CREATE TABLE email_signups (
|
||||
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
||||
email VARCHAR NOT NULL,
|
||||
token VARCHAR NOT NULL,
|
||||
expiration_date TIMESTAMP NOT NULL
|
||||
);
|
||||
|
||||
CREATE INDEX email_signups_token ON email_signups (token);
|
||||
CREATE UNIQUE INDEX email_signups_token_requests_email ON email_signups (email);
|
@ -0,0 +1,9 @@
|
||||
CREATE TABLE email_blocklist2(id INTEGER PRIMARY KEY,
|
||||
email_address TEXT UNIQUE,
|
||||
note TEXT,
|
||||
notify_user BOOLEAN DEFAULT FALSE,
|
||||
notification_text TEXT);
|
||||
|
||||
INSERT INTO email_blocklist2 SELECT * FROM email_blocklist;
|
||||
DROP TABLE email_blocklist;
|
||||
ALTER TABLE email_blocklist2 RENAME TO email_blocklist;
|
@ -0,0 +1,9 @@
|
||||
CREATE TABLE email_blocklist2(id INTEGER PRIMARY KEY,
|
||||
email_address TEXT UNIQUE NOT NULL,
|
||||
note TEXT NOT NULL,
|
||||
notify_user BOOLEAN DEFAULT FALSE NOT NULL,
|
||||
notification_text TEXT NOT NULL);
|
||||
|
||||
INSERT INTO email_blocklist2 SELECT * FROM email_blocklist;
|
||||
DROP TABLE email_blocklist;
|
||||
ALTER TABLE email_blocklist2 RENAME TO email_blocklist;
|
@ -1,9 +1,9 @@
|
||||
[package]
|
||||
name = "plume-api"
|
||||
version = "0.4.0"
|
||||
version = "0.7.2"
|
||||
authors = ["Plume contributors"]
|
||||
edition = "2018"
|
||||
|
||||
[dependencies]
|
||||
serde = "1.0"
|
||||
serde = "1.0.137"
|
||||
serde_derive = "1.0"
|
||||
|
3
plume-api/release.toml
Normal file
3
plume-api/release.toml
Normal file
@ -0,0 +1,3 @@
|
||||
pre-release-hook = ["cargo", "fmt"]
|
||||
pre-release-replacements = []
|
||||
release = false
|
@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "plume-cli"
|
||||
version = "0.4.0"
|
||||
version = "0.7.2"
|
||||
authors = ["Plume contributors"]
|
||||
edition = "2018"
|
||||
|
||||
@ -10,12 +10,12 @@ path = "src/main.rs"
|
||||
|
||||
[dependencies]
|
||||
clap = "2.33"
|
||||
dotenv = "0.14"
|
||||
rpassword = "4.0"
|
||||
dotenv = "0.15"
|
||||
rpassword = "6.0.1"
|
||||
|
||||
[dependencies.diesel]
|
||||
features = ["r2d2", "chrono"]
|
||||
version = "*"
|
||||
version = "1.4.5"
|
||||
|
||||
[dependencies.plume-models]
|
||||
path = "../plume-models"
|
||||
@ -23,3 +23,5 @@ path = "../plume-models"
|
||||
[features]
|
||||
postgres = ["plume-models/postgres", "diesel/postgres"]
|
||||
sqlite = ["plume-models/sqlite", "diesel/sqlite"]
|
||||
search-lindera = ["plume-models/search-lindera"]
|
||||
s3 = ["plume-models/s3"]
|
||||
|
3
plume-cli/release.toml
Normal file
3
plume-cli/release.toml
Normal file
@ -0,0 +1,3 @@
|
||||
pre-release-hook = ["cargo", "fmt"]
|
||||
pre-release-replacements = []
|
||||
release = false
|
@ -68,4 +68,6 @@ fn new<'a>(args: &ArgMatches<'a>, conn: &Connection) {
|
||||
},
|
||||
)
|
||||
.expect("Couldn't save instance");
|
||||
Instance::cache_local(conn);
|
||||
Instance::create_local_instance_user(conn).expect("Couldn't save local instance user");
|
||||
}
|
||||
|
262
plume-cli/src/list.rs
Normal file
262
plume-cli/src/list.rs
Normal file
@ -0,0 +1,262 @@
|
||||
use clap::{App, Arg, ArgMatches, SubCommand};
|
||||
|
||||
use plume_models::{blogs::Blog, instance::Instance, lists::*, users::User, Connection};
|
||||
|
||||
pub fn command<'a, 'b>() -> App<'a, 'b> {
|
||||
SubCommand::with_name("lists")
|
||||
.about("Manage lists")
|
||||
.subcommand(
|
||||
SubCommand::with_name("new")
|
||||
.arg(
|
||||
Arg::with_name("name")
|
||||
.short("n")
|
||||
.long("name")
|
||||
.takes_value(true)
|
||||
.help("The name of this list"),
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("type")
|
||||
.short("t")
|
||||
.long("type")
|
||||
.takes_value(true)
|
||||
.help(
|
||||
r#"The type of this list (one of "user", "blog", "word" or "prefix")"#,
|
||||
),
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("user")
|
||||
.short("u")
|
||||
.long("user")
|
||||
.takes_value(true)
|
||||
.help("Username of whom this list is for. Empty for an instance list"),
|
||||
)
|
||||
.about("Create a new list"),
|
||||
)
|
||||
.subcommand(
|
||||
SubCommand::with_name("delete")
|
||||
.arg(
|
||||
Arg::with_name("name")
|
||||
.short("n")
|
||||
.long("name")
|
||||
.takes_value(true)
|
||||
.help("The name of the list to delete"),
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("user")
|
||||
.short("u")
|
||||
.long("user")
|
||||
.takes_value(true)
|
||||
.help("Username of whom this list was for. Empty for instance list"),
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("yes")
|
||||
.short("y")
|
||||
.long("yes")
|
||||
.help("Confirm the deletion"),
|
||||
)
|
||||
.about("Delete a list"),
|
||||
)
|
||||
.subcommand(
|
||||
SubCommand::with_name("add")
|
||||
.arg(
|
||||
Arg::with_name("name")
|
||||
.short("n")
|
||||
.long("name")
|
||||
.takes_value(true)
|
||||
.help("The name of the list to add an element to"),
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("user")
|
||||
.short("u")
|
||||
.long("user")
|
||||
.takes_value(true)
|
||||
.help("Username of whom this list is for. Empty for instance list"),
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("value")
|
||||
.short("v")
|
||||
.long("value")
|
||||
.takes_value(true)
|
||||
.help("The value to add"),
|
||||
)
|
||||
.about("Add element to a list"),
|
||||
)
|
||||
.subcommand(
|
||||
SubCommand::with_name("rm")
|
||||
.arg(
|
||||
Arg::with_name("name")
|
||||
.short("n")
|
||||
.long("name")
|
||||
.takes_value(true)
|
||||
.help("The name of the list to remove an element from"),
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("user")
|
||||
.short("u")
|
||||
.long("user")
|
||||
.takes_value(true)
|
||||
.help("Username of whom this list is for. Empty for instance list"),
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("value")
|
||||
.short("v")
|
||||
.long("value")
|
||||
.takes_value(true)
|
||||
.help("The value to remove"),
|
||||
)
|
||||
.about("Remove element from list"),
|
||||
)
|
||||
}
|
||||
|
||||
pub fn run<'a>(args: &ArgMatches<'a>, conn: &Connection) {
|
||||
let conn = conn;
|
||||
match args.subcommand() {
|
||||
("new", Some(x)) => new(x, conn),
|
||||
("delete", Some(x)) => delete(x, conn),
|
||||
("add", Some(x)) => add(x, conn),
|
||||
("rm", Some(x)) => rm(x, conn),
|
||||
("", None) => command().print_help().unwrap(),
|
||||
_ => println!("Unknown subcommand"),
|
||||
}
|
||||
}
|
||||
|
||||
fn get_list_identifier(args: &ArgMatches<'_>) -> (String, Option<String>) {
|
||||
let name = args
|
||||
.value_of("name")
|
||||
.map(String::from)
|
||||
.expect("No name provided for the list");
|
||||
let user = args.value_of("user").map(String::from);
|
||||
(name, user)
|
||||
}
|
||||
|
||||
fn get_list_type(args: &ArgMatches<'_>) -> ListType {
|
||||
let typ = args
|
||||
.value_of("type")
|
||||
.map(String::from)
|
||||
.expect("No name type for the list");
|
||||
match typ.as_str() {
|
||||
"user" => ListType::User,
|
||||
"blog" => ListType::Blog,
|
||||
"word" => ListType::Word,
|
||||
"prefix" => ListType::Prefix,
|
||||
_ => panic!("Invalid list type: {}", typ),
|
||||
}
|
||||
}
|
||||
|
||||
fn get_value(args: &ArgMatches<'_>) -> String {
|
||||
args.value_of("value")
|
||||
.map(String::from)
|
||||
.expect("No query provided")
|
||||
}
|
||||
|
||||
fn resolve_user(username: &str, conn: &Connection) -> User {
|
||||
let instance = Instance::get_local_uncached(conn).expect("Failed to load local instance");
|
||||
|
||||
User::find_by_name(conn, username, instance.id).expect("User not found")
|
||||
}
|
||||
|
||||
fn new(args: &ArgMatches<'_>, conn: &Connection) {
|
||||
let (name, user) = get_list_identifier(args);
|
||||
let typ = get_list_type(args);
|
||||
|
||||
let user = user.map(|user| resolve_user(&user, conn));
|
||||
|
||||
List::new(conn, &name, user.as_ref(), typ).expect("failed to create list");
|
||||
}
|
||||
|
||||
fn delete(args: &ArgMatches<'_>, conn: &Connection) {
|
||||
let (name, user) = get_list_identifier(args);
|
||||
|
||||
if !args.is_present("yes") {
|
||||
panic!("Warning, this operation is destructive. Add --yes to confirm you want to do it.")
|
||||
}
|
||||
|
||||
let user = user.map(|user| resolve_user(&user, conn));
|
||||
|
||||
let list =
|
||||
List::find_for_user_by_name(conn, user.map(|u| u.id), &name).expect("list not found");
|
||||
|
||||
list.delete(conn).expect("Failed to update list");
|
||||
}
|
||||
|
||||
fn add(args: &ArgMatches<'_>, conn: &Connection) {
|
||||
let (name, user) = get_list_identifier(args);
|
||||
let value = get_value(args);
|
||||
|
||||
let user = user.map(|user| resolve_user(&user, conn));
|
||||
|
||||
let list =
|
||||
List::find_for_user_by_name(conn, user.map(|u| u.id), &name).expect("list not found");
|
||||
|
||||
match list.kind() {
|
||||
ListType::Blog => {
|
||||
let blog_id = Blog::find_by_fqn(conn, &value).expect("unknown blog").id;
|
||||
if !list.contains_blog(conn, blog_id).unwrap() {
|
||||
list.add_blogs(conn, &[blog_id]).unwrap();
|
||||
}
|
||||
}
|
||||
ListType::User => {
|
||||
let user_id = User::find_by_fqn(conn, &value).expect("unknown user").id;
|
||||
if !list.contains_user(conn, user_id).unwrap() {
|
||||
list.add_users(conn, &[user_id]).unwrap();
|
||||
}
|
||||
}
|
||||
ListType::Word => {
|
||||
if !list.contains_word(conn, &value).unwrap() {
|
||||
list.add_words(conn, &[&value]).unwrap();
|
||||
}
|
||||
}
|
||||
ListType::Prefix => {
|
||||
if !list.contains_prefix(conn, &value).unwrap() {
|
||||
list.add_prefixes(conn, &[&value]).unwrap();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn rm(args: &ArgMatches<'_>, conn: &Connection) {
|
||||
let (name, user) = get_list_identifier(args);
|
||||
let value = get_value(args);
|
||||
|
||||
let user = user.map(|user| resolve_user(&user, conn));
|
||||
|
||||
let list =
|
||||
List::find_for_user_by_name(conn, user.map(|u| u.id), &name).expect("list not found");
|
||||
|
||||
match list.kind() {
|
||||
ListType::Blog => {
|
||||
let blog_id = Blog::find_by_fqn(conn, &value).expect("unknown blog").id;
|
||||
let mut blogs = list.list_blogs(conn).unwrap();
|
||||
if let Some(index) = blogs.iter().position(|b| b.id == blog_id) {
|
||||
blogs.swap_remove(index);
|
||||
let blogs = blogs.iter().map(|b| b.id).collect::<Vec<_>>();
|
||||
list.set_blogs(conn, &blogs).unwrap();
|
||||
}
|
||||
}
|
||||
ListType::User => {
|
||||
let user_id = User::find_by_fqn(conn, &value).expect("unknown user").id;
|
||||
let mut users = list.list_users(conn).unwrap();
|
||||
if let Some(index) = users.iter().position(|u| u.id == user_id) {
|
||||
users.swap_remove(index);
|
||||
let users = users.iter().map(|u| u.id).collect::<Vec<_>>();
|
||||
list.set_users(conn, &users).unwrap();
|
||||
}
|
||||
}
|
||||
ListType::Word => {
|
||||
let mut words = list.list_words(conn).unwrap();
|
||||
if let Some(index) = words.iter().position(|w| *w == value) {
|
||||
words.swap_remove(index);
|
||||
let words = words.iter().map(String::as_str).collect::<Vec<_>>();
|
||||
list.set_words(conn, &words).unwrap();
|
||||
}
|
||||
}
|
||||
ListType::Prefix => {
|
||||
let mut prefixes = list.list_prefixes(conn).unwrap();
|
||||
if let Some(index) = prefixes.iter().position(|p| *p == value) {
|
||||
prefixes.swap_remove(index);
|
||||
let prefixes = prefixes.iter().map(String::as_str).collect::<Vec<_>>();
|
||||
list.set_prefixes(conn, &prefixes).unwrap();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,13 +1,13 @@
|
||||
use dotenv;
|
||||
|
||||
use clap::App;
|
||||
use diesel::Connection;
|
||||
use plume_models::{instance::Instance, Connection as Conn, CONFIG};
|
||||
use std::io::{self, prelude::*};
|
||||
|
||||
mod instance;
|
||||
mod list;
|
||||
mod migration;
|
||||
mod search;
|
||||
mod timeline;
|
||||
mod users;
|
||||
|
||||
fn main() {
|
||||
@ -18,6 +18,8 @@ fn main() {
|
||||
.subcommand(instance::command())
|
||||
.subcommand(migration::command())
|
||||
.subcommand(search::command())
|
||||
.subcommand(timeline::command())
|
||||
.subcommand(list::command())
|
||||
.subcommand(users::command());
|
||||
let matches = app.clone().get_matches();
|
||||
|
||||
@ -27,7 +29,7 @@ fn main() {
|
||||
e => e.map(|_| ()).unwrap(),
|
||||
}
|
||||
let conn = Conn::establish(CONFIG.database_url.as_str());
|
||||
let _ = conn.as_ref().map(|conn| Instance::cache_local(conn));
|
||||
let _ = conn.as_ref().map(Instance::cache_local);
|
||||
|
||||
match matches.subcommand() {
|
||||
("instance", Some(args)) => {
|
||||
@ -39,6 +41,10 @@ fn main() {
|
||||
("search", Some(args)) => {
|
||||
search::run(args, &conn.expect("Couldn't connect to the database."))
|
||||
}
|
||||
("timeline", Some(args)) => {
|
||||
timeline::run(args, &conn.expect("Couldn't connect to the database."))
|
||||
}
|
||||
("lists", Some(args)) => list::run(args, &conn.expect("Couldn't connect to the database.")),
|
||||
("users", Some(args)) => {
|
||||
users::run(args, &conn.expect("Couldn't connect to the database."))
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user