merge latest upstream changes
Some checks failed
Build and Deploy Test Version - next.asandikci.com / build_deploy (push) Failing after 1m2s

This commit is contained in:
Aliberk Sandıkçı 2024-11-15 20:12:22 +03:00
commit 83e59fb385
Signed by: asandikci
GPG key ID: A3B47D76845BEDF3
161 changed files with 3719 additions and 1314 deletions

View 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"
]
}
}
}

View 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

View file

@ -0,0 +1,17 @@
body:
- type: checkboxes
attributes:
label: Checklist
description: Following the guidelines can make you more likely to get responses.
options:
- label: >-
I have read and accepted the
[contributing guidelines](https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/docs/CONTRIBUTING.md).
required: true
- type: textarea
attributes:
label: Description
description: Please describe in detail what you want to share.
validations:
required: true

View file

@ -0,0 +1,17 @@
body:
- type: checkboxes
attributes:
label: Checklist
description: Following the guidelines can make you more likely to get responses.
options:
- label: >-
I have read and accepted the
[contributing guidelines](https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/docs/CONTRIBUTING.md).
required: true
- type: textarea
attributes:
label: Description
description: Please describe in detail what you want to share.
validations:
required: true

View file

@ -0,0 +1,17 @@
body:
- type: checkboxes
attributes:
label: Checklist
description: Following the guidelines can make you more likely to get responses.
options:
- label: >-
I have read and accepted the
[contributing guidelines](https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/docs/CONTRIBUTING.md).
required: true
- type: textarea
attributes:
label: Description
description: Please describe in detail what you want to share.
validations:
required: true

View file

@ -0,0 +1,17 @@
body:
- type: checkboxes
attributes:
label: Checklist
description: Following the guidelines can make you more likely to get responses.
options:
- label: >-
I have read and accepted the
[contributing guidelines](https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/docs/CONTRIBUTING.md).
required: true
- type: textarea
attributes:
label: Description
description: Please describe in detail what you want to share.
validations:
required: true

View file

@ -0,0 +1,17 @@
body:
- type: checkboxes
attributes:
label: Checklist
description: Following the guidelines can make you more likely to get responses.
options:
- label: >-
I have read and accepted the
[contributing guidelines](https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/docs/CONTRIBUTING.md).
required: true
- type: textarea
attributes:
label: Description
description: Please describe in detail what you want to share.
validations:
required: true

View file

@ -0,0 +1,26 @@
body:
- type: checkboxes
attributes:
label: Checklist
description: Following the guidelines can make you more likely to get responses.
options:
- label: >-
I have read and accepted the
[contributing guidelines](https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/docs/CONTRIBUTING.md).
required: true
- type: dropdown
attributes:
label: What is the topic?
options:
- Sharing tips and tricks
- Just chatting
validations:
required: true
- type: textarea
attributes:
label: Description
description: Please describe in detail what you want to share.
validations:
required: true

View file

@ -0,0 +1,26 @@
body:
- type: checkboxes
attributes:
label: Checklist
description: Following the guidelines can make you more likely to get responses.
options:
- label: >-
I have read and accepted the
[contributing guidelines](https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/docs/CONTRIBUTING.md).
required: true
- type: dropdown
attributes:
label: What is the topic?
options:
- Sharing tips and tricks
- Just chatting
validations:
required: true
- type: textarea
attributes:
label: Description
description: Please describe in detail what you want to share.
validations:
required: true

View file

@ -0,0 +1,26 @@
body:
- type: checkboxes
attributes:
label: Checklist
description: Following the guidelines can make you more likely to get responses.
options:
- label: >-
I have read and accepted the
[contributing guidelines](https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/docs/CONTRIBUTING.md).
required: true
- type: dropdown
attributes:
label: What is the topic?
options:
- Sharing tips and tricks
- Just chatting
validations:
required: true
- type: textarea
attributes:
label: Description
description: Please describe in detail what you want to share.
validations:
required: true

View file

@ -0,0 +1,26 @@
body:
- type: checkboxes
attributes:
label: Checklist
description: Following the guidelines can make you more likely to get responses.
options:
- label: >-
I have read and accepted the
[contributing guidelines](https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/docs/CONTRIBUTING.md).
required: true
- type: dropdown
attributes:
label: What is the topic?
options:
- Sharing tips and tricks
- Just chatting
validations:
required: true
- type: textarea
attributes:
label: Description
description: Please describe in detail what you want to share.
validations:
required: true

View file

@ -0,0 +1,26 @@
body:
- type: checkboxes
attributes:
label: Checklist
description: Following the guidelines can make you more likely to get responses.
options:
- label: >-
I have read and accepted the
[contributing guidelines](https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/docs/CONTRIBUTING.md).
required: true
- type: dropdown
attributes:
label: What is the topic?
options:
- Sharing tips and tricks
- Just chatting
validations:
required: true
- type: textarea
attributes:
label: Description
description: Please describe in detail what you want to share.
validations:
required: true

View file

View file

View file

View file

View file

View file

@ -0,0 +1,17 @@
body:
- type: checkboxes
attributes:
label: Checklist
description: Following the guidelines can make you more likely to get responses.
options:
- label: >-
I have read and accepted the
[contributing guidelines](https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/docs/CONTRIBUTING.md).
required: true
- type: textarea
attributes:
label: Description
description: Please describe in detail what you want to share.
validations:
required: true

View file

@ -0,0 +1,17 @@
body:
- type: checkboxes
attributes:
label: Checklist
description: Following the guidelines can make you more likely to get responses.
options:
- label: >-
I have read and accepted the
[contributing guidelines](https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/docs/CONTRIBUTING.md).
required: true
- type: textarea
attributes:
label: Description
description: Please describe in detail what you want to share.
validations:
required: true

View file

@ -0,0 +1,17 @@
body:
- type: checkboxes
attributes:
label: Checklist
description: Following the guidelines can make you more likely to get responses.
options:
- label: >-
I have read and accepted the
[contributing guidelines](https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/docs/CONTRIBUTING.md).
required: true
- type: textarea
attributes:
label: Description
description: Please describe in detail what you want to share.
validations:
required: true

View file

@ -0,0 +1,17 @@
body:
- type: checkboxes
attributes:
label: Checklist
description: Following the guidelines can make you more likely to get responses.
options:
- label: >-
I have read and accepted the
[contributing guidelines](https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/docs/CONTRIBUTING.md).
required: true
- type: textarea
attributes:
label: Description
description: Please describe in detail what you want to share.
validations:
required: true

View file

@ -0,0 +1,17 @@
body:
- type: checkboxes
attributes:
label: Checklist
description: Following the guidelines can make you more likely to get responses.
options:
- label: >-
I have read and accepted the
[contributing guidelines](https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/docs/CONTRIBUTING.md).
required: true
- type: textarea
attributes:
label: Description
description: Please describe in detail what you want to share.
validations:
required: true

7
.github/DISCUSSION_TEMPLATE/ideas.yml vendored Normal file
View file

@ -0,0 +1,7 @@
body:
- type: textarea
attributes:
label: Description
description: Please describe in detail what you want to share.
validations:
required: true

25
.github/workflows/pr-filter.yml vendored Normal file
View 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 });

23
.github/workflows/publish.yml vendored Normal file
View file

@ -0,0 +1,23 @@
name: Publish
on:
push:
branches:
- docs
workflow_call:
secrets:
GH_PAT:
required: true
BUILDER:
required: true
workflow_dispatch:
jobs:
launch:
runs-on: ubuntu-latest
steps:
- run: |
curl -X POST -H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${{ secrets.GH_PAT }}" \
https://api.github.com/repos/${{ secrets.BUILDER }}/dispatches \
-d '{"event_type":"deploy", "client_payload":{"branch": "${{ github.ref_name }}"}}'

36
.github/workflows/scripts/pr-filter.js vendored Normal file
View 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.');
}
};

6
.gitignore vendored
View file

@ -5,6 +5,7 @@ Gemfile.lock
# Jekyll cache # Jekyll cache
.jekyll-cache .jekyll-cache
.jekyll-metadata
_site _site
# RubyGems # RubyGems
@ -16,5 +17,10 @@ package-lock.json
# IDE configurations # IDE configurations
.idea .idea
.vscode/*
!.vscode/settings.json
!.vscode/extensions.json
!.vscode/tasks.json
# Misc # Misc
_sass/dist

30
.gitignore.orig Normal file
View file

@ -0,0 +1,30 @@
# Bundler cache
.bundle
vendor
Gemfile.lock
# Jekyll cache
.jekyll-cache
.jekyll-metadata
_site
# RubyGems
*.gem
# NPM dependencies
node_modules
package-lock.json
# IDE configurations
.idea
.vscode/*
!.vscode/settings.json
!.vscode/extensions.json
!.vscode/tasks.json
# Misc
<<<<<<< HEAD
=======
_sass/dist
assets/js/dist
>>>>>>> upstream_master

5
.husky/commit-msg Executable file → Normal file
View file

@ -1,4 +1 @@
#!/bin/sh npx --no -- commitlint --edit $1
. "$(dirname "$0")/_/husky.sh"
npx --no -- commitlint --edit ${1}

8
.markdownlint.json Normal file
View file

@ -0,0 +1,8 @@
{
"commands-show-output": false,
"blanks-around-fences": false,
"line-length": false,
"no-inline-html": {
"allowed_elements": ["kbd", "sub"]
}
}

View file

@ -1,12 +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"
]
} }

14
.vscode/settings.json vendored
View file

@ -2,23 +2,29 @@
// 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"
}, },
"[markdown]": {
"editor.defaultFormatter": "yzhang.markdown-all-in-one"
},
// Formatter // Formatter
"[html][liquid]": { "[html][liquid]": {
"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
View 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."
}
]
}

13
Gemfile
View file

@ -4,20 +4,11 @@ source "https://rubygems.org"
gemspec gemspec
group :test do gem "html-proofer", "~> 5.0", group: :test
gem "html-proofer", "~> 4.4"
end
# Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem
# and associated library.
platforms :mingw, :x64_mingw, :mswin, :jruby do platforms :mingw, :x64_mingw, :mswin, :jruby do
gem "tzinfo", ">= 1", "< 3" gem "tzinfo", ">= 1", "< 3"
gem "tzinfo-data" gem "tzinfo-data"
end end
# Performance-booster for watching directories on Windows gem "wdm", "~> 0.2.0", :platforms => [:mingw, :x64_mingw, :mswin]
gem "wdm", "~> 0.1.1", :platforms => [:mingw, :x64_mingw, :mswin]
# Lock `http_parser.rb` gem to `v0.6.x` on JRuby builds since newer versions of the gem
# do not have a Java counterpart.
gem "http_parser.rb", "~> 0.6.0", :platforms => [:jruby]

View file

@ -1,14 +1,16 @@
<!-- markdownlint-disable-next-line -->
<div align="center"> <div align="center">
<!-- markdownlint-disable-next-line -->
# Chirpy Jekyll Theme # Chirpy Jekyll Theme
A minimal, responsive, and feature-rich Jekyll theme for technical writing. A minimal, responsive, and feature-rich Jekyll theme for technical writing.
[![Gem Version](https://img.shields.io/gem/v/jekyll-theme-chirpy?color=brightgreen)][gem]&nbsp; [![CI](https://img.shields.io/github/actions/workflow/status/cotes2020/jekyll-theme-chirpy/ci.yml?logo=github)][ci]&nbsp;
[![CI](https://github.com/cotes2020/jekyll-theme-chirpy/actions/workflows/ci.yml/badge.svg?branch=master&event=push)][ci]&nbsp; [![Codacy Badge](https://img.shields.io/codacy/grade/4e556876a3c54d5e8f2d2857c4f43894?logo=codacy)][codacy]&nbsp;
[![Codacy Badge](https://app.codacy.com/project/badge/Grade/4e556876a3c54d5e8f2d2857c4f43894)][codacy]&nbsp; [![GitHub license](https://img.shields.io/github/license/cotes2020/jekyll-theme-chirpy?color=goldenrod)][license]&nbsp;
[![GitHub license](https://img.shields.io/github/license/cotes2020/jekyll-theme-chirpy.svg)][license]&nbsp; [![Gem Version](https://img.shields.io/gem/v/jekyll-theme-chirpy?&logo=RubyGems&logoColor=ghostwhite&label=gem&color=orange)][gem]&nbsp;
[![996.icu](https://img.shields.io/badge/link-996.icu-%23FF4D5B.svg)](https://996.icu) [![Open in Dev Containers](https://img.shields.io/badge/Dev_Containers-Open-deepskyblue?logo=linuxcontainers)][open-container]
[**Live Demo** →][demo] [**Live Demo** →][demo]
@ -18,7 +20,7 @@
## Features ## Features
- Dark / Light Theme Mode - Dark Theme
- Localized UI language - Localized UI language
- Pinned Posts on Home Page - Pinned Posts on Home Page
- Hierarchical Categories - Hierarchical Categories
@ -28,13 +30,13 @@
- Syntax Highlighting - Syntax Highlighting
- Mathematical Expressions - Mathematical Expressions
- Mermaid Diagrams & Flowcharts - Mermaid Diagrams & Flowcharts
- Dark / Light Mode Images - Dark Mode Images
- Embed Videos - Embed Media
- Disqus / Giscus / Utterances Comments - Comment Systems
- Built-in Search - Built-in Search
- Atom Feeds - Atom Feeds
- PWA - PWA
- Google Analytics / GoatCounter - Web Analytics
- SEO & Performance Optimization - SEO & Performance Optimization
## Documentation ## Documentation
@ -54,7 +56,7 @@ For details, see the "[Contributing Guidelines][contribute-guide]".
Thanks to [all the contributors][contributors] involved in the development of the project! Thanks to [all the contributors][contributors] involved in the development of the project!
[![all-contributors](https://contrib.rocks/image?repo=cotes2020/jekyll-theme-chirpy&columns=16)][contributors] [![all-contributors](https://contrib.rocks/image?repo=cotes2020/jekyll-theme-chirpy&columns=16)][contributors]
<sub> Made with [contrib.rocks](https://contrib.rocks)</sub> <sub> — Made with [contrib.rocks](https://contrib.rocks)</sub>
### Third-Party Assets ### Third-Party Assets
@ -70,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/

View file

@ -1,7 +1,7 @@
# The Site Configuration # The Site Configuration
theme: jekyll-theme-chirpy theme: jekyll-theme-chirpy
lang: en lang: en
timezone: Europe/Istanbul timezone: Europe/Istanbul
# See for Jekyll SEO Tag Settings: https://github.com/jekyll/jekyll-seo-tag/blob/master/docs/usage.md # See for Jekyll SEO Tag Settings: https://github.com/jekyll/jekyll-seo-tag/blob/master/docs/usage.md
@ -15,18 +15,28 @@ baseurl: "/"
forgejo: forgejo:
username: asandikci username: asandikci
domain: 'git.aliberksandikci.com.tr' domain: "git.asandikci.com"
github:
username: asandikci
social: social:
name: Aliberk Sandıı name: Aliberk Sandıı
email: contact@aliberksandikci.com.tr email: contact@aliberksandikci.com.tr
links: links:
- https://git.aliberksandikci.com.tr/asandikci - https://git.asandikci.com/asandikci
- https://github.com/asandikci
- https://mastodon.social/@asandikci - https://mastodon.social/@asandikci
- https://www.linkedin.com/in/asandikci - https://www.linkedin.com/in/asandikci
theme_mode: # [light | dark] theme_mode: # [light | dark]
# Web Analytics Settings
analytics:
umami:
id: 80f4b239-3529-46be-b7a1-df82c6967a87
domain: analytics.yayindasin.org
# the avatar on sidebar, support local or CORS resources # the avatar on sidebar, support local or CORS resources
avatar: https://asandikci.com/assets/img/pp.png avatar: https://asandikci.com/assets/img/pp.png
@ -38,8 +48,9 @@ social_preview_image: # string, local or CORS resources
toc: true toc: true
comments: comments:
active: # The global switch for posts comments, e.g., 'disqus'. Keep it empty means disable # Global switch for the post-comment system. Keeping it empty means disabled.
# The active options are as follows: provider: # [disqus | utterances | giscus]
# The provider options are as follows:
disqus: disqus:
shortname: # fill with the Disqus shortname. https://help.disqus.com/en/articles/1717111-what-s-a-shortname shortname: # fill with the Disqus shortname. https://help.disqus.com/en/articles/1717111-what-s-a-shortname
# utterances settings https://utteranc.es/ # utterances settings https://utteranc.es/
@ -53,6 +64,7 @@ comments:
category: category:
category_id: category_id:
mapping: # optional, default to 'pathname' mapping: # optional, default to 'pathname'
strict: # optional, default to '0'
input_position: # optional, default to 'bottom' input_position: # optional, default to 'bottom'
lang: # optional, default to the value of `site.lang` lang: # optional, default to the value of `site.lang`
reactions_enabled: # optional, default to the value of `1` reactions_enabled: # optional, default to the value of `1`
@ -66,9 +78,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.
@ -80,6 +92,7 @@ paginate: 10
# ------------ The following options are not recommended to be modified ------------------ # ------------ The following options are not recommended to be modified ------------------
kramdown: kramdown:
footnote_backlink: "&#8617;&#xfe0e;"
syntax_highlighter: rouge syntax_highlighter: rouge
syntax_highlighter_opts: # Rouge Options https://github.com/jneen/rouge#full-options syntax_highlighter_opts: # Rouge Options https://github.com/jneen/rouge#full-options
css_class: highlight css_class: highlight
@ -116,10 +129,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
@ -140,7 +149,7 @@ exclude:
- tools - tools
- README.md - README.md
- LICENSE - LICENSE
- rollup.config.js - "*.config.js"
- package*.json - package*.json
jekyll-archives: jekyll-archives:

View file

@ -35,3 +35,15 @@
- type: rss - type: rss
icon: "fas fa-rss" icon: "fas fa-rss"
noblank: true noblank: true
#
# - 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

66
_data/contact.yml.orig Normal file
View file

@ -0,0 +1,66 @@
# The contact options.
- type: forgejo
icon: "fa-solid fa-code-branch"
url: 'https://git.aliberksandikci.com.tr/'
- type: xmpp
icon: 'fa fa-xmpp'
url: 'xmpp:asandikci@aliberksandikci.com.tr'
- type: email
icon: "fas fa-envelope"
noblank: false
- type: mastodon
icon: 'fa fa-mastodon'
url: 'https://mastodon.social/@asandikci/'
- type: linkedin
icon: 'fab fa-linkedin'
url: 'https://linkedin.com/in/asandikci'
- type: discord
icon: 'fa fa-discord'
url: 'https://discord.com/users/987999573479944222'
- type: instagram
icon: 'fa fa-instagram'
url: 'https://instagram.com/aliberksandikci'
- type: codeberg
icon: 'fl-codeberg'
url: 'https://codeberg.org/asandikci'
- type: rss
icon: "fas fa-rss"
<<<<<<< HEAD
noblank: true
=======
noblank: true
# Uncomment and complete the url below to enable more contact options
#
# - type: mastodon
# icon: 'fab fa-mastodon' # icons powered by <https://fontawesome.com/>
# url: '' # Fill with your Mastodon account page, rel="me" will be applied for verification
#
# - type: linkedin
# icon: 'fab fa-linkedin' # icons powered by <https://fontawesome.com/>
# url: '' # Fill with your Linkedin homepage
#
# - type: stack-overflow
# icon: 'fab fa-stack-overflow'
# 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
>>>>>>> upstream_master

View file

@ -43,7 +43,7 @@ copyright:
meta: باستخدام :PLATFORM السمة :THEME meta: باستخدام :PLATFORM السمة :THEME
not_found: not_found:
statment: عذرا, الرابط التالي غير صالح أو انه يشير إلى صفحة غير موجودة. statement: عذرا, الرابط التالي غير صالح أو انه يشير إلى صفحة غير موجودة.
notification: notification:
update_found: يتوفر اصدار جديد للمحتوى. update_found: يتوفر اصدار جديد للمحتوى.

View file

@ -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: Налична е нова версия на съдържанието.

View file

@ -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.

View file

@ -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.

View file

@ -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: Υπάρχει διαθέσιμη μια νέα έκδοση του περιεχομένου.

View file

@ -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.

View file

@ -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.

View file

@ -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.

View file

@ -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.

View file

@ -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

View file

@ -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.

View file

@ -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.

View file

@ -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: 새 버전의 콘텐츠를 사용할 수 있습니다.

View file

@ -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: အကြောင်းအရာဗားရှင်းအသစ်ကို ရနိုင်ပါပြီ။

View file

@ -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.

View file

@ -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: Доступна новая версия контента.

View file

@ -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.

View file

@ -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.

View file

@ -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: มีเวอร์ชันใหม่ของเนื้อหา

View file

@ -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.

View file

@ -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: Доступна нова версія вмісту.

View file

@ -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.

View file

@ -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: 发现新版本的内容。

View file

@ -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: 發現新版本更新。

18
_data/media.yml Normal file
View file

@ -0,0 +1,18 @@
- extension: mp3
mime_type: mpeg
- extension: mov
mime_type: quicktime
- extension: avi
mime_type: x-msvideo
- extension: mkv
mime_type: x-matroska
- extension: ogv
mime_type: ogg
- extension: weba
mime_type: webm
- extension: 3gp
mime_type: 3gpp
- extension: 3g2
mime_type: 3gpp2
- extension: mid
mime_type: midi

View file

@ -4,13 +4,6 @@ webfonts: /assets/lib/fonts/main.css
# Libraries # Libraries
jquery:
js: /assets/lib/jquery/jquery.min.js
bootstrap:
css: /assets/lib/bootstrap/bootstrap.min.css
js: /assets/lib/bootstrap/bootstrap.bundle.min.js
toc: toc:
css: /assets/lib/tocbot/tocbot.min.css css: /assets/lib/tocbot/tocbot.min.css
js: /assets/lib/tocbot/tocbot.min.js js: /assets/lib/tocbot/tocbot.min.js
@ -27,13 +20,13 @@ 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
magnific-popup: glightbox:
css: /assets/lib/magnific-popup/magnific-popup.css css: /assets/lib/glightbox/glightbox.min.css
js: /assets/lib/magnific-popup/jquery.magnific-popup.min.js js: /assets/lib/glightbox/glightbox.min.js
lazy-polyfill: lazy-polyfill:
css: /assets/lib/loading-attribute-polyfill/loading-attribute-polyfill.min.css css: /assets/lib/loading-attribute-polyfill/loading-attribute-polyfill.min.css

View file

@ -1,32 +1,27 @@
# CDNs # Resource Hints
resource_hints:
cdns:
# Google Fonts
- url: https://fonts.googleapis.com - url: https://fonts.googleapis.com
links:
- rel: preconnect
- rel: dns-prefetch
- url: https://fonts.gstatic.com - url: https://fonts.gstatic.com
args: crossorigin links:
- url: https://fonts.googleapis.com - rel: preconnect
# jsDelivr CDN opts: [crossorigin]
- rel: dns-prefetch
- url: https://cdn.jsdelivr.net - url: https://cdn.jsdelivr.net
# polyfill.io for math (cdnjs.cloudflare.com/polyfill) links:
- url: https://cdnjs.cloudflare.com - rel: preconnect
- rel: dns-prefetch
# fonts # Web Fonts
webfonts: https://fonts.googleapis.com/css2?family=Lato:wght@300;400&family=Source+Sans+Pro:wght@400;600;700;900&display=swap
webfonts: https://fonts.googleapis.com/css2?family=Lato&family=Source+Sans+Pro:wght@400;600;700;900&display=swap
# Libraries # Libraries
jquery:
js: https://cdn.jsdelivr.net/npm/jquery@3.7.1/dist/jquery.min.js
bootstrap:
css: https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css
js: https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js
toc: toc:
css: https://cdn.jsdelivr.net/npm/tocbot@4.25.0/dist/tocbot.min.css css: https://cdn.jsdelivr.net/npm/tocbot@4.29.0/dist/tocbot.min.css
js: https://cdn.jsdelivr.net/npm/tocbot@4.25.0/dist/tocbot.min.js js: https://cdn.jsdelivr.net/npm/tocbot@4.29.0/dist/tocbot.min.js
fontlogos: fontlogos:
css: https://cdn.jsdelivr.net/npm/font-logos@1/assets/font-logos.css css: https://cdn.jsdelivr.net/npm/font-logos@1/assets/font-logos.css
@ -35,7 +30,7 @@ forkawesome:
css: https://cdn.jsdelivr.net/npm/fork-awesome@1.2.0/css/fork-awesome.min.css css: https://cdn.jsdelivr.net/npm/fork-awesome@1.2.0/css/fork-awesome.min.css
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.6.0/css/all.min.css
ballooncss: ballooncss:
css: https://unpkg.com/balloon-css/balloon.min.css css: https://unpkg.com/balloon-css/balloon.min.css
@ -44,18 +39,18 @@ 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.8.0/dist/mermaid.min.js js: https://cdn.jsdelivr.net/npm/mermaid@11.0.2/dist/mermaid.min.js
dayjs: dayjs:
js: js:
common: https://cdn.jsdelivr.net/npm/dayjs@1.11.10/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.10/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.10/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.10/plugin/localizedFormat.min.js localizedFormat: https://cdn.jsdelivr.net/npm/dayjs@1.11.13/plugin/localizedFormat.js
magnific-popup: glightbox:
css: https://cdn.jsdelivr.net/npm/magnific-popup@1.1.0/dist/magnific-popup.min.css css: https://cdn.jsdelivr.net/npm/glightbox@3.3.0/dist/css/glightbox.min.css
js: https://cdn.jsdelivr.net/npm/magnific-popup@1.1.0/dist/jquery.magnific-popup.min.js js: https://cdn.jsdelivr.net/npm/glightbox@3.3.0/dist/js/glightbox.min.js
lazy-polyfill: lazy-polyfill:
css: https://cdn.jsdelivr.net/npm/loading-attribute-polyfill@2.1.1/dist/loading-attribute-polyfill.min.css css: https://cdn.jsdelivr.net/npm/loading-attribute-polyfill@2.1.1/dist/loading-attribute-polyfill.min.css

View file

@ -1,5 +1,4 @@
platforms: 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/sharing/share-offsite/?url=URL"
@ -28,3 +27,50 @@ platforms:
- type: Telegram - type: Telegram
icon: "fab fa-telegram" icon: "fab fa-telegram"
link: "https://t.me/share/url?url=URL&text=TITLE" link: "https://t.me/share/url?url=URL&text=TITLE"
- 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"
# Uncomment below if you need to.
#
# - type: Linkedin
# icon: "fab fa-linkedin"
# link: "https://www.linkedin.com/sharing/share-offsite/?url=URL"
#
# - type: Weibo
# icon: "fab fa-weibo"
# link: "https://service.weibo.com/share/share.php?title=TITLE&url=URL"
#
# - type: Mastodon
# icon: "fa-brands fa-mastodon"
# # See: https://github.com/justinribeiro/share-to-mastodon#properties
# instances:
# - label: mastodon.social
# link: "https://mastodon.social/"
# - label: mastodon.online
# link: "https://mastodon.online/"
# - label: fosstodon.org
# link: "https://fosstodon.org/"
# - label: photog.social
# link: "https://photog.social/"
#
# - 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"

View file

@ -0,0 +1,7 @@
<!-- Cloudflare Web Analytics -->
<script
defer
src="https://static.cloudflareinsights.com/beacon.min.js"
data-cf-beacon='{"token": "{{ site.analytics.cloudflare.id }}"}'
></script>
<!-- End Cloudflare Web Analytics -->

View file

@ -0,0 +1,7 @@
<!-- Fathom -->
<script
src="https://cdn.usefathom.com/script.js"
data-site="{{ site.analytics.fathom.id }}"
defer>
</script>
<!-- End Fathom Code -->

View file

@ -0,0 +1,6 @@
<!-- GoatCounter -->
<script
async
src="https://gc.zgo.at/count.js"
data-goatcounter="https://{{ site.analytics.goatcounter.id }}.goatcounter.com/count"
></script>

View file

@ -0,0 +1,13 @@
<!-- Global site tag (gtag.js) - Google Analytics -->
<script defer src="https://www.googletagmanager.com/gtag/js?id={{ site.analytics.google.id }}"></script>
<script>
document.addEventListener('DOMContentLoaded', function (event) {
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag('js', new Date());
gtag('config', '{{ site.analytics.google.id }}');
});
</script>

View file

@ -0,0 +1,14 @@
<!-- Matomo -->
<script type="text/javascript">
var _paq = window._paq = window._paq || [];
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="//{{ site.analytics.matomo.domain }}/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', {{ site.analytics.matomo.id }}]);
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);
})();
</script>
<!-- End Matomo Code -->

View file

@ -0,0 +1,6 @@
<!-- Umami -->
<script
defer
src="{{ site.analytics.umami.domain }}/script.js"
data-website-id="{{ site.analytics.umami.id }}"
></script>

View file

@ -1,5 +1,5 @@
<!-- The comments switcher --> <!-- The comments switcher -->
{% if page.comments and site.comments.active %} {% if page.comments and site.comments.provider %}
{% capture path %}comments/{{ site.comments.active }}.html{% endcapture %} {% capture path %}comments/{{ site.comments.provider }}.html{% endcapture %}
{% include {{ path }} %} {% include {{ path }} %}
{% endif %} {% endif %}

View file

@ -10,7 +10,7 @@
this.page.identifier = '{{ page.url }}'; this.page.identifier = '{{ page.url }}';
}; };
/* Lazy loading */ {%- comment -%} Lazy loading {%- endcomment -%}
var disqus_observer = new IntersectionObserver( var disqus_observer = new IntersectionObserver(
function (entries) { function (entries) {
if (entries[0].isIntersecting) { if (entries[0].isIntersecting) {
@ -28,12 +28,12 @@
{ threshold: [0] } { threshold: [0] }
); );
disqus_observer.observe(document.querySelector('#disqus_thread')); disqus_observer.observe(document.getElementById('disqus_thread'));
/* Auto switch theme */ {%- comment -%} Auto switch theme {%- endcomment -%}
function reloadDisqus() { function reloadDisqus() {
if (event.source === window && event.data && event.data.direction === ModeToggle.ID) { if (event.source === window && event.data && event.data.direction === ModeToggle.ID) {
/* Disqus hasn't been loaded */ {%- comment -%} Disqus hasn't been loaded {%- endcomment -%}
if (typeof DISQUS === 'undefined') { if (typeof DISQUS === 'undefined') {
return; return;
} }
@ -44,7 +44,7 @@
} }
} }
if (document.querySelector('.mode-toggle')) { if (document.getElementById('mode-toggle')) {
window.addEventListener('message', reloadDisqus); window.addEventListener('message', reloadDisqus);
} }
</script> </script>

View file

@ -2,7 +2,6 @@
<script type="text/javascript"> <script type="text/javascript">
(function () { (function () {
const origin = 'https://giscus.app'; const origin = 'https://giscus.app';
const iframe = 'iframe.giscus-frame';
const lightTheme = 'light'; const lightTheme = 'light';
const darkTheme = 'dark_dimmed'; const darkTheme = 'dark_dimmed';
@ -18,6 +17,12 @@
initTheme = darkTheme; initTheme = darkTheme;
} }
let lang = '{{ site.comments.giscus.lang | default: lang }}';
{%- comment -%} https://github.com/giscus/giscus/tree/main/locales {%- endcomment -%}
if (lang.length > 2 && !lang.startsWith('zh')) {
lang = lang.slice(0, 2);
}
let giscusAttributes = { let giscusAttributes = {
src: 'https://giscus.app/client.js', src: 'https://giscus.app/client.js',
'data-repo': '{{ site.comments.giscus.repo}}', 'data-repo': '{{ site.comments.giscus.repo}}',
@ -25,11 +30,12 @@
'data-category': '{{ site.comments.giscus.category }}', 'data-category': '{{ site.comments.giscus.category }}',
'data-category-id': '{{ site.comments.giscus.category_id }}', 'data-category-id': '{{ site.comments.giscus.category_id }}',
'data-mapping': '{{ site.comments.giscus.mapping | default: 'pathname' }}', 'data-mapping': '{{ site.comments.giscus.mapping | default: 'pathname' }}',
'data-strict' : '{{ site.comments.giscus.strict | default: '0' }}',
'data-reactions-enabled': '{{ site.comments.giscus.reactions_enabled | default: '1' }}', 'data-reactions-enabled': '{{ site.comments.giscus.reactions_enabled | default: '1' }}',
'data-emit-metadata': '0', 'data-emit-metadata': '0',
'data-theme': initTheme, 'data-theme': initTheme,
'data-input-position': '{{ site.comments.giscus.input_position | default: 'bottom' }}', 'data-input-position': '{{ site.comments.giscus.input_position | default: 'bottom' }}',
'data-lang': '{{ site.comments.giscus.lang | default: lang }}', 'data-lang': lang,
'data-loading': 'lazy', 'data-loading': 'lazy',
crossorigin: 'anonymous', crossorigin: 'anonymous',
async: '' async: ''
@ -47,7 +53,7 @@
event.data && event.data &&
event.data.direction === ModeToggle.ID event.data.direction === ModeToggle.ID
) { ) {
/* global theme mode changed */ {%- comment -%} global theme mode changed {%- endcomment -%}
const mode = event.data.message; const mode = event.data.message;
const theme = mode === ModeToggle.DARK_MODE ? darkTheme : lightTheme; const theme = mode === ModeToggle.DARK_MODE ? darkTheme : lightTheme;
@ -57,7 +63,7 @@
} }
}; };
const giscus = document.querySelector(iframe).contentWindow; const giscus = document.getElementsByClassName('giscus-frame')[0].contentWindow;
giscus.postMessage({ giscus: message }, origin); giscus.postMessage({ giscus: message }, origin);
} }
}); });

View file

@ -10,7 +10,6 @@
<script type="text/javascript"> <script type="text/javascript">
(function () { (function () {
const origin = 'https://utteranc.es'; const origin = 'https://utteranc.es';
const iframe = 'iframe.utterances-frame';
const lightTheme = 'github-light'; const lightTheme = 'github-light';
const darkTheme = 'github-dark'; const darkTheme = 'github-dark';
let initTheme = lightTheme; let initTheme = lightTheme;
@ -26,12 +25,12 @@
addEventListener('message', (event) => { addEventListener('message', (event) => {
let theme; let theme;
/* credit to <https://github.com/utterance/utterances/issues/170#issuecomment-594036347> */ {%- comment -%} credit to <https://github.com/utterance/utterances/issues/170#issuecomment-594036347> {%- endcomment -%}
if (event.origin === origin) { if (event.origin === origin) {
/* page initial */ {%- comment -%} page initial {%- endcomment -%}
theme = initTheme; theme = initTheme;
} else if (event.source === window && event.data && event.data.direction === ModeToggle.ID) { } else if (event.source === window && event.data && event.data.direction === ModeToggle.ID) {
/* global theme mode changed */ {%- comment -%} global theme mode changed {%- endcomment -%}
const mode = event.data.message; const mode = event.data.message;
theme = mode === ModeToggle.DARK_MODE ? darkTheme : lightTheme; theme = mode === ModeToggle.DARK_MODE ? darkTheme : lightTheme;
} else { } else {
@ -43,7 +42,7 @@
theme: theme theme: theme
}; };
const utterances = document.querySelector(iframe).contentWindow; const utterances = document.getElementsByClassName('utterances-frame')[0].contentWindow;
utterances.postMessage(message, origin); utterances.postMessage(message, origin);
}); });
})(); })();

View file

@ -0,0 +1,35 @@
{% assign src = include.src | strip %}
{% assign title = include.title | strip %}
{% assign types = include.types | default: '' | strip | split: '|' %}
{% unless src contains '://' %}
{%- capture src -%}
{% include media-url.html src=src subpath=page.media_subpath %}
{%- endcapture -%}
{% endunless %}
<p>
<audio class="embed-audio" controls>
{% assign extension = src | split: '.' | last %}
{% assign types = extension | concat: types %}
{% assign ext_size = extension | size %}
{% assign src_size = src | size %}
{% assign slice_size = src_size | minus: ext_size %}
{% assign filepath = src | slice: 0, slice_size %}
{% for type in types %}
{% assign src = filepath | append: type %}
{% assign media_item = site.data.media | find: 'extension', type %}
{% assign mime_type = media_item.mime_type | default: type %}
<source src="{{ src }}" type="audio/{{ mime_type }}">
{% endfor %}
Your browser does not support the audio tag. Here is a
<a href="{{ src | strip }}">link to the audio file</a> instead.
</audio>
{% if title %}
<em>{{ title }}</em>
{% endif %}
</p>

View file

@ -1,10 +1,9 @@
<iframe <iframe
class="embed-video bilibili" class="embed-video"
loading="lazy" loading="lazy"
src="https://player.bilibili.com/player.html?bvid={{ include.id }}" src="https://player.bilibili.com/player.html?bvid={{ include.id }}"
scrolling="no" scrolling="no"
border="0" frameborder="0"
frameborder="no"
framespacing="0" framespacing="0"
allowfullscreen="true" allowfullscreen="true"
></iframe> ></iframe>

View file

@ -0,0 +1,59 @@
{% assign video_url = include.src %}
{% assign title = include.title %}
{% assign poster_url = include.poster %}
{% assign types = include.types | default: '' | strip | split: '|' %}
{% unless video_url contains '://' %}
{%- capture video_url -%}
{% include media-url.html src=video_url subpath=page.media_subpath %}
{%- endcapture -%}
{% endunless %}
{% if poster_url %}
{% unless poster_url contains '://' %}
{%- capture poster_url -%}
{% include media-url.html src=poster_url subpath=page.media_subpath %}
{%- endcapture -%}
{% endunless %}
{% assign poster = 'poster="' | append: poster_url | append: '"' %}
{% endif %}
{% assign attributes = 'controls' %}
{% if include.autoplay %}
{% assign attributes = attributes | append: ' ' | append: 'autoplay' %}
{% endif %}
{% if include.loop %}
{% assign attributes = attributes | append: ' ' | append: 'loop' %}
{% endif %}
{% if include.muted %}
{% assign attributes = attributes | append: ' ' | append: 'muted' %}
{% endif %}
<p>
<video class="embed-video file" {{ poster }} {{ attributes }}>
{% assign extension = video_url | split: '.' | last %}
{% assign types = extension | concat: types %}
{% assign ext_size = extension | size %}
{% assign src_size = video_url | size %}
{% assign slice_size = src_size | minus: ext_size %}
{% assign filepath = video_url | slice: 0, slice_size %}
{% for type in types %}
{% assign src = filepath | append: type %}
{% assign media_item = site.data.media | find: 'extension', type %}
{% assign mime_type = media_item.mime_type | default: type %}
<source src="{{ src }}" type="video/{{ mime_type }}">
{% endfor %}
Your browser does not support the video tag. Here is a
<a href="{{ video_url | strip }}">link to the video file</a> instead.
</video>
{% if title %}
<em>{{ title }}</em>
{% endif %}
</p>

View file

@ -1,5 +1,5 @@
<iframe <iframe
class="embed-video youtube" class="embed-video"
loading="lazy" loading="lazy"
src="https://www.youtube.com/embed/{{ include.id }}" src="https://www.youtube.com/embed/{{ include.id }}"
title="YouTube video player" title="YouTube video player"

View file

@ -34,7 +34,14 @@
{%- endcapture -%} {%- endcapture -%}
{%- capture _theme -%} {%- capture _theme -%}
<a href="https://github.com/cotes2020/jekyll-theme-chirpy" target="_blank" rel="noopener">Chirpy</a> <a
data-bs-toggle="tooltip"
data-bs-placement="top"
title="v{{ theme.version }}"
href="https://github.com/cotes2020/jekyll-theme-chirpy"
target="_blank"
rel="noopener"
>Chirpy</a>
{%- endcapture -%} {%- endcapture -%}
{{ site.data.locales[include.lang].meta | replace: ':PLATFORM', _platform | replace: ':THEME', _theme }} {{ site.data.locales[include.lang].meta | replace: ':PLATFORM', _platform | replace: ':THEME', _theme }}

View file

@ -1,8 +0,0 @@
<!-- GoatCounter -->
<script
data-goatcounter="https://{{ site.goatcounter.id }}.goatcounter.com/count"
async
src="https://gc.zgo.at/count.js"
></script>

View file

@ -1,14 +0,0 @@
<!--
The GA snippet
-->
<!-- Global site tag (gtag.js) - Google Analytics -->
<script defer src="https://www.googletagmanager.com/gtag/js?id={{ site.google_analytics.id }}"></script>
<script>
document.addEventListener("DOMContentLoaded", function(event) {
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '{{ site.google_analytics.id }}');
});
</script>

View file

@ -1,120 +1,128 @@
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="theme-color" media="(prefers-color-scheme: light)" content="#f7f7f7"> <meta
<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#1b1b1e"> name="theme-color"
<meta name="apple-mobile-web-app-capable" content="yes"> media="(prefers-color-scheme: light)"
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"> content="#f7f7f7"
/>
<meta
name="theme-color"
media="(prefers-color-scheme: dark)"
content="#1b1b1e"
/>
<meta name="mobile-web-app-capable" content="yes" />
<meta
name="apple-mobile-web-app-status-bar-style"
content="black-translucent"
/>
<meta <meta
name="viewport" name="viewport"
content="width=device-width, user-scalable=no initial-scale=1, shrink-to-fit=no, viewport-fit=cover" content="width=device-width, user-scalable=no initial-scale=1, shrink-to-fit=no, viewport-fit=cover"
> />
{%- capture seo_tags -%} {%- capture seo_tags -%} {% seo title=false %} {%- endcapture -%}
{% seo title=false %}
{%- endcapture -%}
<!-- Setup Open Graph image --> <!-- Setup Open Graph image -->
{% if page.image %} {% if page.image %} {% assign src = page.image.path | default: page.image %}
{% assign src = page.image.path | default: page.image %} {% unless src contains '://' %} {%- capture img_url -%} {% include
media-url.html src=src subpath=page.media_subpath absolute=true %} {%-
{% unless src contains '://' %} endcapture -%} {%- capture old_url -%}{{ src | absolute_url }}{%- endcapture
{%- capture img_url -%} -%} {%- capture new_url -%}{{ img_url }}{%- endcapture -%} {% assign seo_tags
{% include img-url.html src=src img_path=page.img_path absolute=true %} = seo_tags | replace: old_url, new_url %} {% endunless %} {% elsif
{%- endcapture -%} site.social_preview_image %} {%- capture img_url -%} {% include media-url.html
src=site.social_preview_image absolute=true %} {%- endcapture -%} {%- capture
{%- capture old_url -%}{{ src | absolute_url }}{%- endcapture -%} og_image -%}
{%- capture new_url -%}{{ img_url }}{%- endcapture -%} <meta property="og:image" content="{{ img_url }}" />
{%- endcapture -%} {%- capture twitter_image -%}
{% assign seo_tags = seo_tags | replace: old_url, new_url %} <meta name="twitter:card" content="summary_large_image" />
{% endunless %} <meta property="twitter:image" content="{{ img_url }}" />
{%- endcapture -%} {% assign old_meta_clip = '
{% elsif site.social_preview_image %} <meta name="twitter:card" content="summary" />
{%- capture img_url -%} ' %} {% assign new_meta_clip = og_image | append: twitter_image %} {% assign
{% include img-url.html src=site.social_preview_image absolute=true %} seo_tags = seo_tags | replace: old_meta_clip, new_meta_clip %} {% endif %} {{
{%- endcapture -%} seo_tags }}
{%- capture og_image -%}
<meta property="og:image" content="{{ img_url }}" />
{%- endcapture -%}
{%- capture twitter_image -%}
<meta name="twitter:card" content="summary_large_image" />
<meta property="twitter:image" content="{{ img_url }}" />
{%- endcapture -%}
{% assign old_meta_clip = '<meta name="twitter:card" content="summary" />' %}
{% assign new_meta_clip = og_image | append: twitter_image %}
{% assign seo_tags = seo_tags | replace: old_meta_clip, new_meta_clip %}
{% endif %}
{{ seo_tags }}
<title> <title>
{%- unless page.layout == 'home' -%} {%- unless page.layout == 'home' -%} {{ page.title | append: ' | ' }} {%-
{{ page.title | append: ' | ' }} endunless -%} {{ site.title }}
{%- endunless -%}
{{ site.title }}
</title> </title>
{% include_cached favicons.html %} {% include_cached favicons.html %}
{% if site.resources.ignore_env != jekyll.environment and site.resources.self_hosted %} <!-- Resource Hints -->
<link href="{{ site.data.origin[type].webfonts | relative_url }}" rel="stylesheet"> {% unless site.assets.self_host.enabled %} {% for hint in
site.data.origin.cors.resource_hints %} {% for link in hint.links %} <link
{% else %} rel="{{ link.rel }}" href="{{ hint.url }}" {{ link.opts | join: ' ' }}> {%
{% for cdn in site.data.origin[type].cdns %} endfor %} {% endfor %} {% endunless %}
<link rel="preconnect" href="{{ cdn.url }}" {{ cdn.args }}>
<link rel="dns-prefetch" href="{{ cdn.url }}" {{ cdn.args }}>
{% endfor %}
<link rel="stylesheet" href="{{ site.data.origin[type].webfonts | relative_url }}">
{% endif %}
<!-- GA -->
{% if jekyll.environment == 'production' and site.google_analytics.id != empty and site.google_analytics.id %}
<link rel="preconnect" href="https://www.google-analytics.com" crossorigin="use-credentials">
<link rel="dns-prefetch" href="https://www.google-analytics.com">
<link rel="preconnect" href="https://www.googletagmanager.com" crossorigin="anonymous">
<link rel="dns-prefetch" href="https://www.googletagmanager.com">
{% endif %}
<!-- Bootstrap --> <!-- Bootstrap -->
<link rel="stylesheet" href="{{ site.data.origin[type].bootstrap.css | relative_url }}"> {% unless jekyll.environment == 'production' %}
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css"
/>
{% endunless %}
<!-- Font Logos --> <!-- Font Logos -->
<link rel="stylesheet" href="{{ site.data.origin[type].fontlogos.css | relative_url }}" > <link
rel="stylesheet"
href="{{ site.data.origin[type].fontlogos.css | relative_url }}"
/>
<!-- Font Awesome --> <!-- Font Awesome Icons -->
<link rel="stylesheet" href="{{ site.data.origin[type].fontawesome.css | relative_url }}"> <link
rel="stylesheet"
href="{{ site.data.origin[type].fontawesome.css | relative_url }}"
/>
<!-- Fork Awesome --> <!-- Fork Awesome [added by asandikci] -->
<link rel="stylesheet" href="{{ site.data.origin[type].forkawesome.css | relative_url }}" integrity="sha256-XoaMnoYC5TH6/+ihMEnospgm0J1PM/nioxbOUdnM8HY=" crossorigin="anonymous"> <link
rel="stylesheet"
href="{{ site.data.origin[type].forkawesome.css | relative_url }}"
integrity="sha256-XoaMnoYC5TH6/+ihMEnospgm0J1PM/nioxbOUdnM8HY="
crossorigin="anonymous"
/>
<!-- Balloon CSS --> <!-- Balloon CSS [added by asandikci] -->
<link rel="stylesheet" href="{{ site.data.origin[type].ballooncss.css | relative_url }}"> <link
rel="stylesheet"
href="{{ site.data.origin[type].ballooncss.css | relative_url }}"
/>
<link rel="stylesheet" href="{{ '/assets/css/:THEME.css' | replace: ':THEME', site.theme | relative_url }}"> <!-- Theme style -->
<link
rel="stylesheet"
href="{{ '/assets/css/:THEME.css' | replace: ':THEME', site.theme | relative_url }}"
/>
<!-- Web Font -->
<link
rel="stylesheet"
href="{{ site.data.origin[type].webfonts | relative_url }}"
/>
{% if site.toc and page.toc %} {% if site.toc and page.toc %}
<link rel="stylesheet" href="{{ site.data.origin[type].toc.css | relative_url }}"> <link
{% endif %} rel="stylesheet"
href="{{ site.data.origin[type].toc.css | relative_url }}"
{% if page.layout == 'post' or page.layout == 'page' or page.layout == 'home' %} />
<link rel="stylesheet" href="{{ site.data.origin[type]['lazy-polyfill'].css | relative_url }}"> {% endif %} {% if page.layout == 'post' or page.layout == 'page' or
{% endif %} page.layout == 'home' %}
<link
{% if page.layout == 'page' or page.layout == 'post' %} rel="stylesheet"
<!-- Manific Popup --> href="{{ site.data.origin[type]['lazy-polyfill'].css | relative_url }}"
<link rel="stylesheet" href="{{ site.data.origin[type].magnific-popup.css | relative_url }}"> />
{% endif %} {% if page.layout == 'page' or page.layout == 'post' %}
<!-- Image Popup -->
<link
rel="stylesheet"
href="{{ site.data.origin[type].glightbox.css | relative_url }}"
/>
{% endif %} {% endif %}
<!-- JavaScript --> <!-- JavaScript -->
{% unless site.theme_mode %} {% unless site.theme_mode %} {% include mode-toggle.html %} {% endunless %} {%
{% include mode-toggle.html %} include metadata-hook.html %}
{% endunless %}
{% include metadata-hook.html %}
</head> </head>

View file

@ -3,17 +3,10 @@
<!-- commons --> <!-- commons -->
<script src="/assets/js/user/copy.js"></script> <script src="/assets/js/user/copy.js"></script>
{% assign urls = site.data.origin[type].jquery.js {% assign urls = site.data.origin[type].search.js %}
| append: ','
| append: site.data.origin[type].bootstrap.js
| append: ','
| append: site.data.origin[type].search.js
%}
<!-- 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 %}
@ -21,7 +14,7 @@
<!-- image lazy-loading & popup & clipboard --> <!-- image lazy-loading & popup & clipboard -->
{% assign urls = urls {% assign urls = urls
| append: ',' | append: ','
| append: site.data.origin[type]['magnific-popup'].js | append: site.data.origin[type].glightbox.js
| append: ',' | append: ','
| append: site.data.origin[type].clipboard.js | append: site.data.origin[type].clipboard.js
%} %}
@ -34,7 +27,7 @@
or page.layout == 'category' or page.layout == 'category'
or page.layout == 'tag' or page.layout == 'tag'
%} %}
{% assign locale = site.lang | split: '-' | first %} {% assign locale = include.lang | split: '-' | first %}
{% assign urls = urls {% assign urls = urls
| append: ',' | append: ','
@ -68,47 +61,50 @@
{% 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 defer src="{{ script | relative_url }}"></script>
<script src="{{ script | relative_url }}"></script>
{% if page.math %} {% if page.math %}
<!-- MathJax --> <!-- MathJax -->
<script> <script src="{{ '/assets/js/data/mathjax.js' | relative_url }}"></script>
/* see: <https://docs.mathjax.org/en/latest/options/input/tex.html#tex-options> */
MathJax = {
tex: {
/* start/end delimiter pairs for in-line math */
inlineMath: [
['$', '$'],
['\\(', '\\)']
],
/* start/end delimiter pairs for display math */
displayMath: [
['$$', '$$'],
['\\[', '\\]']
],
/* equation numbering */
tags: 'ams'
}
};
</script>
<script src="https://cdnjs.cloudflare.com/polyfill/v3/polyfill.min.js?features=es6"></script> <script 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 %}
<!-- Pageviews -->
{% if page.layout == 'post' %}
{% assign provider = site.pageviews.provider %}
{% if provider and provider != empty %}
{% case provider %}
{% when 'goatcounter' %}
{% if site.analytics[provider].id != empty and site.analytics[provider].id %}
{% include pageviews/{{ provider }}.html %}
{% endif %}
{% endcase %}
{% endif %}
{% endif %}
{% if page.mermaid %}
{% include mermaid.html %}
{% endif %}
{% if jekyll.environment == 'production' %} {% if jekyll.environment == 'production' %}
<!-- PWA --> <!-- PWA -->
{% if site.pwa.enabled %} {% if site.pwa.enabled %}
<script defer src="{{ 'app.min.js' | prepend: js_dist | relative_url }}"></script> <script
defer
src="{{ 'app.min.js' | relative_url }}?baseurl={{ site.baseurl | default: '' }}&register={{ site.pwa.cache.enabled }}"
></script>
{% endif %} {% endif %}
<!-- GA --> <!-- Web Analytics -->
{% if site.google_analytics.id != empty and site.google_analytics.id %} {% for analytics in site.analytics %}
{% include google-analytics.html %} {% capture str %}{{ analytics }}{% endcapture %}
{% endif %} {% assign type = str | split: '{' | first %}
{% if site.analytics[type].id and site.analytics[type].id != empty %}
<!-- GoatCounter --> {% include analytics/{{ type }}.html %}
{% if site.goatcounter.id != empty and site.goatcounter.id %} {% endif %}
{% include goatcounter.html %} {% endfor %}
{% endif %}
{% endif %} {% endif %}

View file

@ -1,7 +1,9 @@
{% comment %} {% comment %}
Detect appearance language and return it through variable "lang" Detect appearance language and return it through variable "lang"
{% endcomment %} {% endcomment %}
{% if site.data.locales[site.lang] %} {% if site.data.locales[page.lang] %}
{% assign lang = page.lang %}
{% elsif site.data.locales[site.lang] %}
{% assign lang = site.lang %} {% assign lang = site.lang %}
{% else %} {% else %}
{% assign lang = 'en' %} {% assign lang = 'en' %}

View file

@ -1,25 +1,25 @@
{%- comment -%} {%- comment -%}
Generate image final URL based on `site.img_cdn`, `page.img_path` Generate media resource final URL based on `site.cdn`, `page.media_subpath`
Arguments: Arguments:
src - required, basic image path src - required, basic media resources path
img_path - optional, relative path of image subpath - optional, relative path of media resources
absolute - optional, boolean, if true, generate absolute URL absolute - optional, boolean, if true, generate absolute URL
Return: Return:
image URL media resources URL
{%- endcomment -%} {%- endcomment -%}
{% assign url = include.src %} {% assign url = include.src %}
{%- if url -%} {%- if url -%}
{% unless url contains ':' %} {% unless url contains ':' %}
{%- comment -%} Add page image path prefix {%- endcomment -%} {%- comment -%} Add media resources subpath prefix {%- endcomment -%}
{% assign url = include.img_path | default: '' | append: '/' | append: url %} {% assign url = include.subpath | default: '' | append: '/' | append: url %}
{%- comment -%} Prepend CND URL {%- endcomment -%} {%- comment -%} Prepend CND URL {%- endcomment -%}
{% if site.img_cdn %} {% if site.cdn %}
{% assign url = site.img_cdn | append: '/' | append: url %} {% assign url = site.cdn | append: '/' | append: url %}
{% endif %} {% endif %}
{% assign url = url | replace: '///', '/' | replace: '//', '/' | replace: ':/', '://' %} {% assign url = url | replace: '///', '/' | replace: '//', '/' | replace: ':/', '://' %}

View file

@ -1,29 +1,33 @@
<!-- mermaid-js loader --> <!-- mermaid-js loader -->
<script type="text/javascript"> <script type="text/javascript">
(function () { function updateMermaid(event) {
function updateMermaid(event) { if (event.source === window && event.data && event.data.direction === ModeToggle.ID) {
if (event.source === window && event.data && event.data.direction === ModeToggle.ID) { const mode = event.data.message;
const mode = event.data.message;
if (typeof mermaid === 'undefined') { if (typeof mermaid === 'undefined') {
return; return;
}
let expectedTheme = mode === ModeToggle.DARK_MODE ? 'dark' : 'default';
let config = { theme: expectedTheme };
/* Re-render the SVG <https://github.com/mermaid-js/mermaid/issues/311#issuecomment-332557344> */
$('.mermaid').each(function () {
let svgCode = $(this).prev().children().html();
$(this).removeAttr('data-processed');
$(this).html(svgCode);
});
mermaid.initialize(config);
mermaid.init(undefined, '.mermaid');
} }
}
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'; let initTheme = 'default';
const html = document.documentElement; const html = document.documentElement;
@ -35,15 +39,16 @@
} }
let mermaidConf = { let mermaidConf = {
theme: initTheme /* <default|dark|forest|neutral> */ theme: initTheme {%- comment -%} <default | dark | forest | neutral> {%- endcomment -%}
}; };
/* Create mermaid tag */ {%- comment -%} Create mermaid tag {%- endcomment -%}
document.querySelectorAll('pre>code.language-mermaid').forEach((elem) => { const basicList = document.getElementsByClassName('language-mermaid');
[...basicList].forEach((elem) => {
const svgCode = elem.textContent; const svgCode = elem.textContent;
const backup = elem.parentElement; const backup = elem.parentElement;
backup.classList.add('unloaded'); backup.classList.add('d-none');
/* create mermaid node */ {%- comment -%} create mermaid node {%- endcomment -%}
let mermaid = document.createElement('pre'); let mermaid = document.createElement('pre');
mermaid.classList.add('mermaid'); mermaid.classList.add('mermaid');
const text = document.createTextNode(svgCode); const text = document.createTextNode(svgCode);
@ -52,7 +57,6 @@
}); });
mermaid.initialize(mermaidConf); mermaid.initialize(mermaidConf);
window.addEventListener('message', updateMermaid); window.addEventListener('message', updateMermaid);
})(); })();
</script> </script>

View file

@ -19,45 +19,32 @@
} }
constructor() { constructor() {
if (this.hasMode) {
if (this.isDarkMode) {
if (!this.isSysDarkPrefer) {
this.setDark();
}
} else {
if (this.isSysDarkPrefer) {
this.setLight();
}
}
}
let self = this; let self = this;
/* always follow the system prefers */ {%- comment -%} always follow the system prefers {%- endcomment -%}
this.sysDarkPrefers.addEventListener('change', () => { this.sysDarkPrefers.addEventListener('change', () => {
if (self.hasMode) { if (self.hasMode) {
if (self.isDarkMode) {
if (!self.isSysDarkPrefer) {
self.setDark();
}
} else {
if (self.isSysDarkPrefer) {
self.setLight();
}
}
self.clearMode(); self.clearMode();
} }
self.notify(); self.notify();
}); });
} /* constructor() */
if (!this.hasMode) {
return;
}
if (this.isDarkMode) {
this.setDark();
} else {
this.setLight();
}
}
get sysDarkPrefers() { get sysDarkPrefers() {
return window.matchMedia('(prefers-color-scheme: dark)'); return window.matchMedia('(prefers-color-scheme: dark)');
} }
get isSysDarkPrefer() { get isPreferDark() {
return this.sysDarkPrefers.matches; return this.sysDarkPrefers.matches;
} }
@ -65,10 +52,6 @@
return this.mode === ModeToggle.DARK_MODE; return this.mode === ModeToggle.DARK_MODE;
} }
get isLightMode() {
return this.mode === ModeToggle.LIGHT_MODE;
}
get hasMode() { get hasMode() {
return this.mode != null; return this.mode != null;
} }
@ -77,12 +60,12 @@
return sessionStorage.getItem(ModeToggle.MODE_KEY); return sessionStorage.getItem(ModeToggle.MODE_KEY);
} }
/* get the current mode on screen */ {%- comment -%} get the current mode on screen {%- endcomment -%}
get modeStatus() { get modeStatus() {
if (this.isDarkMode || (!this.hasMode && this.isSysDarkPrefer)) { if (this.hasMode) {
return ModeToggle.DARK_MODE; return this.mode;
} else { } else {
return ModeToggle.LIGHT_MODE; return this.isPreferDark ? ModeToggle.DARK_MODE : ModeToggle.LIGHT_MODE;
} }
} }
@ -101,7 +84,9 @@
sessionStorage.removeItem(ModeToggle.MODE_KEY); sessionStorage.removeItem(ModeToggle.MODE_KEY);
} }
/* Notify another plugins that the theme mode has changed */ {%- comment -%}
Notify another plugins that the theme mode has changed
{%- endcomment -%}
notify() { notify() {
window.postMessage( window.postMessage(
{ {
@ -114,21 +99,9 @@
flipMode() { flipMode() {
if (this.hasMode) { if (this.hasMode) {
if (this.isSysDarkPrefer) { this.clearMode();
if (this.isLightMode) {
this.clearMode();
} else {
this.setLight();
}
} else {
if (this.isDarkMode) {
this.clearMode();
} else {
this.setDark();
}
}
} else { } else {
if (this.isSysDarkPrefer) { if (this.isPreferDark) {
this.setLight(); this.setLight();
} else { } else {
this.setDark(); this.setDark();
@ -136,8 +109,8 @@
} }
this.notify(); this.notify();
} /* flipMode() */ }
} /* ModeToggle */ }
const modeToggle = new ModeToggle(); const modeToggle = new ModeToggle();
</script> </script>

View file

@ -0,0 +1,19 @@
<!-- Display GoatCounter pageviews -->
<script>
let pv = document.getElementById('pageviews');
if (pv !== null) {
const uri = location.pathname.replace(/\/$/, '');
const url = `https://{{ site.analytics.goatcounter.id }}.goatcounter.com/counter/${encodeURIComponent(uri)}.json`;
fetch(url)
.then((response) => response.json())
.then((data) => {
const count = data.count.replace(/\s/g, '');
pv.innerText = new Intl.NumberFormat().format(count);
})
.catch((error) => {
pv.innerText = '1';
});
}
</script>

View file

@ -0,0 +1,16 @@
{%- comment -%}
Get post description or generate it from the post content.
{%- endcomment -%}
{%- assign max_length = include.max_length | default: 200 -%}
{%- capture description -%}
{%- if post.description -%}
{{- post.description -}}
{%- else -%}
{%- include no-linenos.html content=post.content -%}
{{- content | markdownify | strip_html -}}
{%- endif -%}
{%- endcapture -%}
{{- description | strip | truncate: max_length | escape -}}

View file

@ -97,7 +97,7 @@
{% assign _lazyload = true %} {% assign _lazyload = true %}
{%- capture _img_url -%} {%- capture _img_url -%}
{% include img-url.html src=_src img_path=page.img_path %} {% include media-url.html src=_src subpath=page.media_subpath %}
{%- endcapture -%} {%- endcapture -%}
{% assign _path_prefix = _img_url | remove: _src %} {% assign _path_prefix = _img_url | remove: _src %}

View file

@ -21,6 +21,7 @@
{% assign match_posts = match_posts | push: site.tags[tag] | uniq %} {% assign match_posts = match_posts | push: site.tags[tag] | uniq %}
{% endfor %} {% endfor %}
{% assign match_posts = match_posts | reverse %}
{% assign last_index = match_posts.size | minus: 1 %} {% assign last_index = match_posts.size | minus: 1 %}
{% assign score_list = '' | split: '' %} {% assign score_list = '' | split: '' %}
@ -81,10 +82,7 @@
{% include datetime.html date=post.date lang=include.lang %} {% include datetime.html date=post.date lang=include.lang %}
<h4 class="pt-0 my-2">{{ post.title }}</h4> <h4 class="pt-0 my-2">{{ post.title }}</h4>
<div class="text-muted"> <div class="text-muted">
<p> <p>{% include post-description.html %}</p>
{% include no-linenos.html content=post.content %}
{{ content | markdownify | strip_html | truncate: 200 | escape }}
</p>
</div> </div>
</div> </div>
</a> </a>

View file

@ -19,7 +19,7 @@
{% 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>
/* Note: dependent library will be loaded in `js-selector.html` */ {%- comment -%} Note: dependent library will be loaded in `js-selector.html` {%- endcomment -%}
SimpleJekyllSearch({ SimpleJekyllSearch({
searchInput: document.getElementById('search-input'), searchInput: document.getElementById('search-input'),
resultsContainer: document.getElementById('search-results'), resultsContainer: document.getElementById('search-results'),

View file

@ -1,6 +1,6 @@
<!-- The Search results --> <!-- The Search results -->
<div id="search-result-wrapper" class="d-flex justify-content-center unloaded"> <div id="search-result-wrapper" class="d-flex justify-content-center 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 %}

View file

@ -5,15 +5,13 @@
<a href="{{ '/' | relative_url }}" id="avatar" class="rounded-circle"> <a href="{{ '/' | relative_url }}" id="avatar" class="rounded-circle">
{%- if site.avatar != empty and site.avatar -%} {%- if site.avatar != empty and site.avatar -%}
{%- capture avatar_url -%} {%- capture avatar_url -%}
{% include img-url.html src=site.avatar %} {% include media-url.html src=site.avatar %}
{%- endcapture -%} {%- endcapture -%}
<img src="{{- avatar_url -}}" width="112" height="112" alt="avatar" onerror="this.style.display='none'"> <img src="{{- avatar_url -}}" width="112" height="112" alt="avatar" onerror="this.style.display='none'">
{%- 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 -->
@ -44,7 +42,7 @@
<div class="sidebar-bottom d-flex flex-wrap align-items-center w-100"> <div class="sidebar-bottom d-flex flex-wrap align-items-center w-100">
{% unless site.theme_mode %} {% unless site.theme_mode %}
<button type="button" class="mode-toggle btn" aria-label="Switch Mode"> <button type="button" class="btn btn-link nav-link" aria-label="Switch Mode" id="mode-toggle">
<i class="fas fa-adjust"></i> <i class="fas fa-adjust"></i>
</button> </button>

10
_includes/toc-status.html Normal file
View 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 %}

View file

@ -1,13 +1,8 @@
{% 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="ps-0 pe-4"> <section id="toc-wrapper" class="ps-0 pe-4">
<h2 class="panel-heading ps-3 pt-2 mb-2">{{- site.data.locales[include.lang].panel.toc -}}</h2> <h2 class="panel-heading ps-3 mb-2">{{- site.data.locales[include.lang].panel.toc -}}</h2>
<nav id="toc"></nav> <nav id="toc"></nav>
</section> </section>
{% endif %} {% endif %}

View file

@ -59,7 +59,7 @@
<i class="fas fa-search fa-fw"></i> <i class="fas fa-search fa-fw"></i>
</button> </button>
<search class="align-items-center ms-3 ms-lg-0"> <search id="search" class="align-items-center ms-3 ms-lg-0">
<i class="fas fa-search fa-fw"></i> <i class="fas fa-search fa-fw"></i>
<input <input
class="form-control" class="form-control"

View file

@ -1 +0,0 @@
Chirpy v<%= pkg.version %> | © 2019 <%= pkg.author %> | <%= pkg.license %> Licensed | <%= pkg.homepage %>

Some files were not shown because too many files have changed in this diff Show more