mirror of
https://github.com/cotes2020/jekyll-theme-chirpy.git
synced 2025-12-19 14:14:17 +00:00
Compare commits
369 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2b9d379d70 | ||
|
|
bdee5d6b6d | ||
|
|
348f6bff8b | ||
|
|
7a3d624364 | ||
|
|
06f1c6f256 | ||
|
|
4a7f33f7bb | ||
|
|
e077d2911d | ||
|
|
5f2edb0914 | ||
|
|
911206be80 | ||
|
|
18808851a9 | ||
|
|
2bf87e0de7 | ||
|
|
f6d96ab2b8 | ||
|
|
59c55121c7 | ||
|
|
9f174d9088 | ||
|
|
5810bcd1d7 | ||
|
|
897b57bfb4 | ||
|
|
fd83462ea4 | ||
|
|
fa8a2a0ada | ||
|
|
7b7e69a44d | ||
|
|
e6e2984e77 | ||
|
|
d71711d2d3 | ||
|
|
50835b4c71 | ||
|
|
575dc87d83 | ||
|
|
753cd0499d | ||
|
|
b7e9f3ec34 | ||
|
|
42bf39e21c | ||
|
|
45c2a18884 | ||
|
|
3fd3c571b5 | ||
|
|
2574118f40 | ||
|
|
0e2d593b00 | ||
|
|
2bc3172444 | ||
|
|
55659315c6 | ||
|
|
bbd92d11cc | ||
|
|
475d181aac | ||
|
|
f49155f034 | ||
|
|
109725d2dc | ||
|
|
e3b01636ac | ||
|
|
b489da89ca | ||
|
|
2d56597571 | ||
|
|
97004ddc44 | ||
|
|
75ea77d574 | ||
|
|
bf3a34d054 | ||
|
|
5015fdecf3 | ||
|
|
de2dff354a | ||
|
|
3a022bc816 | ||
|
|
9b74070d45 | ||
|
|
af4102476e | ||
|
|
9d9e3bbca3 | ||
|
|
6f2d3ea2bd | ||
|
|
8417927264 | ||
|
|
ca39e15a78 | ||
|
|
e9c920641b | ||
|
|
0a55e1297b | ||
|
|
0465a985dc | ||
|
|
73e171b0fb | ||
|
|
726085c647 | ||
|
|
b97fa93ffd | ||
|
|
13a3c3c906 | ||
|
|
e78f67d354 | ||
|
|
b34661efd7 | ||
|
|
bb589e8d31 | ||
|
|
f079bb7f5b | ||
|
|
ac4b402f97 | ||
|
|
87a12be897 | ||
|
|
0614473893 | ||
|
|
273b389c51 | ||
|
|
204cb44dc3 | ||
|
|
f949bda15b | ||
|
|
b3005f4e1a | ||
|
|
14d3960ca0 | ||
|
|
4da7406dfe | ||
|
|
1a041e0443 | ||
|
|
7ec8425e03 | ||
|
|
52084f85d4 | ||
|
|
5c6df66324 | ||
|
|
3f9f5c79e8 | ||
|
|
aff7566774 | ||
|
|
4237d078fa | ||
|
|
806fa3aa1a | ||
|
|
ec69bea841 | ||
|
|
75a2504fd9 | ||
|
|
8542b57e8b | ||
|
|
ed9bda022d | ||
|
|
25a27056e0 | ||
|
|
a069960439 | ||
|
|
c574166b51 | ||
|
|
ff87349fe7 | ||
|
|
505e314a31 | ||
|
|
41b8f9f519 | ||
|
|
62bcd601fc | ||
|
|
414b8f97ce | ||
|
|
229c2a2e2b | ||
|
|
c4af75389a | ||
|
|
4f86b04a84 | ||
|
|
2a5c184373 | ||
|
|
7b43a83c40 | ||
|
|
f659109de2 | ||
|
|
b39c6b526c | ||
|
|
7819fd0843 | ||
|
|
ba397a21aa | ||
|
|
0d4103d47b | ||
|
|
54e1dbe325 | ||
|
|
37c976499e | ||
|
|
0fd4c0bd0f | ||
|
|
0da2f80dd4 | ||
|
|
e8ef69ad17 | ||
|
|
2eb4267cdd | ||
|
|
e4e76f0a11 | ||
|
|
e07e6d46d7 | ||
|
|
2bbfda79ad | ||
|
|
b0f4ae5eec | ||
|
|
8b0fbf5a83 | ||
|
|
2639f8ed45 | ||
|
|
926d1ca068 | ||
|
|
df8ff546ec | ||
|
|
c075e11a4e | ||
|
|
b6d1992f85 | ||
|
|
74ab6f8adc | ||
|
|
4fe145e980 | ||
|
|
a60e90791d | ||
|
|
fa3257873e | ||
|
|
1682ce9d7c | ||
|
|
29a8bc26bc | ||
|
|
83625644ea | ||
|
|
728094d1ba | ||
|
|
ce2f6f5abe | ||
|
|
c4da99c7ea | ||
|
|
73af59194a | ||
|
|
f6bf6d0864 | ||
|
|
bef2ac085e | ||
|
|
7c9fa68331 | ||
|
|
066c1cd039 | ||
|
|
98850e1e5d | ||
|
|
83eecdabcb | ||
|
|
a51d31c55a | ||
|
|
eb40f51c84 | ||
|
|
3bd881da70 | ||
|
|
aba9468b53 | ||
|
|
de6ec65932 | ||
|
|
c5f15a3af8 | ||
|
|
12ce8f9fa9 | ||
|
|
d81f836b06 | ||
|
|
52f5ee9cd3 | ||
|
|
b3c4d741b2 | ||
|
|
129c4b3fa6 | ||
|
|
fe18011f8a | ||
|
|
25ec7649cd | ||
|
|
ea6268d7a5 | ||
|
|
1967de1f1d | ||
|
|
c283e7782f | ||
|
|
9d97120197 | ||
|
|
016a9baddd | ||
|
|
d9e1d84f08 | ||
|
|
3210c59466 | ||
|
|
83f1c34f92 | ||
|
|
83bbe4ac93 | ||
|
|
6d99f5cc36 | ||
|
|
0c80552d77 | ||
|
|
e38309f3bd | ||
|
|
8cbbcfa26d | ||
|
|
003e7b60c9 | ||
|
|
7c23a4ebc5 | ||
|
|
2a4d67d65c | ||
|
|
414dd132ae | ||
|
|
f0266c1f78 | ||
|
|
7626e4d005 | ||
|
|
34499f0c92 | ||
|
|
aadf9393d5 | ||
|
|
2918da9f29 | ||
|
|
97b8dfeed6 | ||
|
|
ee88cec270 | ||
|
|
8da583d403 | ||
|
|
61fdbcb83a | ||
|
|
aca79c1007 | ||
|
|
fe203417d9 | ||
|
|
e90461aa3c | ||
|
|
6f6e309741 | ||
|
|
42a700aa37 | ||
|
|
7ec31e8948 | ||
|
|
b63b65d743 | ||
|
|
1719d81d00 | ||
|
|
fe7047959e | ||
|
|
d97f95fca0 | ||
|
|
39b81aa4e0 | ||
|
|
387f0ec64a | ||
|
|
c45f399e65 | ||
|
|
8225174cb5 | ||
|
|
8b4f99c87f | ||
|
|
6f97636fb9 | ||
|
|
bf199d779c | ||
|
|
6fec411c18 | ||
|
|
61d9c2247c | ||
|
|
0d9cec6abc | ||
|
|
6e6b6479f5 | ||
|
|
388efb1ae3 | ||
|
|
471e8c4018 | ||
|
|
3cd81e7128 | ||
|
|
b85f6330de | ||
|
|
111b82838d | ||
|
|
e8e4901e34 | ||
|
|
d96b8811a7 | ||
|
|
820ba62e9e | ||
|
|
3c7934abf0 | ||
|
|
02b7bd5095 | ||
|
|
474b4ba681 | ||
|
|
016399a6db | ||
|
|
60229ae334 | ||
|
|
b69d3d7edd | ||
|
|
002f02533d | ||
|
|
968c13ec7d | ||
|
|
4681df7151 | ||
|
|
7e6c667e7a | ||
|
|
09121c1d11 | ||
|
|
fe82cea576 | ||
|
|
1e5c025a1c | ||
|
|
712a9b2240 | ||
|
|
d921b981f7 | ||
|
|
b1453ccb0c | ||
|
|
f517b33960 | ||
|
|
4490ce4107 | ||
|
|
d0cf2a8dd5 | ||
|
|
5c6ec9d06b | ||
|
|
c3a840076e | ||
|
|
a2d01365de | ||
|
|
ecff5630a6 | ||
|
|
909d136b37 | ||
|
|
27f4bf07bc | ||
|
|
5cbaf24bcb | ||
|
|
af8986bf50 | ||
|
|
7a601715df | ||
|
|
3b89bf1df2 | ||
|
|
5df953f6c8 | ||
|
|
2b59326fa8 | ||
|
|
5021678250 | ||
|
|
8bc9d25434 | ||
|
|
0c9558de8a | ||
|
|
54ba8befbe | ||
|
|
4b6722124d | ||
|
|
babb4a0c5a | ||
|
|
511df11546 | ||
|
|
dd339aea2b | ||
|
|
269506b647 | ||
|
|
765af53b77 | ||
|
|
41ed331456 | ||
|
|
9a011e14d6 | ||
|
|
5f628767e0 | ||
|
|
808d3743e5 | ||
|
|
e8d20bf7b0 | ||
|
|
d6d03183ea | ||
|
|
bd374dd383 | ||
|
|
f2d285844e | ||
|
|
98d48f5da4 | ||
|
|
7754a71ff9 | ||
|
|
5ea3d0f496 | ||
|
|
7887b5ab62 | ||
|
|
937b22316a | ||
|
|
8440d42984 | ||
|
|
6fa1777eb0 | ||
|
|
5a191e79af | ||
|
|
72700be7dd | ||
|
|
d7bcb40cde | ||
|
|
09e4ad245b | ||
|
|
09f9305d4c | ||
|
|
7a3d743419 | ||
|
|
d2190c726f | ||
|
|
8e73a91d25 | ||
|
|
8f2b42b1b3 | ||
|
|
e01eb8af14 | ||
|
|
9306c7b39e | ||
|
|
ed6dc539ef | ||
|
|
8de1abda6b | ||
|
|
4b6ccbcbcc | ||
|
|
ab16fdc7fc | ||
|
|
bffaf6374f | ||
|
|
ca41c7ebff | ||
|
|
7651d2851b | ||
|
|
5561cd86b5 | ||
|
|
7fb0ee0bed | ||
|
|
7efd2f8aa2 | ||
|
|
ec98f07aca | ||
|
|
e7426ec67e | ||
|
|
5fc428353c | ||
|
|
9de95bf089 | ||
|
|
fa9879b5f1 | ||
|
|
7fd15a285f | ||
|
|
8734d1c1a3 | ||
|
|
5b5a3865ac | ||
|
|
fe2a3cdf51 | ||
|
|
4e7bf00ee9 | ||
|
|
773d3b1263 | ||
|
|
b0d5956f5a | ||
|
|
e50343b06b | ||
|
|
b3de722778 | ||
|
|
782a930fdf | ||
|
|
da7d7e25b6 | ||
|
|
f6e9a3fccf | ||
|
|
ae2669fedc | ||
|
|
48f14e39ac | ||
|
|
6774e0e1fb | ||
|
|
8134209aa2 | ||
|
|
c0e3e61fa7 | ||
|
|
e107a2e759 | ||
|
|
df8185f887 | ||
|
|
339293d0d7 | ||
|
|
1fd665bf49 | ||
|
|
e48d66e525 | ||
|
|
647eea8dbd | ||
|
|
1c330f403c | ||
|
|
b6a1a4172e | ||
|
|
3c44a1ff71 | ||
|
|
e7dee2a589 | ||
|
|
a6ce765082 | ||
|
|
294e2985c1 | ||
|
|
5de6f17754 | ||
|
|
d96fa5aa0c | ||
|
|
6852ceb280 | ||
|
|
f904e8cd48 | ||
|
|
81b9f7a9ac | ||
|
|
916fbf4a2c | ||
|
|
d9d7848f03 | ||
|
|
70662a0365 | ||
|
|
3432413020 | ||
|
|
fd5df7e1a1 | ||
|
|
65f722fb04 | ||
|
|
1082d041ca | ||
|
|
eac3f9b434 | ||
|
|
304d75c500 | ||
|
|
fb13e3219b | ||
|
|
5511b2883f | ||
|
|
76712c09cd | ||
|
|
80cb0b3717 | ||
|
|
d2fb98b3e5 | ||
|
|
39da11e3f3 | ||
|
|
fec5214b45 | ||
|
|
827f84c7e8 | ||
|
|
3ffd19d81d | ||
|
|
49bb93cc0c | ||
|
|
8bcdd87891 | ||
|
|
7cc36c5287 | ||
|
|
3878815852 | ||
|
|
e55ebadeb2 | ||
|
|
0c5b697fd3 | ||
|
|
f1d9e99bc0 | ||
|
|
b288587c1c | ||
|
|
f35b147b28 | ||
|
|
163c5761e9 | ||
|
|
4023be9bef | ||
|
|
0dcd39d491 | ||
|
|
45c58d8f4c | ||
|
|
e993ac872a | ||
|
|
21c8c2b70d | ||
|
|
43323abdfe | ||
|
|
b78a2d85bd | ||
|
|
940b2810e9 | ||
|
|
b405a58838 | ||
|
|
d792a2f6af | ||
|
|
22d4275f75 | ||
|
|
3fa1bf3054 | ||
|
|
ad137fa294 | ||
|
|
20b7fe3a53 | ||
|
|
5eb329f36c | ||
|
|
378b65a061 | ||
|
|
2fed338ce6 | ||
|
|
232927c47c | ||
|
|
5b97d3fd25 | ||
|
|
856ef11487 | ||
|
|
b0329775fc | ||
|
|
971fe03ec3 | ||
|
|
96af7291ea |
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"rules": {
|
|
||||||
"body-max-line-length": [0, "always"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -2,10 +2,18 @@ root = true
|
|||||||
|
|
||||||
[*]
|
[*]
|
||||||
charset = utf-8
|
charset = utf-8
|
||||||
# 2 space indentation
|
|
||||||
indent_style = space
|
indent_style = space
|
||||||
indent_size = 2
|
indent_size = 2
|
||||||
trim_trailing_whitespace = true
|
trim_trailing_whitespace = true
|
||||||
# Unix-style newlines with a newline ending every file
|
# Unix-style newlines with a newline ending every file
|
||||||
end_of_line = lf
|
end_of_line = lf
|
||||||
insert_final_newline = true
|
insert_final_newline = true
|
||||||
|
|
||||||
|
[*.{js,css,scss}]
|
||||||
|
quote_type = single
|
||||||
|
|
||||||
|
[*.{yml,yaml}]
|
||||||
|
quote_type = double
|
||||||
|
|
||||||
|
[*.md]
|
||||||
|
trim_trailing_whitespace = false
|
||||||
|
|||||||
66
.github/CONTRIBUTING.md
vendored
66
.github/CONTRIBUTING.md
vendored
@@ -1,66 +0,0 @@
|
|||||||
# How to Contribute
|
|
||||||
|
|
||||||
We'd like to thank you for sparing time to improve this project! Here are some guidelines for contributing:
|
|
||||||
|
|
||||||
To ensure that the blog design is not confused, this project does not accept suggestions for design changes, such as color scheme, fonts, typography, etc. If your request is about an enhancement, it is recommended to first submit a [_Feature Request_](https://github.com/cotes2020/jekyll-theme-chirpy/issues/new?labels=enhancement&template=feature_request.md) issue to discuss whether your idea fits the project.
|
|
||||||
|
|
||||||
## Basic Process
|
|
||||||
|
|
||||||
Generally, contribute to the project by:
|
|
||||||
|
|
||||||
1. Fork this project on GitHub and clone it locally.
|
|
||||||
2. Create a new branch from the default branch and give it a descriptive name (format: `feature/<add-new-feat>` / `fix/<fix-a-bug>`).
|
|
||||||
3. After completing the development, submit a new _Pull Request_. Note that the commit message must follow the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/), otherwise it will fail the PR check.
|
|
||||||
|
|
||||||
## Modifying JavaScript
|
|
||||||
|
|
||||||
If your contribution involves JavaScript modification, please read the following sections.
|
|
||||||
|
|
||||||
### Inline Scripts
|
|
||||||
|
|
||||||
If you need to add comments to the inline JavaScript (the code between the HTML tags `<script>` and `</script>`), please use `/* */` instead of two slashes `//`. Because the HTML will be compressed by [jekyll-compress-html](https://github.com/penibelst/jekyll-compress-html) during deployment, but it cannot handle the `//` properly, which will disrupt the structure of the compressed HTML.
|
|
||||||
|
|
||||||
### External Scripts
|
|
||||||
|
|
||||||
If you need to add/change/delete the JavaScript in the directory `_javascript/`, setting up [`Node.js`](https://nodejs.org/) and [`npx`](https://www.npmjs.com/package/npx) is a requirement. And then install the development dependencies:
|
|
||||||
|
|
||||||
```console
|
|
||||||
$ npm i
|
|
||||||
```
|
|
||||||
|
|
||||||
During JavaScript development, real-time debugging can be performed through the following commands:
|
|
||||||
|
|
||||||
Firstly, start a Jekyll server:
|
|
||||||
|
|
||||||
```console
|
|
||||||
$ bash tools/run.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
And then open a new terminal tab and run:
|
|
||||||
|
|
||||||
```console
|
|
||||||
# Type 'Ctrl + C' to stop
|
|
||||||
$ npx gulp dev
|
|
||||||
```
|
|
||||||
|
|
||||||
After debugging, run the command `npx gulp` (without any argument) will automatically output the compressed files to the directory `assets/js/dist/`.
|
|
||||||
|
|
||||||
## Verify the commit messages
|
|
||||||
|
|
||||||
If you want to make sure your commits pass the CI check, you can refer to the following steps.
|
|
||||||
|
|
||||||
Install `commitlint` & `husky`:
|
|
||||||
|
|
||||||
```console
|
|
||||||
$ npm i -g @commitlint/{cli,config-conventional} husky
|
|
||||||
```
|
|
||||||
|
|
||||||
And then enable `husky`:
|
|
||||||
|
|
||||||
```console
|
|
||||||
$ husky install
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
:tada: Your volunteering will make the open-source world more beautiful, thanks again! :tada:
|
|
||||||
26
.github/DISCUSSION_TEMPLATE/general.yml
vendored
Normal file
26
.github/DISCUSSION_TEMPLATE/general.yml
vendored
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
body:
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Checklist
|
||||||
|
description: Following the guidelines can make you more likely to get responses.
|
||||||
|
options:
|
||||||
|
- label: >-
|
||||||
|
I have read and accepted the
|
||||||
|
[contributing guidelines](https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/docs/CONTRIBUTING.md).
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: dropdown
|
||||||
|
attributes:
|
||||||
|
label: What is the topic?
|
||||||
|
options:
|
||||||
|
- Sharing tips and tricks
|
||||||
|
- Just chatting
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Description
|
||||||
|
description: Please describe in detail what you want to share.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
40
.github/DISCUSSION_TEMPLATE/q-a.yml
vendored
Normal file
40
.github/DISCUSSION_TEMPLATE/q-a.yml
vendored
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
body:
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Checklist
|
||||||
|
description: Following the guidelines can make you more likely to get responses.
|
||||||
|
options:
|
||||||
|
- label: >-
|
||||||
|
I have read and accepted the
|
||||||
|
[contributing guidelines](https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/docs/CONTRIBUTING.md).
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: dropdown
|
||||||
|
id: download
|
||||||
|
attributes:
|
||||||
|
label: How did you create the site?
|
||||||
|
options:
|
||||||
|
- Generated from `chirpy-starter`
|
||||||
|
- Built from `jekyll-theme-chirpy`
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Description
|
||||||
|
description: Please describe your need in detail.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Operations you have already tried
|
||||||
|
description: Describe the effort you went through.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Anything else?
|
||||||
|
description: |
|
||||||
|
Links? References? Or logs? Anything that will give us more context about the issue you are encountering!
|
||||||
2
.github/FUNDING.yml
vendored
2
.github/FUNDING.yml
vendored
@@ -1,2 +1,2 @@
|
|||||||
ko_fi: coteschung
|
ko_fi: coteschung
|
||||||
custom: https://cotes.gitee.io/alipay-wechat-donation
|
custom: https://sponsor.cotes.page
|
||||||
|
|||||||
65
.github/ISSUE_TEMPLATE/bug_report.md
vendored
65
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -1,65 +0,0 @@
|
|||||||
---
|
|
||||||
name: Bug Report
|
|
||||||
about: Create a report to help us improve
|
|
||||||
---
|
|
||||||
|
|
||||||
<!-- NOTE: Please maintain all sections, otherwise the issue will be automatically closed :) -->
|
|
||||||
|
|
||||||
## Checklist
|
|
||||||
|
|
||||||
<!-- Please complete the following list of tasks, and then check it by changing the "[ ]" to "[x]" -->
|
|
||||||
|
|
||||||
- [ ] I have read the [tutorials](https://cotes2020.github.io/chirpy-demo/categories/tutorial/) and know the correct effect of the functional design.
|
|
||||||
- [ ] There are no similar reports on [existing issues](https://github.com/cotes2020/jekyll-theme-chirpy/issues?q=is%3Aissue) (including closed ones).
|
|
||||||
- [ ] I found the bug on the latest code of the `master` branch.
|
|
||||||
|
|
||||||
## Describe the bug
|
|
||||||
|
|
||||||
<!-- A clear and concise description of what the bug is. -->
|
|
||||||
|
|
||||||
### To Reproduce
|
|
||||||
|
|
||||||
Steps to reproduce the behavior:
|
|
||||||
<!--
|
|
||||||
1. Go to '...'
|
|
||||||
2. Click on '....'
|
|
||||||
3. Scroll down to '....'
|
|
||||||
4. See error
|
|
||||||
-->
|
|
||||||
|
|
||||||
### Expected behavior
|
|
||||||
|
|
||||||
<!-- A clear and concise description of what you expected to happen. -->
|
|
||||||
|
|
||||||
### Screenshots
|
|
||||||
|
|
||||||
<!-- If applicable, add screenshots to help explain your problem. -->
|
|
||||||
|
|
||||||
### Environment
|
|
||||||
|
|
||||||
| Command | Version |
|
|
||||||
|-----------------------------------|---------|
|
|
||||||
| `ruby -v` | |
|
|
||||||
| `gem -v` | |
|
|
||||||
| `bundle -v` | |
|
|
||||||
| `bundle exec jekyll -v` | |
|
|
||||||
| `bundle info jekyll-theme-chirpy` | |
|
|
||||||
|
|
||||||
### Desktop
|
|
||||||
|
|
||||||
<!-- If necessary, uncomment and fill in the following list:
|
|
||||||
- OS: [e.g. macOS 10.15.6]
|
|
||||||
- Browser: [e.g. Chrome 85.0.4183.83 (64-bit)]
|
|
||||||
-->
|
|
||||||
|
|
||||||
### Smartphone
|
|
||||||
|
|
||||||
<!-- If necessary, uncomment and fill in the following list:
|
|
||||||
- Device: [e.g. iPhone 6]
|
|
||||||
- OS: [e.g. iOS 13.6.1]
|
|
||||||
- Browser: [e.g. Chrome 22]
|
|
||||||
-->
|
|
||||||
|
|
||||||
### Additional context
|
|
||||||
|
|
||||||
<!-- Add any other context about the problem here. -->
|
|
||||||
64
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
Normal file
64
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
name: Bug Report
|
||||||
|
description: Create a report to help us improve
|
||||||
|
body:
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Checklist
|
||||||
|
description: Following the guidelines can make you more likely to get responses.
|
||||||
|
options:
|
||||||
|
- label: >-
|
||||||
|
I have read and accepted the
|
||||||
|
[contributing guidelines](https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/docs/CONTRIBUTING.md).
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: dropdown
|
||||||
|
id: download
|
||||||
|
attributes:
|
||||||
|
label: How did you create the site?
|
||||||
|
options:
|
||||||
|
- Generated from `chirpy-starter`
|
||||||
|
- Built from `jekyll-theme-chirpy`
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Describe the bug
|
||||||
|
description: A clear and concise description of what the bug is.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Steps To Reproduce
|
||||||
|
description: Steps to reproduce the behavior.
|
||||||
|
placeholder: |
|
||||||
|
1. In this environment...
|
||||||
|
2. With this config...
|
||||||
|
3. Run '...'
|
||||||
|
4. See error...
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Expected Behavior
|
||||||
|
description: A concise description of what you expected to happen.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Environment
|
||||||
|
value: |
|
||||||
|
- Ruby: <!-- run `ruby -v` -->
|
||||||
|
- Jekyll: <!-- run `bundle exec jekyll -v` -->
|
||||||
|
- Chirpy: <!-- run `bundle info jekyll-theme-chirpy` -->
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Anything else?
|
||||||
|
description: |
|
||||||
|
Links? References? Or logs? Anything that will give us more context about the issue you are encountering!
|
||||||
5
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
5
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
blank_issues_enabled: false
|
||||||
|
contact_links:
|
||||||
|
- name: Ask the community for help
|
||||||
|
url: https://github.com/cotes2020/jekyll-theme-chirpy/discussions
|
||||||
|
about: Please ask and answer questions here.
|
||||||
35
.github/ISSUE_TEMPLATE/feature_request.md
vendored
35
.github/ISSUE_TEMPLATE/feature_request.md
vendored
@@ -1,35 +0,0 @@
|
|||||||
---
|
|
||||||
name: Feature Request
|
|
||||||
about: Suggest an idea for this project
|
|
||||||
labels: enhancement
|
|
||||||
---
|
|
||||||
|
|
||||||
<!-- NOTE: Please maintain all sections, otherwise the issue will be automatically closed :) -->
|
|
||||||
|
|
||||||
## Checklist
|
|
||||||
|
|
||||||
<!-- Please complete the following list of tasks, and then check it by changing the "[ ]" to "[x]" -->
|
|
||||||
- [ ] I have read the [contributing guidelines](https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/.github/CONTRIBUTING.md).
|
|
||||||
- [ ] There is no similar request on [existing issues](https://github.com/cotes2020/jekyll-theme-chirpy/issues?q=is%3Aissue) (including closed ones).
|
|
||||||
- [ ] I have read the [project progress](https://github.com/cotes2020/jekyll-theme-chirpy/projects) and know the current progress of the project.
|
|
||||||
- [ ] I was in the `master` branch of the latest code.
|
|
||||||
|
|
||||||
|
|
||||||
## Is your feature request related to a problem? Please describe
|
|
||||||
|
|
||||||
<!-- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -->
|
|
||||||
|
|
||||||
|
|
||||||
## Describe the solution you'd like
|
|
||||||
|
|
||||||
<!-- A clear and concise description of what you want to happen. -->
|
|
||||||
|
|
||||||
|
|
||||||
## Describe alternatives you've considered
|
|
||||||
|
|
||||||
<!-- A clear and concise description of any alternative solutions or features you've considered. -->
|
|
||||||
|
|
||||||
|
|
||||||
## Additional context
|
|
||||||
|
|
||||||
<!-- Add any other context or screenshots about the feature request here. -->
|
|
||||||
38
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
Normal file
38
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
name: Feature Request
|
||||||
|
description: Suggest an idea for this project
|
||||||
|
labels:
|
||||||
|
- enhancement
|
||||||
|
body:
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Checklist
|
||||||
|
description: Following the guidelines can make you more likely to get responses.
|
||||||
|
options:
|
||||||
|
- label: >-
|
||||||
|
I have read and accepted the
|
||||||
|
[contributing guidelines](https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/docs/CONTRIBUTING.md).
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Is your feature request related to a problem? Please describe
|
||||||
|
description: A clear and concise description of what the problem is.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Describe the solution you'd like
|
||||||
|
description: A clear and concise description of what you want to happen.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Describe alternatives you've considered
|
||||||
|
description: A clear and concise description of any alternative solutions or features you've considered.
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Additional context
|
||||||
|
description: Add any other context or screenshots about the feature request here.
|
||||||
20
.github/ISSUE_TEMPLATE/question.md
vendored
20
.github/ISSUE_TEMPLATE/question.md
vendored
@@ -1,20 +0,0 @@
|
|||||||
---
|
|
||||||
name: Question
|
|
||||||
about: Ask whatever you want
|
|
||||||
labels: question
|
|
||||||
---
|
|
||||||
|
|
||||||
<!-- NOTE: Please maintain all sections, otherwise the issue will be automatically closed :) -->
|
|
||||||
|
|
||||||
## Checklist
|
|
||||||
|
|
||||||
<!-- Please complete the following list of tasks, and then check it by changing the "[ ]" to "[x]" -->
|
|
||||||
|
|
||||||
- [ ] I have read the [newlest tutorials](https://cotes2020.github.io/chirpy-demo/categories/tutorial/) and know the correct effect of the functional design.
|
|
||||||
- [ ] There is no similar question on [existing issues](https://github.com/cotes2020/jekyll-theme-chirpy/issues?q=is%3Aissue) (including closed ones).
|
|
||||||
- [ ] I have tried to find the answer on [Jekyll Forum](https://talk.jekyllrb.com/) and [StackOverflow](https://stackoverflow.com/questions/tagged/jekyll).
|
|
||||||
- [ ] My question is based on the latest code of the `master` branch.
|
|
||||||
|
|
||||||
## Description
|
|
||||||
|
|
||||||
<!-- Please describe your question in detail. -->
|
|
||||||
43
.github/PULL_REQUEST_TEMPLATE.md
vendored
43
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -1,42 +1,17 @@
|
|||||||
## Description
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change.
|
|
||||||
|
|
||||||
e.g. Fixes #(issue)
|
|
||||||
-->
|
|
||||||
|
|
||||||
## Type of change
|
## Type of change
|
||||||
|
<!-- Please select the desired item checkbox and change it from `[ ]` to `[x]` and then delete the irrelevant options. -->
|
||||||
<!--
|
|
||||||
Please select the desired item checkbox and change it to "[x]", then delete options that are not relevant.
|
|
||||||
-->
|
|
||||||
- [ ] Bug fix (non-breaking change which fixes an issue)
|
- [ ] Bug fix (non-breaking change which fixes an issue)
|
||||||
- [ ] New feature (non-breaking change which adds functionality)
|
- [ ] New feature (non-breaking change which adds functionality)
|
||||||
|
- [ ] Improvement (refactoring and improving code)
|
||||||
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
|
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
|
||||||
- [ ] Documentation update
|
- [ ] Documentation update
|
||||||
|
|
||||||
## How has this been tested
|
## Description
|
||||||
|
<!--
|
||||||
<!--
|
Please include a summary of the change and which issue is fixed.
|
||||||
Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration
|
Please also include relevant motivation and context.
|
||||||
|
List any dependencies that are required for this change.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
- [ ] I have run `bash ./tools/deploy.sh --dry-run` (at the root of the project) locally and passed
|
## Additional context
|
||||||
- [ ] I have tested this feature in the browser
|
<!-- e.g. Fixes #(issue) -->
|
||||||
|
|
||||||
### Test Configuration
|
|
||||||
|
|
||||||
- Browser type & version:
|
|
||||||
- Operating system:
|
|
||||||
- Ruby version: <!-- by running: `ruby -v` -->
|
|
||||||
- Bundler version: <!-- by running: `bundle -v`-->
|
|
||||||
- Jekyll version: <!-- by running: `bundle list | grep " jekyll "` -->
|
|
||||||
|
|
||||||
### Checklist
|
|
||||||
|
|
||||||
<!-- Select checkboxes by change the "[ ]" to "[x]" -->
|
|
||||||
- [ ] I have performed a self-review of my code
|
|
||||||
- [ ] I have commented on my code, particularly in hard-to-understand areas
|
|
||||||
- [ ] I have made corresponding changes to the documentation
|
|
||||||
- [ ] My changes generate no new warnings
|
|
||||||
|
|||||||
26
.github/dependabot.yml
vendored
Normal file
26
.github/dependabot.yml
vendored
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
- package-ecosystem: "bundler"
|
||||||
|
directory: "/"
|
||||||
|
versioning-strategy: increase
|
||||||
|
groups:
|
||||||
|
bundler:
|
||||||
|
dependency-type: "production"
|
||||||
|
schedule:
|
||||||
|
interval: "monthly"
|
||||||
|
- package-ecosystem: "npm"
|
||||||
|
directory: "/"
|
||||||
|
versioning-strategy: increase
|
||||||
|
groups:
|
||||||
|
npm:
|
||||||
|
dependency-type: "development"
|
||||||
|
schedule:
|
||||||
|
interval: "monthly"
|
||||||
|
- package-ecosystem: "github-actions"
|
||||||
|
directory: "/"
|
||||||
|
groups:
|
||||||
|
gh-actions:
|
||||||
|
update-types:
|
||||||
|
- "major"
|
||||||
|
schedule:
|
||||||
|
interval: "monthly"
|
||||||
17
.github/stale.yml
vendored
17
.github/stale.yml
vendored
@@ -1,17 +0,0 @@
|
|||||||
# Clean up the stale issues
|
|
||||||
|
|
||||||
daysUntilStale: 30
|
|
||||||
daysUntilClose: 1
|
|
||||||
|
|
||||||
exemptLabels:
|
|
||||||
- in progress
|
|
||||||
- pending
|
|
||||||
|
|
||||||
staleLabel: stale
|
|
||||||
|
|
||||||
markComment: >
|
|
||||||
This issue has been automatically marked as stale because it has not had
|
|
||||||
recent activity. It will be closed if no further activity occurs. Thank you
|
|
||||||
for your contributions.
|
|
||||||
|
|
||||||
closeComment: false
|
|
||||||
17
.github/workflows/cd.yml
vendored
Normal file
17
.github/workflows/cd.yml
vendored
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
name: CD
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- "v[0-9]+.[0-9]+.[0-9]+"
|
||||||
|
branches:
|
||||||
|
- docs
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
launch:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- run: |
|
||||||
|
curl -X POST -H "Accept: application/vnd.github+json" \
|
||||||
|
-H "Authorization: Bearer ${{ secrets.GH_PAT }}" \
|
||||||
|
https://api.github.com/repos/${{ secrets.BUILDER }}/dispatches \
|
||||||
|
-d '{"event_type":"deploy", "client_payload":{"branch": "${{ github.ref_name }}"}}'
|
||||||
42
.github/workflows/ci.yml
vendored
42
.github/workflows/ci.yml
vendored
@@ -1,37 +1,41 @@
|
|||||||
name: 'CI'
|
name: "CI"
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches-ignore:
|
branches-ignore:
|
||||||
- 'release/**'
|
- "production"
|
||||||
- 'docs'
|
- "docs"
|
||||||
tags-ignore:
|
|
||||||
- '**'
|
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
- '.github/**'
|
- ".github/**"
|
||||||
- '!.github/workflows/ci.yml'
|
- "!.github/workflows/ci.yml"
|
||||||
- '.travis.yml'
|
- ".gitignore"
|
||||||
- '.gitignore'
|
- "docs/**"
|
||||||
- 'README.md'
|
- "README.md"
|
||||||
- 'LICENSE'
|
- "LICENSE"
|
||||||
pull_request:
|
pull_request:
|
||||||
paths:
|
paths:
|
||||||
- '**'
|
- "**"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
ruby: [2.5, 2.6, 2.7, 3]
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0 # for posts's lastmod
|
fetch-depth: 0 # for posts's lastmod
|
||||||
|
|
||||||
- name: Setup Ruby
|
- name: Setup Ruby
|
||||||
uses: ruby/setup-ruby@v1
|
uses: ruby/setup-ruby@v1
|
||||||
with:
|
with:
|
||||||
ruby-version: ${{ matrix.ruby }}
|
ruby-version: 3
|
||||||
bundler-cache: true
|
bundler-cache: true
|
||||||
|
|
||||||
|
- name: Setup Node
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
|
||||||
|
- name: Build Assets
|
||||||
|
run: npm i && npm run build
|
||||||
|
|
||||||
- name: Test Site
|
- name: Test Site
|
||||||
run: bash tools/deploy.sh --dry-run
|
run: bash tools/test
|
||||||
|
|||||||
44
.github/workflows/codeql.yml
vendored
Normal file
44
.github/workflows/codeql.yml
vendored
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
name: "CodeQL"
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
paths: ["**.js"]
|
||||||
|
pull_request:
|
||||||
|
paths: ["**.js"]
|
||||||
|
schedule:
|
||||||
|
- cron: "0 0 * * 5"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
analyze:
|
||||||
|
name: Analyze
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
actions: read
|
||||||
|
contents: read
|
||||||
|
security-events: write
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
language: ["javascript"]
|
||||||
|
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
# Initializes the CodeQL tools for scanning.
|
||||||
|
- name: Initialize CodeQL
|
||||||
|
uses: github/codeql-action/init@v2
|
||||||
|
with:
|
||||||
|
languages: "${{ matrix.language }}"
|
||||||
|
|
||||||
|
# Autobuild attempts to build any compiled languages (C/C++, C#, Go, or Java).
|
||||||
|
# If this step fails, then you should remove it and run the build manually (see below)
|
||||||
|
- name: Autobuild
|
||||||
|
uses: github/codeql-action/autobuild@v2
|
||||||
|
|
||||||
|
- name: Perform CodeQL Analysis
|
||||||
|
uses: github/codeql-action/analyze@v2
|
||||||
|
with:
|
||||||
|
category: "/language:${{ matrix.language }}"
|
||||||
4
.github/workflows/commitlint.yml
vendored
4
.github/workflows/commitlint.yml
vendored
@@ -5,7 +5,7 @@ jobs:
|
|||||||
commitlint:
|
commitlint:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- uses: wagoid/commitlint-github-action@v4
|
- uses: wagoid/commitlint-github-action@v5
|
||||||
|
|||||||
18
.github/workflows/issue-interceptor.yml
vendored
18
.github/workflows/issue-interceptor.yml
vendored
@@ -1,18 +0,0 @@
|
|||||||
name: Intercept bad issues
|
|
||||||
|
|
||||||
on:
|
|
||||||
issues:
|
|
||||||
types: [opened, edited]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
auto_close_issues:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v1
|
|
||||||
- name: Auto close issues that did not follow template
|
|
||||||
uses: lucasbento/auto-close-issues@v1.0.2
|
|
||||||
with:
|
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
issue-close-message: ":wave: Hi @${issue.user.login},\n\nThis issue is being automatically closed because it does not follow the issue template. Please DO NOT open another similar issue, try to edit the current issue according to the template, then it will be reopened automatically."
|
|
||||||
closed-issues-label: "🙁 Not following issue template"
|
|
||||||
60
.github/workflows/pages-deploy.yml.hook
vendored
60
.github/workflows/pages-deploy.yml.hook
vendored
@@ -1,29 +1,73 @@
|
|||||||
name: 'Automatic build'
|
name: "Build and Deploy"
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
|
- main
|
||||||
- master
|
- master
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
- .gitignore
|
- .gitignore
|
||||||
- README.md
|
- README.md
|
||||||
- LICENSE
|
- LICENSE
|
||||||
|
|
||||||
jobs:
|
# Allows you to run this workflow manually from the Actions tab
|
||||||
continuous-delivery:
|
workflow_dispatch:
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
pages: write
|
||||||
|
id-token: write
|
||||||
|
|
||||||
|
# Allow one concurrent deployment
|
||||||
|
concurrency:
|
||||||
|
group: "pages"
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0 # for posts's lastmod
|
fetch-depth: 0
|
||||||
|
# submodules: true
|
||||||
|
# If using the 'assets' git submodule from Chirpy Starter, uncomment above
|
||||||
|
# (See: https://github.com/cotes2020/chirpy-starter/tree/main/assets)
|
||||||
|
|
||||||
|
- name: Setup Pages
|
||||||
|
id: pages
|
||||||
|
uses: actions/configure-pages@v3
|
||||||
|
|
||||||
- name: Setup Ruby
|
- name: Setup Ruby
|
||||||
uses: ruby/setup-ruby@v1
|
uses: ruby/setup-ruby@v1
|
||||||
with:
|
with:
|
||||||
ruby-version: 2.7
|
ruby-version: 3
|
||||||
bundler-cache: true
|
bundler-cache: true
|
||||||
|
|
||||||
- name: Deploy
|
- name: Build site
|
||||||
run: bash tools/deploy.sh
|
run: bundle exec jekyll b -d "_site${{ steps.pages.outputs.base_path }}"
|
||||||
|
env:
|
||||||
|
JEKYLL_ENV: "production"
|
||||||
|
|
||||||
|
- name: Test site
|
||||||
|
run: |
|
||||||
|
bundle exec htmlproofer _site \
|
||||||
|
\-\-disable-external=true \
|
||||||
|
\-\-ignore-urls "/^http:\/\/127.0.0.1/,/^http:\/\/0.0.0.0/,/^http:\/\/localhost/"
|
||||||
|
|
||||||
|
- name: Upload site artifact
|
||||||
|
uses: actions/upload-pages-artifact@v1
|
||||||
|
with:
|
||||||
|
path: "_site${{ steps.pages.outputs.base_path }}"
|
||||||
|
|
||||||
|
deploy:
|
||||||
|
environment:
|
||||||
|
name: github-pages
|
||||||
|
url: ${{ steps.deployment.outputs.page_url }}
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: build
|
||||||
|
steps:
|
||||||
|
- name: Deploy to GitHub Pages
|
||||||
|
id: deployment
|
||||||
|
uses: actions/deploy-pages@v2
|
||||||
|
|||||||
30
.github/workflows/stale.yml
vendored
Normal file
30
.github/workflows/stale.yml
vendored
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
name: "Close stale issues and PRs"
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: "0 0 * * *" # every day at 00:00 UTC
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
issues: write
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
stale:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/stale@v8
|
||||||
|
with:
|
||||||
|
days-before-stale: 30
|
||||||
|
days-before-close: 1
|
||||||
|
stale-issue-label: stale
|
||||||
|
exempt-issue-labels: pending
|
||||||
|
stale-issue-message: >
|
||||||
|
This issue has been automatically marked as stale because it has not had recent activity.
|
||||||
|
It will be closed if no further activity occurs.
|
||||||
|
Thank you for your contributions.
|
||||||
|
stale-pr-label: stale
|
||||||
|
exempt-pr-labels: pending
|
||||||
|
stale-pr-message: >
|
||||||
|
This PR has been automatically marked as stale because it has not had recent activity.
|
||||||
|
It will be closed if no further activity occurs.
|
||||||
|
Thank you for your contributions.
|
||||||
25
.github/workflows/style-lint.yml
vendored
Normal file
25
.github/workflows/style-lint.yml
vendored
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
name: "Style Lint"
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches-ignore:
|
||||||
|
- "production"
|
||||||
|
- "docs"
|
||||||
|
paths:
|
||||||
|
- "_sass/**/*.scss"
|
||||||
|
pull_request:
|
||||||
|
paths:
|
||||||
|
- "_sass/**/*.scss"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
stylelint:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Setup Node
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
- run: npm i
|
||||||
|
- run: npm test
|
||||||
29
.gitignore
vendored
29
.gitignore
vendored
@@ -1,21 +1,22 @@
|
|||||||
# hidden files
|
# Bundler cache
|
||||||
.*
|
.bundle
|
||||||
!.git*
|
|
||||||
!.editorconfig
|
|
||||||
!.nojekyll
|
|
||||||
!.travis.yml
|
|
||||||
!.husky
|
|
||||||
!.commitlintrc.json
|
|
||||||
!.versionrc.json
|
|
||||||
|
|
||||||
# bundler cache
|
|
||||||
_site
|
|
||||||
vendor
|
vendor
|
||||||
Gemfile.lock
|
Gemfile.lock
|
||||||
|
|
||||||
# rubygem
|
# Jekyll cache
|
||||||
|
.jekyll-cache
|
||||||
|
_site
|
||||||
|
|
||||||
|
# RubyGems
|
||||||
*.gem
|
*.gem
|
||||||
|
|
||||||
# npm dependencies
|
# NPM dependencies
|
||||||
node_modules
|
node_modules
|
||||||
package-lock.json
|
package-lock.json
|
||||||
|
|
||||||
|
# IDE configurations
|
||||||
|
.idea
|
||||||
|
.vscode
|
||||||
|
|
||||||
|
# Misc
|
||||||
|
assets/js/dist
|
||||||
|
|||||||
48
.travis.yml
48
.travis.yml
@@ -1,48 +0,0 @@
|
|||||||
os: linux
|
|
||||||
dist: bionic
|
|
||||||
language: ruby
|
|
||||||
rvm: 2.7.0
|
|
||||||
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
packages:
|
|
||||||
- libcurl4-openssl-dev # to avoid SSL error (for htmlproofer)
|
|
||||||
|
|
||||||
# Overriding to drop the `--development` flag which requires the Gemfile.lock at build
|
|
||||||
install: bundle install --jobs=3 --retry=3 --path=vendor/bundle
|
|
||||||
|
|
||||||
before_script: git -C "$HOME" clone "$BUILDER_REPO" --depth=1 -q
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
include:
|
|
||||||
- stage: Upgrade
|
|
||||||
git:
|
|
||||||
depth: false # for posts' lastmod
|
|
||||||
script: eval "$BUILD_CMD"
|
|
||||||
- stage: Starter
|
|
||||||
language: minimal
|
|
||||||
install: true # skip install step
|
|
||||||
script: eval "$FLUSH_STARTER"
|
|
||||||
- stage: Docs
|
|
||||||
cache: bundler
|
|
||||||
git:
|
|
||||||
depth: false # for posts' lastmod
|
|
||||||
script: eval "$DOCS_CMD"
|
|
||||||
|
|
||||||
stages:
|
|
||||||
- name: Upgrade
|
|
||||||
if: branch = production
|
|
||||||
- name: Starter
|
|
||||||
if: branch = production
|
|
||||||
- name: Docs
|
|
||||||
if: branch = docs
|
|
||||||
|
|
||||||
notifications:
|
|
||||||
email:
|
|
||||||
recipients:
|
|
||||||
- secure: "fFLqX7uOzFA8RE2AUFlU1mmxMw+rdV6DnODJ/1Gl+3ecNtrv5LeH3c5a4a5ShQqYTrx9BPfD40VRN7UB+lzOdXiWLI9yDGRPPxGG26/WfrKpdQPZilc8zAOEeDnLAJeGZLsUvgmNb3KCXW6S8NPqqh34CfWcTIzjCARhRgO33wcs8X5wP5cugtNqO5Ew/pUcfWcmiuXNX0GNT6l+nL5A7yN+IO5mRHqSRmlfYd5EHhGMTIL4La+Cd1CNv1m4Dl0Ah2cDeJwi5wLnVbqAgunLhAYmDtxIOCVYMTBrP37UiNe/7QeFelyJfODsmMg1mx3WCykbXydC753WVoAlTg6nNoeeI9fmK+/tuLK+sx/KnYfTVGBXQYq39DyV/2o/IfCzEAKImlzFKGD8R13+ddu4B5UML+cby5KBvhTKIGaC5tKoe39z/31UPpy11/EHMCof2BUOzIgu5Hsv4OSNJlw3oRE31oOPn8xP4e7uWR8bRUhAgzN0Cn0ht+UfpemfGAXrp0M3IXQdc9L4azEFqxRhivMTLK/P6INay7IM+DJ30Ht2dWylGw/sxcRTqyNm3YomJQnXIO4xeqTSLulWr80FFHTys3JEDJYrcKvJmpwLFEAOZtwKsZ6ZShrOIA4LE5fgQtakH3ZLJG9a7jVSlMcNIfaSKgjdDQOe6CoRQL7KouA="
|
|
||||||
on_success: never
|
|
||||||
|
|
||||||
env:
|
|
||||||
global:
|
|
||||||
- NOKOGIRI_USE_SYSTEM_LIBRARIES=true # speeds up installation of html-proofer
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
{
|
|
||||||
"skip": {
|
|
||||||
"commit": true,
|
|
||||||
"tag": true
|
|
||||||
},
|
|
||||||
"types": [
|
|
||||||
{
|
|
||||||
"type": "feat",
|
|
||||||
"section": "Features"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "fix",
|
|
||||||
"section": "Bug Fixes"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "perf",
|
|
||||||
"section": "Improvements"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
44
CHANGELOG.md
44
CHANGELOG.md
@@ -1,44 +0,0 @@
|
|||||||
# Changelog
|
|
||||||
|
|
||||||
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
||||||
|
|
||||||
## [5.2.0](https://github.com/cotes2020/jekyll-theme-chirpy/compare/v5.1.0...v5.2.0) (2022-06-09)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* add es-ES support to locales ([#533](https://github.com/cotes2020/jekyll-theme-chirpy/issues/533)) ([efe75ad](https://github.com/cotes2020/jekyll-theme-chirpy/commit/efe75adf2784956afb7a0b67f6634b146d9cb03b))
|
|
||||||
* add fr-FR support to locales ([#582](https://github.com/cotes2020/jekyll-theme-chirpy/issues/582)) ([94e8144](https://github.com/cotes2020/jekyll-theme-chirpy/commit/94e81447afa457b1a6b7e8f487c47502803556d7))
|
|
||||||
* add Vietnamese locale ([#517](https://github.com/cotes2020/jekyll-theme-chirpy/issues/517)) ([171463d](https://github.com/cotes2020/jekyll-theme-chirpy/commit/171463d76da9b7bc25dd327b8f0a868ea79e388b))
|
|
||||||
* add pt-BR support to locales ([c2c503f](https://github.com/cotes2020/jekyll-theme-chirpy/commit/c2c503f63336884282b6bda4ec0703d6ae76771b))
|
|
||||||
* add option to turn off PWA ([#527](https://github.com/cotes2020/jekyll-theme-chirpy/issues/527)) ([106c981](https://github.com/cotes2020/jekyll-theme-chirpy/commit/106c981bac71e7434204a77e1f0c9c61d6eb1509))
|
|
||||||
* **PWA:** add Service Worker update notification ([d127183](https://github.com/cotes2020/jekyll-theme-chirpy/commit/d127183b9774f6321e409acdb66bf8a85d8814be))
|
|
||||||
* support showing description of preview image ([2bd6efa](https://github.com/cotes2020/jekyll-theme-chirpy/commit/2bd6efa95a174ac44e30a3af1e57e6f40d6e0e3a))
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* alt is not a valid attribute for 'a' tag ([58928db](https://github.com/cotes2020/jekyll-theme-chirpy/commit/58928dbc9068db4e4cda4371eeae1865920dce6a))
|
|
||||||
* assets URL is missing `baseurl` in self-hosted mode ([#591](https://github.com/cotes2020/jekyll-theme-chirpy/issues/591)) ([54124d5](https://github.com/cotes2020/jekyll-theme-chirpy/commit/54124d5134995fce52e4c2fc0a5d4d1743d6264d))
|
|
||||||
* correct the `twitter:creator` of Twitter summary card ([96a16c8](https://github.com/cotes2020/jekyll-theme-chirpy/commit/96a16c868ede51e7dfa412de63ffa1e5a49add7f))
|
|
||||||
* correctly URL encode share links ([4c1c8d8](https://github.com/cotes2020/jekyll-theme-chirpy/commit/4c1c8d8b0eacecbbaa2d522bbdd6430f350ff760)), closes [#496](https://github.com/cotes2020/jekyll-theme-chirpy/issues/496)
|
|
||||||
* follow paginate_path config for pagination ([6900d9f](https://github.com/cotes2020/jekyll-theme-chirpy/commit/6900d9f2bc9380cbda4babf611c6eeff345291af))
|
|
||||||
* force checkout of `gh-pages` branch ([#544](https://github.com/cotes2020/jekyll-theme-chirpy/issues/544)) ([5402523](https://github.com/cotes2020/jekyll-theme-chirpy/commit/5402523ae52a3740bcc15df0b226b2612644945d))
|
|
||||||
* horizontal scroll for long equations ([#545](https://github.com/cotes2020/jekyll-theme-chirpy/issues/545)) ([30787fc](https://github.com/cotes2020/jekyll-theme-chirpy/commit/30787fc4cf151e955bb7afc26dfd859f1a06fce6))
|
|
||||||
* p is not allowed in span ([4f590e2](https://github.com/cotes2020/jekyll-theme-chirpy/commit/4f590e2bba0639751771211bc0d357828ae70404))
|
|
||||||
* remove whitespace from avatar URL ([#537](https://github.com/cotes2020/jekyll-theme-chirpy/issues/537)) ([0542b51](https://github.com/cotes2020/jekyll-theme-chirpy/commit/0542b5149c8287dca60e37f46ee36f31b43455e4))
|
|
||||||
* resume the preview image SEO tag ([#529](https://github.com/cotes2020/jekyll-theme-chirpy/issues/529)) ([b8d1bcd](https://github.com/cotes2020/jekyll-theme-chirpy/commit/b8d1bcd3dea0abd1afef7ef154a4501fbb18938d))
|
|
||||||
* script code should be in head or body, not in between ([2103191](https://github.com/cotes2020/jekyll-theme-chirpy/commit/2103191b2faf714a8e4418c7c347a1f942b51af8))
|
|
||||||
* spurious header closing tags ([59e9557](https://github.com/cotes2020/jekyll-theme-chirpy/commit/59e955745f02f9b57c65af70b0979cd4a98bf53f))
|
|
||||||
* table bypass refactoring when it contains IAL ([#519](https://github.com/cotes2020/jekyll-theme-chirpy/issues/519)) ([5d85ccb](https://github.com/cotes2020/jekyll-theme-chirpy/commit/5d85ccb9943aac88dbbefebe1c2234cdcbae5c53))
|
|
||||||
* **theme mode:** `SCSS` syntax error ([#588](https://github.com/cotes2020/jekyll-theme-chirpy/issues/588)) ([76a1b6a](https://github.com/cotes2020/jekyll-theme-chirpy/commit/76a1b6a068c369138422dcd18ba08ec8cc3749a6))
|
|
||||||
* use `jsonify` to generate valid json ([#521](https://github.com/cotes2020/jekyll-theme-chirpy/issues/521)) ([dd9d5a7](https://github.com/cotes2020/jekyll-theme-chirpy/commit/dd9d5a7207b746342d07176d8969dc4f2c380bf2))
|
|
||||||
* when the `site.img_cdn` is set to the local path, the preview-image path loses the `baseurl` ([9cefe58](https://github.com/cotes2020/jekyll-theme-chirpy/commit/9cefe58993d9ea3a3a28424e7ffd8e0911567c5c))
|
|
||||||
|
|
||||||
|
|
||||||
### Improvements
|
|
||||||
|
|
||||||
* avoid post pageviews from shifting while loading ([135a16f](https://github.com/cotes2020/jekyll-theme-chirpy/commit/135a16f13ee783d9308669ff9a824847a73c951c))
|
|
||||||
* avoid the layout shift for post datetime ([6d35f5f](https://github.com/cotes2020/jekyll-theme-chirpy/commit/6d35f5f8da044cfad071628bb53776de03efaae4))
|
|
||||||
* **categories:** support singular and plural forms of locale ([#595](https://github.com/cotes2020/jekyll-theme-chirpy/issues/595)) ([35cadf9](https://github.com/cotes2020/jekyll-theme-chirpy/commit/35cadf969dd0161ee62503e242c545f006f7072b))
|
|
||||||
* improve the responsive design for ultrawide screens ([#540](https://github.com/cotes2020/jekyll-theme-chirpy/issues/540)) ([5d6e8c5](https://github.com/cotes2020/jekyll-theme-chirpy/commit/5d6e8c5ef6aa71b4d2600c5305f6e8ba540557f7))
|
|
||||||
13
Gemfile
13
Gemfile
@@ -5,18 +5,19 @@ source "https://rubygems.org"
|
|||||||
gemspec
|
gemspec
|
||||||
|
|
||||||
group :test do
|
group :test do
|
||||||
gem "html-proofer", "~> 3.18"
|
gem "html-proofer", "~> 4.4"
|
||||||
end
|
end
|
||||||
|
|
||||||
# Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem
|
# Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem
|
||||||
# and associated library.
|
# and associated library.
|
||||||
install_if -> { RUBY_PLATFORM =~ %r!mingw|mswin|java! } do
|
platforms :mingw, :x64_mingw, :mswin, :jruby do
|
||||||
gem "tzinfo", "~> 1.2"
|
gem "tzinfo", ">= 1", "< 3"
|
||||||
gem "tzinfo-data"
|
gem "tzinfo-data"
|
||||||
end
|
end
|
||||||
|
|
||||||
# Performance-booster for watching directories on Windows
|
# Performance-booster for watching directories on Windows
|
||||||
gem "wdm", "~> 0.1.1", :install_if => Gem.win_platform?
|
gem "wdm", "~> 0.1.1", :platforms => [:mingw, :x64_mingw, :mswin]
|
||||||
|
|
||||||
# Jekyll <= 4.2.0 compatibility with Ruby 3.0
|
# Lock `http_parser.rb` gem to `v0.6.x` on JRuby builds since newer versions of the gem
|
||||||
gem "webrick", "~> 1.7"
|
# do not have a Java counterpart.
|
||||||
|
gem "http_parser.rb", "~> 0.6.0", :platforms => [:jruby]
|
||||||
|
|||||||
119
README.md
119
README.md
@@ -2,104 +2,93 @@
|
|||||||
|
|
||||||
# Chirpy Jekyll Theme
|
# Chirpy Jekyll Theme
|
||||||
|
|
||||||
A minimal, responsive, and powerful Jekyll theme for presenting professional writing.
|
A minimal, responsive, and feature-rich Jekyll theme for technical writing.
|
||||||
|
|
||||||
[](https://rubygems.org/gems/jekyll-theme-chirpy)
|
[][gem]
|
||||||
[](https://github.com/cotes2020/jekyll-theme-chirpy/actions?query=branch%3Amaster+event%3Apush)
|
[][ci]
|
||||||
[](https://www.codacy.com/gh/cotes2020/jekyll-theme-chirpy/dashboard?utm_source=github.com&utm_medium=referral&utm_content=cotes2020/jekyll-theme-chirpy&utm_campaign=Badge_Grade)
|
[][codacy]
|
||||||
[](https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/LICENSE)
|
[][license]
|
||||||
[](https://996.icu)
|
[](https://996.icu)
|
||||||
|
|
||||||
[**Live Demo →**](https://cotes2020.github.io/chirpy-demo)
|
[**Live Demo →**][demo]
|
||||||
|
|
||||||
[](https://cotes2020.github.io/chirpy-demo)
|
[][demo]
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
- Localized Layout
|
<details>
|
||||||
- Dark/Light Theme Mode
|
<summary>Click to expand/close details</summary>
|
||||||
- Pinned Posts
|
|
||||||
|
|
||||||
|
- Dark / Light Theme Mode
|
||||||
|
- Localized UI language
|
||||||
|
- Pinned Posts on Home Page
|
||||||
- Hierarchical Categories
|
- Hierarchical Categories
|
||||||
- Last Modified Date for Posts
|
- Trending Tags
|
||||||
- Table of Contents
|
- Table of Contents
|
||||||
- Auto-generated Related Posts
|
- Last Modified Date
|
||||||
- Syntax Highlighting
|
- Syntax Highlighting
|
||||||
- Mathematical Expressions
|
- Mathematical Expressions
|
||||||
- Mermaid Diagram & Flowchart
|
- Mermaid Diagrams & Flowcharts
|
||||||
- Disqus/Utterances/Giscus Comments
|
- Dark / Light Mode Images
|
||||||
- Search
|
- Embed Videos
|
||||||
|
- Disqus / Giscus / Utterances Comments
|
||||||
|
- Built-in Search
|
||||||
- Atom Feeds
|
- Atom Feeds
|
||||||
|
- PWA
|
||||||
- Google Analytics
|
- Google Analytics
|
||||||
- GA Pageviews Reporting
|
|
||||||
- SEO & Performance Optimization
|
- SEO & Performance Optimization
|
||||||
|
|
||||||
|
</details>
|
||||||
## Quick Start
|
|
||||||
|
|
||||||
Before starting, please follow the instructions in the [Jekyll Docs](https://jekyllrb.com/docs/installation/) to complete the installation of `Ruby`, `RubyGems`, `Jekyll`, and `Bundler`. In addition, [Git](https://git-scm.com/) is also required to be installed.
|
|
||||||
|
|
||||||
### Step 1. Creating a New Site
|
|
||||||
|
|
||||||
Create a new repository from the [**Chirpy Starter**](https://github.com/cotes2020/chirpy-starter/generate) and name it `<GH_USERNAME>.github.io`, where `GH_USERNAME` represents your GitHub username.
|
|
||||||
|
|
||||||
### Step 2. Installing Dependencies
|
|
||||||
|
|
||||||
Before running for the first time, go to the root directory of your site, and install dependencies as follows:
|
|
||||||
|
|
||||||
```console
|
|
||||||
$ bundle
|
|
||||||
```
|
|
||||||
|
|
||||||
### Step 3. Running Local Server
|
|
||||||
|
|
||||||
Run the following command in the root directory of the site:
|
|
||||||
|
|
||||||
```console
|
|
||||||
$ bundle exec jekyll s
|
|
||||||
```
|
|
||||||
|
|
||||||
Or run with Docker:
|
|
||||||
|
|
||||||
```console
|
|
||||||
$ docker run -it --rm \
|
|
||||||
--volume="$PWD:/srv/jekyll" \
|
|
||||||
-p 4000:4000 jekyll/jekyll \
|
|
||||||
jekyll serve
|
|
||||||
```
|
|
||||||
|
|
||||||
After a while, navigate to the site at <http://localhost:4000>.
|
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
|
||||||
For more details on usage, please refer to the tutorial on the [demo website](https://cotes2020.github.io/chirpy-demo/) / [wiki](https://github.com/cotes2020/jekyll-theme-chirpy/wiki). Note that the tutorial is based on the [latest tag](https://github.com/cotes2020/jekyll-theme-chirpy/tags), and the features of the default branch are usually ahead of the documentation.
|
To learn how to use, develop, and upgrade the project, please refer to the [Wiki][wiki].
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
Welcome to report bugs, improve code quality or submit a new feature. For more information, see [contributing guidelines](.github/CONTRIBUTING.md).
|
Contributions (_pull requests_, _issues_, and _discussions_) are what make the open-source community such an amazing place
|
||||||
|
to learn, inspire, and create. Any contributions you make are greatly appreciated.
|
||||||
|
For details, see the "[Contributing Guidelines][contribute-guide]".
|
||||||
|
|
||||||
## Credits
|
## Credits
|
||||||
|
|
||||||
This theme is mainly built with [Jekyll](https://jekyllrb.com/) ecosystem, [Bootstrap](https://getbootstrap.com/), [Font Awesome](https://fontawesome.com/) and some other wonderful tools (their copyright information can be found in the relevant files). The avatar and favicon design come from [Clipart Max](https://www.clipartmax.com/middle/m2i8b1m2K9Z5m2K9_ant-clipart-childrens-ant-cute/).
|
This project was built primarily with the [Jekyll][jekyllrb] ecosystem,
|
||||||
|
[Bootstrap][bootstrap], [Font Awesome][icons], and some other [wonderful tools][lib].
|
||||||
|
The avatar and favicon design from [Clipart Max][image].
|
||||||
|
|
||||||
:tada: Thanks to all the volunteers who contributed to this project, their GitHub IDs are on [this list](https://github.com/cotes2020/jekyll-theme-chirpy/graphs/contributors). Also, I won't forget those guys who submitted the issues or unmerged PR because they reported bugs, shared ideas, or inspired me to write more readable documentation.
|
Many thanks to the [contributors][contributors] who participated in the development
|
||||||
|
and to the folks who reported bugs or shared ideas.
|
||||||
|
|
||||||
Last but not least, thank [JetBrains][jb] for providing the OSS development license.
|
Last but not least, thanks to [JetBrains][jetbrains] for providing the _Open Source License_.
|
||||||
|
|
||||||
## Sponsoring
|
## Sponsoring
|
||||||
|
|
||||||
If you like this theme or find it helpful, please consider sponsoring me, because it will encourage and help me better maintain the project, I will be very grateful!
|
If you like this project or have built something through it, please consider sponsoring it, and your support would be greatly appreciated.
|
||||||
|
|
||||||
[](https://ko-fi.com/coteschung)
|
[][ko-fi]
|
||||||
[][cn-donation]
|
[][donation]
|
||||||
[][cn-donation]
|
[][donation]
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
This work is published under [MIT](https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/LICENSE) License.
|
This project is published under [MIT License][license].
|
||||||
|
|
||||||
<!-- ReadMe links -->
|
[gem]: https://rubygems.org/gems/jekyll-theme-chirpy
|
||||||
|
[ci]: https://github.com/cotes2020/jekyll-theme-chirpy/actions/workflows/ci.yml?query=event%3Apush+branch%3Amaster
|
||||||
[jb]: https://www.jetbrains.com/?from=jekyll-theme-chirpy
|
[codacy]: https://app.codacy.com/gh/cotes2020/jekyll-theme-chirpy/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade
|
||||||
[cn-donation]: https://cotes.gitee.io/alipay-wechat-donation/
|
[license]: https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/LICENSE
|
||||||
|
[jekyllrb]: https://jekyllrb.com/
|
||||||
|
[bootstrap]: https://getbootstrap.com/
|
||||||
|
[icons]: https://fontawesome.com/
|
||||||
|
[image]: https://www.clipartmax.com/middle/m2i8b1m2K9Z5m2K9_ant-clipart-childrens-ant-cute/
|
||||||
|
[demo]: https://cotes2020.github.io/chirpy-demo/
|
||||||
|
[wiki]: https://github.com/cotes2020/jekyll-theme-chirpy/wiki
|
||||||
|
[contribute-guide]: https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/docs/CONTRIBUTING.md
|
||||||
|
[contributors]: https://github.com/cotes2020/jekyll-theme-chirpy/graphs/contributors
|
||||||
|
[lib]: https://github.com/cotes2020/chirpy-static-assets
|
||||||
|
[jetbrains]: https://www.jetbrains.com/?from=jekyll-theme-chirpy
|
||||||
|
[ko-fi]: https://ko-fi.com/coteschung/
|
||||||
|
[donation]: https://sponsor.cotes.page/
|
||||||
|
|||||||
94
_config.yml
94
_config.yml
@@ -3,64 +3,54 @@
|
|||||||
# Import the theme
|
# Import the theme
|
||||||
theme: jekyll-theme-chirpy
|
theme: jekyll-theme-chirpy
|
||||||
|
|
||||||
# Change the following value to '/PROJECT_NAME' ONLY IF your site type is GitHub Pages Project sites
|
|
||||||
# and doesn't have a custom domain.
|
|
||||||
baseurl: ''
|
|
||||||
|
|
||||||
# The language of the webpage › http://www.lingoes.net/en/translator/langcode.htm
|
# The language of the webpage › http://www.lingoes.net/en/translator/langcode.htm
|
||||||
# If it has the same name as one of the files in folder `_data/locales`, the layout language will also be changed,
|
# If it has the same name as one of the files in folder `_data/locales`, the layout language will also be changed,
|
||||||
# otherwise, the layout language will use the default value of 'en'.
|
# otherwise, the layout language will use the default value of 'en'.
|
||||||
lang: en
|
lang: en
|
||||||
|
|
||||||
# Additional parameters for datetime localization, optional. › https://github.com/iamkun/dayjs/tree/dev/src/locale
|
# Change to your timezone › https://kevinnovak.github.io/Time-Zone-Picker
|
||||||
prefer_datetime_locale:
|
|
||||||
|
|
||||||
# Change to your timezone › http://www.timezoneconverter.com/cgi-bin/findzone/findzone
|
|
||||||
timezone: Asia/Shanghai
|
timezone: Asia/Shanghai
|
||||||
|
|
||||||
# jekyll-seo-tag settings › https://github.com/jekyll/jekyll-seo-tag/blob/master/docs/usage.md
|
# jekyll-seo-tag settings › https://github.com/jekyll/jekyll-seo-tag/blob/master/docs/usage.md
|
||||||
# ↓ --------------------------
|
# ↓ --------------------------
|
||||||
|
|
||||||
title: Chirpy # the main title
|
title: Chirpy # the main title
|
||||||
|
|
||||||
tagline: A text-focused Jekyll theme # it will display as the sub-title
|
tagline: A text-focused Jekyll theme # it will display as the sub-title
|
||||||
|
|
||||||
description: >- # used by seo meta and the atom feed
|
description: >- # used by seo meta and the atom feed
|
||||||
A minimal, responsive, and powerful Jekyll theme for presenting professional writing.
|
A minimal, responsive and feature-rich Jekyll theme for technical writing.
|
||||||
|
|
||||||
# fill in the protocol & hostname for your site, e.g., 'https://username.github.io'
|
# Fill in the protocol & hostname for your site.
|
||||||
url: ''
|
# e.g. 'https://username.github.io', note that it does not end with a '/'.
|
||||||
|
url: ""
|
||||||
|
|
||||||
github:
|
github:
|
||||||
username: github_username # change to your github username
|
username: github_username # change to your github username
|
||||||
|
|
||||||
twitter:
|
twitter:
|
||||||
username: twitter_username # change to your twitter username
|
username: twitter_username # change to your twitter username
|
||||||
|
|
||||||
social:
|
social:
|
||||||
# Change to your full name.
|
# Change to your full name.
|
||||||
# It will be displayed as the default author of the posts and the copyright owner in the Footer
|
# It will be displayed as the default author of the posts and the copyright owner in the Footer
|
||||||
name: your_full_name
|
name: your_full_name
|
||||||
email: example@doamin.com # change to your email address
|
email: example@domain.com # change to your email address
|
||||||
links:
|
links:
|
||||||
# The first element serves as the copyright owner's link
|
# The first element serves as the copyright owner's link
|
||||||
- https://twitter.com/username # change to your twitter homepage
|
- https://twitter.com/username # change to your twitter homepage
|
||||||
- https://github.com/username # change to your github homepage
|
- https://github.com/username # change to your github homepage
|
||||||
# Uncomment below to add more social links
|
# Uncomment below to add more social links
|
||||||
# - https://www.facebook.com/username
|
# - https://www.facebook.com/username
|
||||||
# - https://www.linkedin.com/in/username
|
# - https://www.linkedin.com/in/username
|
||||||
|
|
||||||
google_site_verification: # fill in to your verification string
|
google_site_verification: # fill in to your verification string
|
||||||
|
|
||||||
# ↑ --------------------------
|
# ↑ --------------------------
|
||||||
# The end of `jekyll-seo-tag` settings
|
# The end of `jekyll-seo-tag` settings
|
||||||
|
|
||||||
google_analytics:
|
google_analytics:
|
||||||
id: # fill in your Google Analytics ID
|
id: # fill in your Google Analytics ID
|
||||||
# Google Analytics pageviews report settings
|
|
||||||
pv:
|
|
||||||
proxy_endpoint: # fill in the Google Analytics superProxy endpoint of Google App Engine
|
|
||||||
cache_path: # the local PV cache data, friendly to visitors from GFW region
|
|
||||||
|
|
||||||
# Prefer color scheme setting.
|
# Prefer color scheme setting.
|
||||||
#
|
#
|
||||||
@@ -73,58 +63,62 @@ google_analytics:
|
|||||||
# light - Use the light color scheme
|
# light - Use the light color scheme
|
||||||
# dark - Use the dark color scheme
|
# dark - Use the dark color scheme
|
||||||
#
|
#
|
||||||
theme_mode: # [light|dark]
|
theme_mode: # [light|dark]
|
||||||
|
|
||||||
# The CDN endpoint for images.
|
# The CDN endpoint for images.
|
||||||
# Notice that once it is assigned, the CDN url
|
# Notice that once it is assigned, the CDN url
|
||||||
# will be added to all image (site avatar & posts' images) paths starting with '/'
|
# will be added to all image (site avatar & posts' images) paths starting with '/'
|
||||||
#
|
#
|
||||||
# e.g. 'https://cdn.com'
|
# e.g. 'https://cdn.com'
|
||||||
img_cdn: 'https://raw.githubusercontent.com/cotes2020/chirpy-images/main'
|
img_cdn: "https://chirpy-img.netlify.app"
|
||||||
|
|
||||||
# the avatar on sidebar, support local or CORS resources
|
# the avatar on sidebar, support local or CORS resources
|
||||||
avatar: '/commons/avatar.jpg'
|
avatar: "/commons/avatar.jpg"
|
||||||
|
|
||||||
# boolean type, the global switch for ToC in posts.
|
# boolean type, the global switch for TOC in posts.
|
||||||
toc: true
|
toc: true
|
||||||
|
|
||||||
comments:
|
comments:
|
||||||
active: # The global switch for posts comments, e.g., 'disqus'. Keep it empty means disable
|
active: # The global switch for posts comments, e.g., 'disqus'. Keep it empty means disable
|
||||||
# The active options are as follows:
|
# The active options are as follows:
|
||||||
disqus:
|
disqus:
|
||||||
shortname: # fill with the Disqus shortname. › https://help.disqus.com/en/articles/1717111-what-s-a-shortname
|
shortname: # fill with the Disqus shortname. › https://help.disqus.com/en/articles/1717111-what-s-a-shortname
|
||||||
# utterances settings › https://utteranc.es/
|
# utterances settings › https://utteranc.es/
|
||||||
utterances:
|
utterances:
|
||||||
repo: # <gh-username>/<repo>
|
repo: # <gh-username>/<repo>
|
||||||
issue_term: # < url | pathname | title | ...>
|
issue_term: # < url | pathname | title | ...>
|
||||||
# Giscus options › https://giscus.app
|
# Giscus options › https://giscus.app
|
||||||
giscus:
|
giscus:
|
||||||
repo: # <gh-username>/<repo>
|
repo: # <gh-username>/<repo>
|
||||||
repo_id:
|
repo_id:
|
||||||
category:
|
category:
|
||||||
category_id:
|
category_id:
|
||||||
mapping: # optional, default to 'pathname'
|
mapping: # optional, default to 'pathname'
|
||||||
input_position: # optional, default to 'bottom'
|
input_position: # optional, default to 'bottom'
|
||||||
lang: # optional, default to the value of `site.lang`
|
lang: # optional, default to the value of `site.lang`
|
||||||
|
reactions_enabled: # optional, default to the value of `1`
|
||||||
|
|
||||||
# Self-hosted static assets, optional › https://github.com/cotes2020/chirpy-static-assets
|
# Self-hosted static assets, optional › https://github.com/cotes2020/chirpy-static-assets
|
||||||
assets:
|
assets:
|
||||||
self_host:
|
self_host:
|
||||||
enabled: # boolean, keep empty means false
|
enabled: # boolean, keep empty means false
|
||||||
# specify the Jekyll environment, empty means both
|
# specify the Jekyll environment, empty means both
|
||||||
# only works if `assets.self_host.enabled` is 'true'
|
# only works if `assets.self_host.enabled` is 'true'
|
||||||
env: # [development|production]
|
env: # [development|production]
|
||||||
|
|
||||||
pwa:
|
pwa:
|
||||||
enabled: true # the option for PWA feature
|
enabled: true # the option for PWA feature
|
||||||
|
|
||||||
paginate: 10
|
paginate: 10
|
||||||
|
|
||||||
|
# The base URL of your site
|
||||||
|
baseurl: ""
|
||||||
|
|
||||||
# ------------ The following options are not recommended to be modified ------------------
|
# ------------ The following options are not recommended to be modified ------------------
|
||||||
|
|
||||||
kramdown:
|
kramdown:
|
||||||
syntax_highlighter: rouge
|
syntax_highlighter: rouge
|
||||||
syntax_highlighter_opts: # Rouge Options › https://github.com/jneen/rouge#full-options
|
syntax_highlighter_opts: # Rouge Options › https://github.com/jneen/rouge#full-options
|
||||||
css_class: highlight
|
css_class: highlight
|
||||||
# default_lang: console
|
# default_lang: console
|
||||||
span:
|
span:
|
||||||
@@ -140,12 +134,12 @@ collections:
|
|||||||
|
|
||||||
defaults:
|
defaults:
|
||||||
- scope:
|
- scope:
|
||||||
path: '' # An empty string here means all files in the project
|
path: "" # An empty string here means all files in the project
|
||||||
type: posts
|
type: posts
|
||||||
values:
|
values:
|
||||||
layout: post
|
layout: post
|
||||||
comments: true # Enable comments in posts.
|
comments: true # Enable comments in posts.
|
||||||
toc: true # Display TOC column in posts.
|
toc: true # Display TOC column in posts.
|
||||||
# DO NOT modify the following parameter unless you are confident enough
|
# DO NOT modify the following parameter unless you are confident enough
|
||||||
# to update the code of all other post links in this project.
|
# to update the code of all other post links in this project.
|
||||||
permalink: /posts/:title/
|
permalink: /posts/:title/
|
||||||
@@ -154,8 +148,8 @@ defaults:
|
|||||||
values:
|
values:
|
||||||
comments: false
|
comments: false
|
||||||
- scope:
|
- scope:
|
||||||
path: ''
|
path: ""
|
||||||
type: tabs # see `site.collections`
|
type: tabs # see `site.collections`
|
||||||
values:
|
values:
|
||||||
layout: page
|
layout: page
|
||||||
permalink: /:title/
|
permalink: /:title/
|
||||||
@@ -181,13 +175,13 @@ compress_html:
|
|||||||
envs: [development]
|
envs: [development]
|
||||||
|
|
||||||
exclude:
|
exclude:
|
||||||
- '*.gem'
|
- "*.gem"
|
||||||
- '*.gemspec'
|
- "*.gemspec"
|
||||||
|
- docs
|
||||||
- tools
|
- tools
|
||||||
- README.md
|
- README.md
|
||||||
- LICENSE
|
- LICENSE
|
||||||
- gulpfile.js
|
- rollup.config.js
|
||||||
- node_modules
|
|
||||||
- package*.json
|
- package*.json
|
||||||
|
|
||||||
jekyll-archives:
|
jekyll-archives:
|
||||||
|
|||||||
@@ -1,62 +0,0 @@
|
|||||||
# CDNs
|
|
||||||
|
|
||||||
cdns:
|
|
||||||
# Google Fonts
|
|
||||||
- url: https://fonts.googleapis.com
|
|
||||||
- url: https://fonts.gstatic.com
|
|
||||||
args: crossorigin
|
|
||||||
- url: https://fonts.googleapis.com
|
|
||||||
# jsDelivr CDN
|
|
||||||
- url: https://cdn.jsdelivr.net
|
|
||||||
|
|
||||||
# fonts
|
|
||||||
|
|
||||||
webfonts: https://fonts.googleapis.com/css2?family=Lato&family=Source+Sans+Pro:wght@400;600;700;900&display=swap
|
|
||||||
|
|
||||||
# Libraries
|
|
||||||
|
|
||||||
jquery:
|
|
||||||
js: https://cdn.jsdelivr.net/npm/jquery@3/dist/jquery.min.js
|
|
||||||
|
|
||||||
bootstrap:
|
|
||||||
css: https://cdn.jsdelivr.net/npm/bootstrap@4/dist/css/bootstrap.min.css
|
|
||||||
js: https://cdn.jsdelivr.net/npm/bootstrap@4/dist/js/bootstrap.bundle.min.js
|
|
||||||
|
|
||||||
bootstrap-toc:
|
|
||||||
css: https://cdn.jsdelivr.net/gh/afeld/bootstrap-toc@1.0.1/dist/bootstrap-toc.min.css
|
|
||||||
js: https://cdn.jsdelivr.net/gh/afeld/bootstrap-toc@1.0.1/dist/bootstrap-toc.min.js
|
|
||||||
|
|
||||||
fontawesome:
|
|
||||||
css: https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5.11.2/css/all.min.css
|
|
||||||
|
|
||||||
search:
|
|
||||||
js: https://cdn.jsdelivr.net/npm/simple-jekyll-search@1.10.0/dest/simple-jekyll-search.min.js
|
|
||||||
|
|
||||||
mermaid:
|
|
||||||
js: https://cdn.jsdelivr.net/npm/mermaid@8/dist/mermaid.min.js
|
|
||||||
|
|
||||||
dayjs:
|
|
||||||
js:
|
|
||||||
common: https://cdn.jsdelivr.net/npm/dayjs@1/dayjs.min.js
|
|
||||||
locale: https://cdn.jsdelivr.net/npm/dayjs@1/locale/:LOCALE.min.js
|
|
||||||
relativeTime: https://cdn.jsdelivr.net/npm/dayjs@1/plugin/relativeTime.min.js
|
|
||||||
localizedFormat: https://cdn.jsdelivr.net/npm/dayjs@1/plugin/localizedFormat.min.js
|
|
||||||
|
|
||||||
countup:
|
|
||||||
js: https://cdn.jsdelivr.net/npm/countup.js@1.9.3/dist/countUp.min.js
|
|
||||||
|
|
||||||
magnific-popup:
|
|
||||||
css: https://cdn.jsdelivr.net/npm/magnific-popup@1/dist/magnific-popup.min.css
|
|
||||||
js: https://cdn.jsdelivr.net/npm/magnific-popup@1/dist/jquery.magnific-popup.min.js
|
|
||||||
|
|
||||||
lozad:
|
|
||||||
js: https://cdn.jsdelivr.net/npm/lozad/dist/lozad.min.js
|
|
||||||
|
|
||||||
clipboard:
|
|
||||||
js: https://cdn.jsdelivr.net/npm/clipboard@2/dist/clipboard.min.js
|
|
||||||
|
|
||||||
polyfill:
|
|
||||||
js: https://polyfill.io/v3/polyfill.min.js?features=es6
|
|
||||||
|
|
||||||
mathjax:
|
|
||||||
js: https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js
|
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
# fonts
|
|
||||||
|
|
||||||
webfonts: /assets/lib/fonts/main.css
|
|
||||||
|
|
||||||
# Libraries
|
|
||||||
|
|
||||||
jquery:
|
|
||||||
js: /assets/lib/jquery-3.6.0/jquery.min.js
|
|
||||||
|
|
||||||
bootstrap:
|
|
||||||
css: /assets/lib/bootstrap-4.6.1/bootstrap.min.css
|
|
||||||
js: /assets/lib/bootstrap-4.6.1/bootstrap.bundle.min.js
|
|
||||||
|
|
||||||
bootstrap-toc:
|
|
||||||
css: /assets/lib/bootstrap-toc-1.0.1/bootstrap-toc.min.css
|
|
||||||
js: /assets/lib/bootstrap-toc-1.0.1/bootstrap-toc.min.js
|
|
||||||
|
|
||||||
fontawesome:
|
|
||||||
css: /assets/lib/fontawesome-free-5.15.4/css/all.min.css
|
|
||||||
|
|
||||||
search:
|
|
||||||
js: /assets/lib/simple-jekyll-search-1.10.0/simple-jekyll-search.min.js
|
|
||||||
|
|
||||||
mermaid:
|
|
||||||
js: /assets/lib/mermaid-8.13.10/mermaid.min.js
|
|
||||||
|
|
||||||
dayjs:
|
|
||||||
js:
|
|
||||||
common: /assets/lib/dayjs-1.10.7/dayjs.min.js
|
|
||||||
locale: /assets/lib/dayjs-1.10.7/locale/en.min.js
|
|
||||||
relativeTime: /assets/lib/dayjs-1.10.7/plugin/relativeTime.min.js
|
|
||||||
localizedFormat: /assets/lib/dayjs-1.10.7/plugin/localizedFormat.min.js
|
|
||||||
|
|
||||||
countup:
|
|
||||||
js: /assets/lib/countup.js-1.9.3/countUp.min.js
|
|
||||||
|
|
||||||
magnific-popup:
|
|
||||||
css: /assets/lib/magnific-popup-1.1.0/magnific-popup.css
|
|
||||||
js: /assets/lib/magnific-popup-1.1.0/jquery.magnific-popup.min.js
|
|
||||||
|
|
||||||
lozad:
|
|
||||||
js: /assets/lib/lozad-1.16.0/lozad.min.js
|
|
||||||
|
|
||||||
clipboard:
|
|
||||||
js: /assets/lib/clipboard-2.0.9/clipboard.min.js
|
|
||||||
|
|
||||||
polyfill:
|
|
||||||
js: /assets/lib/polyfill-v3-es6/polyfill.min.js
|
|
||||||
|
|
||||||
mathjax:
|
|
||||||
js: /assets/lib/mathjax-3.2.0/tex-chtml.js
|
|
||||||
@@ -1,30 +1,28 @@
|
|||||||
# The contact options.
|
# The contact options.
|
||||||
|
|
||||||
-
|
- type: github
|
||||||
type: github
|
icon: "fab fa-github"
|
||||||
icon: 'fab fa-github'
|
|
||||||
-
|
|
||||||
type: twitter
|
|
||||||
icon: 'fab fa-twitter'
|
|
||||||
-
|
|
||||||
type: email
|
|
||||||
icon: 'fas fa-envelope'
|
|
||||||
noblank: true # open link in current tab
|
|
||||||
-
|
|
||||||
type: rss
|
|
||||||
icon: 'fas fa-rss'
|
|
||||||
noblank: true
|
|
||||||
|
|
||||||
|
- type: twitter
|
||||||
|
icon: "fa-brands fa-x-twitter"
|
||||||
|
|
||||||
|
- type: email
|
||||||
|
icon: "fas fa-envelope"
|
||||||
|
noblank: true # open link in current tab
|
||||||
|
|
||||||
|
- type: rss
|
||||||
|
icon: "fas fa-rss"
|
||||||
|
noblank: true
|
||||||
# Uncomment and complete the url below to enable more contact options
|
# Uncomment and complete the url below to enable more contact options
|
||||||
# -
|
#
|
||||||
# type: mastodon
|
# - type: mastodon
|
||||||
# icon: 'fab fa-mastodon' # icons powered by <https://fontawesome.com/>
|
# icon: 'fab fa-mastodon' # icons powered by <https://fontawesome.com/>
|
||||||
# url: '' # Fill with your mastodon account page
|
# url: '' # Fill with your Mastodon account page, rel="me" will be applied for verification
|
||||||
# -
|
#
|
||||||
# type: linkedin
|
# - type: linkedin
|
||||||
# icon: 'fab fa-linkedin' # icons powered by <https://fontawesome.com/>
|
# icon: 'fab fa-linkedin' # icons powered by <https://fontawesome.com/>
|
||||||
# url: '' # Fill with your Linkedin homepage
|
# url: '' # Fill with your Linkedin homepage
|
||||||
# -
|
#
|
||||||
# type: stack-overflow
|
# - type: stack-overflow
|
||||||
# icon: 'fab fa-stack-overflow'
|
# icon: 'fab fa-stack-overflow'
|
||||||
# url: '' # Fill with your stackoverflow homepage
|
# url: '' # Fill with your stackoverflow homepage
|
||||||
|
|||||||
91
_data/locales/ar.yml
Normal file
91
_data/locales/ar.yml
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
# The layout text of site
|
||||||
|
|
||||||
|
# ----- Commons label -----
|
||||||
|
|
||||||
|
layout:
|
||||||
|
post: منشور
|
||||||
|
category: فئة
|
||||||
|
tag: وسم
|
||||||
|
|
||||||
|
# The tabs of sidebar
|
||||||
|
tabs:
|
||||||
|
# format: <filename_without_extension>: <value>
|
||||||
|
home: الرئيسية
|
||||||
|
categories: الفئات
|
||||||
|
tags: الوسوم
|
||||||
|
archives: الأرشيف
|
||||||
|
about: حول
|
||||||
|
|
||||||
|
# the text displayed in the search bar & search results
|
||||||
|
search:
|
||||||
|
hint: بحث
|
||||||
|
cancel: إلغاء
|
||||||
|
no_results: نأسف! لا يوجد نتائج.
|
||||||
|
|
||||||
|
panel:
|
||||||
|
lastmod: المحدثة مؤخرا
|
||||||
|
trending_tags: الوسوم الشائعة
|
||||||
|
toc: محتويات
|
||||||
|
|
||||||
|
copyright:
|
||||||
|
# Shown at the bottom of the post
|
||||||
|
license:
|
||||||
|
template: هذا المنشور تحت ترخيص :LICENSE_NAME بواسطة المؤلف.
|
||||||
|
name: CC BY 4.0
|
||||||
|
link: https://creativecommons.org/licenses/by/4.0/
|
||||||
|
|
||||||
|
# Displayed in the footer
|
||||||
|
brief: بعض الحقوق محفوظة.
|
||||||
|
verbose: >-
|
||||||
|
ما لم يذكر خلاف ذلك ، يتم ترخيص منشورات المدونة على هذا الموقع
|
||||||
|
بموجب ترخيص Creative Commons Attribution 4.0 International (CC BY 4.0) من قبل المؤلف.
|
||||||
|
|
||||||
|
meta: باستخدام :PLATFORM السمة :THEME
|
||||||
|
|
||||||
|
not_found:
|
||||||
|
statment: عذرا, الرابط التالي غير صالح أو انه يشير إلى صفحة غير موجودة.
|
||||||
|
|
||||||
|
notification:
|
||||||
|
update_found: يتوفر اصدار جديد للمحتوى.
|
||||||
|
update: تحديث
|
||||||
|
|
||||||
|
# ----- Posts related labels -----
|
||||||
|
|
||||||
|
post:
|
||||||
|
written_by: بواسطة
|
||||||
|
posted: نشّر
|
||||||
|
updated: حدّث
|
||||||
|
words: كلمات
|
||||||
|
pageview_measure: مشاهدات
|
||||||
|
read_time:
|
||||||
|
unit: دقيقة
|
||||||
|
prompt: قراءة
|
||||||
|
relate_posts: إقرأ المزيد
|
||||||
|
share: شارك
|
||||||
|
button:
|
||||||
|
next: الأجدد
|
||||||
|
previous: الأقدم
|
||||||
|
copy_code:
|
||||||
|
succeed: تم النسخ!
|
||||||
|
share_link:
|
||||||
|
title: أنسخ الرابط
|
||||||
|
succeed: تم نسخ الرابط بنجاح!
|
||||||
|
|
||||||
|
# Date time format.
|
||||||
|
# See: <http://strftime.net/>, <https://day.js.org/docs/en/display/format>
|
||||||
|
df:
|
||||||
|
post:
|
||||||
|
strftime: "%b %e, %Y"
|
||||||
|
dayjs: "ll"
|
||||||
|
archives:
|
||||||
|
strftime: "%b"
|
||||||
|
dayjs: "MMM"
|
||||||
|
|
||||||
|
# categories page
|
||||||
|
categories:
|
||||||
|
category_measure:
|
||||||
|
singular: فئة
|
||||||
|
plural: فئات
|
||||||
|
post_measure:
|
||||||
|
singular: منشور
|
||||||
|
plural: منشورات
|
||||||
81
_data/locales/bg-BG.yml
Normal file
81
_data/locales/bg-BG.yml
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
# The layout text of site
|
||||||
|
|
||||||
|
# ----- Commons label -----
|
||||||
|
|
||||||
|
layout:
|
||||||
|
post: Публикация
|
||||||
|
category: Категория
|
||||||
|
tag: Таг
|
||||||
|
|
||||||
|
# The tabs of sidebar
|
||||||
|
tabs:
|
||||||
|
# format: <filename_without_extension>: <value>
|
||||||
|
home: Начало
|
||||||
|
categories: Категории
|
||||||
|
tags: Тагове
|
||||||
|
archives: Архив
|
||||||
|
about: За мен
|
||||||
|
|
||||||
|
# the text displayed in the search bar & search results
|
||||||
|
search:
|
||||||
|
hint: търси
|
||||||
|
cancel: Отмени
|
||||||
|
no_results: Упс! Не са намерени резултати.
|
||||||
|
|
||||||
|
panel:
|
||||||
|
lastmod: Наскоро обновени
|
||||||
|
trending_tags: Популярни тагове
|
||||||
|
toc: Съдържание
|
||||||
|
|
||||||
|
copyright:
|
||||||
|
# Shown at the bottom of the post
|
||||||
|
license:
|
||||||
|
template: Тази публикация е лицензирана под :LICENSE_NAME от автора.
|
||||||
|
name: CC BY 4.0
|
||||||
|
link: https://creativecommons.org/licenses/by/4.0/
|
||||||
|
|
||||||
|
# Displayed in the footer
|
||||||
|
brief: Някои права запазени.
|
||||||
|
verbose: >-
|
||||||
|
Освен ако не е посочено друго, публикациите в блога на този сайт са лицензирани
|
||||||
|
под лиценза Creative Commons Attribution 4.0 (CC BY 4.0) от автора.
|
||||||
|
|
||||||
|
meta: Създадено чрез :PLATFORM и :THEME тема
|
||||||
|
|
||||||
|
not_found:
|
||||||
|
statment: Съжалявам, но на този URL адрес няма налично съдържание.
|
||||||
|
|
||||||
|
notification:
|
||||||
|
update_found: Налична е нова версия на съдържанието.
|
||||||
|
update: Обнови
|
||||||
|
|
||||||
|
# ----- Posts related labels -----
|
||||||
|
|
||||||
|
post:
|
||||||
|
written_by: Автор
|
||||||
|
posted: Публикувана
|
||||||
|
updated: Обновена
|
||||||
|
words: думи
|
||||||
|
pageview_measure: преглеждания
|
||||||
|
read_time:
|
||||||
|
unit: мин
|
||||||
|
prompt: четиво
|
||||||
|
relate_posts: Още за четене
|
||||||
|
share: Споделете
|
||||||
|
button:
|
||||||
|
next: По-нови
|
||||||
|
previous: По-стари
|
||||||
|
copy_code:
|
||||||
|
succeed: Копирано!
|
||||||
|
share_link:
|
||||||
|
title: Копирай линк
|
||||||
|
succeed: Линкът е копиран успешно!
|
||||||
|
|
||||||
|
# categories page
|
||||||
|
categories:
|
||||||
|
category_measure:
|
||||||
|
singular: категория
|
||||||
|
plural: категории
|
||||||
|
post_measure:
|
||||||
|
singular: публикация
|
||||||
|
plural: публикации
|
||||||
89
_data/locales/cs-CZ.yml
Normal file
89
_data/locales/cs-CZ.yml
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
# The layout text of site
|
||||||
|
|
||||||
|
# ----- Commons label -----
|
||||||
|
|
||||||
|
layout:
|
||||||
|
post: Příspěvek
|
||||||
|
category: Kategorie
|
||||||
|
tag: Štítek
|
||||||
|
|
||||||
|
# The tabs of sidebar
|
||||||
|
tabs:
|
||||||
|
# format: <filename_without_extension>: <value>
|
||||||
|
home: Domů
|
||||||
|
categories: Kategorie
|
||||||
|
tags: Štítky
|
||||||
|
archives: Archivy
|
||||||
|
about: O mně
|
||||||
|
|
||||||
|
# the text displayed in the search bar & search results
|
||||||
|
search:
|
||||||
|
hint: hledat
|
||||||
|
cancel: Zrušit
|
||||||
|
no_results: Ups! Žádný výsledek nenalezen.
|
||||||
|
|
||||||
|
panel:
|
||||||
|
lastmod: Nedávno aktualizováno
|
||||||
|
trending_tags: Trendy štítky
|
||||||
|
toc: Obsah
|
||||||
|
|
||||||
|
copyright:
|
||||||
|
# Shown at the bottom of the post
|
||||||
|
license:
|
||||||
|
template: Tento příspěvek je licencován pod :LICENSE_NAME autorem.
|
||||||
|
name: CC BY 4.0
|
||||||
|
link: https://creativecommons.org/licenses/by/4.0/
|
||||||
|
|
||||||
|
# Displayed in the footer
|
||||||
|
brief: Některá práva vyhrazena.
|
||||||
|
verbose: >-
|
||||||
|
Pokud není uvedeno jinak, jsou příspěvky na tomto webu licencovány
|
||||||
|
pod licencí Creative Commons Attribution 4.0 International (CC BY 4.0) Licence autora.
|
||||||
|
|
||||||
|
meta: Použití :PLATFORM s motivem :THEME
|
||||||
|
|
||||||
|
not_found:
|
||||||
|
statment: Omlouváme se, adresu URL jsme špatně umístili nebo odkazuje na něco, co neexistuje.
|
||||||
|
|
||||||
|
notification:
|
||||||
|
update_found: Je k dispozici nová verze obsahu.
|
||||||
|
update: Aktualizace
|
||||||
|
|
||||||
|
# ----- Posts related labels -----
|
||||||
|
|
||||||
|
post:
|
||||||
|
written_by: Od
|
||||||
|
posted: Zveřejněno
|
||||||
|
updated: Aktualizováno
|
||||||
|
words: slova
|
||||||
|
pageview_measure: zhlednutí
|
||||||
|
read_time:
|
||||||
|
unit: minut
|
||||||
|
prompt: čtení
|
||||||
|
relate_posts: Další čtení
|
||||||
|
share: Sdílet
|
||||||
|
button:
|
||||||
|
next: Novější
|
||||||
|
previous: Starší
|
||||||
|
copy_code:
|
||||||
|
succeed: Zkopírováno!
|
||||||
|
share_link:
|
||||||
|
title: Kopírovat odkaz
|
||||||
|
succeed: Zkopírováno!
|
||||||
|
|
||||||
|
# Date time format.
|
||||||
|
# See: <http://strftime.net/>, <https://day.js.org/docs/en/display/format>
|
||||||
|
df:
|
||||||
|
post:
|
||||||
|
strftime: "%b %e, %Y"
|
||||||
|
dayjs: "ll"
|
||||||
|
archives:
|
||||||
|
strftime: "%b"
|
||||||
|
dayjs: "MMM"
|
||||||
|
|
||||||
|
# categories page
|
||||||
|
categories:
|
||||||
|
category_measure: kategorie
|
||||||
|
post_measure:
|
||||||
|
singular: příspěvěk
|
||||||
|
plural: příspěvky
|
||||||
87
_data/locales/de-DE.yml
Normal file
87
_data/locales/de-DE.yml
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
# The layout text of site
|
||||||
|
|
||||||
|
# ----- Commons label -----
|
||||||
|
|
||||||
|
layout:
|
||||||
|
post: Eintrag
|
||||||
|
category: Kategorie
|
||||||
|
tag: Tag
|
||||||
|
|
||||||
|
# The tabs of sidebar
|
||||||
|
tabs:
|
||||||
|
# format: <filename_without_extension>: <value>
|
||||||
|
home: Startseite
|
||||||
|
categories: Kategorien
|
||||||
|
tags: Tags
|
||||||
|
archives: Archiv
|
||||||
|
about: Über
|
||||||
|
|
||||||
|
# the text displayed in the search bar & search results
|
||||||
|
search:
|
||||||
|
hint: Suche
|
||||||
|
cancel: Abbrechen
|
||||||
|
no_results: Ups! Keine Einträge gefunden.
|
||||||
|
|
||||||
|
panel:
|
||||||
|
lastmod: Kürzlich aktualisiert
|
||||||
|
trending_tags: Beliebte Tags
|
||||||
|
toc: Inhalt
|
||||||
|
|
||||||
|
copyright:
|
||||||
|
# Shown at the bottom of the post
|
||||||
|
license:
|
||||||
|
template: Dieser Eintrag ist vom Autor unter :LICENSE_NAME lizensiert.
|
||||||
|
name: CC BY 4.0
|
||||||
|
link: https://creativecommons.org/licenses/by/4.0/
|
||||||
|
|
||||||
|
# Displayed in the footer
|
||||||
|
brief: Einige Rechte vorbehalten.
|
||||||
|
verbose: >-
|
||||||
|
Alle Einträge auf dieser Seite stehen, soweit nicht anders angegeben, unter der Lizenz Creative Commons Attribution 4.0 (CC BY 4.0).
|
||||||
|
|
||||||
|
meta: Powered by :PLATFORM with :THEME theme
|
||||||
|
|
||||||
|
not_found:
|
||||||
|
statment: Entschuldigung, dieser Link verweist auf keine vorhandene Ressource.
|
||||||
|
|
||||||
|
notification:
|
||||||
|
update_found: Eine neue Version ist verfügbar.
|
||||||
|
update: Neue Version
|
||||||
|
|
||||||
|
# ----- Posts related labels -----
|
||||||
|
|
||||||
|
post:
|
||||||
|
written_by: Von
|
||||||
|
posted: Veröffentlicht
|
||||||
|
updated: Aktualisiert
|
||||||
|
words: Wörter
|
||||||
|
pageview_measure: Aufrufe
|
||||||
|
read_time:
|
||||||
|
unit: Minuten
|
||||||
|
prompt: Lesezeit
|
||||||
|
relate_posts: Weiterlesen
|
||||||
|
share: Teilen
|
||||||
|
button:
|
||||||
|
next: Nächster Eintrag
|
||||||
|
previous: Eintrag vorher
|
||||||
|
copy_code:
|
||||||
|
succeed: Kopiert!
|
||||||
|
share_link:
|
||||||
|
title: Link kopieren
|
||||||
|
succeed: Link erfolgreich kopiert!
|
||||||
|
|
||||||
|
# Date time format.
|
||||||
|
# See: <http://strftime.net/>, <https://day.js.org/docs/en/display/format>
|
||||||
|
df:
|
||||||
|
post:
|
||||||
|
strftime: "%d.%m.%Y"
|
||||||
|
dayjs: "DD.MM.YYYY"
|
||||||
|
|
||||||
|
# categories page
|
||||||
|
categories:
|
||||||
|
category_measure:
|
||||||
|
singular: Kategorie
|
||||||
|
plural: Kategorien
|
||||||
|
post_measure:
|
||||||
|
singular: Eintrag
|
||||||
|
plural: Einträge
|
||||||
91
_data/locales/el-GR.yml
Normal file
91
_data/locales/el-GR.yml
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
# The layout text of site
|
||||||
|
|
||||||
|
# ----- Commons label -----
|
||||||
|
|
||||||
|
layout:
|
||||||
|
post: Δημοσίευση
|
||||||
|
category: Κατηγορία
|
||||||
|
tag: Ετικέτα
|
||||||
|
|
||||||
|
# The tabs of sidebar
|
||||||
|
tabs:
|
||||||
|
# format: <filename_without_extension>: <value>
|
||||||
|
home: Home
|
||||||
|
categories: Κατηγορίες
|
||||||
|
tags: Ετικέτες
|
||||||
|
archives: Αρχεία
|
||||||
|
about: Σχετικά
|
||||||
|
|
||||||
|
# the text displayed in the search bar & search results
|
||||||
|
search:
|
||||||
|
hint: αναζήτηση
|
||||||
|
cancel: Ακύρωση
|
||||||
|
no_results: Oops! Κανένα αποτέλεσμα δεν βρέθηκε.
|
||||||
|
|
||||||
|
panel:
|
||||||
|
lastmod: Σχετικά ενημερωμένα
|
||||||
|
trending_tags: Ετικέτες τάσης
|
||||||
|
toc: Περιεχόμενα
|
||||||
|
|
||||||
|
copyright:
|
||||||
|
# Shown at the bottom of the post
|
||||||
|
license:
|
||||||
|
template: Η δημοσίευση αυτή βρίσκεται υπο την άδεια :LICENSE_NAME Greekforce1821.
|
||||||
|
name: CC BY 4.0
|
||||||
|
link: https://creativecommons.org/licenses/by/4.0/
|
||||||
|
|
||||||
|
# Displayed in the footer
|
||||||
|
brief: Ορισμένα δικαιώματα reserved.
|
||||||
|
verbose: >-
|
||||||
|
Εκτός αλλού ή οπουδήποτε αλλού, τα blog posts σε αυτήν την σελίδα βρίσκονται υπο την άδεια
|
||||||
|
Creative Commons Attribution 4.0 International (CC BY 4.0) του δημιουργού.
|
||||||
|
|
||||||
|
meta: Αξιοποιώντας την :PLATFORM theme :THEME
|
||||||
|
|
||||||
|
not_found:
|
||||||
|
statment: Συγνώμη, έχουμε τοποθετήσει λάθος αυτήν την διεύθυνση URL ή υποδεικνύει κάτι που δεν υπάρχει.
|
||||||
|
|
||||||
|
notification:
|
||||||
|
update_found: Υπάρχει διαθέσιμη μια νέα έκδοση του περιεχομένου.
|
||||||
|
update: Ενημέρωση
|
||||||
|
|
||||||
|
# ----- Posts related labels -----
|
||||||
|
|
||||||
|
post:
|
||||||
|
written_by: Από
|
||||||
|
posted: Δημοσιεύθηκε
|
||||||
|
updated: Ενημερώθηκε
|
||||||
|
words: λέξεις
|
||||||
|
pageview_measure: προβολές
|
||||||
|
read_time:
|
||||||
|
unit: Λεπτά
|
||||||
|
prompt: διαβάσματος
|
||||||
|
relate_posts: Περισσότερα
|
||||||
|
share: Κοινοποιήστε
|
||||||
|
button:
|
||||||
|
next: Νεότερα
|
||||||
|
previous: Παλαιότερα
|
||||||
|
copy_code:
|
||||||
|
succeed: Αντιγράφθηκε!
|
||||||
|
share_link:
|
||||||
|
title: Αντιγραφή συνδέσμου
|
||||||
|
succeed: Η διεύθυνση αντιγράφθηκε με επιτυχία!
|
||||||
|
|
||||||
|
# Date time format.
|
||||||
|
# See: <http://strftime.net/>, <https://day.js.org/docs/en/display/format>
|
||||||
|
df:
|
||||||
|
post:
|
||||||
|
strftime: "%b %e, %Y"
|
||||||
|
dayjs: "ll"
|
||||||
|
archives:
|
||||||
|
strftime: "%b"
|
||||||
|
dayjs: "MMM"
|
||||||
|
|
||||||
|
# categories page
|
||||||
|
categories:
|
||||||
|
category_measure:
|
||||||
|
singular: Κατηγορία
|
||||||
|
plural: Κατηγορίες
|
||||||
|
post_measure:
|
||||||
|
singular: Δημοσίευση
|
||||||
|
plural: Δημοσιεύσεις
|
||||||
@@ -40,7 +40,7 @@ copyright:
|
|||||||
Except where otherwise noted, the blog posts on this site are licensed
|
Except where otherwise noted, the blog posts on this site are licensed
|
||||||
under the Creative Commons Attribution 4.0 International (CC BY 4.0) License by the author.
|
under the Creative Commons Attribution 4.0 International (CC BY 4.0) License by the author.
|
||||||
|
|
||||||
meta: Powered by :PLATFORM with :THEME theme.
|
meta: Using the :THEME theme for :PLATFORM.
|
||||||
|
|
||||||
not_found:
|
not_found:
|
||||||
statment: Sorry, we've misplaced that URL or it's pointing to something that doesn't exist.
|
statment: Sorry, we've misplaced that URL or it's pointing to something that doesn't exist.
|
||||||
@@ -70,8 +70,16 @@ post:
|
|||||||
share_link:
|
share_link:
|
||||||
title: Copy link
|
title: Copy link
|
||||||
succeed: Link copied successfully!
|
succeed: Link copied successfully!
|
||||||
# pinned prompt of posts list on homepage
|
|
||||||
pin_prompt: Pinned
|
# Date time format.
|
||||||
|
# See: <http://strftime.net/>, <https://day.js.org/docs/en/display/format>
|
||||||
|
df:
|
||||||
|
post:
|
||||||
|
strftime: "%b %e, %Y"
|
||||||
|
dayjs: "ll"
|
||||||
|
archives:
|
||||||
|
strftime: "%b"
|
||||||
|
dayjs: "MMM"
|
||||||
|
|
||||||
# categories page
|
# categories page
|
||||||
categories:
|
categories:
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ copyright:
|
|||||||
Salvo que se indique explícitamente, las entradas de este blog están licenciadas
|
Salvo que se indique explícitamente, las entradas de este blog están licenciadas
|
||||||
bajo la Creative Commons Attribution 4.0 International (CC BY 4.0) License por el autor.
|
bajo la Creative Commons Attribution 4.0 International (CC BY 4.0) License por el autor.
|
||||||
|
|
||||||
meta: Hecho con :PLATFORM usando el tema :THEME.
|
meta: Hecho con :PLATFORM usando el tema :THEME
|
||||||
|
|
||||||
not_found:
|
not_found:
|
||||||
statment: Lo sentimos, hemos perdido esa URL o apunta a algo que no existe.
|
statment: Lo sentimos, hemos perdido esa URL o apunta a algo que no existe.
|
||||||
@@ -59,7 +59,7 @@ post:
|
|||||||
pageview_measure: visitas
|
pageview_measure: visitas
|
||||||
read_time:
|
read_time:
|
||||||
unit: min
|
unit: min
|
||||||
prompt: ' de lectura'
|
prompt: " de lectura"
|
||||||
relate_posts: Lecturas adicionales
|
relate_posts: Lecturas adicionales
|
||||||
share: Compartir
|
share: Compartir
|
||||||
button:
|
button:
|
||||||
@@ -70,8 +70,6 @@ post:
|
|||||||
share_link:
|
share_link:
|
||||||
title: Copiar enlace
|
title: Copiar enlace
|
||||||
succeed: ¡Enlace copiado!
|
succeed: ¡Enlace copiado!
|
||||||
# pinned prompt of posts list on homepage
|
|
||||||
pin_prompt: Fijado
|
|
||||||
|
|
||||||
# categories page
|
# categories page
|
||||||
categories:
|
categories:
|
||||||
|
|||||||
90
_data/locales/fi-FI.yml
Normal file
90
_data/locales/fi-FI.yml
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
# The layout text of site
|
||||||
|
|
||||||
|
# ----- Commons label -----
|
||||||
|
|
||||||
|
layout:
|
||||||
|
post: Julkaisu
|
||||||
|
category: Kateogoria
|
||||||
|
tag: Tagi
|
||||||
|
|
||||||
|
# The tabs of sidebar
|
||||||
|
tabs:
|
||||||
|
# format: <filename_without_extension>: <value>
|
||||||
|
home: Koti
|
||||||
|
categories: Kateogoriat
|
||||||
|
tags: Tagit
|
||||||
|
archives: Arkistot
|
||||||
|
about: Minusta
|
||||||
|
|
||||||
|
# the text displayed in the search bar & search results
|
||||||
|
search:
|
||||||
|
hint: etsi
|
||||||
|
cancel: Peruuta
|
||||||
|
no_results: Hups! Ei tuloksia.
|
||||||
|
|
||||||
|
panel:
|
||||||
|
lastmod: Viimeksi päivitetty
|
||||||
|
trending_tags: Trendaavat tagit
|
||||||
|
toc: Sisältö
|
||||||
|
|
||||||
|
copyright:
|
||||||
|
# Shown at the bottom of the post
|
||||||
|
license:
|
||||||
|
template: Tämä julkaisu on lisenssoitu :LICENSE_NAME julkaisijan toimesta.
|
||||||
|
name: CC BY 4.0
|
||||||
|
link: https://creativecommons.org/licenses/by/4.0/
|
||||||
|
|
||||||
|
# Displayed in the footer
|
||||||
|
brief: Jotkut oikeudet pidätetään.
|
||||||
|
verbose: >-
|
||||||
|
Paitsi jos erikseen mainitaan on kaikki sisältö Creative Commons Attribution 4.0 International (CC BY 4.0) Lisensoitu kirjoittajan toimesta.
|
||||||
|
|
||||||
|
meta: Käytetään :PLATFORM iä Teema :THEME
|
||||||
|
|
||||||
|
not_found:
|
||||||
|
statment: Valitettavasti tällä URL-osoitteella ei ole saatavilla sisältöä.
|
||||||
|
|
||||||
|
notification:
|
||||||
|
update_found: Uusi versio sisällöstä on saatavilla.
|
||||||
|
update: Päivitä
|
||||||
|
|
||||||
|
# ----- Posts related labels -----
|
||||||
|
|
||||||
|
post:
|
||||||
|
written_by: Kirjoittaja
|
||||||
|
posted: Julkaistu
|
||||||
|
updated: Päivitetty
|
||||||
|
words: sanaa
|
||||||
|
pageview_measure: katselukertoja
|
||||||
|
read_time:
|
||||||
|
unit: minuuttia
|
||||||
|
prompt: lukea
|
||||||
|
relate_posts: Jatka lukemista
|
||||||
|
share: Jaa
|
||||||
|
button:
|
||||||
|
next: Uudempi
|
||||||
|
previous: Vanhempi
|
||||||
|
copy_code:
|
||||||
|
succeed: Kopiotu!
|
||||||
|
share_link:
|
||||||
|
title: Kopioi linkki
|
||||||
|
succeed: Linkki kopioitu onnistuneesti!
|
||||||
|
|
||||||
|
# Date time format.
|
||||||
|
# See: <http://strftime.net/>, <https://day.js.org/docs/en/display/format>
|
||||||
|
df:
|
||||||
|
post:
|
||||||
|
strftime: "%b %e, %Y"
|
||||||
|
dayjs: "ll"
|
||||||
|
archives:
|
||||||
|
strftime: "%b"
|
||||||
|
dayjs: "MMM"
|
||||||
|
|
||||||
|
# categories page
|
||||||
|
categories:
|
||||||
|
category_measure:
|
||||||
|
singular: kategoria
|
||||||
|
plural: kategoriat
|
||||||
|
post_measure:
|
||||||
|
singular: julkaisu
|
||||||
|
plural: julkaisut
|
||||||
@@ -70,8 +70,6 @@ post:
|
|||||||
share_link:
|
share_link:
|
||||||
title: Copier le lien
|
title: Copier le lien
|
||||||
succeed: Lien copié avec succès !
|
succeed: Lien copié avec succès !
|
||||||
# pinned prompt of posts list on homepage
|
|
||||||
pin_prompt: Épinglé
|
|
||||||
|
|
||||||
# categories page
|
# categories page
|
||||||
categories:
|
categories:
|
||||||
|
|||||||
79
_data/locales/hu-HU.yml
Normal file
79
_data/locales/hu-HU.yml
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
# The layout text of site
|
||||||
|
|
||||||
|
# ----- Commons label -----
|
||||||
|
|
||||||
|
layout:
|
||||||
|
post: Bejegyzés
|
||||||
|
category: Kategória
|
||||||
|
tag: Címke
|
||||||
|
|
||||||
|
# The tabs of sidebar
|
||||||
|
tabs:
|
||||||
|
# format: <filename_without_extension>: <value>
|
||||||
|
home: Kezdőlap
|
||||||
|
categories: Kategóriák
|
||||||
|
tags: Címkék
|
||||||
|
archives: Archívum
|
||||||
|
about: Rólam
|
||||||
|
|
||||||
|
# the text displayed in the search bar & search results
|
||||||
|
search:
|
||||||
|
hint: keresés
|
||||||
|
cancel: Mégse
|
||||||
|
no_results: Oops! Nincs találat a keresésre.
|
||||||
|
|
||||||
|
panel:
|
||||||
|
lastmod: Legutóbb frissítve
|
||||||
|
trending_tags: Népszerű Címkék
|
||||||
|
toc: Tartalom
|
||||||
|
links: Blog linkek
|
||||||
|
|
||||||
|
copyright:
|
||||||
|
# Shown at the bottom of the post
|
||||||
|
license:
|
||||||
|
template: A bejegyzés :LICENSE_NAME licenccel rendelkezik.
|
||||||
|
name: CC BY 4.0
|
||||||
|
link: https://creativecommons.org/licenses/by/4.0/
|
||||||
|
|
||||||
|
# Displayed in the footer
|
||||||
|
brief: Néhány jog fenntartva.
|
||||||
|
verbose: >-
|
||||||
|
Az oldalon található tartalmak
|
||||||
|
Creative Commons Attribution 4.0 International (CC BY 4.0) licenccel rendelkeznek,
|
||||||
|
hacsak másképp nincs jelezve.
|
||||||
|
|
||||||
|
meta: Készítve :PLATFORM motorral :THEME témával
|
||||||
|
|
||||||
|
not_found:
|
||||||
|
statment: Sajnáljuk, az URL-t rosszul helyeztük el, vagy valami nem létezőre mutat.
|
||||||
|
|
||||||
|
notification:
|
||||||
|
update_found: Elérhető a tartalom új verziója.
|
||||||
|
update: Frissítés
|
||||||
|
|
||||||
|
# ----- Posts related labels -----
|
||||||
|
|
||||||
|
post:
|
||||||
|
written_by: Szerző
|
||||||
|
posted: Létrehozva
|
||||||
|
updated: Frissítve
|
||||||
|
words: szó
|
||||||
|
pageview_measure: látogató
|
||||||
|
read_time:
|
||||||
|
unit: perc
|
||||||
|
prompt: elolvasni
|
||||||
|
relate_posts: További olvasnivaló
|
||||||
|
share: Megosztás
|
||||||
|
button:
|
||||||
|
next: Újabb
|
||||||
|
previous: Régebbi
|
||||||
|
copy_code:
|
||||||
|
succeed: Másolva!
|
||||||
|
share_link:
|
||||||
|
title: Link másolása
|
||||||
|
succeed: Link sikeresen másolva!
|
||||||
|
|
||||||
|
# categories page
|
||||||
|
categories:
|
||||||
|
category_measure: kategória
|
||||||
|
post_measure: bejegyzés
|
||||||
@@ -40,7 +40,7 @@ copyright:
|
|||||||
Kecuali jika dinyatakan, Postingan blog di situs ini dilisensikan
|
Kecuali jika dinyatakan, Postingan blog di situs ini dilisensikan
|
||||||
di bawah Lisensi Creative Commons Attribution 4.0 International (CC BY 4.0) oleh penulis.
|
di bawah Lisensi Creative Commons Attribution 4.0 International (CC BY 4.0) oleh penulis.
|
||||||
|
|
||||||
meta: Didukung oleh :PLATFORM dengan tema :THEME.
|
meta: Didukung oleh :PLATFORM dengan tema :THEME
|
||||||
|
|
||||||
not_found:
|
not_found:
|
||||||
statment: Maaf, kami gagal menemukan URL itu atau memang mengarah ke sesuatu yang tidak ada.
|
statment: Maaf, kami gagal menemukan URL itu atau memang mengarah ke sesuatu yang tidak ada.
|
||||||
@@ -70,8 +70,6 @@ post:
|
|||||||
share_link:
|
share_link:
|
||||||
title: Salin tautan
|
title: Salin tautan
|
||||||
succeed: Tautan berhasil disalin!
|
succeed: Tautan berhasil disalin!
|
||||||
# pinned prompt of posts list on homepage
|
|
||||||
pin_prompt: Disematkan
|
|
||||||
|
|
||||||
# categories page
|
# categories page
|
||||||
categories:
|
categories:
|
||||||
|
|||||||
90
_data/locales/it-IT.yml
Normal file
90
_data/locales/it-IT.yml
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
# The layout text of site
|
||||||
|
|
||||||
|
# ----- Commons label -----
|
||||||
|
|
||||||
|
layout:
|
||||||
|
post: Post
|
||||||
|
category: Categoria
|
||||||
|
tag: Tag
|
||||||
|
|
||||||
|
# The tabs of sidebar
|
||||||
|
tabs:
|
||||||
|
# format: <filename_without_extension>: <value>
|
||||||
|
home: Pagina principale
|
||||||
|
categories: Categorie
|
||||||
|
tags: Tags
|
||||||
|
archives: Archivio
|
||||||
|
about: Informazioni
|
||||||
|
|
||||||
|
# the text displayed in the search bar & search results
|
||||||
|
search:
|
||||||
|
hint: ricerca
|
||||||
|
cancel: Cancella
|
||||||
|
no_results: Oops! La ricerca non ha fornito risultati.
|
||||||
|
|
||||||
|
panel:
|
||||||
|
lastmod: Aggiornati recentemente
|
||||||
|
trending_tags: Tags più cliccati
|
||||||
|
toc: Contenuti
|
||||||
|
|
||||||
|
copyright:
|
||||||
|
# Shown at the bottom of the post
|
||||||
|
license:
|
||||||
|
template: Questo post è sotto licenza :LICENSE_NAME a nome dell'autore.
|
||||||
|
name: CC BY 4.0
|
||||||
|
link: https://creativecommons.org/licenses/by/4.0/
|
||||||
|
|
||||||
|
# Displayed in the footer
|
||||||
|
brief: Alcuni diritti riservati.
|
||||||
|
verbose: >-
|
||||||
|
Eccetto quando esplicitamente menzionato, i post di questo blog sono da ritenersi sotto
|
||||||
|
i termini di licenza Creative Commons Attribution 4.0 International (CC BY 4.0).
|
||||||
|
|
||||||
|
meta: Servizio offerto da :PLATFORM con tema :THEME
|
||||||
|
not_found:
|
||||||
|
statment: Ci scusiamo, non è stato possibile trovare l'URL in questione. Potrebbe puntare ad una pagina non esistente.
|
||||||
|
|
||||||
|
notification:
|
||||||
|
update_found: Nuova versione del contenuto disponibile.
|
||||||
|
update: Aggiornamento
|
||||||
|
|
||||||
|
# ----- Posts related labels -----
|
||||||
|
|
||||||
|
post:
|
||||||
|
written_by: Da
|
||||||
|
posted: Postato
|
||||||
|
updated: Aggiornato
|
||||||
|
words: parole
|
||||||
|
pageview_measure: visioni
|
||||||
|
read_time:
|
||||||
|
unit: min
|
||||||
|
prompt: lettura
|
||||||
|
relate_posts: Continua a leggere
|
||||||
|
share: Condividi
|
||||||
|
button:
|
||||||
|
next: Più recenti
|
||||||
|
previous: Meno recenti
|
||||||
|
copy_code:
|
||||||
|
succeed: Copiato!
|
||||||
|
share_link:
|
||||||
|
title: Copia link
|
||||||
|
succeed: Link copiato con successo!
|
||||||
|
|
||||||
|
# Date time format.
|
||||||
|
# See: <http://strftime.net/>, <https://day.js.org/docs/en/display/format>
|
||||||
|
df:
|
||||||
|
post:
|
||||||
|
strftime: "%b %e, %Y"
|
||||||
|
dayjs: "ll"
|
||||||
|
archives:
|
||||||
|
strftime: "%b"
|
||||||
|
dayjs: "MMM"
|
||||||
|
|
||||||
|
# categories page
|
||||||
|
categories:
|
||||||
|
category_measure:
|
||||||
|
singular: categoria
|
||||||
|
plural: categorie
|
||||||
|
post_measure:
|
||||||
|
singular: post
|
||||||
|
plural: posts
|
||||||
@@ -40,7 +40,7 @@ copyright:
|
|||||||
명시되지 않는 한 이 사이트의 블로그 게시물은 작성자의
|
명시되지 않는 한 이 사이트의 블로그 게시물은 작성자의
|
||||||
Creative Commons Attribution 4.0 International(CC BY 4.0) 라이선스에 따라 사용이 허가되었습니다.
|
Creative Commons Attribution 4.0 International(CC BY 4.0) 라이선스에 따라 사용이 허가되었습니다.
|
||||||
|
|
||||||
meta: Powered by :PLATFORM with :THEME theme.
|
meta: Powered by :PLATFORM with :THEME theme
|
||||||
|
|
||||||
not_found:
|
not_found:
|
||||||
statment: 해당 URL은 존재하지 않습니다.
|
statment: 해당 URL은 존재하지 않습니다.
|
||||||
@@ -70,8 +70,13 @@ post:
|
|||||||
share_link:
|
share_link:
|
||||||
title: 링크 복사하기
|
title: 링크 복사하기
|
||||||
succeed: 링크가 복사되었습니다!
|
succeed: 링크가 복사되었습니다!
|
||||||
# pinned prompt of posts list on homepage
|
|
||||||
pin_prompt: 핀
|
# Date time format.
|
||||||
|
# See: <http://strftime.net/>, <https://day.js.org/docs/en/display/format>
|
||||||
|
df:
|
||||||
|
post:
|
||||||
|
strftime: "%Y/%m/%d"
|
||||||
|
dayjs: "YYYY/MM/DD"
|
||||||
|
|
||||||
# categories page
|
# categories page
|
||||||
categories:
|
categories:
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ copyright:
|
|||||||
အခြားမှတ်သားထားချက်များမှလွဲ၍ ဤဆိုက်ရှိ ဘလော့ဂ်ပို့စ်များသည် စာရေးသူ၏
|
အခြားမှတ်သားထားချက်များမှလွဲ၍ ဤဆိုက်ရှိ ဘလော့ဂ်ပို့စ်များသည် စာရေးသူ၏
|
||||||
Creative Commons Attribution 4.0 International (CC BY 4.0) အောက်တွင် လိုင်စင်ရထားပါသည်။
|
Creative Commons Attribution 4.0 International (CC BY 4.0) အောက်တွင် လိုင်စင်ရထားပါသည်။
|
||||||
|
|
||||||
meta: Powered by :PLATFORM with :THEME theme.
|
meta: Powered by :PLATFORM with :THEME theme
|
||||||
|
|
||||||
not_found:
|
not_found:
|
||||||
statment: ဝမ်းနည်းပါသည်၊ ကျွန်ုပ်တို့သည် အဆိုပါ URL ကို မှားယွင်းစွာ နေရာချထားခြင်း သို့မဟုတ် ၎င်းသည် မရှိသောအရာကို ညွှန်ပြနေပါသည်။
|
statment: ဝမ်းနည်းပါသည်၊ ကျွန်ုပ်တို့သည် အဆိုပါ URL ကို မှားယွင်းစွာ နေရာချထားခြင်း သို့မဟုတ် ၎င်းသည် မရှိသောအရာကို ညွှန်ပြနေပါသည်။
|
||||||
@@ -70,8 +70,6 @@ post:
|
|||||||
share_link:
|
share_link:
|
||||||
title: လင့်ခ်ကို ကူးယူရန်
|
title: လင့်ခ်ကို ကူးယူရန်
|
||||||
succeed: လင့်ခ်ကို ကူးယူလိုက်ပြီ။
|
succeed: လင့်ခ်ကို ကူးယူလိုက်ပြီ။
|
||||||
# pinned prompt of posts list on homepage
|
|
||||||
pin_prompt: ချိတ်ထားသည်။
|
|
||||||
|
|
||||||
# categories page
|
# categories page
|
||||||
categories:
|
categories:
|
||||||
|
|||||||
@@ -37,10 +37,10 @@ copyright:
|
|||||||
# Displayed in the footer
|
# Displayed in the footer
|
||||||
brief: Alguns direitos reservados.
|
brief: Alguns direitos reservados.
|
||||||
verbose: >-
|
verbose: >-
|
||||||
Exceto onde indicado de outra forma, as postagens do blog neste site são licenciadas sob a
|
Exceto onde indicado de outra forma, as postagens do blog neste site são licenciadas sob a
|
||||||
Creative Commons Attribution 4.0 International (CC BY 4.0) License pelo autor.
|
Creative Commons Attribution 4.0 International (CC BY 4.0) License pelo autor.
|
||||||
|
|
||||||
meta: Feito com :PLATFORM usando o tema :THEME.
|
meta: Feito com :PLATFORM usando o tema :THEME
|
||||||
|
|
||||||
not_found:
|
not_found:
|
||||||
statment: Desculpe, a página não foi encontrada.
|
statment: Desculpe, a página não foi encontrada.
|
||||||
@@ -70,8 +70,6 @@ post:
|
|||||||
share_link:
|
share_link:
|
||||||
title: Copie o link
|
title: Copie o link
|
||||||
succeed: Link copiado com sucesso!
|
succeed: Link copiado com sucesso!
|
||||||
# pinned prompt of posts list on homepage
|
|
||||||
pin_prompt: Fixado
|
|
||||||
|
|
||||||
# categories page
|
# categories page
|
||||||
categories:
|
categories:
|
||||||
|
|||||||
@@ -3,14 +3,14 @@
|
|||||||
# ----- Commons label -----
|
# ----- Commons label -----
|
||||||
|
|
||||||
layout:
|
layout:
|
||||||
post: Публикация
|
post: Пост
|
||||||
category: Категория
|
category: Категория
|
||||||
tag: Тег
|
tag: Тег
|
||||||
|
|
||||||
# The tabs of sidebar
|
# The tabs of sidebar
|
||||||
tabs:
|
tabs:
|
||||||
# format: <filename_without_extension>: <value>
|
# format: <filename_without_extension>: <value>
|
||||||
home: Домашняя страница
|
home: Главная
|
||||||
categories: Категории
|
categories: Категории
|
||||||
tags: Теги
|
tags: Теги
|
||||||
archives: Архив
|
archives: Архив
|
||||||
@@ -19,8 +19,8 @@ tabs:
|
|||||||
# the text displayed in the search bar & search results
|
# the text displayed in the search bar & search results
|
||||||
search:
|
search:
|
||||||
hint: поиск
|
hint: поиск
|
||||||
cancel: Отменить
|
cancel: Отмена
|
||||||
no_results: Ох! Ничего не найдено.
|
no_results: Упс! Ничего не найдено.
|
||||||
|
|
||||||
panel:
|
panel:
|
||||||
lastmod: Недавно обновлено
|
lastmod: Недавно обновлено
|
||||||
@@ -30,50 +30,58 @@ panel:
|
|||||||
copyright:
|
copyright:
|
||||||
# Shown at the bottom of the post
|
# Shown at the bottom of the post
|
||||||
license:
|
license:
|
||||||
template: Публикация защищена лицензией :LICENSE_NAME.
|
template: Авторский пост защищен лицензией :LICENSE_NAME.
|
||||||
name: CC BY 4.0
|
name: CC BY 4.0
|
||||||
link: https://creativecommons.org/licenses/by/4.0/
|
link: https://creativecommons.org/licenses/by/4.0/
|
||||||
|
|
||||||
# Displayed in the footer
|
# Displayed in the footer
|
||||||
brief: Некоторые права защищены.
|
brief: Некоторые права защищены.
|
||||||
verbose: >-
|
verbose: >-
|
||||||
Публикации на сайте защищены лицензией Creative Commons Attribution 4.0 International (CC BY 4.0),
|
Если не указано иное, авторские посты на этом сайте защищены лицензией Creative Commons Attribution 4.0 International (CC BY 4.0).
|
||||||
если в тексте публикации не указано иное.
|
|
||||||
|
|
||||||
meta: Powered by :PLATFORM with :THEME theme.
|
meta: Использует тему :THEME для :PLATFORM
|
||||||
|
|
||||||
not_found:
|
not_found:
|
||||||
statment: Извините, эта ссылка указывает на ресурс который не существует.
|
statment: Извините, мы перепутали URL-адрес или он указывает на что-то несуществующее.
|
||||||
|
|
||||||
notification:
|
notification:
|
||||||
update_found: Доступна новая версия контента.
|
update_found: Доступна новая версия контента.
|
||||||
update: Обновлять
|
update: Обновить
|
||||||
|
|
||||||
# ----- Posts related labels -----
|
# ----- Posts related labels -----
|
||||||
|
|
||||||
post:
|
post:
|
||||||
written_by: Автор
|
written_by: Автор
|
||||||
posted: Время публикации
|
posted: Опубликовано
|
||||||
updated: Обновлено
|
updated: Обновлено
|
||||||
words: слов
|
words: слов
|
||||||
pageview_measure: просмотров
|
pageview_measure: просмотров
|
||||||
read_time:
|
read_time:
|
||||||
unit: минут
|
unit: мин.
|
||||||
prompt: чтения
|
prompt: чтения
|
||||||
relate_posts: Вам также может быть интересно
|
relate_posts: Похожие посты
|
||||||
share: Поделиться
|
share: Поделиться
|
||||||
button:
|
button:
|
||||||
next: Предыдущая публикация
|
next: Следующий пост
|
||||||
previous: Следующая публикация
|
previous: Предыдущий пост
|
||||||
copy_code:
|
copy_code:
|
||||||
succeed: Скопировано успешно!
|
succeed: Скопировано!
|
||||||
share_link:
|
share_link:
|
||||||
title: Скопировать ссылку
|
title: Скопировать ссылку
|
||||||
succeed: Ссылка успешно скопирована!
|
succeed: Ссылка успешно скопирована!
|
||||||
# pinned prompt of posts list on homepage
|
|
||||||
pin_prompt: Закреплено
|
|
||||||
|
|
||||||
|
# Date time format.
|
||||||
|
# See: <http://strftime.net/>, <https://day.js.org/docs/en/display/format>
|
||||||
|
df:
|
||||||
|
post:
|
||||||
|
strftime: "%d.%m.%Y"
|
||||||
|
dayjs: "DD.MM.YYYY"
|
||||||
|
|
||||||
# categories page
|
# categories page
|
||||||
categories:
|
categories:
|
||||||
category_measure: категории
|
category_measure:
|
||||||
post_measure: публикации
|
singular: категория
|
||||||
|
plural: категории
|
||||||
|
post_measure:
|
||||||
|
singular: пост
|
||||||
|
plural: посты
|
||||||
|
|||||||
91
_data/locales/sl-SI.yml
Normal file
91
_data/locales/sl-SI.yml
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
# The layout text of site
|
||||||
|
|
||||||
|
# ----- Commons label -----
|
||||||
|
|
||||||
|
layout:
|
||||||
|
post: Objava #Post
|
||||||
|
category: Kategorija #Category
|
||||||
|
tag: Oznaka #Tag
|
||||||
|
|
||||||
|
# The tabs of sidebar
|
||||||
|
tabs:
|
||||||
|
# format: <filename_without_extension>: <value>
|
||||||
|
home: Domov #Home
|
||||||
|
categories: Kategorije #Categories
|
||||||
|
tags: Oznake #Tags
|
||||||
|
archives: Arhiv #Archives
|
||||||
|
about: O meni #About
|
||||||
|
|
||||||
|
# the text displayed in the search bar & search results
|
||||||
|
search:
|
||||||
|
hint: išči #search
|
||||||
|
cancel: Prekliči #Cancel
|
||||||
|
no_results: Ups! Vsebina ni bila najdena #Oops! No results found.
|
||||||
|
|
||||||
|
panel:
|
||||||
|
lastmod: Nedavno Posodobljeno #Recently Updated
|
||||||
|
trending_tags: Priljubljene Oznake #Trending Tags
|
||||||
|
toc: Vsebina #Contents
|
||||||
|
|
||||||
|
copyright:
|
||||||
|
# Shown at the bottom of the post
|
||||||
|
license:
|
||||||
|
template: Ta objava je licencirana pod :LICENCE_NAME s strani avtorja. #This post is licensed under :LICENSE_NAME by the author.
|
||||||
|
name: CC BY 4.0
|
||||||
|
link: https://creativecommons.org/licenses/by/4.0/
|
||||||
|
|
||||||
|
# Displayed in the footer
|
||||||
|
brief: Nekatere pravice pridržane. #Some rights reserved.
|
||||||
|
verbose: >-
|
||||||
|
Razen kjer navedeno drugače, vse objave spletnega dnevnika so licencirane
|
||||||
|
pod Creative Commons Attribution 4.0 International (CC BY 4.0) s strani avtorja.
|
||||||
|
|
||||||
|
meta: Uporabljena :PLATFORM tema :THEME #Using the :PLATFORM theme :THEME
|
||||||
|
|
||||||
|
not_found:
|
||||||
|
statment: Oprostite, hiperpovezava je neustrezna ali vsebina ne obstajata. #Sorry, we've misplaced that URL or it's pointing to something that doesn't exist.
|
||||||
|
|
||||||
|
notification:
|
||||||
|
update_found: Novejša različica vsebine je na voljo. #A new version of content is available.
|
||||||
|
update: Posodobi #Update
|
||||||
|
|
||||||
|
# ----- Posts related labels -----
|
||||||
|
|
||||||
|
post:
|
||||||
|
written_by: Od #By
|
||||||
|
posted: Objavljeno #Posted
|
||||||
|
updated: Posodobljeno #Updated
|
||||||
|
words: besede #words
|
||||||
|
pageview_measure: ogledi #views
|
||||||
|
read_time:
|
||||||
|
unit: min
|
||||||
|
prompt: beri #read
|
||||||
|
relate_posts: Nadaljnje branje #Further Reading
|
||||||
|
share: Deli #Share
|
||||||
|
button:
|
||||||
|
next: Novejše #Newer
|
||||||
|
previous: Starejše #Older
|
||||||
|
copy_code:
|
||||||
|
succeed: Kopirano! #Copied!
|
||||||
|
share_link:
|
||||||
|
title: Kopiraj povezavo #Copy link
|
||||||
|
succeed: Povezava uspešno kopirana! #Link copied successfully!
|
||||||
|
|
||||||
|
# Date time format.
|
||||||
|
# See: <http://strftime.net/>, <https://day.js.org/docs/en/display/format>
|
||||||
|
df:
|
||||||
|
post:
|
||||||
|
strftime: "%e %b, %Y"
|
||||||
|
dayjs: "ll"
|
||||||
|
archives:
|
||||||
|
strftime: "%b"
|
||||||
|
dayjs: "MMM"
|
||||||
|
|
||||||
|
# categories page
|
||||||
|
categories:
|
||||||
|
category_measure:
|
||||||
|
singular: kategorija #category
|
||||||
|
plural: kategorije #categories
|
||||||
|
post_measure:
|
||||||
|
singular: objava #post
|
||||||
|
plural: objave #posts
|
||||||
91
_data/locales/sv-SE.yml
Normal file
91
_data/locales/sv-SE.yml
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
# The layout text of site
|
||||||
|
|
||||||
|
# ----- Commons label -----
|
||||||
|
|
||||||
|
layout:
|
||||||
|
post: Inlägg #Post
|
||||||
|
category: Kategori #Category
|
||||||
|
tag: Tagga #Tag
|
||||||
|
|
||||||
|
# The tabs of sidebar
|
||||||
|
tabs:
|
||||||
|
# format: <filename_without_extension>: <value>
|
||||||
|
home: Hem #Home
|
||||||
|
categories: Kategorier #Categories
|
||||||
|
tags: Taggar #Tags
|
||||||
|
archives: Arkiv #Archives
|
||||||
|
about: Om #About
|
||||||
|
|
||||||
|
# the text displayed in the search bar & search results
|
||||||
|
search:
|
||||||
|
hint: sök
|
||||||
|
cancel: Avbryt
|
||||||
|
no_results: Hoppsan! Hittade inga sökträffar.
|
||||||
|
|
||||||
|
panel:
|
||||||
|
lastmod: Senast uppdaterad
|
||||||
|
trending_tags: Trendande taggar
|
||||||
|
toc: Innehåll
|
||||||
|
|
||||||
|
copyright:
|
||||||
|
# Shown at the bottom of the post
|
||||||
|
license:
|
||||||
|
template: Den här posten är publicerad under licensen :LICENSE_NAME av författaren.
|
||||||
|
name: CC BY 4.0
|
||||||
|
link: https://creativecommons.org/licenses/by/4.0/
|
||||||
|
|
||||||
|
# Displayed in the footer
|
||||||
|
brief: Vissa rättigheter är reserverade.
|
||||||
|
verbose: >-
|
||||||
|
Om inte annat anges är blogginläggen på denna webbplats licensierade
|
||||||
|
under Creative Commons Attribution 4.0 International (CC BY 4.0) av författaren.
|
||||||
|
|
||||||
|
meta: Byggd med :PLATFORM och temat :THEME
|
||||||
|
|
||||||
|
not_found:
|
||||||
|
statment: Ursäkta, vi har tappat bort den här webbadressen eller så pekar den på något som inte längre finns.
|
||||||
|
|
||||||
|
notification:
|
||||||
|
update_found: Det finns en ny version av innehållet.
|
||||||
|
update: Uppdatera sidan
|
||||||
|
|
||||||
|
# ----- Posts related labels -----
|
||||||
|
|
||||||
|
post:
|
||||||
|
written_by: Av
|
||||||
|
posted: Postad
|
||||||
|
updated: Uppdaterad
|
||||||
|
words: ord
|
||||||
|
pageview_measure: visningar
|
||||||
|
read_time:
|
||||||
|
unit: min
|
||||||
|
prompt: läsning
|
||||||
|
relate_posts: Mer läsning
|
||||||
|
share: Dela
|
||||||
|
button:
|
||||||
|
next: Nyare
|
||||||
|
previous: Äldre
|
||||||
|
copy_code:
|
||||||
|
succeed: Kopierat!
|
||||||
|
share_link:
|
||||||
|
title: Kopiera länk
|
||||||
|
succeed: Länken har kopierats!
|
||||||
|
|
||||||
|
# Date time format.
|
||||||
|
# See: <http://strftime.net/>, <https://day.js.org/docs/en/display/format>
|
||||||
|
df:
|
||||||
|
post:
|
||||||
|
strftime: "%b %e, %Y"
|
||||||
|
dayjs: "ll"
|
||||||
|
archives:
|
||||||
|
strftime: "%b"
|
||||||
|
dayjs: "MMM"
|
||||||
|
|
||||||
|
# categories page
|
||||||
|
categories:
|
||||||
|
category_measure:
|
||||||
|
singular: kategori
|
||||||
|
plural: kategorier
|
||||||
|
post_measure:
|
||||||
|
singular: inlägg
|
||||||
|
plural: inlägg
|
||||||
91
_data/locales/th.yml
Normal file
91
_data/locales/th.yml
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
# The layout text of site
|
||||||
|
|
||||||
|
# ----- Commons label -----
|
||||||
|
|
||||||
|
layout:
|
||||||
|
post: โพสต์
|
||||||
|
category: หมวดหมู่
|
||||||
|
tag: แท็ก
|
||||||
|
|
||||||
|
# The tabs of sidebar
|
||||||
|
tabs:
|
||||||
|
# format: <filename_without_extension>: <value>
|
||||||
|
home: หน้าแรก
|
||||||
|
categories: หมวดหมู่
|
||||||
|
tags: แท็ก
|
||||||
|
archives: คลังเก็บ
|
||||||
|
about: เกี่ยวกับ
|
||||||
|
|
||||||
|
# the text displayed in the search bar & search results
|
||||||
|
search:
|
||||||
|
hint: ค้นหา
|
||||||
|
cancel: ยกเลิก
|
||||||
|
no_results: โอ๊ะ! ไม่พบผลลัพธ์
|
||||||
|
|
||||||
|
panel:
|
||||||
|
lastmod: อัปเดตล่าสุด
|
||||||
|
trending_tags: แท็กยอดนิยม
|
||||||
|
toc: เนื้อหา
|
||||||
|
|
||||||
|
copyright:
|
||||||
|
# Shown at the bottom of the post
|
||||||
|
license:
|
||||||
|
template: โพสต์นี้อยู่ภายใต้การอนุญาต :LICENSE_NAME โดยผู้เขียน
|
||||||
|
name: CC BY 4.0
|
||||||
|
link: https://creativecommons.org/licenses/by/4.0/
|
||||||
|
|
||||||
|
# Displayed in the footer
|
||||||
|
brief: สงวนลิขสิทธิ์เป็นบางส่วน
|
||||||
|
verbose: >-
|
||||||
|
เว้นแต่ว่าจะระบุเป็นอย่างอื่น โพสต์บนเว็บไซต์นี้อยู่ภายใต้
|
||||||
|
สัญญาอนุญาตครีเอทีฟคอมมอนส์แบบ 4.0 นานาชาติ (CC BY 4.0) โดยผู้เขียน
|
||||||
|
|
||||||
|
meta: กำลังใช้ธีมของ :PLATFORM ชื่อ :THEME
|
||||||
|
|
||||||
|
not_found:
|
||||||
|
statment: ขออภัย เราวาง URL นั้นไว้ผิดที่ หรือมันชี้ไปยังสิ่งที่ไม่มีอยู่
|
||||||
|
|
||||||
|
notification:
|
||||||
|
update_found: มีเวอร์ชันใหม่ของเนื้อหา
|
||||||
|
update: อัปเดต
|
||||||
|
|
||||||
|
# ----- Posts related labels -----
|
||||||
|
|
||||||
|
post:
|
||||||
|
written_by: โดย
|
||||||
|
posted: โพสต์เมื่อ
|
||||||
|
updated: อัปเดตเมื่อ
|
||||||
|
words: คำ
|
||||||
|
pageview_measure: ครั้ง
|
||||||
|
read_time:
|
||||||
|
unit: นาที
|
||||||
|
prompt: อ่าน
|
||||||
|
relate_posts: อ่านต่อ
|
||||||
|
share: แชร์
|
||||||
|
button:
|
||||||
|
next: ใหม่กว่า
|
||||||
|
previous: เก่ากว่า
|
||||||
|
copy_code:
|
||||||
|
succeed: คัดลอกแล้ว!
|
||||||
|
share_link:
|
||||||
|
title: คัดลอกลิงก์
|
||||||
|
succeed: คัดลอกลิงก์เรียบร้อยแล้ว!
|
||||||
|
|
||||||
|
# Date time format.
|
||||||
|
# See: <http://strftime.net/>, <https://day.js.org/docs/en/display/format>
|
||||||
|
df:
|
||||||
|
post:
|
||||||
|
strftime: "%b %e, %Y"
|
||||||
|
dayjs: "ll"
|
||||||
|
archives:
|
||||||
|
strftime: "%b"
|
||||||
|
dayjs: "MMM"
|
||||||
|
|
||||||
|
# categories page
|
||||||
|
categories:
|
||||||
|
category_measure:
|
||||||
|
singular: หมวดหมู่
|
||||||
|
plural: หมวดหมู่
|
||||||
|
post_measure:
|
||||||
|
singular: โพสต์
|
||||||
|
plural: โพสต์
|
||||||
77
_data/locales/tr-TR.yml
Normal file
77
_data/locales/tr-TR.yml
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
# The layout text of site
|
||||||
|
|
||||||
|
# ----- Commons label -----
|
||||||
|
|
||||||
|
layout:
|
||||||
|
post: Gönderi
|
||||||
|
category: Kategori
|
||||||
|
tag: Etiket
|
||||||
|
|
||||||
|
# The tabs of sidebar
|
||||||
|
tabs:
|
||||||
|
# format: <filename_without_extension>: <value>
|
||||||
|
home: Ana Sayfa
|
||||||
|
categories: Kategoriler
|
||||||
|
tags: Etiketler
|
||||||
|
archives: Arşiv
|
||||||
|
about: Hakkında
|
||||||
|
|
||||||
|
# the text displayed in the search bar & search results
|
||||||
|
search:
|
||||||
|
hint: Ara...
|
||||||
|
cancel: İptal
|
||||||
|
no_results: Hop! Öyle bir şey bulamadım.
|
||||||
|
|
||||||
|
panel:
|
||||||
|
lastmod: Son Güncellenenler
|
||||||
|
trending_tags: Yükselen Etiketler
|
||||||
|
toc: İçindekiler
|
||||||
|
|
||||||
|
copyright:
|
||||||
|
# Shown at the bottom of the post
|
||||||
|
license:
|
||||||
|
template: Bu gönderi :LICENSE_NAME lisansı altındadır.
|
||||||
|
name: CC BY 4.0
|
||||||
|
link: https://creativecommons.org/licenses/by/4.0/deed.tr
|
||||||
|
|
||||||
|
# Displayed in the footer
|
||||||
|
brief: Bazı hakları saklıdır.
|
||||||
|
verbose: >-
|
||||||
|
Aksi belirtilmediği sürece, bu sitedeki gönderiler Creative Commons Atıf 4.0 Uluslararası (CC BY 4.0) Lisansı altındadır.
|
||||||
|
Kısaca sayfa linkini vererek değiştirebilir / paylaşabilirsiniz.
|
||||||
|
|
||||||
|
meta: :PLATFORM ve :THEME teması
|
||||||
|
|
||||||
|
not_found:
|
||||||
|
statment: Üzgünüz, bu linki yanlış yerleştirdik veya var olmayan bir şeye işaret ediyor.
|
||||||
|
|
||||||
|
notification:
|
||||||
|
update_found: İçeriğin yeni bir sürümü mevcut.
|
||||||
|
update: Güncelle
|
||||||
|
|
||||||
|
# ----- Posts related labels -----
|
||||||
|
|
||||||
|
post:
|
||||||
|
written_by: Yazan
|
||||||
|
posted: Gönderim
|
||||||
|
updated: Güncelleme
|
||||||
|
words: sözcük
|
||||||
|
pageview_measure: görüntülenme
|
||||||
|
read_time:
|
||||||
|
unit: dakikada
|
||||||
|
prompt: okunabilir
|
||||||
|
relate_posts: Benzer Gönderiler
|
||||||
|
share: Paylaş
|
||||||
|
button:
|
||||||
|
next: İleri
|
||||||
|
previous: Geri
|
||||||
|
copy_code:
|
||||||
|
succeed: Kopyalandı.
|
||||||
|
share_link:
|
||||||
|
title: Linki kopyala
|
||||||
|
succeed: Link kopyalandı.
|
||||||
|
|
||||||
|
# categories page
|
||||||
|
categories:
|
||||||
|
category_measure: kategori
|
||||||
|
post_measure: gönderi
|
||||||
@@ -40,7 +40,7 @@ copyright:
|
|||||||
Публікації на сайті захищено ліцензією Creative Commons Attribution 4.0 International (CC BY 4.0),
|
Публікації на сайті захищено ліцензією Creative Commons Attribution 4.0 International (CC BY 4.0),
|
||||||
якщо інше не вказано в тексті.
|
якщо інше не вказано в тексті.
|
||||||
|
|
||||||
meta: Powered by :PLATFORM with :THEME theme.
|
meta: Powered by :PLATFORM with :THEME theme
|
||||||
|
|
||||||
not_found:
|
not_found:
|
||||||
statment: Вибачте, це посилання вказує на ресурс, що не існує.
|
statment: Вибачте, це посилання вказує на ресурс, що не існує.
|
||||||
@@ -70,8 +70,6 @@ post:
|
|||||||
share_link:
|
share_link:
|
||||||
title: Скопіювати посилання
|
title: Скопіювати посилання
|
||||||
succeed: Посилання успішно скопійовано!
|
succeed: Посилання успішно скопійовано!
|
||||||
# pinned prompt of posts list on homepage
|
|
||||||
pin_prompt: Закріплено
|
|
||||||
|
|
||||||
# categories page
|
# categories page
|
||||||
categories:
|
categories:
|
||||||
|
|||||||
@@ -38,7 +38,8 @@ copyright:
|
|||||||
brief: Một số quyền được bảo lưu.
|
brief: Một số quyền được bảo lưu.
|
||||||
verbose: >-
|
verbose: >-
|
||||||
Trừ khi có ghi chú khác, các bài viết đăng trên trang này được cấp phép bởi tác giả theo giấy phép Creative Commons Attribution 4.0 International (CC BY 4.0).
|
Trừ khi có ghi chú khác, các bài viết đăng trên trang này được cấp phép bởi tác giả theo giấy phép Creative Commons Attribution 4.0 International (CC BY 4.0).
|
||||||
meta: Trang web này được tạo bởi :PLATFORM với chủ đề :THEME.
|
|
||||||
|
meta: Trang web này được tạo bởi :PLATFORM với chủ đề :THEME
|
||||||
|
|
||||||
not_found:
|
not_found:
|
||||||
statment: Xin lỗi, chúng tôi đã đặt nhầm URL hoặc đường dẫn trỏ đến một trang nào đó không tồn tại.
|
statment: Xin lỗi, chúng tôi đã đặt nhầm URL hoặc đường dẫn trỏ đến một trang nào đó không tồn tại.
|
||||||
@@ -68,8 +69,6 @@ post:
|
|||||||
share_link:
|
share_link:
|
||||||
title: Sao chép đường dẫn
|
title: Sao chép đường dẫn
|
||||||
succeed: Đã sao chép đường dẫn thành công!
|
succeed: Đã sao chép đường dẫn thành công!
|
||||||
# pinned prompt of posts list on homepage
|
|
||||||
pin_prompt: Bài ghim
|
|
||||||
|
|
||||||
# categories page
|
# categories page
|
||||||
categories:
|
categories:
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ copyright:
|
|||||||
verbose: >-
|
verbose: >-
|
||||||
除非另有说明,本网站上的博客文章均由作者按照知识共享署名 4.0 国际 (CC BY 4.0) 许可协议进行授权。
|
除非另有说明,本网站上的博客文章均由作者按照知识共享署名 4.0 国际 (CC BY 4.0) 许可协议进行授权。
|
||||||
|
|
||||||
meta: 本站由 :PLATFORM 生成,采用 :THEME 主题。
|
meta: 本站采用 :PLATFORM 主题 :THEME
|
||||||
|
|
||||||
not_found:
|
not_found:
|
||||||
statment: 抱歉,我们放错了该 URL,或者它指向了不存在的内容。
|
statment: 抱歉,我们放错了该 URL,或者它指向了不存在的内容。
|
||||||
@@ -67,10 +67,15 @@ post:
|
|||||||
copy_code:
|
copy_code:
|
||||||
succeed: 已复制!
|
succeed: 已复制!
|
||||||
share_link:
|
share_link:
|
||||||
title: 分享链接
|
title: 分享链接
|
||||||
succeed: 链接已复制!
|
succeed: 链接已复制!
|
||||||
# pinned prompt of posts list on homepage
|
|
||||||
pin_prompt: 顶置
|
# Date time format.
|
||||||
|
# See: <http://strftime.net/>, <https://day.js.org/docs/en/display/format>
|
||||||
|
df:
|
||||||
|
post:
|
||||||
|
strftime: "%Y/%m/%d"
|
||||||
|
dayjs: "YYYY/MM/DD"
|
||||||
|
|
||||||
# categories page
|
# categories page
|
||||||
categories:
|
categories:
|
||||||
|
|||||||
83
_data/locales/zh-TW.yml
Normal file
83
_data/locales/zh-TW.yml
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
# The layout text of site
|
||||||
|
|
||||||
|
# ----- Commons label -----
|
||||||
|
|
||||||
|
layout:
|
||||||
|
post: 文章
|
||||||
|
category: 分類
|
||||||
|
tag: 標籤
|
||||||
|
|
||||||
|
# The tabs of sidebar
|
||||||
|
tabs:
|
||||||
|
# format: <filename_without_extension>: <value>
|
||||||
|
home: 首頁
|
||||||
|
categories: 分類
|
||||||
|
tags: 標籤
|
||||||
|
archives: 封存
|
||||||
|
about: 關於
|
||||||
|
|
||||||
|
# the text displayed in the search bar & search results
|
||||||
|
search:
|
||||||
|
hint: 搜尋
|
||||||
|
cancel: 取消
|
||||||
|
no_results: 沒有搜尋結果
|
||||||
|
|
||||||
|
panel:
|
||||||
|
lastmod: 最近更新
|
||||||
|
trending_tags: 熱門標籤
|
||||||
|
toc: 文章摘要
|
||||||
|
|
||||||
|
copyright:
|
||||||
|
# Shown at the bottom of the post
|
||||||
|
license:
|
||||||
|
template: 本文章以 :LICENSE_NAME 授權
|
||||||
|
name: CC BY 4.0
|
||||||
|
link: https://creativecommons.org/licenses/by/4.0/
|
||||||
|
|
||||||
|
# Displayed in the footer
|
||||||
|
brief: 保留部份權利。
|
||||||
|
verbose: >-
|
||||||
|
除非另有說明,否則本網誌的文章均由作者按照姓名標示 4.0 國際 (CC BY 4.0) 授權條款進行授權。
|
||||||
|
|
||||||
|
meta: 本網站使用 :PLATFORM 產生,採用 :THEME 主題
|
||||||
|
|
||||||
|
not_found:
|
||||||
|
statment: 抱歉,您可能正在存取一個已被移動的 URL,或者它從未存在。
|
||||||
|
|
||||||
|
notification:
|
||||||
|
update_found: 發現新版本更新。
|
||||||
|
update: 更新
|
||||||
|
|
||||||
|
# ----- Posts related labels -----
|
||||||
|
|
||||||
|
post:
|
||||||
|
written_by: 作者
|
||||||
|
posted: 發布於
|
||||||
|
updated: 更新於
|
||||||
|
words: 字
|
||||||
|
pageview_measure: 次瀏覽
|
||||||
|
read_time:
|
||||||
|
unit: 分鐘
|
||||||
|
prompt: 閱讀
|
||||||
|
relate_posts: 相關文章
|
||||||
|
share: 分享
|
||||||
|
button:
|
||||||
|
next: 下一篇
|
||||||
|
previous: 上一篇
|
||||||
|
copy_code:
|
||||||
|
succeed: 已複製!
|
||||||
|
share_link:
|
||||||
|
title: 分享連結
|
||||||
|
succeed: 已複製連結!
|
||||||
|
|
||||||
|
# Date time format.
|
||||||
|
# See: <http://strftime.net/>, <https://day.js.org/docs/en/display/format>
|
||||||
|
df:
|
||||||
|
post:
|
||||||
|
strftime: "%Y/%m/%d"
|
||||||
|
dayjs: "YYYY/MM/DD"
|
||||||
|
|
||||||
|
# categories page
|
||||||
|
categories:
|
||||||
|
category_measure: 個分類
|
||||||
|
post_measure: 篇文章
|
||||||
46
_data/origin/basic.yml
Normal file
46
_data/origin/basic.yml
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
# fonts
|
||||||
|
|
||||||
|
webfonts: /assets/lib/fonts/main.css
|
||||||
|
|
||||||
|
# Libraries
|
||||||
|
|
||||||
|
jquery:
|
||||||
|
js: /assets/lib/jquery/jquery.min.js
|
||||||
|
|
||||||
|
bootstrap:
|
||||||
|
css: /assets/lib/bootstrap/bootstrap.min.css
|
||||||
|
js: /assets/lib/bootstrap/bootstrap.bundle.min.js
|
||||||
|
|
||||||
|
toc:
|
||||||
|
css: /assets/lib/tocbot/tocbot.min.css
|
||||||
|
js: /assets/lib/tocbot/tocbot.min.js
|
||||||
|
|
||||||
|
fontawesome:
|
||||||
|
css: /assets/lib/fontawesome-free/css/all.min.css
|
||||||
|
|
||||||
|
search:
|
||||||
|
js: /assets/lib/simple-jekyll-search/simple-jekyll-search.min.js
|
||||||
|
|
||||||
|
mermaid:
|
||||||
|
js: /assets/lib/mermaid/mermaid.min.js
|
||||||
|
|
||||||
|
dayjs:
|
||||||
|
js:
|
||||||
|
common: /assets/lib/dayjs/dayjs.min.js
|
||||||
|
locale: /assets/lib/dayjs/locale/en.min.js
|
||||||
|
relativeTime: /assets/lib/dayjs/plugin/relativeTime.min.js
|
||||||
|
localizedFormat: /assets/lib/dayjs/plugin/localizedFormat.min.js
|
||||||
|
|
||||||
|
magnific-popup:
|
||||||
|
css: /assets/lib/magnific-popup/magnific-popup.css
|
||||||
|
js: /assets/lib/magnific-popup/jquery.magnific-popup.min.js
|
||||||
|
|
||||||
|
lazy-polyfill:
|
||||||
|
css: /assets/lib/loading-attribute-polyfill/loading-attribute-polyfill.min.css
|
||||||
|
js: /assets/lib/loading-attribute-polyfill/loading-attribute-polyfill.umd.min.js
|
||||||
|
|
||||||
|
clipboard:
|
||||||
|
js: /assets/lib/clipboard/clipboard.min.js
|
||||||
|
|
||||||
|
mathjax:
|
||||||
|
js: /assets/lib/mathjax/tex-chtml.js
|
||||||
57
_data/origin/cors.yml
Normal file
57
_data/origin/cors.yml
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
# CDNs
|
||||||
|
|
||||||
|
cdns:
|
||||||
|
# Google Fonts
|
||||||
|
- url: https://fonts.googleapis.com
|
||||||
|
- url: https://fonts.gstatic.com
|
||||||
|
args: crossorigin
|
||||||
|
- url: https://fonts.googleapis.com
|
||||||
|
# jsDelivr CDN
|
||||||
|
- url: https://cdn.jsdelivr.net
|
||||||
|
|
||||||
|
# fonts
|
||||||
|
|
||||||
|
webfonts: https://fonts.googleapis.com/css2?family=Lato&family=Source+Sans+Pro:wght@400;600;700;900&display=swap
|
||||||
|
|
||||||
|
# Libraries
|
||||||
|
|
||||||
|
jquery:
|
||||||
|
js: https://cdn.jsdelivr.net/npm/jquery@3.7.1/dist/jquery.min.js
|
||||||
|
|
||||||
|
bootstrap:
|
||||||
|
css: https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css
|
||||||
|
js: https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js
|
||||||
|
|
||||||
|
toc:
|
||||||
|
css: https://cdn.jsdelivr.net/npm/tocbot@4.21.3/dist/tocbot.min.css
|
||||||
|
js: https://cdn.jsdelivr.net/npm/tocbot@4.21.3/dist/tocbot.min.js
|
||||||
|
|
||||||
|
fontawesome:
|
||||||
|
css: https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.4.2/css/all.min.css
|
||||||
|
|
||||||
|
search:
|
||||||
|
js: https://cdn.jsdelivr.net/npm/simple-jekyll-search@1.10.0/dest/simple-jekyll-search.min.js
|
||||||
|
|
||||||
|
mermaid:
|
||||||
|
js: https://cdn.jsdelivr.net/npm/mermaid@10.6.0/dist/mermaid.min.js
|
||||||
|
|
||||||
|
dayjs:
|
||||||
|
js:
|
||||||
|
common: https://cdn.jsdelivr.net/npm/dayjs@1.11.10/dayjs.min.js
|
||||||
|
locale: https://cdn.jsdelivr.net/npm/dayjs@1.11.10/locale/:LOCALE.min.js
|
||||||
|
relativeTime: https://cdn.jsdelivr.net/npm/dayjs@1.11.10/plugin/relativeTime.min.js
|
||||||
|
localizedFormat: https://cdn.jsdelivr.net/npm/dayjs@1.11.10/plugin/localizedFormat.min.js
|
||||||
|
|
||||||
|
magnific-popup:
|
||||||
|
css: https://cdn.jsdelivr.net/npm/magnific-popup@1.1.0/dist/magnific-popup.min.css
|
||||||
|
js: https://cdn.jsdelivr.net/npm/magnific-popup@1.1.0/dist/jquery.magnific-popup.min.js
|
||||||
|
|
||||||
|
lazy-polyfill:
|
||||||
|
css: https://cdn.jsdelivr.net/npm/loading-attribute-polyfill@2.1.1/dist/loading-attribute-polyfill.min.css
|
||||||
|
js: https://cdn.jsdelivr.net/npm/loading-attribute-polyfill@2.1.1/dist/loading-attribute-polyfill.umd.min.js
|
||||||
|
|
||||||
|
clipboard:
|
||||||
|
js: https://cdn.jsdelivr.net/npm/clipboard@2.0.11/dist/clipboard.min.js
|
||||||
|
|
||||||
|
mathjax:
|
||||||
|
js: https://cdn.jsdelivr.net/npm/mathjax@3.2.2/es5/tex-chtml.js
|
||||||
@@ -2,26 +2,37 @@
|
|||||||
# Icons from <https://fontawesome.com/>
|
# Icons from <https://fontawesome.com/>
|
||||||
|
|
||||||
platforms:
|
platforms:
|
||||||
-
|
- type: Twitter
|
||||||
type: Twitter
|
icon: "fa-brands fa-square-x-twitter"
|
||||||
icon: "fab fa-twitter"
|
|
||||||
link: "https://twitter.com/intent/tweet?text=TITLE&url=URL"
|
link: "https://twitter.com/intent/tweet?text=TITLE&url=URL"
|
||||||
-
|
|
||||||
type: Facebook
|
- type: Facebook
|
||||||
icon: "fab fa-facebook-square"
|
icon: "fab fa-facebook-square"
|
||||||
link: "https://www.facebook.com/sharer/sharer.php?title=TITLE&u=URL"
|
link: "https://www.facebook.com/sharer/sharer.php?title=TITLE&u=URL"
|
||||||
-
|
|
||||||
type: Telegram
|
- type: Telegram
|
||||||
icon: "fab fa-telegram"
|
icon: "fab fa-telegram"
|
||||||
link: "https://t.me/share/url?url=URL&text=TITLE"
|
link: "https://t.me/share/url?url=URL&text=TITLE"
|
||||||
|
|
||||||
# Uncomment below if you need to.
|
# Uncomment below if you need to.
|
||||||
# -
|
#
|
||||||
# type: Linkedin
|
# - type: Linkedin
|
||||||
# icon: "fab fa-linkedin"
|
# icon: "fab fa-linkedin"
|
||||||
# link: "https://www.linkedin.com/sharing/share-offsite/?url=URL"
|
# link: "https://www.linkedin.com/sharing/share-offsite/?url=URL"
|
||||||
#
|
#
|
||||||
# -
|
# - type: Weibo
|
||||||
# type: Weibo
|
|
||||||
# icon: "fab fa-weibo"
|
# icon: "fab fa-weibo"
|
||||||
# link: "http://service.weibo.com/share/share.php?title=TITLE&url=URL"
|
# link: "http://service.weibo.com/share/share.php?title=TITLE&url=URL"
|
||||||
|
#
|
||||||
|
# - type: Mastodon
|
||||||
|
# icon: "fa-brands fa-mastodon"
|
||||||
|
# # See: https://github.com/justinribeiro/share-to-mastodon#properties
|
||||||
|
# instances:
|
||||||
|
# - label: mastodon.social
|
||||||
|
# link: "https://mastodon.social/"
|
||||||
|
# - label: mastodon.online
|
||||||
|
# link: "https://mastodon.online/"
|
||||||
|
# - label: fosstodon.org
|
||||||
|
# link: "https://fosstodon.org/"
|
||||||
|
# - label: photog.social
|
||||||
|
# link: "https://photog.social/"
|
||||||
|
|||||||
@@ -1,54 +1,50 @@
|
|||||||
<!--
|
<!-- The Disqus lazy loading. -->
|
||||||
The Disqus lazy loading.
|
|
||||||
-->
|
<div id="disqus_thread">
|
||||||
<div id="disqus_thread" class="pt-2 pb-2">
|
<p class="text-center text-muted small">Comments powered by <a href="https://disqus.com/">Disqus</a>.</p>
|
||||||
<p class="text-center text-muted small">
|
|
||||||
Comments powered by <a href="https://disqus.com/">Disqus</a>.
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
|
||||||
var disqus_config = function () {
|
var disqus_config = function () {
|
||||||
this.page.url = '{{ page.url | absolute_url }}';
|
this.page.url = '{{ page.url | absolute_url }}';
|
||||||
this.page.identifier = '{{ page.url }}';
|
this.page.identifier = '{{ page.url }}';
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Lazy loading */
|
/* Lazy loading */
|
||||||
|
var disqus_observer = new IntersectionObserver(
|
||||||
var disqus_observer = new IntersectionObserver(function (entries) {
|
function (entries) {
|
||||||
if(entries[0].isIntersecting) {
|
if (entries[0].isIntersecting) {
|
||||||
(function () {
|
(function () {
|
||||||
var d = document, s = d.createElement('script');
|
var d = document,
|
||||||
s.src = 'https://{{ site.comments.disqus.shortname }}.disqus.com/embed.js';
|
s = d.createElement('script');
|
||||||
s.setAttribute('data-timestamp', +new Date());
|
s.src = 'https://{{ site.comments.disqus.shortname }}.disqus.com/embed.js';
|
||||||
(d.head || d.body).appendChild(s);
|
s.setAttribute('data-timestamp', +new Date());
|
||||||
|
(d.head || d.body).appendChild(s);
|
||||||
})();
|
})();
|
||||||
|
|
||||||
disqus_observer.disconnect();
|
disqus_observer.disconnect();
|
||||||
}
|
}
|
||||||
}, { threshold: [0] });
|
},
|
||||||
|
{ threshold: [0] }
|
||||||
|
);
|
||||||
|
|
||||||
disqus_observer.observe(document.querySelector('#disqus_thread'));
|
disqus_observer.observe(document.querySelector('#disqus_thread'));
|
||||||
|
|
||||||
/* Auto switch theme */
|
/* Auto switch theme */
|
||||||
|
|
||||||
function reloadDisqus() {
|
function reloadDisqus() {
|
||||||
/* Disqus hasn't been loaded */
|
if (event.source === window && event.data && event.data.direction === ModeToggle.ID) {
|
||||||
if (typeof DISQUS === "undefined") {
|
/* Disqus hasn't been loaded */
|
||||||
return;
|
if (typeof DISQUS === 'undefined') {
|
||||||
}
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (document.readyState == 'complete') {
|
if (document.readyState == 'complete') {
|
||||||
DISQUS.reset({ reload: true, config: disqus_config });
|
DISQUS.reset({ reload: true, config: disqus_config });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const modeToggle = document.querySelector(".mode-toggle");
|
if (document.querySelector('.mode-toggle')) {
|
||||||
|
window.addEventListener('message', reloadDisqus);
|
||||||
if (typeof modeToggle !== "undefined") {
|
|
||||||
/* modeToggle.addEventListener('click', reloadDisqus); // not pretty for 'color-scheme' */
|
|
||||||
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', reloadDisqus);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -1,44 +1,55 @@
|
|||||||
<!-- https://giscus.app/ -->
|
<!-- https://giscus.app/ -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
$(function () {
|
(function () {
|
||||||
const origin = "https://giscus.app";
|
const origin = 'https://giscus.app';
|
||||||
const iframe = "iframe.giscus-frame";
|
const iframe = 'iframe.giscus-frame';
|
||||||
const lightTheme = "light";
|
const lightTheme = 'light';
|
||||||
const darkTheme = "dark_dimmed";
|
const darkTheme = 'dark_dimmed';
|
||||||
let initTheme = lightTheme;
|
|
||||||
|
|
||||||
if ($("html[data-mode=dark]").length > 0
|
let initTheme = lightTheme;
|
||||||
|| ($("html[data-mode]").length == 0
|
const html = document.documentElement;
|
||||||
&& window.matchMedia("(prefers-color-scheme: dark)").matches)) {
|
|
||||||
|
if (
|
||||||
|
(html.hasAttribute('data-mode') &&
|
||||||
|
html.getAttribute('data-mode') === 'dark') ||
|
||||||
|
(!html.hasAttribute('data-mode') &&
|
||||||
|
window.matchMedia('(prefers-color-scheme: dark)').matches)
|
||||||
|
) {
|
||||||
initTheme = darkTheme;
|
initTheme = darkTheme;
|
||||||
}
|
}
|
||||||
|
|
||||||
let giscusAttributes = {
|
let giscusAttributes = {
|
||||||
"src": "https://giscus.app/client.js",
|
src: 'https://giscus.app/client.js',
|
||||||
"data-repo": "{{ site.comments.giscus.repo}}",
|
'data-repo': '{{ site.comments.giscus.repo}}',
|
||||||
"data-repo-id": "{{ site.comments.giscus.repo_id }}",
|
'data-repo-id': '{{ site.comments.giscus.repo_id }}',
|
||||||
"data-category": "{{ site.comments.giscus.category }}",
|
'data-category': '{{ site.comments.giscus.category }}',
|
||||||
"data-category-id": "{{ site.comments.giscus.category_id }}",
|
'data-category-id': '{{ site.comments.giscus.category_id }}',
|
||||||
"data-mapping": "{{ site.comments.giscus.mapping | default: 'pathname' }}",
|
'data-mapping': '{{ site.comments.giscus.mapping | default: 'pathname' }}',
|
||||||
"data-reactions-enabled": "1",
|
'data-reactions-enabled': '{{ site.comments.giscus.reactions_enabled | default: '1' }}',
|
||||||
"data-emit-metadata": "0",
|
'data-emit-metadata': '0',
|
||||||
"data-theme": initTheme,
|
'data-theme': initTheme,
|
||||||
"data-input-position": "{{ site.comments.giscus.input_position | default: 'bottom' }}",
|
'data-input-position': '{{ site.comments.giscus.input_position | default: 'bottom' }}',
|
||||||
"data-lang": "{{ site.comments.giscus.lang | default: lang }}",
|
'data-lang': '{{ site.comments.giscus.lang | default: lang }}',
|
||||||
"crossorigin": "anonymous",
|
'data-loading': 'lazy',
|
||||||
"async": ""
|
crossorigin: 'anonymous',
|
||||||
|
async: ''
|
||||||
};
|
};
|
||||||
|
|
||||||
let giscusScript = document.createElement("script");
|
let giscusScript = document.createElement('script');
|
||||||
Object.entries(giscusAttributes).forEach(([key, value]) => giscusScript.setAttribute(key, value));
|
Object.entries(giscusAttributes).forEach(([key, value]) =>
|
||||||
document.getElementById("tail-wrapper").appendChild(giscusScript);
|
giscusScript.setAttribute(key, value)
|
||||||
|
);
|
||||||
|
document.getElementById('tail-wrapper').appendChild(giscusScript);
|
||||||
|
|
||||||
addEventListener("message", (event) => {
|
addEventListener('message', (event) => {
|
||||||
if (event.source === window && event.data &&
|
if (
|
||||||
event.data.direction === ModeToggle.ID) {
|
event.source === window &&
|
||||||
|
event.data &&
|
||||||
|
event.data.direction === ModeToggle.ID
|
||||||
|
) {
|
||||||
/* global theme mode changed */
|
/* global theme mode changed */
|
||||||
const mode = event.data.message;
|
const mode = event.data.message;
|
||||||
const theme = (mode === ModeToggle.DARK_MODE ? darkTheme : lightTheme);
|
const theme = mode === ModeToggle.DARK_MODE ? darkTheme : lightTheme;
|
||||||
|
|
||||||
const message = {
|
const message = {
|
||||||
setConfig: {
|
setConfig: {
|
||||||
@@ -49,8 +60,6 @@
|
|||||||
const giscus = document.querySelector(iframe).contentWindow;
|
const giscus = document.querySelector(iframe).contentWindow;
|
||||||
giscus.postMessage({ giscus: message }, origin);
|
giscus.postMessage({ giscus: message }, origin);
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
})();
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -1,51 +1,50 @@
|
|||||||
<!-- https://utteranc.es/ -->
|
<!-- https://utteranc.es/ -->
|
||||||
<script src="https://utteranc.es/client.js"
|
<script
|
||||||
repo="{{ site.comments.utterances.repo }}"
|
src="https://utteranc.es/client.js"
|
||||||
issue-term="{{ site.comments.utterances.issue_term }}"
|
repo="{{ site.comments.utterances.repo }}"
|
||||||
crossorigin="anonymous"
|
issue-term="{{ site.comments.utterances.issue_term }}"
|
||||||
async>
|
crossorigin="anonymous"
|
||||||
</script>
|
async
|
||||||
|
></script>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
$(function() {
|
(function () {
|
||||||
const origin = "https://utteranc.es";
|
const origin = 'https://utteranc.es';
|
||||||
const iframe = "iframe.utterances-frame";
|
const iframe = 'iframe.utterances-frame';
|
||||||
const lightTheme = "github-light";
|
const lightTheme = 'github-light';
|
||||||
const darkTheme = "github-dark";
|
const darkTheme = 'github-dark';
|
||||||
let initTheme = lightTheme;
|
let initTheme = lightTheme;
|
||||||
|
const html = document.documentElement;
|
||||||
|
|
||||||
if ($("html[data-mode=dark]").length > 0
|
if (
|
||||||
|| ($("html[data-mode]").length == 0
|
(html.hasAttribute('data-mode') && html.getAttribute('data-mode') === 'dark') ||
|
||||||
&& window.matchMedia("(prefers-color-scheme: dark)").matches)) {
|
(!html.hasAttribute('data-mode') && window.matchMedia('(prefers-color-scheme: dark)').matches)
|
||||||
|
) {
|
||||||
initTheme = darkTheme;
|
initTheme = darkTheme;
|
||||||
}
|
}
|
||||||
|
|
||||||
addEventListener("message", (event) => {
|
addEventListener('message', (event) => {
|
||||||
let theme;
|
let theme;
|
||||||
|
|
||||||
/* credit to <https://github.com/utterance/utterances/issues/170#issuecomment-594036347> */
|
/* credit to <https://github.com/utterance/utterances/issues/170#issuecomment-594036347> */
|
||||||
if (event.origin === origin) {
|
if (event.origin === origin) {
|
||||||
/* page initial */
|
/* page initial */
|
||||||
theme = initTheme;
|
theme = initTheme;
|
||||||
|
} else if (event.source === window && event.data && event.data.direction === ModeToggle.ID) {
|
||||||
} else if (event.source === window && event.data &&
|
|
||||||
event.data.direction === ModeToggle.ID) {
|
|
||||||
/* global theme mode changed */
|
/* global theme mode changed */
|
||||||
const mode = event.data.message;
|
const mode = event.data.message;
|
||||||
theme = (mode === ModeToggle.DARK_MODE ? darkTheme : lightTheme);
|
theme = mode === ModeToggle.DARK_MODE ? darkTheme : lightTheme;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const message = {
|
const message = {
|
||||||
type: "set-theme",
|
type: 'set-theme',
|
||||||
theme: theme
|
theme: theme
|
||||||
};
|
};
|
||||||
|
|
||||||
const utterances = document.querySelector(iframe).contentWindow;
|
const utterances = document.querySelector(iframe).contentWindow;
|
||||||
utterances.postMessage(message, origin);
|
utterances.postMessage(message, origin);
|
||||||
});
|
});
|
||||||
|
})();
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -3,19 +3,18 @@
|
|||||||
See: ${JS_ROOT}/utils/locale-dateime.js
|
See: ${JS_ROOT}/utils/locale-dateime.js
|
||||||
-->
|
-->
|
||||||
|
|
||||||
{% assign wrap_elem = include.wrap | default: 'em' %}
|
{% assign df_strftime = site.data.locales[include.lang].df.post.strftime | default: '%d/%m/%Y' %}
|
||||||
|
{% assign df_dayjs = site.data.locales[include.lang].df.post.dayjs | default: 'DD/MM/YYYY' %}
|
||||||
|
|
||||||
{% if site.prefer_datetime_locale == 'en' or lang == 'en' %}
|
<time
|
||||||
{% assign df_strftime = '%b %e, %Y' %}
|
{% if include.class %}
|
||||||
{% assign df_dayjs = 'll' %}
|
class="{{ include.class }}"
|
||||||
{% else %}
|
{% endif %}
|
||||||
{% assign df_strftime = '%F' %}
|
data-ts="{{ include.date | date: '%s' }}"
|
||||||
{% assign df_dayjs = 'YYYY-MM-DD' %}
|
data-df="{{ df_dayjs }}"
|
||||||
{% endif %}
|
{% if include.tooltip %}
|
||||||
|
data-bs-toggle="tooltip" data-bs-placement="bottom"
|
||||||
<{{ wrap_elem }} class="{% if include.class %}{{ include.class }}{% endif %}"
|
{% endif %}
|
||||||
data-ts="{{ include.date | date: '%s' }}"
|
>
|
||||||
data-df="{{ df_dayjs }}"
|
|
||||||
{% if include.tooltip %}data-toggle="tooltip" data-placement="bottom"{% endif %}>
|
|
||||||
{{ include.date | date: df_strftime }}
|
{{ include.date | date: df_strftime }}
|
||||||
</{{ wrap_elem }}>
|
</time>
|
||||||
|
|||||||
8
_includes/embed/twitch.html
Normal file
8
_includes/embed/twitch.html
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<iframe
|
||||||
|
class="embed-video twitch"
|
||||||
|
loading="lazy"
|
||||||
|
src="https://player.twitch.tv/?video={{ include.id }}&parent={{ site.url | split: '://' | last | remove: '/' }}"
|
||||||
|
frameborder="0"
|
||||||
|
allowfullscreen="true"
|
||||||
|
scrolling="no"
|
||||||
|
></iframe>
|
||||||
9
_includes/embed/youtube.html
Normal file
9
_includes/embed/youtube.html
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<iframe
|
||||||
|
class="embed-video youtube"
|
||||||
|
loading="lazy"
|
||||||
|
src="https://www.youtube.com/embed/{{ include.id }}"
|
||||||
|
title="YouTube video player"
|
||||||
|
frameborder="0"
|
||||||
|
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
|
||||||
|
allowfullscreen
|
||||||
|
></iframe>
|
||||||
@@ -1,36 +1,36 @@
|
|||||||
<!-- The Footer -->
|
<!-- The Footer -->
|
||||||
|
|
||||||
<footer class="row pl-3 pr-3">
|
<footer
|
||||||
<div class="col-12 d-flex justify-content-between align-items-center text-muted pl-0 pr-0">
|
aria-label="Site Info"
|
||||||
<div class="footer-left">
|
class="
|
||||||
<p class="mb-0">
|
d-flex flex-column justify-content-center text-muted
|
||||||
© {{ 'now' | date: "%Y" }}
|
flex-lg-row justify-content-lg-between align-items-lg-center pb-lg-3
|
||||||
<a href="{{ site.social.links[0] }}">{{ site.social.name }}</a>.
|
"
|
||||||
{% if site.data.locales[lang].copyright.brief %}
|
>
|
||||||
<span data-toggle="tooltip" data-placement="top"
|
<p>
|
||||||
title="{{ site.data.locales[lang].copyright.verbose }}">{{ site.data.locales[lang].copyright.brief }}</span>
|
{{ '©' }}
|
||||||
{% endif %}
|
<time>{{ 'now' | date: '%Y' }}</time>
|
||||||
</p>
|
<a href="{{ site.social.links[0] }}">{{ site.social.name }}</a>.
|
||||||
</div>
|
{% if site.data.locales[include.lang].copyright.brief %}
|
||||||
|
<span
|
||||||
|
data-bs-toggle="tooltip"
|
||||||
|
data-bs-placement="top"
|
||||||
|
title="{{ site.data.locales[include.lang].copyright.verbose }}"
|
||||||
|
>
|
||||||
|
{{- site.data.locales[include.lang].copyright.brief -}}
|
||||||
|
</span>
|
||||||
|
{% endif %}
|
||||||
|
</p>
|
||||||
|
|
||||||
<div class="footer-right">
|
<p>
|
||||||
<p class="mb-0">
|
{%- capture _platform -%}
|
||||||
{% capture _platform %}
|
<a href="https://jekyllrb.com" target="_blank" rel="noopener">Jekyll</a>
|
||||||
<a href="https://jekyllrb.com" target="_blank" rel="noopener">Jekyll</a>
|
{%- endcapture -%}
|
||||||
{% endcapture %}
|
|
||||||
|
|
||||||
{% capture _theme %}
|
{%- capture _theme -%}
|
||||||
<a href="https://github.com/cotes2020/jekyll-theme-chirpy" target="_blank" rel="noopener">Chirpy</a>
|
<a href="https://github.com/cotes2020/jekyll-theme-chirpy" target="_blank" rel="noopener">Chirpy</a>
|
||||||
{% endcapture %}
|
{%- endcapture -%}
|
||||||
|
|
||||||
{{ site.data.locales[lang].meta
|
|
||||||
| default: 'Powered by :PLATFORM with :THEME theme.'
|
|
||||||
| replace: ':PLATFORM', _platform | replace: ':THEME', _theme
|
|
||||||
}}
|
|
||||||
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
{{ site.data.locales[include.lang].meta | replace: ':PLATFORM', _platform | replace: ':THEME', _theme }}
|
||||||
|
</p>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
@@ -1,116 +1,99 @@
|
|||||||
<!--
|
<!-- The Head -->
|
||||||
The Head
|
|
||||||
-->
|
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
<meta name="theme-color" media="(prefers-color-scheme: light)" content="#f7f7f7">
|
||||||
|
<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#1b1b1e">
|
||||||
<!-- Allow having a localized datetime different from the appearance language -->
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||||
{% if site.prefer_datetime_locale %}
|
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
|
||||||
<meta name="prefer-datetime-locale" content="{{ site.prefer_datetime_locale }}">
|
<meta
|
||||||
{% endif %}
|
name="viewport"
|
||||||
|
content="width=device-width, user-scalable=no initial-scale=1, shrink-to-fit=no, viewport-fit=cover"
|
||||||
{% if page.layout == 'home' or page.layout == 'post' %}
|
>
|
||||||
|
|
||||||
{% if site.google_analytics.pv.proxy_endpoint %}
|
|
||||||
<meta name="pv-proxy-endpoint" content="{{ site.google_analytics.pv.proxy_endpoint }}">
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if site.google_analytics.pv.cache_path %}
|
|
||||||
<meta name="pv-cache-path" content="{{ site.google_analytics.pv.cache_path | relative_url }}">
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% capture seo_tags %}
|
{% capture seo_tags %}
|
||||||
{% seo title=false %}
|
{% seo title=false %}
|
||||||
{% endcapture %}
|
{% endcapture %}
|
||||||
|
|
||||||
{% if site.img_cdn and seo_tags contains 'og:image' %}
|
{% if page.image %}
|
||||||
{% assign properties = 'og:image,twitter:image' | split: ',' %}
|
{% assign img = page.image.path | default: page.image %}
|
||||||
|
|
||||||
|
{% unless img contains '://' %}
|
||||||
|
{% assign img_path = page.img_path | append: '/' | append: img | replace: '//', '/' %}
|
||||||
|
{% capture target %}"{{ img | absolute_url }}"{% endcapture %}
|
||||||
|
|
||||||
{% for prop in properties %}
|
|
||||||
{% if site.img_cdn contains '//' %}
|
{% if site.img_cdn contains '//' %}
|
||||||
<!-- `site.img_cdn` is a cross-origin URL -->
|
<!-- it's a cross-origin URL -->
|
||||||
{% capture target %}<meta property="{{ prop }}" content="{{ site.url }}{% endcapture %}
|
{% capture replacement %}"{{ site.img_cdn }}{{ img_path }}"{% endcapture %}
|
||||||
{% capture replacement %}<meta property="{{ prop }}" content="{{ site.img_cdn }}{% endcapture %}
|
|
||||||
{% else %}
|
{% else %}
|
||||||
<!-- `site.img_cdn` is a local file path -->
|
<!-- it's a local file path -->
|
||||||
{% capture target %}<meta property="{{ prop }}" content="{{ site.url }}{{ site.baseurl }}{% endcapture %}
|
{%- capture replacement -%}
|
||||||
{% assign replacement = target | append: site.img_cdn %}
|
"{{ site.img_cdn | append: '/' | append: img_path | replace: '//', '/' | absolute_url }}"
|
||||||
|
{%- endcapture -%}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% assign seo_tags = seo_tags | replace: target, replacement %}
|
{% assign seo_tags = seo_tags | replace: target, replacement %}
|
||||||
|
{% endunless %}
|
||||||
{% endfor %}
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{{ seo_tags }}
|
{{ seo_tags }}
|
||||||
|
|
||||||
<title>
|
<title>
|
||||||
{%- unless page.layout == "home" -%}
|
{%- unless page.layout == 'home' -%}
|
||||||
{{ page.title | append: " | "}}
|
{{ page.title | append: ' | ' }}
|
||||||
{%- endunless -%}
|
{%- endunless -%}
|
||||||
{{ site.title }}
|
{{ site.title }}
|
||||||
</title>
|
</title>
|
||||||
|
|
||||||
{% include favicons.html %}
|
{% include_cached favicons.html %}
|
||||||
|
|
||||||
{% if site.resources.ignore_env != jekyll.environment and site.resources.self_hosted %}
|
{% if site.resources.ignore_env != jekyll.environment and site.resources.self_hosted %}
|
||||||
|
<link href="{{ site.data.origin[type].webfonts | relative_url }}" rel="stylesheet">
|
||||||
<link href="{{ site.data.assets[origin].webfonts | relative_url }}" rel="stylesheet">
|
|
||||||
|
|
||||||
{% else %}
|
{% else %}
|
||||||
|
{% for cdn in site.data.origin[type].cdns %}
|
||||||
{% for cdn in site.data.assets[origin].cdns %}
|
|
||||||
<link rel="preconnect" href="{{ cdn.url }}" {{ cdn.args }}>
|
<link rel="preconnect" href="{{ cdn.url }}" {{ cdn.args }}>
|
||||||
<link rel="dns-prefetch" href="{{ cdn.url }}" {{ cdn.args }}>
|
<link rel="dns-prefetch" href="{{ cdn.url }}" {{ cdn.args }}>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
<link rel="stylesheet" href="{{ site.data.assets[origin].webfonts | relative_url }}">
|
<link rel="stylesheet" href="{{ site.data.origin[type].webfonts | relative_url }}">
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<!-- GA -->
|
<!-- GA -->
|
||||||
{% if jekyll.environment == 'production'
|
{% if jekyll.environment == 'production' and site.google_analytics.id != empty and site.google_analytics.id %}
|
||||||
and site.google_analytics.id != empty and site.google_analytics.id %}
|
|
||||||
<link rel="preconnect" href="https://www.google-analytics.com" crossorigin="use-credentials">
|
<link rel="preconnect" href="https://www.google-analytics.com" crossorigin="use-credentials">
|
||||||
<link rel="dns-prefetch" href="https://www.google-analytics.com">
|
<link rel="dns-prefetch" href="https://www.google-analytics.com">
|
||||||
|
|
||||||
<link rel="preconnect" href="https://www.googletagmanager.com" crossorigin="anonymous">
|
<link rel="preconnect" href="https://www.googletagmanager.com" crossorigin="anonymous">
|
||||||
<link rel="dns-prefetch" href="https://www.googletagmanager.com">
|
<link rel="dns-prefetch" href="https://www.googletagmanager.com">
|
||||||
|
|
||||||
{% if site.google_analytics.pv.proxy_endpoint %}
|
|
||||||
{% assign proxy_url = site.google_analytics.pv.proxy_endpoint
|
|
||||||
| replace: "https://", "" | split: "/" | first | prepend: "https://" %}
|
|
||||||
<link rel="preconnect" href="{{ proxy_url }}" crossorigin="use-credentials">
|
|
||||||
<link rel="dns-prefetch" href="{{ proxy_url }}">
|
|
||||||
{% endif %}
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<!-- Bootstrap -->
|
<!-- Bootstrap -->
|
||||||
<link rel="stylesheet" href="{{ site.data.assets[origin].bootstrap.css | relative_url}}">
|
<link rel="stylesheet" href="{{ site.data.origin[type].bootstrap.css | relative_url}}">
|
||||||
|
|
||||||
<!-- Font Awesome -->
|
<!-- Font Awesome -->
|
||||||
<link rel="stylesheet" href="{{ site.data.assets[origin].fontawesome.css | relative_url }}">
|
<link rel="stylesheet" href="{{ site.data.origin[type].fontawesome.css | relative_url }}">
|
||||||
|
|
||||||
<link rel="stylesheet" href="{{ '/assets/css/style.css' | relative_url }}">
|
<link rel="stylesheet" href="{{ '/assets/css/:THEME.css' | replace: ':THEME', site.theme | relative_url }}">
|
||||||
|
|
||||||
{% if site.toc and page.toc %}
|
{% if site.toc and page.toc %}
|
||||||
<link rel="stylesheet" href="{{ site.data.assets[origin].bootstrap-toc.css | relative_url }}">
|
<link rel="stylesheet" href="{{ site.data.origin[type].toc.css | relative_url }}">
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if page.layout == 'post' or page.layout == 'page' or page.layout == 'home' %}
|
||||||
|
<link rel="stylesheet" href="{{ site.data.origin[type]['lazy-polyfill'].css | relative_url }}">
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if page.layout == 'page' or page.layout == 'post' %}
|
{% if page.layout == 'page' or page.layout == 'post' %}
|
||||||
<!-- Manific Popup -->
|
<!-- Manific Popup -->
|
||||||
<link rel="stylesheet" href="{{ site.data.assets[origin].magnific-popup.css | relative_url }}">
|
<link rel="stylesheet" href="{{ site.data.origin[type].magnific-popup.css | relative_url }}">
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<!-- JavaScript -->
|
<!-- JavaScript -->
|
||||||
|
|
||||||
<script src="{{ site.data.assets[origin].jquery.js | relative_url }}"></script>
|
|
||||||
|
|
||||||
{% unless site.theme_mode %}
|
{% unless site.theme_mode %}
|
||||||
{% include mode-toggle.html %}
|
{% include mode-toggle.html %}
|
||||||
{% endunless %}
|
{% endunless %}
|
||||||
|
|
||||||
|
{% include metadata-hook.html %}
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
@@ -1,93 +1,96 @@
|
|||||||
<!--
|
<!-- JS selector for site. -->
|
||||||
JS selector for site.
|
|
||||||
-->
|
<!-- commons -->
|
||||||
|
|
||||||
|
{% assign urls = site.data.origin[type].jquery.js
|
||||||
|
| append: ','
|
||||||
|
| append: site.data.origin[type].bootstrap.js
|
||||||
|
| append: ','
|
||||||
|
| append: site.data.origin[type].search.js
|
||||||
|
%}
|
||||||
|
|
||||||
<!-- layout specified -->
|
<!-- layout specified -->
|
||||||
|
|
||||||
{% if page.layout == 'post' %}
|
{% if page.layout == 'post' or page.layout == 'page' or page.layout == 'home' %}
|
||||||
{% if site.google_analytics.pv.proxy_endpoint or site.google_analytics.pv.cache_path %}
|
{% assign urls = urls | append: ',' | append: site.data.origin[type]['lazy-polyfill'].js %}
|
||||||
<!-- pv-report needs countup.js -->
|
|
||||||
<script async src="{{ site.data.assets[origin].countup.js | relative_url }}"></script>
|
|
||||||
<script defer src="{{ '/assets/js/dist/pvreport.min.js' | relative_url }}"></script>
|
|
||||||
{% endif %}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if page.layout == 'post' or page.layout == 'page' %}
|
|
||||||
<!-- image lazy-loading & popup & clipboard -->
|
|
||||||
{% assign _urls = site.data.assets[origin].magnific-popup.js
|
|
||||||
| append: ',' | append: site.data.assets[origin].lozad.js
|
|
||||||
| append: ',' | append: site.data.assets[origin].clipboard.js
|
|
||||||
%}
|
|
||||||
|
|
||||||
{% include jsdelivr-combine.html urls=_urls %}
|
|
||||||
|
|
||||||
|
{% unless page.layout == 'home' %}
|
||||||
|
<!-- image lazy-loading & popup & clipboard -->
|
||||||
|
{% assign urls = urls
|
||||||
|
| append: ','
|
||||||
|
| append: site.data.origin[type]['magnific-popup'].js
|
||||||
|
| append: ','
|
||||||
|
| append: site.data.origin[type].clipboard.js
|
||||||
|
%}
|
||||||
|
{% endunless %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if page.layout == 'home'
|
{% if page.layout == 'home'
|
||||||
or page.layout == 'post'
|
or page.layout == 'post'
|
||||||
or page.layout == 'archives'
|
or page.layout == 'archives'
|
||||||
or page.layout == 'category'
|
or page.layout == 'category'
|
||||||
or page.layout == 'tag' %}
|
or page.layout == 'tag'
|
||||||
|
%}
|
||||||
|
{% assign locale = site.lang | split: '-' | first %}
|
||||||
|
|
||||||
{% if site.prefer_datetime_locale %}
|
{% assign urls = urls
|
||||||
{% assign locale = site.prefer_datetime_locale | downcase %}
|
| append: ','
|
||||||
|
| append: site.data.origin[type].dayjs.js.common
|
||||||
|
| append: ','
|
||||||
|
| append: site.data.origin[type].dayjs.js.locale
|
||||||
|
| replace: ':LOCALE', locale
|
||||||
|
| append: ','
|
||||||
|
| append: site.data.origin[type].dayjs.js.relativeTime
|
||||||
|
| append: ','
|
||||||
|
| append: site.data.origin[type].dayjs.js.localizedFormat
|
||||||
|
%}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if page.content contains '<h2' or page.content contains '<h3' and site.toc and page.toc %}
|
||||||
|
{% assign urls = urls | append: ',' | append: site.data.origin[type].toc.js %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if page.mermaid %}
|
||||||
|
{% assign urls = urls | append: ',' | append: site.data.origin[type].mermaid.js %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% include jsdelivr-combine.html urls=urls %}
|
||||||
|
|
||||||
|
{% case page.layout %}
|
||||||
|
{% when 'home', 'categories', 'post', 'page' %}
|
||||||
|
{% assign js = page.layout %}
|
||||||
|
{% when 'archives', 'category', 'tag' %}
|
||||||
|
{% assign js = 'misc' %}
|
||||||
{% else %}
|
{% else %}
|
||||||
{% assign locale = site.lang | split: '-' | first %}
|
{% assign js = 'commons' %}
|
||||||
{% endif %}
|
{% endcase %}
|
||||||
|
|
||||||
{% assign _urls = site.data.assets[origin].dayjs.js.common
|
{% capture script %}/assets/js/dist/{{ js }}.min.js{% endcapture %}
|
||||||
| append: ',' | append: site.data.assets[origin].dayjs.js.locale
|
|
||||||
| replace: ':LOCALE', locale
|
|
||||||
| append: ',' | append: site.data.assets[origin].dayjs.js.relativeTime
|
|
||||||
| append: ',' | append: site.data.assets[origin].dayjs.js.localizedFormat
|
|
||||||
%}
|
|
||||||
|
|
||||||
{% include jsdelivr-combine.html urls=_urls %}
|
|
||||||
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if page.layout == 'home'
|
|
||||||
or page.layout == 'categories'
|
|
||||||
or page.layout == 'post'
|
|
||||||
or page.layout == 'page' %}
|
|
||||||
{% assign type = page.layout %}
|
|
||||||
{% elsif page.layout == 'archives'
|
|
||||||
or page.layout == 'category'
|
|
||||||
or page.layout == 'tag' %}
|
|
||||||
{% assign type = "misc" %}
|
|
||||||
{% else %}
|
|
||||||
{% assign type = "commons" %}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% capture script %}/assets/js/dist/{{ type }}.min.js{% endcapture %}
|
|
||||||
<script defer src="{{ script | relative_url }}"></script>
|
<script defer src="{{ script | relative_url }}"></script>
|
||||||
|
|
||||||
{% if page.math %}
|
{% if page.math %}
|
||||||
<!-- MathJax -->
|
<!-- MathJax -->
|
||||||
<script>
|
<script>
|
||||||
/* see: <https://docs.mathjax.org/en/latest/options/input/tex.html#tex-options> */
|
/* see: <https://docs.mathjax.org/en/latest/options/input/tex.html#tex-options> */
|
||||||
MathJax = {
|
MathJax = {
|
||||||
tex: {
|
tex: {
|
||||||
inlineMath: [ /* start/end delimiter pairs for in-line math */
|
/* start/end delimiter pairs for in-line math */
|
||||||
['$','$'],
|
inlineMath: [
|
||||||
['\\(','\\)']
|
['$', '$'],
|
||||||
],
|
['\\(', '\\)']
|
||||||
displayMath: [ /* start/end delimiter pairs for display math */
|
],
|
||||||
['$$', '$$'],
|
/* start/end delimiter pairs for display math */
|
||||||
['\\[', '\\]']
|
displayMath: [
|
||||||
]
|
['$$', '$$'],
|
||||||
}
|
['\\[', '\\]']
|
||||||
};
|
]
|
||||||
</script>
|
}
|
||||||
<script src="{{ site.data.assets[origin].polyfill.js | relative_url }}"></script>
|
};
|
||||||
<script id="MathJax-script" async src="{{ site.data.assets[origin].mathjax.js | relative_url }}">
|
|
||||||
</script>
|
</script>
|
||||||
|
<script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
|
||||||
|
<script id="MathJax-script" async src="{{ site.data.origin[type].mathjax.js | relative_url }}"></script>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<!-- commons -->
|
|
||||||
|
|
||||||
<script src="{{ site.data.assets[origin].bootstrap.js | relative_url }}"></script>
|
|
||||||
|
|
||||||
{% if jekyll.environment == 'production' %}
|
{% if jekyll.environment == 'production' %}
|
||||||
<!-- PWA -->
|
<!-- PWA -->
|
||||||
{% if site.pwa.enabled %}
|
{% if site.pwa.enabled %}
|
||||||
@@ -100,5 +103,4 @@
|
|||||||
{% if site.google_analytics.id != empty and site.google_analytics.id %}
|
{% if site.google_analytics.id != empty and site.google_analytics.id %}
|
||||||
{% include google-analytics.html %}
|
{% include google-analytics.html %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
{% assign domain = 'https://cdn.jsdelivr.net/' %}
|
{% assign domain = 'https://cdn.jsdelivr.net/' %}
|
||||||
|
|
||||||
{% for url in urls %}
|
{% for url in urls %}
|
||||||
|
|
||||||
{% if url contains domain %}
|
{% if url contains domain %}
|
||||||
{% assign url_snippet = url | slice: domain.size, url.size %}
|
{% assign url_snippet = url | slice: domain.size, url.size %}
|
||||||
|
|
||||||
@@ -16,15 +15,10 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% elsif url contains '//' %}
|
{% elsif url contains '//' %}
|
||||||
|
|
||||||
<script src="{{ url }}"></script>
|
<script src="{{ url }}"></script>
|
||||||
|
|
||||||
{% else %}
|
{% else %}
|
||||||
|
|
||||||
<script src="{{ url | relative_url }}"></script>
|
<script src="{{ url | relative_url }}"></script>
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
{% if combined_urls %}
|
{% if combined_urls %}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{% comment %}
|
{% comment %}
|
||||||
Detect appearance language and return it through variable "lang"
|
Detect appearance language and return it through variable "lang"
|
||||||
{% endcomment %}
|
{% endcomment %}
|
||||||
{% if site.data.locales[site.lang] %}
|
{% if site.data.locales[site.lang] %}
|
||||||
{% assign lang = site.lang %}
|
{% assign lang = site.lang %}
|
||||||
|
|||||||
@@ -1,57 +1,58 @@
|
|||||||
<!--
|
<!-- mermaid-js loader -->
|
||||||
mermaid-js loader
|
<script type="text/javascript">
|
||||||
-->
|
(function () {
|
||||||
|
|
||||||
<script src="{{ site.data.assets[origin].mermaid.js | relative_url }}"></script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
$(function() {
|
|
||||||
function updateMermaid(event) {
|
function updateMermaid(event) {
|
||||||
if (event.source === window && event.data &&
|
if (event.source === window && event.data && event.data.direction === ModeToggle.ID) {
|
||||||
event.data.direction === ModeToggle.ID) {
|
|
||||||
|
|
||||||
const mode = event.data.message;
|
const mode = event.data.message;
|
||||||
|
|
||||||
if (typeof mermaid === "undefined") {
|
if (typeof mermaid === 'undefined') {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let expectedTheme = (mode === ModeToggle.DARK_MODE? "dark" : "default");
|
let expectedTheme = mode === ModeToggle.DARK_MODE ? 'dark' : 'default';
|
||||||
let config = { theme: expectedTheme };
|
let config = { theme: expectedTheme };
|
||||||
|
|
||||||
/* Re-render the SVG › <https://github.com/mermaid-js/mermaid/issues/311#issuecomment-332557344> */
|
/* Re-render the SVG › <https://github.com/mermaid-js/mermaid/issues/311#issuecomment-332557344> */
|
||||||
$(".mermaid").each(function() {
|
$('.mermaid').each(function () {
|
||||||
let svgCode = $(this).prev().children().html();
|
let svgCode = $(this).prev().children().html();
|
||||||
$(this).removeAttr("data-processed");
|
$(this).removeAttr('data-processed');
|
||||||
$(this).html(svgCode);
|
$(this).html(svgCode);
|
||||||
});
|
});
|
||||||
|
|
||||||
mermaid.initialize(config);
|
mermaid.initialize(config);
|
||||||
mermaid.init(undefined, ".mermaid");
|
mermaid.init(undefined, '.mermaid');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let initTheme = "default";
|
let initTheme = 'default';
|
||||||
|
const html = document.documentElement;
|
||||||
|
|
||||||
if ($("html[data-mode=dark]").length > 0
|
if (
|
||||||
|| ($("html[data-mode]").length == 0
|
(html.hasAttribute('data-mode') && html.getAttribute('data-mode') === 'dark') ||
|
||||||
&& window.matchMedia("(prefers-color-scheme: dark)").matches ) ) {
|
(!html.hasAttribute('data-mode') && window.matchMedia('(prefers-color-scheme: dark)').matches)
|
||||||
initTheme = "dark";
|
) {
|
||||||
|
initTheme = 'dark';
|
||||||
}
|
}
|
||||||
|
|
||||||
let mermaidConf = {
|
let mermaidConf = {
|
||||||
theme: initTheme /* <default|dark|forest|neutral> */
|
theme: initTheme /* <default|dark|forest|neutral> */
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Markdown converts to HTML */
|
/* Create mermaid tag */
|
||||||
$("pre").has("code.language-mermaid").each(function() {
|
document.querySelectorAll('pre>code.language-mermaid').forEach((elem) => {
|
||||||
let svgCode = $(this).children().html();
|
const svgCode = elem.textContent;
|
||||||
$(this).addClass("unloaded");
|
const backup = elem.parentElement;
|
||||||
$(this).after(`<div class=\"mermaid\">${svgCode}</div>`);
|
backup.classList.add('unloaded');
|
||||||
|
/* create mermaid node */
|
||||||
|
let mermaid = document.createElement('pre');
|
||||||
|
mermaid.classList.add('mermaid');
|
||||||
|
const text = document.createTextNode(svgCode);
|
||||||
|
mermaid.appendChild(text);
|
||||||
|
backup.after(mermaid);
|
||||||
});
|
});
|
||||||
|
|
||||||
mermaid.initialize(mermaidConf);
|
mermaid.initialize(mermaidConf);
|
||||||
|
|
||||||
window.addEventListener("message", updateMermaid);
|
window.addEventListener('message', updateMermaid);
|
||||||
});
|
})();
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
1
_includes/metadata-hook.html
Normal file
1
_includes/metadata-hook.html
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<!-- A placeholder to allow defining custom metadata -->
|
||||||
@@ -1,14 +1,22 @@
|
|||||||
<!--
|
<!-- Switch the mode between dark and light. -->
|
||||||
Switch the mode between dark and light.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
class ModeToggle {
|
class ModeToggle {
|
||||||
static get MODE_KEY() { return "mode"; }
|
static get MODE_KEY() {
|
||||||
static get MODE_ATTR() { return "data-mode"; }
|
return 'mode';
|
||||||
static get DARK_MODE() { return "dark"; }
|
}
|
||||||
static get LIGHT_MODE() { return "light"; }
|
static get MODE_ATTR() {
|
||||||
static get ID() { return "mode-toggle"; }
|
return 'data-mode';
|
||||||
|
}
|
||||||
|
static get DARK_MODE() {
|
||||||
|
return 'dark';
|
||||||
|
}
|
||||||
|
static get LIGHT_MODE() {
|
||||||
|
return 'light';
|
||||||
|
}
|
||||||
|
static get ID() {
|
||||||
|
return 'mode-toggle';
|
||||||
|
}
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
if (this.hasMode) {
|
if (this.hasMode) {
|
||||||
@@ -26,13 +34,12 @@
|
|||||||
let self = this;
|
let self = this;
|
||||||
|
|
||||||
/* always follow the system prefers */
|
/* always follow the system prefers */
|
||||||
this.sysDarkPrefers.addEventListener("change", () => {
|
this.sysDarkPrefers.addEventListener('change', () => {
|
||||||
if (self.hasMode) {
|
if (self.hasMode) {
|
||||||
if (self.isDarkMode) {
|
if (self.isDarkMode) {
|
||||||
if (!self.isSysDarkPrefer) {
|
if (!self.isSysDarkPrefer) {
|
||||||
self.setDark();
|
self.setDark();
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
if (self.isSysDarkPrefer) {
|
if (self.isSysDarkPrefer) {
|
||||||
self.setLight();
|
self.setLight();
|
||||||
@@ -43,27 +50,36 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
self.notify();
|
self.notify();
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
} /* constructor() */
|
} /* constructor() */
|
||||||
|
|
||||||
get sysDarkPrefers() { return window.matchMedia("(prefers-color-scheme: dark)"); }
|
get sysDarkPrefers() {
|
||||||
|
return window.matchMedia('(prefers-color-scheme: dark)');
|
||||||
|
}
|
||||||
|
|
||||||
get isSysDarkPrefer() { return this.sysDarkPrefers.matches; }
|
get isSysDarkPrefer() {
|
||||||
|
return this.sysDarkPrefers.matches;
|
||||||
|
}
|
||||||
|
|
||||||
get isDarkMode() { return this.mode === ModeToggle.DARK_MODE; }
|
get isDarkMode() {
|
||||||
|
return this.mode === ModeToggle.DARK_MODE;
|
||||||
|
}
|
||||||
|
|
||||||
get isLightMode() { return this.mode === ModeToggle.LIGHT_MODE; }
|
get isLightMode() {
|
||||||
|
return this.mode === ModeToggle.LIGHT_MODE;
|
||||||
|
}
|
||||||
|
|
||||||
get hasMode() { return this.mode != null; }
|
get hasMode() {
|
||||||
|
return this.mode != null;
|
||||||
|
}
|
||||||
|
|
||||||
get mode() { return sessionStorage.getItem(ModeToggle.MODE_KEY); }
|
get mode() {
|
||||||
|
return sessionStorage.getItem(ModeToggle.MODE_KEY);
|
||||||
|
}
|
||||||
|
|
||||||
/* get the current mode on screen */
|
/* get the current mode on screen */
|
||||||
get modeStatus() {
|
get modeStatus() {
|
||||||
if (this.isDarkMode
|
if (this.isDarkMode || (!this.hasMode && this.isSysDarkPrefer)) {
|
||||||
|| (!this.hasMode && this.isSysDarkPrefer)) {
|
|
||||||
return ModeToggle.DARK_MODE;
|
return ModeToggle.DARK_MODE;
|
||||||
} else {
|
} else {
|
||||||
return ModeToggle.LIGHT_MODE;
|
return ModeToggle.LIGHT_MODE;
|
||||||
@@ -71,59 +87,57 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
setDark() {
|
setDark() {
|
||||||
$('html').attr(ModeToggle.MODE_ATTR, ModeToggle.DARK_MODE);
|
document.documentElement.setAttribute(ModeToggle.MODE_ATTR, ModeToggle.DARK_MODE);
|
||||||
sessionStorage.setItem(ModeToggle.MODE_KEY, ModeToggle.DARK_MODE);
|
sessionStorage.setItem(ModeToggle.MODE_KEY, ModeToggle.DARK_MODE);
|
||||||
}
|
}
|
||||||
|
|
||||||
setLight() {
|
setLight() {
|
||||||
$('html').attr(ModeToggle.MODE_ATTR, ModeToggle.LIGHT_MODE);
|
document.documentElement.setAttribute(ModeToggle.MODE_ATTR, ModeToggle.LIGHT_MODE);
|
||||||
sessionStorage.setItem(ModeToggle.MODE_KEY, ModeToggle.LIGHT_MODE);
|
sessionStorage.setItem(ModeToggle.MODE_KEY, ModeToggle.LIGHT_MODE);
|
||||||
}
|
}
|
||||||
|
|
||||||
clearMode() {
|
clearMode() {
|
||||||
$('html').removeAttr(ModeToggle.MODE_ATTR);
|
document.documentElement.removeAttribute(ModeToggle.MODE_ATTR);
|
||||||
sessionStorage.removeItem(ModeToggle.MODE_KEY);
|
sessionStorage.removeItem(ModeToggle.MODE_KEY);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Notify another plugins that the theme mode has changed */
|
/* Notify another plugins that the theme mode has changed */
|
||||||
notify() {
|
notify() {
|
||||||
window.postMessage({
|
window.postMessage(
|
||||||
direction: ModeToggle.ID,
|
{
|
||||||
message: this.modeStatus
|
direction: ModeToggle.ID,
|
||||||
}, "*");
|
message: this.modeStatus
|
||||||
|
},
|
||||||
|
'*'
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
flipMode() {
|
||||||
|
if (this.hasMode) {
|
||||||
|
if (this.isSysDarkPrefer) {
|
||||||
|
if (this.isLightMode) {
|
||||||
|
this.clearMode();
|
||||||
|
} else {
|
||||||
|
this.setLight();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (this.isDarkMode) {
|
||||||
|
this.clearMode();
|
||||||
|
} else {
|
||||||
|
this.setDark();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (this.isSysDarkPrefer) {
|
||||||
|
this.setLight();
|
||||||
|
} else {
|
||||||
|
this.setDark();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.notify();
|
||||||
|
} /* flipMode() */
|
||||||
} /* ModeToggle */
|
} /* ModeToggle */
|
||||||
|
|
||||||
const toggle = new ModeToggle();
|
const modeToggle = new ModeToggle();
|
||||||
|
|
||||||
function flipMode() {
|
|
||||||
if (toggle.hasMode) {
|
|
||||||
if (toggle.isSysDarkPrefer) {
|
|
||||||
if (toggle.isLightMode) {
|
|
||||||
toggle.clearMode();
|
|
||||||
} else {
|
|
||||||
toggle.setLight();
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
if (toggle.isDarkMode) {
|
|
||||||
toggle.clearMode();
|
|
||||||
} else {
|
|
||||||
toggle.setDark();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
if (toggle.isSysDarkPrefer) {
|
|
||||||
toggle.setLight();
|
|
||||||
} else {
|
|
||||||
toggle.setDark();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
toggle.notify();
|
|
||||||
|
|
||||||
} /* flipMode() */
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
24
_includes/notification.html
Normal file
24
_includes/notification.html
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
<aside
|
||||||
|
id="notification"
|
||||||
|
class="toast"
|
||||||
|
role="alert"
|
||||||
|
aria-live="assertive"
|
||||||
|
aria-atomic="true"
|
||||||
|
data-bs-animation="true"
|
||||||
|
data-bs-autohide="false"
|
||||||
|
>
|
||||||
|
<div class="toast-header">
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
class="btn-close ms-auto"
|
||||||
|
data-bs-dismiss="toast"
|
||||||
|
aria-label="Close"
|
||||||
|
></button>
|
||||||
|
</div>
|
||||||
|
<div class="toast-body text-center pt-0">
|
||||||
|
<p class="px-2 mb-3">{{ site.data.locales[include.lang].notification.update_found }}</p>
|
||||||
|
<button type="button" class="btn btn-primary" aria-label="Update">
|
||||||
|
{{ site.data.locales[include.lang].notification.update }}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
@@ -1,12 +1,13 @@
|
|||||||
{% comment %} Site static assets origin {% endcomment %}
|
{% comment %} Site static assets origin type {% endcomment %}
|
||||||
{% assign origin = 'cross_origin' %}
|
|
||||||
|
{% assign type = 'cors' %}
|
||||||
|
|
||||||
{% if site.assets.self_host.enabled %}
|
{% if site.assets.self_host.enabled %}
|
||||||
{% if site.assets.self_host.env %}
|
{% if site.assets.self_host.env %}
|
||||||
{% if site.assets.self_host.env == jekyll.environment %}
|
{% if site.assets.self_host.env == jekyll.environment %}
|
||||||
{% assign origin = 'self_host' %}
|
{% assign type = 'basic' %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% else %}
|
{% else %}
|
||||||
{% assign origin = 'self_host' %}
|
{% assign type = 'basic' %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@@ -1,30 +1,34 @@
|
|||||||
<!--
|
<!-- Navigation buttons at the bottom of the post. -->
|
||||||
Navigation buttons at the bottom of the post.
|
|
||||||
-->
|
<nav class="post-navigation d-flex justify-content-between" aria-label="Post Navigation">
|
||||||
|
{% assign previous = site.data.locales[include.lang].post.button.previous %}
|
||||||
|
{% assign next = site.data.locales[include.lang].post.button.next %}
|
||||||
|
|
||||||
<div class="post-navigation d-flex justify-content-between">
|
|
||||||
{% if page.previous.url %}
|
{% if page.previous.url %}
|
||||||
<a href="{{ site.baseurl }}{{ page.previous.url }}" class="btn btn-outline-primary"
|
<a
|
||||||
prompt="{{ site.data.locales[lang].post.button.previous }}">
|
href="{{ site.baseurl }}{{ page.previous.url }}"
|
||||||
<p>{{ page.previous.title }}</p>
|
class="btn btn-outline-primary"
|
||||||
</a>
|
aria-label="{{ previous }}"
|
||||||
|
>
|
||||||
|
<p>{{ page.previous.title }}</p>
|
||||||
|
</a>
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="btn btn-outline-primary disabled"
|
<div class="btn btn-outline-primary disabled" aria-label="{{ previous }}">
|
||||||
prompt="{{ site.data.locales[lang].post.button.previous }}">
|
<p>-</p>
|
||||||
<p>-</p>
|
</div>
|
||||||
</div>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if page.next.url %}
|
{% if page.next.url %}
|
||||||
<a href="{{ site.baseurl }}{{page.next.url}}" class="btn btn-outline-primary"
|
<a
|
||||||
prompt="{{ site.data.locales[lang].post.button.next }}">
|
href="{{ site.baseurl }}{{page.next.url}}"
|
||||||
<p>{{ page.next.title }}</p>
|
class="btn btn-outline-primary"
|
||||||
</a>
|
aria-label="{{ next }}"
|
||||||
|
>
|
||||||
|
<p>{{ page.next.title }}</p>
|
||||||
|
</a>
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="btn btn-outline-primary disabled"
|
<div class="btn btn-outline-primary disabled" aria-label="{{ next }}">
|
||||||
prompt="{{ site.data.locales[lang].post.button.next }}">
|
<p>-</p>
|
||||||
<p>-</p>
|
</div>
|
||||||
</div>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
</nav>
|
||||||
</div>
|
|
||||||
|
|||||||
@@ -1,88 +1,91 @@
|
|||||||
<!--
|
<!-- The paginator for post list on HomgPage. -->
|
||||||
The paginator for post list on HomgPage.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<ul class="pagination align-items-center mt-4 mb-5 pl-lg-2">
|
<nav aria-label="Page Navigation">
|
||||||
<!-- left arrow -->
|
<ul class="pagination align-items-center mt-4 mb-0">
|
||||||
{% if paginator.previous_page %}
|
<!-- left arrow -->
|
||||||
{% assign prev_url = paginator.previous_page_path | relative_url %}
|
{% if paginator.previous_page %}
|
||||||
{% else %}
|
{% assign prev_url = paginator.previous_page_path | relative_url %}
|
||||||
{% assign prev_url = "#" %}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
<li class="page-item {% unless paginator.previous_page %}disabled{% endunless %}">
|
|
||||||
<a class="page-link btn-box-shadow" href="{{ prev_url }}" aria-label="previous-page">
|
|
||||||
<i class="fas fa-angle-left"></i>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<!-- page numbers -->
|
|
||||||
{% assign left_ellipsis = false %}
|
|
||||||
{% assign right_ellipsis = false %}
|
|
||||||
|
|
||||||
{% for i in (1..paginator.total_pages) %}
|
|
||||||
|
|
||||||
{% assign pre = paginator.page | minus: 1 %}
|
|
||||||
{% assign next = paginator.page | plus: 1 %}
|
|
||||||
{% assign pre_less = pre | minus: 1 %}
|
|
||||||
{% assign next_more = next | plus: 1 %}
|
|
||||||
{% assign show = false %}
|
|
||||||
|
|
||||||
{% if paginator.page == 1 %}
|
|
||||||
{% if i <= 3 or i == paginator.total_pages %}
|
|
||||||
{% assign show = true %}
|
|
||||||
{% endif %}
|
|
||||||
{% elsif paginator.page == paginator.total_pages %}
|
|
||||||
{% if i == 1 or i >= pre_less %}
|
|
||||||
{% assign show = true %}
|
|
||||||
{% endif %}
|
|
||||||
{% else %}
|
{% else %}
|
||||||
{% if i == 1 or i == paginator.total_pages%}
|
{% assign prev_url = '#' %}
|
||||||
{% assign show = true %}
|
|
||||||
{% elsif i >= pre and i <= next %}
|
|
||||||
{% assign show = true %}
|
|
||||||
{% endif %}
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if show %}
|
<li class="page-item {% unless paginator.previous_page %}disabled{% endunless %}">
|
||||||
<!-- show number -->
|
<a class="page-link" href="{{ prev_url }}" aria-label="previous-page">
|
||||||
<li class="page-item {% if i == paginator.page %} active{% endif %}">
|
<i class="fas fa-angle-left"></i>
|
||||||
<a class="page-link btn-box-shadow" href="{% if i > 1 %}{{ site.paginate_path | replace: ':num', i | relative_url }}{% else %}{{ '/' | relative_url }}{% endif %}">{{ i }}</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
{% else %}
|
|
||||||
<!-- hide number -->
|
<!-- page numbers -->
|
||||||
{% if i < pre and left_ellipsis == false %}
|
{% assign left_ellipsis = false %}
|
||||||
<li class="page-item disabled">
|
{% assign right_ellipsis = false %}
|
||||||
<span class="page-link btn-box-shadow">...</span>
|
|
||||||
</li>
|
{% for i in (1..paginator.total_pages) %}
|
||||||
{% assign left_ellipsis = true %}
|
{% assign pre = paginator.page | minus: 1 %}
|
||||||
{% elsif i > next and right_ellipsis == false %}
|
{% assign next = paginator.page | plus: 1 %}
|
||||||
<li class="page-item disabled">
|
{% assign pre_less = pre | minus: 1 %}
|
||||||
<span class="page-link btn-box-shadow">...</span>
|
{% assign next_more = next | plus: 1 %}
|
||||||
</li>
|
{% assign show = false %}
|
||||||
{% assign right_ellipsis = true %}
|
|
||||||
|
{% if paginator.page == 1 %}
|
||||||
|
{% if i <= 3 or i == paginator.total_pages %}
|
||||||
|
{% assign show = true %}
|
||||||
|
{% endif %}
|
||||||
|
{% elsif paginator.page == paginator.total_pages %}
|
||||||
|
{% if i == 1 or i >= pre_less %}
|
||||||
|
{% assign show = true %}
|
||||||
|
{% endif %}
|
||||||
|
{% else %}
|
||||||
|
{% if i == 1 or i == paginator.total_pages %}
|
||||||
|
{% assign show = true %}
|
||||||
|
{% elsif i >= pre and i <= next %}
|
||||||
|
{% assign show = true %}
|
||||||
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
{% if show %}
|
||||||
|
<!-- show number -->
|
||||||
|
<li class="page-item {% if i == paginator.page %} active{% endif %}">
|
||||||
|
<a
|
||||||
|
class="page-link"
|
||||||
|
href="{% if i > 1 %}{{ site.paginate_path | replace: ':num', i | relative_url }}{% else %}{{ '/' | relative_url }}{% endif %}"
|
||||||
|
>
|
||||||
|
{{- i -}}
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{% else %}
|
||||||
|
<!-- hide number -->
|
||||||
|
{% if i < pre and left_ellipsis == false %}
|
||||||
|
<li class="page-item disabled">
|
||||||
|
<span class="page-link">...</span>
|
||||||
|
</li>
|
||||||
|
{% assign left_ellipsis = true %}
|
||||||
|
{% elsif i > next and right_ellipsis == false %}
|
||||||
|
<li class="page-item disabled">
|
||||||
|
<span class="page-link">...</span>
|
||||||
|
</li>
|
||||||
|
{% assign right_ellipsis = true %}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
<!-- mobile pagination -->
|
||||||
|
<li class="page-index align-middle">
|
||||||
|
<span>{{ paginator.page }}</span>
|
||||||
|
<span class="text-muted">/ {{ paginator.total_pages }}</span>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<!-- right arrow -->
|
||||||
|
{% if paginator.next_page_path %}
|
||||||
|
{% assign next_url = paginator.next_page_path | relative_url %}
|
||||||
|
{% else %}
|
||||||
|
{% assign next_url = '#' %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% endfor %}
|
<li class="page-item {% unless paginator.next_page_path %}disabled{% endunless %}">
|
||||||
|
<a class="page-link" href="{{ next_url }}" aria-label="next-page">
|
||||||
<!-- mobile pagination -->
|
<i class="fas fa-angle-right"></i>
|
||||||
<li class="page-index align-middle">
|
</a>
|
||||||
<span>{{ paginator.page }}</span>
|
</li>
|
||||||
<span class="text-muted">/ {{ paginator.total_pages }}</span>
|
</ul>
|
||||||
</li>
|
</nav>
|
||||||
|
<!-- .pagination -->
|
||||||
<!-- right arrow -->
|
|
||||||
{% if paginator.next_page_path %}
|
|
||||||
{% assign next_url = paginator.next_page_path | relative_url %}
|
|
||||||
{% else %}
|
|
||||||
{% assign next_url = "#" %}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
<li class="page-item {% unless paginator.next_page_path %}disabled{% endunless %}">
|
|
||||||
<a class="page-link btn-box-shadow" href="{{ next_url }}" aria-label="next-page">
|
|
||||||
<i class="fas fa-angle-right"></i>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
</ul> <!-- .pagination -->
|
|
||||||
|
|||||||
@@ -1,27 +1,52 @@
|
|||||||
<!--
|
<!-- Post sharing snippet -->
|
||||||
Post sharing snippet
|
|
||||||
-->
|
|
||||||
|
|
||||||
<div class="share-wrapper">
|
<div class="share-wrapper d-flex align-items-center">
|
||||||
<span class="share-label text-muted mr-1">{{ site.data.locales[lang].post.share }}</span>
|
<span class="share-label text-muted">{{ site.data.locales[include.lang].post.share }}</span>
|
||||||
<span class="share-icons">
|
<span class="share-icons">
|
||||||
{% capture title %}{{ page.title }} - {{ site.title }}{% endcapture %}
|
{% capture title %}{{ page.title }} - {{ site.title }}{% endcapture %}
|
||||||
{% assign title = title | url_encode %}
|
{% assign title = title | uri_escape %}
|
||||||
{% assign url = page.url | absolute_url | url_encode %}
|
{% assign url = page.url | absolute_url | url_encode %}
|
||||||
|
|
||||||
{% for share in site.data.share.platforms %}
|
{% for share in site.data.share.platforms -%}
|
||||||
|
{%- capture tooltip -%}
|
||||||
|
data-bs-toggle="tooltip" data-bs-placement="top" title="{{ share.type }}" aria-label="{{ share.type }}"
|
||||||
|
{%- endcapture -%}
|
||||||
|
|
||||||
|
{% if share.type == 'Mastodon' %}
|
||||||
|
<script defer type="module" src="https://cdn.jsdelivr.net/npm/@justinribeiro/share-to-mastodon/+esm"></script>
|
||||||
|
<button class="btn text-start" {{ tooltip }}>
|
||||||
|
<share-to-mastodon
|
||||||
|
class="share-mastodon"
|
||||||
|
message="{{ title }}"
|
||||||
|
url="{{ url }}"
|
||||||
|
{%- if share.instances -%}
|
||||||
|
customInstanceList="{{ share.instances | jsonify | xml_escape }}"
|
||||||
|
{%- endif %}
|
||||||
|
>
|
||||||
|
<i class="fa-fw {{ share.icon }}"></i>
|
||||||
|
</share-to-mastodon>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
{% continue %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% assign link = share.link | replace: 'TITLE', title | replace: 'URL', url %}
|
{% assign link = share.link | replace: 'TITLE', title | replace: 'URL', url %}
|
||||||
<a href="{{ link }}" data-toggle="tooltip" data-placement="top"
|
|
||||||
title="{{ share.type }}" target="_blank" rel="noopener" aria-label="{{ share.type }}">
|
<a href="{{ link }}" target="_blank" rel="noopener" {{ tooltip }}>
|
||||||
<i class="fa-fw {{ share.icon }}"></i>
|
<i class="fa-fw {{ share.icon }}"></i>
|
||||||
</a>
|
</a>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
<i id="copy-link" class="fa-fw fas fa-link small"
|
<button
|
||||||
data-toggle="tooltip" data-placement="top"
|
id="copy-link"
|
||||||
title="{{ site.data.locales[lang].post.button.share_link.title }}"
|
aria-label="Copy link"
|
||||||
data-title-succeed="{{ site.data.locales[lang].post.button.share_link.succeed }}">
|
class="btn small"
|
||||||
</i>
|
data-bs-toggle="tooltip"
|
||||||
|
data-bs-placement="top"
|
||||||
|
title="{{ site.data.locales[include.lang].post.button.share_link.title }}"
|
||||||
|
data-title-succeed="{{ site.data.locales[include.lang].post.button.share_link.succeed }}"
|
||||||
|
>
|
||||||
|
<i class="fa-fw fas fa-link pe-none fs-6"></i>
|
||||||
|
</button>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,10 +1,8 @@
|
|||||||
<!--
|
<!-- Calculate the post's reading time, and display the word count in tooltip -->
|
||||||
Calculate the post's reading time, and display the word count in tooltip
|
|
||||||
-->
|
|
||||||
|
|
||||||
{% assign words = include.content | strip_html | number_of_words: "auto" %}
|
{% assign words = include.content | strip_html | number_of_words: 'auto' %}
|
||||||
|
|
||||||
<!-- words per minute -->
|
<!-- words per minute -->
|
||||||
|
|
||||||
{% assign wpm = 180 %}
|
{% assign wpm = 180 %}
|
||||||
{% assign min_time = 1 %}
|
{% assign min_time = 1 %}
|
||||||
@@ -16,15 +14,24 @@
|
|||||||
{% endunless %}
|
{% endunless %}
|
||||||
|
|
||||||
{% capture read_prompt %}
|
{% capture read_prompt %}
|
||||||
{{- site.data.locales[lang].post.read_time.prompt -}}
|
{{- site.data.locales[include.lang].post.read_time.prompt -}}
|
||||||
{% endcapture %}
|
{% endcapture %}
|
||||||
|
|
||||||
<!-- return element -->
|
<!-- return element -->
|
||||||
<span class="readtime" data-toggle="tooltip" data-placement="bottom"
|
<span
|
||||||
title="{{ words }} {{ site.data.locales[lang].post.words }}">
|
class="readtime"
|
||||||
<em>{{- read_time -}}{{" "}}{{- site.data.locales[lang].post.read_time.unit -}}</em>
|
data-bs-toggle="tooltip"
|
||||||
|
data-bs-placement="bottom"
|
||||||
|
title="{{ words }} {{ site.data.locales[include.lang].post.words }}"
|
||||||
|
>
|
||||||
|
<em>
|
||||||
|
{{- read_time -}}
|
||||||
|
{{ ' ' }}
|
||||||
|
{{- site.data.locales[include.lang].post.read_time.unit -}}
|
||||||
|
</em>
|
||||||
{%- if include.prompt -%}
|
{%- if include.prompt -%}
|
||||||
{%- assign _prompt_words = read_prompt | number_of_words: 'auto' -%}
|
{%- assign _prompt_words = read_prompt | number_of_words: 'auto' -%}
|
||||||
{%- unless _prompt_words > 1 -%}{{ " " }}{%- endunless -%}{{ read_prompt }}
|
{%- unless _prompt_words > 1 -%}{{ ' ' }}{%- endunless -%}
|
||||||
|
{{ read_prompt }}
|
||||||
{%- endif -%}
|
{%- endif -%}
|
||||||
</span>
|
</span>
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
<!--
|
<!-- Refactor the HTML structure -->
|
||||||
Refactor the HTML structure.
|
|
||||||
-->
|
|
||||||
|
|
||||||
{% assign _content = include.content %}
|
{% assign _content = include.content %}
|
||||||
|
|
||||||
@@ -31,118 +29,158 @@
|
|||||||
%}
|
%}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<!-- Add attribute 'hide-bullet' to the checkbox list -->
|
<!-- Change the icon of checkbox -->
|
||||||
|
|
||||||
{% if _content contains '<li class="task-list-item"><' %}
|
{% if _content contains '<input type="checkbox"' %}
|
||||||
{% assign _content = _content
|
{% assign _content = _content
|
||||||
| replace: '"task-list-item"><', '"task-list-item" hide-bullet><'
|
| replace: '<input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />',
|
||||||
|
'<i class="fas fa-check-circle fa-fw checked"></i>'
|
||||||
|
| replace: '<input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />',
|
||||||
|
'<i class="far fa-circle fa-fw"></i>'
|
||||||
%}
|
%}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<!-- images -->
|
<!-- Handle images -->
|
||||||
|
|
||||||
{% assign IMG_TAG = '<img ' %}
|
{% assign IMG_TAG = '<img ' %}
|
||||||
|
|
||||||
{% if _content contains IMG_TAG %}
|
{% if _content contains IMG_TAG %}
|
||||||
{% assign _img_content = nil %}
|
{% assign _img_content = null %}
|
||||||
{% assign _img_snippets = _content | split: IMG_TAG %}
|
{% assign _img_snippets = _content | split: IMG_TAG %}
|
||||||
|
|
||||||
|
<!-- CDN URL -->
|
||||||
|
{% if site.img_cdn %}
|
||||||
|
{% if site.img_cdn contains '//' %}
|
||||||
|
{% assign _path_prefix = site.img_cdn %}
|
||||||
|
{% else %}
|
||||||
|
{% assign _path_prefix = site.img_cdn | relative_url %}
|
||||||
|
{% endif %}
|
||||||
|
{% else %}
|
||||||
|
{% assign _path_prefix = site.baseurl %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<!-- Add image path -->
|
||||||
|
{% if page.img_path %}
|
||||||
|
{% assign _path = page.img_path | append: '/' | replace: '//', '/' %}
|
||||||
|
{% assign _path_prefix = _path_prefix | append: _path %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% for _img_snippet in _img_snippets %}
|
{% for _img_snippet in _img_snippets %}
|
||||||
{% if forloop.first %}
|
{% if forloop.first %}
|
||||||
{% assign _img_content = _img_snippet %}
|
{% assign _img_content = _img_snippet %}
|
||||||
{% continue %}
|
{% continue %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% assign _width = nil %}
|
|
||||||
{% assign _height = nil %}
|
|
||||||
{% assign _src = nil %}
|
|
||||||
|
|
||||||
{% assign _left = _img_snippet | split: '>' | first %}
|
{% assign _left = _img_snippet | split: '>' | first %}
|
||||||
{% assign _right = _img_snippet | remove: _left %}
|
{% assign _right = _img_snippet | remove: _left %}
|
||||||
|
|
||||||
{% assign _left = _left | remove: ' /' %}
|
{% unless _left contains 'src=' %}
|
||||||
{% assign _left = _left | replace: ' w=', ' width=' | replace: ' h=', ' height=' %}
|
{% continue %}
|
||||||
{% assign _attrs = _left | split: ' ' %}
|
{% endunless %}
|
||||||
|
|
||||||
|
{% assign _left = _left | remove: ' /' | replace: ' w=', ' width=' | replace: ' h=', ' height=' %}
|
||||||
|
{% assign _attrs = _left | split: '" ' %}
|
||||||
|
|
||||||
|
{% assign _src = null %}
|
||||||
|
{% assign _lqip = null %}
|
||||||
|
{% assign _class = null %}
|
||||||
|
|
||||||
{% for _attr in _attrs %}
|
{% for _attr in _attrs %}
|
||||||
{% assign _pair = _attr | split: '=' %}
|
{% unless _attr contains '=' %}
|
||||||
{% if _pair.size < 2 %}
|
|
||||||
{% continue %}
|
{% continue %}
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% capture _key %}{{ _pair | first }}{% endcapture %}
|
|
||||||
{% capture _value %}{{ _pair | last | replace: '"', '' }}{% endcapture %}
|
|
||||||
|
|
||||||
{% case _key %}
|
|
||||||
{% when 'width' %}
|
|
||||||
{% assign _width = _value %}
|
|
||||||
{% when 'height' %}
|
|
||||||
{% assign _height = _value %}
|
|
||||||
{% when 'src' %}
|
|
||||||
{% assign _src = _value %}
|
|
||||||
{% endcase %}
|
|
||||||
|
|
||||||
{% if _width and _height and _src %}
|
|
||||||
{% break %}
|
|
||||||
{% endif %}
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
{% if _src %}
|
|
||||||
{% unless _src contains '://' %}
|
|
||||||
|
|
||||||
<!-- Add CDN URL -->
|
|
||||||
{% if site.img_cdn %}
|
|
||||||
{% if site.img_cdn contains '//' %}
|
|
||||||
{% assign _src_prefix = site.img_cdn %}
|
|
||||||
{% else %}
|
|
||||||
{% assign _src_prefix = site.img_cdn | relative_url %}
|
|
||||||
{% endif %}
|
|
||||||
{% else %}
|
|
||||||
{% assign _src_prefix = site.baseurl %}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
<!-- Add image path -->
|
|
||||||
{% if page.img_path %}
|
|
||||||
{% assign _path = page.img_path %}
|
|
||||||
{% assign last_char = _path | slice: -1 %}
|
|
||||||
|
|
||||||
{% unless last_char == '/' %}
|
|
||||||
{% assign _path = _path | append: '/' %}
|
|
||||||
{% endunless %}
|
|
||||||
|
|
||||||
{% assign _src_prefix = _src_prefix | append: _path %}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% assign _final_src = _src_prefix | append: _src %}
|
|
||||||
{% assign _left = _left | replace: _src, _final_src %}
|
|
||||||
|
|
||||||
{% endunless %}
|
{% endunless %}
|
||||||
|
|
||||||
<!-- lazy-load images <https://github.com/ApoorvSaxena/lozad.js#usage> -->
|
{% assign _pair = _attr | split: '="' %}
|
||||||
|
{% capture _key %}{{ _pair | first }}{% endcapture %}
|
||||||
|
{% capture _value %}{{ _pair | last | remove: '"' }}{% endcapture %}
|
||||||
|
|
||||||
{% assign _left = _left | replace: 'src=', 'data-src=' %}
|
{% case _key %}
|
||||||
|
{% when 'src' %}
|
||||||
|
{% assign _src = _value %}
|
||||||
|
{% when 'lqip' %}
|
||||||
|
{% assign _lqip = _value %}
|
||||||
|
{% when 'class' %}
|
||||||
|
{% assign _class = _value %}
|
||||||
|
{% endcase %}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
<!-- take out classes -->
|
||||||
|
{% if _class %}
|
||||||
|
{% capture _old_class %}class="{{ _class }}"{% endcapture %}
|
||||||
|
{% assign _left = _left | remove: _old_class %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<!-- Add SVG placehoder to prevent layout reflow -->
|
{% assign _final_src = null %}
|
||||||
|
{% assign _lazyload = true %}
|
||||||
|
|
||||||
{% if _width and _height %}
|
{% unless _src contains '//' %}
|
||||||
{%- capture _svg -%}
|
{% assign _final_src = _path_prefix | append: _src %}
|
||||||
src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 {{ _width }} {{ _height }}'%3E%3C/svg%3E"
|
{% assign _src_alt = 'src="' | append: _path_prefix %}
|
||||||
{%- endcapture -%}
|
{% assign _left = _left | replace: 'src="', _src_alt %}
|
||||||
|
{% endunless %}
|
||||||
|
|
||||||
{% assign _left = _svg | append: ' ' | append: _left %}
|
{% if _lqip %}
|
||||||
|
{% assign _lazyload = false %}
|
||||||
|
{% assign _class = _class | append: ' blur' %}
|
||||||
|
|
||||||
|
{% unless _lqip contains 'data:' %}
|
||||||
|
{% assign _lqip_alt = 'lqip="' | append: _path_prefix %}
|
||||||
|
{% assign _left = _left | replace: 'lqip="', _lqip_alt %}
|
||||||
|
{% endunless %}
|
||||||
|
|
||||||
|
<!-- add image placeholder -->
|
||||||
|
{% assign _left = _left | replace: 'src=', 'data-src=' | replace: ' lqip=', ' data-lqip="true" src=' %}
|
||||||
|
|
||||||
|
{% else %}
|
||||||
|
{% assign _class = _class | append: ' shimmer' %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<!-- Bypass the HTML-proofer test -->
|
<!-- lazy-load images -->
|
||||||
{% assign _left = _left | append: ' data-proofer-ignore' %}
|
{% if _lazyload %}
|
||||||
|
{% assign _left = _left | append: ' loading="lazy"' %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if page.layout == 'home' %}
|
||||||
|
<!-- create the image wrapper -->
|
||||||
|
{% assign _wrapper_start = '<div class="preview-img ' | append: _class | append: '">' %}
|
||||||
|
|
||||||
|
{% assign _img_content = _img_content | append: _wrapper_start %}
|
||||||
|
{% assign _right = _right | prepend: '></div' %}
|
||||||
|
|
||||||
|
{% else %}
|
||||||
|
<!-- make sure the `<img>` is wrapped by `<a>` -->
|
||||||
|
{% assign _parent = _right | slice: 1, 4 %}
|
||||||
|
|
||||||
|
{% if _parent == '</a>' %}
|
||||||
|
<!-- add class to exist <a> tag -->
|
||||||
|
{% assign _size = _img_content | size | minus: 1 %}
|
||||||
|
{% capture _class %}
|
||||||
|
class="img-link{% unless _lqip %} shimmer{% endunless %}"
|
||||||
|
{% endcapture %}
|
||||||
|
{% assign _img_content = _img_content | slice: 0, _size | append: _class | append: '>' %}
|
||||||
|
|
||||||
|
{% else %}
|
||||||
|
<!-- create the image wrapper -->
|
||||||
|
{% assign _wrapper_start = _final_src
|
||||||
|
| default: _src
|
||||||
|
| prepend: '<a href="'
|
||||||
|
| append: '" class="popup img-link '
|
||||||
|
| append: _class
|
||||||
|
| append: '">'
|
||||||
|
%}
|
||||||
|
|
||||||
|
{% assign _img_content = _img_content | append: _wrapper_start %}
|
||||||
|
{% assign _right = '></a' | append: _right %}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<!-- combine -->
|
||||||
{% assign _img_content = _img_content | append: IMG_TAG | append: _left | append: _right %}
|
{% assign _img_content = _img_content | append: IMG_TAG | append: _left | append: _right %}
|
||||||
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
{% assign _content = _img_content %}
|
{% if _img_content %}
|
||||||
|
{% assign _content = _img_content %}
|
||||||
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<!-- Add header for code snippets -->
|
<!-- Add header for code snippets -->
|
||||||
@@ -152,42 +190,38 @@
|
|||||||
{% assign _new_content = '' %}
|
{% assign _new_content = '' %}
|
||||||
|
|
||||||
{% for _snippet in _code_spippets %}
|
{% for _snippet in _code_spippets %}
|
||||||
|
|
||||||
{% if forloop.last %}
|
{% if forloop.last %}
|
||||||
{% assign _new_content = _new_content | append: _snippet %}
|
{% assign _new_content = _new_content | append: _snippet %}
|
||||||
|
|
||||||
{% else %}
|
{% else %}
|
||||||
|
{% assign _left = _snippet | split: '><' | last %}
|
||||||
{% assign _left = _snippet | split: '><' | last%}
|
|
||||||
|
|
||||||
{% if _left contains 'file="' %}
|
{% if _left contains 'file="' %}
|
||||||
{% assign _label_text = _left | split: 'file="' | last | split: '"' | first %}
|
{% assign _label_text = _left | split: 'file="' | last | split: '"' | first %}
|
||||||
{% assign _label_icon = 'far fa-file-code' %}
|
{% assign _label_icon = 'far fa-file-code fa-fw' %}
|
||||||
{% else %}
|
{% else %}
|
||||||
{% assign _lang = _left | split: 'language-' | last | split: ' ' | first %}
|
{% assign _lang = _left | split: 'language-' | last | split: ' ' | first %}
|
||||||
{% capture _label_text %}{% include language-alias.html language=_lang %}{% endcapture %}
|
{% capture _label_text %}{% include language-alias.html language=_lang %}{% endcapture %}
|
||||||
{% assign _label_icon = 'fas fa-code small' %}
|
{% assign _label_icon = 'fas fa-code fa-fw small' %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% capture _label %}
|
{% capture _label %}
|
||||||
<span data-label-text="{{ _label_text | strip }}"><i class="{{ _label_icon }}"></i></span>
|
<span data-label-text="{{ _label_text | strip }}"><i class="{{ _label_icon }}"></i></span>
|
||||||
{% endcapture %}
|
{% endcapture %}
|
||||||
|
|
||||||
{% assign _new_content = _new_content | append: _snippet
|
{% assign _new_content = _new_content
|
||||||
| append: '<div class="code-header">'
|
| append: _snippet
|
||||||
| append: _label
|
| append: '<div class="code-header">'
|
||||||
| append: '<button aria-label="copy" data-title-succeed="'
|
| append: _label
|
||||||
| append: site.data.locales[lang].post.button.copy_code.succeed
|
| append: '<button aria-label="copy" data-title-succeed="'
|
||||||
| append: '"><i class="far fa-clipboard"></i></button></div>'
|
| append: site.data.locales[include.lang].post.button.copy_code.succeed
|
||||||
| append: '<div class="highlight"><code>'
|
| append: '"><i class="far fa-clipboard"></i></button></div>'
|
||||||
|
| append: '<div class="highlight"><code>'
|
||||||
%}
|
%}
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
{% assign _content = _new_content %}
|
{% assign _content = _new_content %}
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<!-- Create heading anchors -->
|
<!-- Create heading anchors -->
|
||||||
@@ -196,11 +230,11 @@
|
|||||||
{% assign _heading_content = _content %}
|
{% assign _heading_content = _content %}
|
||||||
|
|
||||||
{% for level in heading_levels %}
|
{% for level in heading_levels %}
|
||||||
{% capture mark_start %}<h{{ level }} id="{% endcapture %}
|
{% assign mark_start = '<h' | append: level | append: ' id="' %}
|
||||||
{% capture mark_end %}</h{{ level }}>{% endcapture %}
|
{% assign mark_end = '</h' | append: level | append: '>' %}
|
||||||
|
|
||||||
{% if _heading_content contains mark_start %}
|
{% if _heading_content contains mark_start %}
|
||||||
{% assign _new_content = nil %}
|
{% assign _new_content = null %}
|
||||||
{% assign heading_snippets = _heading_content | split: mark_start %}
|
{% assign heading_snippets = _heading_content | split: mark_start %}
|
||||||
|
|
||||||
{% for snippet in heading_snippets %}
|
{% for snippet in heading_snippets %}
|
||||||
@@ -210,73 +244,23 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% assign id = snippet | split: '"' | first %}
|
{% assign id = snippet | split: '"' | first %}
|
||||||
{% capture anchor %}<a href="#{{ id }}" class="anchor text-muted"><i class="fas fa-hashtag"></i></a>{% endcapture %}
|
{% assign anchor = '<a href="#'
|
||||||
|
| append: id
|
||||||
|
| append: '" class="anchor text-muted"><i class="fas fa-hashtag"></i></a>'
|
||||||
|
%}
|
||||||
|
|
||||||
{% assign left = snippet | split: mark_end | first %}
|
{% assign left = snippet | split: mark_end | first %}
|
||||||
{% assign right = snippet | slice: left.size, snippet.size %}
|
{% assign right = snippet | slice: left.size, snippet.size %}
|
||||||
{% assign left = left | replace: '">', '"><span class="mr-2">' | append: '</span>' %}
|
{% assign left = left | replace_first: '">', '"><span class="me-2">' | append: '</span>' %}
|
||||||
|
|
||||||
{% assign _new_content = _new_content | append: mark_start
|
|
||||||
| append: left | append: anchor | append: right
|
|
||||||
%}
|
|
||||||
|
|
||||||
|
{% assign _new_content = _new_content | append: mark_start | append: left | append: anchor | append: right %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
{% assign _heading_content = _new_content %}
|
{% assign _heading_content = _new_content %}
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
{% assign _content = _heading_content %}
|
{% assign _content = _heading_content %}
|
||||||
|
|
||||||
<!-- Wrap prompt element of blockquote with the <div> tag -->
|
|
||||||
|
|
||||||
{% assign blockquote_start = '<blockquote class=' %}
|
|
||||||
{% assign blockquote_end = '</blockquote>' %}
|
|
||||||
{% assign cls_prefix = 'prompt-' %}
|
|
||||||
|
|
||||||
{% if _content contains blockquote_start %}
|
|
||||||
|
|
||||||
{% assign _prompt_content = nil %}
|
|
||||||
{% assign _prompt_snippets = _content | split: blockquote_start %}
|
|
||||||
|
|
||||||
{% for _snippet in _prompt_snippets %}
|
|
||||||
|
|
||||||
{% if forloop.first %}
|
|
||||||
{% assign _prompt_content = _snippet %}
|
|
||||||
{% continue %}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% assign left = _snippet | split: blockquote_end | first %}
|
|
||||||
{% assign right = _snippet | slice: left.size, _snippet.size %}
|
|
||||||
|
|
||||||
{% assign cls_str = left | split: '>' | first %}
|
|
||||||
{% assign cls_array = cls_str | remove: '"' | split: ' ' %}
|
|
||||||
{% assign is_prompt = false %}
|
|
||||||
|
|
||||||
{% for cls in cls_array %}
|
|
||||||
{% if cls contains cls_prefix %}
|
|
||||||
{% assign is_prompt = true %}
|
|
||||||
{% break %}
|
|
||||||
{% endif %}
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
{% unless is_prompt %}
|
|
||||||
{% assign _prompt_content = _prompt_content | append: blockquote_start | append: _snippet %}
|
|
||||||
{% continue %}
|
|
||||||
{% endunless %}
|
|
||||||
|
|
||||||
{% assign left = left | slice: cls_str.size, left.size %}
|
|
||||||
{% assign left = cls_str | append: '><div' | append: left | append: '</div>' %}
|
|
||||||
|
|
||||||
{% assign _prompt_content = _prompt_content | append: blockquote_start | append: left | append: right %}
|
|
||||||
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
{% assign _content = _prompt_content %}
|
|
||||||
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
<!-- return -->
|
<!-- return -->
|
||||||
|
|
||||||
{{ _content }}
|
{{ _content }}
|
||||||
|
|||||||
@@ -1,24 +1,31 @@
|
|||||||
<!--
|
<!-- Recommend the other 3 posts according to the tags and categories of the current post. -->
|
||||||
Recommend the other 3 posts according to the tags and categories of the current post,
|
|
||||||
if the number is not enough, use the other latest posts to supplement.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- The total size of related posts -->
|
<!-- The total size of related posts -->
|
||||||
{% assign TOTAL_SIZE = 3 %}
|
{% assign TOTAL_SIZE = 3 %}
|
||||||
|
|
||||||
<!-- An random integer that bigger than 0 -->
|
<!-- An random integer that bigger than 0 -->
|
||||||
{% assign TAG_SCORE = 1 %}
|
{% assign TAG_SCORE = 1 %}
|
||||||
|
|
||||||
<!-- Equals to TAG_SCORE / {max_categories_hierarchy} -->
|
<!-- Equals to TAG_SCORE / {max_categories_hierarchy} -->
|
||||||
{% assign CATEGORY_SCORE = 0.5 %}
|
{% assign CATEGORY_SCORE = 0.5 %}
|
||||||
|
|
||||||
{% assign SEPARATOR = ":" %}
|
{% assign SEPARATOR = ':' %}
|
||||||
|
|
||||||
{% assign score_list = "" | split: "" %}
|
{% assign match_posts = '' | split: '' %}
|
||||||
{% assign last_index = site.posts.size | minus: 1 %}
|
|
||||||
|
{% for category in page.categories %}
|
||||||
|
{% assign match_posts = match_posts | push: site.categories[category] | uniq %}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
{% for tag in page.tags %}
|
||||||
|
{% assign match_posts = match_posts | push: site.tags[tag] | uniq %}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
{% assign last_index = match_posts.size | minus: 1 %}
|
||||||
|
{% assign score_list = '' | split: '' %}
|
||||||
|
|
||||||
{% for i in (0..last_index) %}
|
{% for i in (0..last_index) %}
|
||||||
{% assign post = site.posts[i] %}
|
{% assign post = match_posts[i] %}
|
||||||
|
|
||||||
{% if post.url == page.url %}
|
{% if post.url == page.url %}
|
||||||
{% continue %}
|
{% continue %}
|
||||||
@@ -42,11 +49,9 @@
|
|||||||
{% capture score_item %}{{ score }}{{ SEPARATOR }}{{ i }}{% endcapture %}
|
{% capture score_item %}{{ score }}{{ SEPARATOR }}{{ i }}{% endcapture %}
|
||||||
{% assign score_list = score_list | push: score_item %}
|
{% assign score_list = score_list | push: score_item %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
|
{% assign index_list = '' | split: '' %}
|
||||||
{% assign index_list = "" | split: "" %}
|
|
||||||
|
|
||||||
{% if score_list.size > 0 %}
|
{% if score_list.size > 0 %}
|
||||||
{% assign score_list = score_list | sort | reverse %}
|
{% assign score_list = score_list | sort | reverse %}
|
||||||
@@ -56,48 +61,36 @@
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<!-- Fill with the other newlest posts -->
|
{% assign relate_posts = '' | split: '' %}
|
||||||
{% assign less = TOTAL_SIZE | minus: index_list.size %}
|
|
||||||
|
|
||||||
{% if less > 0 %}
|
{% for index in index_list %}
|
||||||
{% for i in (0..last_index) %}
|
{% assign i = index | to_integer %}
|
||||||
{% assign post = site.posts[i] %}
|
{% assign relate_posts = relate_posts | push: match_posts[i] %}
|
||||||
{% if post.url != page.url %}
|
{% endfor %}
|
||||||
{% capture cur_index %}{{ i }}{% endcapture %}
|
|
||||||
{% unless index_list contains cur_index %}
|
|
||||||
{% assign index_list = index_list | push: cur_index %}
|
|
||||||
{% assign less = less | minus: 1 %}
|
|
||||||
{% if less <= 0 %}
|
|
||||||
{% break %}
|
|
||||||
{% endif %}
|
|
||||||
{% endunless %}
|
|
||||||
{% endif %}
|
|
||||||
{% endfor %}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if index_list.size > 0 %}
|
{% if relate_posts.size > 0 %}
|
||||||
<div id="related-posts" class="mt-5 mb-2 mb-sm-4">
|
<aside id="related-posts" aria-labelledby="related-label">
|
||||||
<h3 class="pt-2 mt-1 mb-4 ml-1"
|
<h3 class="mb-4" id="related-label">
|
||||||
data-toc-skip>{{ site.data.locales[lang].post.relate_posts }}</h3>
|
{{- site.data.locales[include.lang].post.relate_posts -}}
|
||||||
<div class="card-deck mb-4">
|
</h3>
|
||||||
{% for entry in index_list %}
|
<nav class="row row-cols-1 row-cols-md-2 row-cols-xl-3 g-4 mb-4">
|
||||||
{% assign index = entry | plus: 0 %}
|
{% for post in relate_posts %}
|
||||||
{% assign post = site.posts[index] %}
|
<article class="col">
|
||||||
<div class="card">
|
<a href="{{ post.url | relative_url }}" class="post-preview card h-100">
|
||||||
<a href="{{ post.url | relative_url }}">
|
<div class="card-body">
|
||||||
<div class="card-body">
|
{% include datetime.html date=post.date lang=include.lang %}
|
||||||
{% include datetime.html date=post.date class="small" %}
|
<h4 class="pt-0 my-2">{{ post.title }}</h4>
|
||||||
<h3 class="pt-0 mt-1 mb-3" data-toc-skip>{{ post.title }}</h3>
|
<div class="text-muted">
|
||||||
<div class="text-muted small">
|
<p>
|
||||||
<p>
|
{% include no-linenos.html content=post.content %}
|
||||||
{% include no-linenos.html content=post.content %}
|
{{ content | markdownify | strip_html | truncate: 200 | escape }}
|
||||||
{{ content | markdownify | strip_html | truncate: 200 | escape }}
|
</p>
|
||||||
</p>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</a>
|
||||||
</a>
|
</article>
|
||||||
</div>
|
{% endfor %}
|
||||||
{% endfor %}
|
</nav>
|
||||||
</div> <!-- .card-deck -->
|
</aside>
|
||||||
</div> <!-- #related-posts -->
|
<!-- #related-posts -->
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@@ -4,43 +4,44 @@
|
|||||||
-->
|
-->
|
||||||
|
|
||||||
{% capture result_elem %}
|
{% capture result_elem %}
|
||||||
<div class="pl-1 pr-1 pl-sm-2 pr-sm-2 pl-lg-4 pr-lg-4 pl-xl-0 pr-xl-0">
|
<article class="px-1 px-sm-2 px-lg-4 px-xl-0">
|
||||||
<a href="{url}">{title}</a>
|
<header>
|
||||||
<div class="post-meta d-flex flex-column flex-sm-row text-muted mt-1 mb-1">
|
<h2><a href="{url}">{title}</a></h2>
|
||||||
{categories}
|
<div class="post-meta d-flex flex-column flex-sm-row text-muted mt-1 mb-1">
|
||||||
{tags}
|
{categories}
|
||||||
</div>
|
{tags}
|
||||||
<p>{snippet}</p>
|
</div>
|
||||||
</div>
|
</header>
|
||||||
|
<p>{snippet}</p>
|
||||||
|
</article>
|
||||||
{% endcapture %}
|
{% endcapture %}
|
||||||
|
|
||||||
{% capture not_found %}<p class="mt-5">{{ site.data.locales[lang].search.no_results }}</p>{% endcapture %}
|
{% capture not_found %}<p class="mt-5">{{ site.data.locales[include.lang].search.no_results }}</p>{% endcapture %}
|
||||||
|
|
||||||
<script src="{{ site.data.assets[origin].search.js | relative_url }}"></script>
|
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
SimpleJekyllSearch({
|
/* Note: dependent library will be loaded in `js-selector.html` */
|
||||||
searchInput: document.getElementById('search-input'),
|
SimpleJekyllSearch({
|
||||||
resultsContainer: document.getElementById('search-results'),
|
searchInput: document.getElementById('search-input'),
|
||||||
json: '{{ '/assets/js/data/search.json' | relative_url }}',
|
resultsContainer: document.getElementById('search-results'),
|
||||||
searchResultTemplate: '{{ result_elem | strip_newlines }}',
|
json: '{{ '/assets/js/data/search.json' | relative_url }}',
|
||||||
noResultsText: '{{ not_found }}',
|
searchResultTemplate: '{{ result_elem | strip_newlines }}',
|
||||||
templateMiddleware: function(prop, value, template) {
|
noResultsText: '{{ not_found }}',
|
||||||
if (prop === 'categories') {
|
templateMiddleware: function(prop, value, template) {
|
||||||
if (value === '') {
|
if (prop === 'categories') {
|
||||||
return `${value}`;
|
if (value === '') {
|
||||||
} else {
|
return `${value}`;
|
||||||
return `<div class="mr-sm-4"><i class="far fa-folder fa-fw"></i>${value}</div>`;
|
} else {
|
||||||
|
return `<div class="me-sm-4"><i class="far fa-folder fa-fw"></i>${value}</div>`;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (prop === 'tags') {
|
if (prop === 'tags') {
|
||||||
if (value === '') {
|
if (value === '') {
|
||||||
return `${value}`;
|
return `${value}`;
|
||||||
} else {
|
} else {
|
||||||
return `<div><i class="fa fa-tag fa-fw"></i>${value}</div>`;
|
return `<div><i class="fa fa-tag fa-fw"></i>${value}</div>`;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
<!--
|
<!-- The Search results -->
|
||||||
The Search results
|
|
||||||
-->
|
|
||||||
<div id="search-result-wrapper" class="d-flex justify-content-center unloaded">
|
<div id="search-result-wrapper" class="d-flex justify-content-center unloaded">
|
||||||
<div class="col-12 col-sm-11 post-content">
|
<div class="col-11 content">
|
||||||
<div id="search-hints">
|
<div id="search-hints">
|
||||||
{% include trending-tags.html %}
|
{% include_cached trending-tags.html %}
|
||||||
</div>
|
</div>
|
||||||
<div id="search-results" class="d-flex flex-wrap justify-content-center text-muted mt-3"></div>
|
<div id="search-results" class="d-flex flex-wrap justify-content-center text-muted mt-3"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,13 +1,10 @@
|
|||||||
<!--
|
<!-- The Side Bar -->
|
||||||
The Side Bar
|
|
||||||
-->
|
|
||||||
|
|
||||||
<div id="sidebar" class="d-flex flex-column align-items-end">
|
<aside aria-label="Sidebar" id="sidebar" class="d-flex flex-column align-items-end">
|
||||||
<div class="profile-wrapper text-center">
|
<header class="profile-wrapper">
|
||||||
<div id="avatar">
|
<a href="{{ '/' | relative_url }}" id="avatar" class="rounded-circle">
|
||||||
<a href="{{ '/' | relative_url }}" class="mx-auto">
|
{% if site.avatar != empty and site.avatar %}
|
||||||
{% if site.avatar != empty and site.avatar %}
|
{% capture avatar_url %}
|
||||||
{% capture avatar_url %}
|
|
||||||
{% if site.avatar contains '://' %}
|
{% if site.avatar contains '://' %}
|
||||||
{{ site.avatar }}
|
{{ site.avatar }}
|
||||||
{% elsif site.img_cdn != empty and site.img_cdn %}
|
{% elsif site.img_cdn != empty and site.img_cdn %}
|
||||||
@@ -16,45 +13,44 @@
|
|||||||
{{ site.avatar | relative_url }}
|
{{ site.avatar | relative_url }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endcapture %}
|
{% endcapture %}
|
||||||
<img src="{{ avatar_url | strip }}" alt="avatar" onerror="this.style.display='none'">
|
<img src="{{ avatar_url | strip }}" width="112" height="112" alt="avatar" onerror="this.style.display='none'">
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="site-title mt-3">
|
<h1 class="site-title">
|
||||||
<a href="{{ '/' | relative_url }}">{{ site.title }}</a>
|
<a href="{{ '/' | relative_url }}">{{ site.title }}</a>
|
||||||
</div>
|
</h1>
|
||||||
<div class="site-subtitle font-italic">{{ site.tagline }}</div>
|
<p class="site-subtitle fst-italic mb-0">{{ site.tagline }}</p>
|
||||||
|
</header>
|
||||||
|
<!-- .profile-wrapper -->
|
||||||
|
|
||||||
</div><!-- .profile-wrapper -->
|
<nav class="flex-column flex-grow-1 w-100 ps-0">
|
||||||
|
<ul class="nav">
|
||||||
|
<!-- home -->
|
||||||
|
<li class="nav-item{% if page.layout == 'home' %}{{ " active" }}{% endif %}">
|
||||||
|
<a href="{{ '/' | relative_url }}" class="nav-link">
|
||||||
|
<i class="fa-fw fas fa-home"></i>
|
||||||
|
<span>{{ site.data.locales[include.lang].tabs.home | upcase }}</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<!-- the real tabs -->
|
||||||
|
{% for tab in site.tabs %}
|
||||||
|
<li class="nav-item{% if tab.url == page.url %}{{ " active" }}{% endif %}">
|
||||||
|
<a href="{{ tab.url | relative_url }}" class="nav-link">
|
||||||
|
<i class="fa-fw {{ tab.icon }}"></i>
|
||||||
|
{% capture tab_name %}{{ tab.url | split: '/' }}{% endcapture %}
|
||||||
|
|
||||||
<ul class="w-100">
|
<span>{{ site.data.locales[include.lang].tabs.[tab_name] | default: tab.title | upcase }}</span>
|
||||||
|
</a>
|
||||||
<!-- home -->
|
</li>
|
||||||
<li class="nav-item{% if page.layout == 'home' %}{{ " active" }}{% endif %}">
|
<!-- .nav-item -->
|
||||||
<a href="{{ '/' | relative_url }}" class="nav-link">
|
{% endfor %}
|
||||||
<i class="fa-fw fas fa-home ml-xl-3 mr-xl-3 unloaded"></i>
|
</ul>
|
||||||
<span>{{ site.data.locales[lang].tabs.home | upcase }}</span>
|
</nav>
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<!-- the real tabs -->
|
|
||||||
{% for tab in site.tabs %}
|
|
||||||
<li class="nav-item{% if tab.url == page.url %}{{ " active" }}{% endif %}">
|
|
||||||
<a href="{{ tab.url | relative_url }}" class="nav-link">
|
|
||||||
<i class="fa-fw {{ tab.icon }} ml-xl-3 mr-xl-3 unloaded"></i>
|
|
||||||
{% capture tab_name %}{{ tab.url | split: '/' }}{% endcapture %}
|
|
||||||
|
|
||||||
<span>{{ site.data.locales[lang].tabs.[tab_name] | default: tab.title | upcase }}</span>
|
|
||||||
</a>
|
|
||||||
</li> <!-- .nav-item -->
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
</ul> <!-- ul.nav.flex-column -->
|
|
||||||
|
|
||||||
<div class="sidebar-bottom mt-auto d-flex flex-wrap justify-content-center align-items-center">
|
|
||||||
|
|
||||||
|
<div class="sidebar-bottom d-flex flex-wrap align-items-center w-100">
|
||||||
{% unless site.theme_mode %}
|
{% unless site.theme_mode %}
|
||||||
<button class="mode-toggle btn" aria-label="Switch Mode">
|
<button type="button" class="mode-toggle btn" aria-label="Switch Mode">
|
||||||
<i class="fas fa-adjust"></i>
|
<i class="fas fa-adjust"></i>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
@@ -64,30 +60,46 @@
|
|||||||
{% endunless %}
|
{% endunless %}
|
||||||
|
|
||||||
{% for entry in site.data.contact %}
|
{% for entry in site.data.contact %}
|
||||||
{% capture url %}
|
{% case entry.type %}
|
||||||
{%- if entry.type == 'github' -%}
|
{% when 'github', 'twitter' %}
|
||||||
https://github.com/{{ site.github.username }}
|
{%- capture url -%}
|
||||||
{%- elsif entry.type == 'twitter' -%}
|
https://{{ entry.type }}.com/{{ site[entry.type].username }}
|
||||||
https://twitter.com/{{ site.twitter.username }}
|
{%- endcapture -%}
|
||||||
{%- elsif entry.type == 'email' -%}
|
{% when 'email' %}
|
||||||
{% assign email = site.social.email | split: '@' %}
|
{% assign email = site.social.email | split: '@' %}
|
||||||
javascript:location.href = 'mailto:' + ['{{ email[0] }}','{{ email[1] }}'].join('@')
|
{%- capture url -%}
|
||||||
{%- elsif entry.type == 'rss' -%}
|
javascript:location.href = 'mailto:' + ['{{ email[0] }}','{{ email[1] }}'].join('@')
|
||||||
{{ "/feed.xml" | relative_url }}
|
{%- endcapture -%}
|
||||||
{%- else -%}
|
{% when 'rss' %}
|
||||||
{{ entry.url }}
|
{% assign url = '/feed.xml' | relative_url %}
|
||||||
{%- endif -%}
|
{% else %}
|
||||||
{% endcapture %}
|
{% assign url = entry.url %}
|
||||||
|
{% endcase %}
|
||||||
|
|
||||||
{% if url %}
|
{% if url %}
|
||||||
<a href="{{ url }}" aria-label="{{ entry.type }}"
|
<a
|
||||||
{% unless entry.noblank %}target="_blank" rel="noopener"{% endunless %}>
|
href="{{ url }}"
|
||||||
<i class="{{ entry.icon }}"></i>
|
aria-label="{{ entry.type }}"
|
||||||
</a>
|
{% assign link_types = '' %}
|
||||||
|
|
||||||
|
{% unless entry.noblank %}
|
||||||
|
target="_blank"
|
||||||
|
{% assign link_types = 'noopener noreferrer' %}
|
||||||
|
{% endunless %}
|
||||||
|
|
||||||
|
{% if entry.type == 'mastodon' %}
|
||||||
|
{% assign link_types = link_types | append: ' me' | strip %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% unless link_types == empty %}
|
||||||
|
rel="{{ link_types }}"
|
||||||
|
{% endunless %}
|
||||||
|
>
|
||||||
|
<i class="{{ entry.icon }}"></i>
|
||||||
|
</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
</div>
|
||||||
</div> <!-- .sidebar-bottom -->
|
<!-- .sidebar-bottom -->
|
||||||
|
</aside>
|
||||||
</div><!-- #sidebar -->
|
<!-- #sidebar -->
|
||||||
|
|||||||
@@ -6,11 +6,8 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if enable_toc %}
|
{% if enable_toc %}
|
||||||
<!-- BS-toc.js will be loaded at medium priority -->
|
<section id="toc-wrapper" class="ps-0 pe-4">
|
||||||
<script src="{{ site.data.assets[origin].bootstrap-toc.js | relative_url }}"></script>
|
<h2 class="panel-heading ps-3 pt-2 mb-2">{{- site.data.locales[include.lang].panel.toc -}}</h2>
|
||||||
|
<nav id="toc"></nav>
|
||||||
<div id="toc-wrapper" class="pl-0 pr-4 mb-5">
|
</section>
|
||||||
<div class="panel-heading pl-3 pt-2 mb-2">{{- site.data.locales[lang].panel.toc -}}</div>
|
|
||||||
<nav id="toc" data-toggle="toc"></nav>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@@ -1,70 +1,77 @@
|
|||||||
<!--
|
<!-- The Top Bar -->
|
||||||
The Top Bar
|
|
||||||
-->
|
|
||||||
|
|
||||||
<div id="topbar-wrapper">
|
<header id="topbar-wrapper" aria-label="Top Bar">
|
||||||
<div id="topbar" class="container d-flex align-items-center justify-content-between h-100 pl-3 pr-3 pl-md-4 pr-md-4">
|
<div
|
||||||
<span id="breadcrumb">
|
id="topbar"
|
||||||
|
class="d-flex align-items-center justify-content-between px-lg-3 h-100"
|
||||||
|
>
|
||||||
|
<nav id="breadcrumb" aria-label="Breadcrumb">
|
||||||
|
{% assign paths = page.url | split: '/' %}
|
||||||
|
|
||||||
{% assign paths = page.url | split: '/' %}
|
{% if paths.size == 0 or page.layout == 'home' %}
|
||||||
|
<!-- index page -->
|
||||||
|
<span>{{ site.data.locales[include.lang].tabs.home | capitalize }}</span>
|
||||||
|
|
||||||
{% if paths.size == 0 or page.layout == 'home' %}
|
{% else %}
|
||||||
<!-- index page -->
|
{% for item in paths %}
|
||||||
<span>{{ site.data.locales[lang].tabs.home | capitalize }}</span>
|
{% if forloop.first %}
|
||||||
|
<span>
|
||||||
|
<a href="{{ '/' | relative_url }}">
|
||||||
|
{{ site.data.locales[include.lang].tabs.home | capitalize }}
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
|
||||||
{% else %}
|
{% elsif forloop.last %}
|
||||||
|
{% if page.collection == 'tabs' %}
|
||||||
|
<span>{{ site.data.locales[include.lang].tabs[item] | default: page.title }}</span>
|
||||||
|
{% else %}
|
||||||
|
<span>{{ page.title }}</span>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% for item in paths %}
|
{% elsif page.layout == 'category' or page.layout == 'tag' %}
|
||||||
|
<span>
|
||||||
{% if forloop.first %}
|
<a href="{{ item | relative_url }}">
|
||||||
<span>
|
{{ site.data.locales[include.lang].tabs[item] | default: page.title }}
|
||||||
<a href="{{ '/' | relative_url }}">
|
</a>
|
||||||
{{ site.data.locales[lang].tabs.home | capitalize }}
|
</span>
|
||||||
</a>
|
|
||||||
</span>
|
|
||||||
|
|
||||||
{% elsif forloop.last %}
|
|
||||||
|
|
||||||
{% if page.collection == 'tabs' %}
|
|
||||||
<span>{{ site.data.locales[lang].tabs[item] | default: page.title }}</span>
|
|
||||||
{% else %}
|
|
||||||
<span>{{ page.title }}</span>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
</nav>
|
||||||
|
<!-- endof #breadcrumb -->
|
||||||
|
|
||||||
{% elsif page.layout == 'category' or page.layout == 'tag' %}
|
<button type="button" id="sidebar-trigger" class="btn btn-link">
|
||||||
<span>
|
<i class="fas fa-bars fa-fw"></i>
|
||||||
<a href="{{ item | relative_url }}">
|
</button>
|
||||||
{{ site.data.locales[lang].tabs[item] | default: page.title }}
|
|
||||||
</a>
|
|
||||||
</span>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
</span><!-- endof #breadcrumb -->
|
|
||||||
|
|
||||||
<i id="sidebar-trigger" class="fas fa-bars fa-fw"></i>
|
|
||||||
|
|
||||||
<div id="topbar-title">
|
<div id="topbar-title">
|
||||||
{% if page.layout == 'home' %}
|
{% if page.layout == 'home' %}
|
||||||
{{- site.data.locales[lang].title | default: site.title -}}
|
{{- site.data.locales[include.lang].title | default: site.title -}}
|
||||||
{% elsif page.collection == 'tabs' or page.layout == 'page' %}
|
{% elsif page.collection == 'tabs' or page.layout == 'page' %}
|
||||||
{%- capture tab_key -%}{{ page.url | split: '/' }}{%- endcapture -%}
|
{%- capture tab_key -%}{{ page.url | split: '/' }}{%- endcapture -%}
|
||||||
{{- site.data.locales[lang].tabs[tab_key] | default: page.title -}}
|
{{- site.data.locales[include.lang].tabs[tab_key] | default: page.title -}}
|
||||||
{% else %}
|
{% else %}
|
||||||
{{- site.data.locales[lang].layout[page.layout] | default: page.layout | capitalize -}}
|
{{- site.data.locales[include.lang].layout[page.layout] | default: page.layout | capitalize -}}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<i id="search-trigger" class="fas fa-search fa-fw"></i>
|
<button type="button" id="search-trigger" class="btn btn-link">
|
||||||
<span id="search-wrapper" class="align-items-center">
|
|
||||||
<i class="fas fa-search fa-fw"></i>
|
<i class="fas fa-search fa-fw"></i>
|
||||||
<input class="form-control" id="search-input" type="search"
|
</button>
|
||||||
aria-label="search" autocomplete="off" placeholder="{{ site.data.locales[lang].search.hint | capitalize }}...">
|
|
||||||
</span>
|
|
||||||
<span id="search-cancel" >{{ site.data.locales[lang].search.cancel }}</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
<search class="align-items-center ms-3 ms-lg-0">
|
||||||
|
<i class="fas fa-search fa-fw"></i>
|
||||||
|
<input
|
||||||
|
class="form-control"
|
||||||
|
id="search-input"
|
||||||
|
type="search"
|
||||||
|
aria-label="search"
|
||||||
|
autocomplete="off"
|
||||||
|
placeholder="{{ site.data.locales[include.lang].search.hint | capitalize }}..."
|
||||||
|
>
|
||||||
|
</search>
|
||||||
|
<button type="button" class="btn btn-link text-decoration-none" id="search-cancel">
|
||||||
|
{{- site.data.locales[include.lang].search.cancel -}}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|||||||
@@ -1,29 +1,27 @@
|
|||||||
{% comment %}
|
<!-- The trending tags list -->
|
||||||
The trending tags list
|
|
||||||
{% endcomment %}
|
|
||||||
|
|
||||||
{% assign MAX = 10 %}
|
{% assign MAX = 10 %}
|
||||||
|
|
||||||
{% assign size_list = "" | split: "" %}
|
{% assign size_list = '' | split: '' %}
|
||||||
{% assign tag_list = "" | split: "" %}
|
{% assign tag_list = '' | split: '' %}
|
||||||
|
|
||||||
{% for tag in site.tags %}
|
{% for tag in site.tags %}
|
||||||
{% assign size = tag | last | size %}
|
{% assign size = tag | last | size %}
|
||||||
{% assign size_list = size_list | push: size %}
|
{% assign size_list = size_list | push: size %}
|
||||||
|
|
||||||
{% assign tag_str = tag | first | append: "::" | append: size %}
|
{% assign tag_str = tag | first | append: '::' | append: size %}
|
||||||
{% assign tag_list = tag_list | push: tag_str %}
|
{% assign tag_list = tag_list | push: tag_str %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
{% assign size_list = size_list | sort | reverse %}
|
{% assign size_list = size_list | sort | reverse %}
|
||||||
|
|
||||||
{% assign tag_list = tag_list | sort_natural %}
|
{% assign tag_list = tag_list | sort_natural %}
|
||||||
|
|
||||||
{% assign trending_tags = "" | split: "" %}
|
{% assign trending_tags = '' | split: '' %}
|
||||||
|
|
||||||
{% for size in size_list limit: MAX %}
|
{% for size in size_list limit: MAX %}
|
||||||
{% for tag_str in tag_list %}
|
{% for tag_str in tag_list %}
|
||||||
{% assign tag = tag_str | split: "::" %}
|
{% assign tag = tag_str | split: '::' %}
|
||||||
{% assign tag_name = tag | first %}
|
{% assign tag_name = tag | first %}
|
||||||
{% assign tag_size = tag | last | plus: 0 %}
|
{% assign tag_size = tag | last | plus: 0 %}
|
||||||
{% if tag_size == size %}
|
{% if tag_size == size %}
|
||||||
@@ -36,15 +34,13 @@
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
{% if trending_tags.size > 0 %}
|
{% if trending_tags.size > 0 %}
|
||||||
<div id="access-tags">
|
<section>
|
||||||
<div class="panel-heading">{{- site.data.locales[lang].panel.trending_tags -}}</div>
|
<h2 class="panel-heading">{{- site.data.locales[include.lang].panel.trending_tags -}}</h2>
|
||||||
<div class="d-flex flex-wrap mt-3 mb-1 mr-3">
|
<div class="d-flex flex-wrap mt-3 mb-1 me-3">
|
||||||
|
{% for tag_name in trending_tags %}
|
||||||
{% for tag_name in trending_tags %}
|
{% assign url = tag_name | slugify | url_encode | prepend: '/tags/' | append: '/' %}
|
||||||
{% assign url = tag_name | slugify | url_encode | prepend: "/tags/" | append: "/" %}
|
<a class="post-tag btn btn-outline-primary" href="{{ url | relative_url }}">{{ tag_name }}</a>
|
||||||
<a class="post-tag" href="{{ url | relative_url }}">{{ tag_name }}</a>
|
{% endfor %}
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</section>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@@ -1,13 +1,11 @@
|
|||||||
{% comment %}
|
<!-- Get the last 5 posts from lastmod list. -->
|
||||||
Get the last 5 posts from lastmod list.
|
|
||||||
{% endcomment %}
|
|
||||||
|
|
||||||
{% assign MAX_SIZE = 5 %}
|
{% assign MAX_SIZE = 5 %}
|
||||||
|
|
||||||
{% assign all_list = "" | split: "" %}
|
{% assign all_list = '' | split: '' %}
|
||||||
|
|
||||||
{% for post in site.posts %}
|
{% for post in site.posts %}
|
||||||
{% if post.last_modified_at %}
|
{% if post.last_modified_at and post.last_modified_at != post.date %}
|
||||||
{% capture elem %}
|
{% capture elem %}
|
||||||
{{- post.last_modified_at | date: "%Y%m%d%H%M%S" -}}::{{- forloop.index0 -}}
|
{{- post.last_modified_at | date: "%Y%m%d%H%M%S" -}}::{{- forloop.index0 -}}
|
||||||
{% endcapture %}
|
{% endcapture %}
|
||||||
@@ -17,24 +15,25 @@
|
|||||||
|
|
||||||
{% assign all_list = all_list | sort | reverse %}
|
{% assign all_list = all_list | sort | reverse %}
|
||||||
|
|
||||||
{% assign update_list = "" | split: "" %}
|
{% assign update_list = '' | split: '' %}
|
||||||
|
|
||||||
{% for entry in all_list limit:MAX_SIZE %}
|
{% for entry in all_list limit: MAX_SIZE %}
|
||||||
{% assign update_list = update_list | push: entry %}
|
{% assign update_list = update_list | push: entry %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
{% if update_list.size > 0 %}
|
{% if update_list.size > 0 %}
|
||||||
|
<section id="access-lastmod">
|
||||||
<div id="access-lastmod" class="post">
|
<h2 class="panel-heading">{{- site.data.locales[include.lang].panel.lastmod -}}</h2>
|
||||||
<div class="panel-heading">{{- site.data.locales[lang].panel.lastmod -}}</div>
|
<ul class="content list-unstyled ps-0 pb-1 ms-1 mt-2">
|
||||||
<ul class="post-content pl-0 pb-1 ml-1 mt-2">
|
|
||||||
{% for item in update_list %}
|
{% for item in update_list %}
|
||||||
{% assign index = item | split: "::" | last | plus: 0 %}
|
{% assign index = item | split: '::' | last | plus: 0 %}
|
||||||
{% assign post = site.posts[index] %}
|
{% assign post = site.posts[index] %}
|
||||||
{% assign url = post.url | relative_url %}
|
{% assign url = post.url | relative_url %}
|
||||||
<li><a href="{{ url }}">{{ post.title }}</a></li>
|
<li class="text-truncate lh-lg">
|
||||||
|
<a href="{{ url }}">{{ post.title }}</a>
|
||||||
|
</li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
</div> <!-- #access-lastmod -->
|
</section>
|
||||||
|
<!-- #access-lastmod -->
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
1
_javascript/_copyright
Normal file
1
_javascript/_copyright
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Chirpy v<%= pkg.version %> | © 2019 <%= pkg.author %> | <%= pkg.license %> Licensed | <%= pkg.homepage %>
|
||||||
7
_javascript/categories.js
Normal file
7
_javascript/categories.js
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
import { basic, initSidebar, initTopbar } from './modules/layouts';
|
||||||
|
import { categoryCollapse } from './modules/plugins';
|
||||||
|
|
||||||
|
basic();
|
||||||
|
initSidebar();
|
||||||
|
initTopbar();
|
||||||
|
categoryCollapse();
|
||||||
5
_javascript/commons.js
Normal file
5
_javascript/commons.js
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
import { basic, initSidebar, initTopbar } from './modules/layouts';
|
||||||
|
|
||||||
|
basic();
|
||||||
|
initSidebar();
|
||||||
|
initTopbar();
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
/*
|
|
||||||
Reference: https://bootsnipp.com/snippets/featured/link-to-top-page
|
|
||||||
*/
|
|
||||||
$(function() {
|
|
||||||
$(window).scroll(() => {
|
|
||||||
if ($(this).scrollTop() > 50 &&
|
|
||||||
$("#sidebar-trigger").css("display") === "none") {
|
|
||||||
$("#back-to-top").fadeIn();
|
|
||||||
} else {
|
|
||||||
$("#back-to-top").fadeOut();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
$("#back-to-top").click(() => {
|
|
||||||
$("body,html").animate({
|
|
||||||
scrollTop: 0
|
|
||||||
}, 800);
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
/*
|
|
||||||
* Listener for theme mode toggle
|
|
||||||
*/
|
|
||||||
$(function() {
|
|
||||||
$(".mode-toggle").click((e) => {
|
|
||||||
const $target = $(e.target);
|
|
||||||
let $btn = ($target.prop("tagName") === "button".toUpperCase() ?
|
|
||||||
$target : $target.parent());
|
|
||||||
|
|
||||||
$btn.blur(); // remove the clicking outline
|
|
||||||
flipMode();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
/**
|
|
||||||
* A tool for smooth scrolling and topbar switcher
|
|
||||||
*/
|
|
||||||
const ScrollHelper = (function () {
|
|
||||||
const $body = $("body");
|
|
||||||
const ATTR_TOPBAR_VISIBLE = "data-topbar-visible";
|
|
||||||
const topbarHeight = $("#topbar-wrapper").outerHeight();
|
|
||||||
|
|
||||||
let scrollUpCount = 0; // the number of times the scroll up was triggered by ToC or anchor
|
|
||||||
let topbarLocked = false;
|
|
||||||
let orientationLocked = false;
|
|
||||||
|
|
||||||
return {
|
|
||||||
hideTopbar: () => $body.attr(ATTR_TOPBAR_VISIBLE, false),
|
|
||||||
showTopbar: () => $body.attr(ATTR_TOPBAR_VISIBLE, true),
|
|
||||||
|
|
||||||
// scroll up
|
|
||||||
|
|
||||||
addScrollUpTask: () => {
|
|
||||||
scrollUpCount += 1;
|
|
||||||
if (!topbarLocked) { topbarLocked = true; }
|
|
||||||
},
|
|
||||||
popScrollUpTask: () => scrollUpCount -= 1,
|
|
||||||
hasScrollUpTask: () => scrollUpCount > 0,
|
|
||||||
topbarLocked: () => topbarLocked === true,
|
|
||||||
unlockTopbar: () => topbarLocked = false,
|
|
||||||
getTopbarHeight: () => topbarHeight,
|
|
||||||
|
|
||||||
// orientation change
|
|
||||||
|
|
||||||
orientationLocked: () => orientationLocked === true,
|
|
||||||
lockOrientation: () => orientationLocked = true,
|
|
||||||
unLockOrientation: () => orientationLocked = false
|
|
||||||
};
|
|
||||||
|
|
||||||
}());
|
|
||||||
@@ -1,129 +0,0 @@
|
|||||||
/*
|
|
||||||
* This script make #search-result-wrapper switch to unloaded or shown automatically.
|
|
||||||
*/
|
|
||||||
|
|
||||||
$(function() {
|
|
||||||
const btnSbTrigger = $("#sidebar-trigger");
|
|
||||||
const btnSearchTrigger = $("#search-trigger");
|
|
||||||
const btnCancel = $("#search-cancel");
|
|
||||||
const main = $("#main");
|
|
||||||
const topbarTitle = $("#topbar-title");
|
|
||||||
const searchWrapper = $("#search-wrapper");
|
|
||||||
const resultWrapper = $("#search-result-wrapper");
|
|
||||||
const results = $("#search-results");
|
|
||||||
const input = $("#search-input");
|
|
||||||
const hints = $("#search-hints");
|
|
||||||
|
|
||||||
const scrollBlocker = (function () {
|
|
||||||
let offset = 0;
|
|
||||||
return {
|
|
||||||
block() {
|
|
||||||
offset = window.scrollY;
|
|
||||||
$("html,body").scrollTop(0);
|
|
||||||
},
|
|
||||||
release() {
|
|
||||||
$("html,body").scrollTop(offset);
|
|
||||||
},
|
|
||||||
getOffset() {
|
|
||||||
return offset;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}());
|
|
||||||
|
|
||||||
/*--- Actions in mobile screens (Sidebar hidden) ---*/
|
|
||||||
|
|
||||||
const mobileSearchBar = (function () {
|
|
||||||
return {
|
|
||||||
on() {
|
|
||||||
btnSbTrigger.addClass("unloaded");
|
|
||||||
topbarTitle.addClass("unloaded");
|
|
||||||
btnSearchTrigger.addClass("unloaded");
|
|
||||||
searchWrapper.addClass("d-flex");
|
|
||||||
btnCancel.addClass("loaded");
|
|
||||||
},
|
|
||||||
off() {
|
|
||||||
btnCancel.removeClass("loaded");
|
|
||||||
searchWrapper.removeClass("d-flex");
|
|
||||||
btnSbTrigger.removeClass("unloaded");
|
|
||||||
topbarTitle.removeClass("unloaded");
|
|
||||||
btnSearchTrigger.removeClass("unloaded");
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}());
|
|
||||||
|
|
||||||
const resultSwitch = (function () {
|
|
||||||
let visible = false;
|
|
||||||
|
|
||||||
return {
|
|
||||||
on() {
|
|
||||||
if (!visible) {
|
|
||||||
// the block method must be called before $(#main) unloaded.
|
|
||||||
scrollBlocker.block();
|
|
||||||
resultWrapper.removeClass("unloaded");
|
|
||||||
main.addClass("unloaded");
|
|
||||||
visible = true;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
off() {
|
|
||||||
if (visible) {
|
|
||||||
results.empty();
|
|
||||||
if (hints.hasClass("unloaded")) {
|
|
||||||
hints.removeClass("unloaded");
|
|
||||||
}
|
|
||||||
resultWrapper.addClass("unloaded");
|
|
||||||
main.removeClass("unloaded");
|
|
||||||
|
|
||||||
// now the release method must be called after $(#main) display
|
|
||||||
scrollBlocker.release();
|
|
||||||
|
|
||||||
input.val("");
|
|
||||||
visible = false;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
isVisible() {
|
|
||||||
return visible;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
}());
|
|
||||||
|
|
||||||
function isMobileView() {
|
|
||||||
return btnCancel.hasClass("loaded");
|
|
||||||
}
|
|
||||||
|
|
||||||
btnSearchTrigger.click(function() {
|
|
||||||
mobileSearchBar.on();
|
|
||||||
resultSwitch.on();
|
|
||||||
input.focus();
|
|
||||||
});
|
|
||||||
|
|
||||||
btnCancel.click(function() {
|
|
||||||
mobileSearchBar.off();
|
|
||||||
resultSwitch.off();
|
|
||||||
});
|
|
||||||
|
|
||||||
input.focus(function() {
|
|
||||||
searchWrapper.addClass("input-focus");
|
|
||||||
});
|
|
||||||
|
|
||||||
input.focusout(function() {
|
|
||||||
searchWrapper.removeClass("input-focus");
|
|
||||||
});
|
|
||||||
|
|
||||||
input.on("input", () => {
|
|
||||||
if (input.val() === "") {
|
|
||||||
if (isMobileView()) {
|
|
||||||
hints.removeClass("unloaded");
|
|
||||||
} else {
|
|
||||||
resultSwitch.off();
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
resultSwitch.on();
|
|
||||||
if (isMobileView()) {
|
|
||||||
hints.addClass("unloaded");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
/**
|
|
||||||
* Expand or close the sidebar in mobile screens.
|
|
||||||
*/
|
|
||||||
|
|
||||||
$(function() {
|
|
||||||
|
|
||||||
const sidebarUtil = (function () {
|
|
||||||
const ATTR_DISPLAY = "sidebar-display";
|
|
||||||
let isExpanded = false;
|
|
||||||
const body = $("body");
|
|
||||||
|
|
||||||
return {
|
|
||||||
toggle() {
|
|
||||||
if (isExpanded === false) {
|
|
||||||
body.attr(ATTR_DISPLAY, "");
|
|
||||||
} else {
|
|
||||||
body.removeAttr(ATTR_DISPLAY);
|
|
||||||
}
|
|
||||||
|
|
||||||
isExpanded = !isExpanded;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
}());
|
|
||||||
|
|
||||||
$("#sidebar-trigger").click(sidebarUtil.toggle);
|
|
||||||
|
|
||||||
$("#mask").click(sidebarUtil.toggle);
|
|
||||||
|
|
||||||
});
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
/**
|
|
||||||
* Initial Bootstrap Tooltip.
|
|
||||||
*/
|
|
||||||
$(function () {
|
|
||||||
$("[data-toggle=\"tooltip\"]").tooltip();
|
|
||||||
});
|
|
||||||
@@ -1,90 +0,0 @@
|
|||||||
/*
|
|
||||||
* Hide Header on scroll down
|
|
||||||
*/
|
|
||||||
|
|
||||||
$(function() {
|
|
||||||
const $searchInput = $("#search-input");
|
|
||||||
const delta = ScrollHelper.getTopbarHeight();
|
|
||||||
|
|
||||||
let didScroll;
|
|
||||||
let lastScrollTop = 0;
|
|
||||||
|
|
||||||
function hasScrolled() {
|
|
||||||
let st = $(this).scrollTop();
|
|
||||||
|
|
||||||
/* Make sure they scroll more than delta */
|
|
||||||
if (Math.abs(lastScrollTop - st) <= delta) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (st > lastScrollTop ) { // Scroll Down
|
|
||||||
ScrollHelper.hideTopbar();
|
|
||||||
|
|
||||||
if ($searchInput.is(":focus")) {
|
|
||||||
$searchInput.blur(); /* remove focus */
|
|
||||||
}
|
|
||||||
|
|
||||||
} else { // Scroll up
|
|
||||||
// has not yet scrolled to the bottom of the screen, that is, there is still space for scrolling
|
|
||||||
if (st + $(window).height() < $(document).height()) {
|
|
||||||
|
|
||||||
if (ScrollHelper.hasScrollUpTask()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ScrollHelper.topbarLocked()) { // avoid redundant scroll up event from smooth scrolling
|
|
||||||
ScrollHelper.unlockTopbar();
|
|
||||||
} else {
|
|
||||||
if (ScrollHelper.orientationLocked()) { // avoid device auto scroll up on orientation change
|
|
||||||
ScrollHelper.unLockOrientation();
|
|
||||||
} else {
|
|
||||||
ScrollHelper.showTopbar();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
lastScrollTop = st;
|
|
||||||
|
|
||||||
} // hasScrolled()
|
|
||||||
|
|
||||||
function handleLandscape() {
|
|
||||||
if ($(window).scrollTop() === 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
ScrollHelper.lockOrientation();
|
|
||||||
ScrollHelper.hideTopbar();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (screen.orientation) {
|
|
||||||
screen.orientation.onchange = () => {
|
|
||||||
const type = screen.orientation.type;
|
|
||||||
if (type === "landscape-primary" || type === "landscape-secondary") {
|
|
||||||
handleLandscape();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} else {
|
|
||||||
// for the browsers that not support `window.screen.orientation` API
|
|
||||||
$(window).on("orientationchange",() => {
|
|
||||||
if ($(window).width() < $(window).height()) { // before rotating, it is still in portrait mode.
|
|
||||||
handleLandscape();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
$(window).scroll(() => {
|
|
||||||
if (didScroll) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
didScroll = true;
|
|
||||||
});
|
|
||||||
|
|
||||||
setInterval(() => {
|
|
||||||
if (didScroll) {
|
|
||||||
hasScrolled();
|
|
||||||
didScroll = false;
|
|
||||||
}
|
|
||||||
}, 250);
|
|
||||||
|
|
||||||
});
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user