mirror of
https://github.com/nunocoracao/blowfish.git
synced 2026-10-11 06:19:31 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4afcd32b99 | ||
|
|
53528cb23f | ||
|
|
ec362e7de4 | ||
|
|
cecc88743d | ||
|
|
a220b9778c | ||
|
|
75d292e590 | ||
|
|
de0ed7c689 | ||
|
|
686dbb082a | ||
|
|
4201295501 | ||
|
|
1403422f60 | ||
|
|
e92cca185d | ||
|
|
6882d6fbb1 | ||
|
|
dac3e5a8a2 | ||
|
|
0b5726fdee | ||
|
|
50b5a49e85 | ||
|
|
117eded987 | ||
|
|
a5a41f9aa5 | ||
|
|
682447fca5 | ||
|
|
31e7ff8754 | ||
|
|
22fed8c1ca | ||
|
|
b50e0a5d12 | ||
|
|
201fb09360 | ||
|
|
da5216132a | ||
|
|
60cf2ea44e | ||
|
|
1fd5219f65 | ||
|
|
9768a2e6c4 | ||
|
|
ef081ffc68 | ||
|
|
a402aafee8 | ||
|
|
fe01814dd5 | ||
|
|
16c58f2c52 | ||
|
|
94cec19786 | ||
|
|
b102502c22 | ||
|
|
a734e5e320 | ||
|
|
2744192e68 | ||
|
|
58da587009 | ||
|
|
35a588221f | ||
|
|
0f060c2e64 | ||
|
|
17b8215782 | ||
|
|
88b4260105 | ||
|
|
c164484993 | ||
|
|
bf9d7ef2cb | ||
|
|
1f14448333 | ||
|
|
b67cdadb27 | ||
|
|
d85a0b243b | ||
|
|
7a3ace780f | ||
|
|
1cf811490c | ||
|
|
4bc35b656a | ||
|
|
bacf607405 | ||
|
|
7cd64e0c77 | ||
|
|
c6d1d04c9b | ||
|
|
af4808d9b7 | ||
|
|
d2196b6d7e | ||
|
|
3c0b3a5ebe | ||
|
|
694df4423e | ||
|
|
ea7d2da4c1 | ||
|
|
e72752168f | ||
|
|
4b3ff374a1 | ||
|
|
e8f44d4e8e | ||
|
|
2d36a64a6e | ||
|
|
8c6dfedb47 | ||
|
|
8263cb1813 | ||
|
|
3a9cc3a9a0 | ||
|
|
aa7af46e57 | ||
|
|
74c1af676d | ||
|
|
6d0f3bd69c | ||
|
|
6a22f960ec | ||
|
|
b3e27eb251 | ||
|
|
4026aee69c | ||
|
|
bdb41a342f | ||
|
|
fadadaf2cc | ||
|
|
f2b14a8463 | ||
|
|
4a2e182b32 | ||
|
|
4c074bc270 | ||
|
|
96a48bcd8b | ||
|
|
ae6a75d827 | ||
|
|
8278ad89fc | ||
|
|
f4fa7ebad5 | ||
|
|
5e81b943ed | ||
|
|
4f8e3e0b53 | ||
|
|
1e2bd11778 | ||
|
|
853bdd169f | ||
|
|
813fdecde0 | ||
|
|
845eecb314 | ||
|
|
e5d2ae8a7b | ||
|
|
58ab07f735 | ||
|
|
ba3b1f4192 | ||
|
|
bcfe2e3f7b | ||
|
|
d8986d6a99 | ||
|
|
ef8d204d1a | ||
|
|
3f5d19da40 | ||
|
|
6c0f1ef456 | ||
|
|
fb4d43776c | ||
|
|
4a45ab6c96 | ||
|
|
ef9e756ce5 | ||
|
|
3e1d31ca87 | ||
|
|
4feebf8acd | ||
|
|
f8cedfbcd8 | ||
|
|
e9a59654c9 | ||
|
|
c73459b634 | ||
|
|
864c8328ec | ||
|
|
ccbf3544d9 | ||
|
|
35c3462f3c | ||
|
|
2f108192ad | ||
|
|
eacda9fc35 | ||
|
|
bb8768c859 | ||
|
|
ee1aadc969 | ||
|
|
c0a7258d50 | ||
|
|
9aaf8f16c1 | ||
|
|
d00e49601a | ||
|
|
6c3e9761b9 | ||
|
|
1d61651817 | ||
|
|
6b11b81aec | ||
|
|
e9699d8c5d | ||
|
|
34b1f117fc | ||
|
|
6c7c4b6a9f | ||
|
|
a7fc9862e4 | ||
|
|
e0b8a49054 | ||
|
|
c4607f0a8f | ||
|
|
7d8b388bfb | ||
|
|
b5054889cb | ||
|
|
7b0904947d | ||
|
|
2c01906987 | ||
|
|
5342dd2128 | ||
|
|
b7d5f96bea | ||
|
|
f80473e761 | ||
|
|
6f6fba6d4d | ||
|
|
8671b01505 | ||
|
|
de2c627aac | ||
|
|
6d8a9b0712 | ||
|
|
62ffaac7ab | ||
|
|
64c437e67f | ||
|
|
6760c9de65 | ||
|
|
562db70231 | ||
|
|
ab9e81d586 | ||
|
|
56f66b633d | ||
|
|
d170cf3d96 | ||
|
|
26bbbbc288 | ||
|
|
5e144d4f11 | ||
|
|
86fd828353 | ||
|
|
a6ce29638a | ||
|
|
8b0691b632 | ||
|
|
863b64815c | ||
|
|
5df9ce4b32 | ||
|
|
598905a36b | ||
|
|
3a86a7656e | ||
|
|
e0e28b651a | ||
|
|
a9869a55a6 | ||
|
|
88863335fd | ||
|
|
6d33438e18 | ||
|
|
db9fb58bca | ||
|
|
baf74cca1a | ||
|
|
1eb3d8da3e | ||
|
|
dff1858ca5 | ||
|
|
ab5c7b7c97 | ||
|
|
350458a3c5 | ||
|
|
c7305a9727 | ||
|
|
75a6f741c8 | ||
|
|
c37d7fcd21 | ||
|
|
7c2545d598 | ||
|
|
2d37ecace0 | ||
|
|
8d28507fe9 | ||
|
|
1e5b7fde7e | ||
|
|
27cdc57bda | ||
|
|
8eff80bb12 | ||
|
|
cda04a5061 | ||
|
|
cc157244ba | ||
|
|
014eaa879c | ||
|
|
da8ca782aa | ||
|
|
f2e9eaa80f | ||
|
|
8eb1f330c5 | ||
|
|
44f787680b | ||
|
|
270a0a74d2 | ||
|
|
a57db858b4 | ||
|
|
2e195fc1e1 | ||
|
|
a666aa54b8 | ||
|
|
89e261f8e4 | ||
|
|
d35a493ba0 | ||
|
|
78341b1822 | ||
|
|
58e075717e | ||
|
|
137860d31a | ||
|
|
cee3e324fd | ||
|
|
2b83b517cc | ||
|
|
cc5cd8f11a | ||
|
|
c6d40c6d3f | ||
|
|
8fda75b134 | ||
|
|
965b0ac6ef | ||
|
|
08f6ccd618 | ||
|
|
3864f6f095 | ||
|
|
9ec0e6810a | ||
|
|
a132a9c5e6 | ||
|
|
0e8848d9c8 | ||
|
|
deffce8a02 | ||
|
|
e2dfae4a64 | ||
|
|
8aac2d7585 | ||
|
|
b9883c761d | ||
|
|
7b0fbea8ab | ||
|
|
4d6a84b041 | ||
|
|
0bc71ebe8d | ||
|
|
ae9b25b69c | ||
|
|
1475200ab4 | ||
|
|
f04dd3659a | ||
|
|
9986ed01ff | ||
|
|
16acbfee52 | ||
|
|
4b864d00e5 | ||
|
|
5a274629e4 | ||
|
|
e917645fba | ||
|
|
82aef982f1 | ||
|
|
cc91b648ec | ||
|
|
10314cff71 | ||
|
|
a7a04c6c5e | ||
|
|
c4bb9ab9b6 | ||
|
|
15299c15ab | ||
|
|
78fa726ebb | ||
|
|
b9ee790d5d | ||
|
|
ee2fc91522 | ||
|
|
9bcb7d37d3 | ||
|
|
d8685e5c9c | ||
|
|
8a9fe666e4 | ||
|
|
a95f11fe56 | ||
|
|
0b5a29e251 | ||
|
|
03615baf92 | ||
|
|
0e29ae9c52 | ||
|
|
ce0d91fcd5 | ||
|
|
a18688473e | ||
|
|
2d5718dd11 | ||
|
|
8779739162 | ||
|
|
cdcbc40d47 | ||
|
|
eb19b988ec | ||
|
|
ca6fe5f967 | ||
|
|
4996869378 | ||
|
|
b0e07a7c0d | ||
|
|
7fdb8ba1b1 | ||
|
|
03be92ad0f | ||
|
|
39adcba775 | ||
|
|
70861235ba | ||
|
|
3f4636afc1 | ||
|
|
26790a12e6 | ||
|
|
a6dc9b52e4 | ||
|
|
a308a86365 | ||
|
|
7691ee18ed | ||
|
|
830b36a9fa | ||
|
|
7ea30cb4f1 | ||
|
|
1f0b3672b5 | ||
|
|
1f0a84a24b | ||
|
|
877a2609e9 | ||
|
|
18ac5b1920 | ||
|
|
7c127074f9 | ||
|
|
e9b51aadcd | ||
|
|
c8d1b46316 | ||
|
|
bad5bf18ac | ||
|
|
ce60eab796 | ||
|
|
99224f248c | ||
|
|
d0b6ea29b4 | ||
|
|
34c82f38ca | ||
|
|
342b3451b3 | ||
|
|
58b9aee2d0 | ||
|
|
524a6869c3 | ||
|
|
b0c563bc15 | ||
|
|
cbc8cf12cd | ||
|
|
503f60fe75 | ||
|
|
167ee1fa4c | ||
|
|
859685f0c2 | ||
|
|
a0fc381ba9 | ||
|
|
ef712c33f9 | ||
|
|
e84fc0e1c6 | ||
|
|
79a78bcef4 | ||
|
|
cc94a0e6c8 | ||
|
|
ffa18c9c4f | ||
|
|
8549e06095 | ||
|
|
01d8db1e4d | ||
|
|
e71a4109cf | ||
|
|
6e70744e9a | ||
|
|
471ee57621 | ||
|
|
28a04921a7 | ||
|
|
5af20c6f9a | ||
|
|
2aa15ce844 | ||
|
|
c92c0aa3ce | ||
|
|
c9271d1df2 | ||
|
|
c08f0a9ffa | ||
|
|
d7c2d69571 | ||
|
|
122d5c70aa | ||
|
|
45c9acab9e | ||
|
|
bcdab29c30 | ||
|
|
1bec932730 | ||
|
|
217a143e6b | ||
|
|
faea1bb046 | ||
|
|
26b89169e3 | ||
|
|
878ba448aa | ||
|
|
87fe076689 | ||
|
|
0b14915f54 | ||
|
|
d8416ee104 | ||
|
|
4c7ef61265 | ||
|
|
b1d22fb30a | ||
|
|
a839c82416 | ||
|
|
4b5ff6ab59 | ||
|
|
e9350de407 | ||
|
|
a7731a15be | ||
|
|
c0fadfb0b7 | ||
|
|
7af7ed9720 | ||
|
|
ab6c812198 | ||
|
|
20c6de4eb8 | ||
|
|
3a912caf92 | ||
|
|
d049a3f020 | ||
|
|
0036fb8c02 | ||
|
|
e6c8e05040 | ||
|
|
22a9b643de | ||
|
|
2d5bf43ea3 | ||
|
|
8a1669e1f4 | ||
|
|
a132c61d0c | ||
|
|
3dea18a9cb | ||
|
|
4cc9899469 | ||
|
|
e4fdf17032 | ||
|
|
4fddd9d1eb | ||
|
|
ae27bba4e9 | ||
|
|
71fc6ee8b8 | ||
|
|
15c580ab86 | ||
|
|
1d7579f3b0 | ||
|
|
3bc2b4b82e | ||
|
|
9e0ad31ec8 | ||
|
|
1b6df4c166 | ||
|
|
34610228ad | ||
|
|
4705b55e09 | ||
|
|
7fed4fa2d1 | ||
|
|
6f99fefab3 | ||
|
|
c74017c987 | ||
|
|
641c16a150 | ||
|
|
be7f6b6f8f | ||
|
|
55f2f22849 | ||
|
|
812effc613 | ||
|
|
02a7397119 | ||
|
|
e35bcc0f24 | ||
|
|
f18c6a0564 | ||
|
|
e1e59f0009 | ||
|
|
6e96c55f0a | ||
|
|
de0645aa3d | ||
|
|
7e1ecd5480 | ||
|
|
1771c92213 | ||
|
|
350d669406 | ||
|
|
c747c623eb | ||
|
|
fef811f3a1 | ||
|
|
4b7677ea89 | ||
|
|
03b2f4502a | ||
|
|
5fb61dee19 | ||
|
|
15bf0ea12a | ||
|
|
6cbe52620f | ||
|
|
81da343120 | ||
|
|
8de5e47efd | ||
|
|
91098a0135 | ||
|
|
9ffb78e7df | ||
|
|
e1c13d658d | ||
|
|
7059f91d57 | ||
|
|
6076126e4c | ||
|
|
ebfe68673f | ||
|
|
774e2e05c1 | ||
|
|
9d7798faa4 | ||
|
|
8a2f58be77 | ||
|
|
b2ef80da49 | ||
|
|
43c32d207b | ||
|
|
47e08a5633 | ||
|
|
857dc8de99 | ||
|
|
19a4e5f5af | ||
|
|
bebff03d62 | ||
|
|
af75177900 | ||
|
|
b61ca7359f | ||
|
|
1b4de022c2 | ||
|
|
e30ea0a5c9 | ||
|
|
43da14b0b3 | ||
|
|
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 |
No files matched your search
@@ -5,7 +5,7 @@ version: 2
|
||||
updates:
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/"
|
||||
target-branch: "dev"
|
||||
target-branch: "main"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
day: "wednesday"
|
||||
@@ -15,7 +15,7 @@ updates:
|
||||
- "dependencies"
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
target-branch: "dev"
|
||||
target-branch: "main"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
day: "wednesday"
|
||||
|
||||
@@ -8,11 +8,11 @@ jobs:
|
||||
if: ${{ github.actor == 'dependabot[bot]' }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
uses: actions/checkout@v7
|
||||
with:
|
||||
ref: "${{ github.head_ref }}"
|
||||
- name: Install dependencies and Build Theme
|
||||
uses: actions/setup-node@v6
|
||||
uses: actions/setup-node@v7
|
||||
- run: npm install
|
||||
- run: npm run assets
|
||||
- name: Commit and push Chart.js changes
|
||||
|
||||
@@ -8,14 +8,14 @@ jobs:
|
||||
zip:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- uses: actions/checkout@v7
|
||||
- run: zip -r config-default.zip config/_default
|
||||
- uses: actions/upload-artifact@v6
|
||||
- uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: config-default
|
||||
path: config-default.zip
|
||||
- name: Upload to release
|
||||
uses: softprops/action-gh-release@v2
|
||||
uses: softprops/action-gh-release@v3
|
||||
with:
|
||||
files: config-default.zip
|
||||
tag_name: ${{ github.event.release.tag_name }}
|
||||
@@ -11,9 +11,9 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check out code into the Go module directory
|
||||
uses: actions/checkout@v6
|
||||
uses: actions/checkout@v7
|
||||
with:
|
||||
ref: dev
|
||||
ref: main
|
||||
submodules: true # Fetch Hugo themes (true OR recursive)
|
||||
fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod
|
||||
|
||||
@@ -51,4 +51,4 @@ jobs:
|
||||
[2]: https://github.com/peter-evans/create-pull-request
|
||||
labels: dependencies, automated pr
|
||||
branch: hugo-new-version
|
||||
base: dev
|
||||
base: main
|
||||
@@ -37,12 +37,12 @@ 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@v6
|
||||
uses: actions/checkout@v7
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Setup Pages
|
||||
id: pages
|
||||
uses: actions/configure-pages@v5
|
||||
uses: actions/configure-pages@v6
|
||||
- name: Build with Hugo
|
||||
env:
|
||||
# For maximum backward compatibility with Hugo modules
|
||||
@@ -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@v4
|
||||
uses: actions/upload-pages-artifact@v5
|
||||
with:
|
||||
path: ./docs
|
||||
|
||||
@@ -65,4 +65,4 @@ jobs:
|
||||
steps:
|
||||
- name: Deploy to GitHub Pages
|
||||
id: deployment
|
||||
uses: actions/deploy-pages@v4
|
||||
uses: actions/deploy-pages@v5
|
||||
@@ -32,3 +32,4 @@ jobs:
|
||||
days-before-close: 0
|
||||
remove-stale-when-updated: true
|
||||
operations-per-run: 100
|
||||
exempt-issue-labels: 'keep,security'
|
||||
@@ -10,13 +10,13 @@ jobs:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
uses: actions/checkout@v7
|
||||
with:
|
||||
submodules: true
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Setup Hugo
|
||||
uses: peaceiris/actions-hugo@v3.0.0
|
||||
uses: peaceiris/actions-hugo@v3.2.1
|
||||
with:
|
||||
hugo-version: "latest"
|
||||
|
||||
|
||||
+11
-1
@@ -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?
|
||||
@@ -31,4 +40,5 @@ node_modules
|
||||
.Trashes
|
||||
.idea
|
||||
.Ulysses-Group.plist
|
||||
.Ulysses-Settings.plist
|
||||
.Ulysses-Settings.plist
|
||||
.watchfire/
|
||||
@@ -6,7 +6,6 @@
|
||||
"trailingComma": "all",
|
||||
"proseWrap": "always",
|
||||
"plugins": [
|
||||
"@awmottaz/prettier-plugin-void-html",
|
||||
"prettier-plugin-go-template"
|
||||
],
|
||||
"overrides": [
|
||||
|
||||
Vendored
+56
-2
@@ -79,7 +79,14 @@
|
||||
"{{< /chart >}}"
|
||||
],
|
||||
"description": "Use the Chart.js library to embed charts into articles using simple structured data. Blowfish chart Shortcode. Documentation: https://blowfish.page/docs/shortcodes/#chart ",
|
||||
},
|
||||
},
|
||||
"email": {
|
||||
"prefix": ["BFS-email", "HSC-email", "email"],
|
||||
"body": [
|
||||
"{{< email email=\"mailto:${1:hello@test.com}\" text=\"${2:text}\" subject=\"${3:Reply to awesome article}\" >}}$0",
|
||||
],
|
||||
"description": "Creates an obfuscated mailto link. Documentation: https://blowfish.page/docs/shortcodes/#email ",
|
||||
},
|
||||
"figure": {
|
||||
"prefix": ["BFS-figure", "HSC-figure", "figure"],
|
||||
"body": [
|
||||
@@ -178,6 +185,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": [
|
||||
@@ -208,4 +262,4 @@
|
||||
"description": "Typewriter-Like text. Blowfish typeit Shortcode. Documentation: https://blowfish.page/docs/shortcodes/#typeit https://www.typeitjs.com/docs/vanilla/usage/ ",
|
||||
},
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
version: 1
|
||||
project_id: fafe4c77-495a-44fc-9eaf-8e38596cdc04
|
||||
name: blowfish
|
||||
status: active
|
||||
color: '#8b5cf6'
|
||||
default_agent: claude-code
|
||||
sandbox: auto
|
||||
auto_merge: true
|
||||
auto_delete_branch: true
|
||||
auto_start_tasks: true
|
||||
notifications:
|
||||
muted: false
|
||||
definition: |
|
||||
Blowfish is a powerful, lightweight Hugo theme built with Tailwind CSS.
|
||||
Repo: https://github.com/nunocoracao/blowfish · Demo & docs: https://blowfish.page/
|
||||
|
||||
Stack & layout:
|
||||
- Hugo theme (min Hugo 0.141.0). Templates in `layouts/`, partials in `layouts/partials/`, shortcodes in `layouts/shortcodes/`.
|
||||
- Tailwind CSS 4 via `@tailwindcss/cli` — source in `assets/css/main.css`, output in `assets/css/compiled/main.css`.
|
||||
- JS vendored from `node_modules/` into `assets/lib/` via `vendor-copy` (configured in `package.json` under `devVendorCopy`).
|
||||
- Localisation strings live in `i18n/`. All static text MUST go through `i18n` lookups, never hardcoded.
|
||||
- `exampleSite/` is the testbed. Run `npm run example` (or `:core` / `:production`) to preview locally.
|
||||
- `config/` holds default theme config; users override in their own site.
|
||||
|
||||
Coding conventions (from CONTRIBUTING.md):
|
||||
- 2-space indent. Spaces inside Go template tags: `{{< alert >}}` not `{{<alert>}}`.
|
||||
- Extract repeated template logic into partials.
|
||||
- Relative asset paths without leading slash; trailing slash for folders (e.g. `static/img/`).
|
||||
- Prettier config is included; respect it.
|
||||
|
||||
PR & commit rules (strict — enforced):
|
||||
- Single-purpose PRs only. Do NOT bundle unrelated changes (e.g. bug fix + version bump + new user entry). Mixed PRs get closed.
|
||||
- NO breaking changes unless strictly required by a dependency. Renaming partials, removing config options, or changing template signatures will be rejected — they silently break user customisations.
|
||||
- Commits: Gitmoji prefix, imperative mood ("Fix bug", not "Fixed"), ≤72-char summary, no trailing period. Reference issue numbers when relevant.
|
||||
- Commit incrementally rather than one giant commit.
|
||||
|
||||
Before marking a task done:
|
||||
- If templates/CSS/JS changed, run `npm run example` and verify in the browser. Type-checks alone don't validate Hugo theme behavior.
|
||||
- Check that any new user-facing string is wired through `i18n/` for all supported languages (or at least English with a clear note).
|
||||
- Don't bump `package.json` version or touch `release-versions/` as part of a feature/fix PR — those are released separately.
|
||||
created_at: 2026-05-04T23:12:29.75161Z
|
||||
updated_at: 2026-05-04T23:12:30.276795Z
|
||||
next_task_number: 1
|
||||
@@ -0,0 +1,33 @@
|
||||
# Secrets & Setup Instructions
|
||||
|
||||
Use this file to tell agents how to access external services and credentials
|
||||
for this project. Agents will read these instructions before starting work.
|
||||
|
||||
## Examples
|
||||
|
||||
### CLI Tools (already authenticated)
|
||||
```
|
||||
# Firebase — I'm already logged in via `firebase login`
|
||||
# Use `firebase use <project-id>` to switch projects
|
||||
|
||||
# AWS — credentials configured in default profile
|
||||
# Use `aws sts get-caller-identity` to verify access
|
||||
|
||||
# gcloud — authenticated via `gcloud auth login`
|
||||
```
|
||||
|
||||
### Environment Variables
|
||||
```
|
||||
# Set these before running the app:
|
||||
# export DATABASE_URL=<value>
|
||||
# export API_KEY=<value>
|
||||
```
|
||||
|
||||
### API Keys & Tokens
|
||||
```
|
||||
# Stripe test key: use the key in .env.local
|
||||
# OpenAI: use the org key from 1Password CLI (`op read ...`)
|
||||
```
|
||||
|
||||
---
|
||||
Delete this sample content and replace with your own instructions.
|
||||
+12
-1
@@ -1,6 +1,6 @@
|
||||
## How to contribute to Blowfish
|
||||
|
||||
All development occurs on the `dev` branch and new PRs should be forked from here.
|
||||
All development occurs on the `main` branch and new PRs should be forked from here.
|
||||
|
||||
### Bugs & other issues
|
||||
|
||||
@@ -31,6 +31,17 @@ All development occurs on the `dev` branch and new PRs should be forked from her
|
||||
- If you have a general question, these should be asked using [GitHub Discussions](https://github.com/nunocoracao/blowfish/discussions). Feel free to open a [new discussion](https://github.com/nunocoracao/blowfish/discussions/new) to ask your question using the "Q&A" category.
|
||||
- Be sure to check if your question has already been answered by searching [existing Q&A discussions](https://github.com/nunocoracao/blowfish/discussions/categories/q-a).
|
||||
|
||||
### Breaking changes
|
||||
|
||||
- We do not accept breaking changes unless they are strictly required to keep supporting the project (e.g. a dependency deprecating a feature we rely on).
|
||||
- Changes that would cause existing user customizations to silently stop working (such as renaming partial paths, removing config options, or changing template signatures) will be rejected.
|
||||
- If you're unsure whether your change is breaking, open a discussion first.
|
||||
|
||||
### Pull request guidelines
|
||||
|
||||
- Keep PRs focused on a single change. Do not bundle unrelated modifications (e.g. bug fix + version bump + new user entry) into the same PR.
|
||||
- PRs that mix multiple unrelated changes will be closed and the author will be asked to split them.
|
||||
|
||||
### Coding conventions
|
||||
|
||||
- Indent using 2 spaces (soft tabs).
|
||||
|
||||
+15
-3
@@ -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",
|
||||
]
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
[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/gohugoio/hugo/releases/tag/v0.158.0)
|
||||
[](https://github.com/nunocoracao/blowfish/blob/main/LICENSE)
|
||||
[](https://themes.gohugo.io/themes/blowfish/)
|
||||

|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
[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/gohugoio/hugo/releases/tag/v0.158.0)
|
||||
[](https://github.com/nunocoracao/blowfish/blob/main/LICENSE)
|
||||
[](https://themes.gohugo.io/themes/blowfish/)
|
||||

|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
[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/gohugoio/hugo/releases/tag/v0.158.0)
|
||||
[](https://github.com/nunocoracao/blowfish/blob/main/LICENSE)
|
||||
[](https://themes.gohugo.io/themes/blowfish/)
|
||||

|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
|
||||
# Blowfish
|
||||
[](https://app.netlify.com/sites/snazzy-dango-efb2ec/deploys)
|
||||
[](https://github.com/gohugoio/hugo/releases/tag/v0.141.0)
|
||||
[](https://github.com/gohugoio/hugo/releases/tag/v0.158.0)
|
||||
[](https://github.com/nunocoracao/blowfish/blob/main/LICENSE)
|
||||
[](https://themes.gohugo.io/themes/blowfish/)
|
||||

|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
[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.141.0)
|
||||
[](https://github.com/gohugoio/hugo/releases/tag/v0.158.0)
|
||||
[](https://github.com/nunocoracao/blowfish/blob/main/LICENSE)
|
||||
[](https://themes.gohugo.io/themes/blowfish/)
|
||||

|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
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.141.0)
|
||||
[](https://github.com/gohugoio/hugo/releases/tag/v0.158.0)
|
||||
[](https://github.com/nunocoracao/blowfish/blob/main/LICENSE)
|
||||
[](https://themes.gohugo.io/themes/blowfish/)
|
||||

|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
[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/gohugoio/hugo/releases/tag/v0.158.0)
|
||||
[](https://github.com/nunocoracao/blowfish/blob/main/LICENSE)
|
||||
[](https://themes.gohugo.io/themes/blowfish/)
|
||||

|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
[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/gohugoio/hugo/releases/tag/v0.158.0)
|
||||
[](https://github.com/nunocoracao/blowfish/blob/main/LICENSE)
|
||||
[](https://themes.gohugo.io/themes/blowfish/)
|
||||

|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
[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.141.0)
|
||||
[](https://github.com/gohugoio/hugo/releases/tag/v0.158.0)
|
||||
[](https://github.com/nunocoracao/blowfish/blob/main/LICENSE)
|
||||
[](https://themes.gohugo.io/themes/blowfish/)
|
||||

|
||||
|
||||
+1405
-1788
File diff suppressed because it is too large.
Load diff
@@ -68,50 +68,50 @@
|
||||
|
||||
html.dark {
|
||||
/* GitHub Core Types (5) */
|
||||
--adm-note-bg: color-mix(in srgb, theme("colors.sky.900 / 0.4"), black 15%);
|
||||
--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.900 / 0.4"), black 15%);
|
||||
--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.900 / 0.4"), black 15%);
|
||||
--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.900 / 0.4"), black 15%);
|
||||
--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.900 / 0.4"), black 15%);
|
||||
--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.900 / 0.4"), black 15%);
|
||||
--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.900 / 0.4"), black 15%);
|
||||
--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.900 / 0.4"), black 15%);
|
||||
--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.900 / 0.4"), black 15%);
|
||||
--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.900 / 0.4"), black 15%);
|
||||
--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.900 / 0.4"), black 15%);
|
||||
--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.900 / 0.4"), black 15%);
|
||||
--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.900 / 0.4"), black 15%);
|
||||
--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.900 / 0.4"), black 15%);
|
||||
--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 / 0.4"), black 15%);
|
||||
--adm-todo-bg: color-mix(in srgb, theme("colors.sky.800"), #0f0f0f 50%);
|
||||
--adm-todo-text: theme("colors.sky.100");
|
||||
}
|
||||
|
||||
|
||||
@@ -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,51 @@
|
||||
.gist-container .gist {
|
||||
h1 {
|
||||
margin-bottom: calc(var(--spacing) * 4);
|
||||
}
|
||||
.gist-file {
|
||||
border: 1px solid rgb(var(--color-neutral-300));
|
||||
border-radius: 8px;
|
||||
overflow: hidden;
|
||||
}
|
||||
.gist-meta {
|
||||
background-color: white;
|
||||
color: rgb(var(--color-neutral-600));
|
||||
border-radius: 0 0 8px 8px;
|
||||
}
|
||||
.gist-meta a {
|
||||
color: rgb(var(--color-primary-600));
|
||||
}
|
||||
.highlight tr {
|
||||
border-bottom: none;
|
||||
}
|
||||
.gist-file .file {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
/* Dark Mode */
|
||||
.dark & {
|
||||
.gist-file {
|
||||
border-color: rgb(var(--color-neutral-800));
|
||||
}
|
||||
.gist-data {
|
||||
background-color: rgb(var(--color-neutral-900));
|
||||
border-bottom: 1px solid rgb(var(--color-neutral-800));
|
||||
}
|
||||
.gist-meta {
|
||||
background-color: rgb(26, 26, 26);
|
||||
color: rgb(var(--color-neutral-400));
|
||||
}
|
||||
.gist-meta a {
|
||||
color: rgb(var(--color-primary-400));
|
||||
}
|
||||
.blob-wrapper {
|
||||
filter: invert(0.9) hue-rotate(180deg);
|
||||
background-color: #fff;
|
||||
}
|
||||
.gist-data {
|
||||
background: rgb(26, 26, 26);
|
||||
color: rgb(var(--color-neutral-100));
|
||||
}
|
||||
}
|
||||
}
|
||||
+43
-3
@@ -6,6 +6,7 @@
|
||||
@import "./components/chroma.css" layer(utilities);
|
||||
@import "./components/tabs.css" layer(utilities);
|
||||
@import "./components/zen-mode.css";
|
||||
@import "./components/gist.css";
|
||||
@import "./components/a11y.css";
|
||||
@import "./components/admonition.css" layer(components);
|
||||
|
||||
@@ -182,11 +183,13 @@ pre {
|
||||
|
||||
.thumbnail_card {
|
||||
min-width: 300px;
|
||||
height: 200px;
|
||||
aspect-ratio: var(--thumbnail-aspect-ratio, 1.5);
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.thumbnail_card_related {
|
||||
height: 150px;
|
||||
aspect-ratio: var(--thumbnail-aspect-ratio, 1.5);
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.thumbnail {
|
||||
@@ -265,7 +268,44 @@ pre {
|
||||
}
|
||||
|
||||
.bf-scrollbar {
|
||||
@apply scrollbar-thin scrollbar-track-neutral-200 scrollbar-thumb-neutral-400 dark:scrollbar-track-neutral-800 dark:scrollbar-thumb-neutral-600;
|
||||
&::-webkit-scrollbar-track {
|
||||
background-color: var(--scrollbar-track);
|
||||
border-radius: var(--scrollbar-track-radius);
|
||||
}
|
||||
&::-webkit-scrollbar-thumb {
|
||||
background-color: var(--scrollbar-thumb);
|
||||
border-radius: var(--scrollbar-thumb-radius);
|
||||
}
|
||||
&::-webkit-scrollbar-corner {
|
||||
background-color: var(--scrollbar-corner);
|
||||
border-radius: var(--scrollbar-corner-radius);
|
||||
}
|
||||
@supports (-moz-appearance:none) {
|
||||
scrollbar-width: thin;
|
||||
scrollbar-color: var(--scrollbar-thumb, initial) var(--scrollbar-track, initial);
|
||||
}
|
||||
&::-webkit-scrollbar {
|
||||
display: block;
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
}
|
||||
--scrollbar-thumb: oklch(70.8% 0 0);
|
||||
--scrollbar-track: oklch(92.2% 0 0);
|
||||
&:is(.dark *) {
|
||||
--scrollbar-thumb: oklch(43.9% 0 0);
|
||||
}
|
||||
&:is(.dark *) {
|
||||
--scrollbar-track: oklch(26.9% 0 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@layer base {
|
||||
* {
|
||||
@supports (-moz-appearance:none) {
|
||||
scrollbar-color: initial;
|
||||
scrollbar-width: initial;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg fill="currentColor" viewBox="0 0 24 24" role="img" xmlns="http://www.w3.org/2000/svg"><path d="M10.617 11.473l4.686 3.695-3.102-7.662zM12 0C5.371 0 0 5.371 0 12s5.371 12 12 12 12-5.371 12-12S18.629 0 12 0zm5.797 17.305c-.011.471-.403.842-.875.83-.236 0-.416-.09-.664-.293l-6.19-5-2.079 5.203H6.191L11.438 5.44c.124-.314.427-.52.764-.506.326-.014.63.189.742.506l4.774 11.494c.045.111.08.234.08.348-.001.009-.001.009-.001.023z"/></svg>
|
||||
|
After Width: | Height: | Size: 478 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 25 35"><path fill="currentColor" d="m0 35 12.172-7L0 21ZM12.172 0 0 7l12.172 7v14l12.172-7V7Z"></path></svg>
|
||||
|
After Width: | Height: | Size: 162 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><path fill="currentColor" d="M158.4 0L7 292h89.2l62.2-116.1L220.1 292h88.5zm150.2 292l-43.9 88.2-44.6-88.2h-67.6l112.2 220 111.5-220z"/></svg>
|
||||
|
After Width: | Height: | Size: 205 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M401.3 49.9c-79.8 160.1-84.6 152.5-87.9 173.2l-5.2 32.8c-1.9 12-6.6 23.5-13.7 33.4L145.6 497.1c-7.6 10.6-20.4 16.2-33.4 14.6-40.3-5-77.8-32.2-95.3-68.5-5.7-11.8-4.5-25.8 3.1-36.4l148.9-207.9c7.1-9.9 16.4-18 27.2-23.7l29.3-15.5c18.5-9.8 9.7-11.9 135.6-138.9 1-4.8 1-7.3 3.6-8 3-.7 6.6-1 6.3-4.6l-.4-4.6c-.2-1.9 1.3-3.6 3.2-3.6 4.5-.1 13.2 1.2 25.6 10 12.3 8.9 16.4 16.8 17.7 21.1.6 1.8-.6 3.7-2.4 4.2l-4.5 1.1c-3.4.9-2.5 4.4-2.3 7.4.1 2.8-2.3 3.6-6.5 6.1zM230.1 36.4c3.4.9 2.5 4.4 2.3 7.4-.2 2.7 2.1 3.5 6.4 6 7.9 15.9 15.3 30.5 22.2 44 .7 1.3 2.3 1.5 3.3.5 11.2-12 24.6-26.2 40.5-42.6 1.3-1.4 1.4-3.5.1-4.9-8-8.2-16.5-16.9-25.6-26.1-1-4.7-1-7.3-3.6-8-3-.8-6.6-1-6.3-4.6.3-3.3 1.4-8.1-2.8-8.2-4.5-.1-13.2 1.1-25.6 10-12.3 8.9-16.4 16.8-17.7 21.1-1.4 4.2 3.6 4.6 6.8 5.4zM620 406.7L471.2 198.8c-13.2-18.5-26.6-23.4-56.4-39.1-11.2-5.9-14.2-10.9-30.5-28.9-1-1.1-2.9-.9-3.6.5-46.3 88.8-47.1 82.8-49 94.8-1.7 10.7-1.3 20 .3 29.8 1.9 12 6.6 23.5 13.7 33.4l148.9 207.9c7.6 10.6 20.2 16.2 33.1 14.7 40.3-4.9 78-32 95.7-68.6 5.4-11.9 4.3-25.9-3.4-36.6z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -54,12 +54,33 @@ window.addEventListener("DOMContentLoaded", (event) => {
|
||||
const switcher = document.getElementById("appearance-switcher");
|
||||
const switcherMobile = document.getElementById("appearance-switcher-mobile");
|
||||
|
||||
// Load the i18n translations for the tooltips
|
||||
const darkLabel = '{{ i18n "footer.dark_appearance" }}';
|
||||
const lightLabel = '{{ i18n "footer.light_appearance" }}';
|
||||
|
||||
updateMeta();
|
||||
this.updateLogo?.(getTargetAppearance());
|
||||
|
||||
// Initialize mermaid theme on page load
|
||||
updateMermaidTheme();
|
||||
|
||||
// Helper to update the tooltip depending on the current mode
|
||||
const updateTooltip = (targetAppearance) => {
|
||||
// If target is dark, the next action will be switching to light
|
||||
const label = targetAppearance === "dark" ? lightLabel : darkLabel;
|
||||
if (switcher) {
|
||||
switcher.setAttribute("aria-label", label);
|
||||
switcher.setAttribute("title", label);
|
||||
}
|
||||
if (switcherMobile) {
|
||||
switcherMobile.setAttribute("aria-label", label);
|
||||
switcherMobile.setAttribute("title", label);
|
||||
}
|
||||
};
|
||||
|
||||
// Set initial tooltip on load
|
||||
updateTooltip(getTargetAppearance());
|
||||
|
||||
if (switcher) {
|
||||
switcher.addEventListener("click", () => {
|
||||
document.documentElement.classList.toggle("dark");
|
||||
@@ -70,6 +91,7 @@ window.addEventListener("DOMContentLoaded", (event) => {
|
||||
);
|
||||
updateMeta();
|
||||
updateMermaidTheme();
|
||||
updateTooltip(targetAppearance);
|
||||
this.updateLogo?.(targetAppearance);
|
||||
});
|
||||
switcher.addEventListener("contextmenu", (event) => {
|
||||
@@ -87,6 +109,7 @@ window.addEventListener("DOMContentLoaded", (event) => {
|
||||
);
|
||||
updateMeta();
|
||||
updateMermaidTheme();
|
||||
updateTooltip(targetAppearance);
|
||||
this.updateLogo?.(targetAppearance);
|
||||
});
|
||||
switcherMobile.addEventListener("contextmenu", (event) => {
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
document.getElementById("button_likes") &&
|
||||
document.getElementById("button_likes").addEventListener("click", () => {
|
||||
process_article();
|
||||
});
|
||||
@@ -0,0 +1,13 @@
|
||||
(function () {
|
||||
const links = document.querySelectorAll(".email-link");
|
||||
links.forEach((link) => {
|
||||
let email = atob(link.getAttribute("data-email"));
|
||||
const subject = link.getAttribute("data-subject");
|
||||
let mailto = email.startsWith("mailto:") ? email : "mailto:" + email;
|
||||
|
||||
if (subject) {
|
||||
mailto += (mailto.includes("?") ? "&" : "?") + "subject=" + encodeURIComponent(subject);
|
||||
}
|
||||
link.href = mailto;
|
||||
});
|
||||
})();
|
||||
@@ -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);
|
||||
@@ -0,0 +1,319 @@
|
||||
(function () {
|
||||
var config = window.BlowfishLanguageRedirectConfig;
|
||||
|
||||
if (!config || config.enabled !== true) {
|
||||
return;
|
||||
}
|
||||
|
||||
function getStorage() {
|
||||
if (!config.storageKey) {
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
return window.localStorage;
|
||||
} catch (error) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
var storage = getStorage();
|
||||
|
||||
function normalizeLanguageTag(value) {
|
||||
if (typeof value !== "string") {
|
||||
return "";
|
||||
}
|
||||
|
||||
return value.trim().toLowerCase().replace(/_/g, "-");
|
||||
}
|
||||
|
||||
function getBaseLanguage(value) {
|
||||
var languageTag = normalizeLanguageTag(value);
|
||||
|
||||
if (!languageTag) {
|
||||
return "";
|
||||
}
|
||||
|
||||
return languageTag.split("-")[0];
|
||||
}
|
||||
|
||||
function getTranslationTags(translation) {
|
||||
if (!translation) {
|
||||
return [];
|
||||
}
|
||||
|
||||
var tags = [];
|
||||
var values = [translation.lang, translation.languageCode];
|
||||
|
||||
for (var i = 0; i < values.length; i += 1) {
|
||||
var languageTag = normalizeLanguageTag(values[i]);
|
||||
|
||||
if (languageTag && tags.indexOf(languageTag) === -1) {
|
||||
tags.push(languageTag);
|
||||
}
|
||||
}
|
||||
|
||||
return tags;
|
||||
}
|
||||
|
||||
function getCanonicalTranslationTag(translation) {
|
||||
var tags = getTranslationTags(translation);
|
||||
|
||||
if (!tags.length) {
|
||||
return "";
|
||||
}
|
||||
|
||||
return tags.reduce(function (bestTag, languageTag) {
|
||||
if (languageTag.split("-").length > bestTag.split("-").length) {
|
||||
return languageTag;
|
||||
}
|
||||
|
||||
return bestTag;
|
||||
}, tags[0]);
|
||||
}
|
||||
|
||||
function translationHasTag(translation, languageTag) {
|
||||
var normalizedTag = normalizeLanguageTag(languageTag);
|
||||
|
||||
if (!normalizedTag) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return getTranslationTags(translation).indexOf(normalizedTag) !== -1;
|
||||
}
|
||||
|
||||
function getAvailableTranslations() {
|
||||
if (!Array.isArray(config.translations)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
return config.translations.filter(function (translation) {
|
||||
return translation && translation.url && getTranslationTags(translation).length > 0;
|
||||
});
|
||||
}
|
||||
|
||||
var translations = getAvailableTranslations();
|
||||
|
||||
function findExactTranslation(languageTag) {
|
||||
var normalizedTag = normalizeLanguageTag(languageTag);
|
||||
|
||||
if (!normalizedTag) {
|
||||
return null;
|
||||
}
|
||||
|
||||
for (var i = 0; i < translations.length; i += 1) {
|
||||
if (translationHasTag(translations[i], normalizedTag)) {
|
||||
return translations[i];
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
function findBaseTranslation(languageTag) {
|
||||
var baseLanguage = getBaseLanguage(languageTag);
|
||||
|
||||
if (!baseLanguage) {
|
||||
return null;
|
||||
}
|
||||
|
||||
for (var i = 0; i < translations.length; i += 1) {
|
||||
var tags = getTranslationTags(translations[i]);
|
||||
|
||||
for (var j = 0; j < tags.length; j += 1) {
|
||||
if (getBaseLanguage(tags[j]) === baseLanguage) {
|
||||
return translations[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
function findBestTranslation(languageTag) {
|
||||
var normalizedTag = normalizeLanguageTag(languageTag);
|
||||
|
||||
if (!normalizedTag) {
|
||||
return null;
|
||||
}
|
||||
|
||||
while (normalizedTag) {
|
||||
var translation = findExactTranslation(normalizedTag);
|
||||
|
||||
if (translation) {
|
||||
return translation;
|
||||
}
|
||||
|
||||
var lastSubtagIndex = normalizedTag.lastIndexOf("-");
|
||||
|
||||
if (lastSubtagIndex === -1) {
|
||||
break;
|
||||
}
|
||||
|
||||
normalizedTag = normalizedTag.slice(0, lastSubtagIndex);
|
||||
}
|
||||
|
||||
return findBaseTranslation(languageTag);
|
||||
}
|
||||
|
||||
function getStoredLanguage() {
|
||||
if (!storage || config.storedLanguageRedirect !== true) {
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
return storage.getItem(config.storageKey);
|
||||
} catch (error) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
function setStoredLanguage(language) {
|
||||
if (!storage) {
|
||||
return;
|
||||
}
|
||||
|
||||
var languageTag = normalizeLanguageTag(language);
|
||||
|
||||
if (!languageTag) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
storage.setItem(config.storageKey, languageTag);
|
||||
} catch (error) {
|
||||
// Ignore storage errors so the language link keeps its normal behavior.
|
||||
}
|
||||
}
|
||||
|
||||
function getBrowserTranslation() {
|
||||
var languages = [];
|
||||
|
||||
if (Array.isArray(navigator.languages)) {
|
||||
languages = languages.concat(navigator.languages);
|
||||
}
|
||||
|
||||
if (navigator.language) {
|
||||
languages.push(navigator.language);
|
||||
}
|
||||
|
||||
for (var i = 0; i < languages.length; i += 1) {
|
||||
var translation = findBestTranslation(languages[i]);
|
||||
|
||||
if (translation) {
|
||||
return translation;
|
||||
}
|
||||
}
|
||||
|
||||
if (config.fallbackLanguage) {
|
||||
return findBestTranslation(config.fallbackLanguage);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
function normalizePath(pathname) {
|
||||
if (pathname.length > 1 && pathname.charAt(pathname.length - 1) === "/") {
|
||||
return pathname.slice(0, -1);
|
||||
}
|
||||
|
||||
return pathname;
|
||||
}
|
||||
|
||||
function getUrl(value) {
|
||||
try {
|
||||
return new URL(value, window.location.origin);
|
||||
} catch (error) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
function redirectToTranslation(translation) {
|
||||
if (!translation || !translation.url) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var currentLanguage = getCanonicalTranslationTag({
|
||||
lang: config.currentLanguage,
|
||||
languageCode: config.currentLanguageCode
|
||||
});
|
||||
var targetLanguage = getCanonicalTranslationTag(translation);
|
||||
|
||||
if (currentLanguage && targetLanguage && currentLanguage === targetLanguage) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var targetUrl = getUrl(translation.url);
|
||||
|
||||
if (!targetUrl || normalizePath(targetUrl.pathname) === normalizePath(window.location.pathname)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
window.location.replace(targetUrl.href);
|
||||
return true;
|
||||
}
|
||||
|
||||
function redirectToLanguage(language) {
|
||||
return redirectToTranslation(findBestTranslation(language));
|
||||
}
|
||||
|
||||
function findTranslationByUrl(url) {
|
||||
var linkUrl = getUrl(url);
|
||||
|
||||
if (!linkUrl) {
|
||||
return null;
|
||||
}
|
||||
|
||||
for (var i = 0; i < translations.length; i += 1) {
|
||||
var translationUrl = getUrl(translations[i].url);
|
||||
|
||||
if (translationUrl && normalizePath(translationUrl.pathname) === normalizePath(linkUrl.pathname)) {
|
||||
return translations[i];
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
function bindLanguageSwitcher() {
|
||||
document.addEventListener("click", function (event) {
|
||||
if (!event.target || !event.target.closest) {
|
||||
return;
|
||||
}
|
||||
|
||||
var link = event.target.closest(".translation a[href]");
|
||||
|
||||
if (!link) {
|
||||
return;
|
||||
}
|
||||
|
||||
var translation = findTranslationByUrl(link.href);
|
||||
|
||||
if (translation) {
|
||||
setStoredLanguage(getCanonicalTranslationTag(translation));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function maybeRedirect() {
|
||||
var storedLanguage = getStoredLanguage();
|
||||
|
||||
if (storedLanguage) {
|
||||
redirectToLanguage(storedLanguage);
|
||||
return;
|
||||
}
|
||||
|
||||
if (config.browserRedirectHomeOnly === true && config.isHome !== true) {
|
||||
return;
|
||||
}
|
||||
|
||||
var browserTranslation = getBrowserTranslation();
|
||||
|
||||
if (browserTranslation) {
|
||||
redirectToTranslation(browserTranslation);
|
||||
}
|
||||
}
|
||||
|
||||
bindLanguageSwitcher();
|
||||
maybeRedirect();
|
||||
})();
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
});
|
||||
}
|
||||
+7
-1
@@ -151,6 +151,12 @@ function buildIndex() {
|
||||
}
|
||||
|
||||
function executeQuery(term) {
|
||||
if (!indexed) {
|
||||
buildIndex();
|
||||
}
|
||||
if (!fuse) {
|
||||
return;
|
||||
}
|
||||
let results = fuse.search(term);
|
||||
let resultsHTML = "";
|
||||
|
||||
@@ -193,7 +199,7 @@ function executeQuery(term) {
|
||||
}
|
||||
|
||||
output.innerHTML = resultsHTML;
|
||||
if (results.length > 0) {
|
||||
if (results.length > 0 && output.firstChild) {
|
||||
first = output.firstChild.firstElementChild;
|
||||
last = output.lastChild.firstElementChild;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
});
|
||||
})();
|
||||
@@ -5,7 +5,25 @@ function initTabs() {
|
||||
|
||||
const container = button.closest(".tab__container");
|
||||
const tabIndex = parseInt(button.dataset.tabIndex);
|
||||
activateTab(container, 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);
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
/**
|
||||
* Fuse.js v7.5.0 - Lightweight fuzzy-search (http://fusejs.io)
|
||||
*
|
||||
* Copyright (c) 2026 Kiro Risk (http://kiro.me)
|
||||
* All Rights Reserved. Apache Software License 2.0
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
function e(e){return Array.isArray?Array.isArray(e):u(e)===`[object Array]`}function t(e){if(typeof e==`string`)return e;if(typeof e==`bigint`)return e.toString();let t=e+``;return t==`0`&&1/e==-1/0?`-0`:t}function n(e){return e==null?``:t(e)}function r(e){return typeof e==`string`}function i(e){return typeof e==`number`}function a(e){return e===!0||e===!1||s(e)&&u(e)==`[object Boolean]`}function o(e){return typeof e==`object`}function s(e){return o(e)&&e!==null}function c(e){return e!=null}function l(e){return!e.trim().length}function u(e){return e==null?e===void 0?`[object Undefined]`:`[object Null]`:Object.prototype.toString.call(e)}const d=`Invalid doc index: must be a non-negative integer within the bounds of the docs array`,f=e=>`Invalid value for key ${e}`,p=e=>`Pattern length exceeds max of ${e}.`,m=e=>`Missing ${e} property in key`,h=e=>`Property 'weight' in key '${e}' must be a positive integer`,g=Object.prototype.hasOwnProperty;var _=class{constructor(e){this._keys=[],this._keyMap={};let t=0;e.forEach(e=>{let n=v(e);this._keys.push(n),this._keyMap[n.id]=n,t+=n.weight}),this._keys.forEach(e=>{e.weight/=t})}get(e){return this._keyMap[e]}keys(){return this._keys}toJSON(){return JSON.stringify(this._keys)}};function v(t){let n=null,i=null,a=null,o=1,s=null;if(r(t)||e(t))a=t,n=y(t),i=b(t);else{if(!g.call(t,`name`))throw Error(m(`name`));let e=t.name;if(a=e,g.call(t,`weight`)&&t.weight!==void 0&&(o=t.weight,o<=0))throw Error(h(b(e)));n=y(e),i=b(e),s=t.getFn??null}return{path:n,id:i,weight:o,src:a,getFn:s}}function y(t){return e(t)?t:t.split(`.`)}function b(t){return e(t)?t.join(`.`):t}function x(t,o){let s=[],l=!1,u=(t,o,d,f)=>{if(c(t))if(!o[d])s.push(f===void 0?t:{v:t,i:f});else{let p=t[o[d]];if(!c(p))return;if(d===o.length-1&&(r(p)||i(p)||a(p)||typeof p==`bigint`))s.push(f===void 0?n(p):{v:n(p),i:f});else if(e(p)){l=!0;for(let e=0,t=p.length;e<t;e+=1)u(p[e],o,d+1,e)}else o.length&&u(p,o,d+1,f)}};return u(t,r(o)?o.split(`.`):o,0),l?s:s[0]}const S={includeMatches:!1,findAllMatches:!1,minMatchCharLength:1},C={isCaseSensitive:!1,ignoreDiacritics:!1,includeScore:!1,keys:[],shouldSort:!0,sortFn:(e,t)=>e.score===t.score?e.idx<t.idx?-1:1:e.score<t.score?-1:1},w={location:0,threshold:.6,distance:100},T={useExtendedSearch:!1,useTokenSearch:!1,tokenize:void 0,tokenMatch:`any`,getFn:x,ignoreLocation:!1,ignoreFieldNorm:!1,fieldNormWeight:1},E=Object.freeze({...C,...S,...w,...T});function D(e){return e>=9&&e<=13||e===32||e===160}function O(e=1,t=3){let n=new Map,r=10**t;return{get(t){let i=0,a=!1;for(let e=0;e<t.length;e++)D(t.charCodeAt(e))?a=!1:a||(i++,a=!0);if(i===0&&(i=1),n.has(i))return n.get(i);let o=Math.round(r/i**(.5*e))/r;return n.set(i,o),o},clear(){n.clear()}}}var k=class{constructor({getFn:e=E.getFn,fieldNormWeight:t=E.fieldNormWeight}={}){this.norm=O(t,3),this.getFn=e,this.isCreated=!1,this.docs=[],this.keys=[],this._keysMap={},this.setIndexRecords()}setSources(e=[]){this.docs=e}setIndexRecords(e=[]){this.records=e}setKeys(e=[]){this.keys=e,this._keysMap={},e.forEach((e,t)=>{this._keysMap[e.id]=t})}create(){if(this.isCreated||!this.docs.length)return;this.isCreated=!0;let e=this.docs.length;this.records=Array(e);let t=0;if(r(this.docs[0]))for(let n=0;n<e;n++){let e=this._createStringRecord(this.docs[n],n);e&&(this.records[t++]=e)}else for(let n=0;n<e;n++)this.records[t++]=this._createObjectRecord(this.docs[n],n);this.records.length=t,this.norm.clear()}add(e,t){if(!Number.isInteger(t)||t<0)throw Error(d);if(r(e)){let n=this._createStringRecord(e,t);return n&&this.records.push(n),n}let n=this._createObjectRecord(e,t);return this.records.push(n),n}removeAt(e){if(!Number.isInteger(e)||e<0)throw Error(d);for(let t=0,n=this.records.length;t<n;t+=1)if(this.records[t].i===e){this.records.splice(t,1);break}for(let t=0,n=this.records.length;t<n;t+=1)this.records[t].i>e&&--this.records[t].i}removeAll(e){let t=new Set;for(let n of e)Number.isInteger(n)&&n>=0&&t.add(n);if(t.size===0)return;this.records=this.records.filter(e=>!t.has(e.i));let n=Array.from(t).sort((e,t)=>e-t);for(let e of this.records){let t=0,r=n.length;for(;t<r;){let i=t+r>>>1;n[i]<e.i?t=i+1:r=i}e.i-=t}}getValueForItemAtKeyId(e,t){return e[this._keysMap[t]]}size(){return this.records.length}_createStringRecord(e,t){return!c(e)||l(e)?null:{v:e,i:t,n:this.norm.get(e)}}_createObjectRecord(t,i){let a={i,$:{}};for(let i=0,o=this.keys.length;i<o;i++){let o=this.keys[i],s=o.getFn?o.getFn(t):this.getFn(t,o.path);if(c(s)){if(e(s)){let e=[];for(let t=0,i=s.length;t<i;t+=1){let i=s[t];if(c(i)){if(r(i)){if(!l(i)){let n={v:i,i:t,n:this.norm.get(i)};e.push(n)}}else if(c(i.v)){let t=r(i.v)?i.v:n(i.v);if(!l(t)){let n={v:t,i:i.i,n:this.norm.get(t)};e.push(n)}}}}a.$[i]=e}else if(r(s)&&!l(s)){let e={v:s,n:this.norm.get(s)};a.$[i]=e}}}return a}toJSON(){return{keys:this.keys.map(({getFn:e,...t})=>t),records:this.records}}};function A(e,t,{getFn:n=E.getFn,fieldNormWeight:r=E.fieldNormWeight}={}){let i=new k({getFn:n,fieldNormWeight:r});return i.setKeys(e.map(v)),i.seLine truncated
|
||||
Vendored
-9
@@ -1,9 +0,0 @@
|
||||
/**
|
||||
* Fuse.js v7.1.0 - Lightweight fuzzy-search (http://fusejs.io)
|
||||
*
|
||||
* Copyright (c) 2025 Kiro Risk (http://kiro.me)
|
||||
* All Rights Reserved. Apache Software License 2.0
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
var e,t;e=this,t=function(){"use strict";function e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function t(t){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{};n%2?e(Object(r),!0).forEach((function(e){o(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):e(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,v(r.key),r)}}function u(e,t,n){return t&&i(e.prototype,t),n&&i(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function o(e,t,n){return(t=v(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&s(e,t)}function a(e){return a=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},a(e)}function s(e,t){return s=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},s(e,t)}function h(e,t){if(t&&("object"==typeof t||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function l(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=a(e);if(t){var i=a(this).constructor;n=Reflect.construct(r,arguments,i)}else n=r.apply(this,arguments);return h(this,n)}}function f(e){return function(e){if(Array.isArray(e))return d(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return d(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function v(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}function g(e){return Array.isArray?Array.isArray(e):"[object Array]"===M(e)}var y=1/0;function p(e){return null==e?"":function(e){if("string"==typeof e)return e;var t=e+"";return"0"==t&&1/e==-y?"-0":t}(e)}function A(e){return"string"==typeof e}function m(e){return"number"==typeof e}function C(e){return!0===e||!1===e||function(e){return k(e)&&null!==e}(e)&&"[object Boolean]"==M(e)}function k(e){return"object"===n(e)}function E(e){return null!=e}function F(e){return!e.trim().length}function M(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":Object.prototype.toString.call(e)}var b=function(e){return"Missing ".concat(e," property in key")},D=function(e){return"Property 'weight' in key '".concat(e,"' must be a positive integer")},B=Object.prototype.hasOwnProperty,x=function(){function e(t){var n=this;r(this,e),this._keys=[],this._keyMap={};var i=0;t.forEach((function(e){var t=w(e);n._keys.push(t),n._keyMap[t.id]=t,i+=t.weight})),this._keys.forEach((function(e){e.weight/=i}))}return u(e,[{key:"get",value:function(e){return this._keyMap[e]}},{key:"keys",value:function(){return this._keys}},{key:"toJSON",value:function(){return JSON.stringify(this._keys)}}]),e}();function w(e){var t=null,n=null,r=null,i=1,u=null;if(A(e)||g(e))r=e,t=S(e),n=L(e);else{if(!B.call(e,"name"))throw new ErLine truncated
|
||||
Vendored
-2
@@ -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
|
||||
Vendored
+1
-1
@@ -1 +1 @@
|
||||
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("katex")):"function"==typeof define&&define.amd?define(["katex"],t):"object"==typeof exports?exports.renderMathInElement=t(require("katex")):e.renderMathInElement=t(e.katex)}("undefined"!=typeof self?self:this,(function(e){return function(){"use strict";var t={757:function(t){t.exports=e}},n={};function r(e){var o=n[e];if(void 0!==o)return o.exports;var i=n[e]={exports:{}};return t[e](i,i.exports,r),i.exports}r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,{a:t}),t},r.d=function(e,t){for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};var o={};r.d(o,{default:function(){return p}});var i=r(757),a=r.n(i);const l=function(e,t,n){let r=n,o=0;const i=e.length;for(;r<t.length;){const n=t[r];if(o<=0&&t.slice(r,r+i)===e)return r;"\\"===n?r++:"{"===n?o++:"}"===n&&o--,r++}return-1},s=/^\\begin{/;var d=function(e,t){let n;const r=[],o=new RegExp("("+t.map((e=>e.left.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"))).join("|")+")");for(;n=e.search(o),-1!==n;){n>0&&(r.push({type:"text",data:e.slice(0,n)}),e=e.slice(n));const o=t.findIndex((t=>e.startsWith(t.left)));if(n=l(t[o].right,e,t[o].left.length),-1===n)break;const i=e.slice(0,n+t[o].right.length),a=s.test(i)?i:e.slice(t[o].left.length,n);r.push({type:"math",data:a,rawData:i,display:t[o].display}),e=e.slice(n+t[o].right.length)}return""!==e&&r.push({type:"text",data:e}),r};const c=function(e,t){const n=d(e,t.delimiters);if(1===n.length&&"text"===n[0].type)return null;const r=document.createDocumentFragment();for(let e=0;e<n.length;e++)if("text"===n[e].type)r.appendChild(document.createTextNode(n[e].data));else{const o=document.createElement("span");let i=n[e].data;t.displayMode=n[e].display;try{t.preProcess&&(i=t.preProcess(i)),a().render(i,o,t)}catch(o){if(!(o instanceof a().ParseError))throw o;t.errorCallback("KaTeX auto-render: Failed to parse `"+n[e].data+"` with ",o),r.appendChild(document.createTextNode(n[e].rawData));continue}r.appendChild(o)}return r},f=function(e,t){for(let n=0;n<e.childNodes.length;n++){const r=e.childNodes[n];if(3===r.nodeType){let o=r.textContent,i=r.nextSibling,a=0;for(;i&&i.nodeType===Node.TEXT_NODE;)o+=i.textContent,i=i.nextSibling,a++;const l=c(o,t);if(l){for(let e=0;e<a;e++)r.nextSibling.remove();n+=l.childNodes.length-1,e.replaceChild(l,r)}else n+=a}else if(1===r.nodeType){const e=" "+r.className+" ";-1===t.ignoredTags.indexOf(r.nodeName.toLowerCase())&&t.ignoredClasses.every((t=>-1===e.indexOf(" "+t+" ")))&&f(r,t)}}};var p=function(e,t){if(!e)throw new Error("No element provided to render");const n={};for(const e in t)t.hasOwnProperty(e)&&(n[e]=t[e]);n.delimiters=n.delimiters||[{left:"$$",right:"$$",display:!0},{left:"\\(",right:"\\)",display:!1},{left:"\\begin{equation}",right:"\\end{equation}",display:!0},{left:"\\begin{align}",right:"\\end{align}",display:!0},{left:"\\begin{alignat}",right:"\\end{alignat}",display:!0},{left:"\\begin{gather}",right:"\\end{gather}",display:!0},{left:"\\begin{CD}",right:"\\end{CD}",display:!0},{left:"\\[",right:"\\]",display:!0}],n.ignoredTags=n.ignoredTags||["script","noscript","style","textarea","pre","code","option"],n.ignoredClasses=n.ignoredClasses||[],n.errorCallback=n.errorCallback||console.error,n.macros=n.macros||{},f(e,n)};return o=o.default}()}));
|
||||
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("katex")):"function"==typeof define&&define.amd?define(["katex"],t):"object"==typeof exports?exports.renderMathInElement=t(require("katex")):e.renderMathInElement=t(e.katex)}("undefined"!=typeof self?self:this,function(e){return function(){"use strict";var t={757:function(t){t.exports=e}},n={};function r(e){var o=n[e];if(void 0!==o)return o.exports;var i=n[e]={exports:{}};return t[e](i,i.exports,r),i.exports}r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,{a:t}),t},r.d=function(e,t){for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};var o={};r.d(o,{default:function(){return p}});var i=r(757),a=r.n(i);const l=function(e,t,n){let r=n,o=0;const i=e.length;for(;r<t.length;){const n=t[r];if(o<=0&&t.slice(r,r+i)===e)return r;"\\"===n?r++:"{"===n?o++:"}"===n&&o--,r++}return-1},s=/^\\begin{/;var d=function(e,t){let n;const r=[],o=new RegExp("("+t.map(e=>e.left.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&")).join("|")+")");for(;n=e.search(o),-1!==n;){n>0&&(r.push({type:"text",data:e.slice(0,n)}),e=e.slice(n));const o=t.findIndex(t=>e.startsWith(t.left));if(n=l(t[o].right,e,t[o].left.length),-1===n)break;const i=e.slice(0,n+t[o].right.length),a=s.test(i)?i:e.slice(t[o].left.length,n);r.push({type:"math",data:a,rawData:i,display:t[o].display}),e=e.slice(n+t[o].right.length)}return""!==e&&r.push({type:"text",data:e}),r};const c=function(e,t){const n=d(e,t.delimiters);if(1===n.length&&"text"===n[0].type)return null;const r=document.createDocumentFragment();for(let e=0;e<n.length;e++)if("text"===n[e].type)r.appendChild(document.createTextNode(n[e].data));else{const o=document.createElement("span");let i=n[e].data;t.displayMode=n[e].display;try{t.preProcess&&(i=t.preProcess(i)),a().render(i,o,t)}catch(o){if(!(o instanceof a().ParseError))throw o;t.errorCallback("KaTeX auto-render: Failed to parse `"+n[e].data+"` with ",o),r.appendChild(document.createTextNode(n[e].rawData));continue}r.appendChild(o)}return r},f=function(e,t){for(let o=0;o<e.childNodes.length;o++){const i=e.childNodes[o];if(3===i.nodeType){var n;let a=null!=(n=i.textContent)?n:"",l=i.nextSibling,s=0;for(;l&&l.nodeType===Node.TEXT_NODE;){var r;a+=null!=(r=l.textContent)?r:"",l=l.nextSibling,s++}const d=c(a,t);if(d){for(let e=0;e<s;e++)i.nextSibling.remove();o+=d.childNodes.length-1,e.replaceChild(d,i)}else o+=s}else if(1===i.nodeType){const e=" "+i.className+" ";!t.ignoredTags.has(i.nodeName.toLowerCase())&&t.ignoredClasses.every(t=>!e.includes(" "+t+" "))&&f(i,t)}}};var p=function(e,t){if(!e)throw new Error("No element provided to render");const n={};Object.assign(n,t),n.delimiters=n.delimiters||[{left:"$$",right:"$$",display:!0},{left:"\\(",right:"\\)",display:!1},{left:"\\begin{equation}",right:"\\end{equation}",display:!0},{left:"\\begin{align}",right:"\\end{align}",display:!0},{left:"\\begin{alignat}",right:"\\end{alignat}",display:!0},{left:"\\begin{gather}",right:"\\end{gather}",display:!0},{left:"\\begin{CD}",right:"\\end{CD}",display:!0},{left:"\\[",right:"\\]",display:!0}],n.ignoredTags=new Set((null==t?void 0:t.ignoredTags)||["script","noscript","style","textarea","pre","code","option"]),n.ignoredClasses=n.ignoredClasses||[],n.errorCallback=n.errorCallback||console.error,n.macros=n.macros||{},f(e,n)};return o=o.default}()});
|
||||
Vendored
+1
-1
@@ -1 +1 @@
|
||||
@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
|
||||
@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
|
||||
Vendored
+1
-1
@@ -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={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
|
||||
!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 mo}});class r extends Error{constructor(e,t){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,l;r=n>15?"\u2026"+e.slice(n-15,n):e.slice(0,n),l=o+15<e.length?e.slice(o,o+15)+"\u2026":e.slice(o),s+=r+t+l}super(s),this.name="ParseError",this.position=void 0,this.length=void 0,this.rawMessage=void 0,Object.setPrototypeOf(this,r.prototype),this.position=n,null!=n&&null!=o&&(this.length=o-n),this.rawMessage=e}}var n=r;const o=/([A-Z])/g,s=e=>e.replace(o,"-$1").toLowerCase(),i={"&":"&",">":">","<":"<",'"':""","'":"'"},l=/[&><"']/g,a=e=>String(e).replace(l,e=>i[e]),c=e=>"ordgroup"===e.type||"color"===e.type?1===e.body.length?c(e.body[0]):e:"font"===e.type?c(e.body):e,h=new Set(["mathord","textord","atom"]),m=e=>h.has(c(e).type),u={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 p(e){if(void 0!==e.default)return e.default;return function(e){if("string"!=typeof e)return e.enum[0];switch(e){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{};default:throw new Error("Unexpected schema type; settings must declare an explicit default.")}}(Array.isArray(e.type)?e.type[0]:e.type)}function d(e,t,r,n){const o=r[t];e[t]=void 0!==o?n.processor?n.processor(o):o:p(n)}class g{constructor(e){void 0===e&&(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.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,e=e||{};for(const t of Object.keys(u))Line truncated
|
||||
Vendored
+1675
-899
File diff suppressed because it is too large.
Load diff
+2
-2
@@ -1,5 +1,5 @@
|
||||
[module]
|
||||
[module.hugoVersion]
|
||||
extended = true
|
||||
min = "0.141.0"
|
||||
max = "0.154.1"
|
||||
min = "0.158.0"
|
||||
max = "0.164.0"
|
||||
@@ -1,6 +1,6 @@
|
||||
disabled = false
|
||||
languageCode = "en"
|
||||
languageName = "English"
|
||||
locale = "en"
|
||||
label = "English"
|
||||
weight = 1
|
||||
title = "Blowfish"
|
||||
|
||||
@@ -62,15 +62,18 @@ title = "Blowfish"
|
||||
# { spotify = "https://open.spotify.com/user/userid" },
|
||||
# { stack-overflow = "https://stackoverflow.com/users/userid/username" },
|
||||
# { steam = "https://steamcommunity.com/profiles/userid" },
|
||||
# { strava = "https://www.strava.com/athletes/username" },
|
||||
# { telegram = "https://t.me/username" },
|
||||
# { threads = "https://www.threads.net/@username" },
|
||||
# { tiktok = "https://tiktok.com/@username" },
|
||||
# { tumblr = "https://username.tumblr.com" },
|
||||
# { twitch = "https://twitch.tv/username" },
|
||||
# { untappd = "https://untappd.com/user/username" },
|
||||
# { twitter = "https://twitter.com/username" },
|
||||
# { x-twitter = "https://twitter.com/username" },
|
||||
# { whatsapp = "https://wa.me/phone-number" },
|
||||
# { youtube = "https://youtube.com/username" },
|
||||
# { ko-fi = "https://ko-fi.com/username" },
|
||||
# { codeberg = "https://codeberg.org/username"},
|
||||
# { printables = "https://www.printables.com/@username"},
|
||||
# ]
|
||||
@@ -29,6 +29,8 @@ disableTextInHeader = false
|
||||
# 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
|
||||
# Thumbnail aspect ratio as a number (e.g., "1.5", "1.0", "1.777")
|
||||
# thumbnailAspectRatio = "1.5"
|
||||
# imagePosition = "50% 50%"
|
||||
|
||||
# highlightCurrentMenuArea = true
|
||||
@@ -40,6 +42,16 @@ fingerprintAlgorithm = "sha512" # Valid values are "sha512" (default), "sha384",
|
||||
giteaDefaultServer = "https://git.fsfe.org"
|
||||
forgejoDefaultServer = "https://v11.next.forgejo.org"
|
||||
|
||||
[languageRedirect]
|
||||
enabled = false # Enable client-side language redirects for multilingual sites.
|
||||
storageKey = "blowfish_preferred_language" # localStorage key for manual language selections.
|
||||
# fallbackLanguage = "" # Language to use when no browser language matches. Defaults to Hugo's default content language.
|
||||
browserRedirectHomeOnly = true # Restrict browser-language redirects to home pages.
|
||||
storedLanguageRedirect = true # Redirect to the stored language when a matching translation exists.
|
||||
|
||||
[seo]
|
||||
# metaDescriptionOrder = ["summary", "description", "site"] # Controls the fallback order for the HTML meta description. Valid values are "summary", "description", and "site".
|
||||
|
||||
[header]
|
||||
layout = "basic" # valid options: basic, fixed, fixed-fill, fixed-gradient, fixed-fill-blur
|
||||
|
||||
@@ -87,12 +99,15 @@ forgejoDefaultServer = "https://v11.next.forgejo.org"
|
||||
showTableOfContents = false
|
||||
# showRelatedContent = false
|
||||
# relatedContentLimit = 3
|
||||
showTaxonomies = false # use showTaxonomies OR showCategoryOnly, not both
|
||||
showCategoryOnly = false # use showTaxonomies OR showCategoryOnly, not both
|
||||
showTaxonomies = false # Enable the display of taxonomies for the related article.
|
||||
showCategories = true # These will show if showTaxonomies is true.
|
||||
showTags = true # These will show if showTaxonomies is true.
|
||||
showCategoriesInSecondaryColor = false # This will change the color of category badges, so the user can better distinguish between the two. Only if showTaxonomies is true.
|
||||
showAuthorsBadges = false
|
||||
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
|
||||
@@ -118,6 +133,8 @@ forgejoDefaultServer = "https://v11.next.forgejo.org"
|
||||
showTermCount = true
|
||||
showHero = false
|
||||
# heroStyle = "background" # valid options: basic, big, background, thumbAndBackground
|
||||
layoutBackgroundBlur = true # only used when heroStyle equals background or thumbAndBackground
|
||||
layoutBackgroundHeaderSpace = true # only used when heroStyle equals background
|
||||
showBreadcrumbs = false
|
||||
showViews = false
|
||||
showLikes = false
|
||||
@@ -127,6 +144,8 @@ forgejoDefaultServer = "https://v11.next.forgejo.org"
|
||||
[term]
|
||||
showHero = false
|
||||
# heroStyle = "background" # valid options: basic, big, background, thumbAndBackground
|
||||
layoutBackgroundBlur = true # only used when heroStyle equals background or thumbAndBackground
|
||||
layoutBackgroundHeaderSpace = true # only used when heroStyle equals background
|
||||
showBreadcrumbs = false
|
||||
showViews = false
|
||||
showLikes = false
|
||||
|
||||
+569
-305
File diff suppressed because it is too large.
Load diff
+1
-1
@@ -52,6 +52,6 @@
|
||||
"mastodon": {
|
||||
"icon": "mastodon",
|
||||
"title": "sharing.mastodon",
|
||||
"url": "https://s2f.kytta.dev/?text=%[2]s %[1]s"
|
||||
"url": "https://share.joinmastodon.org/#text=%[2]s %[1]s"
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -1 +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/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?u=dfc0b44e86fa09e96605ec9c7775f4f98df90a20\u0026v=4\u0026s=128","profile_url":"https://github.com/ytocquet","username":"ytocquet"},{"avatar_url":"https://avatars.githubusercontent.com/u/147227691?v=4\u0026s=128","profile_url":"https://github.com/AtmosphericIgnition","username":"AtmosphericIgnition"}]
|
||||
@@ -1,5 +1,5 @@
|
||||
languageCode = "de"
|
||||
languageName = "Deutsch"
|
||||
locale = "de"
|
||||
label = "Deutsch"
|
||||
weight = 3
|
||||
title = "Blowfish"
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
languageCode = "en"
|
||||
languageName = "English"
|
||||
locale = "en"
|
||||
label = "English"
|
||||
weight = 1
|
||||
title = "Blowfish"
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
languageCode = "es"
|
||||
languageName = "Español"
|
||||
locale = "es"
|
||||
label = "Español"
|
||||
weight = 6
|
||||
title = "Blowfish"
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
languageCode = "fr"
|
||||
languageName = "Français"
|
||||
locale = "fr"
|
||||
label = "Français"
|
||||
weight = 2
|
||||
title = "Blowfish"
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
languageCode = "it"
|
||||
languageName = "Italiano"
|
||||
locale = "it"
|
||||
label = "Italiano"
|
||||
weight = 4
|
||||
title = "Blowfish"
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
languageCode = "ja"
|
||||
languageName = "日本語"
|
||||
locale = "ja"
|
||||
label = "日本語"
|
||||
weight = 8
|
||||
title = "Blowfish"
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
languageCode = "pt-br"
|
||||
languageName = "Português (Brasil)"
|
||||
locale = "pt-br"
|
||||
label = "Português (Brasil)"
|
||||
weight = 6
|
||||
title = "Blowfish"
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
languageCode = "pt-pt"
|
||||
languageName = "Português (Portugal)"
|
||||
locale = "pt-pt"
|
||||
label = "Português (Portugal)"
|
||||
weight = 5
|
||||
title = "Blowfish"
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
languageCode = "zh-cn"
|
||||
languageName = "简体中文"
|
||||
locale = "zh-cn"
|
||||
label = "简体中文"
|
||||
weight = 9
|
||||
title = "Blowfish"
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@ fingerprintAlgorithm = "sha512" # Valid values are "sha512" (default), "sha384",
|
||||
|
||||
[article]
|
||||
showDate = false
|
||||
showViews = false
|
||||
showViews = true
|
||||
showLikes = false
|
||||
showDateOnlyInArticle = false
|
||||
showDateUpdated = false
|
||||
@@ -134,13 +134,13 @@ fingerprintAlgorithm = "sha512" # Valid values are "sha512" (default), "sha384",
|
||||
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"
|
||||
|
||||
@@ -115,8 +115,8 @@ Il file predefinito può essere utilizzato come modello per creare lingue aggiun
|
||||
<!-- prettier-ignore-start -->
|
||||
| Name | Default | Description |
|
||||
| --- | --- | --- |
|
||||
| `languageCode` | `"en"` | Il codice della lingua Hugo per questo file. Può essere una lingua di livello superiore (ad esempio "en") o una variante secondaria (ad esempio "en-au") e deve corrispondere al codice della lingua nel nome del file. Hugo si aspetta che questo valore sia sempre in minuscolo. Per una corretta conformità HTML, imposta il parametro "isoCode" che fa distinzione tra maiuscole e minuscole. |
|
||||
| `languageName` | `"English"` | Il nome della lingua. |
|
||||
| `locale` | `"en"` | Il codice della lingua Hugo per questo file. Può essere una lingua di livello superiore (ad esempio "en") o una variante secondaria (ad esempio "en-au") e deve corrispondere al codice della lingua nel nome del file. Hugo si aspetta che questo valore sia sempre in minuscolo. Per una corretta conformità HTML, imposta il parametro "isoCode" che fa distinzione tra maiuscole e minuscole. |
|
||||
| `label` | `"English"` | Il nome della lingua. |
|
||||
| `weight` | `1` | Il peso determina l'ordine delle lingue durante la creazione di siti multilingue. |
|
||||
| `title` | `"Blowfish"` | Il titolo del sito web. Questo verrà visualizzato nell'intestazione e nel piè di pagina del sito. |
|
||||
<!-- prettier-ignore-end -->
|
||||
@@ -258,6 +258,7 @@ Many of the article defaults here can be overridden on a per article basis by sp
|
||||
| `article.showComments` | `false` | Whether or not the [comments partial]({{< ref "partials#comments" >}}) is included after the article footer. |
|
||||
| `article.sharingLinks` | _Not set_ | Which sharing links to display at the end of each article. When not provided, or set to `false` no links will be displayed. Available values are: "bluesky", "email", "facebook", "line", "linkedin", "mastodon", "pinterest", "reddit", "telegram", "twitter", and "whatsapp" |
|
||||
| `article.showZenMode` | `false` | Flag to activate Zen Mode reading feature for articles. |
|
||||
| `article.externalLinkForceNewTab` | `true` | Flag per aprire i link esterni nel markdown in una nuova scheda. |
|
||||
|
||||
### List
|
||||
|
||||
|
||||
@@ -114,8 +114,8 @@ Blowfish は多言語ウェブサイト向けに最適化されており、テ
|
||||
<!-- prettier-ignore-start -->
|
||||
| 名前 | デフォルト | 説明 |
|
||||
| --- | --- | --- |
|
||||
| `languageCode` | `"en"` | このファイルの Hugo 言語コードです。トップレベル言語(例: `en`)またはサブバリアント(例: `en-au`)にすることができ、ファイル名の言語コードと一致する必要があります。Hugo はこの値が常に小文字であることを想定しています。適切な HTML 準拠のために、大文字と小文字を区別する `isoCode` パラメータを設定します。 |
|
||||
| `languageName` | `"English"` | 言語の名前です。 |
|
||||
| `locale` | `"en"` | このファイルの Hugo 言語コードです。トップレベル言語(例: `en`)またはサブバリアント(例: `en-au`)にすることができ、ファイル名の言語コードと一致する必要があります。Hugo はこの値が常に小文字であることを想定しています。適切な HTML 準拠のために、大文字と小文字を区別する `isoCode` パラメータを設定します。 |
|
||||
| `label` | `"English"` | 言語の名前です。 |
|
||||
| `weight` | `1` | 重みは、多言語サイトを構築するときの言語の順序を決定します。 |
|
||||
| `title` | `"Blowfish"` | ウェブサイトのタイトルです。これは、サイトのヘッダーとフッターに表示されます。 |
|
||||
<!-- prettier-ignore-end -->
|
||||
@@ -258,6 +258,7 @@ Blowfish は、テーマの機能を制御する多数の設定パラメータ
|
||||
| `article.showComments` | `false` | 記事のフッターの後に [コメントパーシャル]({{< ref "partials#コメント" >}}) を含めるかどうかです。 |
|
||||
| `article.sharingLinks` | _未設定_ | 各記事の最後に表示する共有リンクです。指定されていないか、`false` に設定されている場合、リンクは表示されません。使用可能な値は、"bluesky"、"email"、"facebook"、"line"、"linkedin"、"mastodon"、"pinterest"、"reddit"、"telegram"、"twitter"、"whatsapp"です。 |
|
||||
| `article.showZenMode` | `false` | 記事のZenモードリーダー機能を有効にするフラグです。 |
|
||||
| `article.externalLinkForceNewTab` | `true` | マークダウン内の外部リンクを新しいタブで開くかどうかです。 |
|
||||
|
||||
### リスト(List)
|
||||
|
||||
|
||||
@@ -67,6 +67,7 @@ The theme currently supports the following languages by default:
|
||||
| Language | Code |
|
||||
| ---------------------------- | ------- |
|
||||
| Arabic | `ar` |
|
||||
| Basque | `eu` |
|
||||
| Bulgarian | `bg` |
|
||||
| Bengali | `bn` |
|
||||
| Catalan | `ca` |
|
||||
@@ -115,8 +116,8 @@ The default file can be used as a template to create additional languages, or re
|
||||
<!-- prettier-ignore-start -->
|
||||
| Name | Default | Description |
|
||||
| --- | --- | --- |
|
||||
| `languageCode` | `"en"` | The Hugo language code for this file. It can be a top-level language (ie. `en`) or a sub-variant (ie. `en-au`) and should match the language code in the filename. Hugo expects this value to always be in lowercase. For proper HTML compliance, set the `isoCode` parameter which is case-sensitive. |
|
||||
| `languageName` | `"English"` | The name of the language. |
|
||||
| `locale` | `"en"` | The Hugo language code for this file. It can be a top-level language (ie. `en`) or a sub-variant (ie. `en-au`) and should match the language code in the filename. Hugo expects this value to always be in lowercase. For proper HTML compliance, set the `isoCode` parameter which is case-sensitive. |
|
||||
| `label` | `"English"` | The name of the language. |
|
||||
| `weight` | `1` | The weight determines the order of languages when building multilingual sites. |
|
||||
| `title` | `"Blowfish"` | The title of the website. This will be displayed in the site header and footer. |
|
||||
<!-- prettier-ignore-end -->
|
||||
@@ -150,6 +151,21 @@ The default file can be used as a template to create additional languages, or re
|
||||
| `params.author.links` | _Not set_ | The links to display alongside the author's details. The config file contains example links which can simply be uncommented to enable. The order that the links are displayed is determined by the order they appear in the array. Custom links can be added by providing corresponding SVG icon assets in `assets/icons/`. |
|
||||
<!-- prettier-ignore-end -->
|
||||
|
||||
### Client-side language redirect
|
||||
|
||||
Blowfish can optionally redirect visitors to a matching translated page entirely in the browser. The feature is disabled by default, requires no server-side component, and uses `localStorage` instead of cookies to remember language choices made through the existing language dropdown.
|
||||
|
||||
When enabled, the browser-language redirect runs only on home pages by default. If none of the visitor's browser languages match an available translation, Blowfish can redirect to `fallbackLanguage` when that translation exists. If `fallbackLanguage` is not set, Blowfish uses Hugo's default content language. A language chosen manually from the dropdown is stored and preferred on later visits when the current page has a matching translated URL.
|
||||
|
||||
```toml
|
||||
[languageRedirect]
|
||||
enabled = false
|
||||
storageKey = "blowfish_preferred_language"
|
||||
# fallbackLanguage = "en"
|
||||
browserRedirectHomeOnly = true
|
||||
storedLanguageRedirect = true
|
||||
```
|
||||
|
||||
### Menus
|
||||
|
||||
Blowfish also supports language-specific menu configurations. Menu config files follow the same naming format as the languages file. Simply provide the language code in the file name to tell Hugo which language the file relates to.
|
||||
@@ -185,6 +201,7 @@ Many of the article defaults here can be overridden on a per article basis by sp
|
||||
| `showViews` | _Not set_ | Whether or not articles and list views are displayed. This requires firebase integrations to be enabled, look below. |
|
||||
| `showLikes` | _Not set_ | Whether or not articles and list likes are displayed. This requires firebase integrations to be enabled, look below. |
|
||||
| `robots` | _Not set_ | String that indicates how robots should handle your site. If set, it will be output in the page head. Refer to [Google's docs](https://developers.google.com/search/docs/advanced/robots/robots_meta_tag#directives) for valid values. |
|
||||
| `seo.metaDescriptionOrder` | `["summary", "description", "site"]` | Controls the fallback order for the HTML meta description. Valid values are `summary`, `description`, and `site`. Use `["description", "summary", "site"]` if you want front matter `description` to take precedence over `summary`. |
|
||||
| `disableImageZoom` | `false` | Disables image zoom feature across all the images in the site. |
|
||||
| `disableImageOptimization` | `false` | Disables image resize and optimization features across all the images in the site, except images using markdown syntax (``) |
|
||||
| `disableImageOptimizationMD` | `false` | Disables image resize and optimization features only for images using markdown syntax (``). |
|
||||
@@ -199,6 +216,11 @@ Many of the article defaults here can be overridden on a per article basis by sp
|
||||
| `smartTOC` | _Not set_ | Activate smart Table of Contents, items in view will be highlighted. |
|
||||
| `smartTOCHideUnfocusedChildren` | _Not set_ | When smart Table of Contents is turned on, this will hide deeper levels of the table when they are not in focus. |
|
||||
| `fingerprintAlgorithm` | `"sha512"` | Hash algorithm for CSS/JS file fingerprinting to prevent browser caching issues. Valid values are `sha512` (default), `sha384`, `sha256`. |
|
||||
| `languageRedirect.enabled` | `false` | Enables client-side language redirects for multilingual sites. Disabled by default for backwards compatibility. |
|
||||
| `languageRedirect.storageKey` | `"blowfish_preferred_language"` | The `localStorage` key used to persist manual language dropdown selections. |
|
||||
| `languageRedirect.fallbackLanguage` | Hugo's default content language | Language to redirect to when no browser language matches and that language has a translation for the current page. |
|
||||
| `languageRedirect.browserRedirectHomeOnly` | `true` | Restricts browser-language redirects to home pages to avoid surprising visitors who open deep links. |
|
||||
| `languageRedirect.storedLanguageRedirect` | `true` | Allows a stored manual language selection to redirect translated pages when a matching translation exists. |
|
||||
|
||||
### Header
|
||||
|
||||
@@ -244,8 +266,8 @@ Many of the article defaults here can be overridden on a per article basis by sp
|
||||
| `article.showAuthorBottom` | `false` | Author boxes are displayed at the bottom of each page instead of the top. |
|
||||
| `article.showHero` | `false` | Whether the thumbnail image will be shown as a hero image within each article page. |
|
||||
| `article.heroStyle` | _Not set_ | Style to display the hero image, valid options are: `basic`, `big`, `background`, `thumbAndBackground`. Effective only if `article.showHero = true`. |
|
||||
| `article.layoutBackgroundBlur` | `true` | Makes the background image in the background article heroStyle blur with the scroll |
|
||||
| `article.layoutBackgroundHeaderSpace` | `true` | Add space between the header and the body. |
|
||||
| `article.layoutBackgroundBlur` | `true` | Makes the background image in the background article heroStyle blur with the scroll. Only used when `heroStyle` equals `background` or `thumbAndBackground`. |
|
||||
| `article.layoutBackgroundHeaderSpace` | `true` | Add space between the header and the body. Only used when `heroStyle` equals `background`. |
|
||||
| `article.showBreadcrumbs` | `false` | Whether or not breadcrumbs are displayed in the article header. |
|
||||
| `article.showDraftLabel` | `true` | Whether or not the draft indicator is shown next to articles when site is built with `--buildDrafts`. |
|
||||
| `article.showEdit` | `false` | Whether or not the link to edit the article content should be displayed. |
|
||||
@@ -260,12 +282,15 @@ Many of the article defaults here can be overridden on a per article basis by sp
|
||||
| `article.showRelatedContent` | `false` | Display related content for each post. Might required additional configuration to your `hugo.toml`. Please check the theme `hugo.toml` if you want to enable this feature and copy all the relevant _related_ entries. Also check [Hugo's docs](https://gohugo.io/content-management/related/) on related content. |
|
||||
| `article.relatedContentLimit` | `3` | Limit of related articles to display if `showRelatedContent` is turned on. |
|
||||
| `article.showTaxonomies` | `false` | Whether or not all the taxonomies related to this article are displayed. |
|
||||
| `article.showCategoryOnly` | `false` | Whether or not the "category" taxonomy is displayed. `showTaxonomies` should be `false` when this param is used, otherwise duplicates will appear. |
|
||||
| `article.showCategories` | `true` | Whether or not the `category` taxonomies are displayed. Requires `showTaxonomies` to be `true`. |
|
||||
| `article.showTags` | `true` | Whether or not the `tag` taxonomies are displayed. Requires `showTaxonomies` to be `true`. |
|
||||
| `article.showCategoriesInSecondaryColor` | `false` | This will make the `category` taxonomy badges to show in a secondary color, so the user can better distinguish between categories and tags. Requires `showTaxonomies` to be `true`. |
|
||||
| `article.showAuthorsBadges` | `false` | Whether the `authors` taxonomies are are displayed in the article or list header. This requires the setup of `multiple authors` and the `authors` taxonomy. Check [this page]({{< ref "multi-author" >}}) for more details on how to configure that feature. |
|
||||
| `article.showWordCount` | `false` | Whether or not article word counts are displayed. |
|
||||
| `article.showComments` | `false` | Whether or not the [comments partial]({{< ref "partials#comments" >}}) is included after the article footer. |
|
||||
| `article.sharingLinks` | _Not set_ | Which sharing links to display at the end of each article. When not provided, or set to `false` no links will be displayed. Available values are: "bluesky", "email", "facebook", "line", "linkedin", "mastodon", "pinterest", "reddit", "telegram", "twitter", and "whatsapp" |
|
||||
| `article.showZenMode` | `false` | Flag to activate Zen Mode reading feature for articles. |
|
||||
| `article.externalLinkForceNewTab` | `true` | Should external links in markdown open in a new tab. |
|
||||
|
||||
### List
|
||||
|
||||
@@ -273,9 +298,9 @@ Many of the article defaults here can be overridden on a per article basis by sp
|
||||
| --- | --- | --- |
|
||||
| `list.showHero` | `false` | Whether the thumbnail image will be shown as a hero image within each list page. |
|
||||
| `list.heroStyle` | _Not set_ | Style to display the hero image, valid options are: `basic`, `big`, `background`, `thumbAndBackground`. Effective only if `list.showHero = true`. |
|
||||
| `list.layoutBackgroundBlur` | `true` | Makes the background image in the background list heroStyle blur with the scroll. Only used when `heroStyle` equals `background` or `thumbAndBackground`. |
|
||||
| `list.layoutBackgroundHeaderSpace` | `true` | Add space between the header and the body. Only used when `heroStyle` equals `background`. |
|
||||
| `list.showBreadcrumbs` | `false` | Whether or not breadcrumbs are displayed in the header on list pages. |
|
||||
| `list.layoutBackgroundBlur` | `true` | Makes the background image in the background list heroStyle blur with the scroll |
|
||||
| `list.layoutBackgroundHeaderSpace` | `true` | Add space between the header and the body. |
|
||||
| `list.showTableOfContents` | `false` | Whether or not the table of contents is displayed on list pages. |
|
||||
| `list.showSummary` | `false` | Whether or not article summaries are displayed on list pages. If a summary is not provided in the [front matter]({{< ref "front-matter" >}}), one will be auto generated using the `summaryLength` parameter in the [site configuration](#site-configuration). |
|
||||
| `list.showViews` | `false` | Whether or not list views are displayed. This requires firebase integrations to be enabled, look below. |
|
||||
@@ -301,6 +326,8 @@ Many of the article defaults here can be overridden on a per article basis by sp
|
||||
| `taxonomy.showTermCount` | `true` | Whether or not the number of articles within a taxonomy term is displayed on the taxonomy listing. |
|
||||
| `taxonomy.showHero` | `false` | Whether the thumbnail image will be shown as a hero image within each taxonomy page. |
|
||||
| `taxonomy.heroStyle` | _Not set_ | Style to display the hero image, valid options are: `basic`, `big`, `background`, `thumbAndBackground`. Effective only if `taxonomy.showHero = true`. |
|
||||
| `taxonomy.layoutBackgroundBlur` | `true` | Makes the background image in the background taxonomy heroStyle blur with the scroll. Only used when `heroStyle` equals `background` or `thumbAndBackground`. |
|
||||
| `taxonomy.layoutBackgroundHeaderSpace` | `true` | Add space between the header and the body. Only used when `heroStyle` equals `background`. |
|
||||
| `taxonomy.showBreadcrumbs` | `false` | Whether or not breadcrumbs are displayed in the taxonomy header. |
|
||||
| `taxonomy.showViews` | `false` | Whether or not article views are displayed. This requires firebase integrations to be enabled, look below. |
|
||||
| `taxonomy.showLikes` | `false` | Whether or not article likes are displayed. This requires firebase integrations to be enabled, look below. |
|
||||
@@ -313,6 +340,8 @@ Many of the article defaults here can be overridden on a per article basis by sp
|
||||
| --- | --- | --- |
|
||||
| `term.showHero` | `false` | Whether the thumbnail image will be shown as a hero image within each term page. |
|
||||
| `term.heroStyle` | _Not set_ | Style to display the hero image, valid options are: `basic`, `big`, `background`, `thumbAndBackground`. Effective only if `term.showHero = true`. |
|
||||
| `term.layoutBackgroundBlur` | `true` | Makes the background image in the background term heroStyle blur with the scroll. Only used when `heroStyle` equals `background` or `thumbAndBackground`. |
|
||||
| `term.layoutBackgroundHeaderSpace` | `true` | Add space between the header and the body. Only used when `heroStyle` equals `background`. |
|
||||
| `term.showBreadcrumbs` | `false` | Whether or not breadcrumbs are displayed in the term header. |
|
||||
| `term.showViews` | `false` | Whether or not article views are displayed. This requires firebase integrations to be enabled, look below. |
|
||||
| `term.showLikes` | `false` | Whether or not article likes are displayed. This requires firebase integrations to be enabled, look below. |
|
||||
|
||||
@@ -9,7 +9,7 @@ series: ["部署教程"]
|
||||
series_order: 4
|
||||
---
|
||||
|
||||
Blowfish 适宜个高度定制化的主题,使用到了一些 Hugo 中最新的特性来简化配置方式。
|
||||
Blowfish 是一个高度定制化的主题,使用到了一些 Hugo 中最新的特性来简化配置方式。
|
||||
|
||||
主题附带了默认配置,可以让你快速启动一个基本的博客或静态网站。
|
||||
|
||||
@@ -113,8 +113,8 @@ Blowfish 主题目前默认支持了以下语言:
|
||||
<!-- prettier-ignore-start -->
|
||||
| 名称 | 默认值 | 描述 |
|
||||
| --- | --- | --- |
|
||||
| `languageCode` | `"en"` | Hugo 中的默认语言代码。他可以是一个高层级语言(例如 `en`),也可以是一个变体子语言(例如 `en-au`),但一定需要和语言配置文件中的语言代码相匹配。为了符合 HTML 的规范并设置设置大小写敏感的 `isoCode`,Hugo希望这个值最好是小写。 |
|
||||
| `languageName` | `"English"` | 语言名称。 |
|
||||
| `locale` | `"en"` | Hugo 中的默认语言代码。他可以是一个高层级语言(例如 `en`),也可以是一个变体子语言(例如 `en-au`),但一定需要和语言配置文件中的语言代码相匹配。为了符合 HTML 的规范并设置设置大小写敏感的 `isoCode`,Hugo希望这个值最好是小写。 |
|
||||
| `label` | `"English"` | 语言名称。 |
|
||||
| `weight` | `1` | 权重决定了在构建多语言时的语言顺序。 |
|
||||
| `title` | `"Blowfish"` | 网站的标题。它将在网站头部和底部进行展示。 |
|
||||
<!-- prettier-ignore-end -->
|
||||
@@ -262,6 +262,7 @@ Blowfish 提供了大量控制主题功能的配置参数,下面的表格中
|
||||
| `article.showComments` | `false` | 是否在文章末尾添加 [评论部分]({{< ref "partials#comments" >}})。 |
|
||||
| `article.sharingLinks` | _无_ | 在文章末尾显示的分享链接。如果没有提供或设置为 `false`,则不会显示任何分享链接。可用的值包括:"bluesky"、"email"、"facebook"、"line"、"linkedin"、"mastodon"、"pinterest"、"reddit"、"telegram"、"twitter"和"whatsapp" |
|
||||
| `article.showZenMode` | `false` | 指定是否激活文章阅读的禅模式,即隐藏常规的界面元素。 |
|
||||
| `article.externalLinkForceNewTab` | `true` | 是否强制 Markdown 中的外部链接在新标签页中打开。 |
|
||||
|
||||
### 列表页
|
||||
|
||||
|
||||
@@ -40,13 +40,38 @@ const app = initializeApp(firebaseConfig);
|
||||
const analytics = getAnalytics(app);
|
||||
```
|
||||
|
||||
5. Firestore einrichten - Wählen Sie Build und öffnen Sie Firestore. Erstellen Sie eine neue Datenbank und wählen Sie den Start im Produktionsmodus. Wählen Sie den Serverstandort und warten Sie. Sobald dies gestartet ist, müssen Sie die Regeln konfigurieren. Kopieren Sie einfach die Datei unten und drücken Sie Veröffentlichen.
|
||||
5. Firestore einrichten - Wählen Sie Build und öffnen Sie Firestore. Erstellen Sie eine neue Datenbank und wählen Sie den Start im Produktionsmodus. Wählen Sie den Serverstandort und warten Sie. Sobald dies gestartet ist, müssen Sie die Regeln konfigurieren. Kopieren Sie einfach die Datei unten und drücken Sie Veröffentlichen. Diese Regeln stellen sicher, dass Aufrufe nur um 1 erhöht werden können und Likes nur um +1 oder -1 geändert werden können (und nie unter 0 fallen).
|
||||
```txt
|
||||
rules_version = '2';
|
||||
service cloud.firestore {
|
||||
match /databases/{database}/documents {
|
||||
// Views - read anyone, only increment by 1
|
||||
match /views/{document} {
|
||||
allow read: if request.auth != null;
|
||||
allow create: if request.auth != null
|
||||
&& request.resource.data.keys().hasOnly(['views'])
|
||||
&& request.resource.data.views == 1;
|
||||
allow update: if request.auth != null
|
||||
&& request.resource.data.diff(resource.data).affectedKeys().hasOnly(['views'])
|
||||
&& request.resource.data.views == resource.data.views + 1;
|
||||
}
|
||||
|
||||
// Likes - read anyone, only +1 or -1
|
||||
match /likes/{document} {
|
||||
allow read: if request.auth != null;
|
||||
allow create: if request.auth != null
|
||||
&& request.resource.data.keys().hasOnly(['likes'])
|
||||
&& request.resource.data.likes == 1;
|
||||
allow update: if request.auth != null
|
||||
&& request.resource.data.diff(resource.data).affectedKeys().hasOnly(['likes'])
|
||||
&& (request.resource.data.likes == resource.data.likes + 1
|
||||
|| request.resource.data.likes == resource.data.likes - 1)
|
||||
&& request.resource.data.likes >= 0;
|
||||
}
|
||||
|
||||
// Deny everything else
|
||||
match /{document=**} {
|
||||
allow read, write: if request.auth != null;
|
||||
allow read, write: if false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,13 +40,38 @@ const app = initializeApp(firebaseConfig);
|
||||
const analytics = getAnalytics(app);
|
||||
```
|
||||
|
||||
5. Configurar Firestore - Selecciona Build y abre Firestore. Crea una nueva base de datos y elige iniciar en modo producción. Selecciona la ubicación del servidor y espera. Una vez iniciado, necesitas configurar las reglas. Simplemente copia y pega el archivo de abajo y presiona publicar.
|
||||
5. Configurar Firestore - Selecciona Build y abre Firestore. Crea una nueva base de datos y elige iniciar en modo producción. Selecciona la ubicación del servidor y espera. Una vez iniciado, necesitas configurar las reglas. Simplemente copia y pega el archivo de abajo y presiona publicar. Estas reglas aseguran que las vistas solo pueden incrementarse en 1, y los likes solo pueden cambiarse en +1 o -1 (y nunca bajar de 0).
|
||||
```txt
|
||||
rules_version = '2';
|
||||
service cloud.firestore {
|
||||
match /databases/{database}/documents {
|
||||
// Views - read anyone, only increment by 1
|
||||
match /views/{document} {
|
||||
allow read: if request.auth != null;
|
||||
allow create: if request.auth != null
|
||||
&& request.resource.data.keys().hasOnly(['views'])
|
||||
&& request.resource.data.views == 1;
|
||||
allow update: if request.auth != null
|
||||
&& request.resource.data.diff(resource.data).affectedKeys().hasOnly(['views'])
|
||||
&& request.resource.data.views == resource.data.views + 1;
|
||||
}
|
||||
|
||||
// Likes - read anyone, only +1 or -1
|
||||
match /likes/{document} {
|
||||
allow read: if request.auth != null;
|
||||
allow create: if request.auth != null
|
||||
&& request.resource.data.keys().hasOnly(['likes'])
|
||||
&& request.resource.data.likes == 1;
|
||||
allow update: if request.auth != null
|
||||
&& request.resource.data.diff(resource.data).affectedKeys().hasOnly(['likes'])
|
||||
&& (request.resource.data.likes == resource.data.likes + 1
|
||||
|| request.resource.data.likes == resource.data.likes - 1)
|
||||
&& request.resource.data.likes >= 0;
|
||||
}
|
||||
|
||||
// Deny everything else
|
||||
match /{document=**} {
|
||||
allow read, write: if request.auth != null;
|
||||
allow read, write: if false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,13 +40,38 @@ const app = initializeApp(firebaseConfig);
|
||||
const analytics = getAnalytics(app);
|
||||
```
|
||||
|
||||
5. Configurer Firestore - Sélectionnez Build et ouvrez Firestore. Créez une nouvelle base de données et choisissez de démarrer en mode production. Sélectionnez l'emplacement du serveur et attendez. Une fois démarré, vous devez configurer les règles. Copiez et collez simplement le fichier ci-dessous et appuyez sur publier.
|
||||
5. Configurer Firestore - Sélectionnez Build et ouvrez Firestore. Créez une nouvelle base de données et choisissez de démarrer en mode production. Sélectionnez l'emplacement du serveur et attendez. Une fois démarré, vous devez configurer les règles. Copiez et collez simplement le fichier ci-dessous et appuyez sur publier. Ces règles garantissent que les vues ne peuvent être incrémentées que de 1, et les likes ne peuvent être modifiés que de +1 ou -1 (et ne jamais descendre en dessous de 0).
|
||||
```txt
|
||||
rules_version = '2';
|
||||
service cloud.firestore {
|
||||
match /databases/{database}/documents {
|
||||
// Views - read anyone, only increment by 1
|
||||
match /views/{document} {
|
||||
allow read: if request.auth != null;
|
||||
allow create: if request.auth != null
|
||||
&& request.resource.data.keys().hasOnly(['views'])
|
||||
&& request.resource.data.views == 1;
|
||||
allow update: if request.auth != null
|
||||
&& request.resource.data.diff(resource.data).affectedKeys().hasOnly(['views'])
|
||||
&& request.resource.data.views == resource.data.views + 1;
|
||||
}
|
||||
|
||||
// Likes - read anyone, only +1 or -1
|
||||
match /likes/{document} {
|
||||
allow read: if request.auth != null;
|
||||
allow create: if request.auth != null
|
||||
&& request.resource.data.keys().hasOnly(['likes'])
|
||||
&& request.resource.data.likes == 1;
|
||||
allow update: if request.auth != null
|
||||
&& request.resource.data.diff(resource.data).affectedKeys().hasOnly(['likes'])
|
||||
&& (request.resource.data.likes == resource.data.likes + 1
|
||||
|| request.resource.data.likes == resource.data.likes - 1)
|
||||
&& request.resource.data.likes >= 0;
|
||||
}
|
||||
|
||||
// Deny everything else
|
||||
match /{document=**} {
|
||||
allow read, write: if request.auth != null;
|
||||
allow read, write: if false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,13 +40,38 @@ const app = initializeApp(firebaseConfig);
|
||||
const analytics = getAnalytics(app);
|
||||
```
|
||||
|
||||
5. Setup Firestore - Select Build and open Firestore. Create a new database and choose to start in production mode. Select server location and wait. Once that is started you need to configure the rules. Just copy and paste the file below and press publish.
|
||||
5. Setup Firestore - Select Build and open Firestore. Create a new database and choose to start in production mode. Select server location and wait. Once that is started you need to configure the rules. Just copy and paste the file below and press publish. These rules ensure that views can only be incremented by 1, and likes can only be changed by +1 or -1 (and never go below 0).
|
||||
```txt
|
||||
rules_version = '2';
|
||||
service cloud.firestore {
|
||||
match /databases/{database}/documents {
|
||||
// Views - read anyone, only increment by 1
|
||||
match /views/{document} {
|
||||
allow read: if request.auth != null;
|
||||
allow create: if request.auth != null
|
||||
&& request.resource.data.keys().hasOnly(['views'])
|
||||
&& request.resource.data.views == 1;
|
||||
allow update: if request.auth != null
|
||||
&& request.resource.data.diff(resource.data).affectedKeys().hasOnly(['views'])
|
||||
&& request.resource.data.views == resource.data.views + 1;
|
||||
}
|
||||
|
||||
// Likes - read anyone, only +1 or -1
|
||||
match /likes/{document} {
|
||||
allow read: if request.auth != null;
|
||||
allow create: if request.auth != null
|
||||
&& request.resource.data.keys().hasOnly(['likes'])
|
||||
&& request.resource.data.likes == 1;
|
||||
allow update: if request.auth != null
|
||||
&& request.resource.data.diff(resource.data).affectedKeys().hasOnly(['likes'])
|
||||
&& (request.resource.data.likes == resource.data.likes + 1
|
||||
|| request.resource.data.likes == resource.data.likes - 1)
|
||||
&& request.resource.data.likes >= 0;
|
||||
}
|
||||
|
||||
// Deny everything else
|
||||
match /{document=**} {
|
||||
allow read, write: if request.auth != null;
|
||||
allow read, write: if false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,13 +40,38 @@ const app = initializeApp(firebaseConfig);
|
||||
const analytics = getAnalytics(app);
|
||||
```
|
||||
|
||||
5. Firestore を設定する - 「ビルド」を選択して Firestore を開きます。新しいデータベースを作成し、本番モードで開始することを選択します。サーバーの場所を選択して待ちます。開始したら、ルールを設定する必要があります。以下のファイルをコピーして貼り付け、「公開」をクリックします。
|
||||
5. Firestore を設定する - 「ビルド」を選択して Firestore を開きます。新しいデータベースを作成し、本番モードで開始することを選択します。サーバーの場所を選択して待ちます。開始したら、ルールを設定する必要があります。以下のファイルをコピーして貼り付け、「公開」をクリックします。これらのルールは、閲覧数は1ずつのみ増加でき、いいねは+1または-1のみ変更可能(0未満にはならない)であることを保証します。
|
||||
```txt
|
||||
rules_version = '2';
|
||||
service cloud.firestore {
|
||||
match /databases/{database}/documents {
|
||||
// Views - read anyone, only increment by 1
|
||||
match /views/{document} {
|
||||
allow read: if request.auth != null;
|
||||
allow create: if request.auth != null
|
||||
&& request.resource.data.keys().hasOnly(['views'])
|
||||
&& request.resource.data.views == 1;
|
||||
allow update: if request.auth != null
|
||||
&& request.resource.data.diff(resource.data).affectedKeys().hasOnly(['views'])
|
||||
&& request.resource.data.views == resource.data.views + 1;
|
||||
}
|
||||
|
||||
// Likes - read anyone, only +1 or -1
|
||||
match /likes/{document} {
|
||||
allow read: if request.auth != null;
|
||||
allow create: if request.auth != null
|
||||
&& request.resource.data.keys().hasOnly(['likes'])
|
||||
&& request.resource.data.likes == 1;
|
||||
allow update: if request.auth != null
|
||||
&& request.resource.data.diff(resource.data).affectedKeys().hasOnly(['likes'])
|
||||
&& (request.resource.data.likes == resource.data.likes + 1
|
||||
|| request.resource.data.likes == resource.data.likes - 1)
|
||||
&& request.resource.data.likes >= 0;
|
||||
}
|
||||
|
||||
// Deny everything else
|
||||
match /{document=**} {
|
||||
allow read, write: if request.auth != null;
|
||||
allow read, write: if false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,13 +40,38 @@ const app = initializeApp(firebaseConfig);
|
||||
const analytics = getAnalytics(app);
|
||||
```
|
||||
|
||||
5. Setup Firestore - Select Build and open Firestore. Create a new database and choose to start in production mode. Select server location and wait. Once that is started you need to configure the rules. Just copy and paste the file below and press publish.
|
||||
5. Setup Firestore - Select Build and open Firestore. Create a new database and choose to start in production mode. Select server location and wait. Once that is started you need to configure the rules. Just copy and paste the file below and press publish. These rules ensure that views can only be incremented by 1, and likes can only be changed by +1 or -1 (and never go below 0).
|
||||
```txt
|
||||
rules_version = '2';
|
||||
service cloud.firestore {
|
||||
match /databases/{database}/documents {
|
||||
// Views - read anyone, only increment by 1
|
||||
match /views/{document} {
|
||||
allow read: if request.auth != null;
|
||||
allow create: if request.auth != null
|
||||
&& request.resource.data.keys().hasOnly(['views'])
|
||||
&& request.resource.data.views == 1;
|
||||
allow update: if request.auth != null
|
||||
&& request.resource.data.diff(resource.data).affectedKeys().hasOnly(['views'])
|
||||
&& request.resource.data.views == resource.data.views + 1;
|
||||
}
|
||||
|
||||
// Likes - read anyone, only +1 or -1
|
||||
match /likes/{document} {
|
||||
allow read: if request.auth != null;
|
||||
allow create: if request.auth != null
|
||||
&& request.resource.data.keys().hasOnly(['likes'])
|
||||
&& request.resource.data.likes == 1;
|
||||
allow update: if request.auth != null
|
||||
&& request.resource.data.diff(resource.data).affectedKeys().hasOnly(['likes'])
|
||||
&& (request.resource.data.likes == resource.data.likes + 1
|
||||
|| request.resource.data.likes == resource.data.likes - 1)
|
||||
&& request.resource.data.likes >= 0;
|
||||
}
|
||||
|
||||
// Deny everything else
|
||||
match /{document=**} {
|
||||
allow read, write: if request.auth != null;
|
||||
allow read, write: if false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,13 +40,38 @@ const app = initializeApp(firebaseConfig);
|
||||
const analytics = getAnalytics(app);
|
||||
```
|
||||
|
||||
5. Configurar Firestore - Selecione Build e abra Firestore. Crie um novo banco de dados e escolha iniciar no modo produção. Selecione a localização do servidor e aguarde. Uma vez iniciado, você precisa configurar as regras. Basta copiar e colar o arquivo abaixo e pressionar publicar.
|
||||
5. Configurar Firestore - Selecione Build e abra Firestore. Crie um novo banco de dados e escolha iniciar no modo produção. Selecione a localização do servidor e aguarde. Uma vez iniciado, você precisa configurar as regras. Basta copiar e colar o arquivo abaixo e pressionar publicar. Essas regras garantem que as visualizações só podem ser incrementadas em 1, e as curtidas só podem ser alteradas em +1 ou -1 (e nunca abaixo de 0).
|
||||
```txt
|
||||
rules_version = '2';
|
||||
service cloud.firestore {
|
||||
match /databases/{database}/documents {
|
||||
// Views - read anyone, only increment by 1
|
||||
match /views/{document} {
|
||||
allow read: if request.auth != null;
|
||||
allow create: if request.auth != null
|
||||
&& request.resource.data.keys().hasOnly(['views'])
|
||||
&& request.resource.data.views == 1;
|
||||
allow update: if request.auth != null
|
||||
&& request.resource.data.diff(resource.data).affectedKeys().hasOnly(['views'])
|
||||
&& request.resource.data.views == resource.data.views + 1;
|
||||
}
|
||||
|
||||
// Likes - read anyone, only +1 or -1
|
||||
match /likes/{document} {
|
||||
allow read: if request.auth != null;
|
||||
allow create: if request.auth != null
|
||||
&& request.resource.data.keys().hasOnly(['likes'])
|
||||
&& request.resource.data.likes == 1;
|
||||
allow update: if request.auth != null
|
||||
&& request.resource.data.diff(resource.data).affectedKeys().hasOnly(['likes'])
|
||||
&& (request.resource.data.likes == resource.data.likes + 1
|
||||
|| request.resource.data.likes == resource.data.likes - 1)
|
||||
&& request.resource.data.likes >= 0;
|
||||
}
|
||||
|
||||
// Deny everything else
|
||||
match /{document=**} {
|
||||
allow read, write: if request.auth != null;
|
||||
allow read, write: if false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,13 +40,38 @@ const app = initializeApp(firebaseConfig);
|
||||
const analytics = getAnalytics(app);
|
||||
```
|
||||
|
||||
5. Configurar Firestore - Selecione Build e abra Firestore. Crie uma nova base de dados e escolha iniciar no modo produção. Selecione a localização do servidor e aguarde. Assim que estiver iniciado, precisa de configurar as regras. Basta copiar e colar o ficheiro abaixo e premir publicar.
|
||||
5. Configurar Firestore - Selecione Build e abra Firestore. Crie uma nova base de dados e escolha iniciar no modo produção. Selecione a localização do servidor e aguarde. Assim que estiver iniciado, precisa de configurar as regras. Basta copiar e colar o ficheiro abaixo e premir publicar. Estas regras garantem que as visualizações só podem ser incrementadas em 1, e os gostos só podem ser alterados em +1 ou -1 (e nunca abaixo de 0).
|
||||
```txt
|
||||
rules_version = '2';
|
||||
service cloud.firestore {
|
||||
match /databases/{database}/documents {
|
||||
// Views - read anyone, only increment by 1
|
||||
match /views/{document} {
|
||||
allow read: if request.auth != null;
|
||||
allow create: if request.auth != null
|
||||
&& request.resource.data.keys().hasOnly(['views'])
|
||||
&& request.resource.data.views == 1;
|
||||
allow update: if request.auth != null
|
||||
&& request.resource.data.diff(resource.data).affectedKeys().hasOnly(['views'])
|
||||
&& request.resource.data.views == resource.data.views + 1;
|
||||
}
|
||||
|
||||
// Likes - read anyone, only +1 or -1
|
||||
match /likes/{document} {
|
||||
allow read: if request.auth != null;
|
||||
allow create: if request.auth != null
|
||||
&& request.resource.data.keys().hasOnly(['likes'])
|
||||
&& request.resource.data.likes == 1;
|
||||
allow update: if request.auth != null
|
||||
&& request.resource.data.diff(resource.data).affectedKeys().hasOnly(['likes'])
|
||||
&& (request.resource.data.likes == resource.data.likes + 1
|
||||
|| request.resource.data.likes == resource.data.likes - 1)
|
||||
&& request.resource.data.likes >= 0;
|
||||
}
|
||||
|
||||
// Deny everything else
|
||||
match /{document=**} {
|
||||
allow read, write: if request.auth != null;
|
||||
allow read, write: if false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,13 +40,38 @@ const app = initializeApp(firebaseConfig);
|
||||
const analytics = getAnalytics(app);
|
||||
```
|
||||
|
||||
5. 设置 Firestore - 选择 Build 并打开 Firestore. 创建一个数据库,并在生产环境中启动。选择服务器位置然后等待其部署完成。启动之后你需要配置规则。只需要复制并粘贴下面的内容,然后点击发布即可。
|
||||
5. 设置 Firestore - 选择 Build 并打开 Firestore. 创建一个数据库,并在生产环境中启动。选择服务器位置然后等待其部署完成。启动之后你需要配置规则。只需要复制并粘贴下面的内容,然后点击发布即可。这些规则确保阅读量只能增加1,点赞量只能增加或减少1(且不会低于0)。
|
||||
```txt
|
||||
rules_version = '2';
|
||||
service cloud.firestore {
|
||||
match /databases/{database}/documents {
|
||||
// Views - read anyone, only increment by 1
|
||||
match /views/{document} {
|
||||
allow read: if request.auth != null;
|
||||
allow create: if request.auth != null
|
||||
&& request.resource.data.keys().hasOnly(['views'])
|
||||
&& request.resource.data.views == 1;
|
||||
allow update: if request.auth != null
|
||||
&& request.resource.data.diff(resource.data).affectedKeys().hasOnly(['views'])
|
||||
&& request.resource.data.views == resource.data.views + 1;
|
||||
}
|
||||
|
||||
// Likes - read anyone, only +1 or -1
|
||||
match /likes/{document} {
|
||||
allow read: if request.auth != null;
|
||||
allow create: if request.auth != null
|
||||
&& request.resource.data.keys().hasOnly(['likes'])
|
||||
&& request.resource.data.likes == 1;
|
||||
allow update: if request.auth != null
|
||||
&& request.resource.data.diff(resource.data).affectedKeys().hasOnly(['likes'])
|
||||
&& (request.resource.data.likes == resource.data.likes + 1
|
||||
|| request.resource.data.likes == resource.data.likes - 1)
|
||||
&& request.resource.data.likes >= 0;
|
||||
}
|
||||
|
||||
// Deny everything else
|
||||
match /{document=**} {
|
||||
allow read, write: if request.auth != null;
|
||||
allow read, write: if false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,4 +57,5 @@ Die Standardwerte der Front-Matter-Parameter werden von der [Basiskonfiguration]
|
||||
| `excludeFromSearch` | `false` | Ob dieser Artikel von der Sitemap und dem Suchindex ausgeschlossen werden soll. Wenn `true`, erscheint die Seite nicht in `sitemap.xml` oder `index.json`. |
|
||||
| `layoutBackgroundBlur` | `true` | Lässt das Hintergrundbild im background heroStyle beim Scrollen verschwimmen |
|
||||
| `layoutBackgroundHeaderSpace` | `true` | Fügt Abstand zwischen Header und Body hinzu. |
|
||||
| `externalLinkForceNewTab` | `article.externalLinkForceNewTab` | Sollen externe Links im Markdown in einem neuen Tab geöffnet werden? |
|
||||
<!-- prettier-ignore-end -->
|
||||
@@ -57,4 +57,5 @@ Los valores predeterminados de los parámetros de front matter se heredan de la
|
||||
| `excludeFromSearch` | `false` | Si este artículo debe excluirse del sitemap y el índice de búsqueda. Cuando es `true`, la página no aparecerá en `sitemap.xml` ni `index.json`. |
|
||||
| `layoutBackgroundBlur` | `true` | Hace que la imagen de fondo en el heroStyle background se difumine con el desplazamiento |
|
||||
| `layoutBackgroundHeaderSpace` | `true` | Añade espacio entre el encabezado y el cuerpo. |
|
||||
| `externalLinkForceNewTab` | `article.externalLinkForceNewTab` | ¿Deben los enlaces externos en markdown abrirse en una nueva pestaña? |
|
||||
<!-- prettier-ignore-end -->
|
||||
@@ -57,4 +57,5 @@ Les valeurs par défaut des paramètres front matter sont héritées de la [conf
|
||||
| `excludeFromSearch` | `false` | Si cet article doit être exclu du sitemap et de l'index de recherche. Lorsque `true`, la page n'apparaîtra pas dans `sitemap.xml` ou `index.json`. |
|
||||
| `layoutBackgroundBlur` | `true` | Fait flouter l'image d'arrière-plan dans le heroStyle background avec le défilement |
|
||||
| `layoutBackgroundHeaderSpace` | `true` | Ajoute de l'espace entre l'en-tête et le corps. |
|
||||
| `externalLinkForceNewTab` | `article.externalLinkForceNewTab` | Les liens externes dans le markdown doivent-ils s'ouvrir dans un nouvel onglet? |
|
||||
<!-- prettier-ignore-end -->
|
||||
@@ -55,4 +55,5 @@ I valori predefiniti dei parametri del front metter vengono ereditati dalla [con
|
||||
| `xml` | `true` unless excluded by `sitemap.excludedKinds` | Se questo articolo è incluso o meno nel file `/sitemap.xml` generato. |
|
||||
| `layoutBackgroundBlur` | `true` | Rende l'immagine di sfondo sullo sfondo heroStyle sfocata con lo scorrimento. |
|
||||
| `layoutBackgroundHeaderSpace` | `true` | Aggiungi spazio tra l'intestazione e il body. |
|
||||
| `externalLinkForceNewTab` | `article.externalLinkForceNewTab` | Flag per aprire i link esterni nel markdown in una nuova scheda. |
|
||||
<!-- prettier-ignore-end -->
|
||||
@@ -56,4 +56,5 @@ series_order: 7
|
||||
| `xml` | `sitemap.excludedKinds` によって除外されない限り `true` | この記事が生成された `/sitemap.xml` ファイルに含まれるかどうか。 |
|
||||
| `layoutBackgroundBlur` | `true` | background heroStyle の背景画像をスクロールでぼかします |
|
||||
| `layoutBackgroundHeaderSpace` | `true` | ヘッダーと本文の間にスペースを追加します |
|
||||
| `externalLinkForceNewTab` | `article.externalLinkForceNewTab` | マークダウン内の外部リンクを新しいタブで開くかどうかです。 |
|
||||
<!-- prettier-ignore-end -->
|
||||
@@ -57,4 +57,5 @@ Front matter parameter default values are inherited from the theme's [base confi
|
||||
| `excludeFromSearch` | `false` | Whether or not this article should be excluded from the sitemap and search index. When `true`, the page will not appear in `sitemap.xml` or `index.json`. |
|
||||
| `layoutBackgroundBlur` | `true` | Makes the background image in the background heroStyle blur with the scroll |
|
||||
| `layoutBackgroundHeaderSpace` | `true` | Add space between the header and the body. |
|
||||
| `externalLinkForceNewTab` | `article.externalLinkForceNewTab` | Should external links in markdown open in a new tab. |
|
||||
<!-- prettier-ignore-end -->
|
||||
@@ -57,4 +57,5 @@ Os valores padrão dos parâmetros de front matter são herdados da [configuraç
|
||||
| `excludeFromSearch` | `false` | Se este artigo deve ser excluído do sitemap e índice de pesquisa. Quando `true`, a página não aparecerá em `sitemap.xml` ou `index.json`. |
|
||||
| `layoutBackgroundBlur` | `true` | Faz a imagem de fundo no heroStyle background desfocar com a rolagem |
|
||||
| `layoutBackgroundHeaderSpace` | `true` | Adiciona espaço entre o cabeçalho e o corpo. |
|
||||
| `externalLinkForceNewTab` | `article.externalLinkForceNewTab` | Links externos no markdown devem abrir em uma nova aba? |
|
||||
<!-- prettier-ignore-end -->
|
||||
@@ -57,4 +57,5 @@ Os valores predefinidos dos parâmetros de front matter são herdados da [config
|
||||
| `excludeFromSearch` | `false` | Se este artigo deve ser excluído do sitemap e índice de pesquisa. Quando `true`, a página não aparecerá em `sitemap.xml` ou `index.json`. |
|
||||
| `layoutBackgroundBlur` | `true` | Faz a imagem de fundo no heroStyle background desfocar com a rolagem |
|
||||
| `layoutBackgroundHeaderSpace` | `true` | Adiciona espaço entre o cabeçalho e o corpo. |
|
||||
| `externalLinkForceNewTab` | `article.externalLinkForceNewTab` | Links externos no markdown devem abrir em uma nova aba? |
|
||||
<!-- prettier-ignore-end -->
|
||||
@@ -56,4 +56,5 @@ front matter 参数中的默认值是从[基础配置]({{< ref "configuration" >
|
||||
| `xml` | `true` unless excluded by `sitemap.excludedKinds` | 是否将这篇文章包含在生成的 `/sitemap.xml` 文件中。 |
|
||||
| `layoutBackgroundBlur` | `true` | 向下滚动主页时,是否模糊背景图。 |
|
||||
| `layoutBackgroundHeaderSpace` | `true` | 在标题和正文之间添加空白区域间隔。 |
|
||||
| `externalLinkForceNewTab` | `article.externalLinkForceNewTab` | 是否强制 Markdown 中的外部链接在新标签页中打开。 |
|
||||
<!-- prettier-ignore-end -->
|
||||
@@ -25,13 +25,13 @@ Die mit Blowfish gelieferten Konfigurationsdateien enthalten alle möglichen Ein
|
||||
|
||||
## Grundkonfiguration
|
||||
|
||||
Bevor Sie Inhalte erstellen, sollten Sie für eine neue Installation einige Dinge festlegen. Beginnen Sie in der Datei `hugo.toml` und setzen Sie die Parameter `baseURL` und `languageCode`. Der `languageCode` sollte auf die Hauptsprache eingestellt werden, in der Sie Ihre Inhalte verfassen werden.
|
||||
Bevor Sie Inhalte erstellen, sollten Sie für eine neue Installation einige Dinge festlegen. Beginnen Sie in der Datei `hugo.toml` und setzen Sie die Parameter `baseURL` und `locale`. Der `locale` sollte auf die Hauptsprache eingestellt werden, in der Sie Ihre Inhalte verfassen werden.
|
||||
|
||||
```toml
|
||||
# config/_default/hugo.toml
|
||||
|
||||
baseURL = "https://your_domain.com/"
|
||||
languageCode = "de"
|
||||
locale = "de"
|
||||
```
|
||||
|
||||
Der nächste Schritt ist die Konfiguration der Spracheinstellungen. Obwohl Blowfish mehrsprachige Setups unterstützt, konfigurieren Sie vorerst nur die Hauptsprache.
|
||||
@@ -39,7 +39,7 @@ Der nächste Schritt ist die Konfiguration der Spracheinstellungen. Obwohl Blowf
|
||||
Suchen Sie die Datei `languages.en.toml` im Konfigurationsordner. Wenn Ihre Hauptsprache Englisch ist, können Sie diese Datei so verwenden, wie sie ist. Andernfalls benennen Sie sie um, sodass sie den richtigen Sprachcode im Dateinamen enthält. Für Deutsch benennen Sie die Datei beispielsweise in `languages.de.toml` um.
|
||||
|
||||
{{< alert >}}
|
||||
Beachten Sie, dass der Sprachcode im Dateinamen der Sprachkonfiguration mit der Einstellung `languageCode` in `hugo.toml` übereinstimmen sollte.
|
||||
Beachten Sie, dass der Sprachcode im Dateinamen der Sprachkonfiguration mit der Einstellung `locale` in `hugo.toml` übereinstimmen sollte.
|
||||
{{< /alert >}}
|
||||
|
||||
```toml
|
||||
|
||||
@@ -25,13 +25,13 @@ Los archivos de configuración que vienen con Blowfish contienen todas las confi
|
||||
|
||||
## Configuración básica
|
||||
|
||||
Antes de crear cualquier contenido, hay algunas cosas que debes configurar para una nueva instalación. Comenzando en el archivo `hugo.toml`, establece los parámetros `baseURL` y `languageCode`. El `languageCode` debe configurarse con el idioma principal que usarás para escribir tu contenido.
|
||||
Antes de crear cualquier contenido, hay algunas cosas que debes configurar para una nueva instalación. Comenzando en el archivo `hugo.toml`, establece los parámetros `baseURL` y `locale`. El `locale` debe configurarse con el idioma principal que usarás para escribir tu contenido.
|
||||
|
||||
```toml
|
||||
# config/_default/hugo.toml
|
||||
|
||||
baseURL = "https://your_domain.com/"
|
||||
languageCode = "es"
|
||||
locale = "es"
|
||||
```
|
||||
|
||||
El siguiente paso es configurar los ajustes de idioma. Aunque Blowfish admite configuraciones multilingües, por ahora, solo configura el idioma principal.
|
||||
@@ -39,7 +39,7 @@ El siguiente paso es configurar los ajustes de idioma. Aunque Blowfish admite co
|
||||
Localiza el archivo `languages.en.toml` en la carpeta de configuración. Si tu idioma principal es el inglés, puedes usar este archivo tal cual. De lo contrario, renómbralo para que incluya el código de idioma correcto en el nombre del archivo. Por ejemplo, para español, renombra el archivo a `languages.es.toml`.
|
||||
|
||||
{{< alert >}}
|
||||
Ten en cuenta que el código de idioma en el nombre del archivo de configuración de idioma debe coincidir con la configuración `languageCode` en `hugo.toml`.
|
||||
Ten en cuenta que el código de idioma en el nombre del archivo de configuración de idioma debe coincidir con la configuración `locale` en `hugo.toml`.
|
||||
{{< /alert >}}
|
||||
|
||||
```toml
|
||||
|
||||
@@ -25,13 +25,13 @@ Les fichiers de configuration livrés avec Blowfish contiennent tous les paramè
|
||||
|
||||
## Configuration de base
|
||||
|
||||
Avant de créer du contenu, il y a quelques éléments à définir pour une nouvelle installation. En commençant par le fichier `hugo.toml`, définissez les paramètres `baseURL` et `languageCode`. Le `languageCode` doit être défini sur la langue principale que vous utiliserez pour rédiger votre contenu.
|
||||
Avant de créer du contenu, il y a quelques éléments à définir pour une nouvelle installation. En commençant par le fichier `hugo.toml`, définissez les paramètres `baseURL` et `locale`. Le `locale` doit être défini sur la langue principale que vous utiliserez pour rédiger votre contenu.
|
||||
|
||||
```toml
|
||||
# config/_default/hugo.toml
|
||||
|
||||
baseURL = "https://your_domain.com/"
|
||||
languageCode = "fr"
|
||||
locale = "fr"
|
||||
```
|
||||
|
||||
L'étape suivante consiste à configurer les paramètres de langue. Bien que Blowfish prenne en charge les configurations multilingues, pour l'instant, configurez simplement la langue principale.
|
||||
@@ -39,7 +39,7 @@ L'étape suivante consiste à configurer les paramètres de langue. Bien que Blo
|
||||
Localisez le fichier `languages.en.toml` dans le dossier de configuration. Si votre langue principale est l'anglais, vous pouvez utiliser ce fichier tel quel. Sinon, renommez-le pour qu'il inclue le code de langue correct dans le nom du fichier. Par exemple, pour le français, renommez le fichier en `languages.fr.toml`.
|
||||
|
||||
{{< alert >}}
|
||||
Notez que le code de langue dans le nom du fichier de configuration de langue doit correspondre au paramètre `languageCode` dans `hugo.toml`.
|
||||
Notez que le code de langue dans le nom du fichier de configuration de langue doit correspondre au paramètre `locale` dans `hugo.toml`.
|
||||
{{< /alert >}}
|
||||
|
||||
```toml
|
||||
|
||||
@@ -32,7 +32,7 @@ Prima di creare qualsiasi contenuto, è necessario impostare alcune cose per una
|
||||
# config/_default/hugo.toml
|
||||
|
||||
baseURL = "https://your_domain.com/"
|
||||
languageCode = "en"
|
||||
locale = "en"
|
||||
```
|
||||
|
||||
Il passo successivo è configurare le impostazioni della lingua. Sebbene Blowfish supporti le configurazioni multilingue, per ora basta configurare la lingua principale.
|
||||
@@ -41,7 +41,7 @@ Individua il file "languages.en.toml" nella cartella di configurazione. Se la tu
|
||||
|
||||
{{< alert >}}
|
||||
|
||||
Tieni presente che il codice della lingua nel nome del file di configurazione della lingua deve corrispondere all'impostazione "languageCode" in "hugo.toml".
|
||||
Tieni presente che il codice della lingua nel nome del file di configurazione della lingua deve corrispondere all'impostazione "locale" in "hugo.toml".
|
||||
|
||||
{{< /alert >}}
|
||||
|
||||
|
||||
@@ -25,13 +25,13 @@ Blowfish に同梱されている設定ファイルには、テーマが認識
|
||||
|
||||
## 基本設定
|
||||
|
||||
コンテンツを作成する前に、新しいインストール用に設定する必要があるものがいくつかあります。まず、`hugo.toml` ファイルで、`baseURL` と `languageCode` パラメータを設定します。`languageCode` は、コンテンツの作成に使用する主要言語に設定する必要があります。
|
||||
コンテンツを作成する前に、新しいインストール用に設定する必要があるものがいくつかあります。まず、`hugo.toml` ファイルで、`baseURL` と `locale` パラメータを設定します。`locale` は、コンテンツの作成に使用する主要言語に設定する必要があります。
|
||||
|
||||
```toml
|
||||
# config/_default/hugo.toml
|
||||
|
||||
baseURL = "https://your_domain.com/"
|
||||
languageCode = "ja"
|
||||
locale = "ja"
|
||||
```
|
||||
|
||||
次のステップは、言語設定です。Blowfish は多言語設定をサポートしていますが、ここではまず主要言語を設定します。
|
||||
@@ -39,7 +39,7 @@ languageCode = "ja"
|
||||
設定フォルダで `languages.en.toml` ファイルを見つけます。主要言語が英語の場合は、このファイルをそのまま使用できます。それ以外の場合は、ファイル名に正しい言語コードが含まれるように名前を変更します。例えば日本語の場合は、`languages.ja.toml`にファイル名を変更します。
|
||||
|
||||
{{< alert >}}
|
||||
言語設定ファイル名の言語コードは、`hugo.toml` の `languageCode` 設定と一致する必要があることに注意してください。
|
||||
言語設定ファイル名の言語コードは、`hugo.toml` の `locale` 設定と一致する必要があることに注意してください。
|
||||
{{< /alert >}}
|
||||
|
||||
```toml
|
||||
|
||||
@@ -25,13 +25,13 @@ The config files that ship with Blowfish contain all of the possible settings th
|
||||
|
||||
## Basic configuration
|
||||
|
||||
Before creating any content, there are a few things you should set for a new installation. Starting in the `hugo.toml` file, set the `baseURL` and `languageCode` parameters. The `languageCode` should be set to the main language that you will be using to author your content.
|
||||
Before creating any content, there are a few things you should set for a new installation. Starting in the `hugo.toml` file, set the `baseURL` and `locale` parameters. The `locale` should be set to the main language that you will be using to author your content.
|
||||
|
||||
```toml
|
||||
# config/_default/hugo.toml
|
||||
|
||||
baseURL = "https://your_domain.com/"
|
||||
languageCode = "en"
|
||||
locale = "en"
|
||||
```
|
||||
|
||||
The next step is to configure the language settings. Although Blowfish supports multilingual setups, for now, just configure the main language.
|
||||
@@ -39,7 +39,7 @@ The next step is to configure the language settings. Although Blowfish supports
|
||||
Locate the `languages.en.toml` file in the config folder. If your main language is English you can use this file as is. Otherwise, rename it so that it includes the correct language code in the filename. For example, for French, rename the file to `languages.fr.toml`.
|
||||
|
||||
{{< alert >}}
|
||||
Note that the language code in the language config filename should match the `languageCode` setting in `hugo.toml`.
|
||||
Note that the language code in the language config filename should match the `locale` setting in `hugo.toml`.
|
||||
{{< /alert >}}
|
||||
|
||||
```toml
|
||||
|
||||
@@ -25,13 +25,13 @@ Os arquivos de configuração que acompanham o Blowfish contêm todas as configu
|
||||
|
||||
## Configuração básica
|
||||
|
||||
Antes de criar qualquer conteúdo, há algumas coisas que você deve configurar para uma nova instalação. Começando no arquivo `hugo.toml`, defina os parâmetros `baseURL` e `languageCode`. O `languageCode` deve ser definido para o idioma principal que você usará para escrever seu conteúdo.
|
||||
Antes de criar qualquer conteúdo, há algumas coisas que você deve configurar para uma nova instalação. Começando no arquivo `hugo.toml`, defina os parâmetros `baseURL` e `locale`. O `locale` deve ser definido para o idioma principal que você usará para escrever seu conteúdo.
|
||||
|
||||
```toml
|
||||
# config/_default/hugo.toml
|
||||
|
||||
baseURL = "https://your_domain.com/"
|
||||
languageCode = "pt-br"
|
||||
locale = "pt-br"
|
||||
```
|
||||
|
||||
O próximo passo é configurar as definições de idioma. Embora o Blowfish suporte configurações multilíngues, por enquanto, apenas configure o idioma principal.
|
||||
@@ -39,7 +39,7 @@ O próximo passo é configurar as definições de idioma. Embora o Blowfish supo
|
||||
Localize o arquivo `languages.en.toml` na pasta de configuração. Se seu idioma principal for inglês, você pode usar este arquivo como está. Caso contrário, renomeie-o para incluir o código de idioma correto no nome do arquivo. Por exemplo, para português brasileiro, renomeie o arquivo para `languages.pt-br.toml`.
|
||||
|
||||
{{< alert >}}
|
||||
Note que o código de idioma no nome do arquivo de configuração de idioma deve corresponder à configuração `languageCode` em `hugo.toml`.
|
||||
Note que o código de idioma no nome do arquivo de configuração de idioma deve corresponder à configuração `locale` em `hugo.toml`.
|
||||
{{< /alert >}}
|
||||
|
||||
```toml
|
||||
|
||||
@@ -25,13 +25,13 @@ Os ficheiros de configuração que acompanham o Blowfish contêm todas as defini
|
||||
|
||||
## Configuração básica
|
||||
|
||||
Antes de criar qualquer conteúdo, há algumas coisas que deve configurar para uma nova instalação. Começando no ficheiro `hugo.toml`, defina os parâmetros `baseURL` e `languageCode`. O `languageCode` deve ser definido para o idioma principal que utilizará para escrever o seu conteúdo.
|
||||
Antes de criar qualquer conteúdo, há algumas coisas que deve configurar para uma nova instalação. Começando no ficheiro `hugo.toml`, defina os parâmetros `baseURL` e `locale`. O `locale` deve ser definido para o idioma principal que utilizará para escrever o seu conteúdo.
|
||||
|
||||
```toml
|
||||
# config/_default/hugo.toml
|
||||
|
||||
baseURL = "https://your_domain.com/"
|
||||
languageCode = "pt-pt"
|
||||
locale = "pt-pt"
|
||||
```
|
||||
|
||||
O próximo passo é configurar as definições de idioma. Embora o Blowfish suporte configurações multilingues, por agora, apenas configure o idioma principal.
|
||||
@@ -39,7 +39,7 @@ O próximo passo é configurar as definições de idioma. Embora o Blowfish supo
|
||||
Localize o ficheiro `languages.en.toml` na pasta de configuração. Se o seu idioma principal for inglês, pode utilizar este ficheiro tal como está. Caso contrário, renomeie-o para incluir o código de idioma correto no nome do ficheiro. Por exemplo, para português europeu, renomeie o ficheiro para `languages.pt-pt.toml`.
|
||||
|
||||
{{< alert >}}
|
||||
Note que o código de idioma no nome do ficheiro de configuração de idioma deve corresponder à definição `languageCode` em `hugo.toml`.
|
||||
Note que o código de idioma no nome do ficheiro de configuração de idioma deve corresponder à definição `locale` em `hugo.toml`.
|
||||
{{< /alert >}}
|
||||
|
||||
```toml
|
||||
|
||||
@@ -25,13 +25,13 @@ Blowfish 中的配置文件中包含了主题需要的所有可能的设置选
|
||||
|
||||
## 基础设置
|
||||
|
||||
在刚刚安装完成,创建内容之前,有几个设置需要关注。从 `hugo.toml` 开始,设置 `baseURL` 和 `languageCode` 参数。`languageCode`参数是用来指定你创作内容的主要语言。
|
||||
在刚刚安装完成,创建内容之前,有几个设置需要关注。从 `hugo.toml` 开始,设置 `baseURL` 和 `locale` 参数。`locale`参数是用来指定你创作内容的主要语言。
|
||||
|
||||
```toml
|
||||
# config/_default/hugo.toml
|
||||
|
||||
baseURL = "https://your_domain.com/"
|
||||
languageCode = "en"
|
||||
locale = "en"
|
||||
```
|
||||
|
||||
下一步是设置语言。尽管 Blowfish 支持多语言,但是 `hugo.toml` 只能配置一个主语言。
|
||||
@@ -39,7 +39,7 @@ languageCode = "en"
|
||||
在 `config/_default` 文件夹中找到 `languages.en.toml`。如果你的主语言是英语,你可以直接使用此文件。否则需要重命名为主语言对应的文件名。例如,如果主语言是法语,那么需要将文件命名为 `languages.fr.toml`。
|
||||
|
||||
{{< alert >}}
|
||||
注意:语言配置文件名中的语言代码需要与 `hugo.toml` 中 `languageCode` 相匹配。
|
||||
注意:语言配置文件名中的语言代码需要与 `hugo.toml` 中 `locale` 相匹配。
|
||||
{{< /alert >}}
|
||||
|
||||
```toml
|
||||
|
||||
@@ -22,7 +22,7 @@ Diese Anweisungen bringen Sie von einem komplett leeren Zustand mit Hugo und Blo
|
||||
Wenn Sie Hugo noch nicht verwendet haben, müssen Sie es [auf Ihrem lokalen Computer installieren](https://gohugo.io/getting-started/installing). Sie können überprüfen, ob es bereits installiert ist, indem Sie den Befehl `hugo version` ausführen.
|
||||
|
||||
{{< alert >}}
|
||||
Stellen Sie sicher, dass Sie **Hugo Version 0.141.0** oder höher verwenden, da das Theme einige der neuesten Hugo-Funktionen nutzt.
|
||||
Stellen Sie sicher, dass Sie **Hugo Version 0.158.0** oder höher verwenden, da das Theme einige der neuesten Hugo-Funktionen nutzt.
|
||||
{{< /alert >}}
|
||||
|
||||
Sie finden detaillierte Installationsanweisungen für Ihre Plattform in der [Hugo-Dokumentation](https://gohugo.io/getting-started/installing).
|
||||
|
||||
@@ -22,7 +22,7 @@ Estas instrucciones te ayudarán a empezar con Hugo y Blowfish desde un estado c
|
||||
Si nunca has usado Hugo antes, necesitarás [instalarlo en tu máquina local](https://gohugo.io/getting-started/installing). Puedes verificar si ya está instalado ejecutando el comando `hugo version`.
|
||||
|
||||
{{< alert >}}
|
||||
Asegúrate de estar usando **Hugo versión 0.141.0** o posterior, ya que el tema aprovecha algunas de las últimas características de Hugo.
|
||||
Asegúrate de estar usando **Hugo versión 0.158.0** o posterior, ya que el tema aprovecha algunas de las últimas características de Hugo.
|
||||
{{< /alert >}}
|
||||
|
||||
Puedes encontrar instrucciones de instalación detalladas para tu plataforma en la [documentación de Hugo](https://gohugo.io/getting-started/installing).
|
||||
|
||||
@@ -22,7 +22,7 @@ Ces instructions vous permettront de démarrer avec Hugo et Blowfish à partir d
|
||||
Si vous n'avez jamais utilisé Hugo auparavant, vous devrez [l'installer sur votre machine locale](https://gohugo.io/getting-started/installing). Vous pouvez vérifier s'il est déjà installé en exécutant la commande `hugo version`.
|
||||
|
||||
{{< alert >}}
|
||||
Assurez-vous d'utiliser **Hugo version 0.141.0** ou ultérieure car le thème tire parti de certaines des dernières fonctionnalités de Hugo.
|
||||
Assurez-vous d'utiliser **Hugo version 0.158.0** ou ultérieure car le thème tire parti de certaines des dernières fonctionnalités de Hugo.
|
||||
{{< /alert >}}
|
||||
|
||||
Vous pouvez trouver des instructions d'installation détaillées pour votre plateforme dans la [documentation Hugo](https://gohugo.io/getting-started/installing).
|
||||
|
||||
@@ -23,7 +23,7 @@ Se non hai mai utilizzato Hugo prima, dovrai [installarlo nella tua local machin
|
||||
Puoi verificare se hai già installato Hugo utilizzando il comando `hugo version`.
|
||||
|
||||
{{< alert >}}
|
||||
Assicurati di usare la **versione 0.141.0 di Hugo** o successiva, poiché il tema sfrutta alcune delle ultime caratteristiche di Hugo.
|
||||
Assicurati di usare la **versione 0.158.0 di Hugo** o successiva, poiché il tema sfrutta alcune delle ultime caratteristiche di Hugo.
|
||||
{{< /alert >}}
|
||||
|
||||
Puoi trovare le istruzioni dettagliate sull'installazione per la propria piattaforma in [Documenti Hugo](https://gohugo.io/getting-started/installing).
|
||||
|
||||
Loaded 100 of 2596 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user