mirror of
https://github.com/cotes2020/jekyll-theme-chirpy.git
synced 2025-12-19 14:14:17 +00:00
Compare commits
267 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 | ||
|
|
4c45f3788e | ||
|
|
baad801066 | ||
|
|
7f18cdc1fd | ||
|
|
fd0f983bbe | ||
|
|
35cadf969d | ||
|
|
cc6398c104 | ||
|
|
5d6e8c5ef6 | ||
|
|
20caace68a | ||
|
|
ac1731d123 | ||
|
|
106c981bac | ||
|
|
d127183b97 | ||
|
|
54124d5134 | ||
|
|
76a1b6a068 | ||
|
|
91308ae567 | ||
|
|
12f1e6fe89 | ||
|
|
94e81447af | ||
|
|
b7ad538ce2 | ||
|
|
097bb23530 | ||
|
|
2bd6efa95a | ||
|
|
135a16f13e | ||
|
|
6d35f5f8da | ||
|
|
42c44a8bc1 | ||
|
|
138c537010 | ||
|
|
59e955745f | ||
|
|
4f590e2bba | ||
|
|
6900d9f2bc | ||
|
|
30787fc4cf | ||
|
|
5402523ae5 | ||
|
|
156c02a91a | ||
|
|
6ca66366d5 | ||
|
|
0740b857c6 | ||
|
|
58928dbc90 | ||
|
|
0542b5149c | ||
|
|
e68108014a | ||
|
|
efe75adf27 | ||
|
|
3e64400246 | ||
|
|
f581b4395f | ||
|
|
96a16c868e | ||
|
|
67d51d5df2 | ||
|
|
9cefe58993 | ||
|
|
b8d1bcd3de | ||
|
|
a60a4562bf | ||
|
|
03e4f575ba | ||
|
|
b58cab1c07 | ||
|
|
da05d395fb | ||
|
|
f0a2e2f4e1 | ||
|
|
c57238975a | ||
|
|
c2c503f633 | ||
|
|
5607a1755a | ||
|
|
5a575613bb | ||
|
|
00ad357033 | ||
|
|
dd9d5a7207 | ||
|
|
d2bbcb791f | ||
|
|
4c1c8d8b0e | ||
|
|
2103191b2f | ||
|
|
5d85ccb994 | ||
|
|
7fef3fafec | ||
|
|
887859dd32 | ||
|
|
42fe8f5d21 | ||
|
|
171463d76d | ||
|
|
dd264e793c | ||
|
|
004ab6c56a | ||
|
|
3969b28743 | ||
|
|
5f31fbcf72 | ||
|
|
4986db1204 | ||
|
|
508d3c5c6a | ||
|
|
35e013f7fd | ||
|
|
e52dc9551c | ||
|
|
5753118d8b | ||
|
|
5295bbf4f9 | ||
|
|
cfd05d1aa5 | ||
|
|
6c4d0e0def | ||
|
|
15cfa84ddb | ||
|
|
08a993be90 | ||
|
|
2b66ad0441 | ||
|
|
0f6b170e24 | ||
|
|
4df4f7f8db | ||
|
|
09f1ded60c | ||
|
|
70e089c392 | ||
|
|
dc42b6f800 | ||
|
|
3685685b28 | ||
|
|
51688ccc9f | ||
|
|
3db6de0abb | ||
|
|
b27258899b | ||
|
|
cfe9029cd1 | ||
|
|
2c5e67f02b | ||
|
|
7a392510e6 | ||
|
|
85fe258b20 | ||
|
|
55fd119d35 | ||
|
|
fc36f8b66d | ||
|
|
a5d38e7fbc | ||
|
|
a24545ed60 | ||
|
|
66e655f09b | ||
|
|
c3b2151ca0 | ||
|
|
3d8184602b | ||
|
|
c344926886 | ||
|
|
756465d621 | ||
|
|
7b0e9a6803 | ||
|
|
f043123f23 | ||
|
|
ca181422a6 | ||
|
|
4845f6ef14 | ||
|
|
031e878620 | ||
|
|
166c05bcd1 | ||
|
|
0890147423 | ||
|
|
323a888160 | ||
|
|
7788a140f2 | ||
|
|
1b379e3870 | ||
|
|
640bde95c4 | ||
|
|
1a93d5e557 | ||
|
|
b8c3ea221e | ||
|
|
4a2016a9e3 | ||
|
|
a6c73e8f4f | ||
|
|
f8f4dd889e | ||
|
|
96e7cd79af | ||
|
|
22c12a4d34 | ||
|
|
2cef631385 | ||
|
|
9620eddd12 | ||
|
|
dbf86a2309 | ||
|
|
2d02a6415d | ||
|
|
67bd6679b9 | ||
|
|
f2a2792405 | ||
|
|
837d0778b6 | ||
|
|
97ae2bf6c0 | ||
|
|
e7b377cf63 | ||
|
|
b0815b53c0 | ||
|
|
4dd0c6d16f | ||
|
|
57a76097d6 | ||
|
|
22e2367b45 | ||
|
|
b44bf78f10 | ||
|
|
948356d7d6 | ||
|
|
7337fa5f20 | ||
|
|
44acea2f5d | ||
|
|
65a38c8f22 | ||
|
|
b91b6711b0 |
8
.commitlintrc.json
Normal file
8
.commitlintrc.json
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"rules": {
|
||||||
|
"body-max-line-length": [
|
||||||
|
0,
|
||||||
|
"always"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,10 +2,15 @@ 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]
|
||||||
|
indent_size = 4
|
||||||
|
|
||||||
|
[*.md]
|
||||||
|
trim_trailing_whitespace = false
|
||||||
|
|||||||
47
.github/CONTRIBUTING.md
vendored
47
.github/CONTRIBUTING.md
vendored
@@ -1,6 +1,6 @@
|
|||||||
# How to Contribute
|
# How to Contribute
|
||||||
|
|
||||||
We want to thank you for sparing time to improve this project! Here are some guidelines for contributing:
|
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.
|
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.
|
||||||
|
|
||||||
@@ -9,34 +9,57 @@ To ensure that the blog design is not confused, this project does not accept sug
|
|||||||
Generally, contribute to the project by:
|
Generally, contribute to the project by:
|
||||||
|
|
||||||
1. Fork this project on GitHub and clone it locally.
|
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 (e.g., `my-new-feature`, `fix-a-bug`).
|
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_.
|
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
|
## Modifying JavaScript
|
||||||
|
|
||||||
If your contribution involves JS modification, please read the following sections.
|
If your contribution involves JavaScript modification, please read the following sections.
|
||||||
|
|
||||||
### Inline Scripts
|
### Inline Scripts
|
||||||
|
|
||||||
If you need to add comments to the inline JS (the JS code between the 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. And this will disrupt the structure of the compressed HTML.
|
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
|
### External Scripts
|
||||||
|
|
||||||
If you need to add or modify JavaScripts in the directory `_javascript`, you need to install [Gulp.js](https://gulpjs.com/docs/en/getting-started/quick-start).
|
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:
|
||||||
|
|
||||||
During development, real-time debugging can be performed through the following commands:
|
|
||||||
|
|
||||||
```console
|
```console
|
||||||
$ bash tools/run.sh
|
$ npm i
|
||||||
```
|
```
|
||||||
|
|
||||||
Open another terminal tab and run:
|
During JavaScript development, real-time debugging can be performed through the following commands:
|
||||||
|
|
||||||
|
Firstly, start a Jekyll server:
|
||||||
|
|
||||||
```console
|
```console
|
||||||
$ gulp dev # Type 'Ctrl + C' to stop
|
$ bash tools/run
|
||||||
```
|
```
|
||||||
|
|
||||||
After debugging, run the command `gulp` (without any argument) will automatically output the compressed files to the directory `assests/js/dist/`.
|
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
|
||||||
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
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
|
||||||
|
|||||||
15
.github/ISSUE_TEMPLATE/bug_report.md
vendored
15
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -35,14 +35,15 @@ Steps to reproduce the behavior:
|
|||||||
|
|
||||||
<!-- If applicable, add screenshots to help explain your problem. -->
|
<!-- If applicable, add screenshots to help explain your problem. -->
|
||||||
|
|
||||||
### Software
|
### Environment
|
||||||
|
|
||||||
<!-- Please complete the following information -->
|
| Command | Version |
|
||||||
- Ruby version: <!-- by running: `ruby -v` -->
|
|-----------------------------------|---------|
|
||||||
- Gem version: <!-- by running: `gem -v`-->
|
| `ruby -v` | |
|
||||||
- Bundler version: <!-- by running: `bundle -v`-->
|
| `gem -v` | |
|
||||||
- Jekyll version: <!-- by running: `bundle list | grep " jekyll "` -->
|
| `bundle -v` | |
|
||||||
- Theme version: <!-- by running: `gem list | grep jekyll-theme-chirpy` -->
|
| `bundle exec jekyll -v` | |
|
||||||
|
| `bundle info jekyll-theme-chirpy` | |
|
||||||
|
|
||||||
### Desktop
|
### Desktop
|
||||||
|
|
||||||
|
|||||||
2
.github/PULL_REQUEST_TEMPLATE.md
vendored
2
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -22,7 +22,7 @@ Please select the desired item checkbox and change it to "[x]", then delete opti
|
|||||||
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 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
|
||||||
-->
|
-->
|
||||||
|
|
||||||
- [ ] I have run `bash ./tools/deploy.sh --dry-run` (at the root of the project) locally and passed
|
- [ ] I have run `bash ./tools/test` (at the root of the project) locally and passed
|
||||||
- [ ] I have tested this feature in the browser
|
- [ ] I have tested this feature in the browser
|
||||||
|
|
||||||
### Test Configuration
|
### Test Configuration
|
||||||
|
|||||||
14
.github/workflows/cd.yml
vendored
Normal file
14
.github/workflows/cd.yml
vendored
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
name: CD
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [production, 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 }}"}}'
|
||||||
20
.github/workflows/ci.yml
vendored
20
.github/workflows/ci.yml
vendored
@@ -1,16 +1,13 @@
|
|||||||
name: 'Continuous Integration'
|
name: 'CI'
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches-ignore:
|
branches-ignore:
|
||||||
- 'production'
|
- 'production'
|
||||||
tags-ignore:
|
- 'docs'
|
||||||
- '*'
|
|
||||||
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:
|
||||||
@@ -18,23 +15,24 @@ on:
|
|||||||
- '**'
|
- '**'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
ci:
|
build:
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-latest, macos-latest]
|
ruby: [2.7, 3]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v3
|
||||||
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: 2.7
|
ruby-version: ${{ matrix.ruby }}
|
||||||
bundler-cache: true
|
bundler-cache: true
|
||||||
|
|
||||||
- name: Test Site
|
- name: Test Site
|
||||||
run: bash tools/deploy.sh --dry-run
|
run: bash tools/test
|
||||||
|
|||||||
11
.github/workflows/commitlint.yml
vendored
Normal file
11
.github/workflows/commitlint.yml
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
name: Lint Commit Messages
|
||||||
|
on: pull_request
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
commitlint:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- uses: wagoid/commitlint-github-action@v4
|
||||||
58
.github/workflows/pages-deploy.yml.hook
vendored
58
.github/workflows/pages-deploy.yml.hook
vendored
@@ -1,29 +1,71 @@
|
|||||||
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@v3
|
||||||
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@v1
|
||||||
|
|
||||||
- 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 # reads from a '.ruby-version' or '.tools-version' file if 'ruby-version' is omitted
|
||||||
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 --check-html --allow_hash_href
|
||||||
|
|
||||||
|
- 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@v1
|
||||||
|
|||||||
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@v3
|
||||||
|
|
||||||
|
- name: Setup Node
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
- run: npm i
|
||||||
|
- run: npm test
|
||||||
5
.gitignore
vendored
5
.gitignore
vendored
@@ -3,7 +3,10 @@
|
|||||||
!.git*
|
!.git*
|
||||||
!.editorconfig
|
!.editorconfig
|
||||||
!.nojekyll
|
!.nojekyll
|
||||||
!.travis.yml
|
!.husky
|
||||||
|
!.commitlintrc.json
|
||||||
|
!.versionrc.json
|
||||||
|
!.stylelintrc.json
|
||||||
|
|
||||||
# bundler cache
|
# bundler cache
|
||||||
_site
|
_site
|
||||||
|
|||||||
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
[submodule "assets/lib"]
|
||||||
|
path = assets/lib
|
||||||
|
url = https://github.com/cotes2020/chirpy-static-assets.git
|
||||||
4
.husky/commit-msg
Executable file
4
.husky/commit-msg
Executable file
@@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
. "$(dirname "$0")/_/husky.sh"
|
||||||
|
|
||||||
|
npx --no -- commitlint -x $(npm root -g)/@commitlint/config-conventional --edit
|
||||||
16
.stylelintrc.json
Normal file
16
.stylelintrc.json
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"extends": "stylelint-config-standard-scss",
|
||||||
|
"rules": {
|
||||||
|
"no-descending-specificity": null,
|
||||||
|
"shorthand-property-no-redundant-values": null,
|
||||||
|
"at-rule-no-vendor-prefix": null,
|
||||||
|
"property-no-vendor-prefix": null,
|
||||||
|
"selector-no-vendor-prefix": null,
|
||||||
|
"value-no-vendor-prefix": null,
|
||||||
|
"color-function-notation": "legacy",
|
||||||
|
"alpha-value-notation": "number",
|
||||||
|
"selector-not-notation": "simple",
|
||||||
|
"color-hex-length": "long",
|
||||||
|
"declaration-block-single-line-max-declarations": 3
|
||||||
|
}
|
||||||
|
}
|
||||||
39
.travis.yml
39
.travis.yml
@@ -1,39 +0,0 @@
|
|||||||
os: linux
|
|
||||||
dist: bionic
|
|
||||||
|
|
||||||
language: minimal
|
|
||||||
|
|
||||||
# only run on tags
|
|
||||||
if: branch =~ /^v(\d)+(\.(\d)+){2}$/ OR tag IS present
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
include:
|
|
||||||
- name: Deploy
|
|
||||||
language: ruby
|
|
||||||
rvm: 2.7.0
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
packages:
|
|
||||||
- libcurl4-openssl-dev # to avoid SSL error (for htmlproofer)
|
|
||||||
install:
|
|
||||||
- bundle install --jobs=3 --retry=3 # overriding to drop the travis `--development` flag
|
|
||||||
script:
|
|
||||||
- eval "$BUILD_CMD"
|
|
||||||
git:
|
|
||||||
depth: false # for posts' lastmod
|
|
||||||
|
|
||||||
- name: Flush Starter
|
|
||||||
script: eval "$FLUSH_STARTER"
|
|
||||||
|
|
||||||
before_script:
|
|
||||||
- git -C "$HOME" clone "$BUILDER_REPO" --depth=1 -q
|
|
||||||
|
|
||||||
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
|
|
||||||
20
.versionrc.json
Normal file
20
.versionrc.json
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"skip": {
|
||||||
|
"commit": true,
|
||||||
|
"tag": true
|
||||||
|
},
|
||||||
|
"types": [
|
||||||
|
{
|
||||||
|
"type": "feat",
|
||||||
|
"section": "Features"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "fix",
|
||||||
|
"section": "Bug Fixes"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "perf",
|
||||||
|
"section": "Improvements"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
150
CHANGELOG.md
Normal file
150
CHANGELOG.md
Normal file
@@ -0,0 +1,150 @@
|
|||||||
|
# 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.5.0](https://github.com/cotes2020/jekyll-theme-chirpy/compare/v5.4.0...v5.5.0) (2023-01-29)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **i18n:** add Arabic translation ([#857](https://github.com/cotes2020/jekyll-theme-chirpy/issues/857)) ([765af53](https://github.com/cotes2020/jekyll-theme-chirpy/commit/765af53b77e5c63804784d5728f5970ae274c2c7))
|
||||||
|
* **i18n:** add Czech language ([#833](https://github.com/cotes2020/jekyll-theme-chirpy/issues/833)) ([98d48f5](https://github.com/cotes2020/jekyll-theme-chirpy/commit/98d48f5da412276d4a0c99cd01a87b19349bc6bc))
|
||||||
|
* **i18n:** add Finnish translations ([#843](https://github.com/cotes2020/jekyll-theme-chirpy/issues/843)) ([d6d0318](https://github.com/cotes2020/jekyll-theme-chirpy/commit/d6d03183eaf94b44e037cc48b6e1c47cee183f6e))
|
||||||
|
* **i18n:** add Italian translation ([#850](https://github.com/cotes2020/jekyll-theme-chirpy/issues/850)) ([9a011e1](https://github.com/cotes2020/jekyll-theme-chirpy/commit/9a011e14d66195d8b2fb9ec62f3e60a3e56cd032))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* copy command line incomplete(`.gp` part) ([41ed331](https://github.com/cotes2020/jekyll-theme-chirpy/commit/41ed33145639415148aec8e85edc7a6fd0de0ca3))
|
||||||
|
* correct encoding of spaces in share URLs ([#835](https://github.com/cotes2020/jekyll-theme-chirpy/issues/835)) ([f2d2858](https://github.com/cotes2020/jekyll-theme-chirpy/commit/f2d285844e6e2979f2b0eec1d20073d3c05b6c0c))
|
||||||
|
* post's image would cover the PWA update alert ([bd374dd](https://github.com/cotes2020/jekyll-theme-chirpy/commit/bd374dd383c50f89c8f018ecb4e25772eeb8f6d8))
|
||||||
|
* prompt with nested blockquotes renders incorrectly ([#846](https://github.com/cotes2020/jekyll-theme-chirpy/issues/846)) ([babb4a0](https://github.com/cotes2020/jekyll-theme-chirpy/commit/babb4a0c5a58ceb2e4093bc465670accdd526c18))
|
||||||
|
|
||||||
|
## [5.4.0](https://github.com/cotes2020/jekyll-theme-chirpy/compare/v5.3.2...v5.4.0) (2022-12-27)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* add `rel="me"` to Mastodon sidebar contact links for verification ([#807](https://github.com/cotes2020/jekyll-theme-chirpy/issues/807)) ([d2190c7](https://github.com/cotes2020/jekyll-theme-chirpy/commit/d2190c726f61c8c9732b88b4aecf699dc8bc7deb))
|
||||||
|
* add embed video support ([ed6dc53](https://github.com/cotes2020/jekyll-theme-chirpy/commit/ed6dc539eff7003a3765bcd8c31ae5e91a863d65))
|
||||||
|
* add shimmer background when image loads ([ab16fdc](https://github.com/cotes2020/jekyll-theme-chirpy/commit/ab16fdc7fc26811130b98a1773beb62bff6182e8))
|
||||||
|
* set preview image ratio to 1.91 : 1 ([4b6ccbc](https://github.com/cotes2020/jekyll-theme-chirpy/commit/4b6ccbcbccce27b9fcb035812efefe4eb69301cf))
|
||||||
|
* support dark and light mode images ([#481](https://github.com/cotes2020/jekyll-theme-chirpy/issues/481)) ([9306c7b](https://github.com/cotes2020/jekyll-theme-chirpy/commit/9306c7b39ecf9d9146bc1a25eebedc38eb2c3dd6))
|
||||||
|
* support LQIP for images ([bffaf63](https://github.com/cotes2020/jekyll-theme-chirpy/commit/bffaf6374f265cec96ef743d42b46fbec3b59797))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* `hreflang` tag attribute of feed misses `site.alt_lang` ([7651d28](https://github.com/cotes2020/jekyll-theme-chirpy/commit/7651d2851b4bb7d8f0d068b62c036c89a1089bbc))
|
||||||
|
* `og:image` will be incorrect if the image uses a cross-domain URL ([8de1abd](https://github.com/cotes2020/jekyll-theme-chirpy/commit/8de1abda6be3633982392178731431b0ddb1b52b))
|
||||||
|
* refactoring error when the image URL contains parameters ([ec98f07](https://github.com/cotes2020/jekyll-theme-chirpy/commit/ec98f07aca0b80a9c07fbcdc8e0d7d66dba98ed2))
|
||||||
|
* spaces in post title are encoded when sharing ([7efd2f8](https://github.com/cotes2020/jekyll-theme-chirpy/commit/7efd2f8aa2ea1c3aeb7d740bf9a018881c26fe65))
|
||||||
|
|
||||||
|
|
||||||
|
### Improvements
|
||||||
|
|
||||||
|
* **cdn:** optimize cache policy for static assets ([7fb0ee0](https://github.com/cotes2020/jekyll-theme-chirpy/commit/7fb0ee0bedb63eee3f90a49c6d7fb8b5d78c9830))
|
||||||
|
|
||||||
|
## [5.3.2](https://github.com/cotes2020/jekyll-theme-chirpy/compare/v5.3.1...v5.3.2) (2022-11-22)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* `mermaid` occasionally fails to initialize ([#536](https://github.com/cotes2020/jekyll-theme-chirpy/issues/536)) ([48f14e3](https://github.com/cotes2020/jekyll-theme-chirpy/commit/48f14e39ac81bbfb3b9913ea3ee789d775b2d1ae))
|
||||||
|
* **comment:** disqus doesn't follow theme mode switching ([b0d5956](https://github.com/cotes2020/jekyll-theme-chirpy/commit/b0d5956f5a0ed894984d6b1754efeba04d8bc966))
|
||||||
|
* restore full-text search ([#741](https://github.com/cotes2020/jekyll-theme-chirpy/issues/741)) ([6774e0e](https://github.com/cotes2020/jekyll-theme-chirpy/commit/6774e0e1fb37cf467b14be481347412713763f05))
|
||||||
|
* the image URL in the SEO-related tags is incomplete ([#754](https://github.com/cotes2020/jekyll-theme-chirpy/issues/754)) ([f6e9a3f](https://github.com/cotes2020/jekyll-theme-chirpy/commit/f6e9a3fccf7ab34db71f8aefaf86fdcc05861076))
|
||||||
|
|
||||||
|
## [5.3.1](https://github.com/cotes2020/jekyll-theme-chirpy/compare/v5.3.0...v5.3.1) (2022-10-25)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* 404 page missing title in tablet/desktop view ([5511b28](https://github.com/cotes2020/jekyll-theme-chirpy/commit/5511b2883fd5a395fddfb642588d00c122f18da7))
|
||||||
|
* prompt content overflows horizontally ([#705](https://github.com/cotes2020/jekyll-theme-chirpy/issues/705)) ([fb13e32](https://github.com/cotes2020/jekyll-theme-chirpy/commit/fb13e3219b5eca0d2e4f86a1ecabfab75240369f))
|
||||||
|
* **tools:** multiple configuration files will fail the test ([80cb0b3](https://github.com/cotes2020/jekyll-theme-chirpy/commit/80cb0b371754e96772a7907877a8ce196398ba3d))
|
||||||
|
|
||||||
|
|
||||||
|
### Improvements
|
||||||
|
|
||||||
|
* **layout:** improve the min-height of main content ([#674](https://github.com/cotes2020/jekyll-theme-chirpy/issues/674)) ([49bb93c](https://github.com/cotes2020/jekyll-theme-chirpy/commit/49bb93cc0c89ad9cfaad5edcf9cb28c3d5134575))
|
||||||
|
* modify checkbox icon with `Liquid` ([1fd665b](https://github.com/cotes2020/jekyll-theme-chirpy/commit/1fd665bf4990c26ae23635c511c5abc9640184d1))
|
||||||
|
* optimize the extra padding in lists ([#703](https://github.com/cotes2020/jekyll-theme-chirpy/issues/703)) ([39da11e](https://github.com/cotes2020/jekyll-theme-chirpy/commit/39da11e3f3685f49321757576d2b87a48bf25db5)), closes [#702](https://github.com/cotes2020/jekyll-theme-chirpy/issues/702)
|
||||||
|
* **posts:** improve core block bottom padding ([d2fb98b](https://github.com/cotes2020/jekyll-theme-chirpy/commit/d2fb98b3e57f2f6c3fc3816551cd0721731adf40))
|
||||||
|
* truncate post content for search results ([647eea8](https://github.com/cotes2020/jekyll-theme-chirpy/commit/647eea8dbd716f9d3cb8330c3139fa753903f51d))
|
||||||
|
* **typography:** optimize the line height of post content ([eac3f9b](https://github.com/cotes2020/jekyll-theme-chirpy/commit/eac3f9b434ca77e3dc64eea9cedea7b93e7b306b))
|
||||||
|
|
||||||
|
### Others
|
||||||
|
|
||||||
|
* **giscus:** add `reactions-enabled` option ([#712](https://github.com/cotes2020/jekyll-theme-chirpy/issues/712)) ([70662a0](https://github.com/cotes2020/jekyll-theme-chirpy/commit/70662a0365e6b9378602dc0a57462ddad5aebcf5))
|
||||||
|
* **locale:** restore options for changing date format ([#716](https://github.com/cotes2020/jekyll-theme-chirpy/issues/716)) ([f904e8c](https://github.com/cotes2020/jekyll-theme-chirpy/commit/f904e8cd48c343cc31e25859d9d50bfe2c056f41))
|
||||||
|
* remove site config option `prefer_datetime_locale` ([6852ceb](https://github.com/cotes2020/jekyll-theme-chirpy/commit/6852ceb280927ff4e753a3e1131f2b396d9807d0))
|
||||||
|
|
||||||
|
## [5.3.0](https://github.com/cotes2020/jekyll-theme-chirpy/compare/v5.2.1...v5.3.0) (2022-09-23)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* add multiple authors to a post ([#677](https://github.com/cotes2020/jekyll-theme-chirpy/issues/677)) ([f1d9e99](https://github.com/cotes2020/jekyll-theme-chirpy/commit/f1d9e99bc02d3cd0a6b0cd1beac545f0cc7a24f8)), closes [#675](https://github.com/cotes2020/jekyll-theme-chirpy/issues/675)
|
||||||
|
* **i18n:** add Bulgarian support ([#612](https://github.com/cotes2020/jekyll-theme-chirpy/issues/612)) ([2fed338](https://github.com/cotes2020/jekyll-theme-chirpy/commit/2fed338ce6d078bf528c9717201fbc475f88cd22))
|
||||||
|
* **i18n:** add German locale file ([#663](https://github.com/cotes2020/jekyll-theme-chirpy/issues/663)) ([940b281](https://github.com/cotes2020/jekyll-theme-chirpy/commit/940b2810e95065e30600ae8d5e4612e7183da60e))
|
||||||
|
* **i18n:** add Hungarian locale file ([#597](https://github.com/cotes2020/jekyll-theme-chirpy/issues/597), [#598](https://github.com/cotes2020/jekyll-theme-chirpy/issues/598)) ([b032977](https://github.com/cotes2020/jekyll-theme-chirpy/commit/b0329775fc24d0323e5cc04cda46ece8b4531802))
|
||||||
|
* **i18n:** add Turkish language ([#631](https://github.com/cotes2020/jekyll-theme-chirpy/issues/631)) ([ad137fa](https://github.com/cotes2020/jekyll-theme-chirpy/commit/ad137fa2945b1870b9c1dd5e9212a5f4af7c3580))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* add missing color to linkedin icon for share list ([#683](https://github.com/cotes2020/jekyll-theme-chirpy/issues/683)) ([0dcd39d](https://github.com/cotes2020/jekyll-theme-chirpy/commit/0dcd39d491c9c49e4acf7f75f83fe6e1d1839e37))
|
||||||
|
* code contains spaces in headings ([#644](https://github.com/cotes2020/jekyll-theme-chirpy/issues/644)) ([3fa1bf3](https://github.com/cotes2020/jekyll-theme-chirpy/commit/3fa1bf305451f645a7f3aa93863b076463c8f165))
|
||||||
|
* correct spelling of `panel` ([#686](https://github.com/cotes2020/jekyll-theme-chirpy/issues/686)) ([b288587](https://github.com/cotes2020/jekyll-theme-chirpy/commit/b288587c1c3d113a1c52c2d25fb46cddda348961))
|
||||||
|
* correct the i18n for tab titles ([0c5b697](https://github.com/cotes2020/jekyll-theme-chirpy/commit/0c5b697fd3b283b6a5c926742b61ed49d8688c18))
|
||||||
|
* the `code` doesn't wrap inside the prompt ([#626](https://github.com/cotes2020/jekyll-theme-chirpy/issues/626)) ([378b65a](https://github.com/cotes2020/jekyll-theme-chirpy/commit/378b65a0617787813519dde74d6f741f255eff3d))
|
||||||
|
|
||||||
|
## [5.2.1](https://github.com/cotes2020/jekyll-theme-chirpy/compare/v5.2.0...v5.2.1) (2022-06-17)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* exclude CHANGELOG from output ([971fe03](https://github.com/cotes2020/jekyll-theme-chirpy/commit/971fe03ec329ae49e7d60fe3af6101cfbd1acd6c))
|
||||||
|
* **PWA:** sometimes update notification is not triggered ([96af729](https://github.com/cotes2020/jekyll-theme-chirpy/commit/96af7291ea5b2c5ed6372e7b6f7725e67c69f1ba))
|
||||||
|
|
||||||
|
## [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))
|
||||||
16
Gemfile
16
Gemfile
@@ -10,13 +10,19 @@ 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]
|
||||||
|
|
||||||
|
# Lock jekyll-sass-converter to 2.x on Linux-musl
|
||||||
|
if RUBY_PLATFORM =~ /linux-musl/
|
||||||
|
gem "jekyll-sass-converter", "~> 2.0"
|
||||||
|
end
|
||||||
|
|||||||
29
README.md
29
README.md
@@ -5,40 +5,41 @@
|
|||||||
A minimal, responsive, and powerful Jekyll theme for presenting professional writing.
|
A minimal, responsive, and powerful Jekyll theme for presenting professional writing.
|
||||||
|
|
||||||
[](https://rubygems.org/gems/jekyll-theme-chirpy)
|
[](https://rubygems.org/gems/jekyll-theme-chirpy)
|
||||||
[](https://github.com/cotes2020/jekyll-theme-chirpy/actions?query=branch%3Amaster+event%3Apush)
|
[](https://github.com/cotes2020/jekyll-theme-chirpy/actions/workflows/ci.yml)
|
||||||
[](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)
|
[](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)
|
||||||
[](https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/LICENSE)
|
[](https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/LICENSE)
|
||||||
[](https://996.icu)
|
[](https://996.icu)
|
||||||
|
|
||||||
[**Live Demo →**](https://cotes2020.github.io/chirpy-demo)
|
[**Live Demo →**](https://cotes2020.github.io/chirpy-demo)
|
||||||
|
|
||||||
[](https://cotes2020.github.io/chirpy-demo)
|
[](https://cotes2020.github.io/chirpy-demo)
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
- Localized Layout
|
|
||||||
- Dark/Light Theme Mode
|
- Dark/Light Theme Mode
|
||||||
|
- Localized UI language
|
||||||
- Pinned Posts
|
- Pinned Posts
|
||||||
- Hierarchical Categories
|
- Hierarchical Categories
|
||||||
- Last Modified Date for Posts
|
- Trending Tags
|
||||||
- Table of Contents
|
- Table of Contents
|
||||||
- Auto-generated Related Posts
|
- Last Modified Date of Posts
|
||||||
- Syntax Highlighting
|
- Syntax Highlighting
|
||||||
- Mathematical Expressions
|
- Mathematical Expressions
|
||||||
- Mermaid Diagram & Flowchart
|
- Mermaid Diagram & Flowchart
|
||||||
- Disqus/Utterances Comments
|
- Dark/Light Mode Images
|
||||||
|
- Embed Videos
|
||||||
|
- Disqus/Utterances/Giscus Comments
|
||||||
- Search
|
- Search
|
||||||
- Atom Feeds
|
- Atom Feeds
|
||||||
- Google Analytics
|
- Google Analytics
|
||||||
- GA Pageviews Reporting
|
- Page Views Reporting
|
||||||
- SEO & Performance Optimization
|
- SEO & Performance Optimization
|
||||||
|
|
||||||
|
|
||||||
## Quick Start
|
## 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`.
|
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
|
### Step 1. Creating a New Site
|
||||||
|
|
||||||
@@ -69,11 +70,11 @@ $ docker run -it --rm \
|
|||||||
jekyll serve
|
jekyll serve
|
||||||
```
|
```
|
||||||
|
|
||||||
After a while, the local service will be published at _<http://127.0.0.1:4000>_.
|
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/). At the same time, a copy of the tutorial is also available on the [Wiki](https://github.com/cotes2020/jekyll-theme-chirpy/wiki). Please note that the tutorial is based on the [latest release](https://github.com/cotes2020/jekyll-theme-chirpy/releases), and the features of the default branch are usually ahead of the 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 release](https://github.com/cotes2020/jekyll-theme-chirpy/releases/latest), and the features of the default branch are usually ahead of the documentation.
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
@@ -83,9 +84,9 @@ Welcome to report bugs, improve code quality or submit a new feature. For more i
|
|||||||
|
|
||||||
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 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/).
|
||||||
|
|
||||||
: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.
|
: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.
|
||||||
|
|
||||||
Last but not least, thank [JetBrains][jb] for providing the open source license.
|
Last but not least, thank [JetBrains][jb] for providing the OSS development license.
|
||||||
|
|
||||||
## Sponsoring
|
## Sponsoring
|
||||||
|
|
||||||
@@ -102,4 +103,4 @@ This work is published under [MIT](https://github.com/cotes2020/jekyll-theme-chi
|
|||||||
<!-- ReadMe links -->
|
<!-- ReadMe links -->
|
||||||
|
|
||||||
[jb]: https://www.jetbrains.com/?from=jekyll-theme-chirpy
|
[jb]: https://www.jetbrains.com/?from=jekyll-theme-chirpy
|
||||||
[cn-donation]: https://cotes.gitee.io/alipay-wechat-donation/
|
[cn-donation]: https://sponsor.cotes.page/
|
||||||
|
|||||||
55
_config.yml
55
_config.yml
@@ -12,6 +12,7 @@ baseurl: ''
|
|||||||
# 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
|
||||||
|
|
||||||
|
|
||||||
# Change to your timezone › http://www.timezoneconverter.com/cgi-bin/findzone/findzone
|
# Change to your timezone › http://www.timezoneconverter.com/cgi-bin/findzone/findzone
|
||||||
timezone: Asia/Shanghai
|
timezone: Asia/Shanghai
|
||||||
|
|
||||||
@@ -23,9 +24,7 @@ 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, portfolio, sidebar,
|
A minimal, responsive, and powerful Jekyll theme for presenting professional writing.
|
||||||
bootstrap Jekyll theme with responsive web design
|
|
||||||
and focuses on text presentation.
|
|
||||||
|
|
||||||
# fill in the protocol & hostname for your site, e.g., 'https://username.github.io'
|
# fill in the protocol & hostname for your site, e.g., 'https://username.github.io'
|
||||||
url: ''
|
url: ''
|
||||||
@@ -40,7 +39,7 @@ 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
|
||||||
@@ -49,13 +48,13 @@ social:
|
|||||||
# - 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: google_meta_tag_verification # change to your verification string
|
google_site_verification: # fill in to your verification string
|
||||||
|
|
||||||
# ↑ --------------------------
|
# ↑ --------------------------
|
||||||
|
# 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
|
# Google Analytics pageviews report settings
|
||||||
pv:
|
pv:
|
||||||
proxy_endpoint: # fill in the Google Analytics superProxy endpoint of Google App Engine
|
proxy_endpoint: # fill in the Google Analytics superProxy endpoint of Google App Engine
|
||||||
@@ -79,7 +78,7 @@ theme_mode: # [light|dark]
|
|||||||
# 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://cdn.jsdelivr.net/gh/cotes2020/chirpy-images@f4e0354b674f65a53b8917f0f786ed2956898cc1'
|
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'
|
||||||
@@ -96,6 +95,27 @@ comments:
|
|||||||
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:
|
||||||
|
repo: # <gh-username>/<repo>
|
||||||
|
repo_id:
|
||||||
|
category:
|
||||||
|
category_id:
|
||||||
|
mapping: # optional, default to 'pathname'
|
||||||
|
input_position: # optional, default to 'bottom'
|
||||||
|
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
|
||||||
|
assets:
|
||||||
|
self_host:
|
||||||
|
enabled: # boolean, keep empty means false
|
||||||
|
# specify the Jekyll environment, empty means both
|
||||||
|
# only works if `assets.self_host.enabled` is 'true'
|
||||||
|
env: # [development|production]
|
||||||
|
|
||||||
|
pwa:
|
||||||
|
enabled: true # the option for PWA feature
|
||||||
|
|
||||||
paginate: 10
|
paginate: 10
|
||||||
|
|
||||||
@@ -118,8 +138,7 @@ collections:
|
|||||||
sort_by: order
|
sort_by: order
|
||||||
|
|
||||||
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:
|
||||||
@@ -129,18 +148,24 @@ defaults:
|
|||||||
# 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/
|
||||||
-
|
- scope:
|
||||||
scope:
|
|
||||||
path: _drafts
|
path: _drafts
|
||||||
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/
|
||||||
|
- scope:
|
||||||
|
path: assets/img/favicons
|
||||||
|
values:
|
||||||
|
swcache: true
|
||||||
|
- scope:
|
||||||
|
path: assets/js/dist
|
||||||
|
values:
|
||||||
|
swcache: true
|
||||||
|
|
||||||
sass:
|
sass:
|
||||||
style: compressed
|
style: compressed
|
||||||
@@ -158,8 +183,8 @@ exclude:
|
|||||||
- '*.gem'
|
- '*.gem'
|
||||||
- '*.gemspec'
|
- '*.gemspec'
|
||||||
- tools
|
- tools
|
||||||
- docs
|
|
||||||
- README.md
|
- README.md
|
||||||
|
- CHANGELOG.md
|
||||||
- LICENSE
|
- LICENSE
|
||||||
- gulpfile.js
|
- gulpfile.js
|
||||||
- node_modules
|
- node_modules
|
||||||
|
|||||||
62
_data/assets/cross_origin.yml
Normal file
62
_data/assets/cross_origin.yml
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
# 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.6.1/dist/jquery.min.js
|
||||||
|
|
||||||
|
bootstrap:
|
||||||
|
css: https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css
|
||||||
|
js: https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/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@6.2.1/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@9.2.2/dist/mermaid.min.js
|
||||||
|
|
||||||
|
dayjs:
|
||||||
|
js:
|
||||||
|
common: https://cdn.jsdelivr.net/npm/dayjs@1.11.6/dayjs.min.js
|
||||||
|
locale: https://cdn.jsdelivr.net/npm/dayjs@1.11.6/locale/:LOCALE.min.js
|
||||||
|
relativeTime: https://cdn.jsdelivr.net/npm/dayjs@1.11.6/plugin/relativeTime.min.js
|
||||||
|
localizedFormat: https://cdn.jsdelivr.net/npm/dayjs@1.11.6/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.1.0/dist/magnific-popup.min.css
|
||||||
|
js: https://cdn.jsdelivr.net/npm/magnific-popup@1.1.0/dist/jquery.magnific-popup.min.js
|
||||||
|
|
||||||
|
lazysizes:
|
||||||
|
js: https://cdn.jsdelivr.net/npm/lazysizes@5.3.2/lazysizes.min.js
|
||||||
|
|
||||||
|
clipboard:
|
||||||
|
js: https://cdn.jsdelivr.net/npm/clipboard@2.0.11/dist/clipboard.min.js
|
||||||
|
|
||||||
|
polyfill:
|
||||||
|
js: https://polyfill.io/v3/polyfill.min.js?features=es6
|
||||||
|
|
||||||
|
mathjax:
|
||||||
|
js: https://cdn.jsdelivr.net/npm/mathjax@3.2.2/es5/tex-chtml.js
|
||||||
51
_data/assets/self_host.yml
Normal file
51
_data/assets/self_host.yml
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
# 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-6.2.1/css/all.min.css
|
||||||
|
|
||||||
|
search:
|
||||||
|
js: /assets/lib/simple-jekyll-search-1.10.0/simple-jekyll-search.min.js
|
||||||
|
|
||||||
|
mermaid:
|
||||||
|
js: /assets/lib/mermaid-9.1.7/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
|
||||||
|
|
||||||
|
lazysizes:
|
||||||
|
js: /assets/lib/lazysizes-5.3.2/lazysizes.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
|
||||||
17
_data/authors.yml
Normal file
17
_data/authors.yml
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
## Template › https://github.com/jekyll/jekyll-seo-tag/blob/master/docs/advanced-usage.md#setting-author-url
|
||||||
|
# -------------------------------------
|
||||||
|
# {author_id}:
|
||||||
|
# name: {full name}
|
||||||
|
# twitter: {twitter_of_author}
|
||||||
|
# url: {homepage_of_author}
|
||||||
|
# -------------------------------------
|
||||||
|
|
||||||
|
cotes:
|
||||||
|
name: Cotes Chung
|
||||||
|
twitter: cotes2020
|
||||||
|
url: https://github.com/cotes2020/
|
||||||
|
|
||||||
|
sille_bille:
|
||||||
|
name: Dinesh Prasanth Moluguwan Krishnamoorthy
|
||||||
|
twitter: dinesh_MKD
|
||||||
|
url: https://github.com/SilleBille/
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
# -
|
# -
|
||||||
# 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/>
|
||||||
|
|||||||
93
_data/locales/ar.yml
Normal file
93
_data/locales/ar.yml
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
# 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: تم نسخ الرابط بنجاح!
|
||||||
|
# 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: '%b %e, %Y'
|
||||||
|
dayjs: 'll'
|
||||||
|
archives:
|
||||||
|
strftime: '%b'
|
||||||
|
dayjs: 'MMM'
|
||||||
|
|
||||||
|
# categories page
|
||||||
|
categories:
|
||||||
|
category_measure:
|
||||||
|
singular: فئة
|
||||||
|
plural: فئات
|
||||||
|
post_measure:
|
||||||
|
singular: منشور
|
||||||
|
plural: منشورات
|
||||||
83
_data/locales/bg-BG.yml
Normal file
83
_data/locales/bg-BG.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: >-
|
||||||
|
Освен ако не е посочено друго, публикациите в блога на този сайт са лицензирани
|
||||||
|
под лиценза 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: Линкът е копиран успешно!
|
||||||
|
# pinned prompt of posts list on homepage
|
||||||
|
pin_prompt: Прикрепенa
|
||||||
|
|
||||||
|
# categories page
|
||||||
|
categories:
|
||||||
|
category_measure:
|
||||||
|
singular: категория
|
||||||
|
plural: категории
|
||||||
|
post_measure:
|
||||||
|
singular: публикация
|
||||||
|
plural: публикации
|
||||||
91
_data/locales/cs-CZ.yml
Normal file
91
_data/locales/cs-CZ.yml
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
# 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!
|
||||||
|
# pinned prompt of posts list on homepage
|
||||||
|
pin_prompt: Připnuto
|
||||||
|
|
||||||
|
# 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
|
||||||
82
_data/locales/de-DE.yml
Normal file
82
_data/locales/de-DE.yml
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
# 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: lesen
|
||||||
|
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!
|
||||||
|
# pinned prompt of posts list on homepage
|
||||||
|
pin_prompt: Angepinnt
|
||||||
|
|
||||||
|
# categories page
|
||||||
|
categories:
|
||||||
|
category_measure:
|
||||||
|
singular: Kategorie
|
||||||
|
plural: Kategorien
|
||||||
|
post_measure:
|
||||||
|
singular: Eintrag
|
||||||
|
plural: Einträge
|
||||||
@@ -20,21 +20,13 @@ tabs:
|
|||||||
search:
|
search:
|
||||||
hint: search
|
hint: search
|
||||||
cancel: Cancel
|
cancel: Cancel
|
||||||
no_results: Oops! No result founds.
|
no_results: Oops! No results found.
|
||||||
|
|
||||||
panel:
|
panel:
|
||||||
lastmod: Recent Update
|
lastmod: Recently Updated
|
||||||
trending_tags: Trending Tags
|
trending_tags: Trending Tags
|
||||||
toc: Contents
|
toc: Contents
|
||||||
|
|
||||||
# The liquid date format › http://strftime.net/
|
|
||||||
date_format:
|
|
||||||
tooltip: '%a, %b %e, %Y, %l:%M %p %z'
|
|
||||||
post:
|
|
||||||
long: '%b %e, %Y'
|
|
||||||
short: '%b %e'
|
|
||||||
archive_month: '%b'
|
|
||||||
|
|
||||||
copyright:
|
copyright:
|
||||||
# Shown at the bottom of the post
|
# Shown at the bottom of the post
|
||||||
license:
|
license:
|
||||||
@@ -48,13 +40,14 @@ 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 :PLATFORM theme :THEME.
|
||||||
|
|
||||||
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.
|
||||||
hint_template: :HEAD_BAK to try finding it again, or search for it on the :ARCHIVES_PAGE.
|
|
||||||
head_back: Head back Home
|
notification:
|
||||||
archives_page: Archives page
|
update_found: A new version of content is available.
|
||||||
|
update: Update
|
||||||
|
|
||||||
# ----- Posts related labels -----
|
# ----- Posts related labels -----
|
||||||
|
|
||||||
@@ -62,11 +55,6 @@ post:
|
|||||||
written_by: By
|
written_by: By
|
||||||
posted: Posted
|
posted: Posted
|
||||||
updated: Updated
|
updated: Updated
|
||||||
timeago:
|
|
||||||
day: days ago
|
|
||||||
hour: hours ago
|
|
||||||
minute: minutes ago
|
|
||||||
just_now: just now
|
|
||||||
words: words
|
words: words
|
||||||
pageview_measure: views
|
pageview_measure: views
|
||||||
read_time:
|
read_time:
|
||||||
@@ -85,7 +73,21 @@ post:
|
|||||||
# pinned prompt of posts list on homepage
|
# pinned prompt of posts list on homepage
|
||||||
pin_prompt: Pinned
|
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:
|
||||||
category_measure: categories
|
category_measure:
|
||||||
post_measure: posts
|
singular: category
|
||||||
|
plural: categories
|
||||||
|
post_measure:
|
||||||
|
singular: post
|
||||||
|
plural: posts
|
||||||
|
|||||||
79
_data/locales/es-ES.yml
Normal file
79
_data/locales/es-ES.yml
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
# The layout text of site
|
||||||
|
|
||||||
|
# ----- Commons label -----
|
||||||
|
|
||||||
|
layout:
|
||||||
|
post: Entrada
|
||||||
|
category: Categoría
|
||||||
|
tag: Etiqueta
|
||||||
|
|
||||||
|
# The tabs of sidebar
|
||||||
|
tabs:
|
||||||
|
# format: <filename_without_extension>: <value>
|
||||||
|
home: Inicio
|
||||||
|
categories: Categorías
|
||||||
|
tags: Etiquetas
|
||||||
|
archives: Archivo
|
||||||
|
about: Acerca de
|
||||||
|
|
||||||
|
# the text displayed in the search bar & search results
|
||||||
|
search:
|
||||||
|
hint: Buscar
|
||||||
|
cancel: Cancelar
|
||||||
|
no_results: ¡Oops! No se encuentran resultados.
|
||||||
|
|
||||||
|
panel:
|
||||||
|
lastmod: Actualizado recientemente
|
||||||
|
trending_tags: Etiquetas populares
|
||||||
|
toc: Contenido
|
||||||
|
|
||||||
|
copyright:
|
||||||
|
# Shown at the bottom of the post
|
||||||
|
license:
|
||||||
|
template: Esta entrada está licenciada bajo :LICENSE_NAME por el autor.
|
||||||
|
name: CC BY 4.0
|
||||||
|
link: https://creativecommons.org/licenses/by/4.0/
|
||||||
|
|
||||||
|
# Displayed in the footer
|
||||||
|
brief: Algunos derechos reservados.
|
||||||
|
verbose: >-
|
||||||
|
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.
|
||||||
|
|
||||||
|
meta: Hecho con :PLATFORM usando el tema :THEME.
|
||||||
|
|
||||||
|
not_found:
|
||||||
|
statment: Lo sentimos, hemos perdido esa URL o apunta a algo que no existe.
|
||||||
|
|
||||||
|
notification:
|
||||||
|
update_found: Hay una nueva versión de contenido disponible.
|
||||||
|
update: Actualizar
|
||||||
|
|
||||||
|
# ----- Posts related labels -----
|
||||||
|
|
||||||
|
post:
|
||||||
|
written_by: Por
|
||||||
|
posted: Publicado
|
||||||
|
updated: Actualizado
|
||||||
|
words: palabras
|
||||||
|
pageview_measure: visitas
|
||||||
|
read_time:
|
||||||
|
unit: min
|
||||||
|
prompt: ' de lectura'
|
||||||
|
relate_posts: Lecturas adicionales
|
||||||
|
share: Compartir
|
||||||
|
button:
|
||||||
|
next: Nuevo
|
||||||
|
previous: Anterior
|
||||||
|
copy_code:
|
||||||
|
succeed: ¡Copiado!
|
||||||
|
share_link:
|
||||||
|
title: Copiar enlace
|
||||||
|
succeed: ¡Enlace copiado!
|
||||||
|
# pinned prompt of posts list on homepage
|
||||||
|
pin_prompt: Fijado
|
||||||
|
|
||||||
|
# categories page
|
||||||
|
categories:
|
||||||
|
category_measure: categorias
|
||||||
|
post_measure: entradas
|
||||||
92
_data/locales/fi-FI.yml
Normal file
92
_data/locales/fi-FI.yml
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
# 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!
|
||||||
|
# pinned prompt of posts list on homepage
|
||||||
|
pin_prompt: Kiinnitetty
|
||||||
|
|
||||||
|
# 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
|
||||||
79
_data/locales/fr-FR.yml
Normal file
79
_data/locales/fr-FR.yml
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
# The layout text of site
|
||||||
|
|
||||||
|
# ----- Commons label -----
|
||||||
|
|
||||||
|
layout:
|
||||||
|
post: Post
|
||||||
|
category: Catégorie
|
||||||
|
tag: Tag
|
||||||
|
|
||||||
|
# The tabs of sidebar
|
||||||
|
tabs:
|
||||||
|
# format: <filename_without_extension>: <value>
|
||||||
|
home: Accueil
|
||||||
|
categories: Catégories
|
||||||
|
tags: Tags
|
||||||
|
archives: Archives
|
||||||
|
about: A propos de
|
||||||
|
|
||||||
|
# the text displayed in the search bar & search results
|
||||||
|
search:
|
||||||
|
hint: recherche
|
||||||
|
cancel: Annuler
|
||||||
|
no_results: Oups ! Aucun résultat trouvé.
|
||||||
|
|
||||||
|
panel:
|
||||||
|
lastmod: Récemment mis à jour
|
||||||
|
trending_tags: Tags tendance
|
||||||
|
toc: Contenu
|
||||||
|
|
||||||
|
copyright:
|
||||||
|
# Shown at the bottom of the post
|
||||||
|
license:
|
||||||
|
template: Cet article est sous licence :LICENSE_NAME par l'auteur.
|
||||||
|
name: CC BY 4.0
|
||||||
|
link: https://creativecommons.org/licenses/by/4.0/
|
||||||
|
|
||||||
|
# Displayed in the footer
|
||||||
|
brief: Certains droits réservés.
|
||||||
|
verbose: >-
|
||||||
|
Sauf mention contraire, les articles de ce site sont publiés sous licence
|
||||||
|
sous la licence Creative Commons Attribution 4.0 International (CC BY 4.0) par l'auteur.
|
||||||
|
|
||||||
|
meta: Propulsé par :PLATFORM avec le thème :THEME
|
||||||
|
|
||||||
|
not_found:
|
||||||
|
statment: Désolé, nous avons égaré cette URL ou elle pointe vers quelque chose qui n'existe pas.
|
||||||
|
|
||||||
|
notification:
|
||||||
|
update_found: Une nouvelle version du contenu est disponible.
|
||||||
|
update: Mise à jour
|
||||||
|
|
||||||
|
# ----- Posts related labels -----
|
||||||
|
|
||||||
|
post:
|
||||||
|
written_by: Par
|
||||||
|
posted: Posté
|
||||||
|
updated: Mis à jour
|
||||||
|
words: mots
|
||||||
|
pageview_measure: vues
|
||||||
|
read_time:
|
||||||
|
unit: min
|
||||||
|
prompt: lire
|
||||||
|
relate_posts: Autres lectures
|
||||||
|
share: Partager
|
||||||
|
button:
|
||||||
|
next: Plus récent
|
||||||
|
previous: Plus ancien
|
||||||
|
copy_code:
|
||||||
|
succeed: Copié !
|
||||||
|
share_link:
|
||||||
|
title: Copier le lien
|
||||||
|
succeed: Lien copié avec succès !
|
||||||
|
# pinned prompt of posts list on homepage
|
||||||
|
pin_prompt: Épinglé
|
||||||
|
|
||||||
|
# categories page
|
||||||
|
categories:
|
||||||
|
category_measure: catégories
|
||||||
|
post_measure: posts
|
||||||
81
_data/locales/hu-HU.yml
Normal file
81
_data/locales/hu-HU.yml
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
# 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!
|
||||||
|
# pinned prompt of posts list on homepage
|
||||||
|
pin_prompt: Kitűzve
|
||||||
|
|
||||||
|
# categories page
|
||||||
|
categories:
|
||||||
|
category_measure: kategória
|
||||||
|
post_measure: bejegyzés
|
||||||
@@ -27,14 +27,6 @@ panel:
|
|||||||
trending_tags: Tagar Terpopuler
|
trending_tags: Tagar Terpopuler
|
||||||
toc: Konten
|
toc: Konten
|
||||||
|
|
||||||
# The liquid date format › http://strftime.net/
|
|
||||||
date_format:
|
|
||||||
tooltip: "%a, %e %b, %Y, %l:%M %p"
|
|
||||||
post:
|
|
||||||
long: "%e %b, %Y"
|
|
||||||
short: "%e %b"
|
|
||||||
archive_month: "%b"
|
|
||||||
|
|
||||||
copyright:
|
copyright:
|
||||||
# Shown at the bottom of the post
|
# Shown at the bottom of the post
|
||||||
license:
|
license:
|
||||||
@@ -52,9 +44,10 @@ 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.
|
||||||
hint_template: :HEAD_BAK untuk mencoba mencari kembali, atau cari di :ARCHIVES_PAGE.
|
|
||||||
head_back: Kembali ke Beranda
|
notification:
|
||||||
archives_page: Halaman Arsip
|
update_found: Versi konten baru tersedia.
|
||||||
|
update: Perbarui
|
||||||
|
|
||||||
# ----- Posts related labels -----
|
# ----- Posts related labels -----
|
||||||
|
|
||||||
@@ -62,11 +55,6 @@ post:
|
|||||||
written_by: Oleh
|
written_by: Oleh
|
||||||
posted: Diterbitkan
|
posted: Diterbitkan
|
||||||
updated: Diperbarui
|
updated: Diperbarui
|
||||||
timeago:
|
|
||||||
day: hari yang lalu
|
|
||||||
hour: jam yang lalu
|
|
||||||
minute: menit yang lalu
|
|
||||||
just_now: baru saja
|
|
||||||
words: kata
|
words: kata
|
||||||
pageview_measure: dilihat
|
pageview_measure: dilihat
|
||||||
read_time:
|
read_time:
|
||||||
|
|||||||
93
_data/locales/it-IT.yml
Normal file
93
_data/locales/it-IT.yml
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
# 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!
|
||||||
|
# pinned prompt of posts list on homepage
|
||||||
|
pin_prompt: In alto
|
||||||
|
|
||||||
|
# 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
|
||||||
@@ -27,14 +27,6 @@ panel:
|
|||||||
trending_tags: 인기 태그
|
trending_tags: 인기 태그
|
||||||
toc: 바로가기
|
toc: 바로가기
|
||||||
|
|
||||||
# The liquid date format › http://strftime.net/
|
|
||||||
date_format:
|
|
||||||
tooltip: '%F, %R %z'
|
|
||||||
post:
|
|
||||||
long: '%Y년 %m월 %d일'
|
|
||||||
short: '%m월 %d일'
|
|
||||||
archive_month: '%b월'
|
|
||||||
|
|
||||||
copyright:
|
copyright:
|
||||||
# Shown at the bottom of the post
|
# Shown at the bottom of the post
|
||||||
license:
|
license:
|
||||||
@@ -52,9 +44,10 @@ meta: Powered by :PLATFORM with :THEME theme.
|
|||||||
|
|
||||||
not_found:
|
not_found:
|
||||||
statment: 해당 URL은 존재하지 않습니다.
|
statment: 해당 URL은 존재하지 않습니다.
|
||||||
hint_template: :HEAD_BAK을 눌러 다시 찾거나 :ARCHIVES_PAGE에서 검색해 주세요.
|
|
||||||
head_back: 홈으로 돌아가기
|
notification:
|
||||||
archives_page: 아카이브 페이지
|
update_found: 새 버전의 콘텐츠를 사용할 수 있습니다.
|
||||||
|
update: 업데이트
|
||||||
|
|
||||||
# ----- Posts related labels -----
|
# ----- Posts related labels -----
|
||||||
|
|
||||||
@@ -62,11 +55,6 @@ post:
|
|||||||
written_by: By
|
written_by: By
|
||||||
posted: 게시
|
posted: 게시
|
||||||
updated: 업데이트
|
updated: 업데이트
|
||||||
timeago:
|
|
||||||
day: 일 전
|
|
||||||
hour: 시간 전
|
|
||||||
minute: 분 전
|
|
||||||
just_now: 방금
|
|
||||||
words: 단어
|
words: 단어
|
||||||
pageview_measure: 조회
|
pageview_measure: 조회
|
||||||
read_time:
|
read_time:
|
||||||
@@ -85,6 +73,13 @@ post:
|
|||||||
# pinned prompt of posts list on homepage
|
# pinned prompt of posts list on homepage
|
||||||
pin_prompt: 핀
|
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:
|
||||||
category_measure: 카테고리
|
category_measure: 카테고리
|
||||||
|
|||||||
79
_data/locales/my-MM.yml
Normal file
79
_data/locales/my-MM.yml
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
# 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: Powered by :PLATFORM with :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: လင့်ခ်ကို ကူးယူလိုက်ပြီ။
|
||||||
|
# pinned prompt of posts list on homepage
|
||||||
|
pin_prompt: ချိတ်ထားသည်။
|
||||||
|
|
||||||
|
# categories page
|
||||||
|
categories:
|
||||||
|
category_measure: ကဏ္ဍများ
|
||||||
|
post_measure: ပို့စ်များ
|
||||||
79
_data/locales/pt-BR.yml
Normal file
79
_data/locales/pt-BR.yml
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
# 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: Home
|
||||||
|
categories: Categorias
|
||||||
|
tags: Tags
|
||||||
|
archives: Arquivos
|
||||||
|
about: Sobre
|
||||||
|
|
||||||
|
# the text displayed in the search bar & search results
|
||||||
|
search:
|
||||||
|
hint: Buscar
|
||||||
|
cancel: Cancelar
|
||||||
|
no_results: Oops! Nenhum resultado encontrado.
|
||||||
|
|
||||||
|
panel:
|
||||||
|
lastmod: Atualizados recentemente
|
||||||
|
trending_tags: Trending Tags
|
||||||
|
toc: Conteúdo
|
||||||
|
|
||||||
|
copyright:
|
||||||
|
# Shown at the bottom of the post
|
||||||
|
license:
|
||||||
|
template: Esta postagem está licenciada sob :LICENSE_NAME pelo autor.
|
||||||
|
name: CC BY 4.0
|
||||||
|
link: https://creativecommons.org/licenses/by/4.0/
|
||||||
|
|
||||||
|
# Displayed in the footer
|
||||||
|
brief: Alguns direitos reservados.
|
||||||
|
verbose: >-
|
||||||
|
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.
|
||||||
|
|
||||||
|
meta: Feito com :PLATFORM usando o tema :THEME.
|
||||||
|
|
||||||
|
not_found:
|
||||||
|
statment: Desculpe, a página não foi encontrada.
|
||||||
|
|
||||||
|
notification:
|
||||||
|
update_found: Uma nova versão do conteúdo está disponível.
|
||||||
|
update: atualização
|
||||||
|
|
||||||
|
# ----- Posts related labels -----
|
||||||
|
|
||||||
|
post:
|
||||||
|
written_by: Por
|
||||||
|
posted: Postado em
|
||||||
|
updated: Atualizado
|
||||||
|
words: palavras
|
||||||
|
pageview_measure: visualizações
|
||||||
|
read_time:
|
||||||
|
unit: min
|
||||||
|
prompt: " de leitura"
|
||||||
|
relate_posts: Leia também
|
||||||
|
share: Compartilhar
|
||||||
|
button:
|
||||||
|
next: Próximo
|
||||||
|
previous: Anterior
|
||||||
|
copy_code:
|
||||||
|
succeed: Copiado!
|
||||||
|
share_link:
|
||||||
|
title: Copie o link
|
||||||
|
succeed: Link copiado com sucesso!
|
||||||
|
# pinned prompt of posts list on homepage
|
||||||
|
pin_prompt: Fixado
|
||||||
|
|
||||||
|
# categories page
|
||||||
|
categories:
|
||||||
|
category_measure: categorias
|
||||||
|
post_measure: posts
|
||||||
79
_data/locales/ru-RU.yml
Normal file
79
_data/locales/ru-RU.yml
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
# 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: Powered by :PLATFORM with :THEME 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: Ссылка успешно скопирована!
|
||||||
|
# pinned prompt of posts list on homepage
|
||||||
|
pin_prompt: Закреплено
|
||||||
|
|
||||||
|
# categories page
|
||||||
|
categories:
|
||||||
|
category_measure: категории
|
||||||
|
post_measure: публикации
|
||||||
79
_data/locales/tr-TR.yml
Normal file
79
_data/locales/tr-TR.yml
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
# 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: Yeni Güncellendi
|
||||||
|
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 de vererek paylaşabilir veya düzenleyip paylaşabilirsin.
|
||||||
|
|
||||||
|
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önderilme Tarihi
|
||||||
|
updated: Güncellenme Tarihi
|
||||||
|
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ı.
|
||||||
|
# pinned prompt of posts list on homepage
|
||||||
|
pin_prompt: Sabitlendi
|
||||||
|
|
||||||
|
# categories page
|
||||||
|
categories:
|
||||||
|
category_measure: kategori
|
||||||
|
post_measure: gönderi
|
||||||
79
_data/locales/uk-UA.yml
Normal file
79
_data/locales/uk-UA.yml
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
# 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: Powered by :PLATFORM with :THEME 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: Посилання успішно скопійовано!
|
||||||
|
# pinned prompt of posts list on homepage
|
||||||
|
pin_prompt: Закріплено
|
||||||
|
|
||||||
|
# categories page
|
||||||
|
categories:
|
||||||
|
category_measure: категорії
|
||||||
|
post_measure: публікації
|
||||||
77
_data/locales/vi-VN.yml
Normal file
77
_data/locales/vi-VN.yml
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
# The layout text of site
|
||||||
|
|
||||||
|
# ----- Commons label -----
|
||||||
|
|
||||||
|
layout:
|
||||||
|
post: Bài viết
|
||||||
|
category: Danh mục
|
||||||
|
tag: Thẻ
|
||||||
|
|
||||||
|
# The tabs of sidebar
|
||||||
|
tabs:
|
||||||
|
# format: <filename_without_extension>: <value>
|
||||||
|
home: Trang chủ
|
||||||
|
categories: Các danh mục
|
||||||
|
tags: Các thẻ
|
||||||
|
archives: Lưu trữ
|
||||||
|
about: Giới thiệu
|
||||||
|
|
||||||
|
# the text displayed in the search bar & search results
|
||||||
|
search:
|
||||||
|
hint: tìm kiếm
|
||||||
|
cancel: Hủy
|
||||||
|
no_results: Không có kết quả tìm kiếm.
|
||||||
|
|
||||||
|
panel:
|
||||||
|
lastmod: Mới cập nhật
|
||||||
|
trending_tags: Các thẻ thịnh hành
|
||||||
|
toc: Mục lục
|
||||||
|
|
||||||
|
copyright:
|
||||||
|
# Shown at the bottom of the post
|
||||||
|
license:
|
||||||
|
template: Bài viết này được cấp phép bởi tác giả theo giấy phép :LICENSE_NAME.
|
||||||
|
name: CC BY 4.0
|
||||||
|
link: https://creativecommons.org/licenses/by/4.0/
|
||||||
|
|
||||||
|
# Displayed in the footer
|
||||||
|
brief: Một số quyền được bảo lưu.
|
||||||
|
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).
|
||||||
|
meta: Trang web này được tạo bởi :PLATFORM với chủ đề :THEME.
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
notification:
|
||||||
|
update_found: Đã có phiên bản mới của nội dung.
|
||||||
|
update: Cập nhật
|
||||||
|
|
||||||
|
# ----- Posts related labels -----
|
||||||
|
|
||||||
|
post:
|
||||||
|
written_by: Viết bởi
|
||||||
|
posted: Đăng lúc
|
||||||
|
updated: Cập nhật lúc
|
||||||
|
words: từ
|
||||||
|
pageview_measure: lượt xem
|
||||||
|
read_time:
|
||||||
|
unit: phút
|
||||||
|
prompt: đọc
|
||||||
|
relate_posts: Bài viết liên quan
|
||||||
|
share: Chia sẻ
|
||||||
|
button:
|
||||||
|
next: Mới hơn
|
||||||
|
previous: Cũ hơn
|
||||||
|
copy_code:
|
||||||
|
succeed: Đã sao chép!
|
||||||
|
share_link:
|
||||||
|
title: Sao chép đường dẫn
|
||||||
|
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:
|
||||||
|
category_measure: danh mục
|
||||||
|
post_measure: bài viết
|
||||||
@@ -27,14 +27,6 @@ panel:
|
|||||||
trending_tags: 热门标签
|
trending_tags: 热门标签
|
||||||
toc: 文章内容
|
toc: 文章内容
|
||||||
|
|
||||||
# The liquid date format › http://strftime.net/
|
|
||||||
date_format:
|
|
||||||
tooltip: '%F, %R %z'
|
|
||||||
post:
|
|
||||||
long: '%F'
|
|
||||||
short: '%m-%d'
|
|
||||||
archive_month: '%m月'
|
|
||||||
|
|
||||||
copyright:
|
copyright:
|
||||||
# Shown at the bottom of the post
|
# Shown at the bottom of the post
|
||||||
license:
|
license:
|
||||||
@@ -51,9 +43,10 @@ meta: 本站由 :PLATFORM 生成,采用 :THEME 主题。
|
|||||||
|
|
||||||
not_found:
|
not_found:
|
||||||
statment: 抱歉,我们放错了该 URL,或者它指向了不存在的内容。
|
statment: 抱歉,我们放错了该 URL,或者它指向了不存在的内容。
|
||||||
hint_template: :HEAD_BAK尝试再次查找它,或在:ARCHIVES_PAGE上搜索它。
|
|
||||||
head_back: 返回主页
|
notification:
|
||||||
archives_page: 归档页面
|
update_found: 发现新版本的内容。
|
||||||
|
update: 更新
|
||||||
|
|
||||||
# ----- Posts related labels -----
|
# ----- Posts related labels -----
|
||||||
|
|
||||||
@@ -61,11 +54,6 @@ post:
|
|||||||
written_by: 作者
|
written_by: 作者
|
||||||
posted: 发表于
|
posted: 发表于
|
||||||
updated: 更新于
|
updated: 更新于
|
||||||
timeago:
|
|
||||||
day: 天前
|
|
||||||
hour: 小时前
|
|
||||||
minute: 分钟前
|
|
||||||
just_now: 刚刚
|
|
||||||
words: 字
|
words: 字
|
||||||
pageview_measure: 次浏览
|
pageview_measure: 次浏览
|
||||||
read_time:
|
read_time:
|
||||||
@@ -84,6 +72,13 @@ post:
|
|||||||
# pinned prompt of posts list on homepage
|
# pinned prompt of posts list on homepage
|
||||||
pin_prompt: 顶置
|
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:
|
||||||
category_measure: 个分类
|
category_measure: 个分类
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ platforms:
|
|||||||
-
|
-
|
||||||
type: Telegram
|
type: Telegram
|
||||||
icon: "fab fa-telegram"
|
icon: "fab fa-telegram"
|
||||||
link: "https://telegram.me/share?text=TITLE&url=URL"
|
link: "https://t.me/share/url?url=URL&text=TITLE"
|
||||||
|
|
||||||
# Uncomment below if you need to.
|
# Uncomment below if you need to.
|
||||||
# -
|
# -
|
||||||
|
|||||||
12
_includes/assets-origin.html
Normal file
12
_includes/assets-origin.html
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{% comment %} Site static assets origin {% endcomment %}
|
||||||
|
{% assign origin = 'cross_origin' %}
|
||||||
|
|
||||||
|
{% if site.assets.self_host.enabled %}
|
||||||
|
{% if site.assets.self_host.env %}
|
||||||
|
{% if site.assets.self_host.env == jekyll.environment %}
|
||||||
|
{% assign origin = 'self_host' %}
|
||||||
|
{% endif %}
|
||||||
|
{% else %}
|
||||||
|
{% assign origin = 'self_host' %}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
@@ -15,7 +15,6 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
/* Lazy loading */
|
/* Lazy loading */
|
||||||
|
|
||||||
var disqus_observer = new IntersectionObserver(function (entries) {
|
var disqus_observer = new IntersectionObserver(function (entries) {
|
||||||
if(entries[0].isIntersecting) {
|
if(entries[0].isIntersecting) {
|
||||||
(function () {
|
(function () {
|
||||||
@@ -32,8 +31,9 @@
|
|||||||
disqus_observer.observe(document.querySelector('#disqus_thread'));
|
disqus_observer.observe(document.querySelector('#disqus_thread'));
|
||||||
|
|
||||||
/* Auto switch theme */
|
/* Auto switch theme */
|
||||||
|
|
||||||
function reloadDisqus() {
|
function reloadDisqus() {
|
||||||
|
if (event.source === window && event.data &&
|
||||||
|
event.data.direction === ModeToggle.ID) {
|
||||||
/* Disqus hasn't been loaded */
|
/* Disqus hasn't been loaded */
|
||||||
if (typeof DISQUS === "undefined") {
|
if (typeof DISQUS === "undefined") {
|
||||||
return;
|
return;
|
||||||
@@ -43,12 +43,12 @@
|
|||||||
DISQUS.reset({ reload: true, config: disqus_config });
|
DISQUS.reset({ reload: true, config: disqus_config });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const modeToggle = document.querySelector(".mode-toggle");
|
const modeToggle = document.querySelector(".mode-toggle");
|
||||||
|
|
||||||
if (typeof modeToggle !== "undefined") {
|
if (typeof modeToggle !== "undefined") {
|
||||||
/* modeToggle.addEventListener('click', reloadDisqus); // not pretty for 'color-scheme' */
|
window.addEventListener("message", reloadDisqus);
|
||||||
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', reloadDisqus);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
56
_includes/comments/giscus.html
Normal file
56
_includes/comments/giscus.html
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
<!-- https://giscus.app/ -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(function () {
|
||||||
|
const origin = "https://giscus.app";
|
||||||
|
const iframe = "iframe.giscus-frame";
|
||||||
|
const lightTheme = "light";
|
||||||
|
const darkTheme = "dark_dimmed";
|
||||||
|
let initTheme = lightTheme;
|
||||||
|
|
||||||
|
if ($("html[data-mode=dark]").length > 0
|
||||||
|
|| ($("html[data-mode]").length == 0
|
||||||
|
&& window.matchMedia("(prefers-color-scheme: dark)").matches)) {
|
||||||
|
initTheme = darkTheme;
|
||||||
|
}
|
||||||
|
|
||||||
|
let giscusAttributes = {
|
||||||
|
"src": "https://giscus.app/client.js",
|
||||||
|
"data-repo": "{{ site.comments.giscus.repo}}",
|
||||||
|
"data-repo-id": "{{ site.comments.giscus.repo_id }}",
|
||||||
|
"data-category": "{{ site.comments.giscus.category }}",
|
||||||
|
"data-category-id": "{{ site.comments.giscus.category_id }}",
|
||||||
|
"data-mapping": "{{ site.comments.giscus.mapping | default: 'pathname' }}",
|
||||||
|
"data-reactions-enabled": "{{ site.comments.giscus.reactions_enabled | default: '1' }}",
|
||||||
|
"data-emit-metadata": "0",
|
||||||
|
"data-theme": initTheme,
|
||||||
|
"data-input-position": "{{ site.comments.giscus.input_position | default: 'bottom' }}",
|
||||||
|
"data-lang": "{{ site.comments.giscus.lang | default: lang }}",
|
||||||
|
"crossorigin": "anonymous",
|
||||||
|
"async": ""
|
||||||
|
};
|
||||||
|
|
||||||
|
let giscusScript = document.createElement("script");
|
||||||
|
Object.entries(giscusAttributes).forEach(([key, value]) => giscusScript.setAttribute(key, value));
|
||||||
|
document.getElementById("tail-wrapper").appendChild(giscusScript);
|
||||||
|
|
||||||
|
addEventListener("message", (event) => {
|
||||||
|
if (event.source === window && event.data &&
|
||||||
|
event.data.direction === ModeToggle.ID) {
|
||||||
|
/* global theme mode changed */
|
||||||
|
const mode = event.data.message;
|
||||||
|
const theme = (mode === ModeToggle.DARK_MODE ? darkTheme : lightTheme);
|
||||||
|
|
||||||
|
const message = {
|
||||||
|
setConfig: {
|
||||||
|
theme: theme
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const giscus = document.querySelector(iframe).contentWindow;
|
||||||
|
giscus.postMessage({ giscus: message }, origin);
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
</script>
|
||||||
@@ -14,8 +14,8 @@
|
|||||||
const darkTheme = "github-dark";
|
const darkTheme = "github-dark";
|
||||||
let initTheme = lightTheme;
|
let initTheme = lightTheme;
|
||||||
|
|
||||||
if ($("html[mode=dark]").length > 0
|
if ($("html[data-mode=dark]").length > 0
|
||||||
|| ($("html[mode]").length == 0
|
|| ($("html[data-mode]").length == 0
|
||||||
&& window.matchMedia("(prefers-color-scheme: dark)").matches)) {
|
&& window.matchMedia("(prefers-color-scheme: dark)").matches)) {
|
||||||
initTheme = darkTheme;
|
initTheme = darkTheme;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,15 +0,0 @@
|
|||||||
<!--
|
|
||||||
CSS selector for site.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<link rel="stylesheet" href="{{ '/assets/css/style.css' | relative_url }}">
|
|
||||||
|
|
||||||
{% if site.toc and page.toc %}
|
|
||||||
<link rel="stylesheet"
|
|
||||||
href="https://cdn.jsdelivr.net/gh/afeld/bootstrap-toc@1.0.1/dist/bootstrap-toc.min.css">
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if page.layout == 'page' or page.layout == 'post' %}
|
|
||||||
<!-- Manific Popup -->
|
|
||||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/magnific-popup@1.1.0/dist/magnific-popup.min.css">
|
|
||||||
{% endif %}
|
|
||||||
15
_includes/datetime.html
Normal file
15
_includes/datetime.html
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<!--
|
||||||
|
Date format snippet
|
||||||
|
See: ${JS_ROOT}/utils/locale-dateime.js
|
||||||
|
-->
|
||||||
|
|
||||||
|
{% assign wrap_elem = include.wrap | default: 'em' %}
|
||||||
|
{% assign df_strftime = site.data.locales[site.lang].df.post.strftime | default: '%d/%m/%Y' %}
|
||||||
|
{% assign df_dayjs = site.data.locales[site.lang].df.post.dayjs | default: 'DD/MM/YYYY' %}
|
||||||
|
|
||||||
|
<{{ wrap_elem }} class="{% if include.class %}{{ include.class }}{% 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 }}
|
||||||
|
</{{ wrap_elem }}>
|
||||||
4
_includes/embed/twitch.html
Normal file
4
_includes/embed/twitch.html
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<iframe class="embed-video twitch lazyload"
|
||||||
|
src="https://player.twitch.tv/?video={{ include.id }}&parent={{ site.url | split: '://' | last | remove: '/' }}"
|
||||||
|
frameborder="0" allowfullscreen="true"
|
||||||
|
scrolling="no"></iframe>
|
||||||
6
_includes/embed/youtube.html
Normal file
6
_includes/embed/youtube.html
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<iframe class="embed-video youtube lazyload"
|
||||||
|
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,37 +1,36 @@
|
|||||||
<!--
|
<!-- The Footer -->
|
||||||
The Footer
|
|
||||||
-->
|
|
||||||
|
|
||||||
<footer class="d-flex w-100 justify-content-center">
|
<footer>
|
||||||
<div class="d-flex justify-content-between align-items-center text-muted">
|
<div class="container pl-lg-4 pr-lg-4">
|
||||||
|
<div class="d-flex justify-content-between align-items-center text-muted ml-md-3 mr-md-3">
|
||||||
<div class="footer-left">
|
<div class="footer-left">
|
||||||
<p class="mb-0">
|
<p class="mb-0">
|
||||||
© {{ 'now' | date: "%Y" }}
|
© {{ 'now' | date: "%Y" }}
|
||||||
<a href="{{ site.social.links[0] }}">{{ site.social.name }}</a>.
|
<a href="{{ site.social.links[0] }}">{{ site.social.name }}</a>.
|
||||||
{% if site.data.locales[lang].copyright.brief %}
|
{% if site.data.locales[site.lang].copyright.brief %}
|
||||||
<span data-toggle="tooltip" data-placement="top"
|
<span data-toggle="tooltip" data-placement="top"
|
||||||
title="{{ site.data.locales[lang].copyright.verbose }}">{{ site.data.locales[lang].copyright.brief }}</span>
|
title="{{ site.data.locales[site.lang].copyright.verbose }}">{{ site.data.locales[site.lang].copyright.brief }}</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="footer-right">
|
<div class="footer-right">
|
||||||
<p class="mb-0">
|
<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
|
{{ site.data.locales[site.lang].meta
|
||||||
| default: 'Powered by :PLATFORM with :THEME theme.'
|
| default: 'Using the :PLATFORM theme :THEME.'
|
||||||
| replace: ':PLATFORM', _platform | replace: ':THEME', _theme
|
| replace: ':PLATFORM', _platform | replace: ':THEME', _theme
|
||||||
}}
|
}}
|
||||||
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</div> <!-- div.d-flex -->
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
@@ -8,12 +8,6 @@
|
|||||||
|
|
||||||
{% if page.layout == 'home' or page.layout == 'post' %}
|
{% if page.layout == 'home' or page.layout == 'post' %}
|
||||||
|
|
||||||
<!-- i18n for `_javascript/utils/timeago.js` -->
|
|
||||||
<meta name="day-prompt" content="{{ site.data.locales[lang].post.timeago.day }}">
|
|
||||||
<meta name="hour-prompt" content="{{ site.data.locales[lang].post.timeago.hour }}">
|
|
||||||
<meta name="minute-prompt" content="{{ site.data.locales[lang].post.timeago.minute }}">
|
|
||||||
<meta name="justnow-prompt" content="{{ site.data.locales[lang].post.timeago.just_now }}">
|
|
||||||
|
|
||||||
{% if site.google_analytics.pv.proxy_endpoint %}
|
{% if site.google_analytics.pv.proxy_endpoint %}
|
||||||
<meta name="pv-proxy-endpoint" content="{{ site.google_analytics.pv.proxy_endpoint }}">
|
<meta name="pv-proxy-endpoint" content="{{ site.google_analytics.pv.proxy_endpoint }}">
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@@ -24,7 +18,34 @@
|
|||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
{% capture seo_tags %}
|
||||||
{% seo title=false %}
|
{% seo title=false %}
|
||||||
|
{% endcapture %}
|
||||||
|
|
||||||
|
{% if page.image %}
|
||||||
|
{% 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 %}
|
||||||
|
|
||||||
|
{% if site.img_cdn contains '//' %}
|
||||||
|
<!-- it's a cross-origin URL -->
|
||||||
|
{% capture replacement %}"{{ site.img_cdn }}{{ img_path }}"{% endcapture %}
|
||||||
|
{% else %}
|
||||||
|
<!-- it's a local file path -->
|
||||||
|
{%- capture replacement -%}
|
||||||
|
"{{ site.img_cdn | append: '/' | append: img_path | replace: '//', '/' | absolute_url }}"
|
||||||
|
{%- endcapture -%}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% assign seo_tags = seo_tags | replace: target, replacement %}
|
||||||
|
|
||||||
|
{% endunless %}
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{{ seo_tags }}
|
||||||
|
|
||||||
<title>
|
<title>
|
||||||
{%- unless page.layout == "home" -%}
|
{%- unless page.layout == "home" -%}
|
||||||
@@ -35,12 +56,24 @@
|
|||||||
|
|
||||||
{% include favicons.html %}
|
{% include favicons.html %}
|
||||||
|
|
||||||
<!-- Google Fonts -->
|
{% if site.resources.ignore_env != jekyll.environment and site.resources.self_hosted %}
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous">
|
|
||||||
<link rel="dns-prefetch" href="https://fonts.gstatic.com">
|
<link href="{{ site.data.assets[origin].webfonts | relative_url }}" rel="stylesheet">
|
||||||
|
|
||||||
|
{% else %}
|
||||||
|
|
||||||
|
{% for cdn in site.data.assets[origin].cdns %}
|
||||||
|
<link rel="preconnect" href="{{ cdn.url }}" {{ cdn.args }}>
|
||||||
|
<link rel="dns-prefetch" href="{{ cdn.url }}" {{ cdn.args }}>
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="{{ site.data.assets[origin].webfonts | relative_url }}">
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<!-- GA -->
|
<!-- GA -->
|
||||||
{% if jekyll.environment == 'production' %}
|
{% if jekyll.environment == 'production'
|
||||||
|
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">
|
||||||
|
|
||||||
@@ -50,26 +83,33 @@
|
|||||||
{% if site.google_analytics.pv.proxy_endpoint %}
|
{% if site.google_analytics.pv.proxy_endpoint %}
|
||||||
{% assign proxy_url = site.google_analytics.pv.proxy_endpoint
|
{% assign proxy_url = site.google_analytics.pv.proxy_endpoint
|
||||||
| replace: "https://", "" | split: "/" | first | prepend: "https://" %}
|
| replace: "https://", "" | split: "/" | first | prepend: "https://" %}
|
||||||
|
|
||||||
<link rel="preconnect" href="{{ proxy_url }}" crossorigin="use-credentials">
|
<link rel="preconnect" href="{{ proxy_url }}" crossorigin="use-credentials">
|
||||||
<link rel="dns-prefetch" href="{{ proxy_url }}">
|
<link rel="dns-prefetch" href="{{ proxy_url }}">
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<!-- jsDelivr CDN -->
|
|
||||||
<link rel="preconnect" href="https://cdn.jsdelivr.net">
|
|
||||||
<link rel="dns-prefetch" href="https://cdn.jsdelivr.net">
|
|
||||||
|
|
||||||
<!-- Bootstrap -->
|
<!-- Bootstrap -->
|
||||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.0.0/dist/css/bootstrap.min.css">
|
<link rel="stylesheet" href="{{ site.data.assets[origin].bootstrap.css | relative_url}}">
|
||||||
|
|
||||||
<!-- Font Awesome -->
|
<!-- Font Awesome -->
|
||||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5.11.2/css/all.min.css">
|
<link rel="stylesheet" href="{{ site.data.assets[origin].fontawesome.css | relative_url }}">
|
||||||
|
|
||||||
{% include css-selector.html %}
|
<link rel="stylesheet" href="{{ '/assets/css/style.css' | relative_url }}">
|
||||||
|
|
||||||
|
{% if site.toc and page.toc %}
|
||||||
|
<link rel="stylesheet" href="{{ site.data.assets[origin].bootstrap-toc.css | relative_url }}">
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if page.layout == 'page' or page.layout == 'post' %}
|
||||||
|
<!-- Manific Popup -->
|
||||||
|
<link rel="stylesheet" href="{{ site.data.assets[origin].magnific-popup.css | relative_url }}">
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<!-- JavaScript -->
|
<!-- JavaScript -->
|
||||||
|
|
||||||
<script src="https://cdn.jsdelivr.net/npm/jquery@3/dist/jquery.min.js"></script>
|
<script src="{{ site.data.assets[origin].jquery.js | relative_url }}"></script>
|
||||||
|
|
||||||
|
{% unless site.theme_mode %}
|
||||||
|
{% include mode-toggle.html %}
|
||||||
|
{% endunless %}
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
@@ -7,14 +7,38 @@
|
|||||||
{% if page.layout == 'post' %}
|
{% if page.layout == 'post' %}
|
||||||
{% if site.google_analytics.pv.proxy_endpoint or site.google_analytics.pv.cache_path %}
|
{% if site.google_analytics.pv.proxy_endpoint or site.google_analytics.pv.cache_path %}
|
||||||
<!-- pv-report needs countup.js -->
|
<!-- pv-report needs countup.js -->
|
||||||
<script async src="https://cdn.jsdelivr.net/npm/countup.js@1.9.3/dist/countUp.min.js"></script>
|
<script async src="{{ site.data.assets[origin].countup.js | relative_url }}"></script>
|
||||||
<script defer src="{{ '/assets/js/dist/pvreport.min.js' | relative_url }}"></script>
|
<script defer src="{{ '/assets/js/dist/pvreport.min.js' | relative_url }}"></script>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if page.layout == 'post' or page.layout == 'page' %}
|
{% if page.layout == 'post' or page.layout == 'page' %}
|
||||||
<!-- image lazy-loading & popup -->
|
<!-- image lazy-loading & popup & clipboard -->
|
||||||
<script src="https://cdn.jsdelivr.net/combine/npm/lozad/dist/lozad.min.js,npm/magnific-popup@1/dist/jquery.magnific-popup.min.js,npm/clipboard@2/dist/clipboard.min.js"></script>
|
{% assign _urls = site.data.assets[origin].magnific-popup.js
|
||||||
|
| append: ',' | append: site.data.assets[origin].lazysizes.js
|
||||||
|
| append: ',' | append: site.data.assets[origin].clipboard.js
|
||||||
|
%}
|
||||||
|
|
||||||
|
{% include jsdelivr-combine.html urls=_urls %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if page.layout == 'home'
|
||||||
|
or page.layout == 'post'
|
||||||
|
or page.layout == 'archives'
|
||||||
|
or page.layout == 'category'
|
||||||
|
or page.layout == 'tag' %}
|
||||||
|
|
||||||
|
{% assign locale = site.lang | split: '-' | first %}
|
||||||
|
|
||||||
|
{% assign _urls = site.data.assets[origin].dayjs.js.common
|
||||||
|
| 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 %}
|
{% endif %}
|
||||||
|
|
||||||
{% if page.layout == 'home'
|
{% if page.layout == 'home'
|
||||||
@@ -22,12 +46,16 @@
|
|||||||
or page.layout == 'post'
|
or page.layout == 'post'
|
||||||
or page.layout == 'page' %}
|
or page.layout == 'page' %}
|
||||||
{% assign type = page.layout %}
|
{% assign type = page.layout %}
|
||||||
|
{% elsif page.layout == 'archives'
|
||||||
|
or page.layout == 'category'
|
||||||
|
or page.layout == 'tag' %}
|
||||||
|
{% assign type = "misc" %}
|
||||||
{% else %}
|
{% else %}
|
||||||
{% assign type = "commons" %}
|
{% assign type = "commons" %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% assign js = type | prepend: '/assets/js/dist/' | append: '.min.js' %}
|
{% capture script %}/assets/js/dist/{{ type }}.min.js{% endcapture %}
|
||||||
<script defer src="{{ js | relative_url }}"></script>
|
<script defer src="{{ script | relative_url }}"></script>
|
||||||
|
|
||||||
{% if page.math %}
|
{% if page.math %}
|
||||||
<!-- MathJax -->
|
<!-- MathJax -->
|
||||||
@@ -46,22 +74,25 @@
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
<script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
|
<script src="{{ site.data.assets[origin].polyfill.js | relative_url }}"></script>
|
||||||
<script type="text/javascript" id="MathJax-script" async
|
<script id="MathJax-script" async src="{{ site.data.assets[origin].mathjax.js | relative_url }}">
|
||||||
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js">
|
|
||||||
</script>
|
</script>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<!-- commons -->
|
<!-- commons -->
|
||||||
|
|
||||||
<script src="https://cdn.jsdelivr.net/combine/npm/popper.js@1.16.1,npm/bootstrap@4/dist/js/bootstrap.min.js"></script>
|
<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 %}
|
||||||
<script defer src="{{ '/app.js' | relative_url }}"></script>
|
<script defer src="{{ '/app.js' | relative_url }}"></script>
|
||||||
|
{% else %}
|
||||||
|
<script defer src="{{ '/unregister.js' | relative_url }}"></script>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<!-- GA -->
|
<!-- GA -->
|
||||||
{% if 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 %}
|
||||||
|
|
||||||
|
|||||||
32
_includes/jsdelivr-combine.html
Normal file
32
_includes/jsdelivr-combine.html
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
{% assign urls = include.urls | split: ',' %}
|
||||||
|
|
||||||
|
{% assign combined_urls = nil %}
|
||||||
|
|
||||||
|
{% assign domain = 'https://cdn.jsdelivr.net/' %}
|
||||||
|
|
||||||
|
{% for url in urls %}
|
||||||
|
|
||||||
|
{% if url contains domain %}
|
||||||
|
{% assign url_snippet = url | slice: domain.size, url.size %}
|
||||||
|
|
||||||
|
{% if combined_urls %}
|
||||||
|
{% assign combined_urls = combined_urls | append: ',' | append: url_snippet %}
|
||||||
|
{% else %}
|
||||||
|
{% assign combined_urls = domain | append: 'combine/' | append: url_snippet %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% elsif url contains '//' %}
|
||||||
|
|
||||||
|
<script src="{{ url }}"></script>
|
||||||
|
|
||||||
|
{% else %}
|
||||||
|
|
||||||
|
<script src="{{ url | relative_url }}"></script>
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
{% if combined_urls %}
|
||||||
|
<script src="{{ combined_urls }}"></script>
|
||||||
|
{% endif %}
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
{% comment %}
|
|
||||||
Detect appearance language and return it through variable "lang"
|
|
||||||
{% endcomment %}
|
|
||||||
{% if site.data.locales[site.lang] %}
|
|
||||||
{% assign lang = site.lang %}
|
|
||||||
{% else %}
|
|
||||||
{% assign lang = 'en' %}
|
|
||||||
{% endif %}
|
|
||||||
@@ -2,10 +2,11 @@
|
|||||||
mermaid-js loader
|
mermaid-js loader
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<script src="https://cdn.jsdelivr.net/npm/mermaid@8/dist/mermaid.min.js"></script>
|
<script src="{{ site.data.assets[origin].mermaid.js | relative_url }}"></script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
$(function() {
|
(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) {
|
||||||
@@ -33,8 +34,8 @@
|
|||||||
|
|
||||||
let initTheme = "default";
|
let initTheme = "default";
|
||||||
|
|
||||||
if ($("html[mode=dark]").length > 0
|
if ($("html[data-mode=dark]").length > 0
|
||||||
|| ($("html[mode]").length == 0
|
|| ($("html[data-mode]").length == 0
|
||||||
&& window.matchMedia("(prefers-color-scheme: dark)").matches)) {
|
&& window.matchMedia("(prefers-color-scheme: dark)").matches)) {
|
||||||
initTheme = "dark";
|
initTheme = "dark";
|
||||||
}
|
}
|
||||||
@@ -43,15 +44,16 @@
|
|||||||
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 () {
|
$("pre").has("code.language-mermaid").each(function () {
|
||||||
let svgCode = $(this).children().html();
|
let svgCode = $(this).children().html();
|
||||||
$(this).addClass("unloaded");
|
$(this).addClass("unloaded");
|
||||||
$(this).after(`<div class=\"mermaid\">${svgCode}</div>`);
|
$(this).after(`<pre class=\"mermaid\">${svgCode}</pre>`);
|
||||||
});
|
});
|
||||||
|
|
||||||
mermaid.initialize(mermaidConf);
|
mermaid.initialize(mermaidConf);
|
||||||
|
|
||||||
window.addEventListener("message", updateMermaid);
|
window.addEventListener("message", updateMermaid);
|
||||||
});
|
})();
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
class ModeToggle {
|
class ModeToggle {
|
||||||
static get MODE_KEY() { return "mode"; }
|
static get MODE_KEY() { return "mode"; }
|
||||||
|
static get MODE_ATTR() { return "data-mode"; }
|
||||||
static get DARK_MODE() { return "dark"; }
|
static get DARK_MODE() { return "dark"; }
|
||||||
static get LIGHT_MODE() { return "light"; }
|
static get LIGHT_MODE() { return "light"; }
|
||||||
static get ID() { return "mode-toggle"; }
|
static get ID() { return "mode-toggle"; }
|
||||||
@@ -70,17 +71,17 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
setDark() {
|
setDark() {
|
||||||
$('html').attr(ModeToggle.MODE_KEY, ModeToggle.DARK_MODE);
|
$('html').attr(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_KEY, ModeToggle.LIGHT_MODE);
|
$('html').attr(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_KEY);
|
$('html').removeAttr(ModeToggle.MODE_ATTR);
|
||||||
sessionStorage.removeItem(ModeToggle.MODE_KEY);
|
sessionStorage.removeItem(ModeToggle.MODE_KEY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
{% comment %}
|
|
||||||
Remove the zero padding from a month/day string
|
|
||||||
{% endcomment %}
|
|
||||||
|
|
||||||
{% assign ret = include.date_str %}
|
|
||||||
{% assign _first_chat = ret | slice: 0 %}
|
|
||||||
|
|
||||||
{% if _first_chat == '0' %}
|
|
||||||
{% assign _last_idx = ret.size | minus: 1 %}
|
|
||||||
{% assign ret = ret | slice: 1, _last_idx %}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{{ ret | replace: ' 0', ' ' }}
|
|
||||||
@@ -5,26 +5,26 @@
|
|||||||
<div class="post-navigation d-flex justify-content-between">
|
<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 href="{{ site.baseurl }}{{ page.previous.url }}" class="btn btn-outline-primary"
|
||||||
prompt="{{ site.data.locales[lang].post.button.previous }}">
|
prompt="{{ site.data.locales[site.lang].post.button.previous }}">
|
||||||
<p>{{ page.previous.title }}</p>
|
<p>{{ page.previous.title }}</p>
|
||||||
</a>
|
</a>
|
||||||
{% else %}
|
{% else %}
|
||||||
<span class="btn btn-outline-primary disabled"
|
<div class="btn btn-outline-primary disabled"
|
||||||
prompt="{{ site.data.locales[lang].post.button.previous }}">
|
prompt="{{ site.data.locales[site.lang].post.button.previous }}">
|
||||||
<p>-</p>
|
<p>-</p>
|
||||||
</span>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if page.next.url %}
|
{% if page.next.url %}
|
||||||
<a href="{{ site.baseurl }}{{page.next.url}}" class="btn btn-outline-primary"
|
<a href="{{ site.baseurl }}{{page.next.url}}" class="btn btn-outline-primary"
|
||||||
prompt="{{ site.data.locales[lang].post.button.next }}">
|
prompt="{{ site.data.locales[site.lang].post.button.next }}">
|
||||||
<p>{{ page.next.title }}</p>
|
<p>{{ page.next.title }}</p>
|
||||||
</a>
|
</a>
|
||||||
{% else %}
|
{% else %}
|
||||||
<span class="btn btn-outline-primary disabled"
|
<div class="btn btn-outline-primary disabled"
|
||||||
prompt="{{ site.data.locales[lang].post.button.next }}">
|
prompt="{{ site.data.locales[site.lang].post.button.next }}">
|
||||||
<p>-</p>
|
<p>-</p>
|
||||||
</span>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
The paginator for post list on HomgPage.
|
The paginator for post list on HomgPage.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<ul class="pagination align-items-center mt-4 mb-0 pl-lg-2">
|
<ul class="pagination align-items-center mt-4 pl-lg-2">
|
||||||
<!-- left arrow -->
|
<!-- left arrow -->
|
||||||
{% if paginator.previous_page %}
|
{% if paginator.previous_page %}
|
||||||
{% assign prev_url = paginator.previous_page_path | relative_url %}
|
{% assign prev_url = paginator.previous_page_path | relative_url %}
|
||||||
@@ -47,7 +47,7 @@
|
|||||||
{% if show %}
|
{% if show %}
|
||||||
<!-- show number -->
|
<!-- show number -->
|
||||||
<li class="page-item {% if i == paginator.page %} active{% endif %}">
|
<li class="page-item {% if i == paginator.page %} active{% endif %}">
|
||||||
<a class="page-link btn-box-shadow" href="{{ site.baseurl }}/{% if i > 1%}page{{ i }}/{% endif %}">{{ i }}</a>
|
<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>
|
||||||
</li>
|
</li>
|
||||||
{% else %}
|
{% else %}
|
||||||
<!-- hide number -->
|
<!-- hide number -->
|
||||||
|
|||||||
@@ -3,10 +3,11 @@
|
|||||||
-->
|
-->
|
||||||
|
|
||||||
<div class="share-wrapper">
|
<div class="share-wrapper">
|
||||||
<span class="share-label text-muted mr-1">{{ site.data.locales[lang].post.share }}</span>
|
<span class="share-label text-muted mr-1">{{ site.data.locales[site.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 url = page.url | absolute_url %}
|
{% assign title = title | uri_escape %}
|
||||||
|
{% assign url = page.url | absolute_url | url_encode %}
|
||||||
|
|
||||||
{% for share in site.data.share.platforms %}
|
{% for share in site.data.share.platforms %}
|
||||||
{% assign link = share.link | replace: 'TITLE', title | replace: 'URL', url %}
|
{% assign link = share.link | replace: 'TITLE', title | replace: 'URL', url %}
|
||||||
@@ -18,8 +19,8 @@
|
|||||||
|
|
||||||
<i id="copy-link" class="fa-fw fas fa-link small"
|
<i id="copy-link" class="fa-fw fas fa-link small"
|
||||||
data-toggle="tooltip" data-placement="top"
|
data-toggle="tooltip" data-placement="top"
|
||||||
title="{{ site.data.locales[lang].post.button.share_link.title }}"
|
title="{{ site.data.locales[site.lang].post.button.share_link.title }}"
|
||||||
title-succeed="{{ site.data.locales[lang].post.button.share_link.succeed }}">
|
data-title-succeed="{{ site.data.locales[site.lang].post.button.share_link.succeed }}">
|
||||||
</i>
|
</i>
|
||||||
|
|
||||||
</span>
|
</span>
|
||||||
|
|||||||
@@ -16,13 +16,13 @@
|
|||||||
{% endunless %}
|
{% endunless %}
|
||||||
|
|
||||||
{% capture read_prompt %}
|
{% capture read_prompt %}
|
||||||
{{- site.data.locales[lang].post.read_time.prompt -}}
|
{{- site.data.locales[site.lang].post.read_time.prompt -}}
|
||||||
{% endcapture %}
|
{% endcapture %}
|
||||||
|
|
||||||
<!-- return element -->
|
<!-- return element -->
|
||||||
<span class="readtime" data-toggle="tooltip" data-placement="bottom"
|
<span class="readtime" data-toggle="tooltip" data-placement="bottom"
|
||||||
title="{{ words }} {{ site.data.locales[lang].post.words }}">
|
title="{{ words }} {{ site.data.locales[site.lang].post.words }}">
|
||||||
<em>{{- read_time -}}{{" "}}{{- site.data.locales[lang].post.read_time.unit -}}</em>
|
<em>{{- read_time -}}{{" "}}{{- site.data.locales[site.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 }}
|
||||||
|
|||||||
@@ -9,10 +9,11 @@
|
|||||||
we suround the markdown table with `<div class="table-wrapper">` and `</div>`
|
we suround the markdown table with `<div class="table-wrapper">` and `</div>`
|
||||||
-->
|
-->
|
||||||
|
|
||||||
{% if _content contains '<table>' %}
|
{% if _content contains '<table' %}
|
||||||
{% assign _content = _content
|
{% assign _content = _content
|
||||||
| replace: '<table>', '<div class="table-wrapper"><table>'
|
| replace: '<table', '<div class="table-wrapper"><table'
|
||||||
| replace: '</table>', '</table></div>'
|
| replace: '</table>', '</table></div>'
|
||||||
|
| replace: '<code><div class="table-wrapper">', '<code>'
|
||||||
| replace: '</table></div></code>', '</table></code>'
|
| replace: '</table></div></code>', '</table></code>'
|
||||||
%}
|
%}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@@ -30,11 +31,15 @@
|
|||||||
%}
|
%}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<!-- Add attribute 'hide-bullet' to the checkbox list -->
|
<!-- Change the icon of checkbox -->
|
||||||
|
{% if _content contains '<input type="checkbox"' %}
|
||||||
{% if _content contains '<li class="task-list-item"><' %}
|
|
||||||
{% 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 %}
|
||||||
|
|
||||||
@@ -46,31 +51,52 @@
|
|||||||
{% assign _img_content = nil %}
|
{% assign _img_content = nil %}
|
||||||
{% 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 _width = nil %}
|
||||||
|
{% assign _height = nil %}
|
||||||
|
{% assign _lqip = nil %}
|
||||||
|
{% assign _class = nil %}
|
||||||
|
|
||||||
{% for _attr in _attrs %}
|
{% for _attr in _attrs %}
|
||||||
{% assign _pair = _attr | split: '=' %}
|
{% unless _attr contains '=' %}
|
||||||
{% if _pair.size < 2 %}
|
|
||||||
{% continue %}
|
{% continue %}
|
||||||
{% endif %}
|
{% endunless %}
|
||||||
|
|
||||||
|
{% assign _pair = _attr | remove: '"' | split: '=' %}
|
||||||
{% capture _key %}{{ _pair | first }}{% endcapture %}
|
{% capture _key %}{{ _pair | first }}{% endcapture %}
|
||||||
{% capture _value %}{{ _pair | last | replace: '"', '' }}{% endcapture %}
|
{% capture _value %}{{ _pair | last }}{% endcapture %}
|
||||||
|
|
||||||
{% case _key %}
|
{% case _key %}
|
||||||
{% when 'width' %}
|
{% when 'width' %}
|
||||||
@@ -79,64 +105,91 @@
|
|||||||
{% assign _height = _value %}
|
{% assign _height = _value %}
|
||||||
{% when 'src' %}
|
{% when 'src' %}
|
||||||
{% assign _src = _value %}
|
{% assign _src = _value %}
|
||||||
|
{% when 'lqip' %}
|
||||||
|
{% assign _lqip = _value %}
|
||||||
|
{% when 'class' %}
|
||||||
|
{% assign _class = _value %}
|
||||||
{% endcase %}
|
{% endcase %}
|
||||||
|
|
||||||
{% if _width and _height and _src %}
|
|
||||||
{% break %}
|
|
||||||
{% endif %}
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
{% if _src %}
|
<!-- take out classes -->
|
||||||
{% unless _src contains '://' %}
|
{% if _class %}
|
||||||
|
{% capture _old_class %}class="{{ _class }}"{% endcapture %}
|
||||||
<!-- Add CDN URL -->
|
{% assign _left = _left | remove: _old_class %}
|
||||||
{% if site.img_cdn %}
|
|
||||||
{% assign _src_prefix = site.img_cdn %}
|
|
||||||
{% else %}
|
|
||||||
{% assign _src_prefix = site.baseurl %}
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<!-- Add image path -->
|
{% assign _final_src = nil %}
|
||||||
{% if page.img_path %}
|
|
||||||
{% assign _path = page.img_path %}
|
|
||||||
{% assign last_char = _path | slice: -1 %}
|
|
||||||
|
|
||||||
{% unless last_char == '/' %}
|
{% unless _src contains '//' %}
|
||||||
{% assign _path = _path | append: '/' %}
|
{% assign _final_src = _path_prefix | append: _src %}
|
||||||
|
{% capture _src_from %}"{{ _src }}"{% endcapture %}
|
||||||
|
{% capture _src_to %}"{{ _final_src }}"{% endcapture %}
|
||||||
|
{% assign _left = _left | replace: _src_from, _src_to %}
|
||||||
{% endunless %}
|
{% endunless %}
|
||||||
|
|
||||||
{% assign _src_prefix = _src_prefix | append: _path %}
|
{% if _lqip %}
|
||||||
|
{% unless _lqip contains ':' %}
|
||||||
|
{% assign _final_lqip = _path_prefix | append: _lqip %}
|
||||||
|
{% capture _lqip_from %}"{{ _lqip }}"{% endcapture %}
|
||||||
|
{% capture _lqip_to %}"{{ _final_lqip }}"{% endcapture %}
|
||||||
|
{% assign _left = _left | replace: _lqip_from, _lqip_to %}
|
||||||
|
{% endunless %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% assign _final_src = _src_prefix | append: _src %}
|
<!-- lazy-load images <https://github.com/aFarkas/lazysizes#readme> -->
|
||||||
{% assign _left = _left | replace: _src, _final_src %}
|
|
||||||
|
|
||||||
{% endunless %}
|
|
||||||
|
|
||||||
<!-- lazy-load images <https://github.com/ApoorvSaxena/lozad.js#usage> -->
|
|
||||||
|
|
||||||
{% assign _left = _left | replace: 'src=', 'data-src=' %}
|
{% assign _left = _left | replace: 'src=', 'data-src=' %}
|
||||||
|
{% if _left contains 'class=' %}
|
||||||
|
{% assign _left = _left | replace: 'class="', 'class="lazyload '%}
|
||||||
|
{% else %}
|
||||||
|
{% assign _left = _left | append: ' class="lazyload"' %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<!-- Add SVG placehoder to prevent layout reflow -->
|
<!-- add image placeholder -->
|
||||||
|
{% if _lqip %}
|
||||||
|
{% assign _left = _left | replace: ' lqip=', ' data-lqip="true" src=' %}
|
||||||
|
{% else %}
|
||||||
{% if _width and _height %}
|
{% if _width and _height %}
|
||||||
|
<!-- add SVG placehoder -->
|
||||||
{%- capture _svg -%}
|
{%- capture _svg -%}
|
||||||
src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 {{ _width }} {{ _height }}'%3E%3C/svg%3E"
|
src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 {{ _width }} {{ _height }}'%3E%3C/svg%3E"
|
||||||
{%- endcapture -%}
|
{%- endcapture -%}
|
||||||
|
|
||||||
{% assign _left = _svg | append: ' ' | append: _left %}
|
{% assign _left = _svg | append: ' ' | append: _left %}
|
||||||
|
{% assign _class = _class | append: ' shimmer' %}
|
||||||
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<!-- Bypass the HTML-proofer test -->
|
<!-- Bypass the HTML-proofer test -->
|
||||||
{% assign _left = _left | append: ' data-proofer-ignore' %}
|
{% assign _left = _left | append: ' data-proofer-ignore' %}
|
||||||
|
|
||||||
|
<!-- 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 -->
|
||||||
|
{%- capture _wrapper_start -%}
|
||||||
|
<a href="{{ _final_src | default: _src }}" class="popup img-link {{ _class }}">
|
||||||
|
{%- endcapture -%}
|
||||||
|
{% assign _img_content = _img_content | append: _wrapper_start %}
|
||||||
|
{% assign _right = _right | prepend: '></a' %}
|
||||||
|
{% 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 %}
|
||||||
|
|
||||||
|
{% if _img_content %}
|
||||||
{% assign _content = _img_content %}
|
{% assign _content = _img_content %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
@@ -165,14 +218,14 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% capture _label %}
|
{% capture _label %}
|
||||||
<span 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: _snippet
|
||||||
| append: '<div class="code-header">'
|
| append: '<div class="code-header">'
|
||||||
| append: _label
|
| append: _label
|
||||||
| append: '<button aria-label="copy" title-succeed="'
|
| append: '<button aria-label="copy" data-title-succeed="'
|
||||||
| append: site.data.locales[lang].post.button.copy_code.succeed
|
| append: site.data.locales[site.lang].post.button.copy_code.succeed
|
||||||
| append: '"><i class="far fa-clipboard"></i></button></div>'
|
| append: '"><i class="far fa-clipboard"></i></button></div>'
|
||||||
| append: '<div class="highlight"><code>'
|
| append: '<div class="highlight"><code>'
|
||||||
%}
|
%}
|
||||||
@@ -205,15 +258,14 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% assign id = snippet | split: '"' | first %}
|
{% assign id = snippet | split: '"' | first %}
|
||||||
{% capture anchor %}<a href="#{{ id }}" class="anchor"><i class="fas fa-hashtag"></i></a>{% endcapture %}
|
{% capture anchor %}<a href="#{{ id }}" class="anchor text-muted"><i class="fas fa-hashtag"></i></a>{% endcapture %}
|
||||||
|
|
||||||
{% assign left = snippet | split: mark_end | first %}
|
{% assign left = snippet | split: mark_end | first %}
|
||||||
{% assign _start_index = left | size %}
|
{% assign right = snippet | slice: left.size, snippet.size %}
|
||||||
{% assign _end_index = snippet | size | minus: 1 %}
|
{% assign left = left | replace_first: '">', '"><span class="mr-2">' | append: '</span>' %}
|
||||||
{% assign right = snippet | slice: _start_index, _end_index %}
|
|
||||||
|
|
||||||
{% assign _new_content = _new_content | append: mark_start
|
{% assign _new_content = _new_content | append: mark_start
|
||||||
| append: left | append: anchor | append: mark_end | append: right
|
| append: left | append: anchor | append: right
|
||||||
%}
|
%}
|
||||||
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|||||||
@@ -60,7 +60,6 @@
|
|||||||
{% assign less = TOTAL_SIZE | minus: index_list.size %}
|
{% assign less = TOTAL_SIZE | minus: index_list.size %}
|
||||||
|
|
||||||
{% if less > 0 %}
|
{% if less > 0 %}
|
||||||
|
|
||||||
{% for i in (0..last_index) %}
|
{% for i in (0..last_index) %}
|
||||||
{% assign post = site.posts[i] %}
|
{% assign post = site.posts[i] %}
|
||||||
{% if post.url != page.url %}
|
{% if post.url != page.url %}
|
||||||
@@ -74,14 +73,12 @@
|
|||||||
{% endunless %}
|
{% endunless %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
{% if index_list.size > 0 %}
|
{% if index_list.size > 0 %}
|
||||||
<div id="related-posts" class="mt-5 mb-2 mb-sm-4">
|
<div id="related-posts" class="mb-2 mb-sm-4">
|
||||||
<h3 class="pt-2 mt-1 mb-4 ml-1"
|
<h3 class="pt-2 mb-4 ml-1"
|
||||||
data-toc-skip>{{ site.data.locales[lang].post.relate_posts }}</h3>
|
data-toc-skip>{{ site.data.locales[site.lang].post.relate_posts }}</h3>
|
||||||
<div class="card-deck mb-4">
|
<div class="card-deck mb-4">
|
||||||
{% for entry in index_list %}
|
{% for entry in index_list %}
|
||||||
{% assign index = entry | plus: 0 %}
|
{% assign index = entry | plus: 0 %}
|
||||||
@@ -89,7 +86,7 @@
|
|||||||
<div class="card">
|
<div class="card">
|
||||||
<a href="{{ post.url | relative_url }}">
|
<a href="{{ post.url | relative_url }}">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
{% include timeago.html date=post.date class="small" %}
|
{% include datetime.html date=post.date class="small" %}
|
||||||
<h3 class="pt-0 mt-1 mb-3" data-toc-skip>{{ post.title }}</h3>
|
<h3 class="pt-0 mt-1 mb-3" data-toc-skip>{{ post.title }}</h3>
|
||||||
<div class="text-muted small">
|
<div class="text-muted small">
|
||||||
<p>
|
<p>
|
||||||
|
|||||||
@@ -14,9 +14,9 @@
|
|||||||
</div>
|
</div>
|
||||||
{% 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[site.lang].search.no_results }}</p>{% endcapture %}
|
||||||
|
|
||||||
<script src="https://cdn.jsdelivr.net/npm/simple-jekyll-search@1.10.0/dest/simple-jekyll-search.min.js"></script>
|
<script src="{{ site.data.assets[origin].search.js | relative_url }}"></script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
SimpleJekyllSearch({
|
SimpleJekyllSearch({
|
||||||
|
|||||||
@@ -2,26 +2,26 @@
|
|||||||
The Side Bar
|
The Side Bar
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<div id="sidebar" class="d-flex flex-column align-items-end" lang="{{lang}}">
|
<div id="sidebar" class="d-flex flex-column align-items-end">
|
||||||
<div class="profile-wrapper text-center">
|
<div class="profile-wrapper text-center">
|
||||||
<div id="avatar">
|
<div id="avatar">
|
||||||
<a href="{{ '/' | relative_url }}" alt="avatar" class="mx-auto">
|
<a href="{{ '/' | relative_url }}" class="mx-auto">
|
||||||
{% if site.avatar != '' 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 != '' and site.img_cdn -%}
|
{% elsif site.img_cdn != empty and site.img_cdn %}
|
||||||
{{ site.avatar | prepend: site.img_cdn }}
|
{{ site.avatar | prepend: site.img_cdn }}
|
||||||
{%- else -%}
|
{% else %}
|
||||||
{{ site.avatar | relative_url }}
|
{{ site.avatar | relative_url }}
|
||||||
{%- endif -%}
|
{% endif %}
|
||||||
{% endcapture %}
|
{% endcapture %}
|
||||||
<img src="{{ avatar_url }}" alt="avatar" onerror="this.style.display='none'">
|
<img src="{{ avatar_url | strip }}" alt="avatar" onerror="this.style.display='none'">
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="site-title mt-3">
|
<div class="site-title">
|
||||||
<a href="{{ '/' | relative_url }}">{{ site.title }}</a>
|
<a href="{{ '/' | relative_url }}">{{ site.title }}</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="site-subtitle font-italic">{{ site.tagline }}</div>
|
<div class="site-subtitle font-italic">{{ site.tagline }}</div>
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
<li class="nav-item{% if page.layout == 'home' %}{{ " active" }}{% endif %}">
|
<li class="nav-item{% if page.layout == 'home' %}{{ " active" }}{% endif %}">
|
||||||
<a href="{{ '/' | relative_url }}" class="nav-link">
|
<a href="{{ '/' | relative_url }}" class="nav-link">
|
||||||
<i class="fa-fw fas fa-home ml-xl-3 mr-xl-3 unloaded"></i>
|
<i class="fa-fw fas fa-home ml-xl-3 mr-xl-3 unloaded"></i>
|
||||||
<span>{{ site.data.locales[lang].tabs.home | upcase }}</span>
|
<span>{{ site.data.locales[site.lang].tabs.home | upcase }}</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<!-- the real tabs -->
|
<!-- the real tabs -->
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
<i class="fa-fw {{ tab.icon }} ml-xl-3 mr-xl-3 unloaded"></i>
|
<i class="fa-fw {{ tab.icon }} ml-xl-3 mr-xl-3 unloaded"></i>
|
||||||
{% capture tab_name %}{{ tab.url | split: '/' }}{% endcapture %}
|
{% capture tab_name %}{{ tab.url | split: '/' }}{% endcapture %}
|
||||||
|
|
||||||
<span>{{ site.data.locales[lang].tabs.[tab_name] | default: tab.title | upcase }}</span>
|
<span>{{ site.data.locales[site.lang].tabs.[tab_name] | default: tab.title | upcase }}</span>
|
||||||
</a>
|
</a>
|
||||||
</li> <!-- .nav-item -->
|
</li> <!-- .nav-item -->
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
@@ -81,7 +81,17 @@
|
|||||||
|
|
||||||
{% if url %}
|
{% if url %}
|
||||||
<a href="{{ url }}" aria-label="{{ entry.type }}"
|
<a href="{{ url }}" aria-label="{{ entry.type }}"
|
||||||
{% unless entry.noblank %}target="_blank" rel="noopener"{% endunless %}>
|
{% assign link_types = nil %}
|
||||||
|
{% unless entry.noblank %}
|
||||||
|
{% assign link_types = link_types | append: " noopener" %}
|
||||||
|
target="_blank"
|
||||||
|
{% endunless %}
|
||||||
|
|
||||||
|
{% if entry.type == 'mastodon' %}
|
||||||
|
{% assign link_types = link_types | append: " me" %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if link_types %}rel="{{ link_types | lstrip }}"{% endif %}>
|
||||||
<i class="{{ entry.icon }}"></i>
|
<i class="{{ entry.icon }}"></i>
|
||||||
</a>
|
</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@@ -1,26 +0,0 @@
|
|||||||
<!--
|
|
||||||
Date format snippet
|
|
||||||
See: ${JS_ROOT}/utils/timeago.js
|
|
||||||
-->
|
|
||||||
|
|
||||||
{% assign tooltip_df = site.data.locales[lang].date_format.tooltip %}
|
|
||||||
{% assign post_long_df = site.data.locales[lang].date_format.post.long %}
|
|
||||||
{% assign post_short_df = site.data.locales[lang].date_format.post.short %}
|
|
||||||
|
|
||||||
<em class="timeago{% if include.class %} {{ include.class }}{% endif %}"
|
|
||||||
date="{{ include.date }}"
|
|
||||||
{% if include.tooltip %}
|
|
||||||
data-toggle="tooltip"
|
|
||||||
data-placement="bottom"
|
|
||||||
title="{{ include.date | date: tooltip_df }}"
|
|
||||||
{% endif %}>
|
|
||||||
|
|
||||||
{%- assign this_year = site.time | date: "%Y" -%}
|
|
||||||
{%- assign post_year = include.date | date: "%Y" -%}
|
|
||||||
|
|
||||||
{%- if post_year == this_year -%}
|
|
||||||
{{ include.date | date: post_short_df }}
|
|
||||||
{%- else -%}
|
|
||||||
{{ include.date | date: post_long_df }}
|
|
||||||
{%- endif -%}
|
|
||||||
</em>
|
|
||||||
@@ -7,10 +7,10 @@
|
|||||||
|
|
||||||
{% if enable_toc %}
|
{% if enable_toc %}
|
||||||
<!-- BS-toc.js will be loaded at medium priority -->
|
<!-- BS-toc.js will be loaded at medium priority -->
|
||||||
<script src="https://cdn.jsdelivr.net/gh/afeld/bootstrap-toc@1.0.1/dist/bootstrap-toc.min.js"></script>
|
<script src="{{ site.data.assets[origin].bootstrap-toc.js | relative_url }}"></script>
|
||||||
|
|
||||||
<div id="toc-wrapper" class="pl-0 pr-4 mb-5">
|
<div id="toc-wrapper" class="pl-0 pr-4 mb-5">
|
||||||
<div class="panel-heading pl-3 pt-2 mb-2">{{- site.data.locales[lang].panel.toc -}}</div>
|
<div class="panel-heading pl-3 pt-2 mb-2">{{- site.data.locales[site.lang].panel.toc -}}</div>
|
||||||
<nav id="toc" data-toggle="toc"></nav>
|
<nav id="toc" data-toggle="toc"></nav>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@@ -2,15 +2,15 @@
|
|||||||
The Top Bar
|
The Top Bar
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<div id="topbar-wrapper" class="row justify-content-center topbar-down">
|
<div id="topbar-wrapper">
|
||||||
<div id="topbar" class="col-11 d-flex h-100 align-items-center justify-content-between">
|
<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">
|
||||||
<span id="breadcrumb">
|
<span id="breadcrumb">
|
||||||
|
|
||||||
{% assign paths = page.url | split: '/' %}
|
{% assign paths = page.url | split: '/' %}
|
||||||
|
|
||||||
{% if paths.size == 0 or page.layout == 'home' %}
|
{% if paths.size == 0 or page.layout == 'home' %}
|
||||||
<!-- index page -->
|
<!-- index page -->
|
||||||
<span>{{ site.data.locales[lang].tabs.home | capitalize }}</span>
|
<span>{{ site.data.locales[site.lang].tabs.home | capitalize }}</span>
|
||||||
|
|
||||||
{% else %}
|
{% else %}
|
||||||
|
|
||||||
@@ -19,14 +19,14 @@
|
|||||||
{% if forloop.first %}
|
{% if forloop.first %}
|
||||||
<span>
|
<span>
|
||||||
<a href="{{ '/' | relative_url }}">
|
<a href="{{ '/' | relative_url }}">
|
||||||
{{ site.data.locales[lang].tabs.home | capitalize }}
|
{{ site.data.locales[site.lang].tabs.home | capitalize }}
|
||||||
</a>
|
</a>
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
{% elsif forloop.last %}
|
{% elsif forloop.last %}
|
||||||
|
|
||||||
{% if page.collection == 'tabs' %}
|
{% if page.collection == 'tabs' %}
|
||||||
<span>{{ site.data.locales[lang].tabs[item] | default: page.title }}</span>
|
<span>{{ site.data.locales[site.lang].tabs[item] | default: page.title }}</span>
|
||||||
{% else %}
|
{% else %}
|
||||||
<span>{{ page.title }}</span>
|
<span>{{ page.title }}</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
{% elsif page.layout == 'category' or page.layout == 'tag' %}
|
{% elsif page.layout == 'category' or page.layout == 'tag' %}
|
||||||
<span>
|
<span>
|
||||||
<a href="{{ item | relative_url }}">
|
<a href="{{ item | relative_url }}">
|
||||||
{{ site.data.locales[lang].tabs[item] | default: page.title }}
|
{{ site.data.locales[site.lang].tabs[item] | default: page.title }}
|
||||||
</a>
|
</a>
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@@ -49,12 +49,12 @@
|
|||||||
|
|
||||||
<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[site.lang].title | default: site.title -}}
|
||||||
{% elsif page.collection == 'tabs' or page.dynamic_title %}
|
{% 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[site.lang].tabs[tab_key] | default: page.title -}}
|
||||||
{% else %}
|
{% else %}
|
||||||
{{- site.data.locales[lang].layout[page.layout] | default: page.layout | capitalize -}}
|
{{- site.data.locales[site.lang].layout[page.layout] | default: page.layout | capitalize -}}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -62,10 +62,9 @@
|
|||||||
<span id="search-wrapper" class="align-items-center">
|
<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"
|
<input class="form-control" id="search-input" type="search"
|
||||||
aria-label="search" autocomplete="off" placeholder="{{ site.data.locales[lang].search.hint | capitalize }}...">
|
aria-label="search" autocomplete="off" placeholder="{{ site.data.locales[site.lang].search.hint | capitalize }}...">
|
||||||
<i class="fa fa-times-circle fa-fw" id="search-cleaner"></i>
|
|
||||||
</span>
|
</span>
|
||||||
<span id="search-cancel" >{{ site.data.locales[lang].search.cancel }}</span>
|
<span id="search-cancel" >{{ site.data.locales[site.lang].search.cancel }}</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -37,7 +37,7 @@
|
|||||||
|
|
||||||
{% if trending_tags.size > 0 %}
|
{% if trending_tags.size > 0 %}
|
||||||
<div id="access-tags">
|
<div id="access-tags">
|
||||||
<div class="panel-heading">{{- site.data.locales[lang].panel.trending_tags -}}</div>
|
<div class="panel-heading">{{- site.data.locales[site.lang].panel.trending_tags -}}</div>
|
||||||
<div class="d-flex flex-wrap mt-3 mb-1 mr-3">
|
<div class="d-flex flex-wrap mt-3 mb-1 mr-3">
|
||||||
|
|
||||||
{% for tag_name in trending_tags %}
|
{% for tag_name in trending_tags %}
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
{% if update_list.size > 0 %}
|
{% if update_list.size > 0 %}
|
||||||
|
|
||||||
<div id="access-lastmod" class="post">
|
<div id="access-lastmod" class="post">
|
||||||
<div class="panel-heading">{{- site.data.locales[lang].panel.lastmod -}}</div>
|
<div class="panel-heading">{{- site.data.locales[site.lang].panel.lastmod -}}</div>
|
||||||
<ul class="post-content pl-0 pb-1 ml-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 %}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/**
|
||||||
Reference: https://bootsnipp.com/snippets/featured/link-to-top-page
|
* Reference: https://bootsnipp.com/snippets/featured/link-to-top-page
|
||||||
*/
|
*/
|
||||||
$(function() {
|
$(function() {
|
||||||
$(window).scroll(() => {
|
$(window).scroll(() => {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/*
|
/**
|
||||||
* Listener for theme mode toggle
|
* Listener for theme mode toggle
|
||||||
*/
|
*/
|
||||||
$(function () {
|
$(function () {
|
||||||
|
|||||||
38
_javascript/commons/scroll-helper.js
Normal file
38
_javascript/commons/scroll-helper.js
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
/**
|
||||||
|
* 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,14 +1,11 @@
|
|||||||
/*
|
/**
|
||||||
* This script make #search-result-wrapper switch to unloaded or shown automatically.
|
* This script make #search-result-wrapper switch to unloaded or shown automatically.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$(function () {
|
$(function () {
|
||||||
|
|
||||||
const btnSbTrigger = $("#sidebar-trigger");
|
const btnSbTrigger = $("#sidebar-trigger");
|
||||||
const btnSearchTrigger = $("#search-trigger");
|
const btnSearchTrigger = $("#search-trigger");
|
||||||
const btnCancel = $("#search-cancel");
|
const btnCancel = $("#search-cancel");
|
||||||
const btnClear = $("#search-cleaner");
|
|
||||||
|
|
||||||
const main = $("#main");
|
const main = $("#main");
|
||||||
const topbarTitle = $("#topbar-title");
|
const topbarTitle = $("#topbar-title");
|
||||||
const searchWrapper = $("#search-wrapper");
|
const searchWrapper = $("#search-wrapper");
|
||||||
@@ -33,8 +30,7 @@ $(function() {
|
|||||||
};
|
};
|
||||||
}());
|
}());
|
||||||
|
|
||||||
|
/*--- Actions in mobile screens (Sidebar hidden) ---*/
|
||||||
/*--- Actions in small screens (Sidebar unloaded) ---*/
|
|
||||||
|
|
||||||
const mobileSearchBar = (function () {
|
const mobileSearchBar = (function () {
|
||||||
return {
|
return {
|
||||||
@@ -75,7 +71,6 @@ $(function() {
|
|||||||
hints.removeClass("unloaded");
|
hints.removeClass("unloaded");
|
||||||
}
|
}
|
||||||
resultWrapper.addClass("unloaded");
|
resultWrapper.addClass("unloaded");
|
||||||
btnClear.removeClass("visible");
|
|
||||||
main.removeClass("unloaded");
|
main.removeClass("unloaded");
|
||||||
|
|
||||||
// now the release method must be called after $(#main) display
|
// now the release method must be called after $(#main) display
|
||||||
@@ -92,7 +87,6 @@ $(function() {
|
|||||||
|
|
||||||
}());
|
}());
|
||||||
|
|
||||||
|
|
||||||
function isMobileView() {
|
function isMobileView() {
|
||||||
return btnCancel.hasClass("loaded");
|
return btnCancel.hasClass("loaded");
|
||||||
}
|
}
|
||||||
@@ -116,38 +110,20 @@ $(function() {
|
|||||||
searchWrapper.removeClass("input-focus");
|
searchWrapper.removeClass("input-focus");
|
||||||
});
|
});
|
||||||
|
|
||||||
input.on("keyup", function(e) {
|
input.on("input", () => {
|
||||||
if (e.keyCode === 8 && input.val() === "") {
|
if (input.val() === "") {
|
||||||
if (!isMobileView()) {
|
if (isMobileView()) {
|
||||||
resultSwitch.off();
|
|
||||||
} else {
|
|
||||||
hints.removeClass("unloaded");
|
hints.removeClass("unloaded");
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if (input.val() !== "") {
|
resultSwitch.off();
|
||||||
resultSwitch.on();
|
|
||||||
|
|
||||||
if (!btnClear.hasClass("visible")) {
|
|
||||||
btnClear.addClass("visible");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
resultSwitch.on();
|
||||||
if (isMobileView()) {
|
if (isMobileView()) {
|
||||||
hints.addClass("unloaded");
|
hints.addClass("unloaded");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
btnClear.on("click", function() {
|
|
||||||
input.val("");
|
|
||||||
if (isMobileView()) {
|
|
||||||
hints.removeClass("unloaded");
|
|
||||||
results.empty();
|
|
||||||
} else {
|
|
||||||
resultSwitch.off();
|
|
||||||
}
|
|
||||||
input.focus();
|
|
||||||
btnClear.removeClass("visible");
|
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
$(function () {
|
$(function () {
|
||||||
|
|
||||||
const sidebarUtil = (function () {
|
const sidebarUtil = (function () {
|
||||||
const ATTR_DISPLAY = "sidebar-display";
|
const ATTR_DISPLAY = "sidebar-display";
|
||||||
let isExpanded = false;
|
let isExpanded = false;
|
||||||
@@ -26,5 +25,4 @@ $(function() {
|
|||||||
$("#sidebar-trigger").click(sidebarUtil.toggle);
|
$("#sidebar-trigger").click(sidebarUtil.toggle);
|
||||||
|
|
||||||
$("#mask").click(sidebarUtil.toggle);
|
$("#mask").click(sidebarUtil.toggle);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,70 +0,0 @@
|
|||||||
/*
|
|
||||||
* Hide Header on scroll down
|
|
||||||
*/
|
|
||||||
|
|
||||||
$(function() {
|
|
||||||
const $topbarWrapper = $("#topbar-wrapper");
|
|
||||||
const $topbarTitle = $("#topbar-title");
|
|
||||||
const $panel = $("#panel-wrapper");
|
|
||||||
const $searchInput = $("#search-input");
|
|
||||||
|
|
||||||
const CLASS_TOPBAR_UP = "topbar-up";
|
|
||||||
const CLASS_TOPBAR_DOWN = "topbar-down";
|
|
||||||
const ATTR_TOC_SCROLLING_UP = "toc-scrolling-up"; // topbar locked
|
|
||||||
|
|
||||||
let didScroll;
|
|
||||||
let lastScrollTop = 0;
|
|
||||||
|
|
||||||
const delta = $topbarWrapper.outerHeight();
|
|
||||||
const topbarHeight = $topbarWrapper.outerHeight();
|
|
||||||
|
|
||||||
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
|
|
||||||
if (st > topbarHeight) {
|
|
||||||
$topbarWrapper.removeClass(CLASS_TOPBAR_DOWN).addClass(CLASS_TOPBAR_UP);
|
|
||||||
$panel.removeClass(CLASS_TOPBAR_DOWN);
|
|
||||||
|
|
||||||
if ($searchInput.is(":focus")) {
|
|
||||||
$searchInput.blur(); /* remove focus */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {// Scroll up
|
|
||||||
// did not reach the bottom of the document, i.e., still have space to scroll up
|
|
||||||
if (st + $(window).height() < $(document).height()) {
|
|
||||||
let tocScrollingUp = $topbarWrapper.attr(ATTR_TOC_SCROLLING_UP);
|
|
||||||
if (typeof tocScrollingUp !== "undefined") {
|
|
||||||
if (tocScrollingUp === "false") {
|
|
||||||
$topbarWrapper.removeAttr(ATTR_TOC_SCROLLING_UP);
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
$topbarWrapper.removeClass(CLASS_TOPBAR_UP).addClass(CLASS_TOPBAR_DOWN);
|
|
||||||
$panel.addClass(CLASS_TOPBAR_DOWN);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
lastScrollTop = st;
|
|
||||||
}
|
|
||||||
|
|
||||||
$(window).scroll(function(event) {
|
|
||||||
if ($topbarTitle.is(":hidden")) {
|
|
||||||
didScroll = true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
setInterval(function() {
|
|
||||||
if (didScroll) {
|
|
||||||
hasScrolled();
|
|
||||||
didScroll = false;
|
|
||||||
}
|
|
||||||
}, 250);
|
|
||||||
|
|
||||||
});
|
|
||||||
89
_javascript/commons/topbar-switcher.js
Normal file
89
_javascript/commons/topbar-switcher.js
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
/**
|
||||||
|
* 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);
|
||||||
|
});
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
/*
|
/**
|
||||||
* Top bar title auto change while scrolling up/down in mobile screens.
|
* Top bar title auto change while scrolling up/down in mobile screens.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -14,17 +14,22 @@ $(function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const defaultTitleText = $topbarTitle.text().trim();
|
const defaultTitleText = $topbarTitle.text().trim();
|
||||||
let titleText = $pageTitle.text().trim();
|
let pageTitleText = $pageTitle.text().trim();
|
||||||
let hasScrolled = false;
|
let hasScrolled = false;
|
||||||
let lastScrollTop = 0;
|
let lastScrollTop = 0;
|
||||||
|
|
||||||
if ($("#page-category").length || $("#page-tag").length) {
|
if ($("#page-category").length || $("#page-tag").length) {
|
||||||
/* The title in Category or Tag page will be "<title> <count_of_posts>" */
|
/* The title in Category or Tag page will be "<title> <count_of_posts>" */
|
||||||
if (/\s/.test(titleText)) {
|
if (/\s/.test(pageTitleText)) {
|
||||||
titleText = titleText.replace(/[0-9]/g, "").trim();
|
pageTitleText = pageTitleText.replace(/[0-9]/g, "").trim();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// When the page is scrolled down and then refreshed, the topbar title needs to be initialized
|
||||||
|
if ($pageTitle.offset().top < $(window).scrollTop()) {
|
||||||
|
$topbarTitle.text(pageTitleText);
|
||||||
|
}
|
||||||
|
|
||||||
let options = {
|
let options = {
|
||||||
rootMargin: '-48px 0px 0px 0px', // 48px equals to the topbar height (3rem)
|
rootMargin: '-48px 0px 0px 0px', // 48px equals to the topbar height (3rem)
|
||||||
threshold: [0, 1]
|
threshold: [0, 1]
|
||||||
@@ -43,7 +48,7 @@ $(function() {
|
|||||||
|
|
||||||
if (isScrollDown) {
|
if (isScrollDown) {
|
||||||
if (heading.intersectionRatio === 0) {
|
if (heading.intersectionRatio === 0) {
|
||||||
$topbarTitle.text(titleText);
|
$topbarTitle.text(pageTitleText);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (heading.intersectionRatio === 1) {
|
if (heading.intersectionRatio === 1) {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*!
|
/*!
|
||||||
* Chirpy v5.0.2 (https://github.com/cotes2020/jekyll-theme-chirpy/)
|
* Chirpy v5.5.0 (https://github.com/cotes2020/jekyll-theme-chirpy/)
|
||||||
* © 2019 Cotes Chung
|
* © 2019 Cotes Chung
|
||||||
* MIT Licensed
|
* MIT Licensed
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/*
|
/**
|
||||||
* Tab 'Categories' expand/close effect.
|
* Tab 'Categories' expand/close effect.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +0,0 @@
|
|||||||
/*
|
|
||||||
* Create a more beautiful checkbox
|
|
||||||
*/
|
|
||||||
|
|
||||||
$(function() {
|
|
||||||
/* hide browser default checkbox */
|
|
||||||
$("input[type=checkbox]").addClass("unloaded");
|
|
||||||
/* create checked checkbox */
|
|
||||||
$("input[type=checkbox][checked]").before("<i class=\"fas fa-check-circle checked\"></i>");
|
|
||||||
/* create normal checkbox */
|
|
||||||
$("input[type=checkbox]:not([checked])").before("<i class=\"far fa-circle\"></i>");
|
|
||||||
});
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
/*
|
/**
|
||||||
* Clipboard functions
|
* Clipboard functions
|
||||||
*
|
*
|
||||||
* Dependencies:
|
* Dependencies:
|
||||||
@@ -10,6 +10,8 @@ $(function() {
|
|||||||
const btnSelector = '.code-header>button';
|
const btnSelector = '.code-header>button';
|
||||||
const ICON_SUCCESS = 'fas fa-check';
|
const ICON_SUCCESS = 'fas fa-check';
|
||||||
const ATTR_TIMEOUT = 'timeout';
|
const ATTR_TIMEOUT = 'timeout';
|
||||||
|
const ATTR_TITLE_SUCCEED = 'data-title-succeed';
|
||||||
|
const ATTR_TITLE_ORIGIN = 'data-original-title';
|
||||||
const TIMEOUT = 2000; // in milliseconds
|
const TIMEOUT = 2000; // in milliseconds
|
||||||
|
|
||||||
function isLocked(node) {
|
function isLocked(node) {
|
||||||
@@ -53,12 +55,12 @@ $(function() {
|
|||||||
const ICON_DEFAULT = getIcon(btnSelector);
|
const ICON_DEFAULT = getIcon(btnSelector);
|
||||||
|
|
||||||
function showTooltip(btn) {
|
function showTooltip(btn) {
|
||||||
const succeedTitle = $(btn).attr('title-succeed');
|
const succeedTitle = $(btn).attr(ATTR_TITLE_SUCCEED);
|
||||||
$(btn).attr('data-original-title', succeedTitle).tooltip('show');
|
$(btn).attr(ATTR_TITLE_ORIGIN, succeedTitle).tooltip('show');
|
||||||
}
|
}
|
||||||
|
|
||||||
function hideTooltip(btn) {
|
function hideTooltip(btn) {
|
||||||
$(btn).tooltip('hide').removeAttr('data-original-title');
|
$(btn).tooltip('hide').removeAttr(ATTR_TITLE_ORIGIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
function setSuccessIcon(btn) {
|
function setSuccessIcon(btn) {
|
||||||
@@ -115,14 +117,14 @@ $(function() {
|
|||||||
|
|
||||||
// Switch tooltip title
|
// Switch tooltip title
|
||||||
|
|
||||||
const defaultTitle = target.attr('data-original-title');
|
const defaultTitle = target.attr(ATTR_TITLE_ORIGIN);
|
||||||
const succeedTitle = target.attr('title-succeed');
|
const succeedTitle = target.attr(ATTR_TITLE_SUCCEED);
|
||||||
|
|
||||||
target.attr('data-original-title', succeedTitle).tooltip('show');
|
target.attr(ATTR_TITLE_ORIGIN, succeedTitle).tooltip('show');
|
||||||
lock(target);
|
lock(target);
|
||||||
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
target.attr('data-original-title', defaultTitle);
|
target.attr(ATTR_TITLE_ORIGIN, defaultTitle);
|
||||||
unlock(target);
|
unlock(target);
|
||||||
}, TIMEOUT);
|
}, TIMEOUT);
|
||||||
|
|
||||||
|
|||||||
@@ -1,34 +1,13 @@
|
|||||||
/**
|
/**
|
||||||
Lazy load images (https://github.com/ApoorvSaxena/lozad.js)
|
* Set up image stuff
|
||||||
and popup when clicked (https://github.com/dimsemenov/Magnific-Popup)
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$(function() {
|
(function() {
|
||||||
|
if ($('#core-wrapper img[data-src]') <= 0) {
|
||||||
const IMG_SCOPE = '#main > div.row:first-child > div:first-child';
|
|
||||||
|
|
||||||
if ($(`${IMG_SCOPE} img`).length <= 0 ) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* lazy loading */
|
/* See: <https://github.com/dimsemenov/Magnific-Popup> */
|
||||||
|
|
||||||
const imgList = document.querySelectorAll(`${IMG_SCOPE} img[data-src]`);
|
|
||||||
const observer = lozad(imgList);
|
|
||||||
observer.observe();
|
|
||||||
|
|
||||||
/* popup */
|
|
||||||
|
|
||||||
$(`${IMG_SCOPE} p > img[data-src],${IMG_SCOPE} img[data-src].preview-img`).each(
|
|
||||||
function() {
|
|
||||||
let nextTag = $(this).next();
|
|
||||||
const title = nextTag.prop('tagName') === 'EM' ? nextTag.text() : '';
|
|
||||||
const src = $(this).attr('data-src'); // created by lozad.js
|
|
||||||
|
|
||||||
$(this).wrap(`<a href="${src}" title="${title}" class="popup"></a>`);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
$('.popup').magnificPopup({
|
$('.popup').magnificPopup({
|
||||||
type: 'image',
|
type: 'image',
|
||||||
closeOnContentClick: true,
|
closeOnContentClick: true,
|
||||||
@@ -40,8 +19,10 @@ $(function() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/* markup the image links */
|
/* Stop shimmer when image loaded */
|
||||||
|
document.addEventListener('lazyloaded', function(e) {
|
||||||
$(`${IMG_SCOPE} a`).has('img').addClass('img-link');
|
const $img = $(e.target);
|
||||||
|
$img.parent().removeClass('shimmer');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
})();
|
||||||
|
|||||||
43
_javascript/utils/locale-datetime.js
Normal file
43
_javascript/utils/locale-datetime.js
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
/**
|
||||||
|
* Update month/day to locale datetime
|
||||||
|
*
|
||||||
|
* Requirement: <https://github.com/iamkun/dayjs>
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* A tool for locale datetime */
|
||||||
|
const LocaleHelper = (function () {
|
||||||
|
const locale = $('html').attr('lang').substr(0, 2);
|
||||||
|
const attrTimestamp = 'data-ts';
|
||||||
|
const attrDateFormat = 'data-df';
|
||||||
|
|
||||||
|
return {
|
||||||
|
locale: () => locale,
|
||||||
|
attrTimestamp: () => attrTimestamp,
|
||||||
|
attrDateFormat: () => attrDateFormat,
|
||||||
|
getTimestamp: ($elem) => Number($elem.attr(attrTimestamp)), // unix timestamp
|
||||||
|
getDateFormat: ($elem) => $elem.attr(attrDateFormat)
|
||||||
|
};
|
||||||
|
|
||||||
|
}());
|
||||||
|
|
||||||
|
$(function () {
|
||||||
|
dayjs.locale(LocaleHelper.locale());
|
||||||
|
dayjs.extend(window.dayjs_plugin_localizedFormat);
|
||||||
|
|
||||||
|
$(`[${LocaleHelper.attrTimestamp()}]`).each(function () {
|
||||||
|
const date = dayjs.unix(LocaleHelper.getTimestamp($(this)));
|
||||||
|
const text = date.format(LocaleHelper.getDateFormat($(this)));
|
||||||
|
$(this).text(text);
|
||||||
|
$(this).removeAttr(LocaleHelper.attrTimestamp());
|
||||||
|
$(this).removeAttr(LocaleHelper.attrDateFormat());
|
||||||
|
|
||||||
|
// setup tooltips
|
||||||
|
const tooltip = $(this).attr('data-toggle');
|
||||||
|
if (typeof tooltip === 'undefined' || tooltip !== 'tooltip') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const tooltipText = date.format('llll'); // see: https://day.js.org/docs/en/display/format#list-of-localized-formats
|
||||||
|
$(this).attr('data-original-title', tooltipText);
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
/*
|
/**
|
||||||
* Count page views form GA or local cache file.
|
* Count page views form GA or local cache file.
|
||||||
*
|
*
|
||||||
* Dependencies:
|
* Dependencies:
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/*
|
/**
|
||||||
Safari doesn't support CSS `scroll-behavior: smooth`,
|
Safari doesn't support CSS `scroll-behavior: smooth`,
|
||||||
so here is a compatible solution for all browser to smooth scrolling
|
so here is a compatible solution for all browser to smooth scrolling
|
||||||
|
|
||||||
@@ -8,21 +8,16 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
$(function () {
|
$(function () {
|
||||||
const $topbarWrapper = $("#topbar-wrapper");
|
|
||||||
const topbarHeight = $topbarWrapper.outerHeight();
|
|
||||||
const $topbarTitle = $("#topbar-title");
|
const $topbarTitle = $("#topbar-title");
|
||||||
|
|
||||||
const ATTR_TOC_SCROLLING = "toc-scrolling-up";
|
|
||||||
const SCROLL_MARK = "scroll-focus";
|
|
||||||
const REM = 16; // in pixels
|
const REM = 16; // in pixels
|
||||||
let tocScrollUpCount = 0;
|
const ATTR_SCROLL_FOCUS = "scroll-focus";
|
||||||
|
|
||||||
$("a[href*='#']")
|
$("a[href*='#']")
|
||||||
.not("[href='#']")
|
.not("[href='#']")
|
||||||
.not("[href='#0']")
|
.not("[href='#0']")
|
||||||
.click(function (event) {
|
.click(function (event) {
|
||||||
|
if (this.pathname.replace(/^\//, "") !==
|
||||||
if (this.pathname.replace(/^\//, "") !== location.pathname.replace(/^\//, "")) {
|
location.pathname.replace(/^\//, "")) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -33,12 +28,11 @@ $(function() {
|
|||||||
const hash = decodeURI(this.hash);
|
const hash = decodeURI(this.hash);
|
||||||
let toFootnoteRef = RegExp(/^#fnref:/).test(hash);
|
let toFootnoteRef = RegExp(/^#fnref:/).test(hash);
|
||||||
let toFootnote = toFootnoteRef ? false : RegExp(/^#fn:/).test(hash);
|
let toFootnote = toFootnoteRef ? false : RegExp(/^#fn:/).test(hash);
|
||||||
let selector = hash.includes(":") ? hash.replace(/\:/g, "\\:") : hash;
|
let selector = hash.includes(":") ? hash.replace(/:/g, "\\:") : hash;
|
||||||
let $target = $(selector);
|
let $target = $(selector);
|
||||||
|
|
||||||
let parent = $(this).parent().prop("tagName");
|
let isMobileViews = $topbarTitle.is(":visible");
|
||||||
let isAnchor = RegExp(/^H\d/).test(parent);
|
let isPortrait = $(window).width() < $(window).height();
|
||||||
let isMobileViews = !$topbarTitle.is(":hidden");
|
|
||||||
|
|
||||||
if (typeof $target === "undefined") {
|
if (typeof $target === "undefined") {
|
||||||
return;
|
return;
|
||||||
@@ -50,26 +44,20 @@ $(function() {
|
|||||||
history.pushState(null, null, hash);
|
history.pushState(null, null, hash);
|
||||||
}
|
}
|
||||||
|
|
||||||
let curOffset = isAnchor ? $(this).offset().top : $(window).scrollTop();
|
let curOffset = $(window).scrollTop();
|
||||||
let destOffset = $target.offset().top -= REM / 2;
|
let destOffset = $target.offset().top -= REM / 2;
|
||||||
|
|
||||||
if (destOffset < curOffset) { // scroll up
|
if (destOffset < curOffset) { // scroll up
|
||||||
if (!isAnchor && !toFootnote) { // trigger by ToC item
|
ScrollHelper.hideTopbar();
|
||||||
if (!isMobileViews) { // on desktop/tablet screens
|
ScrollHelper.addScrollUpTask();
|
||||||
$topbarWrapper.removeClass("topbar-down").addClass("topbar-up");
|
|
||||||
// Send message to `${JS_ROOT}/commons/topbar-switch.js`
|
if (isMobileViews && isPortrait) {
|
||||||
$topbarWrapper.attr(ATTR_TOC_SCROLLING, true);
|
destOffset -= ScrollHelper.getTopbarHeight();
|
||||||
tocScrollUpCount += 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((isAnchor || toFootnoteRef) && isMobileViews) {
|
} else { // scroll down
|
||||||
destOffset -= topbarHeight;
|
if (isMobileViews && isPortrait) {
|
||||||
}
|
destOffset -= ScrollHelper.getTopbarHeight();
|
||||||
|
|
||||||
} else {
|
|
||||||
if (isMobileViews) {
|
|
||||||
destOffset -= topbarHeight;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -79,18 +67,18 @@ $(function() {
|
|||||||
$target.focus();
|
$target.focus();
|
||||||
|
|
||||||
/* clean up old scroll mark */
|
/* clean up old scroll mark */
|
||||||
if ($(`[${SCROLL_MARK}=true]`).length) {
|
if ($(`[${ATTR_SCROLL_FOCUS}=true]`).length) {
|
||||||
$(`[${SCROLL_MARK}=true]`).attr(SCROLL_MARK, false);
|
$(`[${ATTR_SCROLL_FOCUS}=true]`).attr(ATTR_SCROLL_FOCUS, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Clean :target links */
|
/* Clean :target links */
|
||||||
if ($(":target").length) { /* element that visited by the URL with hash */
|
if ($(":target").length) { /* element that visited by the URL with hash */
|
||||||
$(":target").attr(SCROLL_MARK, false);
|
$(":target").attr(ATTR_SCROLL_FOCUS, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* set scroll mark to footnotes */
|
/* set scroll mark to footnotes */
|
||||||
if (toFootnote || toFootnoteRef) {
|
if (toFootnote || toFootnoteRef) {
|
||||||
$target.attr(SCROLL_MARK, true);
|
$target.attr(ATTR_SCROLL_FOCUS, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($target.is(":focus")) { /* Checking if the target was focused */
|
if ($target.is(":focus")) { /* Checking if the target was focused */
|
||||||
@@ -100,12 +88,8 @@ $(function() {
|
|||||||
$target.focus(); /* Set focus again */
|
$target.focus(); /* Set focus again */
|
||||||
}
|
}
|
||||||
|
|
||||||
if (typeof $topbarWrapper.attr(ATTR_TOC_SCROLLING) !== "undefined") {
|
if (ScrollHelper.hasScrollUpTask()) {
|
||||||
tocScrollUpCount -= 1;
|
ScrollHelper.popScrollUpTask();
|
||||||
|
|
||||||
if (tocScrollUpCount <= 0) {
|
|
||||||
$topbarWrapper.attr(ATTR_TOC_SCROLLING, "false");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}); /* click() */
|
}); /* click() */
|
||||||
|
|||||||
@@ -1,77 +0,0 @@
|
|||||||
/*
|
|
||||||
* Calculate the Timeago
|
|
||||||
*/
|
|
||||||
|
|
||||||
$(function() {
|
|
||||||
const timeagoElem = $(".timeago");
|
|
||||||
let tasks = timeagoElem.length;
|
|
||||||
let intervalId = void 0;
|
|
||||||
|
|
||||||
const dPrompt = $("meta[name=day-prompt]").attr("content");
|
|
||||||
const hrPrompt = $("meta[name=hour-prompt]").attr("content");
|
|
||||||
const minPrompt = $("meta[name=minute-prompt]").attr("content");
|
|
||||||
const justnowPrompt = $("meta[name=justnow-prompt]").attr("content");
|
|
||||||
|
|
||||||
function timeago(date, initDate) {
|
|
||||||
let now = new Date();
|
|
||||||
let past = new Date(date);
|
|
||||||
|
|
||||||
if (past.getFullYear() !== now.getFullYear()
|
|
||||||
|| past.getMonth() !== now.getMonth()) {
|
|
||||||
return initDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
let seconds = Math.floor((now - past) / 1000);
|
|
||||||
|
|
||||||
let day = Math.floor(seconds / 86400);
|
|
||||||
if (day >= 1) {
|
|
||||||
return ` ${day} ${dPrompt}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
let hour = Math.floor(seconds / 3600);
|
|
||||||
if (hour >= 1) {
|
|
||||||
return ` ${hour} ${hrPrompt}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
let minute = Math.floor(seconds / 60);
|
|
||||||
if (minute >= 1) {
|
|
||||||
return ` ${minute} ${minPrompt}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
return justnowPrompt;
|
|
||||||
}
|
|
||||||
|
|
||||||
function updateTimeago() {
|
|
||||||
$(".timeago").each(function() {
|
|
||||||
if ($(this)[0].hasAttribute("date") === false) {
|
|
||||||
tasks -= 1;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let date = $(this).attr("date");
|
|
||||||
let initDate = $(this).text();
|
|
||||||
let relativeDate = timeago(date, initDate);
|
|
||||||
|
|
||||||
if (relativeDate === initDate) {
|
|
||||||
$(this).removeAttr("date");
|
|
||||||
} else {
|
|
||||||
$(this).text(relativeDate);
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
if (tasks === 0 && typeof intervalId !== "undefined") {
|
|
||||||
clearInterval(intervalId); /* stop interval */
|
|
||||||
}
|
|
||||||
return tasks;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tasks === 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (updateTimeago() > 0) { /* run immediately */
|
|
||||||
intervalId = setInterval(updateTimeago, 60000); /* run every minute */
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
@@ -3,37 +3,32 @@ layout: page
|
|||||||
# The Archives of posts.
|
# The Archives of posts.
|
||||||
---
|
---
|
||||||
|
|
||||||
{% include lang.html %}
|
{% assign df_strftime_m = site.data.locales[site.lang].df.archives.strftime | default: '/ %m' %}
|
||||||
|
{% assign df_dayjs_m = site.data.locales[site.lang].df.archives.dayjs | default: '/ MM' %}
|
||||||
|
|
||||||
<div id="archives" class="pl-xl-2">
|
<div id="archives" class="pl-xl-3">
|
||||||
|
|
||||||
{% for post in site.posts %}
|
{% for post in site.posts %}
|
||||||
{% capture this_year %}{{ post.date | date: "%Y" }}{% endcapture %}
|
{% capture cur_year %}{{ post.date | date: "%Y" }}{% endcapture %}
|
||||||
{% capture pre_year %}{{ post.previous.date | date: "%Y" }}{% endcapture %}
|
|
||||||
{% if forloop.first %}
|
{% if cur_year != last_year %}
|
||||||
{% assign last_day = "" %}
|
{% unless forloop.first %}</ul>{% endunless %}
|
||||||
{% assign last_month = "" %}
|
<div class="year lead">{{ cur_year }}</div>
|
||||||
<span class="lead">{{this_year}}</span>
|
|
||||||
<ul class="list-unstyled">
|
<ul class="list-unstyled">
|
||||||
|
{% assign last_year = cur_year %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<li>
|
<li>
|
||||||
<div>
|
{% assign ts = post.date | date: '%s' %}
|
||||||
{% capture this_day %}{{ post.date | date: "%d" }}{% endcapture %}
|
<span class="date day" data-ts="{{ ts }}" data-df="DD">{{ post.date | date: "%d" }}</span>
|
||||||
{% capture _mth_df %}{{ site.data.locales[lang].date_format.post.archive_month }}{% endcapture %}
|
<span class="date month small text-muted ml-1" data-ts="{{ ts }}" data-df="{{ df_dayjs_m }}">
|
||||||
{% capture this_month %}{{ post.date | date: _mth_df }}{% endcapture %}
|
{{ post.date | date: df_strftime_m }}
|
||||||
<span class="date day">{{ this_day }}</span>
|
</span>
|
||||||
<span class="date month small text-muted">{% include no-zero-date.html date_str=this_month %}</span>
|
|
||||||
<a href="{{ post.url | relative_url }}">{{ post.title }}</a>
|
<a href="{{ post.url | relative_url }}">{{ post.title }}</a>
|
||||||
</div>
|
|
||||||
</li>
|
</li>
|
||||||
{% if forloop.last %}
|
|
||||||
</ul>
|
{% if forloop.last %}</ul>{% endif %}
|
||||||
{% elsif this_year != pre_year %}
|
|
||||||
</ul>
|
|
||||||
<span class="lead">{{pre_year}}</span>
|
|
||||||
<ul class="list-unstyled">
|
|
||||||
{% assign last_day = "" %}
|
|
||||||
{% assign last_month = "" %}
|
|
||||||
{% endif %}
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -3,8 +3,6 @@ layout: page
|
|||||||
# All the Categories of posts
|
# All the Categories of posts
|
||||||
---
|
---
|
||||||
|
|
||||||
{% include lang.html %}
|
|
||||||
|
|
||||||
{% assign HEAD_PREFIX = "h_" %}
|
{% assign HEAD_PREFIX = "h_" %}
|
||||||
{% assign LIST_PREFIX = "l_" %}
|
{% assign LIST_PREFIX = "l_" %}
|
||||||
|
|
||||||
@@ -47,10 +45,24 @@ layout: page
|
|||||||
<span class="text-muted small font-weight-light">
|
<span class="text-muted small font-weight-light">
|
||||||
{% if sub_categories_size > 0 %}
|
{% if sub_categories_size > 0 %}
|
||||||
{{ sub_categories_size }}
|
{{ sub_categories_size }}
|
||||||
{{ site.data.locales[lang].categories.category_measure }},
|
{% if sub_categories_size > 1 %}
|
||||||
|
{{ site.data.locales[site.lang].categories.category_measure.plural
|
||||||
|
| default: site.data.locales[site.lang].categories.category_measure }}
|
||||||
|
{% else %}
|
||||||
|
{{ site.data.locales[site.lang].categories.category_measure.singular
|
||||||
|
| default: site.data.locales[site.lang].categories.category_measure }}
|
||||||
|
{% endif %},
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{{ top_posts_size }}
|
{{ top_posts_size }}
|
||||||
{{ site.data.locales[lang].categories.post_measure }}
|
|
||||||
|
{% if top_posts_size > 1 %}
|
||||||
|
{{ site.data.locales[site.lang].categories.post_measure.plural
|
||||||
|
| default: site.data.locales[site.lang].categories.post_measure }}
|
||||||
|
{% else %}
|
||||||
|
{{ site.data.locales[site.lang].categories.post_measure.singular
|
||||||
|
| default: site.data.locales[site.lang].categories.post_measure }}
|
||||||
|
{% endif %}
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
@@ -83,7 +95,14 @@ layout: page
|
|||||||
{% assign posts_size = site.categories[sub_category] | size %}
|
{% assign posts_size = site.categories[sub_category] | size %}
|
||||||
<span class="text-muted small font-weight-light">
|
<span class="text-muted small font-weight-light">
|
||||||
{{ posts_size }}
|
{{ posts_size }}
|
||||||
{{ site.data.locales[lang].categories.post_measure }}
|
|
||||||
|
{% if posts_size > 1 %}
|
||||||
|
{{ site.data.locales[site.lang].categories.post_measure.plural
|
||||||
|
| default: site.data.locales[site.lang].categories.post_measure }}
|
||||||
|
{% else %}
|
||||||
|
{{ site.data.locales[site.lang].categories.post_measure.singular
|
||||||
|
| default: site.data.locales[site.lang].categories.post_measure }}
|
||||||
|
{% endif %}
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|||||||
@@ -3,8 +3,6 @@ layout: page
|
|||||||
# The Category layout
|
# The Category layout
|
||||||
---
|
---
|
||||||
|
|
||||||
{% include lang.html %}
|
|
||||||
|
|
||||||
<div id="page-category">
|
<div id="page-category">
|
||||||
<h1 class="pl-lg-2">
|
<h1 class="pl-lg-2">
|
||||||
<i class="far fa-folder-open fa-fw text-muted"></i>
|
<i class="far fa-folder-open fa-fw text-muted"></i>
|
||||||
@@ -13,13 +11,11 @@ layout: page
|
|||||||
</h1>
|
</h1>
|
||||||
|
|
||||||
<ul class="post-content pl-0">
|
<ul class="post-content pl-0">
|
||||||
{% assign post_df = site.data.locales[lang].date_format.post.long %}
|
|
||||||
|
|
||||||
{% for post in page.posts %}
|
{% for post in page.posts %}
|
||||||
<li class="d-flex justify-content-between pl-md-3 pr-md-3">
|
<li class="d-flex justify-content-between pl-md-3 pr-md-3">
|
||||||
<a href="{{ post.url | relative_url }}">{{ post.title }}</a>
|
<a href="{{ post.url | relative_url }}">{{ post.title }}</a>
|
||||||
<span class="dash flex-grow-1"></span>
|
<span class="dash flex-grow-1"></span>
|
||||||
<span class="text-muted small">{{ post.date | date: post_df }}</span>
|
{% include datetime.html date=post.date wrap='span' class='text-muted small' %}
|
||||||
</li>
|
</li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
|
|||||||
@@ -5,41 +5,36 @@ layout: compress
|
|||||||
|
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
|
|
||||||
{% include lang.html %}
|
{% include assets-origin.html %}
|
||||||
|
|
||||||
{% capture prefer_mode %}
|
{% capture prefer_mode %}
|
||||||
{% if site.theme_mode %}
|
{% if site.theme_mode %}
|
||||||
mode="{{ site.theme_mode }}"
|
data-mode="{{ site.theme_mode }}"
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endcapture %}
|
{% endcapture %}
|
||||||
|
|
||||||
<html lang="{{ site.lang }}"{{ prefer_mode }}>
|
<!-- `site.alt_lang` can specify a language different from the UI -->
|
||||||
|
<html lang="{{ site.alt_lang | default: site.lang }}"{{ prefer_mode }}>
|
||||||
|
|
||||||
{% include head.html %}
|
{% include head.html %}
|
||||||
|
|
||||||
{% unless site.theme_mode %}
|
<body data-spy="scroll" data-target="#toc" data-topbar-visible="true">
|
||||||
{% include mode-toggle.html %}
|
|
||||||
{% endunless %}
|
|
||||||
|
|
||||||
<body data-spy="scroll" data-target="#toc">
|
|
||||||
|
|
||||||
{% include sidebar.html %}
|
{% include sidebar.html %}
|
||||||
|
|
||||||
{% include topbar.html %}
|
{% include topbar.html %}
|
||||||
|
|
||||||
<div id="main-wrapper">
|
<div id="main-wrapper" class="d-flex justify-content-center">
|
||||||
<div id="main">
|
<div id="main" class="container pl-xl-4 pr-xl-4">
|
||||||
|
|
||||||
{{ content }}
|
{{ content }}
|
||||||
|
|
||||||
{% include footer.html %}
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% include search-results.html %}
|
{% include search-results.html %}
|
||||||
|
|
||||||
</div> <!-- #main-wrapper -->
|
</div> <!-- #main-wrapper -->
|
||||||
|
|
||||||
|
{% include footer.html %}
|
||||||
|
|
||||||
{% if page.mermaid %}
|
{% if page.mermaid %}
|
||||||
{% include mermaid.html %}
|
{% include mermaid.html %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@@ -50,6 +45,23 @@ layout: compress
|
|||||||
<i class="fas fa-angle-up"></i>
|
<i class="fas fa-angle-up"></i>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
{% if site.pwa.enabled %}
|
||||||
|
<div id="notification" class="toast" role="alert" aria-live="assertive" aria-atomic="true"
|
||||||
|
data-animation="true" data-autohide="false">
|
||||||
|
<div class="toast-header">
|
||||||
|
<button type="button" class="ml-2 ml-auto close" data-dismiss="toast" aria-label="Close">
|
||||||
|
<span aria-hidden="true">×</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="toast-body text-center pt-0">
|
||||||
|
<p class="pl-2 pr-2 mb-3">{{ site.data.locales[site.lang].notification.update_found }}</p>
|
||||||
|
<button type="button" class="btn btn-primary" aria-label="Update">
|
||||||
|
{{ site.data.locales[site.lang].notification.update }}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% include search-loader.html %}
|
{% include search-loader.html %}
|
||||||
|
|
||||||
{% include js-selector.html %}
|
{% include js-selector.html %}
|
||||||
|
|||||||
@@ -3,10 +3,8 @@ layout: page
|
|||||||
# The Home page layout
|
# The Home page layout
|
||||||
---
|
---
|
||||||
|
|
||||||
{% include lang.html %}
|
|
||||||
|
|
||||||
{% assign pinned = site.posts | where: "pin", "true" %}
|
{% assign pinned = site.posts | where: "pin", "true" %}
|
||||||
{% assign default = site.posts | where_exp: "item", "item.pin != true" %}
|
{% assign default = site.posts | where_exp: "item", "item.pin != true and item.hidden != true" %}
|
||||||
|
|
||||||
{% assign posts = "" | split: "" %}
|
{% assign posts = "" | split: "" %}
|
||||||
|
|
||||||
@@ -23,7 +21,6 @@ layout: page
|
|||||||
{% assign pinned_num = 0 %}
|
{% assign pinned_num = 0 %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
<!-- Get default posts -->
|
<!-- Get default posts -->
|
||||||
|
|
||||||
{% assign default_beg = offset | minus: pinned.size %}
|
{% assign default_beg = offset | minus: pinned.size %}
|
||||||
@@ -58,15 +55,11 @@ layout: page
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="post-meta text-muted d-flex">
|
<div class="post-meta text-muted d-flex">
|
||||||
|
|
||||||
<div class="mr-auto">
|
<div class="mr-auto">
|
||||||
|
|
||||||
<!-- posted date -->
|
<!-- posted date -->
|
||||||
<i class="far fa-calendar fa-fw"></i>
|
<i class="far fa-calendar fa-fw"></i>
|
||||||
{% include timeago.html date=post.date tooltip=true %}
|
{% include datetime.html date=post.date %}
|
||||||
|
|
||||||
<!-- time to read -->
|
|
||||||
<i class="far fa-clock fa-fw"></i>
|
|
||||||
{% include read-time.html content=post.content %}
|
|
||||||
|
|
||||||
<!-- categories -->
|
<!-- categories -->
|
||||||
{% if post.categories.size > 0 %}
|
{% if post.categories.size > 0 %}
|
||||||
@@ -78,12 +71,13 @@ layout: page
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% if post.pin %}
|
{% if post.pin %}
|
||||||
<div class="pin">
|
<div class="pin">
|
||||||
<i class="fas fa-thumbtack fa-fw"></i>
|
<i class="fas fa-thumbtack fa-fw"></i>
|
||||||
<span>{{ site.data.locales[lang].post.pin_prompt }}</span>
|
<span>{{ site.data.locales[site.lang].post.pin_prompt }}</span>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
|||||||
@@ -2,13 +2,13 @@
|
|||||||
layout: default
|
layout: default
|
||||||
---
|
---
|
||||||
|
|
||||||
{% include lang.html %}
|
{% include assets-origin.html %}
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
|
||||||
<!-- core -->
|
<!-- core -->
|
||||||
<div id="core-wrapper" class="col-12 col-lg-11 col-xl-8">
|
<div id="core-wrapper" class="col-12 col-lg-11 col-xl-9 pr-xl-4">
|
||||||
<div class="post pl-1 pr-1 pl-sm-2 pr-sm-2 pl-md-4 pr-md-4">
|
<div class="post pl-1 pr-1 pl-md-2 pr-md-2">
|
||||||
|
|
||||||
{% capture _content %}
|
{% capture _content %}
|
||||||
{% if layout.refactor or page.layout == 'page' %}
|
{% if layout.refactor or page.layout == 'page' %}
|
||||||
@@ -19,7 +19,8 @@ layout: default
|
|||||||
{% endcapture %}
|
{% endcapture %}
|
||||||
|
|
||||||
{% if page.layout == 'page' or page.collection == 'tabs' %}
|
{% if page.layout == 'page' or page.collection == 'tabs' %}
|
||||||
{% assign title = site.data.locales[lang].tabs[tab_key] | default: page.title %}
|
{% assign tab_key = page.title | downcase %}
|
||||||
|
{% assign title = site.data.locales[site.lang].tabs[tab_key] | default: page.title %}
|
||||||
<h1 class="dynamic-title">
|
<h1 class="dynamic-title">
|
||||||
{{ title }}
|
{{ title }}
|
||||||
</h1>
|
</h1>
|
||||||
@@ -33,15 +34,15 @@ layout: default
|
|||||||
</div>
|
</div>
|
||||||
</div> <!-- #core-wrapper -->
|
</div> <!-- #core-wrapper -->
|
||||||
|
|
||||||
<!-- pannel -->
|
<!-- panel -->
|
||||||
<div id="panel-wrapper" class="col-xl-3 pl-2 text-muted topbar-down">
|
<div id="panel-wrapper" class="col-xl-3 pl-2 text-muted">
|
||||||
|
|
||||||
<div class="access">
|
<div class="access">
|
||||||
{% include update-list.html %}
|
{% include update-list.html %}
|
||||||
{% include trending-tags.html %}
|
{% include trending-tags.html %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% for _include in layout.pannel_includes %}
|
{% for _include in layout.panel_includes %}
|
||||||
{% assign _include_path = _include | append: '.html' %}
|
{% assign _include_path = _include | append: '.html' %}
|
||||||
{% include {{ _include_path }} %}
|
{% include {{ _include_path }} %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
@@ -52,13 +53,11 @@ layout: default
|
|||||||
<!-- tail -->
|
<!-- tail -->
|
||||||
{% if layout.tail_includes %}
|
{% if layout.tail_includes %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12 col-lg-11 col-xl-8">
|
<div id="tail-wrapper" class="col-12 col-lg-11 col-xl-9 pl-3 pr-3 pr-xl-4 mt-5">
|
||||||
<div id="tail-wrapper" class="pl-1 pr-1 pl-sm-2 pr-sm-2 pl-md-4 pr-md-4">
|
|
||||||
{% for _include in layout.tail_includes %}
|
{% for _include in layout.tail_includes %}
|
||||||
{% assign _include_path = _include | append: '.html' %}
|
{% assign _include_path = _include | append: '.html' %}
|
||||||
{% include {{ _include_path }} %}
|
{% include {{ _include_path }} %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div> <!-- .row -->
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
---
|
---
|
||||||
layout: page
|
layout: page
|
||||||
refactor: true
|
refactor: true
|
||||||
pannel_includes:
|
panel_includes:
|
||||||
- toc
|
- toc
|
||||||
tail_includes:
|
tail_includes:
|
||||||
- related-posts
|
- related-posts
|
||||||
@@ -9,81 +9,78 @@ tail_includes:
|
|||||||
- comments
|
- comments
|
||||||
---
|
---
|
||||||
|
|
||||||
{% include lang.html %}
|
|
||||||
|
|
||||||
{% if page.image.src %}
|
|
||||||
{% capture bg %}
|
|
||||||
{% unless page.image.no_bg %}{{ 'bg' }}{% endunless %}
|
|
||||||
{% endcapture %}
|
|
||||||
<img src="{{ page.image.src }}" class="preview-img {{ bg | strip }}"
|
|
||||||
alt="{{ page.image.alt | default: "Preview Image" }}"
|
|
||||||
|
|
||||||
{% if page.image.width %}
|
|
||||||
width="{{ page.image.width }}"
|
|
||||||
{% elsif page.image.w %}
|
|
||||||
width="{{ page.image.w }}"
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if page.image.height %}
|
|
||||||
height="{{ page.image.height }}"
|
|
||||||
{% elsif page.image.h %}
|
|
||||||
height="{{ page.image.h }}"
|
|
||||||
{% endif %}>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
<h1 data-toc-skip>{{ page.title }}</h1>
|
<h1 data-toc-skip>{{ page.title }}</h1>
|
||||||
|
|
||||||
<div class="post-meta text-muted">
|
<div class="post-meta text-muted">
|
||||||
|
|
||||||
<!-- author -->
|
|
||||||
<div>
|
|
||||||
{% capture author_name %}{{ page.author.name | default: site.social.name }}{% endcapture %}
|
|
||||||
{% assign author_link = nil %}
|
|
||||||
|
|
||||||
{% if page.author.link %}
|
|
||||||
{% assign author_link = page.author.link %}
|
|
||||||
{% elsif author_name == site.social.name %}
|
|
||||||
{% assign author_link = site.social.links[0] %}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{{ site.data.locales[lang].post.written_by }}
|
|
||||||
<em>
|
|
||||||
{% if author_link %}
|
|
||||||
<a href="{{ author_link }}">{{ author_name }}</a>
|
|
||||||
{% else %}
|
|
||||||
{{ author_name }}
|
|
||||||
{% endif %}
|
|
||||||
</em>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="d-flex">
|
|
||||||
<div>
|
|
||||||
<!-- published date -->
|
<!-- published date -->
|
||||||
<span>
|
<span>
|
||||||
{{ site.data.locales[lang].post.posted }}
|
{{ site.data.locales[site.lang].post.posted }}
|
||||||
{% include timeago.html date=page.date tooltip=true %}
|
{% include datetime.html date=page.date tooltip=true %}
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
<!-- lastmod date -->
|
<!-- lastmod date -->
|
||||||
{% if page.last_modified_at %}
|
{% if page.last_modified_at %}
|
||||||
<span>
|
<span>
|
||||||
{{ site.data.locales[lang].post.updated }}
|
{{ site.data.locales[site.lang].post.updated }}
|
||||||
{% include timeago.html date=page.last_modified_at tooltip=true %}
|
{% include datetime.html date=page.last_modified_at tooltip=true %}
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<!-- read time -->
|
{% if page.image %}
|
||||||
{% include read-time.html content=content prompt=true %}
|
{% capture src %}src="{{ page.image.path | default: page.image }}"{% endcapture %}
|
||||||
|
{% capture class %}class="preview-img{% if page.image.no_bg %}{{ ' no-bg' }}{% endif %}"{% endcapture %}
|
||||||
|
{% capture alt %}alt="{{ page.image.alt | default: "Preview Image" }}"{% endcapture %}
|
||||||
|
|
||||||
|
{% capture lqip %}
|
||||||
|
{% if page.image.lqip %}
|
||||||
|
lqip="{{ page.image.lqip }}"
|
||||||
|
{% endif %}
|
||||||
|
{% endcapture %}
|
||||||
|
|
||||||
|
<div class="mt-3 mb-3">
|
||||||
|
<img {{ src }} {{ class }} {{ alt }} w="1200" h="630" {{ lqip | strip }}>
|
||||||
|
{%- if page.image.alt -%}
|
||||||
|
<figcaption class="text-center pt-2 pb-2">{{ page.image.alt }}</figcaption>
|
||||||
|
{%- endif -%}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<div class="d-flex justify-content-between">
|
||||||
|
<!-- author(s) -->
|
||||||
|
<span>
|
||||||
|
{% if page.author %}
|
||||||
|
{% assign authors = page.author %}
|
||||||
|
{% elsif page.authors %}
|
||||||
|
{% assign authors = page.authors %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{{ site.data.locales[site.lang].post.written_by }}
|
||||||
|
|
||||||
|
<em>
|
||||||
|
{% if authors %}
|
||||||
|
{% for author in authors %}
|
||||||
|
<a href="{{ site.data.authors[author].url }}">{{ site.data.authors[author].name }}</a>
|
||||||
|
{% unless forloop.last %}</em>, <em>{% endunless %}
|
||||||
|
{% endfor %}
|
||||||
|
{% else %}
|
||||||
|
<a href="{{ site.social.links[0] }}">{{ site.social.name }}</a>
|
||||||
|
{% endif %}
|
||||||
|
</em>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<div>
|
||||||
<!-- page views -->
|
<!-- page views -->
|
||||||
{% if site.google_analytics.pv.proxy_endpoint or site.google_analytics.pv.cache_path %}
|
{% if site.google_analytics.pv.proxy_endpoint or site.google_analytics.pv.cache_path %}
|
||||||
<span>
|
<span>
|
||||||
<em id="pv" class="pageviews">
|
<em id="pv" class="pageviews">
|
||||||
<i class="fas fa-spinner fa-spin fa-fw"></i>
|
<i class="fas fa-spinner fa-spin fa-fw"></i>
|
||||||
</em>
|
</em>
|
||||||
{{ site.data.locales[lang].post.pageview_measure }}
|
{{ site.data.locales[site.lang].post.pageview_measure }}
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
<!-- read time -->
|
||||||
|
{% include read-time.html content=content prompt=true %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div> <!-- .d-flex -->
|
</div> <!-- .d-flex -->
|
||||||
@@ -124,15 +121,15 @@ tail_includes:
|
|||||||
d-flex justify-content-between align-items-center mt-3 pt-5 pb-2">
|
d-flex justify-content-between align-items-center mt-3 pt-5 pb-2">
|
||||||
<div class="license-wrapper">
|
<div class="license-wrapper">
|
||||||
|
|
||||||
{% if site.data.locales[lang].copyright.license.template %}
|
{% if site.data.locales[site.lang].copyright.license.template %}
|
||||||
|
|
||||||
{% capture _replacement %}
|
{% capture _replacement %}
|
||||||
<a href="{{ site.data.locales[lang].copyright.license.link }}">
|
<a href="{{ site.data.locales[site.lang].copyright.license.link }}">
|
||||||
{{ site.data.locales[lang].copyright.license.name }}
|
{{ site.data.locales[site.lang].copyright.license.name }}
|
||||||
</a>
|
</a>
|
||||||
{% endcapture %}
|
{% endcapture %}
|
||||||
|
|
||||||
{{ site.data.locales[lang].copyright.license.template | replace: ':LICENSE_NAME', _replacement }}
|
{{ site.data.locales[site.lang].copyright.license.template | replace: ':LICENSE_NAME', _replacement }}
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -3,8 +3,6 @@ layout: page
|
|||||||
# The layout for Tag page
|
# The layout for Tag page
|
||||||
---
|
---
|
||||||
|
|
||||||
{% include lang.html %}
|
|
||||||
|
|
||||||
<div id="page-tag">
|
<div id="page-tag">
|
||||||
<h1 class="pl-lg-2">
|
<h1 class="pl-lg-2">
|
||||||
<i class="fa fa-tag fa-fw text-muted"></i>
|
<i class="fa fa-tag fa-fw text-muted"></i>
|
||||||
@@ -12,13 +10,11 @@ layout: page
|
|||||||
<span class="lead text-muted pl-2">{{ page.posts | size }}</span>
|
<span class="lead text-muted pl-2">{{ page.posts | size }}</span>
|
||||||
</h1>
|
</h1>
|
||||||
<ul class="post-content pl-0">
|
<ul class="post-content pl-0">
|
||||||
{% assign post_df = site.data.locales[lang].date_format.post.long %}
|
|
||||||
|
|
||||||
{% for post in page.posts %}
|
{% for post in page.posts %}
|
||||||
<li class="d-flex justify-content-between pl-md-3 pr-md-3">
|
<li class="d-flex justify-content-between pl-md-3 pr-md-3">
|
||||||
<a href="{{ post.url | relative_url }}">{{ post.title }}</a>
|
<a href="{{ post.url | relative_url }}">{{ post.title }}</a>
|
||||||
<span class="dash flex-grow-1"></span>
|
<span class="dash flex-grow-1"></span>
|
||||||
<span class="text-muted small">{{ post.date | date: post_df }}</span>
|
{% include datetime.html date=post.date wrap='span' class='text-muted small' %}
|
||||||
</li>
|
</li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user