Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d0a1a5b249 | ||
|
|
7742b4e239 | ||
|
|
faab08cec5 | ||
|
|
d38accc6ff | ||
|
|
58799b9847 | ||
|
|
ad697ff032 | ||
|
|
e753c191c3 | ||
|
|
c53c0ce6d6 | ||
|
|
8bdb64c6d7 | ||
|
|
8ac2ee05b8 | ||
|
|
326e3536e9 | ||
|
|
0cc0b57139 | ||
|
|
3b46fb243b | ||
|
|
8cd533569e | ||
|
|
889c87bf14 | ||
|
|
68cf60bd1d | ||
|
|
92c7b3ecdf | ||
|
|
f017af8d84 | ||
|
|
d4c8c941e4 | ||
|
|
72ca84791a | ||
|
|
94ff143975 | ||
|
|
38a04ae80b | ||
|
|
99d329c7b0 | ||
|
|
1408e8bb53 | ||
|
|
617c6f0c15 | ||
|
|
896bc473a8 | ||
|
|
712cb48fb2 | ||
|
|
73580313b4 | ||
|
|
b509f51f9b | ||
|
|
bbe38534d5 | ||
|
|
0e9a151ce5 | ||
|
|
54e7ebc4d9 | ||
|
|
76a23c05af | ||
|
|
3dd3d0fae8 | ||
|
|
166a326dc7 | ||
|
|
5ee9c27876 | ||
|
|
76edd20456 | ||
|
|
eb09b4ec25 | ||
|
|
8e1f46b102 | ||
|
|
33d013309d | ||
|
|
506740b1cf | ||
|
|
7b04a6407a | ||
|
|
788493921e | ||
|
|
25961a04d9 | ||
|
|
651804603a | ||
|
|
c107bc0c50 | ||
|
|
3960982afa | ||
|
|
ab668ca55d | ||
|
|
e63154d379 | ||
|
|
7dec363f54 | ||
|
|
827fab1ef9 | ||
|
|
63da02addc | ||
|
|
277f7a94cb | ||
|
|
750766a445 | ||
|
|
a975c43516 | ||
|
|
7a9baa1c50 | ||
|
|
82a593e0ed | ||
|
|
b096d35b85 | ||
|
|
2da29e25d5 | ||
|
|
96ef081d17 | ||
|
|
fbf833bce5 | ||
|
|
18ed97928f | ||
|
|
b7eeb165d1 | ||
|
|
39209dbab3 | ||
|
|
31019347aa | ||
|
|
faca690a95 | ||
|
|
be564f4ae1 | ||
|
|
77ac889406 | ||
|
|
8c9e51e310 | ||
|
|
269f09b8a6 | ||
|
|
3a9016a6d9 | ||
|
|
a402822d8b | ||
|
|
6da1c6b870 | ||
|
|
ed75c36449 | ||
|
|
2172b94fe6 | ||
|
|
69775ac779 | ||
|
|
37b5015278 | ||
|
|
ce657d3351 | ||
|
|
9d5806220e | ||
|
|
9f2045746e | ||
|
|
071ab0de6c | ||
|
|
d9ea382e81 | ||
|
|
599ebb8610 | ||
|
|
2540c8102f | ||
|
|
b8fa87eca2 | ||
|
|
9c8e3a1e2e | ||
|
|
7be81551d4 | ||
|
|
f08149b7db | ||
|
|
e5fc548eb5 | ||
|
|
7a23e560c3 | ||
|
|
7090513545 | ||
|
|
4277590661 | ||
|
|
d3109b4cc9 | ||
|
|
9fd883fab5 | ||
|
|
e5d370cb2d | ||
|
|
228eaa164d | ||
|
|
e27e55856e | ||
|
|
1d275134ad | ||
|
|
10083786cb | ||
|
|
8121c3f032 | ||
|
|
9c861e7c62 | ||
|
|
17906e63e2 | ||
|
|
2c7d234312 | ||
|
|
493bb3eb5c | ||
|
|
6fe75d5277 | ||
|
|
601bb87559 | ||
|
|
dbb7d3f7f2 | ||
|
|
2cac2bfe4a | ||
|
|
8c8a914fa9 | ||
|
|
c3e7d1b8b1 | ||
|
|
4a16b20d3f | ||
|
|
0083e927c1 | ||
|
|
ec69178703 | ||
|
|
14a2ea0c80 | ||
|
|
966828efff | ||
|
|
fc9e6efb80 | ||
|
|
590d4c1479 | ||
|
|
b7dc7bc8a2 | ||
|
|
f9eb1d4e81 | ||
|
|
57591446ea | ||
|
|
d79d17e807 | ||
|
|
bb4eeeeeee | ||
|
|
4ce7a3521a | ||
|
|
287e397b82 | ||
|
|
a377e1b072 | ||
|
|
8281d9d990 | ||
|
|
ec8a1b3d73 | ||
|
|
e8d22f1f1b | ||
|
|
949e367a01 | ||
|
|
c7f6955e80 | ||
|
|
1aba089483 | ||
|
|
314877d325 | ||
|
|
45b6a073e0 | ||
|
|
9d819bc405 | ||
|
|
ec05d2c753 | ||
|
|
865cca8eaa | ||
|
|
6cd3b88a8a | ||
|
|
f408467bf5 | ||
|
|
db2f6b15e8 | ||
|
|
493c998742 | ||
|
|
a6f38c0e6f | ||
|
|
d3fd01c37d | ||
|
|
b260175ebf | ||
|
|
11845d4a7c | ||
|
|
85a781a998 | ||
|
|
3c534548df | ||
|
|
bf0713c0cf | ||
|
|
ef9486f794 | ||
|
|
c78b3a1e6a | ||
|
|
230ee3ab16 | ||
|
|
8ab8807398 | ||
|
|
522bdbe29e | ||
|
|
b0c5cd70da | ||
|
|
8cd0aed78a | ||
|
|
6f6323ff55 | ||
|
|
446cf9541c | ||
|
|
6804d068cc | ||
|
|
7edef0ff7f | ||
|
|
8629e52b84 | ||
|
|
9dd3fce747 | ||
|
|
94fdf4fded | ||
|
|
8c401da5f7 | ||
|
|
e00b6f674f | ||
|
|
23ed8930bf | ||
|
|
77070d4120 | ||
|
|
1d88d5b296 | ||
|
|
4eacb62ff8 | ||
|
|
63b3826c25 | ||
|
|
78f462314b | ||
|
|
9ffc80db8c | ||
|
|
49e855b4e4 | ||
|
|
c32887c753 | ||
|
|
7a1cfbb75d | ||
|
|
f3e91168d9 | ||
|
|
e41621dbbc | ||
|
|
9f77b8b780 | ||
|
|
81f2423d71 | ||
|
|
0ee9667c35 | ||
|
|
4bab2b4e7e | ||
|
|
eea9e106ab | ||
|
|
0d21750932 | ||
|
|
e4ca3de291 | ||
|
|
92a4c699cd | ||
|
|
fababb8a49 | ||
|
|
6d4968cdc6 | ||
|
|
327712d228 | ||
|
|
8b362f58d3 | ||
|
|
afa810841c | ||
|
|
34fc0e619f | ||
|
|
e2a9a62c1f | ||
|
|
545a2dc5da | ||
|
|
b6c00249c6 | ||
|
|
d913a512ad | ||
|
|
9719d7ac6f | ||
|
|
74650e4927 | ||
|
|
0b54ddac94 | ||
|
|
6bb5c83029 | ||
|
|
d7a4feba44 | ||
|
|
07cfaa2156 | ||
|
|
bd3589f783 | ||
|
|
0971fee3ef | ||
|
|
fe08fdf792 | ||
|
|
6d668745cf | ||
|
|
12ff643b75 | ||
|
|
07f2fec870 | ||
|
|
3f2891cc32 | ||
|
|
57befe227f | ||
|
|
73fc77b09e | ||
|
|
0317f3aa0e | ||
|
|
775d5b1bbf | ||
|
|
1fc6058426 | ||
|
|
accf29dea3 | ||
|
|
cc2c5c5205 | ||
|
|
c163661bd0 | ||
|
|
bdd8a4a08d | ||
|
|
0e3bad2be7 | ||
|
|
f487e616bf | ||
|
|
4e58ca0fb2 | ||
|
|
4422c4b517 | ||
|
|
f8417b8297 | ||
|
|
9ff8cccc36 | ||
|
|
f25fb65d42 | ||
|
|
519915336e | ||
|
|
7fe94cc6d0 | ||
|
|
09bbdc7125 | ||
|
|
9bab52527f | ||
|
|
ca477899f2 | ||
|
|
e8086c811d | ||
|
|
2028ff15d3 | ||
|
|
0cf48a9361 | ||
|
|
8ba07f0d59 | ||
|
|
ff9a860af9 | ||
|
|
6bf7c7a019 | ||
|
|
4e249c4a4b | ||
|
|
e7acfe97d2 | ||
|
|
eda9fc9bc3 | ||
|
|
20044af981 | ||
|
|
7b5fe02079 | ||
|
|
c5b51e3491 | ||
|
|
2d3642c62b | ||
|
|
960681efaf | ||
|
|
bb99b59528 | ||
|
|
f29e515147 | ||
|
|
112b22c0d9 | ||
|
|
31039584e8 | ||
|
|
ec942b013a | ||
|
|
1be60f89da | ||
|
|
69ab24995c | ||
|
|
e9b83400fe | ||
|
|
1048a10ba2 | ||
|
|
1c21efd54a | ||
|
|
19ebf4f5d2 | ||
|
|
825f9fec18 | ||
|
|
f9f9cf8e11 | ||
|
|
0f105d2acb | ||
|
|
4bc91159d6 | ||
|
|
2137efd700 | ||
|
|
7efecc2148 | ||
|
|
0e8cc80a88 | ||
|
|
170671b357 | ||
|
|
7ce8be1d2f | ||
|
|
ef023cf4bb | ||
|
|
f72c75a562 | ||
|
|
28cf554591 | ||
|
|
bdf5c84f19 | ||
|
|
241a0e0373 | ||
|
|
c64de6b1a7 | ||
|
|
f89ab9b53c | ||
|
|
c22297b182 | ||
|
|
20ca60e726 | ||
|
|
6f63f1ce1d | ||
|
|
a5440d0cfc | ||
|
|
7a2086ed05 | ||
|
|
428b89860a | ||
|
|
69a8a256dc | ||
|
|
e1c1308662 | ||
|
|
b0e6c4e5fd | ||
|
|
1e5c006945 | ||
|
|
4248719f9c | ||
|
|
62ce9f2e68 | ||
|
|
d6cfb639e6 | ||
|
|
8d5c2045a6 | ||
|
|
652462e326 | ||
|
|
8ab2d8b68a | ||
|
|
e71f92b572 | ||
|
|
bf2d8ece62 | ||
|
|
53d243fab3 | ||
|
|
2b55f9aa68 | ||
|
|
666a887d79 | ||
|
|
fc73172652 | ||
|
|
3b9a4032a7 | ||
|
|
720d795f78 | ||
|
|
4344a076d8 | ||
|
|
32f452b25d | ||
|
|
c9595934ea | ||
|
|
fe51e8fb67 | ||
|
|
81f0e88710 | ||
|
|
121d240da2 | ||
|
|
05456d8fdb | ||
|
|
c6aa447427 | ||
|
|
03578f8307 | ||
|
|
407cdb66c5 | ||
|
|
a1509e9064 | ||
|
|
cd73c4ab4d | ||
|
|
7b08a2241c | ||
|
|
998aee7bf3 | ||
|
|
427d44f472 | ||
|
|
e9389be6ff | ||
|
|
bfc47b118e | ||
|
|
9a98c6e95a | ||
|
|
4560ad96d4 | ||
|
|
d38a1055bf | ||
|
|
f98ef89528 | ||
|
|
0e504a57af | ||
|
|
11baac5f89 | ||
|
|
7093887500 | ||
|
|
ebc2fa55a3 | ||
|
|
2cebe7c007 | ||
|
|
574d41791d | ||
|
|
08305ed202 | ||
|
|
1f1d62d7c1 | ||
|
|
3a1b44c177 | ||
|
|
7f55de67d4 | ||
|
|
c51559dee5 | ||
|
|
65ad575c9c | ||
|
|
f83bec6b7a | ||
|
|
de65642d01 | ||
|
|
aee443b910 | ||
|
|
93316769fe | ||
|
|
0eea244097 | ||
|
|
cb3d124999 | ||
|
|
b36b892901 | ||
|
|
17dfc5503c | ||
|
|
ae9ee3f069 | ||
|
|
3ac8ed5556 | ||
|
|
f6f36a851e | ||
|
|
a05ba20c85 | ||
|
|
be89d0e2b3 | ||
|
|
1e99e63084 | ||
|
|
d1f332b9cf | ||
|
|
8642fc75cf | ||
|
|
0789219758 | ||
|
|
f8d4b06330 | ||
|
|
f768428e0b | ||
|
|
d9e1593377 | ||
|
|
0fed115c96 | ||
|
|
884d84363e | ||
|
|
4389aa5555 | ||
|
|
03f078ba8e | ||
|
|
1ef3c02588 | ||
|
|
bca3c4dd99 | ||
|
|
ee8703a515 | ||
|
|
4ee83032e9 | ||
|
|
5578f37a6b | ||
|
|
276e215ff6 | ||
|
|
2cda8e72b3 | ||
|
|
ba79ed3442 | ||
|
|
f74b1bc2e6 | ||
|
|
417606bde5 | ||
|
|
a0d04df2b3 | ||
|
|
de68f8d46e | ||
|
|
2e3fb57ce8 | ||
|
|
d0db9190d4 | ||
|
|
f6f6aa9577 | ||
|
|
43dcc375d6 | ||
|
|
8db2442743 | ||
|
|
452bdd408b | ||
|
|
80746a1fce | ||
|
|
b29c6614dc | ||
|
|
1597b4b356 | ||
|
|
6e5a0769d3 | ||
|
|
f441e653fb | ||
|
|
ad5295d335 | ||
|
|
edab149fca | ||
|
|
fcd9b6cc89 | ||
|
|
01dafef575 | ||
|
|
7f4e044464 | ||
|
|
7094f95a27 | ||
|
|
cc7989614a | ||
|
|
f2fd7a35cc | ||
|
|
9b6ed820e9 | ||
|
|
1a86ce0bd7 | ||
|
|
ce18bf1134 | ||
|
|
719e505d01 | ||
|
|
cac66e0fd7 | ||
|
|
fba28d5274 | ||
|
|
c714e91685 | ||
|
|
831af00253 | ||
|
|
f153250887 | ||
|
|
eef77a4a80 | ||
|
|
2e4e97c5b8 | ||
|
|
b91653687b | ||
|
|
b4a13da6d8 | ||
|
|
9c5ecfb45b | ||
|
|
4a19b81bd5 | ||
|
|
faeb1e1dea | ||
|
|
925065a5bd | ||
|
|
792ec9a601 | ||
|
|
8bfa9926c7 | ||
|
|
90e553541e | ||
|
|
a19edf471b | ||
|
|
40eea78d8c | ||
|
|
4550723e94 | ||
|
|
c9c8a36c16 | ||
|
|
6c8e0d7933 | ||
|
|
9a043d83ab | ||
|
|
9b35cc2bae | ||
|
|
d8ea1d81b5 | ||
|
|
751856fcc2 | ||
|
|
ba45e11207 | ||
|
|
de43ea47cb | ||
|
|
eb01381598 | ||
|
|
9665fe953c | ||
|
|
d4620d5318 | ||
|
|
2c6a95a755 | ||
|
|
fefb7d2fb5 | ||
|
|
ba8aac3a14 | ||
|
|
908c988d06 | ||
|
|
d517626b4e | ||
|
|
e608898f83 | ||
|
|
c47160936b | ||
|
|
44e02bbc13 | ||
|
|
cfa5c6f32d | ||
|
|
4afe06a57d | ||
|
|
f02776ff4f | ||
|
|
60ed15f97c | ||
|
|
0eba74c3c6 | ||
|
|
1802b07e29 | ||
|
|
3918571644 | ||
|
|
a27d65ad36 | ||
|
|
84185205e1 | ||
|
|
4417b41319 | ||
|
|
57b5c2cf6e | ||
|
|
4a9363b1bf | ||
|
|
b993c203d3 | ||
|
|
30a1bd281e | ||
|
|
af3893546a | ||
|
|
c7ed2261a3 | ||
|
|
0ce00113cb | ||
|
|
9cd5e2e575 | ||
|
|
a073bd45d9 | ||
|
|
e52cc05f63 | ||
|
|
0048f8b6dd | ||
|
|
da627a0cc7 | ||
|
|
98a73acbfa | ||
|
|
7305c4ae0b | ||
|
|
94c6132efe | ||
|
|
d7471833a9 | ||
|
|
3aa845e5cc | ||
|
|
f8124a6ac9 | ||
|
|
3344870b90 | ||
|
|
c599c3489e | ||
|
|
62a3ccc041 | ||
|
|
2c39e2654c | ||
|
|
9b6544fa09 | ||
|
|
435c1050f9 | ||
|
|
b9a45ea2a9 | ||
|
|
8b41f89455 | ||
|
|
374a0f51f7 | ||
|
|
b3bc04cfc3 | ||
|
|
7b694613da | ||
|
|
2c9f1af5b2 | ||
|
|
e619196b81 | ||
|
|
d8dc422205 | ||
|
|
ec8d9297f9 | ||
|
|
f827f8e8d8 | ||
|
|
8e1c70b5f6 | ||
|
|
8823610faf | ||
|
|
132e932bd4 | ||
|
|
45c084afa0 | ||
|
|
22f097f92a | ||
|
|
9eebb5b2aa | ||
|
|
e6968d877f | ||
|
|
4b9e63fd99 | ||
|
|
d7fc5acd05 | ||
|
|
44c20b3cf0 | ||
|
|
ab16811839 | ||
|
|
3d2ffada0f | ||
|
|
98f5b2c3b4 | ||
|
|
7cb8dcc4a1 | ||
|
|
e26666c001 | ||
|
|
646d1eca82 | ||
|
|
6f0238652b | ||
|
|
619fe502dc | ||
|
|
1159e78cc3 | ||
|
|
545febc7c0 | ||
|
|
17292857a7 | ||
|
|
7c4c740b25 | ||
|
|
65ab50a901 | ||
|
|
bcc9cf9f6c | ||
|
|
c330c17215 | ||
|
|
b777d4e59e | ||
|
|
019388def8 | ||
|
|
843677c383 | ||
|
|
d35cb4012b | ||
|
|
16bbb0f464 | ||
|
|
b96e5120ef | ||
|
|
97b2f5c851 | ||
|
|
84163ad4ea | ||
|
|
8c1365d819 | ||
|
|
f1a11b3357 | ||
|
|
ab385ef0e7 | ||
|
|
e1f59b6108 | ||
|
|
cfeab47b1b | ||
|
|
f04b850966 | ||
|
|
1cb5e9ab2f | ||
|
|
cfa6913496 | ||
|
|
ad7bac5432 | ||
|
|
f68b90589c | ||
|
|
97fa4b4970 | ||
|
|
1bbe7b5173 | ||
|
|
9872eebdde | ||
|
|
df859f1d70 | ||
|
|
6f6584e83a | ||
|
|
cd93ec0708 | ||
|
|
3f0dc1d6e1 | ||
|
|
340364f31a | ||
|
|
d21a4e6e4a | ||
|
|
01b998e070 | ||
|
|
5bab41062a | ||
|
|
b1b7aa1f42 | ||
|
|
8911ac843a | ||
|
|
cb479d5693 | ||
|
|
9c1d56e0e7 | ||
|
|
6d6b5d3946 | ||
|
|
ff3a6b4253 | ||
|
|
0f7f27b916 | ||
|
|
c8ee5fc657 | ||
|
|
e3194eca1e | ||
|
|
d25ec813f3 | ||
|
|
5fe9f56561 | ||
|
|
ade5f2c6d6 | ||
|
|
3e652b3749 | ||
|
|
986c67effc | ||
|
|
174138d4b4 | ||
|
|
488be56b5f | ||
|
|
53eff2b690 | ||
|
|
c14887e992 | ||
|
|
dab39ebe02 | ||
|
|
e6cd7a9948 | ||
|
|
64aed3c6e7 | ||
|
|
d8add6e15f | ||
|
|
ecd990b5e5 | ||
|
|
295ce738be | ||
|
|
ed6fb66bbe | ||
|
|
6e9fa7825b | ||
|
|
8deb28fb6c | ||
|
|
6f5d15a938 | ||
|
|
2e52ed70cc | ||
|
|
f67647f2f0 | ||
|
|
ce1b0abc7d | ||
|
|
c6f205d41f | ||
|
|
328bfb553f | ||
|
|
7586dd8997 | ||
|
|
84a23d7e1f | ||
|
|
7890d88c12 | ||
|
|
541f40c370 | ||
|
|
73b3814e7b | ||
|
|
c52f47ae4b | ||
|
|
2ff69874c1 | ||
|
|
d4f703b397 | ||
|
|
a2c4e88a06 | ||
|
|
09d08ef3ed | ||
|
|
db48c825c6 | ||
|
|
126941a98d | ||
|
|
97aaec0c5b | ||
|
|
e047f620d9 | ||
|
|
1e80605801 | ||
|
|
a4c349383b | ||
|
|
bf85845bc2 | ||
|
|
9906b03fa9 | ||
|
|
e355715a3b | ||
|
|
af221fbf3b | ||
|
|
f94f60aef6 | ||
|
|
c648324aca | ||
|
|
479e2efff4 | ||
|
|
a66464e972 | ||
|
|
6bf8cc6c9c | ||
|
|
b48172bd63 | ||
|
|
99ae96f436 | ||
|
|
f4fb43dfaf | ||
|
|
4fa6542bf2 | ||
|
|
2ff90348e7 | ||
|
|
fa8d3ed4ea | ||
|
|
b30e9da6cc | ||
|
|
dde8b29674 | ||
|
|
7af1ca359b | ||
|
|
42f7e80bcd | ||
|
|
539a776d1c | ||
|
|
55efc7f208 | ||
|
|
d9151db6c0 | ||
|
|
ccc7fc8a98 | ||
|
|
9bf7c1dc0b | ||
|
|
4bb67ca1ca | ||
|
|
97b5a3acdd | ||
|
|
76aa3741d1 | ||
|
|
814df64d92 | ||
|
|
aa76e94538 | ||
|
|
58b7a6be39 | ||
|
|
2efd19e793 | ||
|
|
41f6b37e56 | ||
|
|
3150fb6631 | ||
|
|
637c43a125 | ||
|
|
b005096833 | ||
|
|
9cc808ea93 | ||
|
|
710709d527 | ||
|
|
4b5403051d | ||
|
|
0840169724 | ||
|
|
9d0aecf41f | ||
|
|
545b25e786 | ||
|
|
cd4538bdb0 | ||
|
|
2bdd3f1422 | ||
|
|
a6cc41ce54 | ||
|
|
27ebe4edb4 | ||
|
|
67b605d396 | ||
|
|
784e1d3e37 | ||
|
|
273049009a | ||
|
|
ec07de5be1 | ||
|
|
c5c8da20ae | ||
|
|
65637ec3f0 | ||
|
|
4c9a059635 | ||
|
|
226bcc0c70 | ||
|
|
89f5e8d1de | ||
|
|
5095321809 | ||
|
|
a67f31aa06 | ||
|
|
f57935e5ca | ||
|
|
a3b6dfacd5 | ||
|
|
a4f18b8242 | ||
|
|
943b84401c | ||
|
|
5b119251df | ||
|
|
4b9062f4c1 | ||
|
|
e78105429f | ||
|
|
a070040538 | ||
|
|
344f7de0da | ||
|
|
ade00547b3 | ||
|
|
10ffbca4c0 | ||
|
|
571b875f4a | ||
|
|
6a4123f59f | ||
|
|
f8d272d9ad |
No files matched your search
@@ -0,0 +1 @@
|
||||
* @nunocoracao
|
||||
@@ -21,6 +21,14 @@ body:
|
||||
options:
|
||||
- label: I have checked existing Issues and I feel this bug has not been raised
|
||||
required: true
|
||||
- type: checkboxes
|
||||
id: hugo-version-check
|
||||
attributes:
|
||||
label: Hugo Version Check
|
||||
description: Please confirm that your Hugo version is within the supported range specified in the [config](https://github.com/nunocoracao/blowfish/blob/main/config.toml)
|
||||
options:
|
||||
- label: My Hugo version is within the supported range
|
||||
required: true
|
||||
- type: textarea
|
||||
id: describe-bug
|
||||
attributes:
|
||||
|
||||
@@ -8,36 +8,36 @@ jobs:
|
||||
if: ${{ github.actor == 'dependabot[bot]' }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
ref: "${{ github.head_ref }}"
|
||||
- name: Install dependencies and Build Theme
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v6
|
||||
- run: npm install
|
||||
- run: npm run assets
|
||||
- name: Commit and push Chart.js changes
|
||||
uses: stefanzweifel/git-auto-commit-action@v6
|
||||
uses: stefanzweifel/git-auto-commit-action@v7
|
||||
with:
|
||||
branch: "${{ github.head_ref }}"
|
||||
push_options: "--dry-run"
|
||||
file_pattern: "assets/lib/chart/*"
|
||||
commit_message: "📦 Update packaged ChartJS"
|
||||
- name: Commit Fuse changes
|
||||
uses: stefanzweifel/git-auto-commit-action@v6
|
||||
uses: stefanzweifel/git-auto-commit-action@v7
|
||||
with:
|
||||
branch: "${{ github.head_ref }}"
|
||||
push_options: "--dry-run"
|
||||
file_pattern: "assets/lib/fuse/*"
|
||||
commit_message: "📦 Update packaged FuseJS"
|
||||
- name: Commit KaTeX changes
|
||||
uses: stefanzweifel/git-auto-commit-action@v6
|
||||
uses: stefanzweifel/git-auto-commit-action@v7
|
||||
with:
|
||||
branch: "${{ github.head_ref }}"
|
||||
push_options: "--dry-run"
|
||||
file_pattern: "assets/lib/katex/*"
|
||||
commit_message: "📦 Update packaged KaTeX"
|
||||
- name: Commit Mermaid changes
|
||||
uses: stefanzweifel/git-auto-commit-action@v6
|
||||
uses: stefanzweifel/git-auto-commit-action@v7
|
||||
with:
|
||||
branch: "${{ github.head_ref }}"
|
||||
push_options: "--dry-run"
|
||||
@@ -45,7 +45,7 @@ jobs:
|
||||
commit_message: "📦 Update packaged Mermaid"
|
||||
- run: npm run build
|
||||
- name: Commit CSS changes
|
||||
uses: stefanzweifel/git-auto-commit-action@v6
|
||||
uses: stefanzweifel/git-auto-commit-action@v7
|
||||
with:
|
||||
branch: "${{ github.head_ref }}"
|
||||
push_options: "--dry-run"
|
||||
|
||||
@@ -8,9 +8,9 @@ jobs:
|
||||
zip:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
- run: zip -r config-default.zip config/_default
|
||||
- uses: actions/upload-artifact@v4
|
||||
- uses: actions/upload-artifact@v6
|
||||
with:
|
||||
name: config-default
|
||||
path: config-default.zip
|
||||
|
||||
@@ -9,7 +9,7 @@ jobs:
|
||||
issues: write
|
||||
pull-requests: write
|
||||
steps:
|
||||
- uses: actions/first-interaction@v2
|
||||
- uses: actions/first-interaction@v3
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
issue-message: "Thanks for contributing to Blowfish"
|
||||
|
||||
@@ -11,7 +11,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check out code into the Go module directory
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
ref: dev
|
||||
submodules: true # Fetch Hugo themes (true OR recursive)
|
||||
@@ -38,7 +38,7 @@ jobs:
|
||||
|
||||
- name: Create Pull Request
|
||||
if: steps.git-check.outputs.modified == 'true'
|
||||
uses: peter-evans/create-pull-request@v7
|
||||
uses: peter-evans/create-pull-request@v8
|
||||
with:
|
||||
commit-message: Update Hugo supported version
|
||||
title: ⚙️ Update Hugo supported version
|
||||
|
||||
@@ -37,7 +37,7 @@ jobs:
|
||||
wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_Linux-64bit.deb \
|
||||
&& sudo dpkg -i ${{ runner.temp }}/hugo.deb
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Setup Pages
|
||||
@@ -51,7 +51,7 @@ jobs:
|
||||
run: |
|
||||
hugo --minify -s exampleSite --themesDir ../.. -d ../docs --baseURL https://nunocoracao.github.io/blowfish/
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-pages-artifact@v3
|
||||
uses: actions/upload-pages-artifact@v4
|
||||
with:
|
||||
path: ./docs
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ jobs:
|
||||
pull-requests: write
|
||||
|
||||
steps:
|
||||
- uses: actions/stale@v9
|
||||
- uses: actions/stale@v10
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
stale-issue-message:
|
||||
@@ -32,3 +32,4 @@ jobs:
|
||||
days-before-close: 0
|
||||
remove-stale-when-updated: true
|
||||
operations-per-run: 100
|
||||
exempt-issue-labels: 'keep,security'
|
||||
@@ -10,7 +10,7 @@ jobs:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
submodules: true
|
||||
fetch-depth: 0
|
||||
|
||||
@@ -23,6 +23,15 @@ exampleSite/resources/
|
||||
node_modules
|
||||
.hugo_build.lock
|
||||
|
||||
# Firebase scripts
|
||||
scripts/serviceAccountKey.json
|
||||
scripts/node_modules/
|
||||
scripts/*.csv
|
||||
|
||||
# Google Analytics export (temporary)
|
||||
ga-pageviews.csv
|
||||
*.csv
|
||||
|
||||
# OS generated files
|
||||
.DS_Store
|
||||
.DS_Store?
|
||||
|
||||
@@ -25,7 +25,7 @@ static
|
||||
#
|
||||
# This create an unclose node
|
||||
|
||||
layouts/_default/_markup/render-heading.html
|
||||
layouts/_default/_markup
|
||||
layouts/_default/index.json
|
||||
layouts/shortcodes/screenshot.html
|
||||
layouts/shortcodes/figure.html
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
"trailingComma": "all",
|
||||
"proseWrap": "always",
|
||||
"plugins": [
|
||||
"@awmottaz/prettier-plugin-void-html",
|
||||
"prettier-plugin-go-template"
|
||||
],
|
||||
"overrides": [
|
||||
|
||||
@@ -178,6 +178,53 @@
|
||||
],
|
||||
"description": "Output a set of up to three different colors. Blowfish swatches Shortcode. Documentation: https://blowfish.page/docs/shortcodes/#swatches ",
|
||||
},
|
||||
"Tabs - Basic": {
|
||||
"prefix": "tabs",
|
||||
"body": [
|
||||
"{{< tabs >}}",
|
||||
"",
|
||||
" {{< tab label=\"${1:Tab 1}\" >}}",
|
||||
" $2",
|
||||
" {{< /tab >}}",
|
||||
"",
|
||||
" {{< tab label=\"${3:Tab 2}\" >}}",
|
||||
" $4",
|
||||
" {{< /tab >}}",
|
||||
"",
|
||||
"{{< /tabs >}}"
|
||||
],
|
||||
"description": "Insert Hugo tabs shortcode"
|
||||
},
|
||||
"Tabs - Full Options": {
|
||||
"prefix": "tabsfull",
|
||||
"body": [
|
||||
"{{< tabs group=\"${1:group-name}\" default=\"${2:Default Tab}\" >}}",
|
||||
"",
|
||||
" {{< tab label=\"${3:Tab 1}\" icon=\"${4:code}\" >}}",
|
||||
" $5",
|
||||
" {{< /tab >}}",
|
||||
"",
|
||||
" {{< tab label=\"${2:Default Tab}\" icon=\"${6:sun}\" >}}",
|
||||
" $7",
|
||||
" {{< /tab >}}",
|
||||
"",
|
||||
" {{< tab label=\"${8:Tab 3}\" icon=\"${9:moon}\" >}}",
|
||||
" $0",
|
||||
" {{< /tab >}}",
|
||||
"",
|
||||
"{{< /tabs >}}"
|
||||
],
|
||||
"description": "Insert Hugo tabs with group, default, and icons"
|
||||
},
|
||||
"Tab": {
|
||||
"prefix": "tab",
|
||||
"body": [
|
||||
"{{< tab label=\"${1:Tab Label}\" >}}",
|
||||
"$2",
|
||||
"{{< /tab >}}"
|
||||
],
|
||||
"description": "Insert Hugo tab item"
|
||||
},
|
||||
"timeline": {
|
||||
"prefix": ["BFS-timeline", "HSC-timeline", "timeline"],
|
||||
"body": [
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
## How to contribute to Blowfish
|
||||
|
||||
All development occurs on the `dev` branch and new PRs should be forked from here.
|
||||
|
||||
### Bugs & other issues
|
||||
|
||||
#### Found a bug? 🐛
|
||||
@@ -11,7 +13,6 @@
|
||||
#### Have a patch that fixes an issue?
|
||||
|
||||
- Great! Open a new GitHub pull request with the patch.
|
||||
- All development occurs on the `dev` branch and new PRs should be forked from here.
|
||||
- The commands `npm run example`, `npm run example:core`, and `npm run example:production` can be used to test local changes using the example site.
|
||||
- Ensure the PR description clearly describes the problem and solution. Include the relevant issue number, if applicable.
|
||||
- **Before submitting**, check the [coding conventions](#coding-conventions) section below to learn more about coding and commit message expectations.
|
||||
|
||||
@@ -1,6 +1,18 @@
|
||||
github: [nunocoracao]
|
||||
custom:
|
||||
# These are supported funding model platforms
|
||||
|
||||
github: [nunocoracao] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
|
||||
patreon: # Replace with a single Patreon username
|
||||
open_collective: # Replace with a single Open Collective username
|
||||
ko_fi: # Replace with a single Ko-fi username
|
||||
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
||||
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
||||
liberapay: # Replace with a single Liberapay username
|
||||
issuehunt: # Replace with a single IssueHunt username
|
||||
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
|
||||
polar: # Replace with a single Polar username
|
||||
buy_me_a_coffee: nunocoracao # Replace with a single Buy Me a Coffee username
|
||||
thanks_dev: # Replace with a single thanks.dev username
|
||||
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
|
||||
[
|
||||
"https://www.paypal.me/nunocoracao",
|
||||
"https://www.buymeacoffee.com/nunocoracao",
|
||||
]
|
||||
@@ -0,0 +1,179 @@
|
||||
[English](https://github.com/nunocoracao/blowfish/blob/main/README.md) | [Français](https://github.com/nunocoracao/blowfish/blob/main/README.fr.md) | Deutsch | [Português (PT)](https://github.com/nunocoracao/blowfish/blob/main/README.pt-pt.md) | [Português (BR)](https://github.com/nunocoracao/blowfish/blob/main/README.pt-br.md) | [Español](https://github.com/nunocoracao/blowfish/blob/main/README.es.md) | [日本語](https://github.com/nunocoracao/blowfish/blob/main/README.ja.md) | [简体中文](https://github.com/nunocoracao/blowfish/blob/main/README.zh-cn.md) | [Indonesian](https://github.com/nunocoracao/blowfish/blob/main/README.id.md)
|
||||
# Blowfish
|
||||
[](https://app.netlify.com/sites/snazzy-dango-efb2ec/deploys)
|
||||
[](https://github.com/gohugoio/hugo/releases/tag/v0.141.0)
|
||||
[](https://github.com/nunocoracao/blowfish/blob/main/LICENSE)
|
||||
[](https://themes.gohugo.io/themes/blowfish/)
|
||||

|
||||
|
||||
Blowfish ist ein leistungsstarkes, schlankes Theme für [Hugo](https://gohugo.io). Es wurde mit Tailwind CSS entwickelt und bietet ein klares, minimalistisches Design, das Ihre Inhalte in den Vordergrund stellt.
|
||||
|
||||

|
||||
|
||||
|
||||
🌏 [Demo-Website](https://blowfish.page/)
|
||||
📑 [Theme-Dokumentation](https://blowfish.page/docs/)
|
||||
💎 [Merchandise-Shop](http://tee.pub/lic/qwSlWVBL5zc)
|
||||
🐛 [Fehlerberichte & Issues](https://github.com/nunocoracao/blowfish/issues)
|
||||
💡 [Fragen & Feature-Anfragen](https://github.com/nunocoracao/blowfish/discussions)
|
||||
|
||||
|
||||
|
||||
<a href="https://www.buymeacoffee.com/nunocoracao" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 60px !important;width: 217px !important;" ></a>
|
||||
<a target="_blank" href="http://tee.pub/lic/qwSlWVBL5zc"><img class="nozoom" src="https://img.buymeacoffee.com/button-api/?text=Merch Store &emoji=💎&slug=nunocoracao&button_colour=5F7FFF&font_colour=ffffff&font_family=Lato&outline_colour=000000&coffee_colour=FFDD00" /></a>
|
||||
|
||||
|
||||
|
||||
## Funktionen
|
||||
|
||||
- Vollständig responsives Layout mit Tailwind CSS 3.0
|
||||
- Mehrere Farbschemata (oder vollständig anpassbar)
|
||||
- Dark Mode (erzwungen ein/aus oder automatisch mit Benutzerumschaltung)
|
||||
- Hochgradig anpassbare Konfiguration
|
||||
- Firebase-Integration zur Unterstützung dynamischer Daten
|
||||
- Ansichtszähler & Like-Mechanismus
|
||||
- Verwandte Artikel
|
||||
- Mehrere Homepage-Layouts
|
||||
- Mehrere Autoren
|
||||
- Artikelserien
|
||||
- Datums- und gewichtsbasierte Artikelsortierung
|
||||
- Zen-Modus zum Lesen von Artikeln
|
||||
- Flexibel mit beliebigen Inhaltstypen, Taxonomien und Menüs
|
||||
- Kopf- und Fußzeilenmenüs
|
||||
- Verschachtelte Menüs & Unternavigationsmenüs
|
||||
- Scrollbares Inhaltsverzeichnis
|
||||
- Mehrsprachige Inhaltsunterstützung einschließlich RTL-Sprachen
|
||||
- Möglichkeit, auf Beiträge auf Websites von Drittanbietern zu verlinken
|
||||
- Unterstützung für mehrere Shortcodes wie Gallery, Timeline, GitHub-Karten und Carousels
|
||||
- GitHub Alerts-Syntax, 15 Typen, zusammenklappbar
|
||||
- Buymeacoffee-Integration
|
||||
- Clientseitige Website-Suche mit Fuse.js
|
||||
- Diagramme und Visualisierungen mit Mermaid
|
||||
- Charts mit Chart.js
|
||||
- TypeIt-Integration
|
||||
- Youtube-Einbettungen mit Leistungsverbesserungen
|
||||
- Mathematische Notation mit KaTeX
|
||||
- SVG-Icons von FontAwesome 6
|
||||
- Automatische Bildgrößenanpassung mit Hugo Pipes
|
||||
- Überschriften-Anker, Inhaltsverzeichnisse, Code-Kopieren, Buttons, Badges und mehr
|
||||
- HTML- und Emoji-Unterstützung in Artikeln 🎉
|
||||
- SEO-freundlich mit Links zum Teilen in sozialen Medien
|
||||
- Unterstützung für Fathom Analytics und Google Analytics
|
||||
- RSS-Feeds, Favicons und Kommentare
|
||||
- Erweiterte Anpassung mit einfachen Tailwind-Farbdefinitionen und -Stilen
|
||||
- Optimiert für Leistung und Barrierefreiheit mit perfekten Lighthouse-Scores
|
||||
- Vollständig dokumentiert mit regelmäßigen Updates
|
||||
|
||||
---
|
||||
|
||||

|
||||
|
||||
## Dokumentation
|
||||
|
||||
Blowfish verfügt über eine [umfangreiche Dokumentation](https://blowfish.page/docs/), die alle Aspekte des Themes abdeckt. Lesen Sie unbedingt die [Dokumentation](https://blowfish.page/docs/), um mehr über die Verwendung des Themes und seiner Funktionen zu erfahren.
|
||||
|
||||
---
|
||||
|
||||
## Installation
|
||||
|
||||
Blowfish unterstützt mehrere Installationsmethoden - als git submodule, als Hugo Module oder als vollständig manuelle Installation.
|
||||
|
||||
Detaillierte Anweisungen für jede Methode finden Sie in der [Installations-Dokumentation](https://blowfish.page/docs/installation). Für die einfachste Einrichtung sollten Sie die Dokumentation konsultieren. Im Folgenden finden Sie eine Schnellstartanleitung mit Submodulen, wenn Sie git verwenden, oder Hugo Modules, wenn Sie bereits Erfahrung mit der Installation von Hugo-Themes haben.
|
||||
|
||||
### Schnellstart mit Blowfish Tools
|
||||
|
||||
> **Hinweis:** Stellen Sie sicher, dass Sie **Node.js**, **Git** und **Hugo** installiert haben und dass Sie ein neues Hugo-Projekt erstellt haben, bevor Sie fortfahren.
|
||||
|
||||
Wir haben gerade ein neues CLI-Tool gestartet, das Ihnen beim Einstieg in Blowfish hilft. Es erstellt ein neues Hugo-Projekt, installiert das Theme und richtet die Theme-Konfigurationsdateien für Sie ein. Es befindet sich noch in der Beta-Phase, also [melden Sie bitte alle Probleme, die Sie finden](https://github.com/nunocoracao/blowfish-tools).
|
||||
|
||||
Installieren Sie das CLI-Tool global mit npm (oder einem anderen Paketmanager):
|
||||
```shell
|
||||
npm i -g blowfish-tools
|
||||
```
|
||||
|
||||
Führen Sie dann den Befehl `blowfish-tools` aus, um eine interaktive Sitzung zu starten, die Sie durch Erstellungs- und Konfigurationsanwendungsfälle führt.
|
||||
```shell
|
||||
blowfish-tools
|
||||
```
|
||||
|
||||
Sie können auch den Befehl `blowfish-tools new` ausführen, um ein neues Hugo-Projekt zu erstellen und das Theme in einem Schritt zu installieren. Weitere Informationen finden Sie in der CLI-Hilfe.
|
||||
```shell
|
||||
blowfish-tools new mynewsite
|
||||
```
|
||||
|
||||
### Schnellstart mit git submodules
|
||||
|
||||
> **Hinweis:** Stellen Sie sicher, dass Sie **Git** und **Hugo** installiert haben und dass Sie ein neues Hugo-Projekt erstellt haben, bevor Sie fortfahren.
|
||||
|
||||
1. Initialisieren Sie git aus Ihrem Projektverzeichnis:
|
||||
|
||||
```shell
|
||||
git init
|
||||
```
|
||||
|
||||
2. Konfigurieren Sie Blowfish als git submodule:
|
||||
|
||||
```shell
|
||||
git submodule add -b main https://github.com/nunocoracao/blowfish.git themes/blowfish
|
||||
```
|
||||
|
||||
3. Löschen Sie im Stammordner Ihrer Website die von Hugo generierte Datei `hugo.toml`. Kopieren Sie die `*.toml` Konfigurationsdateien aus dem Theme in Ihren `config/_default/` Ordner.
|
||||
|
||||
Sie finden diese Theme-Konfigurationsdateien im Hugo-Cache-Verzeichnis oder [laden Sie eine Kopie](https://github.com/nunocoracao/blowfish/releases/latest/download/config-default.zip) von GitHub herunter.
|
||||
|
||||
4. Folgen Sie den Anweisungen unter [Erste Schritte](https://blowfish.page/docs/getting-started/), um Ihre Website zu konfigurieren.
|
||||
|
||||
### Schnellstart mit Hugo
|
||||
|
||||
> **Hinweis:** Stellen Sie sicher, dass Sie **Go** und **Hugo** installiert haben und dass Sie ein neues Hugo-Projekt erstellt haben, bevor Sie fortfahren.
|
||||
|
||||
1. Initialisieren Sie Hugo Modules aus Ihrem Projektverzeichnis:
|
||||
|
||||
```shell
|
||||
hugo mod init github.com/<username>/<repo-name>
|
||||
```
|
||||
|
||||
2. Erstellen Sie `config/_default/module.toml` und fügen Sie Folgendes hinzu:
|
||||
|
||||
```toml
|
||||
[[imports]]
|
||||
path = "github.com/nunocoracao/blowfish/v2"
|
||||
```
|
||||
|
||||
3. Starten Sie Ihren Server mit `hugo server` und das Theme wird automatisch heruntergeladen.
|
||||
|
||||
4. Löschen Sie im Stammordner Ihrer Website die von Hugo generierte Datei `hugo.toml`. Kopieren Sie die `*.toml` Konfigurationsdateien aus dem Theme in Ihren `config/_default/` Ordner.
|
||||
|
||||
> **Hinweis:** Überschreiben Sie nicht die oben erstellte Datei `module.toml`!
|
||||
|
||||
Sie finden diese Theme-Konfigurationsdateien im Hugo-Cache-Verzeichnis oder [laden Sie eine Kopie](https://github.com/nunocoracao/blowfish/releases/latest/download/config-default.zip) von GitHub herunter.
|
||||
|
||||
5. Folgen Sie den Anweisungen unter [Erste Schritte](https://blowfish.page/docs/getting-started/), um Ihre Website zu konfigurieren.
|
||||
|
||||
### Theme-Updates installieren
|
||||
|
||||
Wenn neue Versionen veröffentlicht werden, können Sie das Theme mit Hugo aktualisieren. Führen Sie einfach `hugo mod get -u` aus Ihrem Projektverzeichnis aus und das Theme wird automatisch auf die neueste Version aktualisiert.
|
||||
|
||||
Detaillierte [Update-Anweisungen](https://blowfish.page/docs/installation/#installing-updates) sind in der Dokumentation verfügbar.
|
||||
|
||||
---
|
||||
|
||||
## Mitwirken
|
||||
|
||||
Blowfish wird sich voraussichtlich im Laufe der Zeit weiterentwickeln. Ich beabsichtige, weiterhin Funktionen hinzuzufügen und nach Bedarf Änderungen vorzunehmen.
|
||||
|
||||
Melden Sie sich gerne mit Problemen oder Vorschlägen für neue Funktionen, die Sie gerne sehen würden.
|
||||
|
||||
- 🐛 **Fehlerberichte & Issues:** Verwenden Sie [GitHub Issues](https://github.com/nunocoracao/blowfish/issues)
|
||||
- 💡 **Ideen für neue Funktionen:** Eröffnen Sie eine Diskussion auf [GitHub Discussions](https://github.com/nunocoracao/blowfish/discussions)
|
||||
- 🙋♀️ **Allgemeine Fragen:** Gehen Sie zu [GitHub Discussions](https://github.com/nunocoracao/blowfish/discussions)
|
||||
|
||||
Wenn Sie in der Lage sind, einen Fehler zu beheben oder eine neue Funktion zu implementieren, sind Pull Requests zu diesem Zweck willkommen. Erfahren Sie mehr in den [Richtlinien für Mitwirkende](https://github.com/nunocoracao/blowfish/blob/main/CONTRIBUTING.md).
|
||||
|
||||
---
|
||||
|
||||
## Stargazers im Zeitverlauf
|
||||
|
||||
[](https://starchart.cc/nunocoracao/blowfish)
|
||||
|
||||
<a rel="me" href="https://masto.ai/@blowfish">Mastodon</a>
|
||||
@@ -0,0 +1,179 @@
|
||||
[English](https://github.com/nunocoracao/blowfish/blob/main/README.md) | [Français](https://github.com/nunocoracao/blowfish/blob/main/README.fr.md) | [Deutsch](https://github.com/nunocoracao/blowfish/blob/main/README.de.md) | [Português (PT)](https://github.com/nunocoracao/blowfish/blob/main/README.pt-pt.md) | [Português (BR)](https://github.com/nunocoracao/blowfish/blob/main/README.pt-br.md) | Español | [日本語](https://github.com/nunocoracao/blowfish/blob/main/README.ja.md) | [简体中文](https://github.com/nunocoracao/blowfish/blob/main/README.zh-cn.md) | [Indonesian](https://github.com/nunocoracao/blowfish/blob/main/README.id.md)
|
||||
# Blowfish
|
||||
[](https://app.netlify.com/sites/snazzy-dango-efb2ec/deploys)
|
||||
[](https://github.com/gohugoio/hugo/releases/tag/v0.141.0)
|
||||
[](https://github.com/nunocoracao/blowfish/blob/main/LICENSE)
|
||||
[](https://themes.gohugo.io/themes/blowfish/)
|
||||

|
||||
|
||||
Blowfish está diseñado para ser un tema potente y ligero para [Hugo](https://gohugo.io). Está construido usando Tailwind CSS con un diseño limpio y minimalista que prioriza tu contenido.
|
||||
|
||||

|
||||
|
||||
|
||||
🌏 [Sitio de demostración](https://blowfish.page/)
|
||||
📑 [Documentación del tema](https://blowfish.page/docs/)
|
||||
💎 [Tienda de merchandising](http://tee.pub/lic/qwSlWVBL5zc)
|
||||
🐛 [Reportes de errores y problemas](https://github.com/nunocoracao/blowfish/issues)
|
||||
💡 [Preguntas y solicitudes de funcionalidades](https://github.com/nunocoracao/blowfish/discussions)
|
||||
|
||||
|
||||
|
||||
<a href="https://www.buymeacoffee.com/nunocoracao" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 60px !important;width: 217px !important;" ></a>
|
||||
<a target="_blank" href="http://tee.pub/lic/qwSlWVBL5zc"><img class="nozoom" src="https://img.buymeacoffee.com/button-api/?text=Merch Store &emoji=💎&slug=nunocoracao&button_colour=5F7FFF&font_colour=ffffff&font_family=Lato&outline_colour=000000&coffee_colour=FFDD00" /></a>
|
||||
|
||||
|
||||
|
||||
## Características
|
||||
|
||||
- Diseño totalmente responsive construido con Tailwind CSS 3.0
|
||||
- Múltiples esquemas de color (o personaliza completamente el tuyo propio)
|
||||
- Modo oscuro (forzado activado/desactivado o cambio automático con opción de usuario)
|
||||
- Configuración altamente personalizable
|
||||
- Integración con Firebase para soportar datos dinámicos
|
||||
- Contador de vistas y mecanismo de likes
|
||||
- Artículos relacionados
|
||||
- Múltiples diseños de página de inicio
|
||||
- Múltiples autores
|
||||
- Series de artículos
|
||||
- Ordenación de artículos basada en fecha y peso
|
||||
- Modo zen para lectura de artículos
|
||||
- Flexible con cualquier tipo de contenido, taxonomías y menús
|
||||
- Menús de encabezado y pie de página
|
||||
- Menús anidados y menú de sub-navegación
|
||||
- Tabla de contenidos con desplazamiento
|
||||
- Soporte de contenido multilingüe incluyendo idiomas RTL
|
||||
- Capacidad de enlazar a publicaciones en sitios web de terceros
|
||||
- Soporte para varios shortcodes como Gallery, Timeline, GitHub cards y Carousels
|
||||
- Sintaxis de GitHub Alerts, 15 tipos, soporte plegable
|
||||
- Integración con Buymeacoffee
|
||||
- Búsqueda en el sitio del lado del cliente impulsada por Fuse.js
|
||||
- Diagramas y visualizaciones usando Mermaid
|
||||
- Gráficos usando Chart.js
|
||||
- Integración con TypeIt
|
||||
- Incrustaciones de Youtube con mejoras de rendimiento
|
||||
- Notación matemática usando KaTeX
|
||||
- Iconos SVG de FontAwesome 6
|
||||
- Redimensionamiento automático de imágenes usando Hugo Pipes
|
||||
- Anclajes de encabezados, Tablas de contenidos, Copia de código, Botones, Insignias y más
|
||||
- Soporte de HTML y Emoji en artículos 🎉
|
||||
- SEO amigable con enlaces para compartir en redes sociales
|
||||
- Soporte para Fathom Analytics y Google Analytics
|
||||
- Feeds RSS, Favicons y soporte de comentarios
|
||||
- Personalización avanzada usando definiciones de colores y estilos simples de Tailwind
|
||||
- Optimizado para rendimiento y accesibilidad con puntuaciones perfectas en Lighthouse
|
||||
- Completamente documentado con actualizaciones regulares
|
||||
|
||||
---
|
||||
|
||||

|
||||
|
||||
## Documentación
|
||||
|
||||
Blowfish tiene [documentación extensa](https://blowfish.page/docs/) que cubre todos los aspectos del tema. Asegúrate de [leer la documentación](https://blowfish.page/docs/) para aprender más sobre cómo usar el tema y sus características.
|
||||
|
||||
---
|
||||
|
||||
## Instalación
|
||||
|
||||
Blowfish soporta varios métodos de instalación - como submódulo de git, módulo de Hugo, o como una instalación completamente manual.
|
||||
|
||||
Las instrucciones detalladas para cada método se pueden encontrar en la documentación de [Instalación](https://blowfish.page/docs/installation). Deberías consultar la documentación para obtener la experiencia de configuración más simple. A continuación se presenta una guía de inicio rápido usando submódulos si estás usando git, o módulos de Hugo si ya tienes confianza instalando temas de Hugo.
|
||||
|
||||
### Inicio rápido usando Blowfish Tools
|
||||
|
||||
> **Nota:** Asegúrate de tener **Node.js**, **Git** y **Hugo** instalados, y de haber creado un nuevo proyecto Hugo antes de continuar.
|
||||
|
||||
Acabamos de lanzar una nueva herramienta CLI para ayudarte a comenzar con Blowfish. Creará un nuevo proyecto Hugo, instalará el tema y configurará los archivos de configuración del tema por ti. Todavía está en beta, así que por favor [reporta cualquier problema que encuentres](https://github.com/nunocoracao/blowfish-tools).
|
||||
|
||||
Instala la herramienta CLI globalmente usando npm (u otro gestor de paquetes):
|
||||
```shell
|
||||
npm i -g blowfish-tools
|
||||
```
|
||||
|
||||
Luego ejecuta el comando `blowfish-tools` para iniciar una ejecución interactiva que te guiará a través de los casos de uso de creación y configuración.
|
||||
```shell
|
||||
blowfish-tools
|
||||
```
|
||||
|
||||
También puedes ejecutar el comando `blowfish-tools new` para crear un nuevo proyecto Hugo e instalar el tema de una sola vez. Consulta la ayuda de CLI para más información.
|
||||
```shell
|
||||
blowfish-tools new mynewsite
|
||||
```
|
||||
|
||||
### Inicio rápido usando submódulos de git
|
||||
|
||||
> **Nota:** Asegúrate de tener **Git** y **Hugo** instalados, y de haber creado un nuevo proyecto Hugo antes de continuar.
|
||||
|
||||
1. Desde el directorio de tu proyecto, inicializa git:
|
||||
|
||||
```shell
|
||||
git init
|
||||
```
|
||||
|
||||
2. Configura Blowfish como un submódulo de git:
|
||||
|
||||
```shell
|
||||
git submodule add -b main https://github.com/nunocoracao/blowfish.git themes/blowfish
|
||||
```
|
||||
|
||||
3. En la carpeta raíz de tu sitio web, elimina el archivo `hugo.toml` que fue generado por Hugo. Copia los archivos de configuración `*.toml` del tema en tu carpeta `config/_default/`.
|
||||
|
||||
Encontrarás estos archivos de configuración del tema en el directorio de caché de Hugo, o [descarga una copia](https://github.com/nunocoracao/blowfish/releases/latest/download/config-default.zip) desde GitHub.
|
||||
|
||||
4. Sigue las instrucciones de [Primeros Pasos](https://blowfish.page/docs/getting-started/) para configurar tu sitio web.
|
||||
|
||||
### Inicio rápido usando Hugo
|
||||
|
||||
> **Nota:** Asegúrate de tener **Go** y **Hugo** instalados, y de haber creado un nuevo proyecto Hugo antes de continuar.
|
||||
|
||||
1. Desde el directorio de tu proyecto, inicializa los Módulos de Hugo:
|
||||
|
||||
```shell
|
||||
hugo mod init github.com/<username>/<repo-name>
|
||||
```
|
||||
|
||||
2. Crea `config/_default/module.toml` y agrega lo siguiente:
|
||||
|
||||
```toml
|
||||
[[imports]]
|
||||
path = "github.com/nunocoracao/blowfish/v2"
|
||||
```
|
||||
|
||||
3. Inicia tu servidor usando `hugo server` y el tema se descargará automáticamente.
|
||||
|
||||
4. En la carpeta raíz de tu sitio web, elimina el archivo `hugo.toml` que fue generado por Hugo. Copia los archivos de configuración `*.toml` del tema en tu carpeta `config/_default/`.
|
||||
|
||||
> **Nota:** ¡No sobrescribas el archivo `module.toml` que creaste arriba!
|
||||
|
||||
Encontrarás estos archivos de configuración del tema en el directorio de caché de Hugo, o [descarga una copia](https://github.com/nunocoracao/blowfish/releases/latest/download/config-default.zip) desde GitHub.
|
||||
|
||||
5. Sigue las instrucciones de [Primeros Pasos](https://blowfish.page/docs/getting-started/) para configurar tu sitio web.
|
||||
|
||||
### Instalación de actualizaciones del tema
|
||||
|
||||
A medida que se publiquen nuevas versiones, puedes actualizar el tema usando Hugo. Simplemente ejecuta `hugo mod get -u` desde el directorio de tu proyecto y el tema se actualizará automáticamente a la última versión.
|
||||
|
||||
Las [instrucciones de actualización](https://blowfish.page/docs/installation/#installing-updates) detalladas están disponibles en la documentación.
|
||||
|
||||
---
|
||||
|
||||
## Contribuciones
|
||||
|
||||
Se espera que Blowfish evolucione con el tiempo. Tengo la intención de seguir agregando características y haciendo cambios según sea necesario.
|
||||
|
||||
Siéntete libre de ponerte en contacto con cualquier problema o sugerencia de nuevas características que te gustaría ver.
|
||||
|
||||
- 🐛 **Reportes de errores y problemas:** Usa [GitHub Issues](https://github.com/nunocoracao/blowfish/issues)
|
||||
- 💡 **Ideas para nuevas características:** Abre una discusión en [GitHub Discussions](https://github.com/nunocoracao/blowfish/discussions)
|
||||
- 🙋♀️ **Preguntas generales:** Dirígete a [GitHub Discussions](https://github.com/nunocoracao/blowfish/discussions)
|
||||
|
||||
Si puedes corregir un error o implementar una nueva característica, acepto PRs para este propósito. Aprende más en las [guías de contribución](https://github.com/nunocoracao/blowfish/blob/main/CONTRIBUTING.md).
|
||||
|
||||
---
|
||||
|
||||
## Stargazers a lo largo del tiempo
|
||||
|
||||
[](https://starchart.cc/nunocoracao/blowfish)
|
||||
|
||||
<a rel="me" href="https://masto.ai/@blowfish">Mastodon</a>
|
||||
@@ -0,0 +1,179 @@
|
||||
[English](https://github.com/nunocoracao/blowfish/blob/main/README.md) | Français | [Deutsch](https://github.com/nunocoracao/blowfish/blob/main/README.de.md) | [Português (PT)](https://github.com/nunocoracao/blowfish/blob/main/README.pt-pt.md) | [Português (BR)](https://github.com/nunocoracao/blowfish/blob/main/README.pt-br.md) | [Español](https://github.com/nunocoracao/blowfish/blob/main/README.es.md) | [日本語](https://github.com/nunocoracao/blowfish/blob/main/README.ja.md) | [简体中文](https://github.com/nunocoracao/blowfish/blob/main/README.zh-cn.md) | [Indonesian](https://github.com/nunocoracao/blowfish/blob/main/README.id.md)
|
||||
# Blowfish
|
||||
[](https://app.netlify.com/sites/snazzy-dango-efb2ec/deploys)
|
||||
[](https://github.com/gohugoio/hugo/releases/tag/v0.141.0)
|
||||
[](https://github.com/nunocoracao/blowfish/blob/main/LICENSE)
|
||||
[](https://themes.gohugo.io/themes/blowfish/)
|
||||

|
||||
|
||||
Blowfish est conçu pour être un thème puissant et léger pour [Hugo](https://gohugo.io). Il est construit avec Tailwind CSS avec un design épuré et minimaliste qui donne la priorité à votre contenu.
|
||||
|
||||

|
||||
|
||||
|
||||
🌏 [Site de démonstration](https://blowfish.page/)
|
||||
📑 [Documentation du thème](https://blowfish.page/docs/)
|
||||
💎 [Boutique de produits dérivés](http://tee.pub/lic/qwSlWVBL5zc)
|
||||
🐛 [Rapports de bugs et problèmes](https://github.com/nunocoracao/blowfish/issues)
|
||||
💡 [Questions et demandes de fonctionnalités](https://github.com/nunocoracao/blowfish/discussions)
|
||||
|
||||
|
||||
|
||||
<a href="https://www.buymeacoffee.com/nunocoracao" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 60px !important;width: 217px !important;" ></a>
|
||||
<a target="_blank" href="http://tee.pub/lic/qwSlWVBL5zc"><img class="nozoom" src="https://img.buymeacoffee.com/button-api/?text=Merch Store &emoji=💎&slug=nunocoracao&button_colour=5F7FFF&font_colour=ffffff&font_family=Lato&outline_colour=000000&coffee_colour=FFDD00" /></a>
|
||||
|
||||
|
||||
|
||||
## Fonctionnalités
|
||||
|
||||
- Disposition entièrement responsive construite avec Tailwind CSS 3.0
|
||||
- Plusieurs palettes de couleurs (ou personnalisez entièrement la vôtre)
|
||||
- Mode sombre (forcé activé/désactivé ou basculement automatique avec commutateur utilisateur)
|
||||
- Configuration hautement personnalisable
|
||||
- Intégration Firebase pour prendre en charge les données dynamiques
|
||||
- Compteur de vues et mécanisme de likes
|
||||
- Articles connexes
|
||||
- Plusieurs mises en page pour la page d'accueil
|
||||
- Plusieurs auteurs
|
||||
- Séries d'articles
|
||||
- Tri des articles basé sur la date et le poids
|
||||
- Mode Zen pour la lecture d'articles
|
||||
- Flexible avec tous les types de contenu, taxonomies et menus
|
||||
- Menus d'en-tête et de pied de page
|
||||
- Menus imbriqués et menu de sous-navigation
|
||||
- Table des matières défilable
|
||||
- Support du contenu multilingue incluant la prise en charge des langues RTL
|
||||
- Possibilité de lier des articles sur des sites web tiers
|
||||
- Prise en charge de plusieurs shortcodes comme Gallery, Timeline, GitHub cards et Carousels
|
||||
- Syntaxe GitHub Alerts, 15 types, support pliable
|
||||
- Intégration Buymeacoffee
|
||||
- Recherche côté client alimentée par Fuse.js
|
||||
- Diagrammes et visualisations utilisant Mermaid
|
||||
- Graphiques utilisant Chart.js
|
||||
- Intégration TypeIt
|
||||
- Intégrations Youtube avec améliorations de performance
|
||||
- Notation mathématique utilisant KaTeX
|
||||
- Icônes SVG de FontAwesome 6
|
||||
- Redimensionnement automatique des images utilisant Hugo Pipes
|
||||
- Ancres de titres, Tables des matières, Copie de code, Boutons, Badges et plus
|
||||
- Support HTML et Emoji dans les articles 🎉
|
||||
- SEO optimisé avec liens pour partage sur les réseaux sociaux
|
||||
- Support de Fathom Analytics et Google Analytics
|
||||
- Flux RSS, Favicons et support des commentaires
|
||||
- Personnalisation avancée utilisant de simples définitions de couleurs et styles Tailwind
|
||||
- Optimisé pour les performances et l'accessibilité avec des scores Lighthouse parfaits
|
||||
- Entièrement documenté avec des mises à jour régulières
|
||||
|
||||
---
|
||||
|
||||

|
||||
|
||||
## Documentation
|
||||
|
||||
Blowfish dispose d'une [documentation complète](https://blowfish.page/docs/) qui couvre tous les aspects du thème. Assurez-vous de [lire la documentation](https://blowfish.page/docs/) pour en savoir plus sur l'utilisation du thème et de ses fonctionnalités.
|
||||
|
||||
---
|
||||
|
||||
## Installation
|
||||
|
||||
Blowfish prend en charge plusieurs méthodes d'installation - en tant que sous-module git, module Hugo, ou en tant qu'installation complètement manuelle.
|
||||
|
||||
Des instructions détaillées pour chaque méthode se trouvent dans la documentation [Installation](https://blowfish.page/docs/installation). Vous devriez consulter la documentation pour l'expérience de configuration la plus simple. Ci-dessous se trouve un guide de démarrage rapide utilisant les sous-modules si vous utilisez git, ou les modules Hugo si vous êtes déjà à l'aise avec l'installation de thèmes Hugo.
|
||||
|
||||
### Démarrage rapide avec Blowfish Tools
|
||||
|
||||
> **Note :** Assurez-vous d'avoir **Node.js**, **Git** et **Hugo** installés, et d'avoir créé un nouveau projet Hugo avant de continuer.
|
||||
|
||||
Nous venons de lancer un nouvel outil CLI pour vous aider à démarrer avec Blowfish. Il créera un nouveau projet Hugo, installera le thème et configurera les fichiers de configuration du thème pour vous. Il est encore en version bêta, veuillez donc [signaler tout problème que vous rencontrez](https://github.com/nunocoracao/blowfish-tools).
|
||||
|
||||
Installez l'outil CLI globalement en utilisant npm (ou un autre gestionnaire de paquets) :
|
||||
```shell
|
||||
npm i -g blowfish-tools
|
||||
```
|
||||
|
||||
Ensuite, exécutez la commande `blowfish-tools` pour démarrer une exécution interactive qui vous guidera à travers les cas d'utilisation de création et de configuration.
|
||||
```shell
|
||||
blowfish-tools
|
||||
```
|
||||
|
||||
Vous pouvez également exécuter la commande `blowfish-tools new` pour créer un nouveau projet Hugo et installer le thème en une seule fois. Consultez l'aide du CLI pour plus d'informations.
|
||||
```shell
|
||||
blowfish-tools new mynewsite
|
||||
```
|
||||
|
||||
### Démarrage rapide avec les sous-modules git
|
||||
|
||||
> **Note :** Assurez-vous d'avoir **Git** et **Hugo** installés, et d'avoir créé un nouveau projet Hugo avant de continuer.
|
||||
|
||||
1. Depuis le répertoire de votre projet, initialisez git :
|
||||
|
||||
```shell
|
||||
git init
|
||||
```
|
||||
|
||||
2. Configurez Blowfish comme un sous-module git :
|
||||
|
||||
```shell
|
||||
git submodule add -b main https://github.com/nunocoracao/blowfish.git themes/blowfish
|
||||
```
|
||||
|
||||
3. Dans le dossier racine de votre site web, supprimez le fichier `hugo.toml` qui a été généré par Hugo. Copiez les fichiers de configuration `*.toml` du thème dans votre dossier `config/_default/`.
|
||||
|
||||
Vous trouverez ces fichiers de configuration du thème dans le répertoire cache de Hugo, ou [téléchargez une copie](https://github.com/nunocoracao/blowfish/releases/latest/download/config-default.zip) depuis GitHub.
|
||||
|
||||
4. Suivez les instructions [Pour commencer](https://blowfish.page/docs/getting-started/) pour configurer votre site web.
|
||||
|
||||
### Démarrage rapide avec Hugo
|
||||
|
||||
> **Note :** Assurez-vous d'avoir **Go** et **Hugo** installés, et d'avoir créé un nouveau projet Hugo avant de continuer.
|
||||
|
||||
1. Depuis le répertoire de votre projet, initialisez les modules Hugo :
|
||||
|
||||
```shell
|
||||
hugo mod init github.com/<username>/<repo-name>
|
||||
```
|
||||
|
||||
2. Créez `config/_default/module.toml` et ajoutez ce qui suit :
|
||||
|
||||
```toml
|
||||
[[imports]]
|
||||
path = "github.com/nunocoracao/blowfish/v2"
|
||||
```
|
||||
|
||||
3. Démarrez votre serveur en utilisant `hugo server` et le thème sera téléchargé automatiquement.
|
||||
|
||||
4. Dans le dossier racine de votre site web, supprimez le fichier `hugo.toml` qui a été généré par Hugo. Copiez les fichiers de configuration `*.toml` du thème dans votre dossier `config/_default/`.
|
||||
|
||||
> **Note :** Ne remplacez pas le fichier `module.toml` que vous avez créé ci-dessus !
|
||||
|
||||
Vous trouverez ces fichiers de configuration du thème dans le répertoire cache de Hugo, ou [téléchargez une copie](https://github.com/nunocoracao/blowfish/releases/latest/download/config-default.zip) depuis GitHub.
|
||||
|
||||
5. Suivez les instructions [Pour commencer](https://blowfish.page/docs/getting-started/) pour configurer votre site web.
|
||||
|
||||
### Installation des mises à jour du thème
|
||||
|
||||
Au fur et à mesure que de nouvelles versions sont publiées, vous pouvez mettre à jour le thème en utilisant Hugo. Exécutez simplement `hugo mod get -u` depuis le répertoire de votre projet et le thème se mettra automatiquement à jour vers la dernière version.
|
||||
|
||||
Des [instructions de mise à jour](https://blowfish.page/docs/installation/#installing-updates) détaillées sont disponibles dans la documentation.
|
||||
|
||||
---
|
||||
|
||||
## Contribuer
|
||||
|
||||
Blowfish est destiné à évoluer au fil du temps. J'ai l'intention de continuer à ajouter des fonctionnalités et à apporter des modifications selon les besoins.
|
||||
|
||||
N'hésitez pas à me contacter pour tout problème ou suggestion de nouvelles fonctionnalités que vous aimeriez voir.
|
||||
|
||||
- 🐛 **Rapports de bugs et problèmes :** Utilisez [GitHub Issues](https://github.com/nunocoracao/blowfish/issues)
|
||||
- 💡 **Idées de nouvelles fonctionnalités :** Ouvrez une discussion sur [GitHub Discussions](https://github.com/nunocoracao/blowfish/discussions)
|
||||
- 🙋♀️ **Questions générales :** Rendez-vous sur [GitHub Discussions](https://github.com/nunocoracao/blowfish/discussions)
|
||||
|
||||
Si vous êtes en mesure de corriger un bug ou de mettre en œuvre une nouvelle fonctionnalité, j'accueille les PR à cette fin. Apprenez-en plus dans les [directives de contribution](https://github.com/nunocoracao/blowfish/blob/main/CONTRIBUTING.md).
|
||||
|
||||
---
|
||||
|
||||
## Évolution des stargazers
|
||||
|
||||
[](https://starchart.cc/nunocoracao/blowfish)
|
||||
|
||||
<a rel="me" href="https://masto.ai/@blowfish">Mastodon</a>
|
||||
@@ -1,8 +1,8 @@
|
||||
**[English](https://github.com/nunocoracao/blowfish/blob/main/README.md) | Indonesian | [简体中文](https://github.com/nunocoracao/blowfish/blob/main/README.zh-cn.md) | [日本語](https://github.com/nunocoracao/blowfish/blob/main/README.ja.md)**
|
||||
[English](https://github.com/nunocoracao/blowfish/blob/main/README.md) | [Français](https://github.com/nunocoracao/blowfish/blob/main/README.fr.md) | [Deutsch](https://github.com/nunocoracao/blowfish/blob/main/README.de.md) | [Português (PT)](https://github.com/nunocoracao/blowfish/blob/main/README.pt-pt.md) | [Português (BR)](https://github.com/nunocoracao/blowfish/blob/main/README.pt-br.md) | [Español](https://github.com/nunocoracao/blowfish/blob/main/README.es.md) | [日本語](https://github.com/nunocoracao/blowfish/blob/main/README.ja.md) | [简体中文](https://github.com/nunocoracao/blowfish/blob/main/README.zh-cn.md) | Indonesian
|
||||
|
||||
# Blowfish
|
||||
[](https://app.netlify.com/sites/snazzy-dango-efb2ec/deploys)
|
||||
[](https://github.com/gohugoio/hugo/releases/tag/v0.87.0)
|
||||
[](https://github.com/gohugoio/hugo/releases/tag/v0.141.0)
|
||||
[](https://github.com/nunocoracao/blowfish/blob/main/LICENSE)
|
||||
[](https://themes.gohugo.io/themes/blowfish/)
|
||||

|
||||
@@ -40,7 +40,8 @@ Blowfish dirancang sebagai tema yang kuat dan ringan untuk [Hugo](https://gohugo
|
||||
- Daftar isi yang dapat digulir
|
||||
- Dukungan untuk konten multibahasa termasuk bahasa RTL
|
||||
- Kemampuan untuk menautkan ke artikel di situs web pihak ketiga
|
||||
- Dukungan untuk beberapa shortcode seperti Galeri, Timeline, Kartu GitHub, dan Carousel
|
||||
- Dukungan untuk beberapa shortcode seperti Galeri, Timeline, Kartu GitHub, dan Carousel
|
||||
- Sintaks GitHub Alerts, 15 jenis, dukungan lipat
|
||||
- Integrasi BuyMeACoffee
|
||||
- Pencarian situs berbasis klien dengan Fuse.js
|
||||
- Diagram dan visualisasi menggunakan Mermaid
|
||||
@@ -77,7 +78,7 @@ Instruksi terperinci untuk setiap metode dapat ditemukan dalam [dokumentasi inst
|
||||
|
||||
### Instalasi Cepat Menggunakan Blowfish Tools
|
||||
|
||||
> **Catatan:** Pastikan Anda sudah menginstal **Node.js**, **Git**, **Go**, dan **Hugo**, serta telah membuat proyek Hugo sebelum melanjutkan.
|
||||
> **Catatan:** Pastikan Anda sudah menginstal **Node.js**, **Git**, dan **Hugo**, serta telah membuat proyek Hugo sebelum melanjutkan.
|
||||
|
||||
Kami baru saja meluncurkan alat CLI baru untuk membantu Anda memulai dengan Blowfish. Ini akan membuat proyek Hugo baru, menginstal tema, dan mengatur file konfigurasi tema untuk Anda.
|
||||
|
||||
@@ -98,7 +99,7 @@ blowfish-tools new mynewsite
|
||||
|
||||
### Instalasi Cepat Menggunakan Git Submodules
|
||||
|
||||
> **Catatan:** Pastikan Anda sudah menginstal **Git**, **Go**, dan **Hugo**, serta telah membuat proyek Hugo sebelum melanjutkan.
|
||||
> **Catatan:** Pastikan Anda sudah menginstal **Git** dan **Hugo**, serta telah membuat proyek Hugo sebelum melanjutkan.
|
||||
|
||||
1. Dari direktori proyek Anda, inisialisasi git:
|
||||
```shell
|
||||
@@ -110,7 +111,7 @@ blowfish-tools new mynewsite
|
||||
git submodule add -b main https://github.com/nunocoracao/blowfish.git themes/blowfish
|
||||
```
|
||||
|
||||
3. Hapus file `config.toml` di root proyek dan salin file `*.toml` dari tema ke dalam folder `config/_default/`.
|
||||
3. Hapus file `hugo.toml` di root proyek dan salin file `*.toml` dari tema ke dalam folder `config/_default/`.
|
||||
|
||||
4. Ikuti petunjuk [Memulai](https://blowfish.page/docs/getting-started/) untuk mengonfigurasi situs web Anda.
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
[English](https://github.com/nunocoracao/blowfish/blob/main/README.md) | [Indonesian](https://github.com/nunocoracao/blowfish/blob/main/README.id.md) | [简体中文](https://github.com/nunocoracao/blowfish/blob/main/README.zh-cn.md) | 日本語
|
||||
[English](https://github.com/nunocoracao/blowfish/blob/main/README.md) | [Français](https://github.com/nunocoracao/blowfish/blob/main/README.fr.md) | [Deutsch](https://github.com/nunocoracao/blowfish/blob/main/README.de.md) | [Português (PT)](https://github.com/nunocoracao/blowfish/blob/main/README.pt-pt.md) | [Português (BR)](https://github.com/nunocoracao/blowfish/blob/main/README.pt-br.md) | [Español](https://github.com/nunocoracao/blowfish/blob/main/README.es.md) | 日本語 | [简体中文](https://github.com/nunocoracao/blowfish/blob/main/README.zh-cn.md) | [Indonesian](https://github.com/nunocoracao/blowfish/blob/main/README.id.md)
|
||||
# Blowfish
|
||||
[](https://app.netlify.com/sites/snazzy-dango-efb2ec/deploys)
|
||||
[](https://github.com/gohugoio/hugo/releases/tag/v0.87.0)
|
||||
[](https://github.com/gohugoio/hugo/releases/tag/v0.141.0)
|
||||
[](https://github.com/nunocoracao/blowfish/blob/main/LICENSE)
|
||||
[](https://themes.gohugo.io/themes/blowfish/)
|
||||

|
||||
@@ -45,6 +45,7 @@ Blowfishは[Hugo](https://gohugo.io)のために設計された強力で軽量
|
||||
- RTL 言語を含む多言語コンテンツのサポート
|
||||
- サードパーティー ウェブサイトの投稿へのリンク
|
||||
- ギャラリー、タイムライン、GitHub カード、カルーセルなど、複数のショートコードに対応
|
||||
- GitHub Alerts 構文、15 種類、折りたたみ対応
|
||||
- Buy Me a Coffee 連携
|
||||
- Fuse.js を利用したクライアントサイドのサイト内検索
|
||||
- Mermaid を使用したダイアグラムや視覚化
|
||||
@@ -81,7 +82,7 @@ Blowfish は、git サブモジュール、Hugo モジュール、または完
|
||||
|
||||
### Blowfish Tools を使ったクイックスタート
|
||||
|
||||
> **注意:** **Node.js**、**Git**、**Go**、**Hugo** がインストールされていること、そして先に進む前に新しい Hugo プロジェクトが作成されていることを確認してください。
|
||||
> **注意:** **Node.js**、**Git**、**Hugo** がインストールされていること、そして先に進む前に新しい Hugo プロジェクトが作成されていることを確認してください。
|
||||
|
||||
Blowfish を使い始めるのに役立つ新しい CLI ツールをリリースしました。このツールは、新しい Hugo プロジェクトを作成し、テーマをインストールし、テーマ設定ファイルをセットアップします。まだベータ版なので、[問題を見つけたら報告してください](https://github.com/nunocoracao/blowfish-tools)。
|
||||
|
||||
@@ -102,7 +103,7 @@ blowfish-tools new mynewsite
|
||||
|
||||
### git サブモジュールを使ったクイックスタート
|
||||
|
||||
> **注意:** **Git**、**Go**、**Hugo** がインストールされていること、そして先に進む前に新しい Hugo プロジェクトが作成されていることを確認してください。
|
||||
> **注意:** **Git**、**Hugo** がインストールされていること、そして先に進む前に新しい Hugo プロジェクトが作成されていることを確認してください。
|
||||
|
||||
1. プロジェクトディレクトリで、git を初期化します。
|
||||
|
||||
@@ -116,7 +117,7 @@ blowfish-tools new mynewsite
|
||||
git submodule add -b main https://github.com/nunocoracao/blowfish.git themes/blowfish
|
||||
```
|
||||
|
||||
3. ウェブサイトのルートフォルダで、Hugo によって生成された `config.toml` ファイルを削除します。テーマから `*.toml` 設定ファイルをコピーして、`config/_default/` フォルダに保存します。
|
||||
3. ウェブサイトのルートフォルダで、Hugo によって生成された `hugo.toml` ファイルを削除します。テーマから `*.toml` 設定ファイルをコピーして、`config/_default/` フォルダに保存します。
|
||||
|
||||
これらのテーマ設定ファイルは、Hugo キャッシュディレクトリにあります。または、GitHub から[コピーをダウンロード](https://github.com/nunocoracao/blowfish/releases/latest/download/config-default.zip)できます。
|
||||
|
||||
@@ -141,7 +142,7 @@ blowfish-tools new mynewsite
|
||||
|
||||
3. `hugo server` を使用してサーバーを起動すると、テーマが自動的にダウンロードされます。
|
||||
|
||||
4. ウェブサイトのルートフォルダにある、Hugo によって生成された `config.toml` ファイルを削除します。テーマの `*.toml` 設定ファイルを `config/_default/` フォルダにコピーします。
|
||||
4. ウェブサイトのルートフォルダにある、Hugo によって生成された `hugo.toml` ファイルを削除します。テーマの `*.toml` 設定ファイルを `config/_default/` フォルダにコピーします。
|
||||
|
||||
> **注意:** 上記で作成した `module.toml` ファイルを上書きしないでください!
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
English | [Indonesian](https://github.com/nunocoracao/blowfish/blob/main/README.id.md) | [简体中文](https://github.com/nunocoracao/blowfish/blob/main/README.zh-cn.md) | [日本語](https://github.com/nunocoracao/blowfish/blob/main/README.ja.md)
|
||||
English | [Français](https://github.com/nunocoracao/blowfish/blob/main/README.fr.md) | [Deutsch](https://github.com/nunocoracao/blowfish/blob/main/README.de.md) | [Português (PT)](https://github.com/nunocoracao/blowfish/blob/main/README.pt-pt.md) | [Português (BR)](https://github.com/nunocoracao/blowfish/blob/main/README.pt-br.md) | [Español](https://github.com/nunocoracao/blowfish/blob/main/README.es.md) | [日本語](https://github.com/nunocoracao/blowfish/blob/main/README.ja.md) | [简体中文](https://github.com/nunocoracao/blowfish/blob/main/README.zh-cn.md) | [Indonesian](https://github.com/nunocoracao/blowfish/blob/main/README.id.md)
|
||||
# Blowfish
|
||||
[](https://app.netlify.com/sites/snazzy-dango-efb2ec/deploys)
|
||||
[](https://github.com/gohugoio/hugo/releases/tag/v0.87.0)
|
||||
[](https://github.com/gohugoio/hugo/releases/tag/v0.141.0)
|
||||
[](https://github.com/nunocoracao/blowfish/blob/main/LICENSE)
|
||||
[](https://themes.gohugo.io/themes/blowfish/)
|
||||

|
||||
@@ -45,6 +45,7 @@ Blowfish is designed to be a powerful, lightweight theme for [Hugo](https://gohu
|
||||
- Multilingual content support including support for RTL languages
|
||||
- Ability to link to posts on third-party websites
|
||||
- Support for several shortcodes like Gallery, Timeline, GitHub cards, and Carousels
|
||||
- GitHub Alerts syntax, 15 types, collapsible support
|
||||
- Buymeacoffee integration
|
||||
- Client-side site search powered by Fuse.js
|
||||
- Diagrams and visualisations using Mermaid
|
||||
@@ -81,7 +82,7 @@ Detailed instructions for each method can be found in the [Installation](https:/
|
||||
|
||||
### Quick start using Blowfish Tools
|
||||
|
||||
> **Note:** Ensure you have **Node.js**, **Git**, **Go** and **Hugo** installed, and that you have created a new Hugo project before proceeding.
|
||||
> **Note:** Ensure you have **Node.js**, **Git** and **Hugo** installed, and that you have created a new Hugo project before proceeding.
|
||||
|
||||
We just launched a new CLI tool to help you get started with Blowfish. It will create a new Hugo project, install the theme and set up the theme configuration files for you. It's still in beta so please [report any issues you find](https://github.com/nunocoracao/blowfish-tools).
|
||||
|
||||
@@ -102,7 +103,7 @@ blowfish-tools new mynewsite
|
||||
|
||||
### Quick start using git submodules
|
||||
|
||||
> **Note:** Ensure you have **Git**, **Go**, and **Hugo** installed, and that you have created a new Hugo project before proceeding.
|
||||
> **Note:** Ensure you have **Git** and **Hugo** installed, and that you have created a new Hugo project before proceeding.
|
||||
|
||||
1. From your project directory, initialise git:
|
||||
|
||||
@@ -116,7 +117,7 @@ blowfish-tools new mynewsite
|
||||
git submodule add -b main https://github.com/nunocoracao/blowfish.git themes/blowfish
|
||||
```
|
||||
|
||||
3. In the root folder of your website, delete the `config.toml` file that was generated by Hugo. Copy the `*.toml` config files from the theme into your `config/_default/` folder.
|
||||
3. In the root folder of your website, delete the `hugo.toml` file that was generated by Hugo. Copy the `*.toml` config files from the theme into your `config/_default/` folder.
|
||||
|
||||
You will find these theme config files in the Hugo cache directory, or [download a copy](https://github.com/nunocoracao/blowfish/releases/latest/download/config-default.zip) from GitHub.
|
||||
|
||||
|
||||
@@ -0,0 +1,179 @@
|
||||
[English](https://github.com/nunocoracao/blowfish/blob/main/README.md) | [Français](https://github.com/nunocoracao/blowfish/blob/main/README.fr.md) | [Deutsch](https://github.com/nunocoracao/blowfish/blob/main/README.de.md) | [Português (PT)](https://github.com/nunocoracao/blowfish/blob/main/README.pt-pt.md) | Português (BR) | [Español](https://github.com/nunocoracao/blowfish/blob/main/README.es.md) | [日本語](https://github.com/nunocoracao/blowfish/blob/main/README.ja.md) | [简体中文](https://github.com/nunocoracao/blowfish/blob/main/README.zh-cn.md) | [Indonesian](https://github.com/nunocoracao/blowfish/blob/main/README.id.md)
|
||||
# Blowfish
|
||||
[](https://app.netlify.com/sites/snazzy-dango-efb2ec/deploys)
|
||||
[](https://github.com/gohugoio/hugo/releases/tag/v0.141.0)
|
||||
[](https://github.com/nunocoracao/blowfish/blob/main/LICENSE)
|
||||
[](https://themes.gohugo.io/themes/blowfish/)
|
||||

|
||||
|
||||
Blowfish foi projetado para ser um tema poderoso e leve para [Hugo](https://gohugo.io). É construído usando Tailwind CSS com um design limpo e minimalista que prioriza o seu conteúdo.
|
||||
|
||||

|
||||
|
||||
|
||||
🌏 [Site de demonstração](https://blowfish.page/)
|
||||
📑 [Documentação do tema](https://blowfish.page/docs/)
|
||||
💎 [Loja de produtos](http://tee.pub/lic/qwSlWVBL5zc)
|
||||
🐛 [Relatórios de bugs e problemas](https://github.com/nunocoracao/blowfish/issues)
|
||||
💡 [Perguntas e solicitações de recursos](https://github.com/nunocoracao/blowfish/discussions)
|
||||
|
||||
|
||||
|
||||
<a href="https://www.buymeacoffee.com/nunocoracao" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 60px !important;width: 217px !important;" ></a>
|
||||
<a target="_blank" href="http://tee.pub/lic/qwSlWVBL5zc"><img class="nozoom" src="https://img.buymeacoffee.com/button-api/?text=Merch Store &emoji=💎&slug=nunocoracao&button_colour=5F7FFF&font_colour=ffffff&font_family=Lato&outline_colour=000000&coffee_colour=FFDD00" /></a>
|
||||
|
||||
|
||||
|
||||
## Recursos
|
||||
|
||||
- Layout totalmente responsivo construído com Tailwind CSS 3.0
|
||||
- Múltiplos esquemas de cores (ou personalize completamente o seu próprio)
|
||||
- Modo escuro (forçado ligado/desligado ou alternância automática com botão do usuário)
|
||||
- Configuração altamente personalizável
|
||||
- Integração com Firebase para suportar dados dinâmicos
|
||||
- Contagem de visualizações e mecanismo de curtidas
|
||||
- Artigos relacionados
|
||||
- Múltiplos layouts de página inicial
|
||||
- Múltiplos autores
|
||||
- Séries de artigos
|
||||
- Ordenação de artigos baseada em data e peso
|
||||
- Modo zen para leitura de artigos
|
||||
- Flexível com qualquer tipo de conteúdo, taxonomias e menus
|
||||
- Menus de cabeçalho e rodapé
|
||||
- Menus aninhados e menu de sub-navegação
|
||||
- Índice com rolagem
|
||||
- Suporte a conteúdo multilíngue incluindo suporte para idiomas RTL
|
||||
- Capacidade de linkar para posts em sites de terceiros
|
||||
- Suporte para vários shortcodes como Gallery, Timeline, GitHub cards e Carousels
|
||||
- Sintaxe de alertas do GitHub, 15 tipos, suporte recolhível
|
||||
- Integração com Buymeacoffee
|
||||
- Busca no site do lado do cliente alimentada por Fuse.js
|
||||
- Diagramas e visualizações usando Mermaid
|
||||
- Gráficos usando Chart.js
|
||||
- Integração com TypeIt
|
||||
- Embeds do Youtube com melhorias de performance
|
||||
- Notação matemática usando KaTeX
|
||||
- Ícones SVG do FontAwesome 6
|
||||
- Redimensionamento automático de imagens usando Hugo Pipes
|
||||
- Âncoras de cabeçalho, Índices, Cópia de código, Botões, Badges e mais
|
||||
- Suporte a HTML e Emoji em artigos 🎉
|
||||
- SEO amigável com links para compartilhamento em redes sociais
|
||||
- Suporte a Fathom Analytics e Google Analytics
|
||||
- Suporte a feeds RSS, Favicons e comentários
|
||||
- Personalização avançada usando definições simples de cores e estilos do Tailwind
|
||||
- Otimizado para performance e acessibilidade com pontuações perfeitas no Lighthouse
|
||||
- Totalmente documentado com atualizações regulares
|
||||
|
||||
---
|
||||
|
||||

|
||||
|
||||
## Documentação
|
||||
|
||||
Blowfish possui [documentação extensa](https://blowfish.page/docs/) que cobre todos os aspectos do tema. Certifique-se de [ler a documentação](https://blowfish.page/docs/) para saber mais sobre como usar o tema e seus recursos.
|
||||
|
||||
---
|
||||
|
||||
## Instalação
|
||||
|
||||
Blowfish suporta vários métodos de instalação - como submódulo git, Hugo Module, ou como uma instalação completamente manual.
|
||||
|
||||
Instruções detalhadas para cada método podem ser encontradas na documentação de [Instalação](https://blowfish.page/docs/installation). Você deve consultar a documentação para a experiência de configuração mais simples. Abaixo está um guia de início rápido usando submódulos se você estiver usando git, ou Hugo modules se você já estiver confiante em instalar temas Hugo.
|
||||
|
||||
### Início rápido usando Blowfish Tools
|
||||
|
||||
> **Nota:** Certifique-se de ter **Node.js**, **Git** e **Hugo** instalados, e que você criou um novo projeto Hugo antes de prosseguir.
|
||||
|
||||
Acabamos de lançar uma nova ferramenta CLI para ajudá-lo a começar com Blowfish. Ela criará um novo projeto Hugo, instalará o tema e configurará os arquivos de configuração do tema para você. Ainda está em beta, então por favor [reporte quaisquer problemas que encontrar](https://github.com/nunocoracao/blowfish-tools).
|
||||
|
||||
Instale a ferramenta CLI globalmente usando npm (ou outro gerenciador de pacotes):
|
||||
```shell
|
||||
npm i -g blowfish-tools
|
||||
```
|
||||
|
||||
Em seguida, execute o comando `blowfish-tools` para iniciar uma execução interativa que o guiará pelos casos de uso de criação e configuração.
|
||||
```shell
|
||||
blowfish-tools
|
||||
```
|
||||
|
||||
Você também pode executar o comando `blowfish-tools new` para criar um novo projeto Hugo e instalar o tema de uma vez. Verifique a ajuda da CLI para mais informações.
|
||||
```shell
|
||||
blowfish-tools new mynewsite
|
||||
```
|
||||
|
||||
### Início rápido usando submódulos git
|
||||
|
||||
> **Nota:** Certifique-se de ter **Git** e **Hugo** instalados, e que você criou um novo projeto Hugo antes de prosseguir.
|
||||
|
||||
1. Do diretório do seu projeto, inicialize o git:
|
||||
|
||||
```shell
|
||||
git init
|
||||
```
|
||||
|
||||
2. Configure Blowfish como um submódulo git:
|
||||
|
||||
```shell
|
||||
git submodule add -b main https://github.com/nunocoracao/blowfish.git themes/blowfish
|
||||
```
|
||||
|
||||
3. Na pasta raiz do seu site, exclua o arquivo `hugo.toml` que foi gerado pelo Hugo. Copie os arquivos de configuração `*.toml` do tema para sua pasta `config/_default/`.
|
||||
|
||||
Você encontrará esses arquivos de configuração do tema no diretório de cache do Hugo, ou [baixe uma cópia](https://github.com/nunocoracao/blowfish/releases/latest/download/config-default.zip) do GitHub.
|
||||
|
||||
4. Siga as instruções de [Primeiros Passos](https://blowfish.page/docs/getting-started/) para configurar seu site.
|
||||
|
||||
### Início rápido usando Hugo
|
||||
|
||||
> **Nota:** Certifique-se de ter **Go** e **Hugo** instalados, e que você criou um novo projeto Hugo antes de prosseguir.
|
||||
|
||||
1. Do diretório do seu projeto, inicialize os Hugo Modules:
|
||||
|
||||
```shell
|
||||
hugo mod init github.com/<username>/<repo-name>
|
||||
```
|
||||
|
||||
2. Crie `config/_default/module.toml` e adicione o seguinte:
|
||||
|
||||
```toml
|
||||
[[imports]]
|
||||
path = "github.com/nunocoracao/blowfish/v2"
|
||||
```
|
||||
|
||||
3. Inicie seu servidor usando `hugo server` e o tema será baixado automaticamente.
|
||||
|
||||
4. Na pasta raiz do seu site, exclua o arquivo `hugo.toml` que foi gerado pelo Hugo. Copie os arquivos de configuração `*.toml` do tema para sua pasta `config/_default/`.
|
||||
|
||||
> **Nota:** Não sobrescreva o arquivo `module.toml` que você criou acima!
|
||||
|
||||
Você encontrará esses arquivos de configuração do tema no diretório de cache do Hugo, ou [baixe uma cópia](https://github.com/nunocoracao/blowfish/releases/latest/download/config-default.zip) do GitHub.
|
||||
|
||||
5. Siga as instruções de [Primeiros Passos](https://blowfish.page/docs/getting-started/) para configurar seu site.
|
||||
|
||||
### Instalando atualizações do tema
|
||||
|
||||
À medida que novos lançamentos são publicados, você pode atualizar o tema usando Hugo. Simplesmente execute `hugo mod get -u` do diretório do seu projeto e o tema será atualizado automaticamente para a versão mais recente.
|
||||
|
||||
[Instruções detalhadas de atualização](https://blowfish.page/docs/installation/#installing-updates) estão disponíveis na documentação.
|
||||
|
||||
---
|
||||
|
||||
## Contribuindo
|
||||
|
||||
Blowfish deve evoluir ao longo do tempo. Pretendo continuar adicionando recursos e fazendo alterações conforme necessário.
|
||||
|
||||
Sinta-se à vontade para entrar em contato com quaisquer problemas ou sugestões de novos recursos que você gostaria de ver.
|
||||
|
||||
- 🐛 **Relatórios de bugs e problemas:** Use [GitHub Issues](https://github.com/nunocoracao/blowfish/issues)
|
||||
- 💡 **Ideias para novos recursos:** Abra uma discussão em [GitHub Discussions](https://github.com/nunocoracao/blowfish/discussions)
|
||||
- 🙋♀️ **Perguntas gerais:** Vá para [GitHub Discussions](https://github.com/nunocoracao/blowfish/discussions)
|
||||
|
||||
Se você for capaz de corrigir um bug ou implementar um novo recurso, dou as boas-vindas a PRs para este propósito. Saiba mais nas [diretrizes de contribuição](https://github.com/nunocoracao/blowfish/blob/main/CONTRIBUTING.md).
|
||||
|
||||
---
|
||||
|
||||
## Stargazers ao longo do tempo
|
||||
|
||||
[](https://starchart.cc/nunocoracao/blowfish)
|
||||
|
||||
<a rel="me" href="https://masto.ai/@blowfish">Mastodon</a>
|
||||
@@ -0,0 +1,179 @@
|
||||
[English](https://github.com/nunocoracao/blowfish/blob/main/README.md) | [Français](https://github.com/nunocoracao/blowfish/blob/main/README.fr.md) | [Deutsch](https://github.com/nunocoracao/blowfish/blob/main/README.de.md) | Português (PT) | [Português (BR)](https://github.com/nunocoracao/blowfish/blob/main/README.pt-br.md) | [Español](https://github.com/nunocoracao/blowfish/blob/main/README.es.md) | [日本語](https://github.com/nunocoracao/blowfish/blob/main/README.ja.md) | [简体中文](https://github.com/nunocoracao/blowfish/blob/main/README.zh-cn.md) | [Indonesian](https://github.com/nunocoracao/blowfish/blob/main/README.id.md)
|
||||
# Blowfish
|
||||
[](https://app.netlify.com/sites/snazzy-dango-efb2ec/deploys)
|
||||
[](https://github.com/gohugoio/hugo/releases/tag/v0.141.0)
|
||||
[](https://github.com/nunocoracao/blowfish/blob/main/LICENSE)
|
||||
[](https://themes.gohugo.io/themes/blowfish/)
|
||||

|
||||
|
||||
Blowfish foi desenhado para ser um tema poderoso e leve para [Hugo](https://gohugo.io). É construído com Tailwind CSS com um design limpo e minimalista que prioriza o seu conteúdo.
|
||||
|
||||

|
||||
|
||||
|
||||
🌏 [Site de demonstração](https://blowfish.page/)
|
||||
📑 [Documentação do tema](https://blowfish.page/docs/)
|
||||
💎 [Loja de merchandising](http://tee.pub/lic/qwSlWVBL5zc)
|
||||
🐛 [Relatórios de erros & problemas](https://github.com/nunocoracao/blowfish/issues)
|
||||
💡 [Questões & pedidos de funcionalidades](https://github.com/nunocoracao/blowfish/discussions)
|
||||
|
||||
|
||||
|
||||
<a href="https://www.buymeacoffee.com/nunocoracao" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 60px !important;width: 217px !important;" ></a>
|
||||
<a target="_blank" href="http://tee.pub/lic/qwSlWVBL5zc"><img class="nozoom" src="https://img.buymeacoffee.com/button-api/?text=Merch Store &emoji=💎&slug=nunocoracao&button_colour=5F7FFF&font_colour=ffffff&font_family=Lato&outline_colour=000000&coffee_colour=FFDD00" /></a>
|
||||
|
||||
|
||||
|
||||
## Funcionalidades
|
||||
|
||||
- Layout totalmente responsivo construído com Tailwind CSS 3.0
|
||||
- Múltiplos esquemas de cores (ou personalize completamente o seu próprio)
|
||||
- Modo escuro (forçado ligado/desligado ou alternância automática com seletor do utilizador)
|
||||
- Configuração altamente personalizável
|
||||
- Integração com Firebase para suportar dados dinâmicos
|
||||
- Contagem de visualizações & mecanismo de gostos
|
||||
- Artigos relacionados
|
||||
- Múltiplos layouts de página inicial
|
||||
- Múltiplos autores
|
||||
- Séries de artigos
|
||||
- Ordenação de artigos baseada em data e peso
|
||||
- Modo Zen para leitura de artigos
|
||||
- Flexível com qualquer tipo de conteúdo, taxonomias e menus
|
||||
- Menus de cabeçalho e rodapé
|
||||
- Menus aninhados & menu de sub-navegação
|
||||
- Índice de conteúdos com scroll
|
||||
- Suporte para conteúdo multilingue incluindo suporte para línguas RTL
|
||||
- Capacidade de criar links para publicações em sites de terceiros
|
||||
- Suporte para vários shortcodes como Gallery, Timeline, GitHub cards e Carousels
|
||||
- Sintaxe GitHub Alerts, 15 tipos, suporte para elementos expansíveis
|
||||
- Integração Buymeacoffee
|
||||
- Pesquisa no site do lado do cliente alimentada por Fuse.js
|
||||
- Diagramas e visualizações usando Mermaid
|
||||
- Gráficos usando Chart.js
|
||||
- Integração TypeIt
|
||||
- Embeds de Youtube com melhorias de desempenho
|
||||
- Notação matemática usando KaTeX
|
||||
- Ícones SVG do FontAwesome 6
|
||||
- Redimensionamento automático de imagens usando Hugo Pipes
|
||||
- Âncoras de cabeçalhos, Índices de Conteúdos, Cópia de código, Botões, Badges e mais
|
||||
- Suporte HTML e Emoji em artigos 🎉
|
||||
- Otimizado para SEO com links para partilha em redes sociais
|
||||
- Suporte para Fathom Analytics e Google Analytics
|
||||
- Feeds RSS, Favicons e suporte para comentários
|
||||
- Personalização avançada usando definições simples de cores e estilos do Tailwind
|
||||
- Otimizado para desempenho e acessibilidade com pontuações perfeitas no Lighthouse
|
||||
- Totalmente documentado com atualizações regulares
|
||||
|
||||
---
|
||||
|
||||

|
||||
|
||||
## Documentação
|
||||
|
||||
Blowfish tem [documentação extensa](https://blowfish.page/docs/) que cobre todos os aspetos do tema. Certifique-se de [ler a documentação](https://blowfish.page/docs/) para saber mais sobre como usar o tema e as suas funcionalidades.
|
||||
|
||||
---
|
||||
|
||||
## Instalação
|
||||
|
||||
Blowfish suporta vários métodos de instalação - como um submódulo git, um Módulo Hugo, ou como uma instalação completamente manual.
|
||||
|
||||
Instruções detalhadas para cada método podem ser encontradas na documentação de [Instalação](https://blowfish.page/docs/installation). Deve consultar a documentação para a experiência de configuração mais simples. Abaixo está um guia de início rápido usando submódulos se estiver a usar git, ou módulos Hugo se já está confiante na instalação de temas Hugo.
|
||||
|
||||
### Início rápido usando Blowfish Tools
|
||||
|
||||
> **Nota:** Certifique-se de que tem **Node.js**, **Git** e **Hugo** instalados, e que criou um novo projeto Hugo antes de continuar.
|
||||
|
||||
Acabámos de lançar uma nova ferramenta CLI para ajudá-lo a começar com Blowfish. Ela irá criar um novo projeto Hugo, instalar o tema e configurar os ficheiros de configuração do tema para si. Ainda está em beta por isso [reporte quaisquer problemas que encontrar](https://github.com/nunocoracao/blowfish-tools).
|
||||
|
||||
Instale a ferramenta CLI globalmente usando npm (ou outro gestor de pacotes):
|
||||
```shell
|
||||
npm i -g blowfish-tools
|
||||
```
|
||||
|
||||
Depois execute o comando `blowfish-tools` para iniciar uma execução interativa que irá guiá-lo através da criação e casos de uso de configuração.
|
||||
```shell
|
||||
blowfish-tools
|
||||
```
|
||||
|
||||
Também pode executar o comando `blowfish-tools new` para criar um novo projeto Hugo e instalar o tema de uma só vez. Consulte a ajuda da CLI para mais informações.
|
||||
```shell
|
||||
blowfish-tools new mynewsite
|
||||
```
|
||||
|
||||
### Início rápido usando submódulos git
|
||||
|
||||
> **Nota:** Certifique-se de que tem **Git** e **Hugo** instalados, e que criou um novo projeto Hugo antes de continuar.
|
||||
|
||||
1. A partir do diretório do seu projeto, inicialize o git:
|
||||
|
||||
```shell
|
||||
git init
|
||||
```
|
||||
|
||||
2. Configure Blowfish como um submódulo git:
|
||||
|
||||
```shell
|
||||
git submodule add -b main https://github.com/nunocoracao/blowfish.git themes/blowfish
|
||||
```
|
||||
|
||||
3. Na pasta raiz do seu site, elimine o ficheiro `hugo.toml` que foi gerado pelo Hugo. Copie os ficheiros de configuração `*.toml` do tema para a sua pasta `config/_default/`.
|
||||
|
||||
Irá encontrar estes ficheiros de configuração do tema no diretório de cache do Hugo, ou [descarregue uma cópia](https://github.com/nunocoracao/blowfish/releases/latest/download/config-default.zip) do GitHub.
|
||||
|
||||
4. Siga as instruções de [Introdução](https://blowfish.page/docs/getting-started/) para configurar o seu site.
|
||||
|
||||
### Início rápido usando Hugo
|
||||
|
||||
> **Nota:** Certifique-se de que tem **Go** e **Hugo** instalados, e que criou um novo projeto Hugo antes de continuar.
|
||||
|
||||
1. A partir do diretório do seu projeto, inicialize os Módulos Hugo:
|
||||
|
||||
```shell
|
||||
hugo mod init github.com/<username>/<repo-name>
|
||||
```
|
||||
|
||||
2. Crie `config/_default/module.toml` e adicione o seguinte:
|
||||
|
||||
```toml
|
||||
[[imports]]
|
||||
path = "github.com/nunocoracao/blowfish/v2"
|
||||
```
|
||||
|
||||
3. Inicie o seu servidor usando `hugo server` e o tema será descarregado automaticamente.
|
||||
|
||||
4. Na pasta raiz do seu site, elimine o ficheiro `hugo.toml` que foi gerado pelo Hugo. Copie os ficheiros de configuração `*.toml` do tema para a sua pasta `config/_default/`.
|
||||
|
||||
> **Nota:** Não sobrescreva o ficheiro `module.toml` que criou acima!
|
||||
|
||||
Irá encontrar estes ficheiros de configuração do tema no diretório de cache do Hugo, ou [descarregue uma cópia](https://github.com/nunocoracao/blowfish/releases/latest/download/config-default.zip) do GitHub.
|
||||
|
||||
5. Siga as instruções de [Introdução](https://blowfish.page/docs/getting-started/) para configurar o seu site.
|
||||
|
||||
### Instalar atualizações do tema
|
||||
|
||||
À medida que novas versões são publicadas, pode atualizar o tema usando Hugo. Simplesmente execute `hugo mod get -u` a partir do diretório do seu projeto e o tema será automaticamente atualizado para a versão mais recente.
|
||||
|
||||
[Instruções detalhadas de atualização](https://blowfish.page/docs/installation/#installing-updates) estão disponíveis na documentação.
|
||||
|
||||
---
|
||||
|
||||
## Contribuir
|
||||
|
||||
Espera-se que Blowfish evolua ao longo do tempo. Pretendo continuar a adicionar funcionalidades e fazer alterações conforme necessário.
|
||||
|
||||
Sinta-se à vontade para entrar em contacto com quaisquer problemas ou sugestões para novas funcionalidades que gostaria de ver.
|
||||
|
||||
- 🐛 **Relatórios de erros & problemas:** Use [GitHub Issues](https://github.com/nunocoracao/blowfish/issues)
|
||||
- 💡 **Ideias para novas funcionalidades:** Abra uma discussão em [GitHub Discussions](https://github.com/nunocoracao/blowfish/discussions)
|
||||
- 🙋♀️ **Questões gerais:** Dirija-se a [GitHub Discussions](https://github.com/nunocoracao/blowfish/discussions)
|
||||
|
||||
Se conseguir corrigir um erro ou implementar uma nova funcionalidade, aceito PRs para este propósito. Saiba mais nas [diretrizes de contribuição](https://github.com/nunocoracao/blowfish/blob/main/CONTRIBUTING.md).
|
||||
|
||||
---
|
||||
|
||||
## Stargazers ao longo do tempo
|
||||
|
||||
[](https://starchart.cc/nunocoracao/blowfish)
|
||||
|
||||
<a rel="me" href="https://masto.ai/@blowfish">Mastodon</a>
|
||||
@@ -1,7 +1,7 @@
|
||||
[English](https://github.com/nunocoracao/blowfish/blob/main/README.md) | [Indonesian](https://github.com/nunocoracao/blowfish/blob/main/README.id.md) | 简体中文 | [日本語](https://github.com/nunocoracao/blowfish/blob/main/README.ja.md)
|
||||
[English](https://github.com/nunocoracao/blowfish/blob/main/README.md) | [Français](https://github.com/nunocoracao/blowfish/blob/main/README.fr.md) | [Deutsch](https://github.com/nunocoracao/blowfish/blob/main/README.de.md) | [Português (PT)](https://github.com/nunocoracao/blowfish/blob/main/README.pt-pt.md) | [Português (BR)](https://github.com/nunocoracao/blowfish/blob/main/README.pt-br.md) | [Español](https://github.com/nunocoracao/blowfish/blob/main/README.es.md) | [日本語](https://github.com/nunocoracao/blowfish/blob/main/README.ja.md) | 简体中文 | [Indonesian](https://github.com/nunocoracao/blowfish/blob/main/README.id.md)
|
||||
# Blowfish
|
||||
[](https://app.netlify.com/sites/snazzy-dango-efb2ec/deploys)
|
||||
[](https://github.com/gohugoio/hugo/releases/tag/v0.87.0)
|
||||
[](https://github.com/gohugoio/hugo/releases/tag/v0.141.0)
|
||||
[](https://github.com/nunocoracao/blowfish/blob/main/LICENSE)
|
||||
[](https://themes.gohugo.io/themes/blowfish/)
|
||||

|
||||
@@ -43,6 +43,7 @@ Blowfish 是一个轻量有力的 Hugo 主题。它使用 Tailwind CSS 构建,
|
||||
- 支持多语言内容,包括 RTL 语言
|
||||
- 可链接到第三方网站上的帖子
|
||||
- 支持多种简码,如图库、时间轴、GitHub 卡片和图片灯箱
|
||||
- 支持 GitHub Alerts 语法、15 种类型和可折叠功能
|
||||
- 支持 Buymeacoffee
|
||||
- 拥有由 Fuse.js 支持的客户端一侧网站搜索功能
|
||||
- 植入了基于 Mermaid 的图表功能
|
||||
@@ -78,7 +79,7 @@ Blowfish 支持多种安装方式,既能作为 git 子模块、Hugo 模块,
|
||||
|
||||
### 使用 Blowfish Tools 快速开始
|
||||
|
||||
> **注:** 请确保你已安装 **Node.js**、 **Git**、 **Go** 和 **Hugo** ,且已经创建了一个 Hugo 工程。
|
||||
> **注:** 请确保你已安装 **Node.js**、 **Git** 和 **Hugo** ,且已经创建了一个 Hugo 工程。
|
||||
|
||||
我们最新推出了一个新的 CLI 工具,帮助你开始使用 Blowfish。它将为你创建一个新的 Hugo 项目、安装主题并设置主题配置文件。它仍处于测试阶段,因此请 [报告你发现的任何问题](https://github.com/nunocoracao/blowfish-tools)。
|
||||
|
||||
@@ -99,7 +100,7 @@ blowfish-tools new mynewsite
|
||||
|
||||
### 使用 git 子模块快速开始
|
||||
|
||||
> **注:** 请确保你已安装 **Node.js**、 **Git**、 **Go** 和 **Hugo** ,且已经创建了一个 Hugo 工程。
|
||||
> **注:** 请确保你已安装 **Git** 和 **Hugo** ,且已经创建了一个 Hugo 工程。
|
||||
|
||||
1. 从你工程的所在目录初始化 git 仓库
|
||||
|
||||
@@ -113,7 +114,7 @@ blowfish-tools new mynewsite
|
||||
git submodule add -b main https://github.com/nunocoracao/blowfish.git themes/blowfish
|
||||
```
|
||||
|
||||
3. 在你网站的根目录中删除由 Hugo 自动生成的 `config.toml`文件,并把主题文件夹中的`*.toml`配置文件复制到你的 `config/_default/`文件夹中
|
||||
3. 在你网站的根目录中删除由 Hugo 自动生成的 `hugo.toml` 文件,并把主题文件夹中的 `*.toml` 配置文件复制到你的 `config/_default/` 文件夹中
|
||||
|
||||
你可在 Hugo 缓存目录中找到主题配置文件,或者也可以从[这里](https://github.com/nunocoracao/blowfish/releases/latest/download/config-default.zip)下载一份。
|
||||
|
||||
@@ -138,7 +139,7 @@ blowfish-tools new mynewsite
|
||||
|
||||
3. 运行 `hugo server` 启动你的本地服务器,本主题就会自动下载。
|
||||
|
||||
4. 在你网站的根目录中删除由 Hugo 自动生成的 `config.toml`文件,并把主题文件夹中的`*.toml`配置文件复制到你的 `config/_default/`文件夹中
|
||||
4. 在你网站的根目录中删除由 Hugo 自动生成的 `hugo.toml`文件,并把主题文件夹中的`*.toml`配置文件复制到你的 `config/_default/`文件夹中
|
||||
|
||||
> **注** 不要覆盖之前的 `module.toml` !
|
||||
|
||||
|
||||
@@ -0,0 +1,220 @@
|
||||
/*
|
||||
* Derived from KKKZOZ/hugo-admonitions (https://github.com/KKKZOZ/hugo-admonitions/)
|
||||
* Copyright (c) 2024 KKKZOZ, Licensed under MIT License
|
||||
*/
|
||||
:root {
|
||||
/* GitHub Core Types (5) */
|
||||
--adm-note-border: theme("colors.sky.500");
|
||||
--adm-note-bg: theme("colors.sky.50");
|
||||
--adm-note-text: theme("colors.sky.900");
|
||||
|
||||
--adm-tip-border: theme("colors.emerald.500");
|
||||
--adm-tip-bg: theme("colors.emerald.50");
|
||||
--adm-tip-text: theme("colors.emerald.900");
|
||||
|
||||
--adm-important-border: theme("colors.purple.500");
|
||||
--adm-important-bg: theme("colors.purple.50");
|
||||
--adm-important-text: theme("colors.purple.900");
|
||||
|
||||
--adm-warning-border: theme("colors.orange.500");
|
||||
--adm-warning-bg: theme("colors.orange.50");
|
||||
--adm-warning-text: theme("colors.orange.900");
|
||||
|
||||
--adm-caution-border: theme("colors.red.500");
|
||||
--adm-caution-bg: theme("colors.red.50");
|
||||
--adm-caution-text: theme("colors.red.900");
|
||||
|
||||
/* Extended Types (10) */
|
||||
--adm-abstract-border: theme("colors.cyan.500");
|
||||
--adm-abstract-bg: theme("colors.cyan.50");
|
||||
--adm-abstract-text: theme("colors.cyan.900");
|
||||
|
||||
--adm-bug-border: theme("colors.rose.500");
|
||||
--adm-bug-bg: theme("colors.rose.50");
|
||||
--adm-bug-text: theme("colors.rose.900");
|
||||
|
||||
--adm-danger-border: theme("colors.red.500");
|
||||
--adm-danger-bg: theme("colors.red.50");
|
||||
--adm-danger-text: theme("colors.red.900");
|
||||
|
||||
--adm-example-border: theme("colors.purple.600");
|
||||
--adm-example-bg: theme("colors.purple.50");
|
||||
--adm-example-text: theme("colors.purple.900");
|
||||
|
||||
--adm-failure-border: theme("colors.pink.500");
|
||||
--adm-failure-bg: theme("colors.pink.50");
|
||||
--adm-failure-text: theme("colors.pink.900");
|
||||
|
||||
--adm-info-border: theme("colors.blue.500");
|
||||
--adm-info-bg: theme("colors.blue.50");
|
||||
--adm-info-text: theme("colors.blue.900");
|
||||
|
||||
--adm-question-border: theme("colors.amber.500");
|
||||
--adm-question-bg: theme("colors.amber.50");
|
||||
--adm-question-text: theme("colors.amber.900");
|
||||
|
||||
--adm-quote-border: theme("colors.gray.500");
|
||||
--adm-quote-bg: theme("colors.gray.50");
|
||||
--adm-quote-text: theme("colors.gray.800");
|
||||
|
||||
--adm-success-border: theme("colors.emerald.500");
|
||||
--adm-success-bg: theme("colors.emerald.50");
|
||||
--adm-success-text: theme("colors.emerald.900");
|
||||
|
||||
--adm-todo-border: theme("colors.sky.500");
|
||||
--adm-todo-bg: theme("colors.sky.50");
|
||||
--adm-todo-text: theme("colors.sky.800");
|
||||
}
|
||||
|
||||
html.dark {
|
||||
/* GitHub Core Types (5) */
|
||||
--adm-note-bg: color-mix(in srgb, theme("colors.sky.800"), #0f0f0f 50%);
|
||||
--adm-note-text: theme("colors.sky.100");
|
||||
|
||||
--adm-tip-bg: color-mix(in srgb, theme("colors.emerald.800"), #0f0f0f 50%);
|
||||
--adm-tip-text: theme("colors.emerald.100");
|
||||
|
||||
--adm-important-bg: color-mix(in srgb, theme("colors.purple.800"), #0f0f0f 50%);
|
||||
--adm-important-text: theme("colors.purple.100");
|
||||
|
||||
--adm-warning-bg: color-mix(in srgb, theme("colors.orange.800"), #0f0f0f 45%);
|
||||
--adm-warning-text: theme("colors.orange.100");
|
||||
|
||||
--adm-caution-bg: color-mix(in srgb, theme("colors.red.800"), #0f0f0f 45%);
|
||||
--adm-caution-text: theme("colors.red.100");
|
||||
|
||||
/* Extended Types (10) */
|
||||
--adm-abstract-bg: color-mix(in srgb, theme("colors.cyan.800"), #0f0f0f 50%);
|
||||
--adm-abstract-text: theme("colors.cyan.100");
|
||||
|
||||
--adm-bug-bg: color-mix(in srgb, theme("colors.rose.800"), #0f0f0f 50%);
|
||||
--adm-bug-text: theme("colors.rose.100");
|
||||
|
||||
--adm-danger-bg: color-mix(in srgb, theme("colors.red.800"), #0f0f0f 45%);
|
||||
--adm-danger-text: theme("colors.red.100");
|
||||
|
||||
--adm-example-bg: color-mix(in srgb, theme("colors.purple.800"), #0f0f0f 50%);
|
||||
--adm-example-text: theme("colors.purple.100");
|
||||
|
||||
--adm-failure-bg: color-mix(in srgb, theme("colors.pink.800"), #0f0f0f 50%);
|
||||
--adm-failure-text: theme("colors.pink.100");
|
||||
|
||||
--adm-info-bg: color-mix(in srgb, theme("colors.blue.800"), #0f0f0f 50%);
|
||||
--adm-info-text: theme("colors.blue.100");
|
||||
|
||||
--adm-question-bg: color-mix(in srgb, theme("colors.amber.800"), #0f0f0f 50%);
|
||||
--adm-question-text: theme("colors.amber.100");
|
||||
|
||||
--adm-quote-bg: color-mix(in srgb, theme("colors.gray.800"), #0f0f0f 50%);
|
||||
--adm-quote-text: theme("colors.gray.100");
|
||||
|
||||
--adm-success-bg: color-mix(in srgb, theme("colors.emerald.800"), #0f0f0f 50%);
|
||||
--adm-success-text: theme("colors.emerald.100");
|
||||
|
||||
--adm-todo-bg: color-mix(in srgb, theme("colors.sky.800"), #0f0f0f 50%);
|
||||
--adm-todo-text: theme("colors.sky.100");
|
||||
}
|
||||
|
||||
/* Base Styles */
|
||||
.admonition-content > :first-child {
|
||||
margin-top: 0 !important;
|
||||
}
|
||||
|
||||
.admonition-content > :last-child {
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
|
||||
.admonition-content pre {
|
||||
margin-block: 0 !important;
|
||||
}
|
||||
|
||||
/* Type-Specific Palettes Using CSS Variables */
|
||||
.admonition[data-type="note"] {
|
||||
border-color: var(--adm-note-border);
|
||||
background-color: var(--adm-note-bg);
|
||||
color: var(--adm-note-text);
|
||||
}
|
||||
|
||||
.admonition[data-type="tip"] {
|
||||
border-color: var(--adm-tip-border);
|
||||
background-color: var(--adm-tip-bg);
|
||||
color: var(--adm-tip-text);
|
||||
}
|
||||
|
||||
.admonition[data-type="important"] {
|
||||
border-color: var(--adm-important-border);
|
||||
background-color: var(--adm-important-bg);
|
||||
color: var(--adm-important-text);
|
||||
}
|
||||
|
||||
.admonition[data-type="warning"] {
|
||||
border-color: var(--adm-warning-border);
|
||||
background-color: var(--adm-warning-bg);
|
||||
color: var(--adm-warning-text);
|
||||
}
|
||||
|
||||
.admonition[data-type="caution"] {
|
||||
border-color: var(--adm-caution-border);
|
||||
background-color: var(--adm-caution-bg);
|
||||
color: var(--adm-caution-text);
|
||||
}
|
||||
|
||||
.admonition[data-type="abstract"] {
|
||||
border-color: var(--adm-abstract-border);
|
||||
background-color: var(--adm-abstract-bg);
|
||||
color: var(--adm-abstract-text);
|
||||
}
|
||||
|
||||
.admonition[data-type="bug"] {
|
||||
border-color: var(--adm-bug-border);
|
||||
background-color: var(--adm-bug-bg);
|
||||
color: var(--adm-bug-text);
|
||||
}
|
||||
|
||||
.admonition[data-type="danger"] {
|
||||
border-color: var(--adm-danger-border);
|
||||
background-color: var(--adm-danger-bg);
|
||||
color: var(--adm-danger-text);
|
||||
}
|
||||
|
||||
.admonition[data-type="example"] {
|
||||
border-color: var(--adm-example-border);
|
||||
background-color: var(--adm-example-bg);
|
||||
color: var(--adm-example-text);
|
||||
}
|
||||
|
||||
.admonition[data-type="failure"] {
|
||||
border-color: var(--adm-failure-border);
|
||||
background-color: var(--adm-failure-bg);
|
||||
color: var(--adm-failure-text);
|
||||
}
|
||||
|
||||
.admonition[data-type="info"] {
|
||||
border-color: var(--adm-info-border);
|
||||
background-color: var(--adm-info-bg);
|
||||
color: var(--adm-info-text);
|
||||
}
|
||||
|
||||
.admonition[data-type="question"] {
|
||||
border-color: var(--adm-question-border);
|
||||
background-color: var(--adm-question-bg);
|
||||
color: var(--adm-question-text);
|
||||
}
|
||||
|
||||
.admonition[data-type="quote"] {
|
||||
border-color: var(--adm-quote-border);
|
||||
background-color: var(--adm-quote-bg);
|
||||
color: var(--adm-quote-text);
|
||||
}
|
||||
|
||||
.admonition[data-type="success"] {
|
||||
border-color: var(--adm-success-border);
|
||||
background-color: var(--adm-success-bg);
|
||||
color: var(--adm-success-text);
|
||||
}
|
||||
|
||||
.admonition[data-type="todo"] {
|
||||
border-color: var(--adm-todo-border);
|
||||
background-color: var(--adm-todo-bg);
|
||||
color: var(--adm-todo-text);
|
||||
}
|
||||
@@ -1,8 +1,24 @@
|
||||
|
||||
/* -- Chroma Highlight -- */
|
||||
/* Background */
|
||||
.prose .chroma {
|
||||
@apply static rounded-md text-neutral-700 bg-neutral-50 dark:bg-neutral-700 dark:text-neutral-200;
|
||||
/* margins for codeblock title */
|
||||
.highlight-wrapper {
|
||||
@apply block relative z-0 overflow-hidden shadow rounded-md;
|
||||
margin-top: 1.7142857em;
|
||||
margin-bottom: 1.7142857em;
|
||||
}
|
||||
|
||||
.highlight-wrapper pre,
|
||||
.highlight-wrapper table, .highlight-wrapper div {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.highlight-wrapper:has(.codeblock-title) pre {
|
||||
@apply rounded-none;
|
||||
}
|
||||
|
||||
.codeblock-title {
|
||||
@apply px-4 py-2 border-b border-neutral-200 dark:border-neutral-800;
|
||||
@apply bg-white dark:bg-[#0d1117];
|
||||
}
|
||||
|
||||
/* LineTableTD */
|
||||
@@ -19,208 +35,173 @@
|
||||
|
||||
/* LineHighlight */
|
||||
.chroma .hl {
|
||||
@apply block w-auto px-4 -mx-4 bg-primary-100 dark:bg-primary-900;
|
||||
@apply block w-auto px-4 -mx-4;
|
||||
}
|
||||
|
||||
.chroma .lntd .hl {
|
||||
@apply p-0 m-0;
|
||||
}
|
||||
|
||||
/* LineNumbersTable */
|
||||
/* LineNumbers */
|
||||
.chroma .lnt,
|
||||
.chroma .ln {
|
||||
@apply text-neutral-600 dark:text-neutral-300 mr-[0.4em] px-[0.4em] py-0;
|
||||
/* linenos=inline */
|
||||
.chroma:not(:is(table *)) > code {
|
||||
display: block;
|
||||
min-width: max-content;
|
||||
}
|
||||
|
||||
/* Keyword */
|
||||
/* KeywordDeclaration */
|
||||
/* KeywordNamespace */
|
||||
/* KeywordPseudo */
|
||||
/* KeywordReserved */
|
||||
/* NameClass */
|
||||
/* NameFunctionMagic */
|
||||
/* NameNamespace */
|
||||
/* NameVariableClass */
|
||||
/* Operator */
|
||||
.chroma .k,
|
||||
.chroma .kd,
|
||||
.chroma .kn,
|
||||
.chroma .kp,
|
||||
.chroma .kr,
|
||||
.chroma .nc,
|
||||
.chroma .fm,
|
||||
.chroma .nn,
|
||||
.chroma .vc,
|
||||
.chroma .o {
|
||||
@apply text-primary-600 dark:text-primary-300;
|
||||
}
|
||||
html:not(.dark) {
|
||||
/* Generated using: hugo gen chromastyles --style=github */
|
||||
|
||||
/* KeywordConstant */
|
||||
.chroma .kc {
|
||||
@apply font-semibold text-secondary-400 dark:text-secondary-500;
|
||||
/* Background */ .bg { background-color:#fff; }
|
||||
/* PreWrapper */ .chroma { background-color:#fff; }
|
||||
/* Error */ .chroma .err { color:#f6f8fa;background-color:#82071e }
|
||||
/* LineLink */ .chroma .lnlinks { outline:none;text-decoration:none;color:inherit }
|
||||
/* LineTableTD */ .chroma .lntd { vertical-align:top;padding:0;margin:0;border:0; }
|
||||
/* LineTable */ .chroma .lntable { border-spacing:0; }
|
||||
/* LineHighlight */ .chroma .hl { background-color:#e5e5e5 }
|
||||
/* LineNumbersTable */ .chroma .lnt { white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f }
|
||||
/* LineNumbers */ .chroma .ln { white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f }
|
||||
/* Line */ .chroma .line { display:flex; }
|
||||
/* Keyword */ .chroma .k { color:#cf222e }
|
||||
/* KeywordConstant */ .chroma .kc { color:#cf222e }
|
||||
/* KeywordDeclaration */ .chroma .kd { color:#cf222e }
|
||||
/* KeywordNamespace */ .chroma .kn { color:#cf222e }
|
||||
/* KeywordPseudo */ .chroma .kp { color:#cf222e }
|
||||
/* KeywordReserved */ .chroma .kr { color:#cf222e }
|
||||
/* KeywordType */ .chroma .kt { color:#cf222e }
|
||||
/* NameAttribute */ .chroma .na { color:#1f2328 }
|
||||
/* NameClass */ .chroma .nc { color:#1f2328 }
|
||||
/* NameConstant */ .chroma .no { color:#0550ae }
|
||||
/* NameDecorator */ .chroma .nd { color:#0550ae }
|
||||
/* NameEntity */ .chroma .ni { color:#6639ba }
|
||||
/* NameLabel */ .chroma .nl { color:#900;font-weight:bold }
|
||||
/* NameNamespace */ .chroma .nn { color:#24292e }
|
||||
/* NameOther */ .chroma .nx { color:#1f2328 }
|
||||
/* NameTag */ .chroma .nt { color:#0550ae }
|
||||
/* NameBuiltin */ .chroma .nb { color:#6639ba }
|
||||
/* NameBuiltinPseudo */ .chroma .bp { color:#6a737d }
|
||||
/* NameVariable */ .chroma .nv { color:#953800 }
|
||||
/* NameVariableClass */ .chroma .vc { color:#953800 }
|
||||
/* NameVariableGlobal */ .chroma .vg { color:#953800 }
|
||||
/* NameVariableInstance */ .chroma .vi { color:#953800 }
|
||||
/* NameVariableMagic */ .chroma .vm { color:#953800 }
|
||||
/* NameFunction */ .chroma .nf { color:#6639ba }
|
||||
/* NameFunctionMagic */ .chroma .fm { color:#6639ba }
|
||||
/* LiteralString */ .chroma .s { color:#0a3069 }
|
||||
/* LiteralStringAffix */ .chroma .sa { color:#0a3069 }
|
||||
/* LiteralStringBacktick */ .chroma .sb { color:#0a3069 }
|
||||
/* LiteralStringChar */ .chroma .sc { color:#0a3069 }
|
||||
/* LiteralStringDelimiter */ .chroma .dl { color:#0a3069 }
|
||||
/* LiteralStringDoc */ .chroma .sd { color:#0a3069 }
|
||||
/* LiteralStringDouble */ .chroma .s2 { color:#0a3069 }
|
||||
/* LiteralStringEscape */ .chroma .se { color:#0a3069 }
|
||||
/* LiteralStringHeredoc */ .chroma .sh { color:#0a3069 }
|
||||
/* LiteralStringInterpol */ .chroma .si { color:#0a3069 }
|
||||
/* LiteralStringOther */ .chroma .sx { color:#0a3069 }
|
||||
/* LiteralStringRegex */ .chroma .sr { color:#0a3069 }
|
||||
/* LiteralStringSingle */ .chroma .s1 { color:#0a3069 }
|
||||
/* LiteralStringSymbol */ .chroma .ss { color:#032f62 }
|
||||
/* LiteralNumber */ .chroma .m { color:#0550ae }
|
||||
/* LiteralNumberBin */ .chroma .mb { color:#0550ae }
|
||||
/* LiteralNumberFloat */ .chroma .mf { color:#0550ae }
|
||||
/* LiteralNumberHex */ .chroma .mh { color:#0550ae }
|
||||
/* LiteralNumberInteger */ .chroma .mi { color:#0550ae }
|
||||
/* LiteralNumberIntegerLong */ .chroma .il { color:#0550ae }
|
||||
/* LiteralNumberOct */ .chroma .mo { color:#0550ae }
|
||||
/* Operator */ .chroma .o { color:#0550ae }
|
||||
/* OperatorWord */ .chroma .ow { color:#0550ae }
|
||||
/* Punctuation */ .chroma .p { color:#1f2328 }
|
||||
/* Comment */ .chroma .c { color:#57606a }
|
||||
/* CommentHashbang */ .chroma .ch { color:#57606a }
|
||||
/* CommentMultiline */ .chroma .cm { color:#57606a }
|
||||
/* CommentSingle */ .chroma .c1 { color:#57606a }
|
||||
/* CommentSpecial */ .chroma .cs { color:#57606a }
|
||||
/* CommentPreproc */ .chroma .cp { color:#57606a }
|
||||
/* CommentPreprocFile */ .chroma .cpf { color:#57606a }
|
||||
/* GenericDeleted */ .chroma .gd { color:#82071e;background-color:#ffebe9 }
|
||||
/* GenericEmph */ .chroma .ge { color:#1f2328 }
|
||||
/* GenericInserted */ .chroma .gi { color:#116329;background-color:#dafbe1 }
|
||||
/* GenericOutput */ .chroma .go { color:#1f2328 }
|
||||
/* GenericUnderline */ .chroma .gl { text-decoration:underline }
|
||||
/* TextWhitespace */ .chroma .w { color:#fff }
|
||||
}
|
||||
html.dark {
|
||||
/* Generated using: hugo gen chromastyles --style=github-dark */
|
||||
|
||||
/* KeywordType */
|
||||
/* NameVariable */
|
||||
/* NameVariableInstance */
|
||||
/* NameVariableMagic */
|
||||
/* LiteralNumber */
|
||||
/* LiteralNumberBin */
|
||||
/* LiteralNumberFloat */
|
||||
/* LiteralNumberHex */
|
||||
/* LiteralNumberInteger */
|
||||
/* LiteralNumberIntegerLong */
|
||||
/* LiteralNumberOct */
|
||||
.chroma .kt,
|
||||
.chroma .nv,
|
||||
.chroma .vi,
|
||||
.chroma .vm,
|
||||
.chroma .m,
|
||||
.chroma .mb,
|
||||
.chroma .mf,
|
||||
.chroma .mh,
|
||||
.chroma .mi,
|
||||
.chroma .il,
|
||||
.chroma .mo {
|
||||
@apply text-secondary-400 dark:text-secondary-600;
|
||||
}
|
||||
|
||||
/* Name */
|
||||
/* NameDecorator */
|
||||
/* NameEntity */
|
||||
/* NameLabel */
|
||||
.chroma .n,
|
||||
.chroma .nd,
|
||||
.chroma .ni,
|
||||
.chroma .nl {
|
||||
@apply text-secondary-900 dark:text-secondary-200;
|
||||
}
|
||||
|
||||
/* NameAttribute */
|
||||
/* NameBuiltin */
|
||||
/* NameBuiltinPseudo */
|
||||
/* NameOther */
|
||||
/* NameProperty */
|
||||
/* NameTag */
|
||||
.chroma .na,
|
||||
.chroma .nb,
|
||||
.chroma .bp,
|
||||
.chroma .nx,
|
||||
.chroma .py,
|
||||
.chroma .nt {
|
||||
@apply text-secondary-800 dark:text-secondary-300;
|
||||
}
|
||||
|
||||
/* NameConstant */
|
||||
/* NameException */
|
||||
/* NameVariableGlobal */
|
||||
.chroma .no,
|
||||
.chroma .ne,
|
||||
.chroma .vg {
|
||||
@apply font-semibold text-secondary-400 dark:text-secondary-500;
|
||||
}
|
||||
|
||||
/* NameFunction */
|
||||
.chroma .nf {
|
||||
@apply text-secondary-600 dark:text-secondary-500;
|
||||
}
|
||||
|
||||
/* Literal */
|
||||
/* LiteralDate */
|
||||
/* LiteralString */
|
||||
/* LiteralStringAffix */
|
||||
/* LiteralStringBacktick */
|
||||
/* LiteralStringChar */
|
||||
/* LiteralStringDelimiter */
|
||||
/* LiteralStringDoc */
|
||||
/* LiteralStringDouble */
|
||||
/* LiteralStringHeredoc */
|
||||
/* LiteralStringInterpol */
|
||||
/* LiteralStringOther */
|
||||
/* LiteralStringSingle */
|
||||
/* GenericInserted */
|
||||
/* GenericOutput */
|
||||
/* GenericPrompt */
|
||||
.chroma .l,
|
||||
.chroma .ld,
|
||||
.chroma .s,
|
||||
.chroma .sa,
|
||||
.chroma .sb,
|
||||
.chroma .sc,
|
||||
.chroma .dl,
|
||||
.chroma .sd,
|
||||
.chroma .s2,
|
||||
.chroma .sh,
|
||||
.chroma .si,
|
||||
.chroma .sx,
|
||||
.chroma .s1,
|
||||
.chroma .gi,
|
||||
.chroma .go,
|
||||
.chroma .gp {
|
||||
@apply text-primary-800 dark:text-primary-400;
|
||||
}
|
||||
|
||||
/* LiteralStringEscape */
|
||||
.chroma .se {
|
||||
@apply font-semibold text-secondary-400 dark:text-secondary-500;
|
||||
}
|
||||
|
||||
/* LiteralStringRegex */
|
||||
/* LiteralStringSymbol */
|
||||
.chroma .sr,
|
||||
.chroma .ss {
|
||||
@apply font-semibold text-primary-800 dark:text-primary-400;
|
||||
}
|
||||
|
||||
/* OperatorWord */
|
||||
.chroma .ow {
|
||||
@apply font-semibold text-primary-400 dark:text-primary-600;
|
||||
}
|
||||
|
||||
/* Comment */
|
||||
/* CommentMultiline */
|
||||
/* CommentSingle */
|
||||
/* CommentSpecial */
|
||||
/* CommentPreproc */
|
||||
/* CommentPreprocFile */
|
||||
.chroma .c,
|
||||
.chroma .cm,
|
||||
.chroma .c1,
|
||||
.chroma .cs,
|
||||
.chroma .cp,
|
||||
.chroma .cpf {
|
||||
@apply italic text-neutral-500 dark:text-neutral-400;
|
||||
}
|
||||
|
||||
/* CommentHashbang */
|
||||
.chroma .ch {
|
||||
@apply italic font-semibold text-neutral-500 dark:text-neutral-400;
|
||||
}
|
||||
|
||||
/* GenericEmph */
|
||||
.chroma .ge {
|
||||
@apply italic;
|
||||
}
|
||||
|
||||
/* GenericHeading */
|
||||
.chroma .gh {
|
||||
@apply font-semibold text-neutral-500;
|
||||
}
|
||||
|
||||
/* GenericStrong */
|
||||
.chroma .gs {
|
||||
@apply font-semibold;
|
||||
}
|
||||
|
||||
/* GenericSubheading */
|
||||
/* GenericTraceback */
|
||||
.chroma .gu,
|
||||
.chroma .gt {
|
||||
@apply text-neutral-500;
|
||||
}
|
||||
|
||||
/* GenericUnderline */
|
||||
.chroma .gl {
|
||||
@apply underline;
|
||||
/* Background */ .bg { color:#e6edf3;background-color:#0d1117; }
|
||||
/* PreWrapper */ .chroma { color:#e6edf3;background-color:#0d1117; }
|
||||
/* Error */ .chroma .err { color:#f85149 }
|
||||
/* LineLink */ .chroma .lnlinks { outline:none;text-decoration:none;color:inherit }
|
||||
/* LineTableTD */ .chroma .lntd { vertical-align:top;padding:0;margin:0;border:0; }
|
||||
/* LineTable */ .chroma .lntable { border-spacing:0; }
|
||||
/* LineHighlight */ .chroma .hl { background-color:#333 }
|
||||
/* LineNumbersTable */ .chroma .lnt { white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679 }
|
||||
/* LineNumbers */ .chroma .ln { white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681 }
|
||||
/* Line */ .chroma .line { display:flex; }
|
||||
/* Keyword */ .chroma .k { color:#ff7b72 }
|
||||
/* KeywordConstant */ .chroma .kc { color:#79c0ff }
|
||||
/* KeywordDeclaration */ .chroma .kd { color:#ff7b72 }
|
||||
/* KeywordNamespace */ .chroma .kn { color:#ff7b72 }
|
||||
/* KeywordPseudo */ .chroma .kp { color:#79c0ff }
|
||||
/* KeywordReserved */ .chroma .kr { color:#ff7b72 }
|
||||
/* KeywordType */ .chroma .kt { color:#ff7b72 }
|
||||
/* NameClass */ .chroma .nc { color:#f0883e;font-weight:bold }
|
||||
/* NameConstant */ .chroma .no { color:#79c0ff;font-weight:bold }
|
||||
/* NameDecorator */ .chroma .nd { color:#d2a8ff;font-weight:bold }
|
||||
/* NameEntity */ .chroma .ni { color:#ffa657 }
|
||||
/* NameException */ .chroma .ne { color:#f0883e;font-weight:bold }
|
||||
/* NameLabel */ .chroma .nl { color:#79c0ff;font-weight:bold }
|
||||
/* NameNamespace */ .chroma .nn { color:#ff7b72 }
|
||||
/* NameProperty */ .chroma .py { color:#79c0ff }
|
||||
/* NameTag */ .chroma .nt { color:#7ee787 }
|
||||
/* NameVariable */ .chroma .nv { color:#79c0ff }
|
||||
/* NameVariableClass */ .chroma .vc { color:#79c0ff }
|
||||
/* NameVariableGlobal */ .chroma .vg { color:#79c0ff }
|
||||
/* NameVariableInstance */ .chroma .vi { color:#79c0ff }
|
||||
/* NameVariableMagic */ .chroma .vm { color:#79c0ff }
|
||||
/* NameFunction */ .chroma .nf { color:#d2a8ff;font-weight:bold }
|
||||
/* NameFunctionMagic */ .chroma .fm { color:#d2a8ff;font-weight:bold }
|
||||
/* Literal */ .chroma .l { color:#a5d6ff }
|
||||
/* LiteralDate */ .chroma .ld { color:#79c0ff }
|
||||
/* LiteralString */ .chroma .s { color:#a5d6ff }
|
||||
/* LiteralStringAffix */ .chroma .sa { color:#79c0ff }
|
||||
/* LiteralStringBacktick */ .chroma .sb { color:#a5d6ff }
|
||||
/* LiteralStringChar */ .chroma .sc { color:#a5d6ff }
|
||||
/* LiteralStringDelimiter */ .chroma .dl { color:#79c0ff }
|
||||
/* LiteralStringDoc */ .chroma .sd { color:#a5d6ff }
|
||||
/* LiteralStringDouble */ .chroma .s2 { color:#a5d6ff }
|
||||
/* LiteralStringEscape */ .chroma .se { color:#79c0ff }
|
||||
/* LiteralStringHeredoc */ .chroma .sh { color:#79c0ff }
|
||||
/* LiteralStringInterpol */ .chroma .si { color:#a5d6ff }
|
||||
/* LiteralStringOther */ .chroma .sx { color:#a5d6ff }
|
||||
/* LiteralStringRegex */ .chroma .sr { color:#79c0ff }
|
||||
/* LiteralStringSingle */ .chroma .s1 { color:#a5d6ff }
|
||||
/* LiteralStringSymbol */ .chroma .ss { color:#a5d6ff }
|
||||
/* LiteralNumber */ .chroma .m { color:#a5d6ff }
|
||||
/* LiteralNumberBin */ .chroma .mb { color:#a5d6ff }
|
||||
/* LiteralNumberFloat */ .chroma .mf { color:#a5d6ff }
|
||||
/* LiteralNumberHex */ .chroma .mh { color:#a5d6ff }
|
||||
/* LiteralNumberInteger */ .chroma .mi { color:#a5d6ff }
|
||||
/* LiteralNumberIntegerLong */ .chroma .il { color:#a5d6ff }
|
||||
/* LiteralNumberOct */ .chroma .mo { color:#a5d6ff }
|
||||
/* Operator */ .chroma .o { color:#ff7b72;font-weight:bold }
|
||||
/* OperatorWord */ .chroma .ow { color:#ff7b72;font-weight:bold }
|
||||
/* Comment */ .chroma .c { color:#8b949e;font-style:italic }
|
||||
/* CommentHashbang */ .chroma .ch { color:#8b949e;font-style:italic }
|
||||
/* CommentMultiline */ .chroma .cm { color:#8b949e;font-style:italic }
|
||||
/* CommentSingle */ .chroma .c1 { color:#8b949e;font-style:italic }
|
||||
/* CommentSpecial */ .chroma .cs { color:#8b949e;font-weight:bold;font-style:italic }
|
||||
/* CommentPreproc */ .chroma .cp { color:#8b949e;font-weight:bold;font-style:italic }
|
||||
/* CommentPreprocFile */ .chroma .cpf { color:#8b949e;font-weight:bold;font-style:italic }
|
||||
/* GenericDeleted */ .chroma .gd { color:#ffa198;background-color:#490202 }
|
||||
/* GenericEmph */ .chroma .ge { font-style:italic }
|
||||
/* GenericError */ .chroma .gr { color:#ffa198 }
|
||||
/* GenericHeading */ .chroma .gh { color:#79c0ff;font-weight:bold }
|
||||
/* GenericInserted */ .chroma .gi { color:#56d364;background-color:#0f5323 }
|
||||
/* GenericOutput */ .chroma .go { color:#8b949e }
|
||||
/* GenericPrompt */ .chroma .gp { color:#8b949e }
|
||||
/* GenericStrong */ .chroma .gs { font-weight:bold }
|
||||
/* GenericSubheading */ .chroma .gu { color:#79c0ff }
|
||||
/* GenericTraceback */ .chroma .gt { color:#ff7b72 }
|
||||
/* GenericUnderline */ .chroma .gl { text-decoration:underline }
|
||||
/* TextWhitespace */ .chroma .w { color:#6e7681 }
|
||||
}
|
||||
@@ -83,6 +83,22 @@
|
||||
width: calc(100% - 5px);
|
||||
margin: 0px !important;
|
||||
}
|
||||
|
||||
.gallery figure {
|
||||
display: inline-block;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.gallery figcaption {
|
||||
margin-top: 0.25rem;
|
||||
font-size: 0.875rem;
|
||||
line-height: 1.25rem;
|
||||
color: rgb(var(--color-neutral-600));
|
||||
}
|
||||
|
||||
.dark .gallery figcaption {
|
||||
color: rgb(var(--color-neutral-400));
|
||||
}
|
||||
@media (width >= 640px) {
|
||||
.sm\:grid-w10 {
|
||||
width: calc(10% - 5px);
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
.tab__button.tab--active {
|
||||
border-bottom: 2px solid rgb(var(--color-primary-500));
|
||||
}
|
||||
.tab__panel {
|
||||
display: none;
|
||||
}
|
||||
.tab__panel.tab--active {
|
||||
display: block;
|
||||
}
|
||||
@@ -1,11 +1,21 @@
|
||||
/*! Blowfish | MIT License | https://github.com/nunocoracao/blowfish */
|
||||
|
||||
@import "./components/zen-mode.css";
|
||||
@import "./components/chroma.css";
|
||||
@import "./components/a11y.css";
|
||||
@config "../../tailwind.config.js";
|
||||
|
||||
@import "tailwindcss";
|
||||
@config "../../tailwind.config.js";
|
||||
@import "./components/chroma.css" layer(utilities);
|
||||
@import "./components/tabs.css" layer(utilities);
|
||||
@import "./components/zen-mode.css";
|
||||
@import "./components/a11y.css";
|
||||
@import "./components/admonition.css" layer(components);
|
||||
|
||||
html:not(.dark) {
|
||||
color-scheme: light;
|
||||
}
|
||||
|
||||
html.dark {
|
||||
color-scheme: dark;
|
||||
}
|
||||
|
||||
body a,
|
||||
body button {
|
||||
@@ -66,10 +76,6 @@ button,
|
||||
}
|
||||
|
||||
/* Table of Contents */
|
||||
#TableOfContents {
|
||||
@apply lg:max-w-[25vw];
|
||||
}
|
||||
|
||||
#TOCView {
|
||||
max-height: calc(100vh - 150px);
|
||||
min-height: 0;
|
||||
@@ -86,7 +92,7 @@ button,
|
||||
}
|
||||
|
||||
.toc a {
|
||||
@apply font-normal text-neutral-700 dark:text-neutral-400;
|
||||
@apply font-normal text-neutral-700 dark:text-neutral-300;
|
||||
}
|
||||
|
||||
.toc ul > li {
|
||||
@@ -94,15 +100,11 @@ button,
|
||||
}
|
||||
|
||||
/* Code Copy */
|
||||
.highlight-wrapper {
|
||||
@apply block;
|
||||
}
|
||||
|
||||
.highlight {
|
||||
@apply relative z-0;
|
||||
}
|
||||
|
||||
.highlight:hover > .copy-button {
|
||||
.highlight-wrapper:hover > .copy-button {
|
||||
@apply visible;
|
||||
}
|
||||
|
||||
@@ -130,8 +132,8 @@ button,
|
||||
|
||||
/* Fix katex overflow https://github.com/nunocoracao/blowfish/issues/2138 */
|
||||
.katex-display {
|
||||
padding-right: 2px;
|
||||
width: calc(100% - 2px);
|
||||
padding: 1em;
|
||||
width: calc(100% - 1em);
|
||||
}
|
||||
|
||||
/* Fix long tables breaking out of article on mobile */
|
||||
@@ -163,40 +165,13 @@ pre {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.thumbnail,
|
||||
.thumbnail_card,
|
||||
.thumbnail_card_related,
|
||||
.thumbnail_card_term,
|
||||
.single_hero_basic,
|
||||
.single_hero_background {
|
||||
background-repeat: no-repeat;
|
||||
background-size: cover;
|
||||
background-position: center;
|
||||
}
|
||||
|
||||
.thumbnail {
|
||||
min-width: 300px;
|
||||
height: 180px;
|
||||
}
|
||||
|
||||
.thumbnail_card {
|
||||
height: 200px;
|
||||
}
|
||||
|
||||
.thumbnail_card_related {
|
||||
height: 150px;
|
||||
}
|
||||
|
||||
.thumbnail_card_term {
|
||||
height: 150px;
|
||||
}
|
||||
|
||||
.single_hero_round {
|
||||
max-height: 50vh;
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
.single_hero_background {
|
||||
width: calc(100% + 1px); /* patch for very small gap at right edge on mobile devices */
|
||||
z-index: -10;
|
||||
}
|
||||
|
||||
@@ -205,10 +180,42 @@ pre {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.thumbnailshadow {
|
||||
.thumbnail_card {
|
||||
min-width: 300px;
|
||||
height: 200px;
|
||||
}
|
||||
|
||||
.thumbnail_card_related {
|
||||
height: 150px;
|
||||
}
|
||||
|
||||
.thumbnail {
|
||||
width: 300px;
|
||||
min-height: 180px;
|
||||
}
|
||||
|
||||
@variant max-md {
|
||||
.thumbnail {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.thumbnail-shadow {
|
||||
box-shadow: 5px 5px 20px 1px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
/* placeholder for gallery/carousel */
|
||||
@variant max-md {
|
||||
.width-patch {
|
||||
width: 80vw;
|
||||
}
|
||||
}
|
||||
@variant min-md {
|
||||
.width-patch {
|
||||
width: 65ch;
|
||||
}
|
||||
}
|
||||
|
||||
.anchor {
|
||||
display: block;
|
||||
position: relative;
|
||||
@@ -223,22 +230,18 @@ pre {
|
||||
scroll-margin-top: 145px;
|
||||
}
|
||||
|
||||
/* patch for skip to main content */
|
||||
#main-content {
|
||||
scroll-margin-top: -125px;
|
||||
}
|
||||
|
||||
@variant sm {
|
||||
.thumbnail {
|
||||
min-width: 100%;
|
||||
height: 180px;
|
||||
}
|
||||
.article {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
}
|
||||
|
||||
@variant md {
|
||||
.thumbnail {
|
||||
min-width: 300px;
|
||||
min-height: 180px;
|
||||
height: auto;
|
||||
}
|
||||
.article {
|
||||
flex-wrap: nowrap;
|
||||
}
|
||||
@@ -248,29 +251,62 @@ pre {
|
||||
z-index: 100;
|
||||
}
|
||||
|
||||
.nested-menu:hover + .menuhide {
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
transition:
|
||||
visibility 0.3s,
|
||||
opacity 0.3s ease-in-out;
|
||||
@layer utilities {
|
||||
.bf-border-color {
|
||||
@apply border-neutral-300 dark:border-neutral-700;
|
||||
}
|
||||
|
||||
.bf-border-color-hover {
|
||||
@apply hover:border-primary-600 dark:hover:border-primary-400;
|
||||
}
|
||||
|
||||
.bf-icon-color-hover {
|
||||
@apply hover:text-primary-600 dark:hover:text-primary-400;
|
||||
}
|
||||
|
||||
.bf-scrollbar {
|
||||
@apply scrollbar-thin scrollbar-track-neutral-200 scrollbar-thumb-neutral-400 dark:scrollbar-track-neutral-800 dark:scrollbar-thumb-neutral-600;
|
||||
}
|
||||
}
|
||||
|
||||
.menuhide:hover {
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
transition:
|
||||
visibility 0.3s,
|
||||
opacity 0.3s ease-in-out;
|
||||
/* Prevent body scroll when mobile menu is open */
|
||||
body:has(#mobile-menu-toggle:checked) {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Reset body position for desktop after it was modified on mobile */
|
||||
@media (min-width: 853px) {
|
||||
body:has(#mobile-menu-toggle:checked) {
|
||||
overflow: visible;
|
||||
}
|
||||
}
|
||||
|
||||
/* Hide buy me a coffee in mobile menu */
|
||||
#bmc-wbtn {
|
||||
z-index: 50 !important;
|
||||
}
|
||||
|
||||
.nested-menu {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.menuhide {
|
||||
visibility: hidden;
|
||||
position: absolute;
|
||||
z-index: 1000;
|
||||
white-space: nowrap;
|
||||
|
||||
opacity: 0;
|
||||
visibility: hidden;
|
||||
|
||||
transition:
|
||||
visibility 0.3s,
|
||||
opacity 0.3s ease-in-out;
|
||||
z-index: 1000;
|
||||
}
|
||||
|
||||
.nested-menu:hover .menuhide,
|
||||
.nested-menu:focus-within .menuhide {
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
.active {
|
||||
@@ -278,8 +314,3 @@ pre {
|
||||
text-decoration-thickness: 3px;
|
||||
text-underline-offset: 4px;
|
||||
}
|
||||
|
||||
/* Cancel group hover if .group-hover-card contains .group-hover-cancel*/
|
||||
.group-hover-card:hover:has(.group-hover-cancel:hover) .group-hover-card-title {
|
||||
text-decoration: none !important;
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
:root {
|
||||
--color-neutral: 255, 255, 255;
|
||||
--color-neutral-50: 248, 250, 252;
|
||||
--color-neutral-100: 241, 245, 249;
|
||||
--color-neutral-200: 226, 232, 240;
|
||||
--color-neutral-300: 203, 213, 225;
|
||||
--color-neutral-400: 148, 163, 184;
|
||||
--color-neutral-500: 100, 116, 139;
|
||||
--color-neutral-600: 71, 85, 105;
|
||||
--color-neutral-700: 51, 57, 65;
|
||||
--color-neutral-800: 20, 25, 31;
|
||||
--color-neutral-900: 15, 23, 42;
|
||||
|
||||
--color-primary-50: 226, 242, 255;
|
||||
--color-primary-100: 186, 221, 255;
|
||||
--color-primary-200: 141, 201, 255;
|
||||
--color-primary-300: 91, 179, 255;
|
||||
--color-primary-400: 50, 162, 255;
|
||||
--color-primary-500: 0, 146, 255;
|
||||
--color-primary-600: 23, 131, 255;
|
||||
--color-primary-700: 31, 113, 235;
|
||||
--color-primary-800: 35, 95, 216;
|
||||
--color-primary-900: 38, 61, 185;
|
||||
|
||||
--color-secondary-50: 255, 236, 241;
|
||||
--color-secondary-100: 255, 208, 218;
|
||||
--color-secondary-200: 253, 157, 166;
|
||||
--color-secondary-300: 249, 117, 130;
|
||||
--color-secondary-400: 255, 79, 98;
|
||||
--color-secondary-500: 255, 57, 73;
|
||||
--color-secondary-600: 255, 48, 72;
|
||||
--color-secondary-700: 237, 36, 65;
|
||||
--color-secondary-800: 224, 27, 58;
|
||||
--color-secondary-900: 209, 4, 45;
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
:root {
|
||||
--color-neutral: 255, 255, 255;
|
||||
--color-neutral-50: 248, 248, 248;
|
||||
--color-neutral-100: 241, 241, 241;
|
||||
--color-neutral-200: 226, 226, 226;
|
||||
--color-neutral-300: 203, 203, 203;
|
||||
--color-neutral-400: 188, 188, 188;
|
||||
--color-neutral-500: 100, 100, 100;
|
||||
--color-neutral-600: 71, 71, 71;
|
||||
--color-neutral-700: 45, 45, 45;
|
||||
--color-neutral-800: 23, 23, 23;
|
||||
--color-neutral-900: 15, 15, 15;
|
||||
|
||||
--color-primary-50: 224, 244, 255;
|
||||
--color-primary-100: 179, 224, 255;
|
||||
--color-primary-200: 128, 202, 255;
|
||||
--color-primary-300: 77, 179, 249;
|
||||
--color-primary-400: 31, 158, 234;
|
||||
--color-primary-500: 0, 122, 204;
|
||||
--color-primary-600: 0, 110, 184;
|
||||
--color-primary-700: 0, 94, 163;
|
||||
--color-primary-800: 0, 79, 143;
|
||||
--color-primary-900: 0, 57, 111;
|
||||
|
||||
--color-secondary-50: 225, 244, 238;
|
||||
--color-secondary-100: 182, 227, 212;
|
||||
--color-secondary-200: 135, 209, 184;
|
||||
--color-secondary-300: 88, 190, 157;
|
||||
--color-secondary-400: 55, 175, 137;
|
||||
--color-secondary-500: 32, 160, 119;
|
||||
--color-secondary-600: 28, 146, 107;
|
||||
--color-secondary-700: 22, 130, 92;
|
||||
--color-secondary-800: 12, 114, 79;
|
||||
--color-secondary-900: 0, 86, 52;
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
||||
<path fill="currentColor" d="M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM169.8 165.3c7.9-22.3 29.1-37.3 52.8-37.3h58.3c34.9 0 63.1 28.3 63.1 63.1c0 22.6-12.1 43.5-31.7 54.8L280 264.4c-.2 13-10.9 23.6-24 23.6c-13.3 0-24-10.7-24-24V250.5c0-8.6 4.6-16.5 12.1-20.8l44.3-25.4c4.7-2.7 7.6-7.7 7.6-13.1c0-8.4-6.8-15.1-15.1-15.1H222.6c-3.4 0-6.4 2.1-7.5 5.3l-.4 1.2c-4.4 12.5-18.2 19-30.6 14.6s-19-18.2-14.6-30.6l.4-1.2zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 538 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M495.8 0c5.5 0 10.9 .2 16.3 .7c7 .6 12.8 5.7 14.3 12.5s-1.6 13.9-7.7 17.3c-44.4 25.2-74.4 73-74.4 127.8c0 81 65.5 146.6 146.2 146.6c8.6 0 17-.7 25.1-2.1c6.9-1.2 13.8 2.2 17 8.5s1.9 13.8-3.1 18.7c-34.5 33.6-81.7 54.4-133.6 54.4c-9.3 0-18.4-.7-27.4-1.9c-11.2-22.6-29.8-40.9-52.6-51.7c-2.7-58.5-50.3-105.3-109.2-106.7c-1.7-10.4-2.6-21-2.6-31.8C304 86.1 389.8 0 495.8 0zM447.9 431.9c0 44.2-35.8 80-80 80L96 511.9c-53 0-96-43-96-96c0-47.6 34.6-87 80-94.6l0-1.3c0-53 43-96 96-96c34.9 0 65.4 18.6 82.2 46.4c13-9.1 28.8-14.4 45.8-14.4c44.2 0 80 35.8 80 80c0 5.9-.6 11.7-1.9 17.2c37.4 6.7 65.8 39.4 65.8 78.7z"/></svg>
|
||||
|
After Width: | Height: | Size: 700 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M0 336c0 79.5 64.5 144 144 144l368 0c70.7 0 128-57.3 128-128c0-61.9-44-113.6-102.4-125.4c4.1-10.7 6.4-22.4 6.4-34.6c0-53-43-96-96-96c-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32C167.6 32 96 103.6 96 192c0 2.7 .1 5.4 .2 8.1C40.2 219.8 0 273.2 0 336z"/></svg>
|
||||
|
After Width: | Height: | Size: 353 B |
@@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512">
|
||||
<path fill="currentColor" d="M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM112 256H272c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64H272c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64H272c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 479 B |
@@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
||||
<path fill="currentColor" d="M152.1 38.2c9.9 8.9 10.7 24 1.8 33.9l-72 80c-4.4 4.9-10.6 7.8-17.2 7.9s-12.9-2.4-17.6-7L7 113C-2.3 103.6-2.3 88.4 7 79s24.6-9.4 33.9 0l22.1 22.1 55.1-61.2c8.9-9.9 24-10.7 33.9-1.8zm0 160c9.9 8.9 10.7 24 1.8 33.9l-72 80c-4.4 4.9-10.6 7.8-17.2 7.9s-12.9-2.4-17.6-7L7 273c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l22.1 22.1 55.1-61.2c8.9-9.9 24-10.7 33.9-1.8zM224 96c0-17.7 14.3-32 32-32H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H256c-17.7 0-32-14.3-32-32zm0 160c0-17.7 14.3-32 32-32H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H256c-17.7 0-32-14.3-32-32zM160 416c0-17.7 14.3-32 32-32H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H192c-17.7 0-32-14.3-32-32zM48 368a48 48 0 1 1 0 96 48 48 0 1 1 0-96z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 787 B |
@@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
||||
<path fill="currentColor" d="M24 56c0-13.3 10.7-24 24-24H80c13.3 0 24 10.7 24 24V176h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H48c-13.3 0-24-10.7-24-24s10.7-24 24-24H64V80H48C34.7 80 24 69.3 24 56zM86.7 341.2c-6.5-7.4-18.3-6.9-24 1.2L51.5 357.9c-7.7 10.8-22.7 13.3-33.5 5.6s-13.3-22.7-5.6-33.5l11.1-15.6c23.7-33.2 72.3-35.6 99.2-4.9c21.3 24.4 20.8 60.9-1.1 84.7L86.8 432H120c13.3 0 24 10.7 24 24s-10.7 24-24 24H48c-9.5 0-18.2-5.6-22-14.4s-2.1-18.9 4.3-25.9l72-78c5.3-5.8 5.4-14.6 .3-20.5zM224 64H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H224c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 160H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H224c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 160H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H224c-17.7 0-32-14.3-32-32s14.3-32 32-32z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 823 B |
@@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512">
|
||||
<path fill="currentColor" d="M0 216C0 149.7 53.7 96 120 96h8c17.7 0 32 14.3 32 32s-14.3 32-32 32h-8c-30.9 0-56 25.1-56 56v8h64c35.3 0 64 28.7 64 64v64c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V216zm256 0c0-66.3 53.7-120 120-120h8c17.7 0 32 14.3 32 32s-14.3 32-32 32h-8c-30.9 0-56 25.1-56 56v8h64c35.3 0 64 28.7 64 64v64c0 35.3-28.7 64-64 64H320c-35.3 0-64-28.7-64-64V216z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 451 B |
@@ -1,194 +1,170 @@
|
||||
const getA11ySettings = () => {
|
||||
const settings = localStorage.getItem("a11ySettings");
|
||||
return settings
|
||||
? JSON.parse(settings)
|
||||
: {
|
||||
disableBlur: false,
|
||||
disableImages: false,
|
||||
fontSize: "default",
|
||||
underlineLinks: false,
|
||||
zenMode: false,
|
||||
};
|
||||
};
|
||||
window.A11yPanel = (() => {
|
||||
const FEATURES = {
|
||||
disableBlur: {
|
||||
default: false,
|
||||
apply: (enabled) => {
|
||||
document.querySelectorAll("script[data-blur-id]").forEach((script) => {
|
||||
const targetId = script.getAttribute("data-blur-id");
|
||||
const scrollDivisor = Number(script.getAttribute("data-scroll-divisor") || 300);
|
||||
if (typeof setBackgroundBlur === "function") {
|
||||
setBackgroundBlur(targetId, scrollDivisor, enabled, targetId === "menu-blur");
|
||||
}
|
||||
});
|
||||
},
|
||||
},
|
||||
|
||||
const saveA11ySettings = (settings) => {
|
||||
localStorage.setItem("a11ySettings", JSON.stringify(settings));
|
||||
};
|
||||
disableImages: {
|
||||
default: false,
|
||||
apply: (enabled) => {
|
||||
const image = document.getElementById("background-image");
|
||||
if (image) {
|
||||
image.style.display = enabled ? "none" : "";
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
const applyImageState = (imageElement, imageUrl, disableImages) => {
|
||||
if (!imageElement) return;
|
||||
if (disableImages) {
|
||||
imageElement.style.display = "none";
|
||||
} else {
|
||||
imageElement.style.display = "";
|
||||
if (imageUrl && !imageElement.getAttribute("src")) {
|
||||
imageElement.setAttribute("src", imageUrl);
|
||||
fontSize: {
|
||||
default: "default",
|
||||
apply: (size) => {
|
||||
document.documentElement.style.fontSize = size === "default" ? "" : size;
|
||||
},
|
||||
},
|
||||
|
||||
underlineLinks: {
|
||||
default: false,
|
||||
apply: (enabled) => {
|
||||
const existing = document.getElementById("a11y-underline-links");
|
||||
if (enabled && !existing) {
|
||||
const style = document.createElement("style");
|
||||
style.id = "a11y-underline-links";
|
||||
style.textContent = `
|
||||
a { text-decoration: underline !important; }
|
||||
.group-hover-card-title { text-decoration: underline !important; }
|
||||
.group-hover-card:hover .group-hover-card-title { text-decoration: underline !important; }`;
|
||||
document.head.appendChild(style);
|
||||
} else if (!enabled && existing) {
|
||||
existing.remove();
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
zenMode: {
|
||||
default: false,
|
||||
apply: (enabled) => {
|
||||
const isActive = document.body?.classList.contains("zen-mode-enable");
|
||||
if (enabled !== isActive) {
|
||||
const checkbox = document.querySelector('[id$="zen-mode"]');
|
||||
if (checkbox && typeof _toggleZenMode === "function") {
|
||||
_toggleZenMode(checkbox, { scrollToHeader: false });
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
let settings = null;
|
||||
|
||||
const getSettings = () => {
|
||||
if (settings) return settings;
|
||||
const defaults = Object.fromEntries(Object.entries(FEATURES).map(([key, config]) => [key, config.default]));
|
||||
try {
|
||||
const saved = localStorage.getItem("a11ySettings");
|
||||
settings = { ...defaults, ...JSON.parse(saved || "{}") };
|
||||
} catch {
|
||||
settings = defaults;
|
||||
}
|
||||
}
|
||||
};
|
||||
return settings;
|
||||
};
|
||||
|
||||
const applyFontSize = (fontSizePx) => {
|
||||
const isDefaultSettings = localStorage.getItem("a11ySettings") === null;
|
||||
if (!isDefaultSettings && fontSizePx !== "default") {
|
||||
document.documentElement.style.fontSize = fontSizePx;
|
||||
}
|
||||
};
|
||||
|
||||
const applyUnderlineLinks = (enabled) => {
|
||||
let styleElement = document.getElementById("a11y-underline-links");
|
||||
if (enabled) {
|
||||
if (!styleElement) {
|
||||
styleElement = document.createElement("style");
|
||||
styleElement.id = "a11y-underline-links";
|
||||
styleElement.textContent = "a { text-decoration: underline !important; }";
|
||||
document.head.appendChild(styleElement);
|
||||
const updateSetting = (key, value) => {
|
||||
const current = getSettings();
|
||||
current[key] = value;
|
||||
try {
|
||||
localStorage.setItem("a11ySettings", JSON.stringify(current));
|
||||
} catch (e) {
|
||||
console.warn(`a11y.js: can not store settings: ${e}`);
|
||||
}
|
||||
} else {
|
||||
if (styleElement) {
|
||||
styleElement.remove();
|
||||
}
|
||||
}
|
||||
};
|
||||
FEATURES[key]?.apply(value);
|
||||
};
|
||||
|
||||
const applyZenMode = (enabled) => {
|
||||
const body = document.querySelector("body");
|
||||
const isZenModeActive = body && body.classList.contains("zen-mode-enable");
|
||||
const initPanel = (panelId) => {
|
||||
const prefix = panelId.replace("a11y-panel", "");
|
||||
const current = getSettings();
|
||||
|
||||
// Toggle only if current state doesn't match desired state
|
||||
if (enabled !== isZenModeActive) {
|
||||
const zenModeCheckbox = document.querySelector('[id$="zen-mode"]');
|
||||
if (zenModeCheckbox && typeof _toggleZenMode === "function") {
|
||||
_toggleZenMode(zenModeCheckbox, { scrollToHeader: false });
|
||||
}
|
||||
}
|
||||
};
|
||||
Object.entries(FEATURES).forEach(([key, config]) => {
|
||||
const elementId = `${prefix}${key.replace(/([A-Z])/g, "-$1").toLowerCase()}`;
|
||||
const element = document.getElementById(elementId) || document.getElementById(`${elementId}-select`);
|
||||
|
||||
const applyA11ySettings = () => {
|
||||
const settings = getA11ySettings();
|
||||
document.querySelectorAll("script[data-target-id]").forEach((script) => {
|
||||
const targetId = script.getAttribute("data-target-id");
|
||||
const scrollDivisor = Number(script.getAttribute("data-scroll-divisor") || 300);
|
||||
const imageId = script.getAttribute("data-image-id");
|
||||
const imageUrl = script.getAttribute("data-image-url");
|
||||
const isMenuBlur = targetId === "menu-blur";
|
||||
setBackgroundBlur(targetId, scrollDivisor, settings.disableBlur, isMenuBlur);
|
||||
applyImageState(document.getElementById(imageId), imageUrl, settings.disableImages);
|
||||
});
|
||||
applyFontSize(settings.fontSize);
|
||||
applyUnderlineLinks(settings.underlineLinks);
|
||||
applyZenMode(settings.zenMode);
|
||||
};
|
||||
|
||||
const updateA11ySetting = (key, value) => {
|
||||
const settings = getA11ySettings();
|
||||
settings[key] = value;
|
||||
saveA11ySettings(settings);
|
||||
applyA11ySettings();
|
||||
};
|
||||
|
||||
const toggleA11yPanel = (prefix = "") => {
|
||||
const panel = document.getElementById(`${prefix}a11y-panel`);
|
||||
const overlay = document.getElementById(`${prefix}a11y-overlay`);
|
||||
const button = document.getElementById(`${prefix}a11y-toggle`);
|
||||
if (!panel || !overlay || !button) return;
|
||||
if (overlay.classList.contains("hidden")) {
|
||||
overlay.classList.remove("hidden");
|
||||
panel.classList.remove("hidden");
|
||||
button.setAttribute("aria-pressed", "true");
|
||||
button.setAttribute("aria-expanded", "true");
|
||||
} else {
|
||||
overlay.classList.add("hidden");
|
||||
panel.classList.add("hidden");
|
||||
button.setAttribute("aria-pressed", "false");
|
||||
button.setAttribute("aria-expanded", "false");
|
||||
}
|
||||
};
|
||||
|
||||
const initA11yPanel = (prefix = "") => {
|
||||
const settings = getA11ySettings();
|
||||
const checkboxBlur = document.getElementById(`${prefix}disable-blur`);
|
||||
const checkboxImages = document.getElementById(`${prefix}disable-images`);
|
||||
const checkboxUnderline = document.getElementById(`${prefix}underline-links`);
|
||||
const checkboxZenMode = document.getElementById(`${prefix}zen-mode`);
|
||||
const fontSizeSelect = document.getElementById(`${prefix}font-size-select`);
|
||||
const toggleButton = document.getElementById(`${prefix}a11y-toggle`);
|
||||
const closeButton = document.getElementById(`${prefix}a11y-close`);
|
||||
const overlay = document.getElementById(`${prefix}a11y-overlay`);
|
||||
|
||||
if (
|
||||
!checkboxBlur ||
|
||||
!checkboxImages ||
|
||||
!checkboxUnderline ||
|
||||
!checkboxZenMode ||
|
||||
!fontSizeSelect ||
|
||||
!toggleButton ||
|
||||
!closeButton ||
|
||||
!overlay
|
||||
) {
|
||||
console.warn(`One or more a11y elements not found for prefix: ${prefix}`);
|
||||
return;
|
||||
}
|
||||
|
||||
checkboxBlur.checked = settings.disableBlur;
|
||||
checkboxImages.checked = settings.disableImages;
|
||||
checkboxUnderline.checked = settings.underlineLinks;
|
||||
checkboxZenMode.checked = settings.zenMode;
|
||||
fontSizeSelect.value = settings.fontSize;
|
||||
|
||||
checkboxBlur.addEventListener("change", (e) => updateA11ySetting("disableBlur", e.target.checked));
|
||||
checkboxImages.addEventListener("change", (e) => updateA11ySetting("disableImages", e.target.checked));
|
||||
checkboxUnderline.addEventListener("change", (e) => updateA11ySetting("underlineLinks", e.target.checked));
|
||||
checkboxZenMode.addEventListener("change", (e) => {
|
||||
// Only save setting, let applyZenMode handle the toggle logic
|
||||
updateA11ySetting("zenMode", e.target.checked);
|
||||
});
|
||||
fontSizeSelect.addEventListener("change", (e) => {
|
||||
// Remove fontSize from localStorage when default is selected
|
||||
if (e.target.value === "default") {
|
||||
const settings = getA11ySettings();
|
||||
delete settings.fontSize;
|
||||
saveA11ySettings(settings);
|
||||
document.documentElement.style.fontSize = "";
|
||||
} else {
|
||||
updateA11ySetting("fontSize", e.target.value);
|
||||
}
|
||||
});
|
||||
|
||||
toggleButton.addEventListener("click", () => toggleA11yPanel(prefix));
|
||||
closeButton.addEventListener("click", () => toggleA11yPanel(prefix));
|
||||
overlay.addEventListener("click", (e) => {
|
||||
if (e.target === overlay) {
|
||||
toggleA11yPanel(prefix);
|
||||
}
|
||||
});
|
||||
|
||||
document.querySelectorAll(`.ios-toggle${prefix ? `[id^="${prefix}"]` : ""}`).forEach((toggle) => {
|
||||
const checkbox = toggle.querySelector('input[type="checkbox"]');
|
||||
if (!checkbox) return;
|
||||
const newToggle = toggle.cloneNode(true);
|
||||
toggle.parentNode.replaceChild(newToggle, toggle);
|
||||
newToggle.addEventListener("click", () => {
|
||||
const newCheckbox = newToggle.querySelector('input[type="checkbox"]');
|
||||
if (newCheckbox) {
|
||||
newCheckbox.checked = !newCheckbox.checked;
|
||||
newCheckbox.dispatchEvent(new Event("change", { bubbles: true }));
|
||||
if (element) {
|
||||
if (element.type === "checkbox") {
|
||||
element.checked = current[key];
|
||||
element.onchange = (e) => updateSetting(key, e.target.checked);
|
||||
} else if (element.tagName === "SELECT") {
|
||||
element.value = current[key];
|
||||
element.onchange = (e) => updateSetting(key, e.target.value);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
document.querySelectorAll("script[data-target-id]").forEach((script) => {
|
||||
const imageId = script.getAttribute("data-image-id");
|
||||
const imageUrl = script.getAttribute("data-image-url");
|
||||
const settings = getA11ySettings();
|
||||
applyImageState(document.getElementById(imageId), imageUrl, settings.disableImages);
|
||||
});
|
||||
const togglePanel = () => {
|
||||
const panel = document.getElementById(panelId);
|
||||
const overlay = document.getElementById(`${prefix}a11y-overlay`);
|
||||
const toggle = document.getElementById(`${prefix}a11y-toggle`);
|
||||
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
applyA11ySettings();
|
||||
const allPanels = document.querySelectorAll('[id$="a11y-panel"]');
|
||||
allPanels.forEach((panel) => {
|
||||
const prefix = panel.id.replace("a11y-panel", "");
|
||||
initA11yPanel(prefix);
|
||||
});
|
||||
});
|
||||
if (!panel || !overlay) return;
|
||||
|
||||
const isHidden = overlay.classList.contains("hidden");
|
||||
overlay.classList.toggle("hidden");
|
||||
panel.classList.toggle("hidden");
|
||||
|
||||
if (toggle) {
|
||||
toggle.setAttribute("aria-pressed", String(isHidden));
|
||||
toggle.setAttribute("aria-expanded", String(isHidden));
|
||||
}
|
||||
};
|
||||
|
||||
const toggle = document.getElementById(`${prefix}a11y-toggle`);
|
||||
const close = document.getElementById(`${prefix}a11y-close`);
|
||||
const overlay = document.getElementById(`${prefix}a11y-overlay`);
|
||||
|
||||
if (toggle) toggle.onclick = togglePanel;
|
||||
if (close) close.onclick = togglePanel;
|
||||
if (overlay) overlay.onclick = (e) => e.target === overlay && togglePanel();
|
||||
};
|
||||
|
||||
const applyAll = () => {
|
||||
const current = getSettings();
|
||||
Object.entries(current).forEach(([key, value]) => {
|
||||
FEATURES[key]?.apply(value);
|
||||
});
|
||||
};
|
||||
|
||||
const init = () => {
|
||||
applyAll();
|
||||
document.querySelectorAll('[id$="a11y-panel"]').forEach((panel) => {
|
||||
initPanel(panel.id);
|
||||
});
|
||||
};
|
||||
|
||||
if (getSettings().disableImages) {
|
||||
new MutationObserver(() => {
|
||||
const img = document.getElementById("background-image");
|
||||
if (img) img.style.display = "none";
|
||||
}).observe(document, { childList: true, subtree: true });
|
||||
}
|
||||
|
||||
if (document.readyState === "loading") {
|
||||
document.addEventListener("DOMContentLoaded", init);
|
||||
} else {
|
||||
init();
|
||||
}
|
||||
|
||||
return {
|
||||
getSettings,
|
||||
updateSetting,
|
||||
addFeature: (name, config) => {
|
||||
FEATURES[name] = config;
|
||||
FEATURES[name].apply(getSettings()[name] || config.default);
|
||||
},
|
||||
};
|
||||
})();
|
||||
@@ -22,6 +22,34 @@ if (document.documentElement.getAttribute("data-auto-appearance") === "true") {
|
||||
});
|
||||
}
|
||||
|
||||
// Mermaid dark mode support
|
||||
var updateMermaidTheme = () => {
|
||||
if (typeof mermaid !== 'undefined') {
|
||||
const isDark = document.documentElement.classList.contains("dark");
|
||||
|
||||
const mermaids = document.querySelectorAll('pre.mermaid');
|
||||
mermaids.forEach(e => {
|
||||
if (e.getAttribute('data-processed')) {
|
||||
// Already rendered, clean the processed attributes
|
||||
e.removeAttribute('data-processed');
|
||||
// Replace the rendered HTML with the stored text
|
||||
e.innerHTML = e.getAttribute('data-graph');
|
||||
} else {
|
||||
// First time, store the text
|
||||
e.setAttribute('data-graph', e.textContent);
|
||||
}
|
||||
});
|
||||
|
||||
if (isDark) {
|
||||
initMermaidDark();
|
||||
mermaid.run();
|
||||
} else {
|
||||
initMermaidLight();
|
||||
mermaid.run();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener("DOMContentLoaded", (event) => {
|
||||
const switcher = document.getElementById("appearance-switcher");
|
||||
const switcherMobile = document.getElementById("appearance-switcher-mobile");
|
||||
@@ -29,6 +57,9 @@ window.addEventListener("DOMContentLoaded", (event) => {
|
||||
updateMeta();
|
||||
this.updateLogo?.(getTargetAppearance());
|
||||
|
||||
// Initialize mermaid theme on page load
|
||||
updateMermaidTheme();
|
||||
|
||||
if (switcher) {
|
||||
switcher.addEventListener("click", () => {
|
||||
document.documentElement.classList.toggle("dark");
|
||||
@@ -38,6 +69,7 @@ window.addEventListener("DOMContentLoaded", (event) => {
|
||||
targetAppearance
|
||||
);
|
||||
updateMeta();
|
||||
updateMermaidTheme();
|
||||
this.updateLogo?.(targetAppearance);
|
||||
});
|
||||
switcher.addEventListener("contextmenu", (event) => {
|
||||
@@ -54,6 +86,7 @@ window.addEventListener("DOMContentLoaded", (event) => {
|
||||
targetAppearance
|
||||
);
|
||||
updateMeta();
|
||||
updateMermaidTheme();
|
||||
this.updateLogo?.(targetAppearance);
|
||||
});
|
||||
switcherMobile.addEventListener("contextmenu", (event) => {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
function setBackgroundBlur(targetId, scrollDivisor = 300, disableBlur = false, isMenuBlur = false) {
|
||||
if (!targetId) {
|
||||
console.error("data-target-id is null");
|
||||
console.error("data-blur-id is null");
|
||||
return;
|
||||
}
|
||||
const blurElement = document.getElementById(targetId);
|
||||
@@ -29,24 +29,11 @@ function setBackgroundBlur(targetId, scrollDivisor = 300, disableBlur = false, i
|
||||
updateBlur();
|
||||
}
|
||||
|
||||
document.querySelectorAll("script[data-target-id]").forEach((script) => {
|
||||
const targetId = script.getAttribute("data-target-id");
|
||||
document.querySelectorAll("script[data-blur-id]").forEach((script) => {
|
||||
const targetId = script.getAttribute("data-blur-id");
|
||||
const scrollDivisor = Number(script.getAttribute("data-scroll-divisor") || 300);
|
||||
const isMenuBlur = targetId === "menu-blur";
|
||||
const settings = JSON.parse(localStorage.getItem("a11ySettings") || "{}");
|
||||
const disableBlur = settings.disableBlur || false;
|
||||
setBackgroundBlur(targetId, scrollDivisor, disableBlur, isMenuBlur);
|
||||
});
|
||||
|
||||
// Prevent disableImages FOUC
|
||||
// Note: I tried putting this in a11y.js but it did not work, and placing it here prevents FOUC
|
||||
(() => {
|
||||
const settings = JSON.parse(localStorage.getItem("a11ySettings") || "{}");
|
||||
if (settings.disableImages) {
|
||||
document.querySelectorAll("script[data-image-id]").forEach((script) => {
|
||||
const imageId = script.getAttribute("data-image-id");
|
||||
const image = imageId && document.getElementById(imageId);
|
||||
if (image) image.style.display = "none";
|
||||
});
|
||||
}
|
||||
})();
|
||||
@@ -1,4 +0,0 @@
|
||||
document.getElementById("button_likes") &&
|
||||
document.getElementById("button_likes").addEventListener("click", () => {
|
||||
process_article();
|
||||
});
|
||||
@@ -1,70 +1,78 @@
|
||||
var scriptBundle = document.getElementById("script-bundle");
|
||||
var copyText =
|
||||
scriptBundle && scriptBundle.getAttribute("data-copy") ? scriptBundle.getAttribute("data-copy") : "Copy";
|
||||
var copiedText =
|
||||
scriptBundle && scriptBundle.getAttribute("data-copied")
|
||||
? scriptBundle.getAttribute("data-copied")
|
||||
: "Copied";
|
||||
var copyText = scriptBundle?.getAttribute("data-copy") || "Copy";
|
||||
var copiedText = scriptBundle?.getAttribute("data-copied") || "Copied";
|
||||
|
||||
function createCopyButton(highlightDiv) {
|
||||
function createCopyButton(highlightWrapper) {
|
||||
const button = document.createElement("button");
|
||||
button.className = "copy-button";
|
||||
button.type = "button";
|
||||
button.ariaLabel = copyText;
|
||||
button.innerText = copyText;
|
||||
button.addEventListener("click", () => copyCodeToClipboard(button, highlightDiv));
|
||||
addCopyButtonToDom(button, highlightDiv);
|
||||
button.addEventListener("click", () => copyCodeToClipboard(button, highlightWrapper));
|
||||
highlightWrapper.insertBefore(button, highlightWrapper.firstChild);
|
||||
}
|
||||
|
||||
async function copyCodeToClipboard(button, highlightDiv) {
|
||||
const codeToCopy = highlightDiv.querySelector(":last-child").innerText;
|
||||
async function copyCodeToClipboard(button, highlightWrapper) {
|
||||
const codeToCopy = getCodeText(highlightWrapper);
|
||||
|
||||
function fallback(codeToCopy, highlightWrapper) {
|
||||
const textArea = document.createElement("textArea");
|
||||
textArea.contentEditable = "true";
|
||||
textArea.readOnly = "false";
|
||||
textArea.className = "copy-textarea";
|
||||
textArea.value = codeToCopy;
|
||||
highlightWrapper.insertBefore(textArea, highlightWrapper.firstChild);
|
||||
const range = document.createRange();
|
||||
range.selectNodeContents(textArea);
|
||||
const sel = window.getSelection();
|
||||
sel.removeAllRanges();
|
||||
sel.addRange(range);
|
||||
textArea.focus();
|
||||
textArea.setSelectionRange(0, 999999);
|
||||
document.execCommand("copy");
|
||||
highlightWrapper.removeChild(textArea);
|
||||
}
|
||||
|
||||
try {
|
||||
result = await navigator.permissions.query({ name: "clipboard-write" });
|
||||
if (result.state == "granted" || result.state == "prompt") {
|
||||
await navigator.clipboard.writeText(codeToCopy);
|
||||
} else {
|
||||
copyCodeBlockExecCommand(codeToCopy, highlightDiv);
|
||||
fallback(codeToCopy, highlightWrapper);
|
||||
}
|
||||
} catch (_) {
|
||||
copyCodeBlockExecCommand(codeToCopy, highlightDiv);
|
||||
fallback(codeToCopy, highlightWrapper);
|
||||
} finally {
|
||||
codeWasCopied(button);
|
||||
button.blur();
|
||||
button.innerText = copiedText;
|
||||
setTimeout(function () {
|
||||
button.innerText = copyText;
|
||||
}, 2000);
|
||||
}
|
||||
}
|
||||
|
||||
function copyCodeBlockExecCommand(codeToCopy, highlightDiv) {
|
||||
const textArea = document.createElement("textArea");
|
||||
textArea.contentEditable = "true";
|
||||
textArea.readOnly = "false";
|
||||
textArea.className = "copy-textarea";
|
||||
textArea.value = codeToCopy;
|
||||
highlightDiv.insertBefore(textArea, highlightDiv.firstChild);
|
||||
const range = document.createRange();
|
||||
range.selectNodeContents(textArea);
|
||||
const sel = window.getSelection();
|
||||
sel.removeAllRanges();
|
||||
sel.addRange(range);
|
||||
textArea.setSelectionRange(0, 999999);
|
||||
document.execCommand("copy");
|
||||
highlightDiv.removeChild(textArea);
|
||||
}
|
||||
function getCodeText(highlightWrapper) {
|
||||
const highlightDiv = highlightWrapper.querySelector(".highlight");
|
||||
if (!highlightDiv) return "";
|
||||
|
||||
function codeWasCopied(button) {
|
||||
button.blur();
|
||||
button.innerText = copiedText;
|
||||
setTimeout(function () {
|
||||
button.innerText = copyText;
|
||||
}, 2000);
|
||||
}
|
||||
const codeBlock = highlightDiv.querySelector("code");
|
||||
const inlineLines = codeBlock?.querySelectorAll(".cl"); // linenos=inline
|
||||
const tableCodeCell = highlightDiv?.querySelector(".lntable .lntd:last-child code"); // linenos=table
|
||||
|
||||
function addCopyButtonToDom(button, highlightDiv) {
|
||||
highlightDiv.insertBefore(button, highlightDiv.firstChild);
|
||||
const wrapper = document.createElement("div");
|
||||
wrapper.className = "highlight-wrapper";
|
||||
highlightDiv.parentNode.insertBefore(wrapper, highlightDiv);
|
||||
wrapper.appendChild(highlightDiv);
|
||||
if (!codeBlock) return "";
|
||||
|
||||
if (inlineLines.length > 0) {
|
||||
const cleanedLines = Array.from(inlineLines).map((line) => line.textContent.replace(/\n$/, ""));
|
||||
return cleanedLines.join("\n");
|
||||
}
|
||||
|
||||
if (tableCodeCell) {
|
||||
return tableCodeCell.textContent.trim();
|
||||
}
|
||||
|
||||
return codeBlock.textContent.trim();
|
||||
}
|
||||
|
||||
window.addEventListener("DOMContentLoaded", (event) => {
|
||||
document.querySelectorAll(".highlight").forEach((highlightDiv) => createCopyButton(highlightDiv));
|
||||
document.querySelectorAll(".highlight-wrapper").forEach((highlightWrapper) => createCopyButton(highlightWrapper));
|
||||
});
|
||||
@@ -64,6 +64,16 @@
|
||||
});
|
||||
const data = await response.json();
|
||||
|
||||
if (!response.ok) {
|
||||
console.error(`fetch-repo.js: HTTP Error: ${response.status} ${response.statusText}`);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!data || typeof data !== "object") {
|
||||
console.error("fetch-repo.js: Invalid or empty data received from remote");
|
||||
return;
|
||||
}
|
||||
|
||||
Object.entries(mapping).forEach(([dataField, elementSuffix]) => {
|
||||
const element = document.getElementById(`${repoId}-${elementSuffix}`);
|
||||
if (element) {
|
||||
@@ -71,7 +81,9 @@
|
||||
if (processors[platform]?.[dataField]) {
|
||||
value = processors[platform][dataField](value);
|
||||
}
|
||||
element.innerHTML = value;
|
||||
if (value != null && value !== "") {
|
||||
element.innerHTML = value;
|
||||
}
|
||||
}
|
||||
});
|
||||
} catch (error) {
|
||||
|
||||
@@ -0,0 +1,154 @@
|
||||
import { initializeApp } from "https://www.gstatic.com/firebasejs/9.23.0/firebase-app.js";
|
||||
import {
|
||||
getFirestore,
|
||||
doc,
|
||||
getDoc,
|
||||
setDoc,
|
||||
updateDoc,
|
||||
increment,
|
||||
onSnapshot,
|
||||
} from "https://www.gstatic.com/firebasejs/9.23.0/firebase-firestore.js";
|
||||
import { getAuth, signInAnonymously } from "https://www.gstatic.com/firebasejs/9.23.0/firebase-auth.js";
|
||||
|
||||
let app, db, auth, oids;
|
||||
try {
|
||||
const configEl = document.getElementById("firebase-config");
|
||||
if (!configEl?.textContent) {
|
||||
throw new Error("Firebase config element not found");
|
||||
}
|
||||
|
||||
const data = JSON.parse(configEl.textContent);
|
||||
app = initializeApp(data.config);
|
||||
|
||||
oids = {
|
||||
views: configEl.getAttribute("data-views"),
|
||||
likes: configEl.getAttribute("data-likes"),
|
||||
};
|
||||
|
||||
db = getFirestore(app);
|
||||
auth = getAuth(app);
|
||||
} catch (e) {
|
||||
console.error("Firebase initialization failed:", e.message);
|
||||
throw e;
|
||||
}
|
||||
|
||||
const id = oids?.views?.replaceAll("/", "-");
|
||||
const id_likes = oids?.likes?.replaceAll("/", "-");
|
||||
let liked = false;
|
||||
let authReady = false;
|
||||
|
||||
function formatNumber(n) {
|
||||
return n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
|
||||
}
|
||||
|
||||
function toggleLoaders(node) {
|
||||
var classesString = node.className;
|
||||
if (classesString == "") return;
|
||||
var classes = classesString.split(" ");
|
||||
for (var i in classes) {
|
||||
node.classList.toggle(classes[i]);
|
||||
}
|
||||
}
|
||||
|
||||
function updateDisplay(collection, nodeId) {
|
||||
const node = document.getElementById(nodeId);
|
||||
if (!node) return;
|
||||
|
||||
const docId = nodeId.replaceAll("/", "-");
|
||||
onSnapshot(
|
||||
doc(db, collection, docId),
|
||||
(snapshot) => {
|
||||
node.innerText = snapshot.exists() ? formatNumber(snapshot.data()[collection]) : 0;
|
||||
toggleLoaders(node);
|
||||
},
|
||||
(error) => {
|
||||
console.error("Firebase snapshot update failed:", error);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
async function recordView(id) {
|
||||
if (!id || localStorage.getItem(id)) return;
|
||||
|
||||
try {
|
||||
const ref = doc(db, "views", id);
|
||||
const snap = await getDoc(ref);
|
||||
|
||||
snap.exists() ? await updateDoc(ref, { views: increment(1) }) : await setDoc(ref, { views: 1 });
|
||||
|
||||
localStorage.setItem(id, true);
|
||||
} catch (e) {
|
||||
console.error("Record view operation failed:", e.message);
|
||||
}
|
||||
}
|
||||
|
||||
function updateButton(isLiked) {
|
||||
const hearts = document.querySelectorAll("span[id='button_likes_heart']");
|
||||
const empties = document.querySelectorAll("span[id='button_likes_emtpty_heart']");
|
||||
const texts = document.querySelectorAll("span[id='button_likes_text']");
|
||||
|
||||
hearts.forEach((el) => {
|
||||
el.style.display = isLiked ? "" : "none";
|
||||
});
|
||||
empties.forEach((el) => {
|
||||
el.style.display = isLiked ? "none" : "";
|
||||
});
|
||||
texts.forEach((el) => {
|
||||
el.innerText = isLiked ? "" : "\xa0Like";
|
||||
});
|
||||
}
|
||||
|
||||
async function toggleLike(add) {
|
||||
if (!id_likes || !authReady) return;
|
||||
|
||||
try {
|
||||
const ref = doc(db, "likes", id_likes);
|
||||
const snap = await getDoc(ref);
|
||||
|
||||
liked = add;
|
||||
add ? localStorage.setItem(id_likes, true) : localStorage.removeItem(id_likes);
|
||||
updateButton(add);
|
||||
|
||||
snap.exists()
|
||||
? await updateDoc(ref, { likes: increment(add ? 1 : -1) })
|
||||
: await setDoc(ref, { likes: add ? 1 : 0 });
|
||||
} catch (e) {
|
||||
console.error("Like operation failed:", e.message);
|
||||
liked = !add;
|
||||
add ? localStorage.removeItem(id_likes) : localStorage.setItem(id_likes, true);
|
||||
updateButton(!add);
|
||||
}
|
||||
}
|
||||
|
||||
signInAnonymously(auth)
|
||||
.then(() => {
|
||||
authReady = true;
|
||||
|
||||
document.querySelectorAll("span[id^='views_']").forEach((node) => {
|
||||
if (node.id) updateDisplay("views", node.id);
|
||||
});
|
||||
|
||||
document.querySelectorAll("span[id^='likes_']").forEach((node) => {
|
||||
if (node.id) updateDisplay("likes", node.id);
|
||||
});
|
||||
|
||||
recordView(id);
|
||||
|
||||
if (id_likes && localStorage.getItem(id_likes)) {
|
||||
liked = true;
|
||||
updateButton(true);
|
||||
}
|
||||
|
||||
const likeButton = document.getElementById("button_likes");
|
||||
if (likeButton) {
|
||||
likeButton.addEventListener("click", () => {
|
||||
toggleLike(!liked);
|
||||
});
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error("Firebase anonymous sign-in failed:", error.message);
|
||||
authReady = false;
|
||||
});
|
||||
|
||||
window.process_article = () => toggleLike(!liked);
|
||||
@@ -2,30 +2,32 @@ function css(name) {
|
||||
return "rgb(" + getComputedStyle(document.documentElement).getPropertyValue(name) + ")";
|
||||
}
|
||||
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
const mermaidDivs = document.querySelectorAll("div.mermaid");
|
||||
function initMermaidLight() {
|
||||
mermaid.initialize({
|
||||
theme: "base",
|
||||
themeVariables: {
|
||||
background: css("--color-neutral"),
|
||||
primaryColor: css("--color-primary-200"),
|
||||
secondaryColor: css("--color-secondary-200"),
|
||||
tertiaryColor: css("--color-neutral-100"),
|
||||
primaryBorderColor: css("--color-primary-400"),
|
||||
secondaryBorderColor: css("--color-secondary-400"),
|
||||
tertiaryBorderColor: css("--color-neutral-400"),
|
||||
lineColor: css("--color-neutral-600"),
|
||||
fontFamily:
|
||||
"ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif",
|
||||
fontSize: "16px",
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
for (const div of mermaidDivs) {
|
||||
const preElement = div.querySelector("pre");
|
||||
if (preElement) {
|
||||
div.textContent = preElement.textContent;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
mermaid.initialize({
|
||||
theme: "base",
|
||||
themeVariables: {
|
||||
background: css("--color-neutral"),
|
||||
primaryColor: css("--color-primary-200"),
|
||||
secondaryColor: css("--color-secondary-200"),
|
||||
tertiaryColor: css("--color-neutral-100"),
|
||||
primaryBorderColor: css("--color-primary-400"),
|
||||
secondaryBorderColor: css("--color-secondary-400"),
|
||||
tertiaryBorderColor: css("--color-neutral-400"),
|
||||
lineColor: css("--color-neutral-600"),
|
||||
fontFamily:
|
||||
"ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif",
|
||||
fontSize: "16px",
|
||||
},
|
||||
});
|
||||
function initMermaidDark() {
|
||||
mermaid.initialize({
|
||||
theme: "dark",
|
||||
themeVariables: {
|
||||
fontFamily:
|
||||
"ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif",
|
||||
fontSize: "16px",
|
||||
},
|
||||
});
|
||||
}
|
||||
@@ -1,33 +0,0 @@
|
||||
var menuButton = document.getElementById("menu-button");
|
||||
var menuCloseButton = document.getElementById("menu-close-button");
|
||||
var menuWrapper = document.getElementById("menu-wrapper");
|
||||
|
||||
var menuOpen = false;
|
||||
|
||||
var openMenu = function () {
|
||||
if (!menuOpen) {
|
||||
menuOpen = true;
|
||||
document.body.style.overflowY = "hidden";
|
||||
menuButton.style.visibility = "hidden";
|
||||
menuWrapper.style.visibility = "visible";
|
||||
menuWrapper.style.opacity = "1";
|
||||
window.onbeforeunload = function () {
|
||||
closeMenu();
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
var closeMenu = function (e) {
|
||||
if (menuOpen) {
|
||||
menuOpen = false;
|
||||
document.body.style.overflowY = "auto";
|
||||
menuButton.style.visibility = "visible";
|
||||
menuWrapper.style.visibility = "hidden";
|
||||
menuWrapper.style.opacity = "0";
|
||||
window.onbeforeunload = function () {};
|
||||
e.stopPropagation();
|
||||
}
|
||||
};
|
||||
|
||||
menuButton && menuButton.addEventListener("click", openMenu);
|
||||
menuCloseButton && menuCloseButton.addEventListener("click", closeMenu);
|
||||
@@ -1,131 +0,0 @@
|
||||
const pageScriptElement = document.currentScript;
|
||||
const oid =
|
||||
pageScriptElement && pageScriptElement.getAttribute("data-oid")
|
||||
? pageScriptElement.getAttribute("data-oid")
|
||||
: (console.error("data-oid is null"), null);
|
||||
const oid_likes =
|
||||
pageScriptElement && pageScriptElement.getAttribute("data-oid-likes")
|
||||
? pageScriptElement.getAttribute("data-oid-likes")
|
||||
: (console.error("data-oid-likes is null"), null);
|
||||
let liked_page = false;
|
||||
const id = oid ? oid.replaceAll("/", "-") : oid;
|
||||
const id_likes = oid_likes ? oid_likes.replaceAll("/", "-") : oid_likes;
|
||||
|
||||
if (typeof auth !== "undefined") {
|
||||
const viewed = localStorage.getItem(id);
|
||||
|
||||
if (!viewed) {
|
||||
auth
|
||||
.signInAnonymously()
|
||||
.then(() => {
|
||||
const docRef = db.collection("views").doc(id);
|
||||
localStorage.setItem(id, true);
|
||||
docRef
|
||||
.get()
|
||||
.then((doc) => {
|
||||
if (doc.exists) {
|
||||
db.collection("views")
|
||||
.doc(id)
|
||||
.update({
|
||||
views: firebase.firestore.FieldValue.increment(1),
|
||||
});
|
||||
} else {
|
||||
db.collection("views").doc(id).set({ views: 1 });
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
console.log("Error getting document:", error);
|
||||
});
|
||||
})
|
||||
.catch((error) => {
|
||||
const errorCode = error.code;
|
||||
const errorMessage = error.message;
|
||||
console.error(errorCode, errorMessage);
|
||||
});
|
||||
}
|
||||
|
||||
const liked = localStorage.getItem(id_likes);
|
||||
|
||||
if (liked) {
|
||||
liked_page = true;
|
||||
document.querySelectorAll("span[id='button_likes_heart']")[0].style.display = "";
|
||||
document.querySelectorAll("span[id='button_likes_emtpty_heart']")[0].style.display = "none";
|
||||
document.querySelectorAll("span[id='button_likes_text']")[0].innerText = "";
|
||||
}
|
||||
}
|
||||
|
||||
function like_article(id_likes) {
|
||||
auth
|
||||
.signInAnonymously()
|
||||
.then(() => {
|
||||
const docRef = db.collection("likes").doc(id_likes);
|
||||
docRef
|
||||
.get()
|
||||
.then((doc) => {
|
||||
liked_page = true;
|
||||
localStorage.setItem(id_likes, true);
|
||||
document.querySelectorAll("span[id='button_likes_heart']")[0].style.display = "";
|
||||
document.querySelectorAll("span[id='button_likes_emtpty_heart']")[0].style.display = "none";
|
||||
document.querySelectorAll("span[id='button_likes_text']")[0].innerText = "";
|
||||
if (doc.exists) {
|
||||
db.collection("likes")
|
||||
.doc(id_likes)
|
||||
.update({
|
||||
likes: firebase.firestore.FieldValue.increment(1),
|
||||
});
|
||||
} else {
|
||||
db.collection("likes").doc(id_likes).set({ likes: 1 });
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
console.log("Error getting document:", error);
|
||||
});
|
||||
})
|
||||
.catch((error) => {
|
||||
const errorCode = error.code;
|
||||
const errorMessage = error.message;
|
||||
console.error(errorCode, errorMessage);
|
||||
});
|
||||
}
|
||||
|
||||
function remove_like_article(id_likes) {
|
||||
auth
|
||||
.signInAnonymously()
|
||||
.then(() => {
|
||||
const docRef = db.collection("likes").doc(id_likes);
|
||||
docRef
|
||||
.get()
|
||||
.then((doc) => {
|
||||
liked_page = false;
|
||||
localStorage.removeItem(id_likes);
|
||||
document.querySelectorAll("span[id='button_likes_heart']")[0].style.display = "none";
|
||||
document.querySelectorAll("span[id='button_likes_emtpty_heart']")[0].style.display = "";
|
||||
document.querySelectorAll("span[id='button_likes_text']")[0].innerText = "\xa0Like";
|
||||
if (doc.exists) {
|
||||
db.collection("likes")
|
||||
.doc(id_likes)
|
||||
.update({
|
||||
likes: firebase.firestore.FieldValue.increment(-1),
|
||||
});
|
||||
} else {
|
||||
db.collection("likes").doc(id_likes).set({ likes: 0 });
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
console.log("Error getting document:", error);
|
||||
});
|
||||
})
|
||||
.catch((error) => {
|
||||
const errorCode = error.code;
|
||||
const errorMessage = error.message;
|
||||
console.error(errorCode, errorMessage);
|
||||
});
|
||||
}
|
||||
|
||||
function process_article() {
|
||||
if (!liked_page) {
|
||||
like_article(id_likes);
|
||||
} else {
|
||||
remove_like_article(id_likes);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
(function() {
|
||||
'use strict';
|
||||
var closedDetails = [];
|
||||
window.addEventListener('beforeprint', function() {
|
||||
var allDetails = document.querySelectorAll('details:not([open])');
|
||||
for (var i = 0; i < allDetails.length; i++) {
|
||||
allDetails[i].open = true;
|
||||
closedDetails.push(allDetails[i]);
|
||||
}
|
||||
});
|
||||
window.addEventListener('afterprint', function() {
|
||||
for (var i = 0; i < closedDetails.length; i++) {
|
||||
closedDetails[i].open = false;
|
||||
}
|
||||
closedDetails = [];
|
||||
});
|
||||
})();
|
||||
@@ -1,70 +0,0 @@
|
||||
if (typeof auth !== "undefined") {
|
||||
var viewsCollection = db.collection("views");
|
||||
var likesCollection = db.collection("likes");
|
||||
|
||||
function numberWithCommas(x) {
|
||||
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
|
||||
}
|
||||
|
||||
function toggleLoaders(node) {
|
||||
var classesString = node.className;
|
||||
if (classesString == "") return;
|
||||
var classes = classesString.split(" ");
|
||||
for (var i in classes) {
|
||||
node.classList.toggle(classes[i]);
|
||||
}
|
||||
}
|
||||
|
||||
var update_views = function (node, id) {
|
||||
viewsCollection.doc(id).onSnapshot((doc) => {
|
||||
var data = doc.data();
|
||||
if (data) {
|
||||
node.innerText = numberWithCommas(data.views);
|
||||
} else {
|
||||
node.innerText = 0;
|
||||
}
|
||||
toggleLoaders(node);
|
||||
});
|
||||
};
|
||||
|
||||
var update_likes = function (node, id) {
|
||||
likesCollection.doc(id).onSnapshot((doc) => {
|
||||
var data = doc.data();
|
||||
if (data) {
|
||||
node.innerText = numberWithCommas(data.likes);
|
||||
} else {
|
||||
node.innerText = 0;
|
||||
}
|
||||
toggleLoaders(node);
|
||||
});
|
||||
};
|
||||
|
||||
auth
|
||||
.signInAnonymously()
|
||||
.then(() => {
|
||||
var views_nodes = document.querySelectorAll("span[id^='views_']");
|
||||
|
||||
for (var i in views_nodes) {
|
||||
var node = views_nodes[i];
|
||||
var id = node.id ? node.id.replaceAll("/", "-") : node.id;
|
||||
if (id) {
|
||||
update_views(node, id);
|
||||
}
|
||||
}
|
||||
|
||||
var likes_nodes = document.querySelectorAll("span[id^='likes_']");
|
||||
|
||||
for (var i in likes_nodes) {
|
||||
var node = likes_nodes[i];
|
||||
var id = node.id ? node.id.replaceAll("/", "-") : node.id;
|
||||
if (id) {
|
||||
update_likes(node, id);
|
||||
}
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
var errorCode = error.code;
|
||||
var errorMessage = error.message;
|
||||
console.error(errorCode, errorMessage);
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
function scrollToTop() {
|
||||
const scrollToTop = document.getElementById("scroll-to-top");
|
||||
if (window.scrollY > window.innerHeight * 0.5) {
|
||||
scrollToTop.classList.remove("translate-y-4", "opacity-0");
|
||||
scrollToTop.classList.add("translate-y-0", "opacity-100");
|
||||
} else {
|
||||
scrollToTop.classList.remove("translate-y-0", "opacity-100");
|
||||
scrollToTop.classList.add("translate-y-4", "opacity-0");
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener("scroll", scrollToTop);
|
||||
window.addEventListener("load", scrollToTop);
|
||||
@@ -27,7 +27,7 @@ function _getPackeryOptions(nodeGallery) {
|
||||
}
|
||||
|
||||
(function init() {
|
||||
$(window).on("load", function () {
|
||||
window.addEventListener("load", function () {
|
||||
let packeries = [];
|
||||
let nodeGalleries = document.querySelectorAll(".gallery");
|
||||
|
||||
@@ -35,6 +35,5 @@ function _getPackeryOptions(nodeGallery) {
|
||||
let packery = new Packery(nodeGallery, _getPackeryOptions(nodeGallery));
|
||||
packeries.push(packery);
|
||||
});
|
||||
console.groupEnd();
|
||||
});
|
||||
})();
|
||||
@@ -0,0 +1,59 @@
|
||||
function initTabs() {
|
||||
tabClickHandler = (event) => {
|
||||
const button = event.target.closest(".tab__button");
|
||||
if (!button) return;
|
||||
|
||||
const container = button.closest(".tab__container");
|
||||
const tabIndex = parseInt(button.dataset.tabIndex);
|
||||
const tabLabel = button.dataset.tabLabel;
|
||||
const group = container.dataset.tabGroup;
|
||||
|
||||
if (group) {
|
||||
const allGroupContainers = document.querySelectorAll(`.tab__container[data-tab-group="${group}"]`);
|
||||
|
||||
allGroupContainers.forEach((groupContainer) => {
|
||||
const targetButton = Array.from(groupContainer.querySelectorAll(".tab__button")).find(
|
||||
(btn) => btn.dataset.tabLabel === tabLabel,
|
||||
);
|
||||
|
||||
if (targetButton) {
|
||||
const targetIndex = parseInt(targetButton.dataset.tabIndex);
|
||||
activateTab(groupContainer, targetIndex);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
activateTab(container, tabIndex);
|
||||
}
|
||||
};
|
||||
|
||||
document.addEventListener("click", tabClickHandler);
|
||||
}
|
||||
|
||||
function activateTab(container, activeIndex) {
|
||||
const buttons = container.querySelectorAll(".tab__button");
|
||||
const panels = container.querySelectorAll(".tab__panel");
|
||||
|
||||
buttons.forEach((btn, index) => {
|
||||
if (index === activeIndex) {
|
||||
btn.classList.add("tab--active");
|
||||
btn.setAttribute("aria-selected", "true");
|
||||
} else {
|
||||
btn.classList.remove("tab--active");
|
||||
btn.setAttribute("aria-selected", "false");
|
||||
}
|
||||
});
|
||||
|
||||
panels.forEach((panel, index) => {
|
||||
if (index === activeIndex) {
|
||||
panel.classList.add("tab--active");
|
||||
} else {
|
||||
panel.classList.remove("tab--active");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (document.readyState === "loading") {
|
||||
document.addEventListener("DOMContentLoaded", initTabs);
|
||||
} else {
|
||||
initTabs();
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/*!
|
||||
* Chart.js v4.5.0
|
||||
* Chart.js v4.5.1
|
||||
* https://www.chartjs.org
|
||||
* (c) 2025 Chart.js Contributors
|
||||
* Released under the MIT License
|
||||
@@ -10,5 +10,5 @@
|
||||
* https://github.com/kurkle/color#readme
|
||||
* (c) 2023 Jukka Kurkela
|
||||
* Released under the MIT License
|
||||
*/function _t(t){return t+.5|0}const yt=(t,e,i)=>Math.max(Math.min(t,i),e);function vt(t){return yt(_t(2.55*t),0,255)}function Mt(t){return yt(_t(255*t),0,255)}function wt(t){return yt(_t(t/2.55)/100,0,1)}function kt(t){return yt(_t(100*t),0,100)}const St={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},Pt=[..."0123456789ABCDEF"],Dt=t=>Pt[15&t],Ct=t=>Pt[(240&t)>>4]+Pt[15&t],Ot=t=>(240&t)>>4==(15&t);function At(t){var e=(t=>Ot(t.r)&&Ot(t.g)&&Ot(t.b)&&Ot(t.a))(t)?Dt:Ct;return t?"#"+e(t.r)+e(t.g)+e(t.b)+((t,e)=>t<255?e(t):"")(t.a,e):void 0}const Tt=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function Lt(t,e,i){const s=e*Math.min(i,1-i),n=(e,n=(e+t/30)%12)=>i-s*Math.max(Math.min(n-3,9-n,1),-1);return[n(0),n(8),n(4)]}function Et(t,e,i){const s=(s,n=(s+t/60)%6)=>i-i*e*Math.max(Math.min(n,4-n,1),0);return[s(5),s(3),s(1)]}function Rt(t,e,i){const s=Lt(t,1,.5);let n;for(e+i>1&&(n=1/(e+i),e*=n,i*=n),n=0;n<3;n++)s[n]*=1-e-i,s[n]+=e;return s}function It(t){const e=t.r/255,i=t.g/255,s=t.b/255,n=Math.max(e,i,s),o=Math.min(e,i,s),a=(n+o)/2;let r,l,h;return n!==o&&(h=n-o,l=a>.5?h/(2-n-o):h/(n+o),r=function(t,e,i,s,n){return t===n?(e-i)/s+(e<i?6:0):e===n?(i-t)/s+2:(t-e)/s+4}(e,i,s,h,n),r=60*r+.5),[0|r,l||0,a]}function zt(t,e,i,s){return(Array.isArray(e)?t(e[0],e[1],e[2]):t(e,i,s)).map(Mt)}function Ft(t,e,i){return zt(Lt,t,e,i)}function Vt(t){return(t%360+360)%360}function Bt(t){const e=Tt.exec(t);let i,s=255;if(!e)return;e[5]!==i&&(s=e[6]?vt(+e[5]):Mt(+e[5]));const n=Vt(+e[2]),o=+e[3]/100,a=+e[4]/100;return i="hwb"===e[1]?function(t,e,i){return zt(Rt,t,e,i)}(n,o,a):"hsv"===e[1]?function(t,e,i){return zt(Et,t,e,i)}(n,o,a):Ft(n,o,a),{r:i[0],g:i[1],b:i[2],a:s}}const Wt={x:"dark",Z:"light",Y:"re",X:"blu",W:"gr",V:"medium",U:"slate",A:"ee",T:"ol",S:"or",B:"ra",C:"lateg",D:"ights",R:"in",Q:"turquois",E:"hi",P:"ro",O:"al",N:"le",M:"de",L:"yello",F:"en",K:"ch",G:"arks",H:"ea",I:"ightg",J:"wh"},Nt={OiceXe:"f0f8ff",antiquewEte:"faebd7",aqua:"ffff",aquamarRe:"7fffd4",azuY:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"0",blanKedOmond:"ffebcd",Xe:"ff",XeviTet:"8a2be2",bPwn:"a52a2a",burlywood:"deb887",caMtXe:"5f9ea0",KartYuse:"7fff00",KocTate:"d2691e",cSO:"ff7f50",cSnflowerXe:"6495ed",cSnsilk:"fff8dc",crimson:"dc143c",cyan:"ffff",xXe:"8b",xcyan:"8b8b",xgTMnPd:"b8860b",xWay:"a9a9a9",xgYF:"6400",xgYy:"a9a9a9",xkhaki:"bdb76b",xmagFta:"8b008b",xTivegYF:"556b2f",xSange:"ff8c00",xScEd:"9932cc",xYd:"8b0000",xsOmon:"e9967a",xsHgYF:"8fbc8f",xUXe:"483d8b",xUWay:"2f4f4f",xUgYy:"2f4f4f",xQe:"ced1",xviTet:"9400d3",dAppRk:"ff1493",dApskyXe:"bfff",dimWay:"696969",dimgYy:"696969",dodgerXe:"1e90ff",fiYbrick:"b22222",flSOwEte:"fffaf0",foYstWAn:"228b22",fuKsia:"ff00ff",gaRsbSo:"dcdcdc",ghostwEte:"f8f8ff",gTd:"ffd700",gTMnPd:"daa520",Way:"808080",gYF:"8000",gYFLw:"adff2f",gYy:"808080",honeyMw:"f0fff0",hotpRk:"ff69b4",RdianYd:"cd5c5c",Rdigo:"4b0082",ivSy:"fffff0",khaki:"f0e68c",lavFMr:"e6e6fa",lavFMrXsh:"fff0f5",lawngYF:"7cfc00",NmoncEffon:"fffacd",ZXe:"add8e6",ZcSO:"f08080",Zcyan:"e0ffff",ZgTMnPdLw:"fafad2",ZWay:"d3d3d3",ZgYF:"90ee90",ZgYy:"d3d3d3",ZpRk:"ffb6c1",ZsOmon:"ffa07a",ZsHgYF:"20b2aa",ZskyXe:"87cefa",ZUWay:"778899",ZUgYy:"778899",ZstAlXe:"b0c4de",ZLw:"ffffe0",lime:"ff00",limegYF:"32cd32",lRF:"faf0e6",magFta:"ff00ff",maPon:"800000",VaquamarRe:"66cdaa",VXe:"cd",VScEd:"ba55d3",VpurpN:"9370db",VsHgYF:"3cb371",VUXe:"7b68ee",VsprRggYF:"fa9a",VQe:"48d1cc",VviTetYd:"c71585",midnightXe:"191970",mRtcYam:"f5fffa",mistyPse:"ffe4e1",moccasR:"ffe4b5",navajowEte:"ffdead",navy:"80",Tdlace:"fdf5e6",Tive:"808000",TivedBb:"6b8e23",Sange:"ffa500",SangeYd:"ff4500",ScEd:"da70d6",pOegTMnPd:"eee8aa",pOegYF:"98fb98",pOeQe:"afeeee",pOeviTetYd:"db7093",papayawEp:"ffefd5",pHKpuff:"ffdab9",peru:"cd853f",pRk:"ffc0cb",plum:"dda0dd",powMrXe:"b0e0e6",purpN:"800080",YbeccapurpN:"663399",Yd:"ff0000",Psybrown:"bc8f8f",PyOXe:"4169e1",saddNbPwn:"8b4513",sOmon:"fa8072",sandybPwn:"f4a460",sHgYF:"2e8b57",sHshell:"fff5ee",siFna:"a0522d",silver:"c0c0c0",skyXe:"87ceeb",UXe:"6a5acd",UWay:"708090",UgYy:"708090",snow:"fffafa",sprRggYF:"ff7f",stAlXe:"4682b4",tan:"d2b48c",teO:"8080",tEstN:"d8bfd8",tomato:"ff6347",Qe:"40e0d0",viTet:"ee82ee",JHt:"f5deb3",wEte:"ffffff",wEtesmoke:"f5f5f5",Lw:"ffff00",LwgYF:"9acd32"};let Ht;function jt(t){Ht||(Ht=function(){const t={},e=Object.keys(Nt),i=Object.keys(Wt);let s,n,o,a,r;for(s=0;s<e.length;s++){for(a=r=e[s],n=0;n<i.length;n++)o=i[n],r=r.replace(o,Wt[o]);o=parseInt(Nt[a],16),t[r]=[o>>16&255,o>>8&255,255&o]}return t}(),Ht.transparent=[0,0,0,0]);const e=Ht[t.toLowerCase()];return e&&{r:e[0],g:e[1],b:e[2],a:4===e.length?e[3]:255}}const $t=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;const Yt=t=>t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055,Ut=t=>t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4);function Xt(t,e,i){if(t){let s=It(t);s[e]=Math.max(0,Math.min(s[e]+s[e]*i,0===e?360:1)),Line truncated
|
||||
*/function _t(t){return t+.5|0}const yt=(t,e,i)=>Math.max(Math.min(t,i),e);function vt(t){return yt(_t(2.55*t),0,255)}function Mt(t){return yt(_t(255*t),0,255)}function wt(t){return yt(_t(t/2.55)/100,0,1)}function kt(t){return yt(_t(100*t),0,100)}const St={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},Pt=[..."0123456789ABCDEF"],Dt=t=>Pt[15&t],Ct=t=>Pt[(240&t)>>4]+Pt[15&t],Ot=t=>(240&t)>>4==(15&t);function At(t){var e=(t=>Ot(t.r)&&Ot(t.g)&&Ot(t.b)&&Ot(t.a))(t)?Dt:Ct;return t?"#"+e(t.r)+e(t.g)+e(t.b)+((t,e)=>t<255?e(t):"")(t.a,e):void 0}const Tt=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function Lt(t,e,i){const s=e*Math.min(i,1-i),n=(e,n=(e+t/30)%12)=>i-s*Math.max(Math.min(n-3,9-n,1),-1);return[n(0),n(8),n(4)]}function Et(t,e,i){const s=(s,n=(s+t/60)%6)=>i-i*e*Math.max(Math.min(n,4-n,1),0);return[s(5),s(3),s(1)]}function Rt(t,e,i){const s=Lt(t,1,.5);let n;for(e+i>1&&(n=1/(e+i),e*=n,i*=n),n=0;n<3;n++)s[n]*=1-e-i,s[n]+=e;return s}function It(t){const e=t.r/255,i=t.g/255,s=t.b/255,n=Math.max(e,i,s),o=Math.min(e,i,s),a=(n+o)/2;let r,l,h;return n!==o&&(h=n-o,l=a>.5?h/(2-n-o):h/(n+o),r=function(t,e,i,s,n){return t===n?(e-i)/s+(e<i?6:0):e===n?(i-t)/s+2:(t-e)/s+4}(e,i,s,h,n),r=60*r+.5),[0|r,l||0,a]}function zt(t,e,i,s){return(Array.isArray(e)?t(e[0],e[1],e[2]):t(e,i,s)).map(Mt)}function Ft(t,e,i){return zt(Lt,t,e,i)}function Vt(t){return(t%360+360)%360}function Bt(t){const e=Tt.exec(t);let i,s=255;if(!e)return;e[5]!==i&&(s=e[6]?vt(+e[5]):Mt(+e[5]));const n=Vt(+e[2]),o=+e[3]/100,a=+e[4]/100;return i="hwb"===e[1]?function(t,e,i){return zt(Rt,t,e,i)}(n,o,a):"hsv"===e[1]?function(t,e,i){return zt(Et,t,e,i)}(n,o,a):Ft(n,o,a),{r:i[0],g:i[1],b:i[2],a:s}}const Wt={x:"dark",Z:"light",Y:"re",X:"blu",W:"gr",V:"medium",U:"slate",A:"ee",T:"ol",S:"or",B:"ra",C:"lateg",D:"ights",R:"in",Q:"turquois",E:"hi",P:"ro",O:"al",N:"le",M:"de",L:"yello",F:"en",K:"ch",G:"arks",H:"ea",I:"ightg",J:"wh"},Nt={OiceXe:"f0f8ff",antiquewEte:"faebd7",aqua:"ffff",aquamarRe:"7fffd4",azuY:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"0",blanKedOmond:"ffebcd",Xe:"ff",XeviTet:"8a2be2",bPwn:"a52a2a",burlywood:"deb887",caMtXe:"5f9ea0",KartYuse:"7fff00",KocTate:"d2691e",cSO:"ff7f50",cSnflowerXe:"6495ed",cSnsilk:"fff8dc",crimson:"dc143c",cyan:"ffff",xXe:"8b",xcyan:"8b8b",xgTMnPd:"b8860b",xWay:"a9a9a9",xgYF:"6400",xgYy:"a9a9a9",xkhaki:"bdb76b",xmagFta:"8b008b",xTivegYF:"556b2f",xSange:"ff8c00",xScEd:"9932cc",xYd:"8b0000",xsOmon:"e9967a",xsHgYF:"8fbc8f",xUXe:"483d8b",xUWay:"2f4f4f",xUgYy:"2f4f4f",xQe:"ced1",xviTet:"9400d3",dAppRk:"ff1493",dApskyXe:"bfff",dimWay:"696969",dimgYy:"696969",dodgerXe:"1e90ff",fiYbrick:"b22222",flSOwEte:"fffaf0",foYstWAn:"228b22",fuKsia:"ff00ff",gaRsbSo:"dcdcdc",ghostwEte:"f8f8ff",gTd:"ffd700",gTMnPd:"daa520",Way:"808080",gYF:"8000",gYFLw:"adff2f",gYy:"808080",honeyMw:"f0fff0",hotpRk:"ff69b4",RdianYd:"cd5c5c",Rdigo:"4b0082",ivSy:"fffff0",khaki:"f0e68c",lavFMr:"e6e6fa",lavFMrXsh:"fff0f5",lawngYF:"7cfc00",NmoncEffon:"fffacd",ZXe:"add8e6",ZcSO:"f08080",Zcyan:"e0ffff",ZgTMnPdLw:"fafad2",ZWay:"d3d3d3",ZgYF:"90ee90",ZgYy:"d3d3d3",ZpRk:"ffb6c1",ZsOmon:"ffa07a",ZsHgYF:"20b2aa",ZskyXe:"87cefa",ZUWay:"778899",ZUgYy:"778899",ZstAlXe:"b0c4de",ZLw:"ffffe0",lime:"ff00",limegYF:"32cd32",lRF:"faf0e6",magFta:"ff00ff",maPon:"800000",VaquamarRe:"66cdaa",VXe:"cd",VScEd:"ba55d3",VpurpN:"9370db",VsHgYF:"3cb371",VUXe:"7b68ee",VsprRggYF:"fa9a",VQe:"48d1cc",VviTetYd:"c71585",midnightXe:"191970",mRtcYam:"f5fffa",mistyPse:"ffe4e1",moccasR:"ffe4b5",navajowEte:"ffdead",navy:"80",Tdlace:"fdf5e6",Tive:"808000",TivedBb:"6b8e23",Sange:"ffa500",SangeYd:"ff4500",ScEd:"da70d6",pOegTMnPd:"eee8aa",pOegYF:"98fb98",pOeQe:"afeeee",pOeviTetYd:"db7093",papayawEp:"ffefd5",pHKpuff:"ffdab9",peru:"cd853f",pRk:"ffc0cb",plum:"dda0dd",powMrXe:"b0e0e6",purpN:"800080",YbeccapurpN:"663399",Yd:"ff0000",Psybrown:"bc8f8f",PyOXe:"4169e1",saddNbPwn:"8b4513",sOmon:"fa8072",sandybPwn:"f4a460",sHgYF:"2e8b57",sHshell:"fff5ee",siFna:"a0522d",silver:"c0c0c0",skyXe:"87ceeb",UXe:"6a5acd",UWay:"708090",UgYy:"708090",snow:"fffafa",sprRggYF:"ff7f",stAlXe:"4682b4",tan:"d2b48c",teO:"8080",tEstN:"d8bfd8",tomato:"ff6347",Qe:"40e0d0",viTet:"ee82ee",JHt:"f5deb3",wEte:"ffffff",wEtesmoke:"f5f5f5",Lw:"ffff00",LwgYF:"9acd32"};let Ht;function jt(t){Ht||(Ht=function(){const t={},e=Object.keys(Nt),i=Object.keys(Wt);let s,n,o,a,r;for(s=0;s<e.length;s++){for(a=r=e[s],n=0;n<i.length;n++)o=i[n],r=r.replace(o,Wt[o]);o=parseInt(Nt[a],16),t[r]=[o>>16&255,o>>8&255,255&o]}return t}(),Ht.transparent=[0,0,0,0]);const e=Ht[t.toLowerCase()];return e&&{r:e[0],g:e[1],b:e[2],a:4===e.length?e[3]:255}}const $t=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;const Yt=t=>t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055,Ut=t=>t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4);function Xt(t,e,i){if(t){let s=It(t);s[e]=Math.max(0,Math.min(s[e]+s[e]*i,0===e?360:1)),Line truncated
|
||||
//# sourceMappingURL=chart.umd.js.map
|
||||
@@ -1,2 +0,0 @@
|
||||
/*! jQuery v3.7.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-deprecated/ajax-event-alias,-effects,-effects/animatedSelector,-effects/Tween | (c) OpenJS Foundation and other contributors | jquery.org/license */
|
||||
!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},m=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||m).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-deprecated/ajax-event-alias,-effects,-effects/animatedSelector,-effects/Tween",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}function fe(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}ce.fn=ce.prototype={jquery:t,constructor:ce,length:0,toArray:function(){return ae.call(this)},get:function(e){return null==e?ae.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=ce.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return ce.each(this,e)},map:function(n){return this.pushStack(ce.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(ae.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(ce.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(ce.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:s,sort:oe.sort,splice:oe.splice},ce.extend=ce.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||v(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(ce.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||ce.isPlainObject(n)?n:{},i=!1,a[t]=ce.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},ce.extend({expando:"jQuery"+(t+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==i.call(e))&&(!(t=r(e))||"function"==typeof(n=ue.call(t,"constructor")&&t.constructor)&&o.call(n)===a)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(c(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},text:function(e){var t,n="",r=0,i=e.nodeType;if(!i)while(t=e[r++])n+=ce.text(t);return 1===i||11===i?e.textContent:9===i?e.documentElement.textContent:3===i||4===i?e.nodeValue:n},makeArray:function(e,t){var n=t||[];return null!=e&&(c(Object(e))?ce.merge(n,"string"==typeof e?[e]:e):s.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:se.call(t,e,n)},isXMLDoc:function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!l.test(t||n&&n.nodeName||"HTML")},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(c(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:le}),"function"==typeof Symbol&&(ce.fn[Symbol.iterator]=oe[Symbol.iterator]),ce.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var de=oe.pop,pe=oe.sort,he=oe.splice,ge="[\\x20\\t\\r\\n\\f]",ve=new RegExp("^"+ge+"+|((?:^|[^\\\\])(?:\\\\.)*)"+ge+"+$","g");ce.contains=function(e,t){var n=t&&t.parentNode;return e===n||!(!n||1!==n.nodeType||!(e.contains?e.contains(n):e.compareDocumentPosition&&16&e.compareDocumentPosition(n)))};var f=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;function d(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e}ce.escapeSelector=function(e){return(e+Line truncated
|
||||
@@ -1 +1 @@
|
||||
@font-face{font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(fonts/KaTeX_AMS-Regular.woff2) format("woff2"),url(fonts/KaTeX_AMS-Regular.woff) format("woff"),url(fonts/KaTeX_AMS-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Caligraphic-Bold.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Bold.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Caligraphic-Regular.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Regular.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Fraktur-Bold.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Bold.woff) format("woff"),url(fonts/KaTeX_Fraktur-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Fraktur-Regular.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Regular.woff) format("woff"),url(fonts/KaTeX_Fraktur-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Main-Bold.woff2) format("woff2"),url(fonts/KaTeX_Main-Bold.woff) format("woff"),url(fonts/KaTeX_Main-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Main-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Main-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Main-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Main-Italic.woff2) format("woff2"),url(fonts/KaTeX_Main-Italic.woff) format("woff"),url(fonts/KaTeX_Main-Italic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Main-Regular.woff2) format("woff2"),url(fonts/KaTeX_Main-Regular.woff) format("woff"),url(fonts/KaTeX_Main-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Math-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Math-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Math-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Math-Italic.woff2) format("woff2"),url(fonts/KaTeX_Math-Italic.woff) format("woff"),url(fonts/KaTeX_Math-Italic.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:normal;font-weight:700;src:url(fonts/KaTeX_SansSerif-Bold.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Bold.woff) format("woff"),url(fonts/KaTeX_SansSerif-Bold.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:italic;font-weight:400;src:url(fonts/KaTeX_SansSerif-Italic.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Italic.woff) format("woff"),url(fonts/KaTeX_SansSerif-Italic.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:normal;font-weight:400;src:url(fonts/KaTeX_SansSerif-Regular.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Regular.woff) format("woff"),url(fonts/KaTeX_SansSerif-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Script-Regular.woff2) format("woff2"),url(fonts/KaTeX_Script-Regular.woff) format("woff"),url(fonts/KaTeX_Script-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size1-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size1-Regular.woff) format("woff"),url(fonts/KaTeX_Size1-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size2-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size2-Regular.woff) format("woff"),url(fonts/KaTeX_Size2-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size3-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size3-Regular.woff) format("woff"),url(fonts/KaTeX_Size3-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size4-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size4-Regular.woff) format("woff"),url(fonts/KaTeX_Size4-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Typewriter-Regular.woff2) format("woff2"),url(fonts/KaTeX_Typewriter-Regular.woff) format("woff"),url(fonts/KaTeX_Typewriter-Regular.ttf) format("truetype")}.katex{font:normal 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0;text-rendering:auto}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:"0.16.22"}.katex .katex-mathml{clip:rect(1px,1px,1px,1px);border:0;height:1pLine truncated
|
||||
@font-face{font-display:block;font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(fonts/KaTeX_AMS-Regular.woff2) format("woff2"),url(fonts/KaTeX_AMS-Regular.woff) format("woff"),url(fonts/KaTeX_AMS-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Caligraphic-Bold.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Bold.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Bold.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Caligraphic-Regular.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Regular.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Fraktur-Bold.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Bold.woff) format("woff"),url(fonts/KaTeX_Fraktur-Bold.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Fraktur-Regular.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Regular.woff) format("woff"),url(fonts/KaTeX_Fraktur-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Main-Bold.woff2) format("woff2"),url(fonts/KaTeX_Main-Bold.woff) format("woff"),url(fonts/KaTeX_Main-Bold.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Main-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Main-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Main-BoldItalic.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Main-Italic.woff2) format("woff2"),url(fonts/KaTeX_Main-Italic.woff) format("woff"),url(fonts/KaTeX_Main-Italic.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Main-Regular.woff2) format("woff2"),url(fonts/KaTeX_Main-Regular.woff) format("woff"),url(fonts/KaTeX_Main-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Math-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Math-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Math-BoldItalic.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Math-Italic.woff2) format("woff2"),url(fonts/KaTeX_Math-Italic.woff) format("woff"),url(fonts/KaTeX_Math-Italic.ttf) format("truetype")}@font-face{font-display:block;font-family:"KaTeX_SansSerif";font-style:normal;font-weight:700;src:url(fonts/KaTeX_SansSerif-Bold.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Bold.woff) format("woff"),url(fonts/KaTeX_SansSerif-Bold.ttf) format("truetype")}@font-face{font-display:block;font-family:"KaTeX_SansSerif";font-style:italic;font-weight:400;src:url(fonts/KaTeX_SansSerif-Italic.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Italic.woff) format("woff"),url(fonts/KaTeX_SansSerif-Italic.ttf) format("truetype")}@font-face{font-display:block;font-family:"KaTeX_SansSerif";font-style:normal;font-weight:400;src:url(fonts/KaTeX_SansSerif-Regular.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Regular.woff) format("woff"),url(fonts/KaTeX_SansSerif-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Script-Regular.woff2) format("woff2"),url(fonts/KaTeX_Script-Regular.woff) format("woff"),url(fonts/KaTeX_Script-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size1-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size1-Regular.woff) format("woff"),url(fonts/KaTeX_Size1-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size2-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size2-Regular.woff) format("woff"),url(fonts/KaTeX_Size2-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size3-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size3-Regular.woff) format("woff"),url(fonts/KaTeX_Size3-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size4-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size4-Regular.woff) format("woff"),url(fonts/KaTeX_Size4-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Typewriter-Regular.woff2) format("woff2"),url(fonts/KaTeX_Typewriter-ReguLine truncated
|
||||
@@ -1 +1 @@
|
||||
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.katex=t():e.katex=t()}("undefined"!=typeof self?self:this,(function(){return function(){"use strict";var e={d:function(t,r){for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}},t={};e.d(t,{default:function(){return Wn}});class r{constructor(e,t){this.name=void 0,this.position=void 0,this.length=void 0,this.rawMessage=void 0;let n,o,s="KaTeX parse error: "+e;const i=t&&t.loc;if(i&&i.start<=i.end){const e=i.lexer.input;n=i.start,o=i.end,n===e.length?s+=" at end of input: ":s+=" at position "+(n+1)+": ";const t=e.slice(n,o).replace(/[^]/g,"$&\u0332");let r,a;r=n>15?"\u2026"+e.slice(n-15,n):e.slice(0,n),a=o+15<e.length?e.slice(o,o+15)+"\u2026":e.slice(o),s+=r+t+a}const a=new Error(s);return a.name="ParseError",a.__proto__=r.prototype,a.position=n,null!=n&&null!=o&&(a.length=o-n),a.rawMessage=e,a}}r.prototype.__proto__=Error.prototype;var n=r;const o=/([A-Z])/g,s={"&":"&",">":">","<":"<",'"':""","'":"'"},i=/[&><"']/g;const a=function(e){return"ordgroup"===e.type||"color"===e.type?1===e.body.length?a(e.body[0]):e:"font"===e.type?a(e.body):e};var l={contains:function(e,t){return-1!==e.indexOf(t)},deflt:function(e,t){return void 0===e?t:e},escape:function(e){return String(e).replace(i,(e=>s[e]))},hyphenate:function(e){return e.replace(o,"-$1").toLowerCase()},getBaseElem:a,isCharacterBox:function(e){const t=a(e);return"mathord"===t.type||"textord"===t.type||"atom"===t.type},protocolFromUrl:function(e){const t=/^[\x00-\x20]*([^\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(e);return t?":"!==t[2]?null:/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(t[1])?t[1].toLowerCase():null:"_relative"}};const h={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format <type>"},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color <color>",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:e=>"#"+e},macros:{type:"object",cli:"-m, --macro <def>",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:(e,t)=>(t.push(e),t)},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:e=>Math.max(0,e),cli:"--min-rule-thickness <size>",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:e=>Math.max(0,e),cli:"-s, --max-size <n>",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:e=>Math.max(0,e),cli:"-e, --max-expand <n>",cliProcessor:e=>"Infinity"===e?1/0:parseInt(e)},globalGroup:{type:"boolean",cli:!1}};function c(e){if(e.default)return e.default;const t=e.type,r=Array.isArray(t)?t[0]:t;if("string"!=typeof r)return r.enum[0];switch(r){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{}}}class m{constructor(e){this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0Line truncated
|
||||
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.katex=t():e.katex=t()}("undefined"!=typeof self?self:this,(function(){return function(){"use strict";var e={d:function(t,r){for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}},t={};e.d(t,{default:function(){return Wn}});class r{constructor(e,t){this.name=void 0,this.position=void 0,this.length=void 0,this.rawMessage=void 0;let n,o,s="KaTeX parse error: "+e;const i=t&&t.loc;if(i&&i.start<=i.end){const e=i.lexer.input;n=i.start,o=i.end,n===e.length?s+=" at end of input: ":s+=" at position "+(n+1)+": ";const t=e.slice(n,o).replace(/[^]/g,"$&\u0332");let r,a;r=n>15?"\u2026"+e.slice(n-15,n):e.slice(0,n),a=o+15<e.length?e.slice(o,o+15)+"\u2026":e.slice(o),s+=r+t+a}const a=new Error(s);return a.name="ParseError",a.__proto__=r.prototype,a.position=n,null!=n&&null!=o&&(a.length=o-n),a.rawMessage=e,a}}r.prototype.__proto__=Error.prototype;var n=r;const o=/([A-Z])/g,s={"&":"&",">":">","<":"<",'"':""","'":"'"},i=/[&><"']/g;const a=function(e){return"ordgroup"===e.type||"color"===e.type?1===e.body.length?a(e.body[0]):e:"font"===e.type?a(e.body):e};var l={deflt:function(e,t){return void 0===e?t:e},escape:function(e){return String(e).replace(i,(e=>s[e]))},hyphenate:function(e){return e.replace(o,"-$1").toLowerCase()},getBaseElem:a,isCharacterBox:function(e){const t=a(e);return"mathord"===t.type||"textord"===t.type||"atom"===t.type},protocolFromUrl:function(e){const t=/^[\x00-\x20]*([^\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(e);return t?":"!==t[2]?null:/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(t[1])?t[1].toLowerCase():null:"_relative"}};const h={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format <type>"},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color <color>",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:e=>"#"+e},macros:{type:"object",cli:"-m, --macro <def>",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:(e,t)=>(t.push(e),t)},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:e=>Math.max(0,e),cli:"--min-rule-thickness <size>",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:e=>Math.max(0,e),cli:"-s, --max-size <n>",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:e=>Math.max(0,e),cli:"-e, --max-expand <n>",cliProcessor:e=>"Infinity"===e?1/0:parseInt(e)},globalGroup:{type:"boolean",cli:!1}};function c(e){if(e.default)return e.default;const t=e.type,r=Array.isArray(t)?t[0]:t;if("string"!=typeof r)return r.enum[0];switch(r){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{}}}class m{constructor(e){this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.Line truncated
|
||||
@@ -52,7 +52,7 @@ lite-youtube > iframe {
|
||||
}
|
||||
|
||||
/* play button */
|
||||
lite-youtube > .lty-playbtn {
|
||||
lite-youtube > .lyt-playbtn {
|
||||
display: block;
|
||||
/* Make the button element cover the whole area for a large hover/click target… */
|
||||
width: 100%;
|
||||
@@ -69,8 +69,8 @@ lite-youtube > .lty-playbtn {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
lite-youtube:hover > .lty-playbtn,
|
||||
lite-youtube .lty-playbtn:focus {
|
||||
lite-youtube:hover > .lyt-playbtn,
|
||||
lite-youtube .lyt-playbtn:focus {
|
||||
filter: none;
|
||||
}
|
||||
|
||||
@@ -79,7 +79,7 @@ lite-youtube.lyt-activated {
|
||||
cursor: unset;
|
||||
}
|
||||
lite-youtube.lyt-activated::before,
|
||||
lite-youtube.lyt-activated > .lty-playbtn {
|
||||
lite-youtube.lyt-activated > .lyt-playbtn {
|
||||
opacity: 0;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ class LiteYTEmbed extends HTMLElement {
|
||||
connectedCallback() {
|
||||
this.videoId = this.getAttribute('videoid');
|
||||
|
||||
let playBtnEl = this.querySelector('.lty-playbtn');
|
||||
let playBtnEl = this.querySelector('.lyt-playbtn,.lty-playbtn');
|
||||
// A label for the button takes priority over a [playlabel] attribute on the custom-element
|
||||
this.playLabel = (playBtnEl && playBtnEl.textContent.trim()) || this.getAttribute('playlabel') || 'Play';
|
||||
|
||||
@@ -34,7 +34,8 @@ class LiteYTEmbed extends HTMLElement {
|
||||
if (!playBtnEl) {
|
||||
playBtnEl = document.createElement('button');
|
||||
playBtnEl.type = 'button';
|
||||
playBtnEl.classList.add('lty-playbtn');
|
||||
// Include the mispelled 'lty-' in case it's still being used. https://github.com/paulirish/lite-youtube-embed/issues/65
|
||||
playBtnEl.classList.add('lyt-playbtn', 'lty-playbtn');
|
||||
this.append(playBtnEl);
|
||||
}
|
||||
if (!playBtnEl.textContent) {
|
||||
@@ -200,6 +201,8 @@ class LiteYTEmbed extends HTMLElement {
|
||||
iframeEl.title = this.playLabel;
|
||||
iframeEl.allow = 'accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture';
|
||||
iframeEl.allowFullscreen = true;
|
||||
// Required by Youtube to fix Error 153
|
||||
iframeEl.referrerPolicy = 'strict-origin-when-cross-origin';
|
||||
// AFAIK, the encoding here isn't necessary for XSS, but we'll do it only because this is a URL
|
||||
// https://stackoverflow.com/q/64959723/89484
|
||||
iframeEl.src = `https://www.youtube-nocookie.com/embed/${encodeURIComponent(this.videoId)}?${this.getParams().toString()}`;
|
||||
|
||||
@@ -2,4 +2,4 @@
|
||||
[module.hugoVersion]
|
||||
extended = true
|
||||
min = "0.141.0"
|
||||
max = "0.148.2"
|
||||
max = "0.155.3"
|
||||
@@ -2,6 +2,12 @@
|
||||
# These settings are required for the theme to function.
|
||||
|
||||
[goldmark]
|
||||
[goldmark.parser]
|
||||
wrapStandAloneImageWithinParagraph = false
|
||||
|
||||
[goldmark.parser.attribute]
|
||||
block = true
|
||||
|
||||
[goldmark.renderer]
|
||||
unsafe = true
|
||||
|
||||
|
||||
@@ -12,6 +12,8 @@ autoSwitchAppearance = true
|
||||
enableA11y = false
|
||||
enableSearch = true
|
||||
enableCodeCopy = false
|
||||
enableStructuredBreadcrumbs = false
|
||||
# enableStyledScrollbar = true # disable to use native scrollbar style (defaults to true)
|
||||
|
||||
replyByEmail = false
|
||||
|
||||
@@ -23,9 +25,11 @@ disableImageOptimizationMD = false
|
||||
disableTextInHeader = false
|
||||
# backgroundImageWidth = 1200
|
||||
|
||||
# defaultBackgroundImage = "IMAGE.jpg" # used as default for background images
|
||||
# defaultBackgroundImage = "IMAGE.jpg" # used as default for background images
|
||||
# defaultFeaturedImage = "IMAGE.jpg" # used as default for featured images in all articles
|
||||
# defaultSocialImage = "/android-chrome-512x512.png" # used as default for social media sharing (Open Graph and Twitter)
|
||||
hotlinkFeatureImage = false
|
||||
# imagePosition = "50% 50%"
|
||||
|
||||
# highlightCurrentMenuArea = true
|
||||
# smartTOC = true
|
||||
@@ -89,6 +93,7 @@ forgejoDefaultServer = "https://v11.next.forgejo.org"
|
||||
showWordCount = true
|
||||
# sharingLinks = [ "linkedin", "twitter", "bluesky", "mastodon", "reddit", "pinterest", "facebook", "email", "whatsapp", "telegram", "line"]
|
||||
showZenMode = false
|
||||
# externalLinkForceNewTab = false # disable to allow external links in the same tab (defaults to true)
|
||||
|
||||
[list]
|
||||
showHero = false
|
||||
@@ -160,7 +165,7 @@ forgejoDefaultServer = "https://v11.next.forgejo.org"
|
||||
# globalWidget = true
|
||||
# globalWidgetMessage = "Hello"
|
||||
# globalWidgetColor = "#FFDD00"
|
||||
# globalWidgetPosition = "Right"
|
||||
# globalWidgetPosition = "right"
|
||||
|
||||
[verification]
|
||||
# google = ""
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
[{"avatar_url":"https://avatars.githubusercontent.com/u/928965?u=f5d781ca0eb5cb5c7ce9e5ee5d3b24dae3d6e987\u0026v=4\u0026s=128","profile_url":"https://github.com/nazar-pc","username":"nazar-pc"},{"avatar_url":"https://avatars.githubusercontent.com/u/17061177?v=4\u0026s=128","profile_url":"https://github.com/ytocquet","username":"ytocquet"},{"avatar_url":"https://avatars.githubusercontent.com/u/49299328?v=4\u0026s=128","profile_url":"https://github.com/LITUATUI","username":"LITUATUI"},{"avatar_url":"https://avatars.githubusercontent.com/u/147227691?v=4\u0026s=128","profile_url":"https://github.com/AtmosphericIgnition","username":"AtmosphericIgnition"}]
|
||||
@@ -0,0 +1,22 @@
|
||||
languageCode = "de"
|
||||
languageName = "Deutsch"
|
||||
weight = 3
|
||||
title = "Blowfish"
|
||||
|
||||
[params]
|
||||
displayName = "Deutsch"
|
||||
isoCode = "de"
|
||||
rtl = false
|
||||
dateFormat = "2. January 2006"
|
||||
logo = "img/blowfish_logo_transparent.png"
|
||||
description = "Ein leistungsstarkes, leichtgewichtiges Theme für Hugo."
|
||||
|
||||
[params.author]
|
||||
name = "Blowfish"
|
||||
image = "img/blowfish_logo.png"
|
||||
headline = "Ein leistungsstarkes, leichtgewichtiges Theme für Hugo."
|
||||
bio = "Ein leistungsstarkes, leichtgewichtiges Theme für Hugo."
|
||||
links = [
|
||||
{ x-twitter = "https://twitter.com/burufugu" },
|
||||
{ github = "https://github.com/nunocoracao/blowfish" },
|
||||
]
|
||||
@@ -0,0 +1,22 @@
|
||||
languageCode = "es"
|
||||
languageName = "Español"
|
||||
weight = 6
|
||||
title = "Blowfish"
|
||||
|
||||
[params]
|
||||
displayName = "Español"
|
||||
isoCode = "es"
|
||||
rtl = false
|
||||
dateFormat = "2 de January de 2006"
|
||||
logo = "img/blowfish_logo_transparent.png"
|
||||
description = "Un tema potente y ligero para Hugo."
|
||||
|
||||
[params.author]
|
||||
name = "Blowfish"
|
||||
image = "img/blowfish_logo.png"
|
||||
headline = "Un tema potente y ligero para Hugo."
|
||||
bio = "Un tema potente y ligero para Hugo."
|
||||
links = [
|
||||
{ x-twitter = "https://twitter.com/burufugu" },
|
||||
{ github = "https://github.com/nunocoracao/blowfish" },
|
||||
]
|
||||
@@ -0,0 +1,22 @@
|
||||
languageCode = "fr"
|
||||
languageName = "Français"
|
||||
weight = 2
|
||||
title = "Blowfish"
|
||||
|
||||
[params]
|
||||
displayName = "Français"
|
||||
isoCode = "fr"
|
||||
rtl = false
|
||||
dateFormat = "2 janvier 2006"
|
||||
logo = "img/blowfish_logo_transparent.png"
|
||||
description = "Un thème puissant et léger pour Hugo."
|
||||
|
||||
[params.author]
|
||||
name = "Blowfish"
|
||||
image = "img/blowfish_logo.png"
|
||||
headline = "Un thème puissant et léger pour Hugo."
|
||||
bio = "Un thème puissant et léger pour Hugo."
|
||||
links = [
|
||||
{ x-twitter = "https://twitter.com/burufugu" },
|
||||
{ github = "https://github.com/nunocoracao/blowfish" },
|
||||
]
|
||||
@@ -1,6 +1,6 @@
|
||||
languageCode = "it"
|
||||
languageName = "Italiano"
|
||||
weight = 2
|
||||
weight = 4
|
||||
title = "Blowfish"
|
||||
|
||||
[params]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
languageCode = "ja"
|
||||
languageName = "日本語"
|
||||
weight = 3
|
||||
weight = 8
|
||||
title = "Blowfish"
|
||||
|
||||
[params]
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
languageCode = "pt-br"
|
||||
languageName = "Português (Brasil)"
|
||||
weight = 6
|
||||
title = "Blowfish"
|
||||
|
||||
[params]
|
||||
displayName = "Português (Brasil)"
|
||||
isoCode = "pt-br"
|
||||
rtl = false
|
||||
dateFormat = "2 de January de 2006"
|
||||
logo = "img/blowfish_logo_transparent.png"
|
||||
description = "Um tema poderoso e leve para Hugo."
|
||||
|
||||
[params.author]
|
||||
name = "Blowfish"
|
||||
image = "img/blowfish_logo.png"
|
||||
headline = "Um tema poderoso e leve para Hugo."
|
||||
bio = "Um tema poderoso e leve para Hugo."
|
||||
links = [
|
||||
{ x-twitter = "https://twitter.com/burufugu" },
|
||||
{ github = "https://github.com/nunocoracao/blowfish" },
|
||||
]
|
||||
@@ -0,0 +1,22 @@
|
||||
languageCode = "pt-pt"
|
||||
languageName = "Português (Portugal)"
|
||||
weight = 5
|
||||
title = "Blowfish"
|
||||
|
||||
[params]
|
||||
displayName = "Português (Portugal)"
|
||||
isoCode = "pt-pt"
|
||||
rtl = false
|
||||
dateFormat = "2 de January de 2006"
|
||||
logo = "img/blowfish_logo_transparent.png"
|
||||
description = "Um tema poderoso e leve para Hugo."
|
||||
|
||||
[params.author]
|
||||
name = "Blowfish"
|
||||
image = "img/blowfish_logo.png"
|
||||
headline = "Um tema poderoso e leve para Hugo."
|
||||
bio = "Um tema poderoso e leve para Hugo."
|
||||
links = [
|
||||
{ x-twitter = "https://twitter.com/burufugu" },
|
||||
{ github = "https://github.com/nunocoracao/blowfish" },
|
||||
]
|
||||
@@ -1,6 +1,6 @@
|
||||
languageCode = "zh-cn"
|
||||
languageName = "简体中文"
|
||||
weight = 4
|
||||
weight = 9
|
||||
title = "Blowfish"
|
||||
|
||||
[params]
|
||||
|
||||
@@ -2,6 +2,12 @@
|
||||
# These settings are required for the theme to function.
|
||||
|
||||
[goldmark]
|
||||
[goldmark.parser]
|
||||
wrapStandAloneImageWithinParagraph = false
|
||||
|
||||
[goldmark.parser.attribute]
|
||||
block = true
|
||||
|
||||
[goldmark.renderer]
|
||||
unsafe = true
|
||||
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
# -- Hauptmenü --
|
||||
# Das Hauptmenü wird in der Kopfzeile oben auf der Seite angezeigt.
|
||||
|
||||
[[main]]
|
||||
name = "Dokumentation"
|
||||
pageRef = "docs"
|
||||
weight = 10
|
||||
|
||||
[[main]]
|
||||
name = "Shortcodes"
|
||||
pageRef = "docs/shortcodes"
|
||||
weight = 15
|
||||
|
||||
[[main]]
|
||||
name = "Beispiele"
|
||||
weight = 20
|
||||
|
||||
[[main]]
|
||||
name = "Vorlagen"
|
||||
parent = "Beispiele"
|
||||
pageRef = "samples"
|
||||
weight = 16
|
||||
|
||||
[[main]]
|
||||
name = "Galerie"
|
||||
parent = "Beispiele"
|
||||
pageRef = "examples"
|
||||
weight = 30
|
||||
|
||||
[[main]]
|
||||
name = "Rezepte"
|
||||
parent = "Beispiele"
|
||||
pageRef = "guides"
|
||||
weight = 40
|
||||
|
||||
[[main]]
|
||||
name = "Benutzer"
|
||||
pageRef = "users"
|
||||
weight = 90
|
||||
|
||||
[[main]]
|
||||
name = "Merch"
|
||||
url = "https://www.teepublic.com/user/blowfish-store/t-shirts"
|
||||
weight = 100
|
||||
|
||||
[[main]]
|
||||
identifier = "twitter"
|
||||
pre = "x-twitter"
|
||||
url = "https://twitter.com/burufugu"
|
||||
weight = 200
|
||||
|
||||
[[main]]
|
||||
identifier = "github"
|
||||
pre = "github"
|
||||
url = "https://github.com/nunocoracao/blowfish"
|
||||
weight = 400
|
||||
|
||||
|
||||
# -- Fußzeilenmenü --
|
||||
|
||||
[[footer]]
|
||||
name = "Tags"
|
||||
pageRef = "tags"
|
||||
weight = 10
|
||||
|
||||
[[footer]]
|
||||
name = "Autoren"
|
||||
pageRef = "authors"
|
||||
weight = 20
|
||||
@@ -0,0 +1,69 @@
|
||||
# -- Menú Principal --
|
||||
# El menú principal se muestra en el encabezado en la parte superior de la página.
|
||||
|
||||
[[main]]
|
||||
name = "Documentación"
|
||||
pageRef = "docs"
|
||||
weight = 10
|
||||
|
||||
[[main]]
|
||||
name = "Shortcodes"
|
||||
pageRef = "docs/shortcodes"
|
||||
weight = 15
|
||||
|
||||
[[main]]
|
||||
name = "Ejemplos"
|
||||
weight = 20
|
||||
|
||||
[[main]]
|
||||
name = "Muestras"
|
||||
parent = "Ejemplos"
|
||||
pageRef = "samples"
|
||||
weight = 16
|
||||
|
||||
[[main]]
|
||||
name = "Galería"
|
||||
parent = "Ejemplos"
|
||||
pageRef = "examples"
|
||||
weight = 30
|
||||
|
||||
[[main]]
|
||||
name = "Recetas"
|
||||
parent = "Ejemplos"
|
||||
pageRef = "guides"
|
||||
weight = 40
|
||||
|
||||
[[main]]
|
||||
name = "Usuarios"
|
||||
pageRef = "users"
|
||||
weight = 90
|
||||
|
||||
[[main]]
|
||||
name = "Merch"
|
||||
url = "https://www.teepublic.com/user/blowfish-store/t-shirts"
|
||||
weight = 100
|
||||
|
||||
[[main]]
|
||||
identifier = "twitter"
|
||||
pre = "x-twitter"
|
||||
url = "https://twitter.com/burufugu"
|
||||
weight = 200
|
||||
|
||||
[[main]]
|
||||
identifier = "github"
|
||||
pre = "github"
|
||||
url = "https://github.com/nunocoracao/blowfish"
|
||||
weight = 400
|
||||
|
||||
|
||||
# -- Menú de Pie de Página --
|
||||
|
||||
[[footer]]
|
||||
name = "Etiquetas"
|
||||
pageRef = "tags"
|
||||
weight = 10
|
||||
|
||||
[[footer]]
|
||||
name = "Autores"
|
||||
pageRef = "authors"
|
||||
weight = 20
|
||||
@@ -0,0 +1,69 @@
|
||||
# -- Menu Principal --
|
||||
# Le menu principal est affiché dans l'en-tête en haut de la page.
|
||||
|
||||
[[main]]
|
||||
name = "Documentation"
|
||||
pageRef = "docs"
|
||||
weight = 10
|
||||
|
||||
[[main]]
|
||||
name = "Shortcodes"
|
||||
pageRef = "docs/shortcodes"
|
||||
weight = 15
|
||||
|
||||
[[main]]
|
||||
name = "Exemples"
|
||||
weight = 20
|
||||
|
||||
[[main]]
|
||||
name = "Échantillons"
|
||||
parent = "Exemples"
|
||||
pageRef = "samples"
|
||||
weight = 16
|
||||
|
||||
[[main]]
|
||||
name = "Vitrine"
|
||||
parent = "Exemples"
|
||||
pageRef = "examples"
|
||||
weight = 30
|
||||
|
||||
[[main]]
|
||||
name = "Recettes"
|
||||
parent = "Exemples"
|
||||
pageRef = "guides"
|
||||
weight = 40
|
||||
|
||||
[[main]]
|
||||
name = "Utilisateurs"
|
||||
pageRef = "users"
|
||||
weight = 90
|
||||
|
||||
[[main]]
|
||||
name = "Merch"
|
||||
url = "https://www.teepublic.com/user/blowfish-store/t-shirts"
|
||||
weight = 100
|
||||
|
||||
[[main]]
|
||||
identifier = "twitter"
|
||||
pre = "x-twitter"
|
||||
url = "https://twitter.com/burufugu"
|
||||
weight = 200
|
||||
|
||||
[[main]]
|
||||
identifier = "github"
|
||||
pre = "github"
|
||||
url = "https://github.com/nunocoracao/blowfish"
|
||||
weight = 400
|
||||
|
||||
|
||||
# -- Menu Pied de Page --
|
||||
|
||||
[[footer]]
|
||||
name = "Tags"
|
||||
pageRef = "tags"
|
||||
weight = 10
|
||||
|
||||
[[footer]]
|
||||
name = "Auteurs"
|
||||
pageRef = "authors"
|
||||
weight = 20
|
||||
@@ -0,0 +1,69 @@
|
||||
# -- Menu Principal --
|
||||
# O menu principal é exibido no cabeçalho no topo da página.
|
||||
|
||||
[[main]]
|
||||
name = "Documentação"
|
||||
pageRef = "docs"
|
||||
weight = 10
|
||||
|
||||
[[main]]
|
||||
name = "Shortcodes"
|
||||
pageRef = "docs/shortcodes"
|
||||
weight = 15
|
||||
|
||||
[[main]]
|
||||
name = "Exemplos"
|
||||
weight = 20
|
||||
|
||||
[[main]]
|
||||
name = "Amostras"
|
||||
parent = "Exemplos"
|
||||
pageRef = "samples"
|
||||
weight = 16
|
||||
|
||||
[[main]]
|
||||
name = "Galeria"
|
||||
parent = "Exemplos"
|
||||
pageRef = "examples"
|
||||
weight = 30
|
||||
|
||||
[[main]]
|
||||
name = "Receitas"
|
||||
parent = "Exemplos"
|
||||
pageRef = "guides"
|
||||
weight = 40
|
||||
|
||||
[[main]]
|
||||
name = "Usuários"
|
||||
pageRef = "users"
|
||||
weight = 90
|
||||
|
||||
[[main]]
|
||||
name = "Merch"
|
||||
url = "https://www.teepublic.com/user/blowfish-store/t-shirts"
|
||||
weight = 100
|
||||
|
||||
[[main]]
|
||||
identifier = "twitter"
|
||||
pre = "x-twitter"
|
||||
url = "https://twitter.com/burufugu"
|
||||
weight = 200
|
||||
|
||||
[[main]]
|
||||
identifier = "github"
|
||||
pre = "github"
|
||||
url = "https://github.com/nunocoracao/blowfish"
|
||||
weight = 400
|
||||
|
||||
|
||||
# -- Menu de Rodapé --
|
||||
|
||||
[[footer]]
|
||||
name = "Tags"
|
||||
pageRef = "tags"
|
||||
weight = 10
|
||||
|
||||
[[footer]]
|
||||
name = "Autores"
|
||||
pageRef = "authors"
|
||||
weight = 20
|
||||
@@ -0,0 +1,69 @@
|
||||
# -- Menu Principal --
|
||||
# O menu principal é apresentado no cabeçalho no topo da página.
|
||||
|
||||
[[main]]
|
||||
name = "Documentação"
|
||||
pageRef = "docs"
|
||||
weight = 10
|
||||
|
||||
[[main]]
|
||||
name = "Shortcodes"
|
||||
pageRef = "docs/shortcodes"
|
||||
weight = 15
|
||||
|
||||
[[main]]
|
||||
name = "Exemplos"
|
||||
weight = 20
|
||||
|
||||
[[main]]
|
||||
name = "Amostras"
|
||||
parent = "Exemplos"
|
||||
pageRef = "samples"
|
||||
weight = 16
|
||||
|
||||
[[main]]
|
||||
name = "Galeria"
|
||||
parent = "Exemplos"
|
||||
pageRef = "examples"
|
||||
weight = 30
|
||||
|
||||
[[main]]
|
||||
name = "Receitas"
|
||||
parent = "Exemplos"
|
||||
pageRef = "guides"
|
||||
weight = 40
|
||||
|
||||
[[main]]
|
||||
name = "Utilizadores"
|
||||
pageRef = "users"
|
||||
weight = 90
|
||||
|
||||
[[main]]
|
||||
name = "Merch"
|
||||
url = "https://www.teepublic.com/user/blowfish-store/t-shirts"
|
||||
weight = 100
|
||||
|
||||
[[main]]
|
||||
identifier = "twitter"
|
||||
pre = "x-twitter"
|
||||
url = "https://twitter.com/burufugu"
|
||||
weight = 200
|
||||
|
||||
[[main]]
|
||||
identifier = "github"
|
||||
pre = "github"
|
||||
url = "https://github.com/nunocoracao/blowfish"
|
||||
weight = 400
|
||||
|
||||
|
||||
# -- Menu de Rodapé --
|
||||
|
||||
[[footer]]
|
||||
name = "Tags"
|
||||
pageRef = "tags"
|
||||
weight = 10
|
||||
|
||||
[[footer]]
|
||||
name = "Autores"
|
||||
pageRef = "authors"
|
||||
weight = 20
|
||||
@@ -12,6 +12,7 @@ autoSwitchAppearance = true
|
||||
enableA11y = false
|
||||
enableSearch = true
|
||||
enableCodeCopy = true
|
||||
enableStructuredBreadcrumbs = true
|
||||
|
||||
replyByEmail = false
|
||||
|
||||
@@ -26,6 +27,8 @@ disableTextInHeader = false
|
||||
defaultBackgroundImage = "/img/background.svg"
|
||||
defaultFeaturedImage = "/img/featured.svg"
|
||||
defaultSocialImage = "/img/blowfish_banner.png"
|
||||
hotlinkFeatureImage = false
|
||||
# imagePosition = "50% 50%"
|
||||
|
||||
highlightCurrentMenuArea = true
|
||||
smartTOC = true
|
||||
@@ -60,7 +63,7 @@ fingerprintAlgorithm = "sha512" # Valid values are "sha512" (default), "sha384",
|
||||
|
||||
[article]
|
||||
showDate = false
|
||||
showViews = false
|
||||
showViews = true
|
||||
showLikes = false
|
||||
showDateOnlyInArticle = false
|
||||
showDateUpdated = false
|
||||
@@ -83,8 +86,8 @@ fingerprintAlgorithm = "sha512" # Valid values are "sha512" (default), "sha384",
|
||||
showTableOfContents = true
|
||||
showRelatedContent = true
|
||||
relatedContentLimit = 9
|
||||
showTaxonomies = true
|
||||
showAuthorsBadges = true
|
||||
showTaxonomies = true
|
||||
showAuthorsBadges = true
|
||||
showWordCount = false
|
||||
sharingLinks = [ "linkedin", "twitter", "bluesky", "reddit", "whatsapp", "telegram", "pinterest", "facebook", "email", "line"]
|
||||
showZenMode = true
|
||||
@@ -129,15 +132,15 @@ fingerprintAlgorithm = "sha512" # Valid values are "sha512" (default), "sha384",
|
||||
groupByYear = false
|
||||
cardView = true
|
||||
cardViewScreenWidth = false
|
||||
|
||||
|
||||
[firebase]
|
||||
#apiKey = "AIzaSyB5tqlqDky77Vb4Tc4apiHV4hRZI18KGiY"
|
||||
#authDomain = "blowfish-21fff.firebaseapp.com"
|
||||
#projectId = "blowfish-21fff"
|
||||
#storageBucket = "blowfish-21fff.appspot.com"
|
||||
#messagingSenderId = "60108104191"
|
||||
#appId = "1:60108104191:web:039842ebe1370698b487ca"
|
||||
#measurementId = "G-PEDMYR1V0K"
|
||||
apiKey = "AIzaSyB5tqlqDky77Vb4Tc4apiHV4hRZI18KGiY"
|
||||
authDomain = "blowfish-21fff.firebaseapp.com"
|
||||
projectId = "blowfish-21fff"
|
||||
storageBucket = "blowfish-21fff.appspot.com"
|
||||
messagingSenderId = "60108104191"
|
||||
appId = "1:60108104191:web:039842ebe1370698b487ca"
|
||||
measurementId = "G-PEDMYR1V0K"
|
||||
|
||||
[fathomAnalytics]
|
||||
# site = "ABC12345"
|
||||
@@ -159,7 +162,7 @@ fingerprintAlgorithm = "sha512" # Valid values are "sha512" (default), "sha384",
|
||||
globalWidget = true
|
||||
globalWidgetMessage = ""
|
||||
globalWidgetColor = "#FFDD00"
|
||||
globalWidgetPosition = "Right"
|
||||
globalWidgetPosition = "right"
|
||||
|
||||
[verification]
|
||||
# google = ""
|
||||
@@ -172,4 +175,4 @@ fingerprintAlgorithm = "sha512" # Valid values are "sha512" (default), "sha384",
|
||||
# userId = ""
|
||||
|
||||
[advertisement]
|
||||
# adsense = ""
|
||||
# adsense = ""
|
||||
@@ -0,0 +1,29 @@
|
||||
---
|
||||
title: "Willkommen bei Blowfish! :tada:"
|
||||
description: "Diese Seite wurde mit dem Blowfish-Theme für Hugo erstellt."
|
||||
---
|
||||
|
||||
|
||||
<div class="flex px-4 py-2 mb-8 text-base rounded-md bg-primary-100 dark:bg-primary-900">
|
||||
<span class="flex items-center pe-3 text-primary-400">
|
||||
{{< icon "triangle-exclamation" >}}
|
||||
</span>
|
||||
<span class="flex items-center justify-between grow dark:text-neutral-300">
|
||||
<span class="prose dark:prose-invert">Dies ist eine Demo des <code id="layout">background</code> Layouts.</span>
|
||||
<button
|
||||
id="switch-layout-button"
|
||||
class="px-4 mx-[3px] !text-neutral !no-underline rounded-md bg-primary-600 hover:!bg-primary-500 dark:bg-primary-800 dark:hover:!bg-primary-700"
|
||||
>
|
||||
Layout wechseln ↻
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
|
||||
```shell
|
||||
npx blowfish-tools
|
||||
```
|
||||
|
||||
{{< youtubeLite id="SgXhGb-7QbU" label="Blowfish-tools Demo" >}}
|
||||
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
---
|
||||
title: "¡Bienvenido a Blowfish! :tada:"
|
||||
description: "Esta página fue creada usando el tema Blowfish para Hugo."
|
||||
---
|
||||
|
||||
|
||||
<div class="flex px-4 py-2 mb-8 text-base rounded-md bg-primary-100 dark:bg-primary-900">
|
||||
<span class="flex items-center pe-3 text-primary-400">
|
||||
{{< icon "triangle-exclamation" >}}
|
||||
</span>
|
||||
<span class="flex items-center justify-between grow dark:text-neutral-300">
|
||||
<span class="prose dark:prose-invert">Esta es una demostración del layout <code id="layout">background</code>.</span>
|
||||
<button
|
||||
id="switch-layout-button"
|
||||
class="px-4 mx-[3px] !text-neutral !no-underline rounded-md bg-primary-600 hover:!bg-primary-500 dark:bg-primary-800 dark:hover:!bg-primary-700"
|
||||
>
|
||||
Cambiar layout ↻
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
|
||||
```shell
|
||||
npx blowfish-tools
|
||||
```
|
||||
|
||||
{{< youtubeLite id="SgXhGb-7QbU" label="Demo de Blowfish-tools" >}}
|
||||
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
---
|
||||
title: "Bienvenue sur Blowfish ! :tada:"
|
||||
description: "Cette page a été créée avec le thème Blowfish pour Hugo."
|
||||
---
|
||||
|
||||
|
||||
<div class="flex px-4 py-2 mb-8 text-base rounded-md bg-primary-100 dark:bg-primary-900">
|
||||
<span class="flex items-center pe-3 text-primary-400">
|
||||
{{< icon "triangle-exclamation" >}}
|
||||
</span>
|
||||
<span class="flex items-center justify-between grow dark:text-neutral-300">
|
||||
<span class="prose dark:prose-invert">Ceci est une démo du layout <code id="layout">background</code>.</span>
|
||||
<button
|
||||
id="switch-layout-button"
|
||||
class="px-4 mx-[3px] !text-neutral !no-underline rounded-md bg-primary-600 hover:!bg-primary-500 dark:bg-primary-800 dark:hover:!bg-primary-700"
|
||||
>
|
||||
Changer de layout ↻
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
|
||||
```shell
|
||||
npx blowfish-tools
|
||||
```
|
||||
|
||||
{{< youtubeLite id="SgXhGb-7QbU" label="Démo de Blowfish-tools" >}}
|
||||
|
||||
|
||||
@@ -3,14 +3,14 @@ title: "Benvenuti a Blowfish!"
|
||||
description: "Questa pagina è stata creata utilizzando il tema Blowfish per Hugo."
|
||||
---
|
||||
<div class="flex px-4 py-2 mb-8 text-base rounded-md bg-primary-100 dark:bg-primary-900">
|
||||
<span class="flex items-center ltr:pr-3 rtl:pl-3 text-primary-400">
|
||||
<span class="flex items-center pe-3 text-primary-400">
|
||||
{{< icon "triangle-exclamation" >}}
|
||||
</span>
|
||||
<span class="flex items-center justify-between grow dark:text-neutral-300">
|
||||
<span class="prose dark:prose-invert">Questa è una demo del layout <code id="layout">background</code>.</span>
|
||||
<button
|
||||
id="switch-layout-button"
|
||||
class="px-4 !text-neutral !no-underline rounded-md bg-primary-600 hover:!bg-primary-500 dark:bg-primary-800 dark:hover:!bg-primary-700"
|
||||
class="px-4 mx-[3px] !text-neutral !no-underline rounded-md bg-primary-600 hover:!bg-primary-500 dark:bg-primary-800 dark:hover:!bg-primary-700"
|
||||
>
|
||||
Cambia layout ↻
|
||||
</button>
|
||||
@@ -22,4 +22,4 @@ description: "Questa pagina è stata creata utilizzando il tema Blowfish per Hug
|
||||
npx blowfish-tools
|
||||
```
|
||||
|
||||
{{< youtubeLite id="SgXhGb-7QbU" label="Demo degli strumenti Blowfish" >}}
|
||||
{{< youtubeLite id="SgXhGb-7QbU" label="Demo degli strumenti Blowfish" >}}
|
||||
@@ -5,14 +5,14 @@ description: "このページは Hugo の Blowfish テーマを利用して構
|
||||
|
||||
|
||||
<div class="flex px-4 py-2 mb-8 text-base rounded-md bg-primary-100 dark:bg-primary-900">
|
||||
<span class="flex items-center ltr:pr-3 rtl:pl-3 text-primary-400">
|
||||
<span class="flex items-center pe-3 text-primary-400">
|
||||
{{< icon "triangle-exclamation" >}}
|
||||
</span>
|
||||
<span class="flex items-center justify-between grow dark:text-neutral-300">
|
||||
<span class="prose dark:prose-invert">こちらは <code id="layout">background</code> レイアウトのデモです。</span>
|
||||
<button
|
||||
id="switch-layout-button"
|
||||
class="px-4 !text-neutral !no-underline rounded-md bg-primary-600 hover:!bg-primary-500 dark:bg-primary-800 dark:hover:!bg-primary-700"
|
||||
class="px-4 mx-[3px] !text-neutral !no-underline rounded-md bg-primary-600 hover:!bg-primary-500 dark:bg-primary-800 dark:hover:!bg-primary-700"
|
||||
>
|
||||
レイアウトを変更する↻
|
||||
</button>
|
||||
|
||||
@@ -5,14 +5,14 @@ description: "This page was built using the Blowfish theme for Hugo."
|
||||
|
||||
|
||||
<div class="flex px-4 py-2 mb-8 text-base rounded-md bg-primary-100 dark:bg-primary-900">
|
||||
<span class="flex items-center ltr:pr-3 rtl:pl-3 text-primary-400">
|
||||
<span class="flex items-center pe-3 text-primary-400">
|
||||
{{< icon "triangle-exclamation" >}}
|
||||
</span>
|
||||
<span class="flex items-center justify-between grow dark:text-neutral-300">
|
||||
<span class="prose dark:prose-invert">This is a demo of the <code id="layout">background</code> layout.</span>
|
||||
<button
|
||||
id="switch-layout-button"
|
||||
class="px-4 !text-neutral !no-underline rounded-md bg-primary-600 hover:!bg-primary-500 dark:bg-primary-800 dark:hover:!bg-primary-700"
|
||||
class="px-4 mx-[3px] !text-neutral !no-underline rounded-md bg-primary-600 hover:!bg-primary-500 dark:bg-primary-800 dark:hover:!bg-primary-700"
|
||||
>
|
||||
Switch layout ↻
|
||||
</button>
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
---
|
||||
title: "Bem-vindo ao Blowfish! :tada:"
|
||||
description: "Esta página foi criada usando o tema Blowfish para Hugo."
|
||||
---
|
||||
|
||||
|
||||
<div class="flex px-4 py-2 mb-8 text-base rounded-md bg-primary-100 dark:bg-primary-900">
|
||||
<span class="flex items-center pe-3 text-primary-400">
|
||||
{{< icon "triangle-exclamation" >}}
|
||||
</span>
|
||||
<span class="flex items-center justify-between grow dark:text-neutral-300">
|
||||
<span class="prose dark:prose-invert">Esta é uma demonstração do layout <code id="layout">background</code>.</span>
|
||||
<button
|
||||
id="switch-layout-button"
|
||||
class="px-4 mx-[3px] !text-neutral !no-underline rounded-md bg-primary-600 hover:!bg-primary-500 dark:bg-primary-800 dark:hover:!bg-primary-700"
|
||||
>
|
||||
Mudar layout ↻
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
|
||||
```shell
|
||||
npx blowfish-tools
|
||||
```
|
||||
|
||||
{{< youtubeLite id="SgXhGb-7QbU" label="Demo do Blowfish-tools" >}}
|
||||
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
---
|
||||
title: "Bem-vindo ao Blowfish! :tada:"
|
||||
description: "Esta página foi criada utilizando o tema Blowfish para Hugo."
|
||||
---
|
||||
|
||||
|
||||
<div class="flex px-4 py-2 mb-8 text-base rounded-md bg-primary-100 dark:bg-primary-900">
|
||||
<span class="flex items-center pe-3 text-primary-400">
|
||||
{{< icon "triangle-exclamation" >}}
|
||||
</span>
|
||||
<span class="flex items-center justify-between grow dark:text-neutral-300">
|
||||
<span class="prose dark:prose-invert">Esta é uma demonstração do layout <code id="layout">background</code>.</span>
|
||||
<button
|
||||
id="switch-layout-button"
|
||||
class="px-4 mx-[3px] !text-neutral !no-underline rounded-md bg-primary-600 hover:!bg-primary-500 dark:bg-primary-800 dark:hover:!bg-primary-700"
|
||||
>
|
||||
Mudar layout ↻
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
|
||||
```shell
|
||||
npx blowfish-tools
|
||||
```
|
||||
|
||||
{{< youtubeLite id="SgXhGb-7QbU" label="Demo do Blowfish-tools" >}}
|
||||
|
||||
|
||||
@@ -5,14 +5,14 @@ description: "此页面是使用 Hugo 的 Blowfish 主题搭建的"
|
||||
|
||||
|
||||
<div class="flex px-4 py-2 mb-8 text-base rounded-md bg-primary-100 dark:bg-primary-900">
|
||||
<span class="flex items-center ltr:pr-3 rtl:pl-3 text-primary-400">
|
||||
<span class="flex items-center pe-3 text-primary-400">
|
||||
{{< icon "triangle-exclamation" >}}
|
||||
</span>
|
||||
<span class="flex items-center justify-between grow dark:text-neutral-300">
|
||||
<span class="prose dark:prose-invert"> 这是 <code id="layout">background</code> 的样式示例。</span>
|
||||
<button
|
||||
id="switch-layout-button"
|
||||
class="px-4 !text-neutral !no-underline rounded-md bg-primary-600 hover:!bg-primary-500 dark:bg-primary-800 dark:hover:!bg-primary-700"
|
||||
class="px-4 mx-[3px] !text-neutral !no-underline rounded-md bg-primary-600 hover:!bg-primary-500 dark:bg-primary-800 dark:hover:!bg-primary-700"
|
||||
>
|
||||
切换 layout ↻
|
||||
</button>
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Nuno Coração"
|
||||
---
|
||||
|
||||
Nunos fantastische Beispielbiografie.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Nuno Coração"
|
||||
---
|
||||
|
||||
La increíble biografía ficticia de Nuno.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Nuno Coração"
|
||||
---
|
||||
|
||||
La super bio fictive de Nuno.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Nuno Coração"
|
||||
---
|
||||
|
||||
A incrível bio fictícia do Nuno.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Nuno Coração"
|
||||
---
|
||||
|
||||
A fantástica biografia fictícia do Nuno.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Dummy Second Author"
|
||||
---
|
||||
|
||||
Die fantastische Beispielbiografie des zweiten Beispielautors.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Dummy Second Author"
|
||||
---
|
||||
|
||||
La increíble biografía ficticia del segundo autor ficticio.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Dummy Second Author"
|
||||
---
|
||||
|
||||
La super bio fictive du deuxième auteur fictif.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Dummy Second Author"
|
||||
---
|
||||
|
||||
A incrível bio fictícia do segundo autor fictício.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Dummy Second Author"
|
||||
---
|
||||
|
||||
A fantástica biografia fictícia do segundo autor fictício.
|
||||