mirror of
https://github.com/cotes2020/jekyll-theme-chirpy.git
synced 2025-06-08 00:27:58 +00:00
Compare commits
130 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
c706799f9b | ||
![]() |
18c48b4c49 | ||
![]() |
f5802b8a8a | ||
![]() |
09948da235 | ||
![]() |
53770e4923 | ||
![]() |
d84b72706a | ||
![]() |
519e4f193a | ||
![]() |
d0f8f9553e | ||
![]() |
401e2af0f8 | ||
![]() |
ada38aad96 | ||
![]() |
61ae6cced8 | ||
![]() |
9f38a2dead | ||
![]() |
23d953c313 | ||
![]() |
b48ea68bf7 | ||
![]() |
c62644759c | ||
![]() |
7708adbf30 | ||
![]() |
167c98c781 | ||
![]() |
f7449299e8 | ||
![]() |
db40db6d3d | ||
![]() |
571c90f130 | ||
![]() |
54d4d59d22 | ||
![]() |
e3158642c3 | ||
![]() |
7d4d35cd10 | ||
![]() |
231956d77a | ||
![]() |
0eb7efa7f5 | ||
![]() |
e44c048aef | ||
![]() |
5e41d874b3 | ||
![]() |
774ee93d78 | ||
![]() |
8a4d0bc4ee | ||
![]() |
1b93f6db9b | ||
![]() |
32051dad03 | ||
![]() |
c12875fdba | ||
![]() |
c174f62f26 | ||
![]() |
e741aa43cf | ||
![]() |
e0c3fafa47 | ||
![]() |
1b4e318dc1 | ||
![]() |
2f00d41861 | ||
![]() |
f40fa6a13c | ||
![]() |
0360c9e90b | ||
![]() |
d87c2de675 | ||
![]() |
f55cc31dbd | ||
![]() |
981ddba30e | ||
![]() |
4925a58bf5 | ||
![]() |
7630356a94 | ||
![]() |
6c112c641a | ||
![]() |
976e1a184b | ||
![]() |
7ea3545ba3 | ||
![]() |
8280adb901 | ||
![]() |
4180992272 | ||
![]() |
a16aa7d41e | ||
![]() |
8e55e4dcb2 | ||
![]() |
b4019f3517 | ||
![]() |
2966fc174d | ||
![]() |
3df83fd0d9 | ||
![]() |
82ba82e6da | ||
![]() |
5265b03974 | ||
![]() |
11647697bb | ||
![]() |
5756b8fc26 | ||
![]() |
35c794cf58 | ||
![]() |
c69914effc | ||
![]() |
65f960c31a | ||
![]() |
d51345e297 | ||
![]() |
2f844978aa | ||
![]() |
42dea8ee29 | ||
![]() |
86b13c917f | ||
![]() |
4ef3cd8efc | ||
![]() |
c7f967529c | ||
![]() |
74ed06321c | ||
![]() |
d4f7f39ece | ||
![]() |
c1bd9eb9ee | ||
![]() |
6f461132c0 | ||
![]() |
03e302cbf6 | ||
![]() |
8a064a5e5a | ||
![]() |
740bd84c51 | ||
![]() |
93f616b25d | ||
![]() |
e6b87d2811 | ||
![]() |
73749067c5 | ||
![]() |
fd0df8320f | ||
![]() |
fbcdf8ce85 | ||
![]() |
fac6116af1 | ||
![]() |
5a63244721 | ||
![]() |
3ab3b844d2 | ||
![]() |
367262e74d | ||
![]() |
cbc93193e1 | ||
![]() |
a784f0a0f9 | ||
![]() |
a2bf5dc58e | ||
![]() |
8b7dba71e3 | ||
![]() |
fc3d101258 | ||
![]() |
604e01eb36 | ||
![]() |
31e19c6d0f | ||
![]() |
5f4dab1745 | ||
![]() |
8cfd721494 | ||
![]() |
64c7262245 | ||
![]() |
707a209424 | ||
![]() |
80bd7928a0 | ||
![]() |
befc4ce9c5 | ||
![]() |
bf6c996c4e | ||
![]() |
99eaf6089e | ||
![]() |
efd2941ce0 | ||
![]() |
7f83c3d00d | ||
![]() |
d74bfaeda2 | ||
![]() |
23729c9c8f | ||
![]() |
e347d0632f | ||
![]() |
35fdea0c4f | ||
![]() |
5c5910f1fc | ||
![]() |
b641b36480 | ||
![]() |
979f86cf64 | ||
![]() |
8c30f0a9c3 | ||
![]() |
e4db1a176f | ||
![]() |
e3a78b6243 | ||
![]() |
8673e1335f | ||
![]() |
a07a57ec92 | ||
![]() |
db9e58bab2 | ||
![]() |
e6532ad864 | ||
![]() |
fbba0a4204 | ||
![]() |
c876731901 | ||
![]() |
9ca7519239 | ||
![]() |
0709854dc8 | ||
![]() |
f1d35832f4 | ||
![]() |
cf853f14e4 | ||
![]() |
7ca9c59784 | ||
![]() |
250880c088 | ||
![]() |
88b844ce80 | ||
![]() |
3b46629dc0 | ||
![]() |
1e3d4a6323 | ||
![]() |
1c5fa0880d | ||
![]() |
64ae7a3671 | ||
![]() |
0102abae06 | ||
![]() |
6cb1a5ac52 | ||
![]() |
90a4cc76bb |
29
.devcontainer/devcontainer.json
Normal file
29
.devcontainer/devcontainer.json
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"name": "Jekyll",
|
||||||
|
"image": "mcr.microsoft.com/devcontainers/jekyll:2-bullseye",
|
||||||
|
"onCreateCommand": "git config --global --add safe.directory ${containerWorkspaceFolder}",
|
||||||
|
"postCreateCommand": "bash .devcontainer/post-create.sh",
|
||||||
|
"customizations": {
|
||||||
|
"vscode": {
|
||||||
|
"settings": {
|
||||||
|
"terminal.integrated.defaultProfile.linux": "zsh"
|
||||||
|
},
|
||||||
|
"extensions": [
|
||||||
|
// Liquid tags auto-complete
|
||||||
|
"killalau.vscode-liquid-snippets",
|
||||||
|
// Liquid syntax highlighting and formatting
|
||||||
|
"Shopify.theme-check-vscode",
|
||||||
|
// Shell
|
||||||
|
"timonwong.shellcheck",
|
||||||
|
"mkhl.shfmt",
|
||||||
|
// Common formatter
|
||||||
|
"EditorConfig.EditorConfig",
|
||||||
|
"esbenp.prettier-vscode",
|
||||||
|
"stylelint.vscode-stylelint",
|
||||||
|
"yzhang.markdown-all-in-one",
|
||||||
|
// Git
|
||||||
|
"mhutchie.git-graph"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
18
.devcontainer/post-create.sh
Normal file
18
.devcontainer/post-create.sh
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
if [ -f package.json ]; then
|
||||||
|
bash -i -c "nvm install --lts && nvm install-latest-npm"
|
||||||
|
npm i
|
||||||
|
npm run build
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Install dependencies for shfmt extension
|
||||||
|
curl -sS https://webi.sh/shfmt | sh &>/dev/null
|
||||||
|
|
||||||
|
# Add OMZ plugins
|
||||||
|
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ~/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting
|
||||||
|
git clone https://github.com/zsh-users/zsh-autosuggestions ~/.oh-my-zsh/custom/plugins/zsh-autosuggestions
|
||||||
|
sed -i -E "s/^(plugins=\()(git)(\))/\1\2 zsh-syntax-highlighting zsh-autosuggestions\3/" ~/.zshrc
|
||||||
|
|
||||||
|
# Avoid git log use less
|
||||||
|
echo -e "\nunset LESS" >>~/.zshrc
|
13
.github/dependabot.yml
vendored
13
.github/dependabot.yml
vendored
@ -8,11 +8,10 @@ updates:
|
|||||||
directory: "/"
|
directory: "/"
|
||||||
versioning-strategy: increase
|
versioning-strategy: increase
|
||||||
groups:
|
groups:
|
||||||
npm:
|
prod-deps:
|
||||||
update-types:
|
dependency-type: production
|
||||||
- "major"
|
dev-deps:
|
||||||
- "minor"
|
dependency-type: development
|
||||||
- "patch"
|
|
||||||
schedule:
|
schedule:
|
||||||
interval: "weekly"
|
interval: "weekly"
|
||||||
- package-ecosystem: "github-actions"
|
- package-ecosystem: "github-actions"
|
||||||
@ -23,3 +22,7 @@ updates:
|
|||||||
- "major"
|
- "major"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "weekly"
|
interval: "weekly"
|
||||||
|
- package-ecosystem: "devcontainers"
|
||||||
|
directory: "/"
|
||||||
|
schedule:
|
||||||
|
interval: weekly
|
||||||
|
9
.github/workflows/cd.yml
vendored
9
.github/workflows/cd.yml
vendored
@ -2,13 +2,12 @@ name: CD
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches: [production]
|
||||||
- production
|
tags-ignore: ["**"]
|
||||||
tags-ignore:
|
|
||||||
- "**"
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
release:
|
release:
|
||||||
|
if: ${{ ! startsWith(github.event.head_commit.message, 'chore(release)') }}
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
issues: write
|
issues: write
|
||||||
@ -24,7 +23,7 @@ jobs:
|
|||||||
|
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: latest
|
node-version: lts/*
|
||||||
|
|
||||||
- run: npm install
|
- run: npm install
|
||||||
- run: npx semantic-release
|
- run: npx semantic-release
|
||||||
|
24
.github/workflows/ci.yml
vendored
24
.github/workflows/ci.yml
vendored
@ -1,17 +1,25 @@
|
|||||||
name: "CI"
|
name: CI
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- "master"
|
- master
|
||||||
- "hotfix/**"
|
- "hotfix/*"
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
- ".github/**"
|
- ".github/**"
|
||||||
- "!.github/workflows/ci.yml"
|
- "!.github/workflows/ci.yml"
|
||||||
- ".gitignore"
|
- .gitignore
|
||||||
- "docs/**"
|
- "docs/**"
|
||||||
- "README.md"
|
- README.md
|
||||||
- "LICENSE"
|
- LICENSE
|
||||||
pull_request:
|
pull_request:
|
||||||
|
paths-ignore:
|
||||||
|
- ".github/**"
|
||||||
|
- "!.github/workflows/ci.yml"
|
||||||
|
- .gitignore
|
||||||
|
- "docs/**"
|
||||||
|
- README.md
|
||||||
|
- LICENSE
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
@ -36,10 +44,10 @@ jobs:
|
|||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: latest
|
node-version: lts/*
|
||||||
|
|
||||||
- name: Build Assets
|
- name: Build Assets
|
||||||
run: npm i && npm run build
|
run: npm i && npm run build
|
||||||
|
|
||||||
- name: Test Site
|
- name: Test Site
|
||||||
run: bash tools/test
|
run: bash tools/test.sh
|
||||||
|
8
.github/workflows/commitlint.yml
vendored
8
.github/workflows/commitlint.yml
vendored
@ -1,5 +1,11 @@
|
|||||||
name: Lint Commit Messages
|
name: Lint Commit Messages
|
||||||
on: pull_request
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
- "hotfix/*"
|
||||||
|
pull_request:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
commitlint:
|
commitlint:
|
||||||
|
25
.github/workflows/pr-filter.yml
vendored
Normal file
25
.github/workflows/pr-filter.yml
vendored
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
name: PR Filter
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request_target:
|
||||||
|
types: [opened, reopened]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
check-template:
|
||||||
|
if: github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout Code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Check PR Content
|
||||||
|
id: intercept
|
||||||
|
uses: actions/github-script@v7
|
||||||
|
with:
|
||||||
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
script: |
|
||||||
|
const script = require('.github/workflows/scripts/pr-filter.js');
|
||||||
|
await script({ github, context, core });
|
1
.github/workflows/publish.yml
vendored
1
.github/workflows/publish.yml
vendored
@ -10,6 +10,7 @@ on:
|
|||||||
required: true
|
required: true
|
||||||
BUILDER:
|
BUILDER:
|
||||||
required: true
|
required: true
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
launch:
|
launch:
|
||||||
|
36
.github/workflows/scripts/pr-filter.js
vendored
Normal file
36
.github/workflows/scripts/pr-filter.js
vendored
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
function hasTypes(markdown) {
|
||||||
|
return /## Type of change/.test(markdown) && /-\s\[x\]/i.test(markdown);
|
||||||
|
}
|
||||||
|
|
||||||
|
function hasDescription(markdown) {
|
||||||
|
return (
|
||||||
|
/## Description/.test(markdown) &&
|
||||||
|
!/## Description\s*\n\s*(##|\s*$)/.test(markdown)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = async ({ github, context, core }) => {
|
||||||
|
const pr = context.payload.pull_request;
|
||||||
|
const body = pr.body === null ? '' : pr.body;
|
||||||
|
const markdown = body.replace(/<!--[\s\S]*?-->/g, '');
|
||||||
|
const action = context.payload.action;
|
||||||
|
|
||||||
|
const isValid =
|
||||||
|
markdown !== '' && hasTypes(markdown) && hasDescription(markdown);
|
||||||
|
|
||||||
|
if (!isValid) {
|
||||||
|
await github.rest.pulls.update({
|
||||||
|
...context.repo,
|
||||||
|
pull_number: pr.number,
|
||||||
|
state: 'closed'
|
||||||
|
});
|
||||||
|
|
||||||
|
await github.rest.issues.createComment({
|
||||||
|
...context.repo,
|
||||||
|
issue_number: pr.number,
|
||||||
|
body: `Oops, it seems you've ${action} an invalid pull request. No worries, we'll close it for you.`
|
||||||
|
});
|
||||||
|
|
||||||
|
core.setFailed('PR content does not meet template requirements.');
|
||||||
|
}
|
||||||
|
};
|
2
.github/workflows/stale.yml
vendored
2
.github/workflows/stale.yml
vendored
@ -9,7 +9,7 @@ permissions:
|
|||||||
pull-requests: write
|
pull-requests: write
|
||||||
|
|
||||||
env:
|
env:
|
||||||
STALE_LABEL: stale
|
STALE_LABEL: inactive
|
||||||
EXEMPT_LABELS: "pending,planning,in progress"
|
EXEMPT_LABELS: "pending,planning,in progress"
|
||||||
MESSAGE: >
|
MESSAGE: >
|
||||||
This conversation has been automatically marked as stale because it has not had recent activity.
|
This conversation has been automatically marked as stale because it has not had recent activity.
|
||||||
|
23
.github/workflows/style-lint.yml
vendored
23
.github/workflows/style-lint.yml
vendored
@ -1,23 +0,0 @@
|
|||||||
name: "Style Lint"
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: ["master", "hotfix/**"]
|
|
||||||
paths: ["_sass/**/*.scss"]
|
|
||||||
pull_request:
|
|
||||||
paths: ["_sass/**/*.scss"]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
stylelint:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Setup Node
|
|
||||||
uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: latest
|
|
||||||
- run: npm i
|
|
||||||
- run: npm test
|
|
5
.gitignore
vendored
5
.gitignore
vendored
@ -17,10 +17,11 @@ package-lock.json
|
|||||||
|
|
||||||
# IDE configurations
|
# IDE configurations
|
||||||
.idea
|
.idea
|
||||||
.vscode
|
.vscode/*
|
||||||
!.vscode/settings.json
|
!.vscode/settings.json
|
||||||
!.vscode/extensions.json
|
!.vscode/extensions.json
|
||||||
|
!.vscode/tasks.json
|
||||||
|
|
||||||
# Misc
|
# Misc
|
||||||
_sass/dist
|
_sass/vendors
|
||||||
assets/js/dist
|
assets/js/dist
|
||||||
|
5
.husky/commit-msg
Executable file → Normal file
5
.husky/commit-msg
Executable file → Normal file
@ -1,4 +1 @@
|
|||||||
#!/bin/sh
|
npx --no -- commitlint --edit $1
|
||||||
. "$(dirname "$0")/_/husky.sh"
|
|
||||||
|
|
||||||
npx --no -- commitlint --edit ${1}
|
|
||||||
|
31
.stylelintrc.json
Normal file
31
.stylelintrc.json
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
{
|
||||||
|
"ignoreFiles": ["_sass/vendors/**"],
|
||||||
|
"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,
|
||||||
|
"scss/operator-no-newline-after": null,
|
||||||
|
"rule-empty-line-before": [
|
||||||
|
"always",
|
||||||
|
{
|
||||||
|
"ignore": ["after-comment", "first-nested"]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"value-keyword-case": [
|
||||||
|
"lower",
|
||||||
|
{
|
||||||
|
"ignoreProperties": ["/^\\$/"]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"media-feature-range-notation": "prefix"
|
||||||
|
}
|
||||||
|
}
|
12
.vscode/extensions.json
vendored
12
.vscode/extensions.json
vendored
@ -1,13 +1,3 @@
|
|||||||
{
|
{
|
||||||
"recommendations": [
|
"recommendations": ["ms-vscode-remote.remote-containers"]
|
||||||
// Liquid tags auto-complete
|
|
||||||
"killalau.vscode-liquid-snippets",
|
|
||||||
// Liquid syntax highlighting and formatting
|
|
||||||
"Shopify.theme-check-vscode",
|
|
||||||
// Common formatter
|
|
||||||
"esbenp.prettier-vscode",
|
|
||||||
"foxundermoon.shell-format",
|
|
||||||
"stylelint.vscode-stylelint",
|
|
||||||
"yzhang.markdown-all-in-one"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
11
.vscode/settings.json
vendored
11
.vscode/settings.json
vendored
@ -2,7 +2,6 @@
|
|||||||
// Prettier
|
// Prettier
|
||||||
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||||
"editor.formatOnSave": true,
|
"editor.formatOnSave": true,
|
||||||
"prettier.trailingComma": "none",
|
|
||||||
// Shopify Liquid
|
// Shopify Liquid
|
||||||
"files.associations": {
|
"files.associations": {
|
||||||
"*.html": "liquid"
|
"*.html": "liquid"
|
||||||
@ -15,13 +14,17 @@
|
|||||||
"editor.defaultFormatter": "Shopify.theme-check-vscode"
|
"editor.defaultFormatter": "Shopify.theme-check-vscode"
|
||||||
},
|
},
|
||||||
"[shellscript]": {
|
"[shellscript]": {
|
||||||
"editor.defaultFormatter": "foxundermoon.shell-format"
|
"editor.defaultFormatter": "mkhl.shfmt"
|
||||||
},
|
},
|
||||||
// Disable vscode built-in stylelint
|
// Disable vscode built-in stylelint
|
||||||
"css.validate": false,
|
"css.validate": false,
|
||||||
"scss.validate": false,
|
"scss.validate": false,
|
||||||
"less.validate": false,
|
"less.validate": false,
|
||||||
// Stylint extension settings
|
// Stylint extension settings
|
||||||
"stylelint.snippet": ["css", "less", "postcss", "scss"],
|
"stylelint.snippet": ["css", "scss"],
|
||||||
"stylelint.validate": ["css", "less", "postcss", "scss"]
|
"stylelint.validate": ["css", "scss"],
|
||||||
|
// Run tasks in macOS
|
||||||
|
"terminal.integrated.profiles.osx": {
|
||||||
|
"zsh": { "path": "/bin/zsh", "args": ["-l", "-i"] }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
64
.vscode/tasks.json
vendored
Normal file
64
.vscode/tasks.json
vendored
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
{
|
||||||
|
"version": "2.0.0",
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"label": "Run Jekyll Server",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "./tools/run.sh",
|
||||||
|
"group": {
|
||||||
|
"kind": "build",
|
||||||
|
"isDefault": true
|
||||||
|
},
|
||||||
|
"problemMatcher": [],
|
||||||
|
"detail": "Runs the Jekyll server with live reload."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "Build Jekyll Site",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "./tools/test.sh",
|
||||||
|
"group": {
|
||||||
|
"kind": "build"
|
||||||
|
},
|
||||||
|
"problemMatcher": [],
|
||||||
|
"detail": "Build the Jekyll site for production."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "Build JS (watch)",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "npm run watch:js",
|
||||||
|
"group": {
|
||||||
|
"kind": "build"
|
||||||
|
},
|
||||||
|
"problemMatcher": [],
|
||||||
|
"detail": "Build JS files in watch mode."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "Build CSS",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "npm run build:css",
|
||||||
|
"group": {
|
||||||
|
"kind": "build"
|
||||||
|
},
|
||||||
|
"problemMatcher": [],
|
||||||
|
"detail": "Build CSS files."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "Build JS & CSS",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "npm run build",
|
||||||
|
"group": {
|
||||||
|
"kind": "build"
|
||||||
|
},
|
||||||
|
"problemMatcher": [],
|
||||||
|
"detail": "Build JS & CSS for production."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "Run Jekyll Server + Build JS (watch)",
|
||||||
|
"dependsOn": ["Run Jekyll Server", "Build JS (watch)"],
|
||||||
|
"group": {
|
||||||
|
"kind": "build"
|
||||||
|
},
|
||||||
|
"detail": "Runs both the Jekyll server with live reload and build JS files in watch mode."
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
9
Gemfile
9
Gemfile
@ -4,6 +4,11 @@ source "https://rubygems.org"
|
|||||||
|
|
||||||
gemspec
|
gemspec
|
||||||
|
|
||||||
group :test do
|
gem "html-proofer", "~> 5.0", group: :test
|
||||||
gem "html-proofer", "~> 5.0"
|
|
||||||
|
platforms :mingw, :x64_mingw, :mswin, :jruby do
|
||||||
|
gem "tzinfo", ">= 1", "< 3"
|
||||||
|
gem "tzinfo-data"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
gem "wdm", "~> 0.2.0", :platforms => [:mingw, :x64_mingw, :mswin]
|
||||||
|
11
README.md
11
README.md
@ -6,11 +6,11 @@
|
|||||||
|
|
||||||
A minimal, responsive, and feature-rich Jekyll theme for technical writing.
|
A minimal, responsive, and feature-rich Jekyll theme for technical writing.
|
||||||
|
|
||||||
[][gem]
|
[][ci]
|
||||||
[][ci]
|
[][codacy]
|
||||||
[][codacy]
|
[][license]
|
||||||
[][license]
|
[][gem]
|
||||||
[](https://996.icu)
|
[][open-container]
|
||||||
|
|
||||||
[**Live Demo** →][demo]
|
[**Live Demo** →][demo]
|
||||||
|
|
||||||
@ -72,6 +72,7 @@ This project is published under [MIT License][license].
|
|||||||
[ci]: https://github.com/cotes2020/jekyll-theme-chirpy/actions/workflows/ci.yml?query=event%3Apush+branch%3Amaster
|
[ci]: https://github.com/cotes2020/jekyll-theme-chirpy/actions/workflows/ci.yml?query=event%3Apush+branch%3Amaster
|
||||||
[codacy]: https://app.codacy.com/gh/cotes2020/jekyll-theme-chirpy/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade
|
[codacy]: https://app.codacy.com/gh/cotes2020/jekyll-theme-chirpy/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade
|
||||||
[license]: https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/LICENSE
|
[license]: https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/LICENSE
|
||||||
|
[open-container]: https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/cotes2020/jekyll-theme-chirpy
|
||||||
[jekyllrb]: https://jekyllrb.com/
|
[jekyllrb]: https://jekyllrb.com/
|
||||||
[clipartmax]: https://www.clipartmax.com/middle/m2i8b1m2K9Z5m2K9_ant-clipart-childrens-ant-cute/
|
[clipartmax]: https://www.clipartmax.com/middle/m2i8b1m2K9Z5m2K9_ant-clipart-childrens-ant-cute/
|
||||||
[demo]: https://cotes2020.github.io/chirpy-demo/
|
[demo]: https://cotes2020.github.io/chirpy-demo/
|
||||||
|
33
_config.yml
33
_config.yml
@ -16,20 +16,20 @@ timezone: Asia/Shanghai
|
|||||||
|
|
||||||
title: Chirpy # the main title
|
title: Chirpy # the main title
|
||||||
|
|
||||||
tagline: A text-focused Jekyll theme # it will display as the sub-title
|
tagline: A text-focused Jekyll theme # it will display as the subtitle
|
||||||
|
|
||||||
description: >- # used by seo meta and the atom feed
|
description: >- # used by seo meta and the atom feed
|
||||||
A minimal, responsive and feature-rich Jekyll theme for technical writing.
|
A minimal, responsive and feature-rich Jekyll theme for technical writing.
|
||||||
|
|
||||||
# Fill in the protocol & hostname for your site.
|
# Fill in the protocol & hostname for your site.
|
||||||
# e.g. 'https://username.github.io', note that it does not end with a '/'.
|
# E.g. 'https://username.github.io', note that it does not end with a '/'.
|
||||||
url: ""
|
url: ""
|
||||||
|
|
||||||
github:
|
github:
|
||||||
username: github_username # change to your github username
|
username: github_username # change to your GitHub username
|
||||||
|
|
||||||
twitter:
|
twitter:
|
||||||
username: twitter_username # change to your twitter username
|
username: twitter_username # change to your Twitter username
|
||||||
|
|
||||||
social:
|
social:
|
||||||
# Change to your full name.
|
# Change to your full name.
|
||||||
@ -38,8 +38,8 @@ social:
|
|||||||
email: example@domain.com # change to your email address
|
email: example@domain.com # change to your email address
|
||||||
links:
|
links:
|
||||||
# The first element serves as the copyright owner's link
|
# The first element serves as the copyright owner's link
|
||||||
- https://twitter.com/username # change to your twitter homepage
|
- https://twitter.com/username # change to your Twitter homepage
|
||||||
- https://github.com/username # change to your github homepage
|
- https://github.com/username # change to your GitHub homepage
|
||||||
# Uncomment below to add more social links
|
# Uncomment below to add more social links
|
||||||
# - https://www.facebook.com/username
|
# - https://www.facebook.com/username
|
||||||
# - https://www.linkedin.com/in/username
|
# - https://www.linkedin.com/in/username
|
||||||
@ -70,8 +70,10 @@ analytics:
|
|||||||
domain: # fill in your Matomo domain
|
domain: # fill in your Matomo domain
|
||||||
cloudflare:
|
cloudflare:
|
||||||
id: # fill in your Cloudflare Web Analytics token
|
id: # fill in your Cloudflare Web Analytics token
|
||||||
|
fathom:
|
||||||
|
id: # fill in your Fathom Site ID
|
||||||
|
|
||||||
# Pageviews settings
|
# Page views settings
|
||||||
pageviews:
|
pageviews:
|
||||||
provider: # now only supports 'goatcounter'
|
provider: # now only supports 'goatcounter'
|
||||||
|
|
||||||
@ -83,8 +85,8 @@ pageviews:
|
|||||||
#
|
#
|
||||||
# Available options:
|
# Available options:
|
||||||
#
|
#
|
||||||
# light - Use the light color scheme
|
# light — Use the light color scheme
|
||||||
# dark - Use the dark color scheme
|
# dark — Use the dark color scheme
|
||||||
#
|
#
|
||||||
theme_mode: # [light | dark]
|
theme_mode: # [light | dark]
|
||||||
|
|
||||||
@ -106,7 +108,7 @@ social_preview_image: # string, local or CORS resources
|
|||||||
toc: true
|
toc: true
|
||||||
|
|
||||||
comments:
|
comments:
|
||||||
# Global switch for the post comment system. Keeping it empty means disabled.
|
# Global switch for the post-comment system. Keeping it empty means disabled.
|
||||||
provider: # [disqus | utterances | giscus]
|
provider: # [disqus | utterances | giscus]
|
||||||
# The provider options are as follows:
|
# The provider options are as follows:
|
||||||
disqus:
|
disqus:
|
||||||
@ -136,9 +138,9 @@ assets:
|
|||||||
env: # [development | production]
|
env: # [development | production]
|
||||||
|
|
||||||
pwa:
|
pwa:
|
||||||
enabled: true # the option for PWA feature (installable)
|
enabled: true # The option for PWA feature (installable)
|
||||||
cache:
|
cache:
|
||||||
enabled: true # the option for PWA offline cache
|
enabled: true # The option for PWA offline cache
|
||||||
# Paths defined here will be excluded from the PWA cache.
|
# Paths defined here will be excluded from the PWA cache.
|
||||||
# Usually its value is the `baseurl` of another website that
|
# Usually its value is the `baseurl` of another website that
|
||||||
# shares the same domain name as the current website.
|
# shares the same domain name as the current website.
|
||||||
@ -190,10 +192,6 @@ defaults:
|
|||||||
values:
|
values:
|
||||||
layout: page
|
layout: page
|
||||||
permalink: /:title/
|
permalink: /:title/
|
||||||
- scope:
|
|
||||||
path: assets/js/dist
|
|
||||||
values:
|
|
||||||
swcache: true
|
|
||||||
|
|
||||||
sass:
|
sass:
|
||||||
style: compressed
|
style: compressed
|
||||||
@ -214,8 +212,9 @@ exclude:
|
|||||||
- tools
|
- tools
|
||||||
- README.md
|
- README.md
|
||||||
- LICENSE
|
- LICENSE
|
||||||
|
- purgecss.js
|
||||||
- "*.config.js"
|
- "*.config.js"
|
||||||
- package*.json
|
- "package*.json"
|
||||||
|
|
||||||
jekyll-archives:
|
jekyll-archives:
|
||||||
enabled: [categories, tags]
|
enabled: [categories, tags]
|
||||||
|
@ -26,3 +26,15 @@
|
|||||||
# - type: stack-overflow
|
# - type: stack-overflow
|
||||||
# icon: 'fab fa-stack-overflow'
|
# icon: 'fab fa-stack-overflow'
|
||||||
# url: '' # Fill with your stackoverflow homepage
|
# url: '' # Fill with your stackoverflow homepage
|
||||||
|
#
|
||||||
|
# - type: bluesky
|
||||||
|
# icon: 'fa-brands fa-bluesky'
|
||||||
|
# url: '' # Fill with your Bluesky profile link
|
||||||
|
#
|
||||||
|
# - type: reddit
|
||||||
|
# icon: 'fa-brands fa-reddit'
|
||||||
|
# url: '' # Fill with your Reddit profile link
|
||||||
|
#
|
||||||
|
# - type: threads
|
||||||
|
# icon: 'fa-brands fa-threads'
|
||||||
|
# url: '' # Fill with your Threads profile link
|
||||||
|
@ -43,7 +43,7 @@ copyright:
|
|||||||
meta: باستخدام :PLATFORM السمة :THEME
|
meta: باستخدام :PLATFORM السمة :THEME
|
||||||
|
|
||||||
not_found:
|
not_found:
|
||||||
statment: عذرا, الرابط التالي غير صالح أو انه يشير إلى صفحة غير موجودة.
|
statement: عذرا, الرابط التالي غير صالح أو انه يشير إلى صفحة غير موجودة.
|
||||||
|
|
||||||
notification:
|
notification:
|
||||||
update_found: يتوفر اصدار جديد للمحتوى.
|
update_found: يتوفر اصدار جديد للمحتوى.
|
||||||
|
@ -43,7 +43,7 @@ copyright:
|
|||||||
meta: Създадено чрез :PLATFORM и :THEME тема
|
meta: Създадено чрез :PLATFORM и :THEME тема
|
||||||
|
|
||||||
not_found:
|
not_found:
|
||||||
statment: Съжалявам, но на този URL адрес няма налично съдържание.
|
statement: Съжалявам, но на този URL адрес няма налично съдържание.
|
||||||
|
|
||||||
notification:
|
notification:
|
||||||
update_found: Налична е нова версия на съдържанието.
|
update_found: Налична е нова версия на съдържанието.
|
||||||
|
84
_data/locales/ca-ES.yml
Normal file
84
_data/locales/ca-ES.yml
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
# The layout text of site
|
||||||
|
|
||||||
|
# ----- Commons label -----
|
||||||
|
|
||||||
|
layout:
|
||||||
|
post: Entrada
|
||||||
|
category: Categoria
|
||||||
|
tag: Etiqueta
|
||||||
|
|
||||||
|
# The tabs of sidebar
|
||||||
|
tabs:
|
||||||
|
# format: <filename_without_extension>: <value>
|
||||||
|
home: Inici
|
||||||
|
categories: Categories
|
||||||
|
tags: Etiquetes
|
||||||
|
archives: Arxiu
|
||||||
|
about: Sobre
|
||||||
|
|
||||||
|
# the text displayed in the search bar & search results
|
||||||
|
search:
|
||||||
|
hint: Cercar
|
||||||
|
cancel: Cancel·lar
|
||||||
|
no_results: Ups! No s'han trobat resultats.
|
||||||
|
|
||||||
|
panel:
|
||||||
|
lastmod: Actualitzat recentment
|
||||||
|
trending_tags: Etiquetes populars
|
||||||
|
toc: Taula de continguts
|
||||||
|
|
||||||
|
copyright:
|
||||||
|
# Shown at the bottom of the post
|
||||||
|
license:
|
||||||
|
template: Aquesta entrada està llicenciada sota :LICENSE_NAME per l'autor.
|
||||||
|
name: CC BY 4.0
|
||||||
|
link: https://creativecommons.org/licenses/by/4.0/
|
||||||
|
|
||||||
|
# Displayed in the footer
|
||||||
|
brief: Alguns drets reservats.
|
||||||
|
verbose: >-
|
||||||
|
Excepte que s'indiqui explícitament, les entrades d'aquest blog estan llicenciades
|
||||||
|
sota la llicència Creative Commons Attribution 4.0 International (CC BY 4.0) per l'autor.
|
||||||
|
|
||||||
|
meta: Fet amb :PLATFORM utilitzant el tema :THEME
|
||||||
|
|
||||||
|
not_found:
|
||||||
|
statement: Ho sentim, hem perdut aquesta URL o apunta a alguna cosa que no existeix.
|
||||||
|
|
||||||
|
notification:
|
||||||
|
update_found: Hi ha una nova versió de contingut disponible.
|
||||||
|
update: Actualitzar
|
||||||
|
|
||||||
|
# ----- Posts related labels -----
|
||||||
|
|
||||||
|
post:
|
||||||
|
written_by: Per
|
||||||
|
posted: Publicat
|
||||||
|
updated: Actualitzat
|
||||||
|
words: paraules
|
||||||
|
pageview_measure: visites
|
||||||
|
read_time:
|
||||||
|
unit: min
|
||||||
|
prompt: " de lectura"
|
||||||
|
relate_posts: Entrades relacionades
|
||||||
|
share: Compartir
|
||||||
|
button:
|
||||||
|
next: Següent
|
||||||
|
previous: Anterior
|
||||||
|
copy_code:
|
||||||
|
succeed: Copiat!
|
||||||
|
share_link:
|
||||||
|
title: Copiar enllaç
|
||||||
|
succeed: Enllaç copiat!
|
||||||
|
|
||||||
|
# Date time format.
|
||||||
|
# See: <http://strftime.net/>, <https://day.js.org/docs/en/display/format>
|
||||||
|
df:
|
||||||
|
post:
|
||||||
|
strftime: "%Y/%m/%d"
|
||||||
|
dayjs: "YYYY/MM/DD"
|
||||||
|
|
||||||
|
# categories page
|
||||||
|
categories:
|
||||||
|
category_measure: categories
|
||||||
|
post_measure: entrades
|
@ -43,7 +43,7 @@ copyright:
|
|||||||
meta: Použití :PLATFORM s motivem :THEME
|
meta: Použití :PLATFORM s motivem :THEME
|
||||||
|
|
||||||
not_found:
|
not_found:
|
||||||
statment: Omlouváme se, adresu URL jsme špatně umístili nebo odkazuje na něco, co neexistuje.
|
statement: Omlouváme se, adresu URL jsme špatně umístili nebo odkazuje na něco, co neexistuje.
|
||||||
|
|
||||||
notification:
|
notification:
|
||||||
update_found: Je k dispozici nová verze obsahu.
|
update_found: Je k dispozici nová verze obsahu.
|
||||||
|
86
_data/locales/da-DK.yml
Normal file
86
_data/locales/da-DK.yml
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
# The layout text of site
|
||||||
|
|
||||||
|
# ----- Commons label -----
|
||||||
|
|
||||||
|
layout:
|
||||||
|
post: Opslag
|
||||||
|
category: Kategori
|
||||||
|
tag: Tag
|
||||||
|
|
||||||
|
# The tabs of sidebar
|
||||||
|
tabs:
|
||||||
|
# format: <filename_without_extension>: <value>
|
||||||
|
home: Hjem
|
||||||
|
categories: Kategorier
|
||||||
|
tags: Tags
|
||||||
|
archives: Arkiv
|
||||||
|
about: Om siden
|
||||||
|
|
||||||
|
# the text displayed in the search bar & search results
|
||||||
|
search:
|
||||||
|
hint: søg
|
||||||
|
cancel: Afbryd
|
||||||
|
no_results: Ups! Ingen resultater fundet.
|
||||||
|
|
||||||
|
panel:
|
||||||
|
lastmod: Senest opdateret
|
||||||
|
trending_tags: Populære tags
|
||||||
|
toc: Indhold
|
||||||
|
|
||||||
|
copyright:
|
||||||
|
# Shown at the bottom of the post
|
||||||
|
license:
|
||||||
|
template: Dette opslag er licenseret under :LICENSE_NAME af forfatteren.
|
||||||
|
name: CC BY 4.0
|
||||||
|
link: https://creativecommons.org/licenses/by/4.0/
|
||||||
|
|
||||||
|
# Displayed in the footer
|
||||||
|
brief: Nogle rettigheder forbeholdes.
|
||||||
|
verbose: >-
|
||||||
|
Medmindre andet er angivet, er opslag på denne side beskyttet
|
||||||
|
under Creative Commons Attribution 4.0 International (CC BY 4.0) licensen af forfatteren.
|
||||||
|
|
||||||
|
# meta: Using the :THEME theme for :PLATFORM.
|
||||||
|
|
||||||
|
not_found:
|
||||||
|
statement: Beklager, vi har malpaceret denne URL, eller den peger på et sted, som ikke findes.
|
||||||
|
|
||||||
|
notification:
|
||||||
|
update_found: En ny version af indholdet er fundet!
|
||||||
|
update: Opdater
|
||||||
|
|
||||||
|
# ----- Posts related labels -----
|
||||||
|
|
||||||
|
post:
|
||||||
|
written_by: Af
|
||||||
|
posted: Udgivet
|
||||||
|
updated: Opdateret
|
||||||
|
words: ord
|
||||||
|
pageview_measure: visninger
|
||||||
|
read_time:
|
||||||
|
unit: min
|
||||||
|
prompt: læsetid
|
||||||
|
relate_posts: Læs videre
|
||||||
|
share: Del
|
||||||
|
button:
|
||||||
|
next: Nyere
|
||||||
|
previous: Ældre
|
||||||
|
copy_code:
|
||||||
|
succeed: Kopieret!
|
||||||
|
share_link:
|
||||||
|
title: Kopier link
|
||||||
|
succeed: Link kopieret!
|
||||||
|
|
||||||
|
# Date time format.
|
||||||
|
# See: <http://strftime.net/>, <https://day.js.org/docs/en/display/format>
|
||||||
|
df:
|
||||||
|
post:
|
||||||
|
strftime: "%Y/%m/%d"
|
||||||
|
dayjs: "YYYY/MM/DD"
|
||||||
|
|
||||||
|
# categories page
|
||||||
|
categories:
|
||||||
|
category_measure:
|
||||||
|
singular: kategori
|
||||||
|
plural: kategorier
|
||||||
|
post_measure: opslag
|
@ -42,7 +42,7 @@ copyright:
|
|||||||
meta: Powered by :PLATFORM with :THEME theme
|
meta: Powered by :PLATFORM with :THEME theme
|
||||||
|
|
||||||
not_found:
|
not_found:
|
||||||
statment: Entschuldigung, dieser Link verweist auf keine vorhandene Ressource.
|
statement: Entschuldigung, dieser Link verweist auf keine vorhandene Ressource.
|
||||||
|
|
||||||
notification:
|
notification:
|
||||||
update_found: Eine neue Version ist verfügbar.
|
update_found: Eine neue Version ist verfügbar.
|
||||||
@ -76,7 +76,7 @@ df:
|
|||||||
post:
|
post:
|
||||||
strftime: "%d.%m.%Y"
|
strftime: "%d.%m.%Y"
|
||||||
dayjs: "DD.MM.YYYY"
|
dayjs: "DD.MM.YYYY"
|
||||||
|
|
||||||
# categories page
|
# categories page
|
||||||
categories:
|
categories:
|
||||||
category_measure:
|
category_measure:
|
||||||
|
90
_data/locales/dv‑MV.yml
Normal file
90
_data/locales/dv‑MV.yml
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
# The layout text of site in Dhivehi (Maldives)
|
||||||
|
|
||||||
|
# ----- 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:
|
||||||
|
statement: ސޯރީ، މި ޔޫ.އާރއެލް މަށެވެއްނެ ނުވަތަ އެކަމެއް ނުވެއެވެ.
|
||||||
|
|
||||||
|
notification:
|
||||||
|
update_found: ޔޫ ވާރޝަން ހުރިހާ.
|
||||||
|
update: އޮޕްޑޭޓް
|
||||||
|
|
||||||
|
# ----- Posts related labels -----
|
||||||
|
|
||||||
|
post:
|
||||||
|
written_by: ލެކްއޯލް
|
||||||
|
posted: ޕޯސްޓްކުރެވި
|
||||||
|
updated: އޮޕްޑޭޓްކުރެވި
|
||||||
|
words: ބަސް
|
||||||
|
pageview_measure: ބަނޑުކުރާ
|
||||||
|
read_time:
|
||||||
|
unit: މިނެޓް
|
||||||
|
prompt: އިސްކާރު
|
||||||
|
relate_posts: އެއްޗެހި ފަހުރަށްދަން
|
||||||
|
share: ސެއާރް
|
||||||
|
button:
|
||||||
|
next: އަދާވަނަ
|
||||||
|
previous: ކޮނޯނި
|
||||||
|
copy_code:
|
||||||
|
succeed: ކޮޕީ ކުރެވި!
|
||||||
|
share_link:
|
||||||
|
title: ލިންކް ކޮޕީ ކުރު
|
||||||
|
succeed: ލިންކް ހަދަންކުރެވި!
|
||||||
|
|
||||||
|
# Date time format.
|
||||||
|
# See: <http://strftime.net/>, <https://day.js.org/docs/en/display/format>
|
||||||
|
df:
|
||||||
|
post:
|
||||||
|
strftime: "%b %e, %Y"
|
||||||
|
dayjs: "ll"
|
||||||
|
archives:
|
||||||
|
strftime: "%b"
|
||||||
|
dayjs: "MMM"
|
||||||
|
|
||||||
|
categories:
|
||||||
|
category_measure:
|
||||||
|
singular: ނަތީޖާ
|
||||||
|
plural: ނަތީޖާތައް
|
||||||
|
post_measure:
|
||||||
|
singular: ޕޯސްޓް
|
||||||
|
plural: ޕޯސްޓްތައް
|
@ -43,7 +43,7 @@ copyright:
|
|||||||
meta: Αξιοποιώντας την :PLATFORM theme :THEME
|
meta: Αξιοποιώντας την :PLATFORM theme :THEME
|
||||||
|
|
||||||
not_found:
|
not_found:
|
||||||
statment: Συγνώμη, έχουμε τοποθετήσει λάθος αυτήν την διεύθυνση URL ή υποδεικνύει κάτι που δεν υπάρχει.
|
statement: Συγνώμη, έχουμε τοποθετήσει λάθος αυτήν την διεύθυνση URL ή υποδεικνύει κάτι που δεν υπάρχει.
|
||||||
|
|
||||||
notification:
|
notification:
|
||||||
update_found: Υπάρχει διαθέσιμη μια νέα έκδοση του περιεχομένου.
|
update_found: Υπάρχει διαθέσιμη μια νέα έκδοση του περιεχομένου.
|
||||||
|
@ -43,7 +43,7 @@ copyright:
|
|||||||
meta: Using the :THEME theme for :PLATFORM.
|
meta: Using the :THEME theme for :PLATFORM.
|
||||||
|
|
||||||
not_found:
|
not_found:
|
||||||
statment: Sorry, we've misplaced that URL or it's pointing to something that doesn't exist.
|
statement: Sorry, we've misplaced that URL or it's pointing to something that doesn't exist.
|
||||||
|
|
||||||
notification:
|
notification:
|
||||||
update_found: A new version of content is available.
|
update_found: A new version of content is available.
|
||||||
|
@ -43,7 +43,7 @@ copyright:
|
|||||||
meta: Hecho con :PLATFORM usando el tema :THEME
|
meta: Hecho con :PLATFORM usando el tema :THEME
|
||||||
|
|
||||||
not_found:
|
not_found:
|
||||||
statment: Lo sentimos, hemos perdido esa URL o apunta a algo que no existe.
|
statement: Lo sentimos, hemos perdido esa URL o apunta a algo que no existe.
|
||||||
|
|
||||||
notification:
|
notification:
|
||||||
update_found: Hay una nueva versión de contenido disponible.
|
update_found: Hay una nueva versión de contenido disponible.
|
||||||
|
91
_data/locales/fa-IR.yml
Normal file
91
_data/locales/fa-IR.yml
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
# The layout text of site
|
||||||
|
|
||||||
|
# ----- Commons label -----
|
||||||
|
|
||||||
|
layout:
|
||||||
|
post: پست
|
||||||
|
category: دستهبندی
|
||||||
|
tag: برچسب
|
||||||
|
|
||||||
|
# The tabs of sidebar
|
||||||
|
tabs:
|
||||||
|
# format: <filename_without_extension>: <value>
|
||||||
|
home: خانه
|
||||||
|
categories: دستهبندیها
|
||||||
|
tags: برچسبها
|
||||||
|
archives: آرشیو
|
||||||
|
about: درباره
|
||||||
|
|
||||||
|
# the text displayed in the search bar & search results
|
||||||
|
search:
|
||||||
|
hint: جستجو
|
||||||
|
cancel: لغو
|
||||||
|
no_results: متأسفیم! هیچ نتیجهای یافت نشد.
|
||||||
|
|
||||||
|
panel:
|
||||||
|
lastmod: آخرین بهروزرسانی
|
||||||
|
trending_tags: برچسبهای پرطرفدار
|
||||||
|
toc: فهرست مطالب
|
||||||
|
|
||||||
|
copyright:
|
||||||
|
# Shown at the bottom of the post
|
||||||
|
license:
|
||||||
|
template: این پست تحت مجوز :LICENSE_NAME توسط نویسنده منتشر شده است.
|
||||||
|
name: CC BY 4.0
|
||||||
|
link: https://creativecommons.org/licenses/by/4.0/
|
||||||
|
|
||||||
|
# Displayed in the footer
|
||||||
|
brief: برخی حقوق محفوظ است.
|
||||||
|
verbose: >-
|
||||||
|
بهجز مواردی که خلاف آن ذکر شده باشد، محتوای پستهای این وبلاگ
|
||||||
|
تحت مجوز Creative Commons Attribution 4.0 International (CC BY 4.0) توسط نویسنده منتشر شدهاند.
|
||||||
|
|
||||||
|
meta: با استفاده از قالب :THEME برای :PLATFORM
|
||||||
|
|
||||||
|
not_found:
|
||||||
|
statement: متأسفیم، لینک زیر معتبر نیست یا به صفحهای که وجود ندارد اشاره میکند.
|
||||||
|
|
||||||
|
notification:
|
||||||
|
update_found: نسخه جدیدی از محتوا موجود است.
|
||||||
|
update: بهروزرسانی
|
||||||
|
|
||||||
|
# ----- Posts related labels -----
|
||||||
|
|
||||||
|
post:
|
||||||
|
written_by: نوشته شده توسط
|
||||||
|
posted: منتشر شده
|
||||||
|
updated: بهروزرسانی شده
|
||||||
|
words: کلمه
|
||||||
|
pageview_measure: بازدید
|
||||||
|
read_time:
|
||||||
|
unit: "دقیقه "
|
||||||
|
prompt: " زمان مطالعه"
|
||||||
|
relate_posts: بیشتر بخوانید
|
||||||
|
share: اشتراکگذاری
|
||||||
|
button:
|
||||||
|
next: جدیدتر
|
||||||
|
previous: قدیمیتر
|
||||||
|
copy_code:
|
||||||
|
succeed: کپی شد!
|
||||||
|
share_link:
|
||||||
|
title: کپی لینک
|
||||||
|
succeed: لینک با موفقیت کپی شد!
|
||||||
|
|
||||||
|
# Date time format.
|
||||||
|
# See: <http://strftime.net/>, <https://day.js.org/docs/en/display/format>
|
||||||
|
df:
|
||||||
|
post:
|
||||||
|
strftime: "%b %e, %Y"
|
||||||
|
dayjs: "ll"
|
||||||
|
archives:
|
||||||
|
strftime: "%b"
|
||||||
|
dayjs: "MMM"
|
||||||
|
|
||||||
|
# categories page
|
||||||
|
categories:
|
||||||
|
category_measure:
|
||||||
|
singular: دستهبندی
|
||||||
|
plural: دستهبندی
|
||||||
|
post_measure:
|
||||||
|
singular: پست
|
||||||
|
plural: پست
|
@ -42,7 +42,7 @@ copyright:
|
|||||||
meta: Käytetään :PLATFORM iä Teema :THEME
|
meta: Käytetään :PLATFORM iä Teema :THEME
|
||||||
|
|
||||||
not_found:
|
not_found:
|
||||||
statment: Valitettavasti tällä URL-osoitteella ei ole saatavilla sisältöä.
|
statement: Valitettavasti tällä URL-osoitteella ei ole saatavilla sisältöä.
|
||||||
|
|
||||||
notification:
|
notification:
|
||||||
update_found: Uusi versio sisällöstä on saatavilla.
|
update_found: Uusi versio sisällöstä on saatavilla.
|
||||||
|
@ -14,7 +14,7 @@ tabs:
|
|||||||
categories: Catégories
|
categories: Catégories
|
||||||
tags: Tags
|
tags: Tags
|
||||||
archives: Archives
|
archives: Archives
|
||||||
about: A propos de
|
about: À propos
|
||||||
|
|
||||||
# the text displayed in the search bar & search results
|
# the text displayed in the search bar & search results
|
||||||
search:
|
search:
|
||||||
@ -32,18 +32,18 @@ copyright:
|
|||||||
license:
|
license:
|
||||||
template: Cet article est sous licence :LICENSE_NAME par l'auteur.
|
template: Cet article est sous licence :LICENSE_NAME par l'auteur.
|
||||||
name: CC BY 4.0
|
name: CC BY 4.0
|
||||||
link: https://creativecommons.org/licenses/by/4.0/
|
link: https://creativecommons.org/licenses/by/4.0/deed.fr
|
||||||
|
|
||||||
# Displayed in the footer
|
# Displayed in the footer
|
||||||
brief: Certains droits réservés.
|
brief: Certains droits réservés.
|
||||||
verbose: >-
|
verbose: >-
|
||||||
Sauf mention contraire, les articles de ce site sont publiés sous licence
|
Sauf mention contraire, les articles de ce site sont publiés
|
||||||
sous la licence Creative Commons Attribution 4.0 International (CC BY 4.0) par l'auteur.
|
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
|
meta: Propulsé par :PLATFORM avec le thème :THEME
|
||||||
|
|
||||||
not_found:
|
not_found:
|
||||||
statment: Désolé, nous avons égaré cette URL ou elle pointe vers quelque chose qui n'existe pas.
|
statement: Désolé, nous avons égaré cette URL ou elle pointe vers quelque chose qui n'existe pas.
|
||||||
|
|
||||||
notification:
|
notification:
|
||||||
update_found: Une nouvelle version du contenu est disponible.
|
update_found: Une nouvelle version du contenu est disponible.
|
||||||
|
@ -14,24 +14,23 @@ tabs:
|
|||||||
categories: Kategóriák
|
categories: Kategóriák
|
||||||
tags: Címkék
|
tags: Címkék
|
||||||
archives: Archívum
|
archives: Archívum
|
||||||
about: Rólam
|
about: Bemutatkozás
|
||||||
|
|
||||||
# the text displayed in the search bar & search results
|
# the text displayed in the search bar & search results
|
||||||
search:
|
search:
|
||||||
hint: keresés
|
hint: keresés
|
||||||
cancel: Mégse
|
cancel: Mégse
|
||||||
no_results: Oops! Nincs találat a keresésre.
|
no_results: Hoppá! Nincs találat a keresésre.
|
||||||
|
|
||||||
panel:
|
panel:
|
||||||
lastmod: Legutóbb frissítve
|
lastmod: Legutóbb frissítve
|
||||||
trending_tags: Népszerű Címkék
|
trending_tags: Népszerű Címkék
|
||||||
toc: Tartalom
|
toc: Tartalom
|
||||||
links: Blog linkek
|
|
||||||
|
|
||||||
copyright:
|
copyright:
|
||||||
# Shown at the bottom of the post
|
# Shown at the bottom of the post
|
||||||
license:
|
license:
|
||||||
template: A bejegyzés :LICENSE_NAME licenccel rendelkezik.
|
template: A bejegyzést a szerző :LICENSE_NAME licenc alatt engedélyezte.
|
||||||
name: CC BY 4.0
|
name: CC BY 4.0
|
||||||
link: https://creativecommons.org/licenses/by/4.0/
|
link: https://creativecommons.org/licenses/by/4.0/
|
||||||
|
|
||||||
@ -42,10 +41,10 @@ copyright:
|
|||||||
Creative Commons Attribution 4.0 International (CC BY 4.0) licenccel rendelkeznek,
|
Creative Commons Attribution 4.0 International (CC BY 4.0) licenccel rendelkeznek,
|
||||||
hacsak másképp nincs jelezve.
|
hacsak másképp nincs jelezve.
|
||||||
|
|
||||||
meta: Készítve :PLATFORM motorral :THEME témával
|
meta: Készítve :THEME témával a :PLATFORM platformra.
|
||||||
|
|
||||||
not_found:
|
not_found:
|
||||||
statment: Sajnáljuk, az URL-t rosszul helyeztük el, vagy valami nem létezőre mutat.
|
statement: Sajnáljuk, az URL-t rosszul helyeztük el, vagy valami nem létezőre mutat.
|
||||||
|
|
||||||
notification:
|
notification:
|
||||||
update_found: Elérhető a tartalom új verziója.
|
update_found: Elérhető a tartalom új verziója.
|
||||||
@ -73,7 +72,21 @@ post:
|
|||||||
title: Link másolása
|
title: Link másolása
|
||||||
succeed: Link sikeresen másolva!
|
succeed: Link sikeresen másolva!
|
||||||
|
|
||||||
|
# Date time format.
|
||||||
|
# See: <http://strftime.net/>, <https://day.js.org/docs/en/display/format>
|
||||||
|
df:
|
||||||
|
post:
|
||||||
|
strftime: "%Y. %B. %e."
|
||||||
|
dayjs: "YYYY. MMMM D."
|
||||||
|
archives:
|
||||||
|
strftime: "%B"
|
||||||
|
dayjs: "MMM"
|
||||||
|
|
||||||
# categories page
|
# categories page
|
||||||
categories:
|
categories:
|
||||||
category_measure: kategória
|
category_measure:
|
||||||
post_measure: bejegyzés
|
singular: kategória
|
||||||
|
plural: kategória
|
||||||
|
post_measure:
|
||||||
|
singular: bejegyzés
|
||||||
|
plural: bejegyzés
|
||||||
|
@ -43,7 +43,7 @@ copyright:
|
|||||||
meta: Didukung oleh :PLATFORM dengan tema :THEME
|
meta: Didukung oleh :PLATFORM dengan tema :THEME
|
||||||
|
|
||||||
not_found:
|
not_found:
|
||||||
statment: Maaf, kami gagal menemukan URL itu atau memang mengarah ke sesuatu yang tidak ada.
|
statement: Maaf, kami gagal menemukan URL itu atau memang mengarah ke sesuatu yang tidak ada.
|
||||||
|
|
||||||
notification:
|
notification:
|
||||||
update_found: Versi konten baru tersedia.
|
update_found: Versi konten baru tersedia.
|
||||||
|
@ -42,7 +42,7 @@ copyright:
|
|||||||
|
|
||||||
meta: Servizio offerto da :PLATFORM con tema :THEME
|
meta: Servizio offerto da :PLATFORM con tema :THEME
|
||||||
not_found:
|
not_found:
|
||||||
statment: Ci scusiamo, non è stato possibile trovare l'URL in questione. Potrebbe puntare ad una pagina non esistente.
|
statement: Ci scusiamo, non è stato possibile trovare l'URL in questione. Potrebbe puntare ad una pagina non esistente.
|
||||||
|
|
||||||
notification:
|
notification:
|
||||||
update_found: Nuova versione del contenuto disponibile.
|
update_found: Nuova versione del contenuto disponibile.
|
||||||
|
84
_data/locales/ja-JP.yml
Normal file
84
_data/locales/ja-JP.yml
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
# 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: Some rights reserved.
|
||||||
|
verbose: >-
|
||||||
|
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.
|
||||||
|
|
||||||
|
meta: :PLATFORM 用の :THEME を使用しています。
|
||||||
|
|
||||||
|
not_found:
|
||||||
|
statement: このURLは存在しないものを指し示しています。
|
||||||
|
|
||||||
|
notification:
|
||||||
|
update_found: 新しいバージョンが利用可能です。
|
||||||
|
update: 更新
|
||||||
|
|
||||||
|
# ----- Posts related labels -----
|
||||||
|
|
||||||
|
post:
|
||||||
|
written_by: 投稿者
|
||||||
|
posted: 投稿日
|
||||||
|
updated: 更新日
|
||||||
|
words: 語
|
||||||
|
pageview_measure: 回閲覧
|
||||||
|
read_time:
|
||||||
|
unit: 分
|
||||||
|
prompt: で読めます
|
||||||
|
relate_posts: さらに読む
|
||||||
|
share: シェア
|
||||||
|
button:
|
||||||
|
next: 次
|
||||||
|
previous: 前
|
||||||
|
copy_code:
|
||||||
|
succeed: コピーしました
|
||||||
|
share_link:
|
||||||
|
title: リンクをコピー
|
||||||
|
succeed: リンクをコピーしました
|
||||||
|
|
||||||
|
# Date time format.
|
||||||
|
# See: <http://strftime.net/>, <https://day.js.org/docs/en/display/format>
|
||||||
|
df:
|
||||||
|
post:
|
||||||
|
strftime: "%Y/%m/%d"
|
||||||
|
dayjs: "YYYY/MM/DD"
|
||||||
|
|
||||||
|
# categories page
|
||||||
|
categories:
|
||||||
|
category_measure: カテゴリー
|
||||||
|
post_measure: 投稿
|
@ -43,7 +43,7 @@ copyright:
|
|||||||
meta: Powered by :PLATFORM with :THEME theme
|
meta: Powered by :PLATFORM with :THEME theme
|
||||||
|
|
||||||
not_found:
|
not_found:
|
||||||
statment: 해당 URL은 존재하지 않습니다.
|
statement: 해당 URL은 존재하지 않습니다.
|
||||||
|
|
||||||
notification:
|
notification:
|
||||||
update_found: 새 버전의 콘텐츠를 사용할 수 있습니다.
|
update_found: 새 버전의 콘텐츠를 사용할 수 있습니다.
|
||||||
|
91
_data/locales/ku-IQ.yml
Normal file
91
_data/locales/ku-IQ.yml
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
# The layout text of site in Kurdish (Sorani)
|
||||||
|
|
||||||
|
# ----- 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:
|
||||||
|
statement: ببوورە، ئەم بەستەرە نادۆزرێتەوە یان ئاماژە بە شتێک دەکات کە بوونی نییە.
|
||||||
|
|
||||||
|
notification:
|
||||||
|
update_found: وەشانێکی نوێی ناوەڕۆک بەردەستە.
|
||||||
|
update: نوێکردنەوە
|
||||||
|
|
||||||
|
# ----- Posts related labels -----
|
||||||
|
|
||||||
|
post:
|
||||||
|
written_by: نووسەر
|
||||||
|
posted: بڵاوکراوەتەوە
|
||||||
|
updated: نوێکراوەتەوە
|
||||||
|
words: وشە
|
||||||
|
pageview_measure: بینین
|
||||||
|
read_time:
|
||||||
|
unit: خولەک
|
||||||
|
prompt: خوێندنەوە
|
||||||
|
relate_posts: بابەتی پەیوەندیدار
|
||||||
|
share: بڵاوکردنەوە
|
||||||
|
button:
|
||||||
|
next: نوێتر
|
||||||
|
previous: کۆنتر
|
||||||
|
copy_code:
|
||||||
|
succeed: کۆپی کرا!
|
||||||
|
share_link:
|
||||||
|
title: کۆپی بەستەر
|
||||||
|
succeed: بەستەر بە سەرکەوتوویی کۆپی کرا!
|
||||||
|
|
||||||
|
# Date time format.
|
||||||
|
# See: <http://strftime.net/>, <https://day.js.org/docs/en/display/format>
|
||||||
|
df:
|
||||||
|
post:
|
||||||
|
strftime: "%d %b, %Y"
|
||||||
|
dayjs: "DD MMM, YYYY"
|
||||||
|
archives:
|
||||||
|
strftime: "%b"
|
||||||
|
dayjs: "MMM"
|
||||||
|
|
||||||
|
# categories page
|
||||||
|
categories:
|
||||||
|
category_measure:
|
||||||
|
singular: هاوپۆل
|
||||||
|
plural: هاوپۆل
|
||||||
|
post_measure:
|
||||||
|
singular: بابەت
|
||||||
|
plural: بابەت
|
@ -43,7 +43,7 @@ copyright:
|
|||||||
meta: Powered by :PLATFORM with :THEME theme
|
meta: Powered by :PLATFORM with :THEME theme
|
||||||
|
|
||||||
not_found:
|
not_found:
|
||||||
statment: ဝမ်းနည်းပါသည်၊ ကျွန်ုပ်တို့သည် အဆိုပါ URL ကို မှားယွင်းစွာ နေရာချထားခြင်း သို့မဟုတ် ၎င်းသည် မရှိသောအရာကို ညွှန်ပြနေပါသည်။
|
statement: ဝမ်းနည်းပါသည်၊ ကျွန်ုပ်တို့သည် အဆိုပါ URL ကို မှားယွင်းစွာ နေရာချထားခြင်း သို့မဟုတ် ၎င်းသည် မရှိသောအရာကို ညွှန်ပြနေပါသည်။
|
||||||
|
|
||||||
notification:
|
notification:
|
||||||
update_found: အကြောင်းအရာဗားရှင်းအသစ်ကို ရနိုင်ပါပြီ။
|
update_found: အကြောင်းအရာဗားရှင်းအသစ်ကို ရနိုင်ပါပြီ။
|
||||||
|
90
_data/locales/nl-NL.yml
Normal file
90
_data/locales/nl-NL.yml
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
# The layout text of site
|
||||||
|
|
||||||
|
# ----- Commons label -----
|
||||||
|
|
||||||
|
layout:
|
||||||
|
post: Post
|
||||||
|
category: Categorie
|
||||||
|
tag: Tag
|
||||||
|
|
||||||
|
# The tabs of sidebar
|
||||||
|
tabs:
|
||||||
|
# format: <filename_without_extension>: <value>
|
||||||
|
home: Startpagina
|
||||||
|
categories: Categorieën
|
||||||
|
tags: Tags
|
||||||
|
archives: Archief
|
||||||
|
about: Over
|
||||||
|
|
||||||
|
# the text displayed in the search bar & search results
|
||||||
|
search:
|
||||||
|
hint: Zoek
|
||||||
|
cancel: Annuleer
|
||||||
|
no_results: Oops! Geen resultaat gevonden.
|
||||||
|
|
||||||
|
panel:
|
||||||
|
lastmod: Recent Bijgewerkt
|
||||||
|
trending_tags: Trending Tags
|
||||||
|
toc: Inhoud
|
||||||
|
|
||||||
|
copyright:
|
||||||
|
# Shown at the bottom of the post
|
||||||
|
license:
|
||||||
|
template: Alle posts zijn onder :LICENSE_NAME gepubliceerd door de auteur.
|
||||||
|
name: CC BY 4.0
|
||||||
|
link: https://creativecommons.org/licenses/by/4.0/
|
||||||
|
|
||||||
|
# Displayed in the footer
|
||||||
|
brief: Sommige rechten voorbehouden.
|
||||||
|
verbose: >-
|
||||||
|
Tenzij anders vermeld, alle posts zijn onder de
|
||||||
|
Creative Commons Attribution 4.0 International (CC BY 4.0) gepubliceerd door de auteur.
|
||||||
|
|
||||||
|
meta: Gebruikt :THEME
|
||||||
|
|
||||||
|
not_found:
|
||||||
|
statement: Sorry, we hebben de URL verkeerd geplaatst of hij verwijst naar iets dat niet bestaat.
|
||||||
|
|
||||||
|
notification:
|
||||||
|
update_found: Nieuwe versie van inhoud beschikbaar.
|
||||||
|
update: Update
|
||||||
|
|
||||||
|
# ----- Posts related labels -----
|
||||||
|
post:
|
||||||
|
written_by: Door
|
||||||
|
posted: Posted
|
||||||
|
updated: Bijgewerkt
|
||||||
|
words: woorden
|
||||||
|
pageview_measure: Gelezen
|
||||||
|
read_time:
|
||||||
|
unit: min
|
||||||
|
prompt: lees
|
||||||
|
relate_posts: Verder Lezen
|
||||||
|
share: Deel
|
||||||
|
button:
|
||||||
|
next: Volgende
|
||||||
|
previous: Vorige
|
||||||
|
copy_code:
|
||||||
|
succeed: Gekopieerd!
|
||||||
|
share_link:
|
||||||
|
title: Link kopiëren
|
||||||
|
succeed: Succesvol gekopieerd!
|
||||||
|
|
||||||
|
# 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: categorie
|
||||||
|
plural: categorieën
|
||||||
|
post_measure:
|
||||||
|
singular: post
|
||||||
|
plural: posts
|
90
_data/locales/ps‑AF.yml
Normal file
90
_data/locales/ps‑AF.yml
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
# The layout text of site in Pashto (Afghanistan)
|
||||||
|
|
||||||
|
# ----- Commons label -----
|
||||||
|
|
||||||
|
layout:
|
||||||
|
post: لیکنه
|
||||||
|
category: وېشنيزه
|
||||||
|
tag: ټګ
|
||||||
|
|
||||||
|
# The tabs of sidebar
|
||||||
|
tabs:
|
||||||
|
# format: <filename_without_extension>: <value>
|
||||||
|
home: کورپاڼه
|
||||||
|
categories: وېشنيزې
|
||||||
|
tags: ټګونه
|
||||||
|
archives: آرشيف
|
||||||
|
about: په اړه
|
||||||
|
|
||||||
|
# the text displayed in the search bar & search results
|
||||||
|
search:
|
||||||
|
hint: لټون
|
||||||
|
cancel: لغوه
|
||||||
|
no_results: ها! هېڅ پایله ونه موندل شوه.
|
||||||
|
|
||||||
|
panel:
|
||||||
|
lastmod: وروستی تازه
|
||||||
|
trending_tags: مشهور ټګونه
|
||||||
|
toc: منځپانګه
|
||||||
|
|
||||||
|
copyright:
|
||||||
|
# Shown at the bottom of the post
|
||||||
|
license:
|
||||||
|
template: دا لیکنه د :LICENSE_NAME جواز لاندې د لیکوال له خوا خپره شوې ده.
|
||||||
|
name: CC BY 4.0
|
||||||
|
link: https://creativecommons.org/licenses/by/4.0/
|
||||||
|
|
||||||
|
# Displayed in the footer
|
||||||
|
brief: ځینې حقونه خوندي دي.
|
||||||
|
verbose: >-
|
||||||
|
تر هغه ځایه چې بل ډول نه وي یاد شوي، د دې سایټ لیکنې
|
||||||
|
د لیکوال له خوا د کریټېو کامنز د انتساب 4.0 نړیوال (CC BY 4.0) جواز لاندې خپرېږي.
|
||||||
|
|
||||||
|
meta: د :PLATFORM لپاره د :THEME موضوع کاروي.
|
||||||
|
|
||||||
|
not_found:
|
||||||
|
statement: بښنه غواړو، دغه URL ناسم دی یا هغه څه ته اشاره کوي چې شتون نه لري.
|
||||||
|
|
||||||
|
notification:
|
||||||
|
update_found: نوې نسخه شتون لري.
|
||||||
|
update: تازه
|
||||||
|
|
||||||
|
# ----- Posts related labels -----
|
||||||
|
|
||||||
|
post:
|
||||||
|
written_by: لیکوال
|
||||||
|
posted: خپره شوې
|
||||||
|
updated: تازه شوې
|
||||||
|
words: کلمې
|
||||||
|
pageview_measure: کتنې
|
||||||
|
read_time:
|
||||||
|
unit: دقیقې
|
||||||
|
prompt: لوستل
|
||||||
|
relate_posts: نوره لوستنه
|
||||||
|
share: شریکول
|
||||||
|
button:
|
||||||
|
next: نوی
|
||||||
|
previous: زوړ
|
||||||
|
copy_code:
|
||||||
|
succeed: کاپي شو!
|
||||||
|
share_link:
|
||||||
|
title: لینک کاپي کړئ
|
||||||
|
succeed: لینک بریالي کاپي شو!
|
||||||
|
|
||||||
|
# Date time format.
|
||||||
|
# See: <http://strftime.net/>, <https://day.js.org/docs/en/display/format>
|
||||||
|
df:
|
||||||
|
post:
|
||||||
|
strftime: "%b %e, %Y"
|
||||||
|
dayjs: "ll"
|
||||||
|
archives:
|
||||||
|
strftime: "%b"
|
||||||
|
dayjs: "MMM"
|
||||||
|
|
||||||
|
categories:
|
||||||
|
category_measure:
|
||||||
|
singular: وېشنيزه
|
||||||
|
plural: وېشنيزې
|
||||||
|
post_measure:
|
||||||
|
singular: لیکنه
|
||||||
|
plural: لیکنې
|
@ -43,7 +43,7 @@ copyright:
|
|||||||
meta: Feito com :PLATFORM usando o tema :THEME
|
meta: Feito com :PLATFORM usando o tema :THEME
|
||||||
|
|
||||||
not_found:
|
not_found:
|
||||||
statment: Desculpe, a página não foi encontrada.
|
statement: Desculpe, a página não foi encontrada.
|
||||||
|
|
||||||
notification:
|
notification:
|
||||||
update_found: Uma nova versão do conteúdo está disponível.
|
update_found: Uma nova versão do conteúdo está disponível.
|
||||||
|
@ -42,7 +42,7 @@ copyright:
|
|||||||
meta: Использует тему :THEME для :PLATFORM
|
meta: Использует тему :THEME для :PLATFORM
|
||||||
|
|
||||||
not_found:
|
not_found:
|
||||||
statment: Извините, мы перепутали URL-адрес или он указывает на что-то несуществующее.
|
statement: Извините, мы перепутали URL-адрес или он указывает на что-то несуществующее.
|
||||||
|
|
||||||
notification:
|
notification:
|
||||||
update_found: Доступна новая версия контента.
|
update_found: Доступна новая версия контента.
|
||||||
@ -76,7 +76,7 @@ df:
|
|||||||
post:
|
post:
|
||||||
strftime: "%d.%m.%Y"
|
strftime: "%d.%m.%Y"
|
||||||
dayjs: "DD.MM.YYYY"
|
dayjs: "DD.MM.YYYY"
|
||||||
|
|
||||||
# categories page
|
# categories page
|
||||||
categories:
|
categories:
|
||||||
category_measure:
|
category_measure:
|
||||||
|
@ -43,7 +43,7 @@ copyright:
|
|||||||
meta: Uporabljena :PLATFORM tema :THEME #Using the :PLATFORM theme :THEME
|
meta: Uporabljena :PLATFORM tema :THEME #Using the :PLATFORM theme :THEME
|
||||||
|
|
||||||
not_found:
|
not_found:
|
||||||
statment: Oprostite, hiperpovezava je neustrezna ali vsebina ne obstajata. #Sorry, we've misplaced that URL or it's pointing to something that doesn't exist.
|
statement: Oprostite, hiperpovezava je neustrezna ali vsebina ne obstajata. #Sorry, we've misplaced that URL or it's pointing to something that doesn't exist.
|
||||||
|
|
||||||
notification:
|
notification:
|
||||||
update_found: Novejša različica vsebine je na voljo. #A new version of content is available.
|
update_found: Novejša različica vsebine je na voljo. #A new version of content is available.
|
||||||
|
@ -43,7 +43,7 @@ copyright:
|
|||||||
meta: Byggd med :PLATFORM och temat :THEME
|
meta: Byggd med :PLATFORM och temat :THEME
|
||||||
|
|
||||||
not_found:
|
not_found:
|
||||||
statment: Ursäkta, vi har tappat bort den här webbadressen eller så pekar den på något som inte längre finns.
|
statement: Ursäkta, vi har tappat bort den här webbadressen eller så pekar den på något som inte längre finns.
|
||||||
|
|
||||||
notification:
|
notification:
|
||||||
update_found: Det finns en ny version av innehållet.
|
update_found: Det finns en ny version av innehållet.
|
||||||
|
@ -43,7 +43,7 @@ copyright:
|
|||||||
meta: กำลังใช้ธีมของ :PLATFORM ชื่อ :THEME
|
meta: กำลังใช้ธีมของ :PLATFORM ชื่อ :THEME
|
||||||
|
|
||||||
not_found:
|
not_found:
|
||||||
statment: ขออภัย เราวาง URL นั้นไว้ผิดที่ หรือมันชี้ไปยังสิ่งที่ไม่มีอยู่
|
statement: ขออภัย เราวาง URL นั้นไว้ผิดที่ หรือมันชี้ไปยังสิ่งที่ไม่มีอยู่
|
||||||
|
|
||||||
notification:
|
notification:
|
||||||
update_found: มีเวอร์ชันใหม่ของเนื้อหา
|
update_found: มีเวอร์ชันใหม่ของเนื้อหา
|
||||||
|
@ -43,7 +43,7 @@ copyright:
|
|||||||
meta: :PLATFORM ve :THEME teması
|
meta: :PLATFORM ve :THEME teması
|
||||||
|
|
||||||
not_found:
|
not_found:
|
||||||
statment: Üzgünüz, bu linki yanlış yerleştirdik veya var olmayan bir şeye işaret ediyor.
|
statement: Üzgünüz, bu linki yanlış yerleştirdik veya var olmayan bir şeye işaret ediyor.
|
||||||
|
|
||||||
notification:
|
notification:
|
||||||
update_found: İçeriğin yeni bir sürümü mevcut.
|
update_found: İçeriğin yeni bir sürümü mevcut.
|
||||||
|
@ -43,7 +43,7 @@ copyright:
|
|||||||
meta: Powered by :PLATFORM with :THEME theme
|
meta: Powered by :PLATFORM with :THEME theme
|
||||||
|
|
||||||
not_found:
|
not_found:
|
||||||
statment: Вибачте, це посилання вказує на ресурс, що не існує.
|
statement: Вибачте, це посилання вказує на ресурс, що не існує.
|
||||||
|
|
||||||
notification:
|
notification:
|
||||||
update_found: Доступна нова версія вмісту.
|
update_found: Доступна нова версія вмісту.
|
||||||
|
90
_data/locales/ur-PK.yml
Normal file
90
_data/locales/ur-PK.yml
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
# The layout text of site in Urdu (Pakistan)
|
||||||
|
|
||||||
|
# ----- Commons label -----
|
||||||
|
|
||||||
|
layout:
|
||||||
|
post: تحریر
|
||||||
|
category: زمرہ
|
||||||
|
tag: ٹیگ
|
||||||
|
|
||||||
|
# The tabs of sidebar
|
||||||
|
tabs:
|
||||||
|
# format: <filename_without_extension>: <value>
|
||||||
|
home: گھر
|
||||||
|
categories: زمروں
|
||||||
|
tags: ٹیگز
|
||||||
|
archives: محفوظات
|
||||||
|
about: تعارف
|
||||||
|
|
||||||
|
# the text displayed in the search bar & search results
|
||||||
|
search:
|
||||||
|
hint: تلاش
|
||||||
|
cancel: منسوخ
|
||||||
|
no_results: اوہ! کوئی نتیجہ نہیں ملا۔
|
||||||
|
|
||||||
|
panel:
|
||||||
|
lastmod: حال ہی میں اپ ڈیٹ
|
||||||
|
trending_tags: مقبول ٹیگز
|
||||||
|
toc: مواد
|
||||||
|
|
||||||
|
copyright:
|
||||||
|
# Shown at the bottom of the post
|
||||||
|
license:
|
||||||
|
template: یہ تحریر :LICENSE_NAME کے تحت مصنف کی جانب سے لائسنس یافتہ ہے۔
|
||||||
|
name: CC BY 4.0
|
||||||
|
link: https://creativecommons.org/licenses/by/4.0/
|
||||||
|
|
||||||
|
# Displayed in the footer
|
||||||
|
brief: کچھ حقوق محفوظ ہیں۔
|
||||||
|
verbose: >-
|
||||||
|
جب تک کہ دوسری صورت میں ذکر نہ ہو، اس سائٹ کی تحریریں
|
||||||
|
مصنف کی جانب سے تخلیقی العام انتساب 4.0 بین الاقوامی (CC BY 4.0) لائسنس کے تحت دستیاب ہیں۔
|
||||||
|
|
||||||
|
meta: :PLATFORM کے لیے :THEME تھیم استعمال کیا جا رہا ہے۔
|
||||||
|
|
||||||
|
not_found:
|
||||||
|
statement: معذرت، یہ URL غلط ہے یا جس چیز کی طرف اشارہ کر رہا ہے وہ موجود نہیں۔
|
||||||
|
|
||||||
|
notification:
|
||||||
|
update_found: نیا مواد دستیاب ہے۔
|
||||||
|
update: اپ ڈیٹ
|
||||||
|
|
||||||
|
# ----- Posts related labels -----
|
||||||
|
|
||||||
|
post:
|
||||||
|
written_by: از
|
||||||
|
posted: شائع شدہ
|
||||||
|
updated: اپ ڈیٹ شدہ
|
||||||
|
words: لفظ
|
||||||
|
pageview_measure: مشاہدات
|
||||||
|
read_time:
|
||||||
|
unit: منٹ
|
||||||
|
prompt: پڑھیں
|
||||||
|
relate_posts: مزید مطالعہ
|
||||||
|
share: شیئر
|
||||||
|
button:
|
||||||
|
next: نیا
|
||||||
|
previous: پرانا
|
||||||
|
copy_code:
|
||||||
|
succeed: کاپی ہو گیا!
|
||||||
|
share_link:
|
||||||
|
title: لنک کاپی کریں
|
||||||
|
succeed: لنک کامیابی سے کاپی ہو گیا!
|
||||||
|
|
||||||
|
# Date time format.
|
||||||
|
# See: <http://strftime.net/>, <https://day.js.org/docs/en/display/format>
|
||||||
|
df:
|
||||||
|
post:
|
||||||
|
strftime: "%b %e, %Y"
|
||||||
|
dayjs: "ll"
|
||||||
|
archives:
|
||||||
|
strftime: "%b"
|
||||||
|
dayjs: "MMM"
|
||||||
|
|
||||||
|
categories:
|
||||||
|
category_measure:
|
||||||
|
singular: زمرہ
|
||||||
|
plural: زمروں
|
||||||
|
post_measure:
|
||||||
|
singular: تحریر
|
||||||
|
plural: تحریریں
|
@ -42,7 +42,7 @@ copyright:
|
|||||||
meta: Trang web này được tạo bởi :PLATFORM với chủ đề :THEME
|
meta: Trang web này được tạo bởi :PLATFORM với chủ đề :THEME
|
||||||
|
|
||||||
not_found:
|
not_found:
|
||||||
statment: Xin lỗi, chúng tôi đã đặt nhầm URL hoặc đường dẫn trỏ đến một trang nào đó không tồn tại.
|
statement: 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:
|
notification:
|
||||||
update_found: Đã có phiên bản mới của nội dung.
|
update_found: Đã có phiên bản mới của nội dung.
|
||||||
|
@ -42,7 +42,7 @@ copyright:
|
|||||||
meta: 本站采用 :PLATFORM 主题 :THEME
|
meta: 本站采用 :PLATFORM 主题 :THEME
|
||||||
|
|
||||||
not_found:
|
not_found:
|
||||||
statment: 抱歉,我们放错了该 URL,或者它指向了不存在的内容。
|
statement: 抱歉,我们放错了该 URL,或者它指向了不存在的内容。
|
||||||
|
|
||||||
notification:
|
notification:
|
||||||
update_found: 发现新版本的内容。
|
update_found: 发现新版本的内容。
|
||||||
|
@ -42,7 +42,7 @@ copyright:
|
|||||||
meta: 本網站使用 :PLATFORM 產生,採用 :THEME 主題
|
meta: 本網站使用 :PLATFORM 產生,採用 :THEME 主題
|
||||||
|
|
||||||
not_found:
|
not_found:
|
||||||
statment: 抱歉,您可能正在存取一個已被移動的 URL,或者它從未存在。
|
statement: 抱歉,您可能正在存取一個已被移動的 URL,或者它從未存在。
|
||||||
|
|
||||||
notification:
|
notification:
|
||||||
update_found: 發現新版本更新。
|
update_found: 發現新版本更新。
|
||||||
|
@ -20,9 +20,9 @@ mermaid:
|
|||||||
dayjs:
|
dayjs:
|
||||||
js:
|
js:
|
||||||
common: /assets/lib/dayjs/dayjs.min.js
|
common: /assets/lib/dayjs/dayjs.min.js
|
||||||
locale: /assets/lib/dayjs/locale/en.min.js
|
locale: /assets/lib/dayjs/locale/en.js
|
||||||
relativeTime: /assets/lib/dayjs/plugin/relativeTime.min.js
|
relativeTime: /assets/lib/dayjs/plugin/relativeTime.js
|
||||||
localizedFormat: /assets/lib/dayjs/plugin/localizedFormat.min.js
|
localizedFormat: /assets/lib/dayjs/plugin/localizedFormat.js
|
||||||
|
|
||||||
glightbox:
|
glightbox:
|
||||||
css: /assets/lib/glightbox/glightbox.min.css
|
css: /assets/lib/glightbox/glightbox.min.css
|
||||||
|
@ -20,24 +20,24 @@ webfonts: https://fonts.googleapis.com/css2?family=Lato:wght@300;400&family=Sour
|
|||||||
# Libraries
|
# Libraries
|
||||||
|
|
||||||
toc:
|
toc:
|
||||||
css: https://cdn.jsdelivr.net/npm/tocbot@4.27.20/dist/tocbot.min.css
|
css: https://cdn.jsdelivr.net/npm/tocbot@4.32.2/dist/tocbot.min.css
|
||||||
js: https://cdn.jsdelivr.net/npm/tocbot@4.27.20/dist/tocbot.min.js
|
js: https://cdn.jsdelivr.net/npm/tocbot@4.32.2/dist/tocbot.min.js
|
||||||
|
|
||||||
fontawesome:
|
fontawesome:
|
||||||
css: https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.5.2/css/all.min.css
|
css: https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.7.1/css/all.min.css
|
||||||
|
|
||||||
search:
|
search:
|
||||||
js: https://cdn.jsdelivr.net/npm/simple-jekyll-search@1.10.0/dest/simple-jekyll-search.min.js
|
js: https://cdn.jsdelivr.net/npm/simple-jekyll-search@1.10.0/dest/simple-jekyll-search.min.js
|
||||||
|
|
||||||
mermaid:
|
mermaid:
|
||||||
js: https://cdn.jsdelivr.net/npm/mermaid@10.9.0/dist/mermaid.min.js
|
js: https://cdn.jsdelivr.net/npm/mermaid@11.4.0/dist/mermaid.min.js
|
||||||
|
|
||||||
dayjs:
|
dayjs:
|
||||||
js:
|
js:
|
||||||
common: https://cdn.jsdelivr.net/npm/dayjs@1.11.11/dayjs.min.js
|
common: https://cdn.jsdelivr.net/npm/dayjs@1.11.13/dayjs.min.js
|
||||||
locale: https://cdn.jsdelivr.net/npm/dayjs@1.11.11/locale/:LOCALE.min.js
|
locale: https://cdn.jsdelivr.net/npm/dayjs@1.11.13/locale/:LOCALE.js
|
||||||
relativeTime: https://cdn.jsdelivr.net/npm/dayjs@1.11.11/plugin/relativeTime.min.js
|
relativeTime: https://cdn.jsdelivr.net/npm/dayjs@1.11.13/plugin/relativeTime.js
|
||||||
localizedFormat: https://cdn.jsdelivr.net/npm/dayjs@1.11.11/plugin/localizedFormat.min.js
|
localizedFormat: https://cdn.jsdelivr.net/npm/dayjs@1.11.13/plugin/localizedFormat.js
|
||||||
|
|
||||||
glightbox:
|
glightbox:
|
||||||
css: https://cdn.jsdelivr.net/npm/glightbox@3.3.0/dist/css/glightbox.min.css
|
css: https://cdn.jsdelivr.net/npm/glightbox@3.3.0/dist/css/glightbox.min.css
|
||||||
|
@ -18,7 +18,7 @@ platforms:
|
|||||||
#
|
#
|
||||||
# - type: Linkedin
|
# - type: Linkedin
|
||||||
# icon: "fab fa-linkedin"
|
# icon: "fab fa-linkedin"
|
||||||
# link: "https://www.linkedin.com/sharing/share-offsite/?url=URL"
|
# link: "https://www.linkedin.com/feed/?shareActive=true&shareUrl=URL"
|
||||||
#
|
#
|
||||||
# - type: Weibo
|
# - type: Weibo
|
||||||
# icon: "fab fa-weibo"
|
# icon: "fab fa-weibo"
|
||||||
@ -36,3 +36,15 @@ platforms:
|
|||||||
# link: "https://fosstodon.org/"
|
# link: "https://fosstodon.org/"
|
||||||
# - label: photog.social
|
# - label: photog.social
|
||||||
# link: "https://photog.social/"
|
# link: "https://photog.social/"
|
||||||
|
#
|
||||||
|
# - type: Bluesky
|
||||||
|
# icon: "fa-brands fa-bluesky"
|
||||||
|
# link: "https://bsky.app/intent/compose?text=TITLE%20URL"
|
||||||
|
#
|
||||||
|
# - type: Reddit
|
||||||
|
# icon: "fa-brands fa-square-reddit"
|
||||||
|
# link: "https://www.reddit.com/submit?url=URL&title=TITLE"
|
||||||
|
#
|
||||||
|
# - type: Threads
|
||||||
|
# icon: "fa-brands fa-square-threads"
|
||||||
|
# link: "https://www.threads.net/intent/post?text=TITLE%20URL"
|
||||||
|
@ -4,4 +4,3 @@
|
|||||||
src="https://static.cloudflareinsights.com/beacon.min.js"
|
src="https://static.cloudflareinsights.com/beacon.min.js"
|
||||||
data-cf-beacon='{"token": "{{ site.analytics.cloudflare.id }}"}'
|
data-cf-beacon='{"token": "{{ site.analytics.cloudflare.id }}"}'
|
||||||
></script>
|
></script>
|
||||||
<!-- End Cloudflare Web Analytics -->
|
|
||||||
|
6
_includes/analytics/fathom.html
Normal file
6
_includes/analytics/fathom.html
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<!-- Fathom -->
|
||||||
|
<script
|
||||||
|
src="https://cdn.usefathom.com/script.js"
|
||||||
|
data-site="{{ site.analytics.fathom.id }}"
|
||||||
|
defer
|
||||||
|
></script>
|
@ -1,7 +1,7 @@
|
|||||||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||||||
<script defer src="https://www.googletagmanager.com/gtag/js?id={{ site.analytics.google.id }}"></script>
|
<script defer src="https://www.googletagmanager.com/gtag/js?id={{ site.analytics.google.id }}"></script>
|
||||||
<script>
|
<script>
|
||||||
document.addEventListener('DOMContentLoaded', function (event) {
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
window.dataLayer = window.dataLayer || [];
|
window.dataLayer = window.dataLayer || [];
|
||||||
function gtag() {
|
function gtag() {
|
||||||
dataLayer.push(arguments);
|
dataLayer.push(arguments);
|
||||||
|
@ -1,14 +1,13 @@
|
|||||||
<!-- Matomo -->
|
<!-- Matomo -->
|
||||||
<script type="text/javascript">
|
<script>
|
||||||
var _paq = window._paq = window._paq || [];
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
_paq.push(['trackPageView']);
|
var _paq = (window._paq = window._paq || []);
|
||||||
_paq.push(['enableLinkTracking']);
|
_paq.push(['trackPageView']);
|
||||||
(function() {
|
_paq.push(['enableLinkTracking']);
|
||||||
var u="//{{ site.analytics.matomo.domain }}/";
|
var u="//{{ site.analytics.matomo.domain }}/";
|
||||||
_paq.push(['setTrackerUrl', u+'matomo.php']);
|
_paq.push(['setTrackerUrl', u+'matomo.php']);
|
||||||
_paq.push(['setSiteId', {{ site.analytics.matomo.id }}]);
|
_paq.push(['setSiteId', {{ site.analytics.matomo.id }}]);
|
||||||
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
|
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
|
||||||
g.type='text/javascript'; g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
|
g.type='text/javascript'; g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
|
||||||
})();
|
});
|
||||||
</script>
|
</script>
|
||||||
<!-- End Matomo Code -->
|
|
||||||
|
@ -1,38 +1,25 @@
|
|||||||
<!-- The Disqus lazy loading. -->
|
<script>
|
||||||
|
|
||||||
<div id="disqus_thread">
|
|
||||||
<p class="text-center text-muted small">Comments powered by <a href="https://disqus.com/">Disqus</a>.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
|
||||||
var disqus_config = function () {
|
var disqus_config = function () {
|
||||||
this.page.url = '{{ page.url | absolute_url }}';
|
this.page.url = '{{ page.url | absolute_url }}';
|
||||||
this.page.identifier = '{{ page.url }}';
|
this.page.identifier = '{{ page.url }}';
|
||||||
};
|
};
|
||||||
|
|
||||||
{%- comment -%} Lazy loading {%- endcomment -%}
|
function addDisqus() {
|
||||||
var disqus_observer = new IntersectionObserver(
|
let disqusThread = document.createElement('div');
|
||||||
function (entries) {
|
let paragraph = document.createElement('p');
|
||||||
if (entries[0].isIntersecting) {
|
|
||||||
(function () {
|
|
||||||
var d = document,
|
|
||||||
s = d.createElement('script');
|
|
||||||
s.src = 'https://{{ site.comments.disqus.shortname }}.disqus.com/embed.js';
|
|
||||||
s.setAttribute('data-timestamp', +new Date());
|
|
||||||
(d.head || d.body).appendChild(s);
|
|
||||||
})();
|
|
||||||
|
|
||||||
disqus_observer.disconnect();
|
disqusThread.id = 'disqus_thread';
|
||||||
}
|
paragraph.className = 'text-center text-muted small';
|
||||||
},
|
paragraph.innerHTML = 'Comments powered by <a href="https://disqus.com/">Disqus</a>.';
|
||||||
{ threshold: [0] }
|
disqusThread.appendChild(paragraph);
|
||||||
);
|
|
||||||
|
|
||||||
disqus_observer.observe(document.getElementById('disqus_thread'));
|
const footer = document.querySelector('footer');
|
||||||
|
footer.insertAdjacentElement("beforebegin", disqusThread);
|
||||||
|
}
|
||||||
|
|
||||||
{%- comment -%} Auto switch theme {%- endcomment -%}
|
{%- comment -%} Auto switch theme {%- endcomment -%}
|
||||||
function reloadDisqus() {
|
function reloadDisqus(event) {
|
||||||
if (event.source === window && event.data && event.data.direction === ModeToggle.ID) {
|
if (event.source === window && event.data && event.data.id === Theme.ID) {
|
||||||
{%- comment -%} Disqus hasn't been loaded {%- endcomment -%}
|
{%- comment -%} Disqus hasn't been loaded {%- endcomment -%}
|
||||||
if (typeof DISQUS === 'undefined') {
|
if (typeof DISQUS === 'undefined') {
|
||||||
return;
|
return;
|
||||||
@ -44,7 +31,27 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (document.getElementById('mode-toggle')) {
|
addDisqus();
|
||||||
window.addEventListener('message', reloadDisqus);
|
|
||||||
|
if (Theme.switchable) {
|
||||||
|
addEventListener('message', reloadDisqus);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{%- comment -%} Lazy loading {%- endcomment -%}
|
||||||
|
var disqusObserver = new IntersectionObserver(
|
||||||
|
function (entries) {
|
||||||
|
if (entries[0].isIntersecting) {
|
||||||
|
var d = document,
|
||||||
|
s = d.createElement('script');
|
||||||
|
s.src = 'https://{{ site.comments.disqus.shortname }}.disqus.com/embed.js';
|
||||||
|
s.setAttribute('data-timestamp', +new Date());
|
||||||
|
(d.head || d.body).appendChild(s);
|
||||||
|
|
||||||
|
disqusObserver.disconnect();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ threshold: [0] }
|
||||||
|
);
|
||||||
|
|
||||||
|
disqusObserver.observe(document.getElementById('disqus_thread'));
|
||||||
</script>
|
</script>
|
||||||
|
@ -1,20 +1,13 @@
|
|||||||
<!-- https://giscus.app/ -->
|
<!-- https://giscus.app/ -->
|
||||||
<script type="text/javascript">
|
<script>
|
||||||
(function () {
|
(function () {
|
||||||
const origin = 'https://giscus.app';
|
const themeMapper = Theme.getThemeMapper('light', 'dark_dimmed');
|
||||||
const lightTheme = 'light';
|
const initTheme = themeMapper[Theme.visualState];
|
||||||
const darkTheme = 'dark_dimmed';
|
|
||||||
|
|
||||||
let initTheme = lightTheme;
|
let lang = '{{ site.comments.giscus.lang | default: lang }}';
|
||||||
const html = document.documentElement;
|
{%- comment -%} https://github.com/giscus/giscus/tree/main/locales {%- endcomment -%}
|
||||||
|
if (lang.length > 2 && !lang.startsWith('zh')) {
|
||||||
if (
|
lang = lang.slice(0, 2);
|
||||||
(html.hasAttribute('data-mode') &&
|
|
||||||
html.getAttribute('data-mode') === 'dark') ||
|
|
||||||
(!html.hasAttribute('data-mode') &&
|
|
||||||
window.matchMedia('(prefers-color-scheme: dark)').matches)
|
|
||||||
) {
|
|
||||||
initTheme = darkTheme;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let giscusAttributes = {
|
let giscusAttributes = {
|
||||||
@ -29,36 +22,33 @@
|
|||||||
'data-emit-metadata': '0',
|
'data-emit-metadata': '0',
|
||||||
'data-theme': initTheme,
|
'data-theme': initTheme,
|
||||||
'data-input-position': '{{ site.comments.giscus.input_position | default: 'bottom' }}',
|
'data-input-position': '{{ site.comments.giscus.input_position | default: 'bottom' }}',
|
||||||
'data-lang': '{{ site.comments.giscus.lang | default: lang }}',
|
'data-lang': lang,
|
||||||
'data-loading': 'lazy',
|
'data-loading': 'lazy',
|
||||||
crossorigin: 'anonymous',
|
crossorigin: 'anonymous',
|
||||||
async: ''
|
async: ''
|
||||||
};
|
};
|
||||||
|
|
||||||
let giscusScript = document.createElement('script');
|
let giscusNode = document.createElement('script');
|
||||||
Object.entries(giscusAttributes).forEach(([key, value]) =>
|
Object.entries(giscusAttributes).forEach(([key, value]) =>
|
||||||
giscusScript.setAttribute(key, value)
|
giscusNode.setAttribute(key, value)
|
||||||
);
|
);
|
||||||
document.getElementById('tail-wrapper').appendChild(giscusScript);
|
|
||||||
|
const $footer = document.querySelector('footer');
|
||||||
|
$footer.insertAdjacentElement("beforebegin", giscusNode);
|
||||||
|
|
||||||
addEventListener('message', (event) => {
|
addEventListener('message', (event) => {
|
||||||
if (
|
if (event.source === window && event.data && event.data.id === Theme.ID) {
|
||||||
event.source === window &&
|
const newTheme = themeMapper[Theme.visualState];
|
||||||
event.data &&
|
|
||||||
event.data.direction === ModeToggle.ID
|
|
||||||
) {
|
|
||||||
{%- comment -%} global theme mode changed {%- endcomment -%}
|
|
||||||
const mode = event.data.message;
|
|
||||||
const theme = mode === ModeToggle.DARK_MODE ? darkTheme : lightTheme;
|
|
||||||
|
|
||||||
const message = {
|
const message = {
|
||||||
setConfig: {
|
setConfig: {
|
||||||
theme: theme
|
theme: newTheme
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const giscus = document.getElementsByClassName('giscus-frame')[0].contentWindow;
|
const giscus =
|
||||||
giscus.postMessage({ giscus: message }, origin);
|
document.getElementsByClassName('giscus-frame')[0].contentWindow;
|
||||||
|
giscus.postMessage({ giscus: message }, 'https://giscus.app');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
})();
|
})();
|
||||||
|
@ -1,49 +1,38 @@
|
|||||||
<!-- https://utteranc.es/ -->
|
<!-- https://utteranc.es/ -->
|
||||||
<script
|
<script>
|
||||||
src="https://utteranc.es/client.js"
|
|
||||||
repo="{{ site.comments.utterances.repo }}"
|
|
||||||
issue-term="{{ site.comments.utterances.issue_term }}"
|
|
||||||
crossorigin="anonymous"
|
|
||||||
async
|
|
||||||
></script>
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
|
||||||
(function () {
|
(function () {
|
||||||
const origin = 'https://utteranc.es';
|
const origin = 'https://utteranc.es';
|
||||||
const lightTheme = 'github-light';
|
const themeMapper = Theme.getThemeMapper('github-light', 'github-dark');
|
||||||
const darkTheme = 'github-dark';
|
const initTheme = themeMapper[Theme.visualState];
|
||||||
let initTheme = lightTheme;
|
|
||||||
const html = document.documentElement;
|
|
||||||
|
|
||||||
if (
|
let script = document.createElement('script');
|
||||||
(html.hasAttribute('data-mode') && html.getAttribute('data-mode') === 'dark') ||
|
script.src = 'https://utteranc.es/client.js';
|
||||||
(!html.hasAttribute('data-mode') && window.matchMedia('(prefers-color-scheme: dark)').matches)
|
script.setAttribute('repo', '{{ site.comments.utterances.repo }}');
|
||||||
) {
|
script.setAttribute('issue-term', '{{ site.comments.utterances.issue_term }}');
|
||||||
initTheme = darkTheme;
|
script.setAttribute('theme', initTheme);
|
||||||
}
|
script.crossOrigin = 'anonymous';
|
||||||
|
script.async = true;
|
||||||
|
|
||||||
|
const $footer = document.querySelector('footer');
|
||||||
|
$footer.insertAdjacentElement('beforebegin', script);
|
||||||
|
|
||||||
addEventListener('message', (event) => {
|
addEventListener('message', (event) => {
|
||||||
let theme;
|
let newTheme;
|
||||||
|
|
||||||
{%- comment -%} credit to <https://github.com/utterance/utterances/issues/170#issuecomment-594036347> {%- endcomment -%}
|
{%- comment -%}
|
||||||
if (event.origin === origin) {
|
Credit to <https://github.com/utterance/utterances/issues/170#issuecomment-594036347>
|
||||||
{%- comment -%} page initial {%- endcomment -%}
|
{%- endcomment -%}
|
||||||
theme = initTheme;
|
if (event.source === window && event.data && event.data.id === Theme.ID) {
|
||||||
} else if (event.source === window && event.data && event.data.direction === ModeToggle.ID) {
|
newTheme = themeMapper[Theme.visualState];
|
||||||
{%- comment -%} global theme mode changed {%- endcomment -%}
|
|
||||||
const mode = event.data.message;
|
const message = {
|
||||||
theme = mode === ModeToggle.DARK_MODE ? darkTheme : lightTheme;
|
type: 'set-theme',
|
||||||
} else {
|
theme: newTheme
|
||||||
return;
|
};
|
||||||
|
|
||||||
|
const utterances = document.querySelector('.utterances-frame').contentWindow;
|
||||||
|
utterances.postMessage(message, origin);
|
||||||
}
|
}
|
||||||
|
|
||||||
const message = {
|
|
||||||
type: 'set-theme',
|
|
||||||
theme: theme
|
|
||||||
};
|
|
||||||
|
|
||||||
const utterances = document.getElementsByClassName('utterances-frame')[0].contentWindow;
|
|
||||||
utterances.postMessage(message, origin);
|
|
||||||
});
|
});
|
||||||
})();
|
})();
|
||||||
</script>
|
</script>
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||||
<meta name="theme-color" media="(prefers-color-scheme: light)" content="#f7f7f7">
|
<meta name="theme-color" media="(prefers-color-scheme: light)" content="#f7f7f7">
|
||||||
<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#1b1b1e">
|
<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#1b1b1e">
|
||||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
<meta name="mobile-web-app-capable" content="yes">
|
||||||
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
|
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
|
||||||
<meta
|
<meta
|
||||||
name="viewport"
|
name="viewport"
|
||||||
@ -70,7 +70,7 @@
|
|||||||
|
|
||||||
<!-- Bootstrap -->
|
<!-- Bootstrap -->
|
||||||
{% unless jekyll.environment == 'production' %}
|
{% unless jekyll.environment == 'production' %}
|
||||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css">
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.6/dist/css/bootstrap.min.css">
|
||||||
{% endunless %}
|
{% endunless %}
|
||||||
|
|
||||||
<!-- Theme style -->
|
<!-- Theme style -->
|
||||||
@ -97,11 +97,30 @@
|
|||||||
<link rel="stylesheet" href="{{ site.data.origin[type].glightbox.css | relative_url }}">
|
<link rel="stylesheet" href="{{ site.data.origin[type].glightbox.css | relative_url }}">
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<!-- JavaScript -->
|
<!-- Scripts -->
|
||||||
|
|
||||||
{% unless site.theme_mode %}
|
<script src="{{ '/assets/js/dist/theme.min.js' | relative_url }}"></script>
|
||||||
{% include mode-toggle.html %}
|
|
||||||
{% endunless %}
|
{% include js-selector.html lang=lang %}
|
||||||
|
|
||||||
|
{% if jekyll.environment == 'production' %}
|
||||||
|
<!-- PWA -->
|
||||||
|
{% if site.pwa.enabled %}
|
||||||
|
<script
|
||||||
|
defer
|
||||||
|
src="{{ '/app.min.js' | relative_url }}?baseurl={{ site.baseurl | default: '' }}®ister={{ site.pwa.cache.enabled }}"
|
||||||
|
></script>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<!-- Web Analytics -->
|
||||||
|
{% for analytics in site.analytics %}
|
||||||
|
{% capture str %}{{ analytics }}{% endcapture %}
|
||||||
|
{% assign platform = str | split: '{' | first %}
|
||||||
|
{% if site.analytics[platform].id and site.analytics[platform].id != empty %}
|
||||||
|
{% include analytics/{{ platform }}.html %}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% include metadata-hook.html %}
|
{% include metadata-hook.html %}
|
||||||
</head>
|
</head>
|
||||||
|
@ -6,8 +6,6 @@
|
|||||||
|
|
||||||
<!-- layout specified -->
|
<!-- layout specified -->
|
||||||
|
|
||||||
{% assign js_dist = '/assets/js/dist/' %}
|
|
||||||
|
|
||||||
{% if page.layout == 'post' or page.layout == 'page' or page.layout == 'home' %}
|
{% if page.layout == 'post' or page.layout == 'page' or page.layout == 'home' %}
|
||||||
{% assign urls = urls | append: ',' | append: site.data.origin[type]['lazy-polyfill'].js %}
|
{% assign urls = urls | append: ',' | append: site.data.origin[type]['lazy-polyfill'].js %}
|
||||||
|
|
||||||
@ -62,13 +60,14 @@
|
|||||||
{% assign js = 'commons' %}
|
{% assign js = 'commons' %}
|
||||||
{% endcase %}
|
{% endcase %}
|
||||||
|
|
||||||
{% capture script %}{{ js_dist }}{{ js }}.min.js{% endcapture %}
|
{% capture script %}/assets/js/dist/{{ js }}.min.js{% endcapture %}
|
||||||
<script src="{{ script | relative_url }}"></script>
|
|
||||||
|
<script defer src="{{ script | relative_url }}"></script>
|
||||||
|
|
||||||
{% if page.math %}
|
{% if page.math %}
|
||||||
<!-- MathJax -->
|
<!-- MathJax -->
|
||||||
<script src="{{ '/assets/js/data/mathjax.js' | relative_url }}"></script>
|
<script src="{{ '/assets/js/data/mathjax.js' | relative_url }}"></script>
|
||||||
<script src="https://cdnjs.cloudflare.com/polyfill/v3/polyfill.min.js?features=es6"></script>
|
<script async src="https://cdnjs.cloudflare.com/polyfill/v3/polyfill.min.js?features=es6"></script>
|
||||||
<script id="MathJax-script" async src="{{ site.data.origin[type].mathjax.js | relative_url }}"></script>
|
<script id="MathJax-script" async src="{{ site.data.origin[type].mathjax.js | relative_url }}"></script>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
@ -85,23 +84,3 @@
|
|||||||
{% endcase %}
|
{% endcase %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if page.mermaid %}
|
|
||||||
{% include mermaid.html %}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if jekyll.environment == 'production' %}
|
|
||||||
<!-- PWA -->
|
|
||||||
{% if site.pwa.enabled %}
|
|
||||||
<script defer src="{{ 'app.min.js' | prepend: js_dist | relative_url }}"></script>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
<!-- Web Analytics -->
|
|
||||||
{% for analytics in site.analytics %}
|
|
||||||
{% capture str %}{{ analytics }}{% endcapture %}
|
|
||||||
{% assign type = str | split: '{' | first %}
|
|
||||||
{% if site.analytics[type].id and site.analytics[type].id != empty %}
|
|
||||||
{% include analytics/{{ type }}.html %}
|
|
||||||
{% endif %}
|
|
||||||
{% endfor %}
|
|
||||||
{% endif %}
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{% assign urls = include.urls | split: ',' %}
|
{% assign urls = include.urls | split: ',' %}
|
||||||
|
|
||||||
{% assign combined_urls = nil %}
|
{% assign combined_urls = null %}
|
||||||
|
|
||||||
{% assign domain = 'https://cdn.jsdelivr.net/' %}
|
{% assign domain = 'https://cdn.jsdelivr.net/' %}
|
||||||
|
|
||||||
@ -15,12 +15,12 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% elsif url contains '//' %}
|
{% elsif url contains '//' %}
|
||||||
<script src="{{ url }}"></script>
|
<script defer src="{{ url }}"></script>
|
||||||
{% else %}
|
{% else %}
|
||||||
<script src="{{ url | relative_url }}"></script>
|
<script defer src="{{ url | relative_url }}"></script>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
{% if combined_urls %}
|
{% if combined_urls %}
|
||||||
<script src="{{ combined_urls }}"></script>
|
<script defer src="{{ combined_urls }}"></script>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
@ -1,62 +0,0 @@
|
|||||||
<!-- mermaid-js loader -->
|
|
||||||
<script type="text/javascript">
|
|
||||||
function updateMermaid(event) {
|
|
||||||
if (event.source === window && event.data && event.data.direction === ModeToggle.ID) {
|
|
||||||
const mode = event.data.message;
|
|
||||||
|
|
||||||
if (typeof mermaid === 'undefined') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let expectedTheme = mode === ModeToggle.DARK_MODE ? 'dark' : 'default';
|
|
||||||
let config = { theme: expectedTheme };
|
|
||||||
|
|
||||||
{%- comment -%}
|
|
||||||
Re-render the SVG › <https://github.com/mermaid-js/mermaid/issues/311#issuecomment-332557344>
|
|
||||||
{%- endcomment -%}
|
|
||||||
const mermaidList = document.getElementsByClassName('mermaid');
|
|
||||||
|
|
||||||
[...mermaidList].forEach((elem) => {
|
|
||||||
const svgCode = elem.previousSibling.children.item(0).innerHTML;
|
|
||||||
elem.innerHTML = svgCode;
|
|
||||||
elem.removeAttribute('data-processed');
|
|
||||||
});
|
|
||||||
|
|
||||||
mermaid.initialize(config);
|
|
||||||
mermaid.init(undefined, '.mermaid');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
(function () {
|
|
||||||
let initTheme = 'default';
|
|
||||||
const html = document.documentElement;
|
|
||||||
|
|
||||||
if (
|
|
||||||
(html.hasAttribute('data-mode') && html.getAttribute('data-mode') === 'dark') ||
|
|
||||||
(!html.hasAttribute('data-mode') && window.matchMedia('(prefers-color-scheme: dark)').matches)
|
|
||||||
) {
|
|
||||||
initTheme = 'dark';
|
|
||||||
}
|
|
||||||
|
|
||||||
let mermaidConf = {
|
|
||||||
theme: initTheme {%- comment -%} <default | dark | forest | neutral> {%- endcomment -%}
|
|
||||||
};
|
|
||||||
|
|
||||||
{%- comment -%} Create mermaid tag {%- endcomment -%}
|
|
||||||
const basicList = document.getElementsByClassName('language-mermaid');
|
|
||||||
[...basicList].forEach((elem) => {
|
|
||||||
const svgCode = elem.textContent;
|
|
||||||
const backup = elem.parentElement;
|
|
||||||
backup.classList.add('d-none');
|
|
||||||
{%- comment -%} create mermaid node {%- endcomment -%}
|
|
||||||
let mermaid = document.createElement('pre');
|
|
||||||
mermaid.classList.add('mermaid');
|
|
||||||
const text = document.createTextNode(svgCode);
|
|
||||||
mermaid.appendChild(text);
|
|
||||||
backup.after(mermaid);
|
|
||||||
});
|
|
||||||
|
|
||||||
mermaid.initialize(mermaidConf);
|
|
||||||
window.addEventListener('message', updateMermaid);
|
|
||||||
})();
|
|
||||||
</script>
|
|
@ -1,116 +0,0 @@
|
|||||||
<!-- Switch the mode between dark and light. -->
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
|
||||||
class ModeToggle {
|
|
||||||
static get MODE_KEY() {
|
|
||||||
return 'mode';
|
|
||||||
}
|
|
||||||
static get MODE_ATTR() {
|
|
||||||
return 'data-mode';
|
|
||||||
}
|
|
||||||
static get DARK_MODE() {
|
|
||||||
return 'dark';
|
|
||||||
}
|
|
||||||
static get LIGHT_MODE() {
|
|
||||||
return 'light';
|
|
||||||
}
|
|
||||||
static get ID() {
|
|
||||||
return 'mode-toggle';
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor() {
|
|
||||||
let self = this;
|
|
||||||
|
|
||||||
{%- comment -%} always follow the system prefers {%- endcomment -%}
|
|
||||||
this.sysDarkPrefers.addEventListener('change', () => {
|
|
||||||
if (self.hasMode) {
|
|
||||||
self.clearMode();
|
|
||||||
}
|
|
||||||
self.notify();
|
|
||||||
});
|
|
||||||
|
|
||||||
if (!this.hasMode) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.isDarkMode) {
|
|
||||||
this.setDark();
|
|
||||||
} else {
|
|
||||||
this.setLight();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
get sysDarkPrefers() {
|
|
||||||
return window.matchMedia('(prefers-color-scheme: dark)');
|
|
||||||
}
|
|
||||||
|
|
||||||
get isPreferDark() {
|
|
||||||
return this.sysDarkPrefers.matches;
|
|
||||||
}
|
|
||||||
|
|
||||||
get isDarkMode() {
|
|
||||||
return this.mode === ModeToggle.DARK_MODE;
|
|
||||||
}
|
|
||||||
|
|
||||||
get hasMode() {
|
|
||||||
return this.mode != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
get mode() {
|
|
||||||
return sessionStorage.getItem(ModeToggle.MODE_KEY);
|
|
||||||
}
|
|
||||||
|
|
||||||
{%- comment -%} get the current mode on screen {%- endcomment -%}
|
|
||||||
get modeStatus() {
|
|
||||||
if (this.hasMode) {
|
|
||||||
return this.mode;
|
|
||||||
} else {
|
|
||||||
return this.isPreferDark ? ModeToggle.DARK_MODE : ModeToggle.LIGHT_MODE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
setDark() {
|
|
||||||
document.documentElement.setAttribute(ModeToggle.MODE_ATTR, ModeToggle.DARK_MODE);
|
|
||||||
sessionStorage.setItem(ModeToggle.MODE_KEY, ModeToggle.DARK_MODE);
|
|
||||||
}
|
|
||||||
|
|
||||||
setLight() {
|
|
||||||
document.documentElement.setAttribute(ModeToggle.MODE_ATTR, ModeToggle.LIGHT_MODE);
|
|
||||||
sessionStorage.setItem(ModeToggle.MODE_KEY, ModeToggle.LIGHT_MODE);
|
|
||||||
}
|
|
||||||
|
|
||||||
clearMode() {
|
|
||||||
document.documentElement.removeAttribute(ModeToggle.MODE_ATTR);
|
|
||||||
sessionStorage.removeItem(ModeToggle.MODE_KEY);
|
|
||||||
}
|
|
||||||
|
|
||||||
{%- comment -%}
|
|
||||||
Notify another plugins that the theme mode has changed
|
|
||||||
{%- endcomment -%}
|
|
||||||
notify() {
|
|
||||||
window.postMessage(
|
|
||||||
{
|
|
||||||
direction: ModeToggle.ID,
|
|
||||||
message: this.modeStatus
|
|
||||||
},
|
|
||||||
'*'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
flipMode() {
|
|
||||||
if (this.hasMode) {
|
|
||||||
this.clearMode();
|
|
||||||
} else {
|
|
||||||
if (this.isPreferDark) {
|
|
||||||
this.setLight();
|
|
||||||
} else {
|
|
||||||
this.setDark();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.notify();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const modeToggle = new ModeToggle();
|
|
||||||
</script>
|
|
@ -1,10 +0,0 @@
|
|||||||
{% comment %}
|
|
||||||
Remove the line number of the code snippet.
|
|
||||||
{% endcomment %}
|
|
||||||
|
|
||||||
{% assign content = include.content %}
|
|
||||||
|
|
||||||
{% if content contains '<td class="rouge-gutter gl"><pre class="lineno">' %}
|
|
||||||
{% assign content = content | replace: '<td class="rouge-gutter gl"><pre class="lineno">', '<!-- <td class="rouge-gutter gl"><pre class="lineno">'%}
|
|
||||||
{% assign content = content | replace: '</td><td class="rouge-code">', '</td> --><td class="rouge-code">' %}
|
|
||||||
{% endif %}
|
|
@ -1,19 +1,21 @@
|
|||||||
<!-- Display GoatCounter pageviews -->
|
<!-- Display GoatCounter pageviews -->
|
||||||
<script>
|
<script>
|
||||||
let pv = document.getElementById('pageviews');
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
|
const pv = document.getElementById('pageviews');
|
||||||
|
|
||||||
if (pv !== null) {
|
if (pv !== null) {
|
||||||
const uri = location.pathname.replace(/\/$/, '');
|
const uri = location.pathname.replace(/\/$/, '');
|
||||||
const url = `https://{{ site.analytics.goatcounter.id }}.goatcounter.com/counter/${encodeURIComponent(uri)}.json`;
|
const url = `https://{{ site.analytics.goatcounter.id }}.goatcounter.com/counter/${encodeURIComponent(uri)}.json`;
|
||||||
|
|
||||||
fetch(url)
|
fetch(url)
|
||||||
.then((response) => response.json())
|
.then((response) => response.json())
|
||||||
.then((data) => {
|
.then((data) => {
|
||||||
const count = data.count.replace(/\s/g, '');
|
const count = data.count.replace(/\D/g, '');
|
||||||
pv.innerText = new Intl.NumberFormat().format(count);
|
pv.innerText = new Intl.NumberFormat().format(count);
|
||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
pv.innerText = '1';
|
pv.innerText = '1';
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
@ -8,8 +8,17 @@
|
|||||||
{%- if post.description -%}
|
{%- if post.description -%}
|
||||||
{{- post.description -}}
|
{{- post.description -}}
|
||||||
{%- else -%}
|
{%- else -%}
|
||||||
{%- include no-linenos.html content=post.content -%}
|
{% comment %}
|
||||||
{{- content | markdownify | strip_html -}}
|
Remove the line number of the code snippet.
|
||||||
|
{% endcomment %}
|
||||||
|
{% assign content = post.content %}
|
||||||
|
|
||||||
|
{% if content contains '<td class="rouge-gutter gl"><pre class="lineno">' %}
|
||||||
|
{% assign content = content | replace: '<td class="rouge-gutter gl"><pre class="lineno">', '<!-- <td class="rouge-gutter gl"><pre class="lineno">'%}
|
||||||
|
{% assign content = content | replace: '</td><td class="rouge-code">', '</td> --><td class="rouge-code">' %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{{- content | markdownify | strip_html | newline_to_br | replace: '<br />', ' ' | strip_newlines -}}
|
||||||
{%- endif -%}
|
{%- endif -%}
|
||||||
{%- endcapture -%}
|
{%- endcapture -%}
|
||||||
|
|
||||||
|
@ -88,9 +88,41 @@
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
<!-- take out classes -->
|
<!-- take out classes -->
|
||||||
|
{% assign _wrapper_class = '' %}
|
||||||
|
|
||||||
{% if _class %}
|
{% if _class %}
|
||||||
{% capture _old_class %}class="{{ _class }}"{% endcapture %}
|
{% assign _remain = _class %}
|
||||||
{% assign _left = _left | remove: _old_class %}
|
{% assign _class_array = _class | split: ' ' %}
|
||||||
|
|
||||||
|
{% for c in _class_array %}
|
||||||
|
{% assign _pick = false %}
|
||||||
|
|
||||||
|
{% case c %}
|
||||||
|
{% when 'preview-img', 'normal', 'left', 'right', 'light', 'dark' %}
|
||||||
|
{% assign _pick = true %}
|
||||||
|
{% else %}
|
||||||
|
{% if c contains '-' %}
|
||||||
|
{% assign start = c | split: '-' | first %}
|
||||||
|
{% if start == 'w' %}
|
||||||
|
{% assign _pick = true %}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
{% endcase %}
|
||||||
|
|
||||||
|
{% if _pick %}
|
||||||
|
{% assign _remain = _remain | remove: c | strip %}
|
||||||
|
{% assign _wrapper_class = _wrapper_class | append: ' ' | append: c %}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
{% unless _wrapper_class == '' %}
|
||||||
|
{% capture _old_class %}class="{{ _class }}"{% endcapture %}
|
||||||
|
{% assign _left = _left | remove: _old_class %}
|
||||||
|
{% unless _remain == '' %}
|
||||||
|
{% capture _new_class %}class="{{ _remain }}"{% endcapture %}
|
||||||
|
{% assign _left = _left | append: _new_class %}
|
||||||
|
{% endunless %}
|
||||||
|
{% endunless %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% assign _final_src = null %}
|
{% assign _final_src = null %}
|
||||||
@ -110,7 +142,7 @@
|
|||||||
|
|
||||||
{% if _lqip %}
|
{% if _lqip %}
|
||||||
{% assign _lazyload = false %}
|
{% assign _lazyload = false %}
|
||||||
{% assign _class = _class | append: ' blur' %}
|
{% assign _wrapper_class = _wrapper_class | append: ' blur' %}
|
||||||
|
|
||||||
{% unless _lqip contains 'data:' %}
|
{% unless _lqip contains 'data:' %}
|
||||||
{% assign _lqip_alt = 'lqip="' | append: _path_prefix %}
|
{% assign _lqip_alt = 'lqip="' | append: _path_prefix %}
|
||||||
@ -121,7 +153,7 @@
|
|||||||
{% assign _left = _left | replace: 'src=', 'data-src=' | replace: ' lqip=', ' data-lqip="true" src=' %}
|
{% assign _left = _left | replace: 'src=', 'data-src=' | replace: ' lqip=', ' data-lqip="true" src=' %}
|
||||||
|
|
||||||
{% else %}
|
{% else %}
|
||||||
{% assign _class = _class | append: ' shimmer' %}
|
{% assign _wrapper_class = _wrapper_class | append: ' shimmer' %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<!-- lazy-load images -->
|
<!-- lazy-load images -->
|
||||||
@ -153,8 +185,8 @@
|
|||||||
{% assign _wrapper_start = _final_src
|
{% assign _wrapper_start = _final_src
|
||||||
| default: _src
|
| default: _src
|
||||||
| prepend: '<a href="'
|
| prepend: '<a href="'
|
||||||
| append: '" class="popup img-link '
|
| append: '" class="popup img-link'
|
||||||
| append: _class
|
| append: _wrapper_class
|
||||||
| append: '">'
|
| append: '">'
|
||||||
%}
|
%}
|
||||||
|
|
||||||
|
@ -12,36 +12,38 @@
|
|||||||
{tags}
|
{tags}
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
<p>{snippet}</p>
|
<p>{content}</p>
|
||||||
</article>
|
</article>
|
||||||
{% endcapture %}
|
{% endcapture %}
|
||||||
|
|
||||||
{% capture not_found %}<p class="mt-5">{{ site.data.locales[include.lang].search.no_results }}</p>{% endcapture %}
|
{% capture not_found %}<p class="mt-5">{{ site.data.locales[include.lang].search.no_results }}</p>{% endcapture %}
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
{%- comment -%} Note: dependent library will be loaded in `js-selector.html` {%- endcomment -%}
|
{% comment %} Note: dependent library will be loaded in `js-selector.html` {% endcomment %}
|
||||||
SimpleJekyllSearch({
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
searchInput: document.getElementById('search-input'),
|
SimpleJekyllSearch({
|
||||||
resultsContainer: document.getElementById('search-results'),
|
searchInput: document.getElementById('search-input'),
|
||||||
json: '{{ '/assets/js/data/search.json' | relative_url }}',
|
resultsContainer: document.getElementById('search-results'),
|
||||||
searchResultTemplate: '{{ result_elem | strip_newlines }}',
|
json: '{{ '/assets/js/data/search.json' | relative_url }}',
|
||||||
noResultsText: '{{ not_found }}',
|
searchResultTemplate: '{{ result_elem | strip_newlines }}',
|
||||||
templateMiddleware: function(prop, value, template) {
|
noResultsText: '{{ not_found }}',
|
||||||
if (prop === 'categories') {
|
templateMiddleware: function(prop, value, template) {
|
||||||
if (value === '') {
|
if (prop === 'categories') {
|
||||||
return `${value}`;
|
if (value === '') {
|
||||||
} else {
|
return `${value}`;
|
||||||
return `<div class="me-sm-4"><i class="far fa-folder fa-fw"></i>${value}</div>`;
|
} else {
|
||||||
|
return `<div class="me-sm-4"><i class="far fa-folder fa-fw"></i>${value}</div>`;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (prop === 'tags') {
|
if (prop === 'tags') {
|
||||||
if (value === '') {
|
if (value === '') {
|
||||||
return `${value}`;
|
return `${value}`;
|
||||||
} else {
|
} else {
|
||||||
return `<div><i class="fa fa-tag fa-fw"></i>${value}</div>`;
|
return `<div><i class="fa fa-tag fa-fw"></i>${value}</div>`;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
<div id="search-result-wrapper" class="d-flex justify-content-center d-none">
|
<div id="search-result-wrapper" class="d-flex justify-content-center d-none">
|
||||||
<div class="col-11 content">
|
<div class="col-11 content">
|
||||||
<div id="search-hints">
|
<div id="search-hints">
|
||||||
{% include_cached trending-tags.html %}
|
{% include_cached trending-tags.html lang=include.lang %}
|
||||||
</div>
|
</div>
|
||||||
<div id="search-results" class="d-flex flex-wrap justify-content-center text-muted mt-3"></div>
|
<div id="search-results" class="d-flex flex-wrap justify-content-center text-muted mt-3"></div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -11,9 +11,7 @@
|
|||||||
{%- endif -%}
|
{%- endif -%}
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<h1 class="site-title">
|
<a class="site-title d-block" href="{{ '/' | relative_url }}">{{ site.title }}</a>
|
||||||
<a href="{{ '/' | relative_url }}">{{ site.title }}</a>
|
|
||||||
</h1>
|
|
||||||
<p class="site-subtitle fst-italic mb-0">{{ site.tagline }}</p>
|
<p class="site-subtitle fst-italic mb-0">{{ site.tagline }}</p>
|
||||||
</header>
|
</header>
|
||||||
<!-- .profile-wrapper -->
|
<!-- .profile-wrapper -->
|
||||||
|
10
_includes/toc-status.html
Normal file
10
_includes/toc-status.html
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
{% comment %}
|
||||||
|
Determine TOC state and return it through variable "enable_toc"
|
||||||
|
{% endcomment %}
|
||||||
|
|
||||||
|
{% assign enable_toc = false %}
|
||||||
|
{% if site.toc and page.toc %}
|
||||||
|
{% if page.content contains '<h2' or page.content contains '<h3' %}
|
||||||
|
{% assign enable_toc = true %}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
@ -1,13 +1,9 @@
|
|||||||
{% assign enable_toc = false %}
|
{% include toc-status.html %}
|
||||||
{% if site.toc and page.toc %}
|
|
||||||
{% if page.content contains '<h2' or page.content contains '<h3' %}
|
|
||||||
{% assign enable_toc = true %}
|
|
||||||
{% endif %}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if enable_toc %}
|
{% if enable_toc %}
|
||||||
<section id="toc-wrapper" class="d-none ps-0 pe-4">
|
<div class="toc-border-cover z-3"></div>
|
||||||
<h2 class="panel-heading ps-3 mb-2">{{- site.data.locales[include.lang].panel.toc -}}</h2>
|
<section id="toc-wrapper" class="invisible position-sticky ps-0 pe-4 pb-4">
|
||||||
|
<h2 class="panel-heading ps-3 pb-2 mb-0">{{- site.data.locales[include.lang].panel.toc -}}</h2>
|
||||||
<nav id="toc"></nav>
|
<nav id="toc"></nav>
|
||||||
</section>
|
</section>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<!-- The Top Bar -->
|
<!-- The Top Bar -->
|
||||||
|
|
||||||
<header id="topbar-wrapper" aria-label="Top Bar">
|
<header id="topbar-wrapper" class="flex-shrink-0" aria-label="Top Bar">
|
||||||
<div
|
<div
|
||||||
id="topbar"
|
id="topbar"
|
||||||
class="d-flex align-items-center justify-content-between px-lg-3 h-100"
|
class="d-flex align-items-center justify-content-between px-lg-3 h-100"
|
||||||
@ -40,7 +40,7 @@
|
|||||||
</nav>
|
</nav>
|
||||||
<!-- endof #breadcrumb -->
|
<!-- endof #breadcrumb -->
|
||||||
|
|
||||||
<button type="button" id="sidebar-trigger" class="btn btn-link">
|
<button type="button" id="sidebar-trigger" class="btn btn-link" aria-label="Sidebar">
|
||||||
<i class="fas fa-bars fa-fw"></i>
|
<i class="fas fa-bars fa-fw"></i>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
@ -55,7 +55,7 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<button type="button" id="search-trigger" class="btn btn-link">
|
<button type="button" id="search-trigger" class="btn btn-link" aria-label="Search">
|
||||||
<i class="fas fa-search fa-fw"></i>
|
<i class="fas fa-search fa-fw"></i>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
|
@ -1 +0,0 @@
|
|||||||
Chirpy v<%= pkg.version %> | © 2019 <%= pkg.author %> | <%= pkg.license %> Licensed | <%= pkg.homepage %>
|
|
@ -1,5 +1,5 @@
|
|||||||
import { basic, initSidebar, initTopbar } from './modules/layouts';
|
import { basic, initSidebar, initTopbar } from './modules/layouts';
|
||||||
import { categoryCollapse } from './modules/plugins';
|
import { categoryCollapse } from './modules/components';
|
||||||
|
|
||||||
basic();
|
basic();
|
||||||
initSidebar();
|
initSidebar();
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { basic, initSidebar, initTopbar } from './modules/layouts';
|
import { basic, initSidebar, initTopbar } from './modules/layouts';
|
||||||
import { initLocaleDatetime, loadImg } from './modules/plugins';
|
import { initLocaleDatetime, loadImg } from './modules/components';
|
||||||
|
|
||||||
loadImg();
|
loadImg();
|
||||||
initLocaleDatetime();
|
initLocaleDatetime();
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { basic, initSidebar, initTopbar } from './modules/layouts';
|
import { basic, initSidebar, initTopbar } from './modules/layouts';
|
||||||
import { initLocaleDatetime } from './modules/plugins';
|
import { initLocaleDatetime } from './modules/components';
|
||||||
|
|
||||||
initSidebar();
|
initSidebar();
|
||||||
initTopbar();
|
initTopbar();
|
||||||
|
@ -3,4 +3,8 @@ export { initClipboard } from './components/clipboard';
|
|||||||
export { loadImg } from './components/img-loading';
|
export { loadImg } from './components/img-loading';
|
||||||
export { imgPopup } from './components/img-popup';
|
export { imgPopup } from './components/img-popup';
|
||||||
export { initLocaleDatetime } from './components/locale-datetime';
|
export { initLocaleDatetime } from './components/locale-datetime';
|
||||||
export { toc } from './components/toc';
|
export { initToc } from './components/toc';
|
||||||
|
export { loadMermaid } from './components/mermaid';
|
||||||
|
export { modeWatcher } from './components/mode-toggle';
|
||||||
|
export { back2top } from './components/back-to-top';
|
||||||
|
export { loadTooptip } from './components/tooltip-loader';
|
@ -4,12 +4,47 @@
|
|||||||
* Dependencies: https://github.com/biati-digital/glightbox
|
* Dependencies: https://github.com/biati-digital/glightbox
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const IMG_CLASS = 'popup';
|
const lightImages = '.popup:not(.dark)';
|
||||||
|
const darkImages = '.popup:not(.light)';
|
||||||
|
let selector = lightImages;
|
||||||
|
|
||||||
|
function updateImages(current, reverse) {
|
||||||
|
if (selector === lightImages) {
|
||||||
|
selector = darkImages;
|
||||||
|
} else {
|
||||||
|
selector = lightImages;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (reverse === null) {
|
||||||
|
reverse = GLightbox({ selector: `${selector}` });
|
||||||
|
}
|
||||||
|
|
||||||
|
[current, reverse] = [reverse, current];
|
||||||
|
}
|
||||||
|
|
||||||
export function imgPopup() {
|
export function imgPopup() {
|
||||||
if (document.getElementsByClassName(IMG_CLASS).length === 0) {
|
if (document.querySelector('.popup') === null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
GLightbox({ selector: `.${IMG_CLASS}` });
|
const hasDualImages = !(
|
||||||
|
document.querySelector('.popup.light') === null &&
|
||||||
|
document.querySelector('.popup.dark') === null
|
||||||
|
);
|
||||||
|
|
||||||
|
if (Theme.visualState === Theme.DARK) {
|
||||||
|
selector = darkImages;
|
||||||
|
}
|
||||||
|
|
||||||
|
let current = GLightbox({ selector: `${selector}` });
|
||||||
|
|
||||||
|
if (hasDualImages && Theme.switchable) {
|
||||||
|
let reverse = null;
|
||||||
|
|
||||||
|
window.addEventListener('message', (event) => {
|
||||||
|
if (event.source === window && event.data && event.data.id === Theme.ID) {
|
||||||
|
updateImages(current, reverse);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
60
_javascript/modules/components/mermaid.js
Normal file
60
_javascript/modules/components/mermaid.js
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
/**
|
||||||
|
* Mermaid-js loader
|
||||||
|
*/
|
||||||
|
|
||||||
|
const MERMAID = 'mermaid';
|
||||||
|
const themeMapper = Theme.getThemeMapper('default', 'dark');
|
||||||
|
|
||||||
|
function refreshTheme(event) {
|
||||||
|
if (event.source === window && event.data && event.data.id === Theme.ID) {
|
||||||
|
// Re-render the SVG › <https://github.com/mermaid-js/mermaid/issues/311#issuecomment-332557344>
|
||||||
|
const mermaidList = document.getElementsByClassName(MERMAID);
|
||||||
|
|
||||||
|
[...mermaidList].forEach((elem) => {
|
||||||
|
const svgCode = elem.previousSibling.children.item(0).textContent;
|
||||||
|
elem.textContent = svgCode;
|
||||||
|
elem.removeAttribute('data-processed');
|
||||||
|
});
|
||||||
|
|
||||||
|
const newTheme = themeMapper[Theme.visualState];
|
||||||
|
|
||||||
|
mermaid.initialize({ theme: newTheme });
|
||||||
|
mermaid.init(null, `.${MERMAID}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function setNode(elem) {
|
||||||
|
const svgCode = elem.textContent;
|
||||||
|
const backup = elem.parentElement;
|
||||||
|
backup.classList.add('d-none');
|
||||||
|
// Create mermaid node
|
||||||
|
const mermaid = document.createElement('pre');
|
||||||
|
mermaid.classList.add(MERMAID);
|
||||||
|
const text = document.createTextNode(svgCode);
|
||||||
|
mermaid.appendChild(text);
|
||||||
|
backup.after(mermaid);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function loadMermaid() {
|
||||||
|
if (
|
||||||
|
typeof mermaid === 'undefined' ||
|
||||||
|
typeof mermaid.initialize !== 'function'
|
||||||
|
) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const initTheme = themeMapper[Theme.visualState];
|
||||||
|
|
||||||
|
let mermaidConf = {
|
||||||
|
theme: initTheme
|
||||||
|
};
|
||||||
|
|
||||||
|
const basicList = document.getElementsByClassName('language-mermaid');
|
||||||
|
[...basicList].forEach(setNode);
|
||||||
|
|
||||||
|
mermaid.initialize(mermaidConf);
|
||||||
|
|
||||||
|
if (Theme.switchable) {
|
||||||
|
window.addEventListener('message', refreshTheme);
|
||||||
|
}
|
||||||
|
}
|
15
_javascript/modules/components/mode-toggle.js
Normal file
15
_javascript/modules/components/mode-toggle.js
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
/**
|
||||||
|
* Add listener for theme mode toggle
|
||||||
|
*/
|
||||||
|
|
||||||
|
const $toggle = document.getElementById('mode-toggle');
|
||||||
|
|
||||||
|
export function modeWatcher() {
|
||||||
|
if (!$toggle) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$toggle.addEventListener('click', () => {
|
||||||
|
Theme.flip();
|
||||||
|
});
|
||||||
|
}
|
@ -1,14 +0,0 @@
|
|||||||
/**
|
|
||||||
* Add listener for theme mode toggle
|
|
||||||
*/
|
|
||||||
const toggle = document.getElementById('mode-toggle');
|
|
||||||
|
|
||||||
export function modeWatcher() {
|
|
||||||
if (!toggle) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
toggle.addEventListener('click', () => {
|
|
||||||
modeToggle.flipMode();
|
|
||||||
});
|
|
||||||
}
|
|
@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* This script make #search-result-wrapper switch to unloaded or shown automatically.
|
* This script make #search-result-wrapper switch to unload or shown automatically.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const btnSbTrigger = document.getElementById('sidebar-trigger');
|
const btnSbTrigger = document.getElementById('sidebar-trigger');
|
||||||
|
@ -1,27 +0,0 @@
|
|||||||
/**
|
|
||||||
* Expand or close the sidebar in mobile screens.
|
|
||||||
*/
|
|
||||||
|
|
||||||
const ATTR_DISPLAY = 'sidebar-display';
|
|
||||||
|
|
||||||
class SidebarUtil {
|
|
||||||
static isExpanded = false;
|
|
||||||
|
|
||||||
static toggle() {
|
|
||||||
if (SidebarUtil.isExpanded === false) {
|
|
||||||
document.body.setAttribute(ATTR_DISPLAY, '');
|
|
||||||
} else {
|
|
||||||
document.body.removeAttribute(ATTR_DISPLAY);
|
|
||||||
}
|
|
||||||
|
|
||||||
SidebarUtil.isExpanded = !SidebarUtil.isExpanded;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export function sidebarExpand() {
|
|
||||||
document
|
|
||||||
.getElementById('sidebar-trigger')
|
|
||||||
.addEventListener('click', SidebarUtil.toggle);
|
|
||||||
|
|
||||||
document.getElementById('mask').addEventListener('click', SidebarUtil.toggle);
|
|
||||||
}
|
|
@ -1,15 +1,36 @@
|
|||||||
export function toc() {
|
import { TocMobile as mobile } from './toc/toc-mobile';
|
||||||
if (document.querySelector('main h2, main h3')) {
|
import { TocDesktop as desktop } from './toc/toc-desktop';
|
||||||
// see: https://github.com/tscanlin/tocbot#usage
|
|
||||||
tocbot.init({
|
|
||||||
tocSelector: '#toc',
|
|
||||||
contentSelector: '.content',
|
|
||||||
ignoreSelector: '[data-toc-skip]',
|
|
||||||
headingSelector: 'h2, h3, h4',
|
|
||||||
orderedList: false,
|
|
||||||
scrollSmooth: false
|
|
||||||
});
|
|
||||||
|
|
||||||
document.getElementById('toc-wrapper').classList.remove('d-none');
|
const desktopMode = matchMedia('(min-width: 1200px)');
|
||||||
|
|
||||||
|
function refresh(e) {
|
||||||
|
if (e.matches) {
|
||||||
|
if (mobile.popupOpened) {
|
||||||
|
mobile.hidePopup();
|
||||||
|
}
|
||||||
|
|
||||||
|
desktop.refresh();
|
||||||
|
} else {
|
||||||
|
mobile.refresh();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
if (document.querySelector('main>article[data-toc="true"]') === null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Avoid create multiple instances of Tocbot. Ref: <https://github.com/tscanlin/tocbot/issues/203>
|
||||||
|
if (desktopMode.matches) {
|
||||||
|
desktop.init();
|
||||||
|
} else {
|
||||||
|
mobile.init();
|
||||||
|
}
|
||||||
|
|
||||||
|
const $tocWrapper = document.getElementById('toc-wrapper');
|
||||||
|
$tocWrapper.classList.remove('invisible');
|
||||||
|
|
||||||
|
desktopMode.onchange = refresh;
|
||||||
|
}
|
||||||
|
|
||||||
|
export { init as initToc };
|
||||||
|
20
_javascript/modules/components/toc/toc-desktop.js
Normal file
20
_javascript/modules/components/toc/toc-desktop.js
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
export class TocDesktop {
|
||||||
|
/* Tocbot options Ref: https://github.com/tscanlin/tocbot#usage */
|
||||||
|
static options = {
|
||||||
|
tocSelector: '#toc',
|
||||||
|
contentSelector: '.content',
|
||||||
|
ignoreSelector: '[data-toc-skip]',
|
||||||
|
headingSelector: 'h2, h3, h4',
|
||||||
|
orderedList: false,
|
||||||
|
scrollSmooth: false,
|
||||||
|
headingsOffset: 16 * 2 // 2rem
|
||||||
|
};
|
||||||
|
|
||||||
|
static refresh() {
|
||||||
|
tocbot.refresh(this.options);
|
||||||
|
}
|
||||||
|
|
||||||
|
static init() {
|
||||||
|
tocbot.init(this.options);
|
||||||
|
}
|
||||||
|
}
|
125
_javascript/modules/components/toc/toc-mobile.js
Normal file
125
_javascript/modules/components/toc/toc-mobile.js
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
/**
|
||||||
|
* TOC button, topbar and popup for mobile devices
|
||||||
|
*/
|
||||||
|
|
||||||
|
const $tocBar = document.getElementById('toc-bar');
|
||||||
|
const $soloTrigger = document.getElementById('toc-solo-trigger');
|
||||||
|
const $triggers = document.getElementsByClassName('toc-trigger');
|
||||||
|
const $popup = document.getElementById('toc-popup');
|
||||||
|
const $btnClose = document.getElementById('toc-popup-close');
|
||||||
|
|
||||||
|
const SCROLL_LOCK = 'overflow-hidden';
|
||||||
|
const CLOSING = 'closing';
|
||||||
|
|
||||||
|
export class TocMobile {
|
||||||
|
static #invisible = true;
|
||||||
|
static #barHeight = 16 * 3; // 3rem
|
||||||
|
|
||||||
|
static options = {
|
||||||
|
tocSelector: '#toc-popup-content',
|
||||||
|
contentSelector: '.content',
|
||||||
|
ignoreSelector: '[data-toc-skip]',
|
||||||
|
headingSelector: 'h2, h3, h4',
|
||||||
|
orderedList: false,
|
||||||
|
scrollSmooth: false,
|
||||||
|
collapseDepth: 4,
|
||||||
|
headingsOffset: this.#barHeight
|
||||||
|
};
|
||||||
|
|
||||||
|
static initBar() {
|
||||||
|
const observer = new IntersectionObserver(
|
||||||
|
(entries) => {
|
||||||
|
entries.forEach((entry) => {
|
||||||
|
$tocBar.classList.toggle('invisible', entry.isIntersecting);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
{ rootMargin: `-${this.#barHeight}px 0px 0px 0px` }
|
||||||
|
);
|
||||||
|
|
||||||
|
observer.observe($soloTrigger);
|
||||||
|
this.#invisible = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static listenAnchors() {
|
||||||
|
const $anchors = document.getElementsByClassName('toc-link');
|
||||||
|
[...$anchors].forEach((anchor) => {
|
||||||
|
anchor.onclick = () => this.hidePopup();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
static refresh() {
|
||||||
|
if (this.#invisible) {
|
||||||
|
this.initComponents();
|
||||||
|
}
|
||||||
|
tocbot.refresh(this.options);
|
||||||
|
this.listenAnchors();
|
||||||
|
}
|
||||||
|
|
||||||
|
static get popupOpened() {
|
||||||
|
return $popup.open;
|
||||||
|
}
|
||||||
|
|
||||||
|
static showPopup() {
|
||||||
|
this.lockScroll(true);
|
||||||
|
$popup.showModal();
|
||||||
|
const activeItem = $popup.querySelector('li.is-active-li');
|
||||||
|
activeItem.scrollIntoView({ block: 'center' });
|
||||||
|
}
|
||||||
|
|
||||||
|
static hidePopup() {
|
||||||
|
$popup.toggleAttribute(CLOSING);
|
||||||
|
|
||||||
|
$popup.addEventListener(
|
||||||
|
'animationend',
|
||||||
|
() => {
|
||||||
|
$popup.toggleAttribute(CLOSING);
|
||||||
|
$popup.close();
|
||||||
|
},
|
||||||
|
{ once: true }
|
||||||
|
);
|
||||||
|
|
||||||
|
this.lockScroll(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
static lockScroll(enable) {
|
||||||
|
document.documentElement.classList.toggle(SCROLL_LOCK, enable);
|
||||||
|
document.body.classList.toggle(SCROLL_LOCK, enable);
|
||||||
|
}
|
||||||
|
|
||||||
|
static clickBackdrop(event) {
|
||||||
|
if ($popup.hasAttribute(CLOSING)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const rect = event.target.getBoundingClientRect();
|
||||||
|
if (
|
||||||
|
event.clientX < rect.left ||
|
||||||
|
event.clientX > rect.right ||
|
||||||
|
event.clientY < rect.top ||
|
||||||
|
event.clientY > rect.bottom
|
||||||
|
) {
|
||||||
|
this.hidePopup();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static initComponents() {
|
||||||
|
this.initBar();
|
||||||
|
|
||||||
|
[...$triggers].forEach((trigger) => {
|
||||||
|
trigger.onclick = () => this.showPopup();
|
||||||
|
});
|
||||||
|
|
||||||
|
$popup.onclick = (e) => this.clickBackdrop(e);
|
||||||
|
$btnClose.onclick = () => this.hidePopup();
|
||||||
|
$popup.oncancel = (e) => {
|
||||||
|
e.preventDefault();
|
||||||
|
this.hidePopup();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
static init() {
|
||||||
|
tocbot.init(this.options);
|
||||||
|
this.listenAnchors();
|
||||||
|
this.initComponents();
|
||||||
|
}
|
||||||
|
}
|
@ -1,7 +1,7 @@
|
|||||||
import { back2top } from '../components/back-to-top';
|
import { back2top, loadTooptip, modeWatcher } from '../components';
|
||||||
import { loadTooptip } from '../components/tooltip-loader';
|
|
||||||
|
|
||||||
export function basic() {
|
export function basic() {
|
||||||
|
modeWatcher();
|
||||||
back2top();
|
back2top();
|
||||||
loadTooptip();
|
loadTooptip();
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,19 @@
|
|||||||
import { modeWatcher } from '../components/mode-watcher';
|
const ATTR_DISPLAY = 'sidebar-display';
|
||||||
import { sidebarExpand } from '../components/sidebar';
|
const $sidebar = document.getElementById('sidebar');
|
||||||
|
const $trigger = document.getElementById('sidebar-trigger');
|
||||||
|
const $mask = document.getElementById('mask');
|
||||||
|
|
||||||
|
class SidebarUtil {
|
||||||
|
static #isExpanded = false;
|
||||||
|
|
||||||
|
static toggle() {
|
||||||
|
this.#isExpanded = !this.#isExpanded;
|
||||||
|
document.body.toggleAttribute(ATTR_DISPLAY, this.#isExpanded);
|
||||||
|
$sidebar.classList.toggle('z-2', this.#isExpanded);
|
||||||
|
$mask.classList.toggle('d-none', !this.#isExpanded);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export function initSidebar() {
|
export function initSidebar() {
|
||||||
modeWatcher();
|
$trigger.onclick = $mask.onclick = () => SidebarUtil.toggle();
|
||||||
sidebarExpand();
|
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,15 @@
|
|||||||
import { basic, initSidebar, initTopbar } from './modules/layouts';
|
import { basic, initSidebar, initTopbar } from './modules/layouts';
|
||||||
import { loadImg, imgPopup, initClipboard } from './modules/plugins';
|
import {
|
||||||
|
loadImg,
|
||||||
|
imgPopup,
|
||||||
|
initClipboard,
|
||||||
|
loadMermaid
|
||||||
|
} from './modules/components';
|
||||||
|
|
||||||
loadImg();
|
loadImg();
|
||||||
imgPopup();
|
imgPopup();
|
||||||
initSidebar();
|
initSidebar();
|
||||||
initTopbar();
|
initTopbar();
|
||||||
initClipboard();
|
initClipboard();
|
||||||
|
loadMermaid();
|
||||||
basic();
|
basic();
|
||||||
|
@ -1,17 +1,20 @@
|
|||||||
import { basic, initSidebar, initTopbar } from './modules/layouts';
|
import { basic, initTopbar, initSidebar } from './modules/layouts';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
loadImg,
|
loadImg,
|
||||||
imgPopup,
|
imgPopup,
|
||||||
initLocaleDatetime,
|
initLocaleDatetime,
|
||||||
initClipboard,
|
initClipboard,
|
||||||
toc
|
initToc,
|
||||||
} from './modules/plugins';
|
loadMermaid
|
||||||
|
} from './modules/components';
|
||||||
|
|
||||||
loadImg();
|
loadImg();
|
||||||
toc();
|
initToc();
|
||||||
imgPopup();
|
imgPopup();
|
||||||
initSidebar();
|
initSidebar();
|
||||||
initLocaleDatetime();
|
initLocaleDatetime();
|
||||||
initClipboard();
|
initClipboard();
|
||||||
initTopbar();
|
initTopbar();
|
||||||
|
loadMermaid();
|
||||||
basic();
|
basic();
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
---
|
|
||||||
permalink: /:basename
|
|
||||||
---
|
|
@ -1,15 +1,19 @@
|
|||||||
import { pwa, baseurl } from '../../_config.yml';
|
|
||||||
import Toast from 'bootstrap/js/src/toast';
|
import Toast from 'bootstrap/js/src/toast';
|
||||||
|
|
||||||
if ('serviceWorker' in navigator) {
|
if ('serviceWorker' in navigator) {
|
||||||
if (pwa.enabled) {
|
// Get Jekyll config from URL parameters
|
||||||
const swUrl = `${baseurl}/sw.min.js`;
|
const src = new URL(document.currentScript.src);
|
||||||
|
const register = src.searchParams.get('register');
|
||||||
|
const baseUrl = src.searchParams.get('baseurl');
|
||||||
|
|
||||||
|
if (register) {
|
||||||
|
const swUrl = `${baseUrl}/sw.min.js`;
|
||||||
const notification = document.getElementById('notification');
|
const notification = document.getElementById('notification');
|
||||||
const btnRefresh = notification.querySelector('.toast-body>button');
|
const btnRefresh = notification.querySelector('.toast-body>button');
|
||||||
const popupWindow = Toast.getOrCreateInstance(notification);
|
const popupWindow = Toast.getOrCreateInstance(notification);
|
||||||
|
|
||||||
navigator.serviceWorker.register(swUrl).then((registration) => {
|
navigator.serviceWorker.register(swUrl).then((registration) => {
|
||||||
// In case the user ignores the notification
|
// Restore the update window that was last manually closed by the user
|
||||||
if (registration.waiting) {
|
if (registration.waiting) {
|
||||||
popupWindow.show();
|
popupWindow.show();
|
||||||
}
|
}
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user