Compare commits

...

124 Commits

Author SHA1 Message Date
Cell a85a665530 🔖 Chore(release): 0.3.20 2025-04-30 13:43:00 +08:00
Cell 35413d613f Perf: add I18n support for echarts and timeline data param 2025-04-29 16:50:09 +08:00
Cell d1d3ed2954 Feat: add data and file params support for timeline shortcode (#595) 2025-04-29 16:26:03 +08:00
Cell 9c8c0b6dee Perf: optimize echarts plugin warnf content 2025-04-29 15:39:54 +08:00
ych817 0cf0d4f4e7 💄 Style: hide scrollbar in print media (#594)
Make sure that the scrollbar will not appear in the printed PDF
确保打印出的 PDF 中没有 scrollbar
2025-04-29 09:43:06 +08:00
Cell e663ebbd45 Feat: add file params for echarts shortcode 2025-04-28 17:26:29 +08:00
Cell 6eb582fef7 Feat: add async and data params for echarts shortcode (#592) 2025-04-28 14:57:58 +08:00
Cell 3053d889e2 💄 Style: update post chat widget style 2025-04-27 16:57:55 +08:00
Cell f7a9c52aac ♻️ Refactor: taxonomy templates lookup order 2025-04-27 15:32:31 +08:00
Cell 78971cdedb Feat: add JS code support for echarts (#582) 2025-04-26 02:56:16 +08:00
Cell d41e53bba4 Feat: add related content list in aside (#591) 2025-04-25 17:15:58 +08:00
Cell cb0d63717b 🐛 Fix(ignore): hide link to editor in content adapter posts 2025-04-25 14:04:36 +08:00
Cell b45ab833d5 Feat: add hugo.mainSections param support (#590)
https://gohugo.io/methods/site/mainsections/
2025-04-25 12:55:03 +08:00
Cell 450e774d3c ♻️ Refactor: change templates lookup order (#589) 2025-04-25 11:27:11 +08:00
Cell a93f67762f Feat: improve the display of Git information in the post 2025-04-24 18:06:59 +08:00
Cell c21914dd49 Feat: add page param linkToVscode to show link to view the post in VSCode 2025-04-24 17:13:51 +08:00
Cell 1360438540 Perf: support all markdown .Attributes for headings 2025-04-24 15:44:01 +08:00
Cell 669f836488 💄 Style: update SVG height to be compatible with Safari browser 2025-04-22 17:58:50 +08:00
Cell e62c0f2409 💄 Style: optimize PostChat widget style 2025-04-22 16:54:23 +08:00
Cell de72a8c802 🔖 Chore(release): 0.3.19 2025-04-22 15:06:18 +08:00
Cell f5b867d717 Feat: add echarts shortcode and code fences support JS object literal (#587) 2025-04-22 12:38:07 +08:00
Cell 5ba4a8145b Feat: deprecated image-legacy.html 2025-04-16 10:10:06 +08:00
Cell 80e4d07294 🐛 Fix: lookup rules of RSS templates (#585) 2025-04-16 10:03:06 +08:00
Cell c2dc17e9e0 🔖 Chore(release): 0.3.18 2025-04-15 10:25:49 +08:00
Cell b7edbf3e49 ⬆️ Chore: update Hugo min version to 0.146.0 2025-04-15 10:17:38 +08:00
Cell adeecfb69d 🐛 Fix: deprecated layouts/page directory at Hugo 0.146.0+ (#581) 2025-04-15 10:03:41 +08:00
Cell 64378cb9c0 🔖 Chore(release): 0.3.17 2025-04-14 11:09:28 +08:00
Cell 12c64431cb 🔧 Chore: add workspace suggestions and replace package manager to pnpm 2025-04-14 11:06:38 +08:00
Cell 142e933fa2 🐛 Fix: change template lookup order to fit Hugo 0.146.0 (#579)
fixed found no layout file for "html" kind "section" and "term"
2025-04-11 11:52:30 +08:00
github-actions[bot] 1a43881170 📝 Docs: update hugo-fixit component list 2025-04-10 01:27:00 +00:00
Cell b0170f55f0 🐛 Fix: fetch icon from link error 2025-04-09 16:32:25 +08:00
Cell 40c5dcb8c2 Feat: get link favicon from remote by google api 2025-04-09 16:08:23 +08:00
Cell ed14126001 🐛 Fix: that using music shortcode can cause toc freezing
Resolved #577
2025-04-08 11:01:44 +08:00
Cell 22c3353dde Feat: add hiddenAdapters param and front matter for recently updated list 2025-04-07 14:34:40 +08:00
Cell 2b936cb6ad Feat: add gist shortcode embed in theme
The gist shortcode was deprecated in hugo v0.143.0
2025-04-02 16:11:55 +08:00
Cell e2afa113be Feat: support bluesky shortcode (#576) 2025-03-12 15:01:31 +08:00
Cell 6c7145c311 Feat: get link favicon from remote by https://favicon.im/ 2025-03-12 12:31:11 +08:00
Cell 8212d6fd02 ♻️ Refactor: image rendering aaa~again (#575) 2025-03-07 12:18:40 +08:00
dependabot[bot] ad01016092 chore(deps-dev): bump @hugo-fixit/fixit-releaser from 1.1.1 to 1.1.4 (#573)
Bumps [@hugo-fixit/fixit-releaser](https://github.com/hugo-fixit/fixit-releaser) from 1.1.1 to 1.1.4.
- [Release notes](https://github.com/hugo-fixit/fixit-releaser/releases)
- [Commits](https://github.com/hugo-fixit/fixit-releaser/compare/v1.1.1...v1.1.4)

---
updated-dependencies:
- dependency-name: "@hugo-fixit/fixit-releaser"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-06 11:50:11 +08:00
github-actions[bot] 7d41c8af85 📝 Docs: update hugo-fixit component list 2025-03-05 01:23:50 +00:00
github-actions[bot] 3f66669581 📝 Docs: update hugo-fixit component list 2025-01-21 01:18:25 +00:00
Cell e0523a15d1 ⬆️ Chore(deps-dev): update @hugo-fixit/fixit-releaser to 1.1.1 2025-01-20 12:23:15 +08:00
Cell 8b4021295f 💥 Feat: default branch has been renamed to main 2025-01-19 04:34:24 +08:00
Cell cf04ad3593 🐛 Fix: adapted to hugo v0.141.0 for try function 2025-01-19 04:13:10 +08:00
github-actions[bot] 015610b7e8 📝 Docs: update hugo-fixit component list 2025-01-18 14:09:06 +00:00
Cell d6bd1ce697 🔧 Chore: use hugo-fixit/action-component-list to generate content 2025-01-18 22:07:56 +08:00
Cell 1739d6937b 📝 Docs: organize README content 2025-01-14 16:49:52 +08:00
Cell 2f564429de Feat: improve details shortcode 2025-01-10 10:56:05 +08:00
Cell 07816709b5 📝 Docs: update README for usage 2025-01-09 16:05:14 +08:00
Cell b124218350 ⬆️ Chore(deps-dev): update fixit-releaser from 1.0.1 to 1.0.4 2025-01-09 15:13:27 +08:00
Cell a58d15e140 🔧 Chore: make *.toml and *.md detectable in GitHub 2025-01-09 15:11:22 +08:00
Cell 409d6c8894 🔧 Chore(CI): update release workflow 2025-01-05 18:19:55 +08:00
Cell 53149ad6d2 📄 Docs: update LICENSE 2025-01-05 18:19:11 +08:00
Cell 1e59a684a6 🐛 Fix: giscus default theme maybe set error 2024-12-30 11:32:33 +08:00
Cell 30a67c4b52 Feat: open more custom blocks for posts page 2024-12-27 15:38:12 +08:00
Cell 469af95f10 🍱 Feat: add default favicon.ico 2024-12-26 10:43:22 +08:00
Cell 21750077ba 🐛 Fix: giscus default theme maybe set error 2024-12-26 10:24:07 +08:00
Cell 54675a61d5 Merge pull request #564 from hugo-fixit/fix-alert
🐛 Fix: blockquote render hook text parsing (#519)
2024-12-25 11:19:53 +08:00
Cell 72baedd5f5 Perf: add loadingText params for AI summary 2024-12-25 11:03:38 +08:00
Cell 03b3bfbd09 🐛 Fix(PostChat): AI summary wordLimit type error 2024-12-25 10:41:32 +08:00
Cell 33a8861ec6 Perf(PostChat): disable auto load content in 404 kind pages 2024-12-24 19:20:06 +08:00
Cell d3cb08f56f 📝 Docs: update README 2024-12-19 17:26:35 +08:00
Cell f537b808cf ✏️ Docs: fix typo 2024-12-19 17:21:31 +08:00
Cell 45ce8679ad 🐛 Fix(PostChat): null pointer rrror 2024-12-19 17:07:43 +08:00
Cell 036cbb415b Merge branch 'feat-post-chat'
* feat-post-chat:
  📝 Docs: change default PostChat config
2024-12-19 14:20:55 +08:00
Cell d816b1c836 📝 Docs: change default PostChat config 2024-12-19 14:20:20 +08:00
Cell 2e96060d41 Merge pull request #563 from hugo-fixit/feat-post-chat
🎉 Feat: add PostChat AI support
2024-12-19 14:19:10 +08:00
Cell 10b46284a1 📝 Chore: remove todo comment 2024-12-19 12:42:15 +08:00
Cell 3e210af76a Feat: add post-chat search engine powered by PostChat 2024-12-19 12:22:48 +08:00
Cell fcd72c9d66 Perf(postChat): auto switch dark/light theme mode 2024-12-19 10:59:55 +08:00
Cell 68b028e9b6 🐛 Fix(ignore): private posts disable upLoadWeb always 2024-12-19 10:05:48 +08:00
Cell e2eeaf9632 📝 Docs(ignore): update todo list 2024-12-18 21:25:17 +08:00
Cell 91f3ad7471 🐛 Fix(ignore): PostChat and PostSummary config merge error 2024-12-18 21:20:31 +08:00
Cell 041d5e2517 Perf: PostChat support all types page and PostSummary only for public posts 2024-12-18 17:56:42 +08:00
Cell 1d09297784 Perf: add embed blockDoms for PostChat only 2024-12-18 17:17:12 +08:00
Cell 5931bf3786 🎉 Feat: add PostChat AI support 2024-12-18 16:39:39 +08:00
Cell 0e7dc99319 🔧 Chore: use environment variable HUGO_VERSION to control Hugo version 2024-12-17 18:11:37 +08:00
Cell 9614598f07 🐛 Fix: switch to pollyfill.io on cdnjs 2024-12-17 11:46:02 +08:00
Cell 637c4641cb 🐛 Fix: the default value type error of some valine params 2024-12-16 16:05:05 +08:00
Cell d2c4d7c18f 🐛 Fix: blockquote render hook text parsing (#519) 2024-12-13 15:29:03 +08:00
Cell 99f51de9f9 📝 Chore: add ignore class for language-switch in README 2024-12-13 11:34:50 +08:00
Cell 9faf1ac1a8 Revert: "🐛 Fix: resolve the aspect ratio issue temporarily" 2024-12-13 10:25:07 +08:00
Cell 393a1393c3 📝 Docs: README adds support for various languages 2024-12-10 17:52:31 +08:00
Cell 5e587a13a2 💄 Style: use title attr to set collection translation 2024-12-06 10:16:20 +08:00
Cell 5712ea5a0d 🔖 Chore(release): 0.3.16 2024-12-04 21:57:54 +08:00
Cell a30c683582 Chore: simplify judgment 2024-12-04 16:03:05 +08:00
Cell ac4418e24e Merge branch 'dev'
* dev:
  💄 Style: update sub menu overflow to auto scroll
   Feat: open custom blocks: custom-menu:desktop and custom-menu:mobile
2024-12-03 17:30:28 +08:00
Cell c3d63475b8 💄 Style: update sub menu overflow to auto scroll 2024-12-03 17:30:10 +08:00
Ali Sajid Imami c0115f6d94 🎉Feat: add automatic generation of mastodon verification links
Signed-off-by: Ali Sajid Imami <395482+AliSajid@users.noreply.github.com>
2024-12-03 17:28:49 +08:00
Cell fda3fa66ef Feat: open custom blocks: custom-menu:desktop and custom-menu:mobile 2024-12-02 17:08:19 +08:00
dependabot[bot] 83d25c36b8 chore(deps-dev): bump husky from 9.1.6 to 9.1.7
Bumps [husky](https://github.com/typicode/husky) from 9.1.6 to 9.1.7.
- [Release notes](https://github.com/typicode/husky/releases)
- [Commits](https://github.com/typicode/husky/compare/v9.1.6...v9.1.7)

---
updated-dependencies:
- dependency-name: husky
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-01 11:03:19 +08:00
Abdul Halim Daud d7788e962f ⬆️ Chore(libs): update Waline from 2.15.8 to 3.4.1 2024-11-30 21:43:22 +08:00
Cell 582b96b8ef 🐛 Fix: resolve the aspect ratio issue temporarily 2024-11-29 14:53:12 +08:00
Cell f66dc32ec2 Feat: add Bluesky social link 2024-11-29 14:29:48 +08:00
Cell f0af975663 ⬆️ Feat(libs): update fontawesome-free from 6.4.2 to 6.7.1
Close #555
2024-11-29 14:21:16 +08:00
Cell 54298bed8c 📝 Docs: update README 2024-11-29 12:18:59 +08:00
Cell c06afaba20 Merge pull request #551 from hugo-fixit/google-cse
 Feat: add Google CSE support
2024-11-28 14:11:39 +08:00
Cell 4c06eeffac Merge pull request #553 from hugo-fixit/i18n
🌐 Feat: fill in missing translations
2024-11-28 12:55:44 +08:00
Cell b77d209136 🌐 Feat: fill in missing translations
by Copilot
2024-11-28 12:53:59 +08:00
Cell decb259ee1 🌐 Feat: add search related translations 2024-11-28 11:29:52 +08:00
Cell ec9a544f04 Feat: add Google CSE support 2024-11-28 11:23:35 +08:00
Cell 03db8d32a2 Merge pull request #552 from teodororo/dev 2024-11-28 09:30:50 +08:00
Giovanna Souza Teodoro eca4fa4057 🚧 Fix: add content in pt-BR.toml 2024-11-27 20:19:46 -04:00
Cell 46edabd81a 📝 Chore: add todo comments 2024-11-27 17:55:43 +08:00
Cell 6a04876258 📝 Docs: add search archetype
command: hugo new content search/index.md
2024-11-27 17:53:29 +08:00
Cell 4886c05395 💄 Style: update search layout page style 2024-11-27 17:02:06 +08:00
Cell 168f1babc3 Feat: add page layout "search" 2024-11-27 16:20:21 +08:00
Cell 38b681cdfe 📝 Docs: update README 2024-11-27 14:34:08 +08:00
Cell fb80b8b3dc Feat: add Baidu, Umami, Plausible, Cloudflare and Splitbee analytics support
resolved #549
2024-11-22 17:45:23 +08:00
Cell f1ba78efa1 🔧 Chore: update package name and mini node version 2024-11-21 10:40:15 +08:00
Cell 3c96081689 🐛 Fix: katex-display height overflow 2024-11-20 15:14:02 +08:00
Cell fd000ad6b3 🐛 Fix: table-wrapper and katex-display overflow-x error 2024-11-20 12:48:13 +08:00
Cell 35cc57e64d 🔧 Chore: add "-O" flag to hugo server command 2024-11-19 17:21:40 +08:00
Cell 453ed31df0 💄 Style: update task list style 2024-11-19 11:09:15 +08:00
Cell 0af0b136ba 🔧 Chore: update build command 2024-11-19 09:55:44 +08:00
Cell a073b0e9f2 📝 Docs: update hugo.toml 2024-11-18 10:56:33 +08:00
Cell 9913731705 💄 Style: update summary delimiter style 2024-11-15 19:51:18 +08:00
Cell aa1709fbdd Feat: always show collection list and navigation 2024-11-15 14:24:08 +08:00
Cell fcb0f1efd5 🔖 Chore(release): 0.3.15 2024-11-11 12:35:41 +08:00
Cell 59ee34b710 Revert: "refactor reading progress with css animation"
I hate safari just like IE.

Close #542
2024-11-11 12:26:33 +08:00
Cell 5518053a26 🐛 Fix: image rendering not support base64 syntax (#540)
Close #540
2024-11-07 11:15:10 +08:00
Cell 2a0821f531 Feat: open version shortcode, support custom repository 2024-11-07 00:31:42 +08:00
Cell ad45d89098 🐛 Fix: reading progress not support safari 2024-11-06 21:53:32 +08:00
Cell 261f7b66ef 🐛 Fix: inaccurate task lists regular expression 2024-11-06 19:41:42 +08:00
133 changed files with 2358 additions and 1274 deletions
+3 -1
View File
@@ -1 +1,3 @@
assets/lib/**/* linguist-vendored
assets/lib/**/* linguist-vendored
*.toml linguist-detectable
*.md linguist-detectable
-27
View File
@@ -1,27 +0,0 @@
# Set to true to add reviewers to PRs
addReviewers: true
# Set to 'author' to add PR's author as a assignee
addAssignees: author
# A list of reviewers to be added to PRs (GitHub user name)
reviewers:
- Lruihao
# A number of reviewers added to the PR
# Set 0 to add all the reviewers (default: 0)
numberOfReviewers: 1
# A list of assignees, overrides reviewers if set
assignees:
- Lruihao
# A number of assignees to add to the PRs
# Set to 0 to add all of the assignees.
# Uses numberOfReviewers if unset.
numberOfAssignees: 0
# A list of keywords to be skipped the process if PR's title include it
skipKeywords:
- wip
- deps-dev
-14
View File
@@ -1,14 +0,0 @@
name: Auto Assign
on:
issues:
types: [opened]
pull_request_target:
types: [opened]
jobs:
run:
runs-on: ubuntu-latest
steps:
- uses: wow-actions/auto-assign@v3
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CONFIG_FILE: .github/configs/auto-assign.yml
+3 -3
View File
@@ -1,7 +1,7 @@
name: Hugo build check
on:
pull_request:
branches: [ master ]
branches: [ main ]
workflow_dispatch:
jobs:
Actions-Hugo-Check:
@@ -15,7 +15,7 @@ jobs:
- name: Setup Hugo
uses: peaceiris/actions-hugo@v3
with:
hugo-version: latest
hugo-version: ${{ vars.HUGO_VERSION || 'latest' }}
extended: true
- name: Build Hugo static files
run: hugo -v --source=demo --gc --minify
run: hugo --source=demo --gc --minify --logLevel info
+2 -2
View File
@@ -14,10 +14,10 @@ name: "CodeQL"
on:
push:
branches:
- master
- main
pull_request:
branches:
- master
- main
schedule:
- cron: "30 18 * * 5"
@@ -0,0 +1,28 @@
name: Generate hugo-fixit component list
on:
schedule: # Run workflow automatically
- cron: '0 0 * * *' # Runs every day at 00:00 UTC
workflow_dispatch: # Run workflow manually (without waiting for the cron to be called), through the GitHub Actions Workflow page directly
permissions:
contents: write # To write the generated contents to the readme
jobs:
generate-component-list:
name: Update this repo's README with the list of hugo-fixit theme components
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Generate hugo-fixit component list
uses: hugo-fixit/action-component-list@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
comment_tag_name: HUGO_FIXIT_COMPONENTS
readme_path: 'README.md,README.zh-cn.md'
template: "- [{$repo.name}]({$repo.html_url})\\\n {$repo.description}"
- name: Commit changes
uses: stefanzweifel/git-auto-commit-action@v5
with:
commit_message: ':memo: Docs: update hugo-fixit component list'
commit_author: 'github-actions[bot] <github-actions[bot]@users.noreply.github.com>'
+2 -1
View File
@@ -4,7 +4,7 @@ name: Release for new tag
# Controls when the action will run.
on:
# Triggers the workflow on push or pull request events but only for the master branch
# Triggers the workflow on push or pull request events but only for the main branch
push:
tags:
- 'v*.*.*'
@@ -36,6 +36,7 @@ jobs:
run: |
npm install
npm run release -- --starting-version ${{ github.ref_name }}
sed -i '1,4d' CHANGELOG.md
- name: GitHub Release
uses: softprops/action-gh-release@v2
+3 -1
View File
@@ -10,7 +10,9 @@ jsconfig.json
node_modules/
# VSCode
.vscode
.vscode/*
!.vscode/extensions.json
!.vscode/settings.json
# OS Files
## Windows
+1
View File
@@ -0,0 +1 @@
v18
+7
View File
@@ -0,0 +1,7 @@
{
"recommendations": [
"budparr.language-hugo-vscode",
"kaellarkin.hugo-shortcode-syntax",
"eliostruyf.vscode-hugo-themer"
]
}
+9
View File
@@ -0,0 +1,9 @@
{
"todo-tree.tree.scanMode": "workspace only",
"explorer.fileNesting.enabled": true,
"explorer.fileNesting.patterns": {
"tsconfig.json": "tsconfig.*.json, env.d.ts",
"vite.config.*": "jsconfig*, vitest.config.*, cypress.config.*, playwright.config.*",
"package.json": "package-lock.json, pnpm*, .yarnrc*, yarn*, .eslint*, eslint*, .oxlint*, oxlint*, .prettier*, prettier*, .editorconfig"
}
}
+12 -14
View File
@@ -15,7 +15,7 @@ git clone https://github.com/hugo-fixit/FixIt.git && cd FixIt
Then, install the dev dependencies.
```bash
npm install
pnpm install
```
And now you are ready to go!
@@ -24,15 +24,15 @@ Here are some useful commands.
```bash
# run a local debugging server with watch
npm run server
pnpm server
# run a local debugging server with watch in production environment
npm run server:production
pnpm server:production
```
If you want to do docs-related theme changes, the simplest way is to have both `FixIt` and `fixit-docs` cloned as sibling directories, and then run:
```bash
npm run server:docs
pnpm server:docs
```
Finally, create a new pull request at <https://github.com/hugo-fixit/FixIt/pulls> to submit your contribution 🎉
@@ -41,19 +41,17 @@ Finally, create a new pull request at <https://github.com/hugo-fixit/FixIt/pulls
### Branches
| Branch | Description |
| :-- | :-- |
| master | _The branch open to the public and release versions_ |
| dev | _The development branch of the next version_ |
| single feature | _The branch to enhancements or fixes_ |
| Branch | Description |
| :------------- | :----------------------------------------------------- |
| main | _The development branch, may contain unstable updates_ |
| single feature | _The branch to enhancements or fixes_ |
### Merge events
| event | merge |
| :-- | :-- |
| release | **dev => master:** `--rebase` |
| PR | **others:master => master:** `--rebase` |
| single feature| **feature branch => dev/master:** `--merge` |
| event | merge |
| :------------- | :------------------------------------ |
| PR | **others:main => main:** `--rebase` |
| single feature | **feature branch => main:** `--merge` |
### Commit message
+1 -1
View File
@@ -2,7 +2,7 @@ The MIT License (MIT)
Copyright (c) 2018 LIUZHICHAO.COM
Copyright (c) 2019-2020 DILLONZQ.COM
Copyright (c) 2021-2024 Lruihao (https://lruihao.cn)
Copyright (c) 2021-2025 Lruihao (https://lruihao.cn)
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
+105 -32
View File
@@ -1,46 +1,77 @@
<!-- markdownlint-disable-file MD033 MD041 -->
![Hugo Theme FixIt](https://fixit.lruihao.cn/images/apple-devices-preview.png)
<div align="center">English | <a href="/README.zh-cn.md">简体中文</a></div>
<div align="center" class="ignore">
<p>
FixIt is a clean, elegant but advanced blog theme for <a href="https://gohugo.io/">Hugo</a>.<br>
<em><sub>Don't forget to leave a ⭐️ if you like this theme, thanks!</sub></em>
</p>
English |
<a href="/README.zh-cn.md">简体中文</a> |
<a href="https://fixit.lruihao.cn/zh-cn/ecosystem/hugo-fixit/fixit/?lang=chinese_traditional">繁體中文</a> |
<a href="https://fixit.lruihao.cn/ecosystem/hugo-fixit/fixit/?lang=french">Français</a> |
<a href="https://fixit.lruihao.cn/ecosystem/hugo-fixit/fixit/?lang=russian">Русский язык</a> |
<a href="https://fixit.lruihao.cn/ecosystem/hugo-fixit/fixit/?lang=spanish">Español</a> |
<a href="https://fixit.lruihao.cn/ecosystem/hugo-fixit/fixit/?lang=hindi">हिन्दी</a> |
<a href="https://fixit.lruihao.cn/ecosystem/hugo-fixit/fixit/?lang=german">deutsch</a> |
<a href="https://fixit.lruihao.cn/ecosystem/hugo-fixit/fixit/?lang=korean">한국어</a> |
<a href="https://fixit.lruihao.cn/ecosystem/hugo-fixit/fixit/?lang=japanese">しろうと</a>
</div>
<a title="FixIt website" href="https://fixit.lruihao.cn"><img align="right" alt="FixIt logo" width="70" height="70" src="https://avatars.githubusercontent.com/u/110414864?s=200&v=4"></a>
# FixIt
> It is based on the original [LoveIt](https://github.com/dillonzq/LoveIt) Theme, [KeepIt](https://github.com/Fastbyte01/KeepIt) Theme and [LeaveIt](https://github.com/liuzc/LeaveIt) Theme.
[![GitHub release (latest by date)](https://img.shields.io/github/v/release/hugo-fixit/FixIt?style=flat)](https://github.com/hugo-fixit/FixIt/releases)
[![Hugo](https://img.shields.io/badge/Hugo-%5E0.134.1-ff4088?style=flat&logo=hugo)](https://gohugo.io/)
[![Hugo](https://img.shields.io/badge/Hugo-%5E0.146.0-ff4088?style=flat&logo=hugo)](https://gohugo.io/)
[![License](https://img.shields.io/github/license/hugo-fixit/FixIt?style=flat)](/LICENSE)
[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/hugo-fixit/FixIt)
> «FixIt» is a **clean**, **elegant** but **advanced** blog theme for [Hugo](https://gohugo.io/).
It is based on the original [LoveIt](https://github.com/dillonzq/LoveIt) Theme, [KeepIt](https://github.com/Fastbyte01/KeepIt) Theme and [LeaveIt](https://github.com/liuzc/LeaveIt) Theme.
## Live Preview
<p align="center">
💟 <a href="https://fixit.lruihao.cn">Production</a> | ❇️ <a href="https://pre.fixit.lruihao.cn">Preview</a> | 🚼 <a href="https://demo.fixit.lruihao.cn">Demo</a> | 🆕 <a href="https://hugo-fixit.github.io/hugo-fixit-starter/">Starter</a>
<br>
<br>
More «FixIt» examples <a href="https://fixit.lruihao.cn/showcase/">here</a>.
More FixIt examples <a href="https://fixit.lruihao.cn/showcase/">here</a>.
</p>
## Documentation
## Why choose FixIt
I don't know why 🤷.
<!-- Too lazy to write... -->
## Usage
### Documentation
Head to the [Quick Start](https://fixit.lruihao.cn/documentation/getting-started/quick-start/) page for a step-by-step guide on how to create a new website with FixIt.
Outline: [Installation](https://fixit.lruihao.cn/documentation/installation/) ➜ [Getting Started](https://fixit.lruihao.cn/documentation/getting-started/) ➜ [Content Management](https://fixit.lruihao.cn/documentation/content-management/) ➜ [Advanced Usage](https://fixit.lruihao.cn/documentation/advanced/)
## Template repository
### Starter Wizard
We provided a CLI tool to help you create a new project with FixIt by a single command.
```bash
pnpx fixit-cli create my-blog
```
[![asciicast](https://asciinema.org/a/697494.svg)](https://asciinema.org/a/697494)
### Templates
Click the following links to generate a new repository with template:
| Template repository | Generate link |
| :----------------------------------------- | :----------------------------: |
| [hugo-fixit/hugo-fixit-starter][starter] | [Click][starter:generate] |
| [hugo-fixit/hugo-fixit-starter1][starter1] | [Click][starter1:generate] |
| [hugo-fixit/docs][docs] | [Click][docs:generate] |
| [Lruihao/hugo-blog][lruihao-blog] | [Click][lruihao-blog:generate] |
| Template | repository | Generate link |
| :-------------------------------------------- | :-------------------------------- | :----------------------------: |
| A quick-start template base on Hugo Modules. | [hugo-fixit-starter][starter] | [Click][starter:generate] |
| A quick-start template base on Git submodule. | [hugo-fixit-starter1][starter1] | [Click][starter1:generate] |
| Build multilingual sites using Fixit theme. | [docs][docs] | [Click][docs:generate] |
| Customize with FixIt theme. | [Lruihao/hugo-blog][lruihao-blog] | [Click][lruihao-blog:generate] |
[starter]: https://github.com/hugo-fixit/hugo-fixit-starter
[starter:generate]: https://github.com/hugo-fixit/hugo-fixit-starter/generate
@@ -51,20 +82,22 @@ Click the following links to generate a new repository with template:
[lruihao-blog]: https://github.com/Lruihao/hugo-blog
[lruihao-blog:generate]: https://github.com/Lruihao/hugo-blog/generate
## Why choose FixIt
I don't know why 🤷
<!-- Too lazy to write... -->
## Features
<details>
<summary>Click to view.</summary>
### Performance and SEO
- Optimized for **performance**: 99/100 on mobile and 100/100 on desktop in [Google PageSpeed Insights](https://developers.google.com/speed/pagespeed/insights)
- Optimized SEO performance with a correct **SEO SCHEMA** based on JSON-LD
- **[Google Analytics](https://analytics.google.com/analytics)** supported
- **[Fathom Analytics](https://usefathom.com/)** supported
- **[Baidu Analytics](https://tongji.baidu.com/)** supported
- **[Umami Analytics](https://umami.is/)** supported
- **[Plausible Analytics](https://plausible.io/)** supported
- **[Cloudflare Web Analytics](https://www.cloudflare.com/web-analytics)** supported
- **[Splitbee Analytics](https://splitbee.io)** supported
- Search engine **verification** supported (Google, Bing, Yandex, Pinterest, Baidu, 360 and Sogou)
- **CDN** for third-party libraries supported
@@ -98,11 +131,13 @@ I don't know why 🤷
### Extended Features
- **AI Summary**, **AI Search** and **AI Chatbot** supported by [PostChat](https://ai.tianli0.top/?InviteID=IRE1S88Z)
- **PWA (Progressive Web App)** supported
- **Sub Menu** supported
- **Content Encryption** supported (Pages, Partial)
- **Friends** page embedded template
- **Search** supported by [algolia](https://www.algolia.com/) or [Fuse.js](https://fusejs.io/)
- **Search** supported by [algolia](https://www.algolia.com/), [Fuse.js](https://fusejs.io/), CSE or [PostChat](https://ai.tianli0.top/?InviteID=IRE1S88Z)
- **Custom Search Engine (CSE)** supported by [Google](https://programmablesearchengine.google.com/)
- **Twemoji** supported
- Automatically **highlighting** code
- **Copy code** to clipboard with one click
@@ -128,13 +163,14 @@ I don't know why 🤷
- Options to **cache remote image** locally
- ...
### Theme Components
The FixIt theme balances **simplicity** and **extensibility** with extra [Hugo theme components](https://fixit.lruihao.cn/components/) for customization.
</details>
## Multilingual and i18n
FixIt supports the following languages:
FixIt supports multilingual and i18n. For more information, see the [Content Management](https://fixit.lruihao.cn/documentation/content-management/introduction#multilingual) documentation. You are welcome to [contribute with a new language](https://github.com/hugo-fixit/FixIt/pulls).
<details>
<summary>FixIt supports the following languages.</summary>
- English
- Simplified Chinese
@@ -150,9 +186,44 @@ FixIt supports the following languages:
- Romanian
- Vietnamese
- Hindi
- [Contribute with a new language](https://github.com/hugo-fixit/FixIt/pulls)
[Languages Compatibility](https://fixit.lruihao.cn/documentation/basics/#language-compatibility)
</details>
## Theme Components
The FixIt theme balances **simplicity** and **extensibility** with extra [Hugo theme components](https://fixit.lruihao.cn/ecosystem/#-components) for customization.
<details>
<summary>Click to view.</summary>
<!-- HUGO_FIXIT_COMPONENTS:START -->
- [fixit-bundle](https://github.com/hugo-fixit/fixit-bundle)\
🌲 Bundles the FixIt core theme and all hugo-fixit components into a single component.
- [cmpt-flyfish](https://github.com/hugo-fixit/cmpt-flyfish)\
🐟 一个 canvas 实现的小鱼游动动画效果。
- [cmpt-mdevtools](https://github.com/hugo-fixit/cmpt-mdevtools)\
Mobile devtools component powered by vConsole and eruda.
- [cmpt-translate](https://github.com/hugo-fixit/cmpt-translate)\
🌐 A component for site automatic translation.
- [component-projects](https://github.com/hugo-fixit/component-projects)\
🐙 Display your GitHub projects in the FixIt theme and generate blog posts from readme.
- [hugo-atom-feed](https://github.com/hugo-fixit/hugo-atom-feed)\
Hugo theme component for ATOM feed custom Output Format.
- [hugo-json-feed](https://github.com/hugo-fixit/hugo-json-feed)\
Hugo theme component for JSON feed custom Output Format.
- [shortcode-asciinema](https://github.com/hugo-fixit/shortcode-asciinema)\
A Hugo theme component with asciinema-embed shortcode.
- [shortcode-caniuse](https://github.com/hugo-fixit/shortcode-caniuse)\
一个含有 caniuse shortcode 的 Hugo 主题组件。
- [shortcode-docs-bookmark](https://github.com/hugo-fixit/shortcode-docs-bookmark)\
🔖 Embed bookmark of FixIt Docs.
- [shortcode-mmt-netease](https://github.com/hugo-fixit/shortcode-mmt-netease)\
🎶 A Hugo theme component with a NetEase Cloud random comment shortcode.
- [shortcode-rewards](https://github.com/hugo-fixit/shortcode-rewards)\
A Hugo theme component with reward-log or sponsor-log shortcode.
<!-- HUGO_FIXIT_COMPONENTS:END -->
</details>
## Community
@@ -165,8 +236,6 @@ All feedback is welcome! Head over to the [discussions][discussions], [Pull requ
| [FixIt QQ group][qq-group] | QQ group: `814031017` |
| [Hugo FixIt Planet][zsxq] | Paid knowledge Planet |
Don't forget to leave a ⭐️ if you like this theme, thanks!
[discussions]: https://github.com/hugo-fixit/FixIt/discussions
[pulls]: https://github.com/hugo-fixit/FixIt/pulls
[issues]: https://github.com/hugo-fixit/FixIt/issues
@@ -243,10 +312,14 @@ FixIt is licensed under the **MIT** license. Check the [LICENSE file](/LICENSE)
If you enjoy the theme, please consider buying me a coffee ☕️. Thanks!
- [Wechat](images/wechatpay.jpg)
- [Alipay](images/alipay.jpg)
- [Wechat](/images/wechatpay.jpg)
- [Alipay](/images/alipay.jpg)
- [PayPal](https://paypal.me/Lruihao)
Thanks to the following sponsors for their support:
- [translate.js](https://github.com/xnx3/translate) Sponsoring [Enterprise Translation Channel](https://translate.zvo.cn/4087.html).
## Author
[Lruihao](https://github.com/Lruihao "Follow me on GitHub")
+105 -32
View File
@@ -1,46 +1,77 @@
<!-- markdownlint-disable-file MD033 MD041 -->
![Hugo Theme FixIt](https://fixit.lruihao.cn/images/apple-devices-preview.png)
<div align="center"><a href="/README.md">English</a> | 简体中文</div>
<div align="center" class="ignore">
<p>
FixIt 是一个简洁、优雅且高效的 <a href="https://gohugo.io/">Hugo</a> 博客主题。<br>
<em><sub>如果你喜欢这个主题,别忘了留下一颗 ⭐️ 哦,谢谢!</sub></em>
</p>
<a href="/README.md">English</a> |
简体中文 |
<a href="https://fixit.lruihao.cn/zh-cn/ecosystem/hugo-fixit/fixit/?lang=chinese_traditional">繁體中文</a> |
<a href="https://fixit.lruihao.cn/ecosystem/hugo-fixit/fixit/?lang=french">Français</a> |
<a href="https://fixit.lruihao.cn/ecosystem/hugo-fixit/fixit/?lang=russian">Русский язык</a> |
<a href="https://fixit.lruihao.cn/ecosystem/hugo-fixit/fixit/?lang=spanish">Español</a> |
<a href="https://fixit.lruihao.cn/ecosystem/hugo-fixit/fixit/?lang=hindi">हिन्दी</a> |
<a href="https://fixit.lruihao.cn/ecosystem/hugo-fixit/fixit/?lang=german">deutsch</a> |
<a href="https://fixit.lruihao.cn/ecosystem/hugo-fixit/fixit/?lang=korean">한국어</a> |
<a href="https://fixit.lruihao.cn/ecosystem/hugo-fixit/fixit/?lang=japanese">しろうと</a>
</div>
<a title="FixIt 官网" href="https://fixit.lruihao.cn/zh-cn/"><img align="right" alt="FixIt logo" width="70" height="70" src="https://avatars.githubusercontent.com/u/110414864?s=200&v=4"></a>
# FixIt
> 它的原型基于 [LoveIt](https://github.com/dillonzq/LoveIt) 主题,[KeepIt](https://github.com/Fastbyte01/KeepIt) 主题和 [LeaveIt](https://github.com/liuzc/LeaveIt) 主题。
[![GitHub release (latest by date)](https://img.shields.io/github/v/release/hugo-fixit/FixIt?style=flat)](https://github.com/hugo-fixit/FixIt/releases)
[![Hugo](https://img.shields.io/badge/Hugo-%5E0.134.1-ff4088?style=flat&logo=hugo)](https://gohugo.io/)
[![Hugo](https://img.shields.io/badge/Hugo-%5E0.146.0-ff4088?style=flat&logo=hugo)](https://gohugo.io/)
[![License](https://img.shields.io/github/license/hugo-fixit/FixIt?style=flat)](/LICENSE)
[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/hugo-fixit/FixIt)
> «FixIt» 是一个**简洁**、**优雅**且**高效**的 [Hugo](https://gohugo.io/) 博客主题。
它的原型基于 [LoveIt](https://github.com/dillonzq/LoveIt) 主题,[KeepIt](https://github.com/Fastbyte01/KeepIt) 主题和 [LeaveIt](https://github.com/liuzc/LeaveIt) 主题。
## 即时预览
<p align="center">
💟 <a href="https://fixit.lruihao.cn/zh-cn/">Production</a> | ❇️ <a href="https://pre.fixit.lruihao.cn/zh-cn/">Preview</a> | 🚼 <a href="https://demo.fixit.lruihao.cn">Demo</a> | 🆕 <a href="https://hugo-fixit.github.io/hugo-fixit-starter/">Starter</a>
<br>
<br>
更多 «FixIt» 的例子参见 <a href="https://fixit.lruihao.cn/zh-cn/showcase/">这里</a>。
更多 FixIt 的例子参见 <a href="https://fixit.lruihao.cn/zh-cn/showcase/">这里</a>。
</p>
## 主题文档
## 为什么选择 FixIt
我也不知道为什么 🤷。
<!-- 懒的写…… -->
## 使用指南
### 主题文档
前往 [快速上手](https://fixit.lruihao.cn/zh-cn/documentation/getting-started/quick-start/) 页面,了解如何使用 FixIt 主题创建一个新网站的详细步骤。
大纲:[安装篇](https://fixit.lruihao.cn/zh-cn/documentation/installation/) ➜ [入门篇](https://fixit.lruihao.cn/zh-cn/documentation/getting-started/) ➜ [内容管理](https://fixit.lruihao.cn/zh-cn/documentation/content-management/) ➜ [进阶篇](https://fixit.lruihao.cn/zh-cn/documentation/advanced/)
## 模板仓库
### 快速开始
我们提供了一个 CLI 工具,可以通过一个命令来创建一个新的 FixIt 项目。
```bash
pnpx fixit-cli create my-blog
```
[![asciicast](https://asciinema.org/a/697494.svg)](https://asciinema.org/a/697494)
### 模板
点击以下链接使用模板生成一个新的仓库:
| 模板仓库 | 生成链接 |
| :----------------------------------------- | :-------------------------------: |
| [hugo-fixit/hugo-fixit-starter][starter] | [点击生成][starter:generate] |
| [hugo-fixit/hugo-fixit-starter1][starter1] | [点击生成][starter1:generate] |
| [hugo-fixit/docs][docs] | [点击生成][docs:generate] |
| [Lruihao/hugo-blog][lruihao-blog] | [点击生成][lruihao-blog:generate] |
| 模板 | 仓库 | 生成链接 |
| :---------------------------------- | :-------------------------------- | :-------------------------------: |
| 基于 Hugo Modules 的快速入门模板。 | [hugo-fixit-starter][starter] | [点击生成][starter:generate] |
| 基于 Git submodule 的快速入门模板。 | [hugo-fixit-starter1][starter1] | [点击生成][starter1:generate] |
| 使用 Fixit 主题构建多语言网站。 | [docs][docs] | [点击生成][docs:generate] |
| 基于 FixIt 主题进行自定义设置。 | [Lruihao/hugo-blog][lruihao-blog] | [点击生成][lruihao-blog:generate] |
[starter]: https://github.com/hugo-fixit/hugo-fixit-starter
[starter:generate]: https://github.com/hugo-fixit/hugo-fixit-starter/generate
@@ -51,13 +82,14 @@
[lruihao-blog]: https://github.com/Lruihao/hugo-blog
[lruihao-blog:generate]: https://github.com/Lruihao/hugo-blog/generate
## 为什么选择 FixIt
### 镜像
我也不知道为什么 🤷
Gitee 镜像仓库:<https://gitee.com/lruihao/FixIt>
<!-- 懒的写…… -->
## 特色
## 特性
<details>
<summary>点击展开</summary>
### 性能和 SEO
@@ -65,6 +97,11 @@
- 使用基于 JSON-LD 格式 的 **SEO SCHEMA** 文件进行 SEO 优化
- 支持 **[Google Analytics](https://analytics.google.com/analytics)**
- 支持 **[Fathom Analytics](https://usefathom.com/)**
- 支持 **[百度统计](https://tongji.baidu.com/)**
- 支持 **[Umami Analytics](https://umami.is/)**
- 支持 **[Plausible Analytics](https://plausible.io/)**
- 支持 **[Cloudflare Web Analytics](https://www.cloudflare.com/web-analytics)**
- 支持 **[Splitbee Analytics](https://splitbee.io)**
- 支持搜索引擎的**网站验证** (Google, Bing, Yandex, Pinterest, Baidu, 360 and Sogou)
- 支持所有第三方库的 **CDN**
@@ -98,11 +135,13 @@
### 扩展功能
- 支持基于 [PostChat](https://ai.tianli0.top/?InviteID=IRE1S88Z) 的 **AI 摘要**、**AI 搜索** 和 **AI 智能客服**
- 支持**渐进式网页应用**
- 支持**二级菜单**
- 支持**内容加密**(页面、局部)
- 支持**友情链接**的页面模板
- 支持基于 [algolia](https://www.algolia.com/)[Fuse.js](https://fusejs.io/) 的**搜索**
- 支持基于 [algolia](https://www.algolia.com/)[Fuse.js](https://fusejs.io/)**CSE** 或 [PostChat](https://ai.tianli0.top/?InviteID=IRE1S88Z) 的**搜索**
- 支持基于 [Google](https://programmablesearchengine.google.com/) 的**自定义搜索引擎 (CSE)**
- 支持 **Twemoji**
- 支持**代码高亮**
- 一键**复制代码**到剪贴板
@@ -128,13 +167,14 @@
- 支持本地**缓存远程图床图片**
- ……
### 主题组件
FixIt 主题旨在在**简洁性**和**可扩展性**之间取得平衡。为此,我们开发了一系列额外的 [Hugo 主题组件](https://fixit.lruihao.cn/zh-cn/components/) 供用户选择。
</details>
## 多语言和国际化
FixIt 支持下列语言:
FixIt 主题多语言基本配置及自动翻译等详见 [内容管理](https://fixit.lruihao.cn/zh-cn/documentation/content-management/introduction#multilingual) 文档,欢迎 [贡献一种新的语言](https://github.com/hugo-fixit/FixIt/pulls)。
<details>
<summary>FixIt 支持下列语言。</summary>
- 英语
- 简体中文
@@ -150,13 +190,44 @@ FixIt 支持下列语言:
- 罗马尼亚语
- 越南语
- 印地语
- [贡献一种新的语言](https://github.com/hugo-fixit/FixIt/pulls)
[语言兼容性](https://fixit.lruihao.cn/zh-cn/theme-documentation-basics/#language-compatibility)
</details>
## 镜像
## 主题组件
Gitee 镜像仓库:<https://gitee.com/lruihao/FixIt>
FixIt 主题旨在在**简洁性**和**可扩展性**之间取得平衡。为此,我们开发了一系列额外的 [Hugo 主题组件](https://fixit.lruihao.cn/zh-cn/ecosystem/#-组件) 供用户选择。
<details>
<summary>点击展开</summary>
<!-- HUGO_FIXIT_COMPONENTS:START -->
- [fixit-bundle](https://github.com/hugo-fixit/fixit-bundle)\
🌲 Bundles the FixIt core theme and all hugo-fixit components into a single component.
- [cmpt-flyfish](https://github.com/hugo-fixit/cmpt-flyfish)\
🐟 一个 canvas 实现的小鱼游动动画效果。
- [cmpt-mdevtools](https://github.com/hugo-fixit/cmpt-mdevtools)\
Mobile devtools component powered by vConsole and eruda.
- [cmpt-translate](https://github.com/hugo-fixit/cmpt-translate)\
🌐 A component for site automatic translation.
- [component-projects](https://github.com/hugo-fixit/component-projects)\
🐙 Display your GitHub projects in the FixIt theme and generate blog posts from readme.
- [hugo-atom-feed](https://github.com/hugo-fixit/hugo-atom-feed)\
Hugo theme component for ATOM feed custom Output Format.
- [hugo-json-feed](https://github.com/hugo-fixit/hugo-json-feed)\
Hugo theme component for JSON feed custom Output Format.
- [shortcode-asciinema](https://github.com/hugo-fixit/shortcode-asciinema)\
A Hugo theme component with asciinema-embed shortcode.
- [shortcode-caniuse](https://github.com/hugo-fixit/shortcode-caniuse)\
一个含有 caniuse shortcode 的 Hugo 主题组件。
- [shortcode-docs-bookmark](https://github.com/hugo-fixit/shortcode-docs-bookmark)\
🔖 Embed bookmark of FixIt Docs.
- [shortcode-mmt-netease](https://github.com/hugo-fixit/shortcode-mmt-netease)\
🎶 A Hugo theme component with a NetEase Cloud random comment shortcode.
- [shortcode-rewards](https://github.com/hugo-fixit/shortcode-rewards)\
A Hugo theme component with reward-log or sponsor-log shortcode.
<!-- HUGO_FIXIT_COMPONENTS:END -->
</details>
## 社区支持
@@ -169,8 +240,6 @@ Gitee 镜像仓库:<https://gitee.com/lruihao/FixIt>
| [FixIt 主题交流群(QQ][qq-group] | QQ 群:`814031017` |
| [Hugo FixIt 星球][zsxq] | 付费知识星球 |
如果你喜欢这个主题,别忘了留下一颗 ⭐️ 哦,谢谢!
[discussions]: https://github.com/hugo-fixit/FixIt/discussions
[pulls]: https://github.com/hugo-fixit/FixIt/pulls
[issues]: https://github.com/hugo-fixit/FixIt/issues
@@ -247,10 +316,14 @@ FixIt 根据 **MIT** 许可协议授权。更多信息请查看 [LICENSE 文件]
如果你喜爱这个主题,请考虑给我买杯咖啡 ☕️,谢谢!
- [微信支付](images/wechatpay.jpg)
- [支付宝](images/alipay.jpg)
- [微信支付](/images/wechatpay.jpg)
- [支付宝](/images/alipay.jpg)
- [PayPal](https://paypal.me/Lruihao)
感谢以下赞助商提供大力支持:
- [translate.js](https://github.com/xnx3/translate) 赞助[企业级翻译通道](https://translate.zvo.cn/4087.html)。
## 作者
[Lruihao](https://github.com/Lruihao "在 GitHub 上关注我")
+5
View File
@@ -0,0 +1,5 @@
---
title: {{ T "assets.search" }}
layout: search
date: {{ .Date }}
---
+9
View File
@@ -54,6 +54,15 @@ abbr[title] {
text-decoration-skip-ink: none;
}
img {
object-fit: cover;
}
img,video {
max-width: 100%;
height: auto;
}
@include link(true, true);
@import '../_partials/scrollbar';
+5 -6
View File
@@ -118,7 +118,7 @@ header {
}
}
.search {
.menu .search {
position: relative;
input {
@@ -279,6 +279,8 @@ header {
border-radius: $global-border-radius;
border: 1px solid $menu-border-color;
background-color: $header-background-color;
max-height: 60vh;
overflow-y: auto;
@include transition(box-shadow 0.3s ease);
@include box-shadow(0 0 1.5rem 0 rgba(0, 0, 0, 0.1));
@@ -384,6 +386,8 @@ header {
@include scrollbar-width(none, 0);
[data-theme='dark'] & {
background: $header-background-color-dark;
border-top-color: $global-border-color-dark;
@include box-shadow(0 0.125rem 0.25rem rgba(255, 255, 255, 0.1));
}
@@ -512,11 +516,6 @@ header {
&.active {
display: block;
}
[data-theme='dark'] & {
background: $header-background-color-dark;
border-top-color: $global-border-color-dark;
}
}
}
+18 -2
View File
@@ -109,8 +109,7 @@
}
.page {
.categories-card,
.collections-card {
.taxonomy-cards {
.card-item {
width: 100%;
}
@@ -129,6 +128,23 @@
}
@media only print {
// 确保打印时没有 scrollbar
:root {
--fi-scrollbar-width: none !important;
}
*::-webkit-scrollbar {
display: none !important;
width: 0 !important;
height: 0 !important;
}
.scrollbar-thin {
scrollbar-width: none !important;
-ms-overflow-style: none !important;
}
@page {
size: A4 portrait;
margin: 1.27cm;
+9 -3
View File
@@ -1,5 +1,9 @@
:root {
// Note: Custom variable values only support SassScript inside `#{}`.
// TODO migrate SCSS variables to CSS variables
--#{$prefix}global-font-color: #{$global-font-color};
--#{$prefix}global-border-color: #{$global-border-color};
// Theme colors variables
@each $color, $value in $theme-colors {
@@ -12,9 +16,10 @@
// Set breadcrumb height to 0px if breadcrumb is disabled
--#{$prefix}breadcrumb-height: 0px;
// hr style
// hr / divider style
--#{$prefix}hr-background-color: #{darken($global-border-color, 5%)};
--#{$prefix}hr-before-color: #{lighten($single-link-hover-color, 4%)};
--#{$prefix}divider-edge-weak: linear-gradient(to right, transparent, var(--#{$prefix}divider-bg, #d0d0d5), transparent);
// Scrollbar related variables
--#{$prefix}scrollbar-thumb-color: #{$scrollbar-color};
@@ -22,12 +27,13 @@
--#{$prefix}scrollbar-track-color: transparent;
--#{$prefix}scrollbar-width: thin;
--#{$prefix}scrollbar-width-legacy: 12px;
// TODO migrate SCSS variables to CSS variables
}
// Dark theme
[data-theme=dark] {
--#{$prefix}global-font-color: #{$global-font-color-dark};
--#{$prefix}global-border-color: #{$global-border-color-dark};
@each $color, $value in $theme-colors {
--#{$prefix}#{$color}: #{darken($value, 5%)};
}
+8
View File
@@ -5,3 +5,11 @@
@mixin details-transition-close {
@include transition(max-height 0.2s cubic-bezier(0.5, 0, 1, 0) 0s);
}
details {
&.center {
summary {
text-align: center;
}
}
}
+19 -11
View File
@@ -81,20 +81,28 @@
}
.summary {
padding-top: 1rem;
padding-bottom: 0.8rem;
color: $global-font-color;
border-bottom: 1px dashed $global-border-color;
padding-block: 1rem;
color: var(--#{$prefix}global-font-color);
&:not(:last-of-type)::after {
content: '';
position: absolute;
width: 100%;
padding: 2px;
transform: translateY(18px);
background: repeating-linear-gradient(
135deg,
var(--#{$prefix}hr-background-color) 0px,
var(--#{$prefix}hr-background-color) 4px,
transparent 4px,
transparent 8px
);
}
&:first-of-type {
padding-top: 0;
}
[data-theme='dark'] & {
color: $global-font-color-dark;
border-bottom: 1px dashed $global-border-color-dark;
}
.featured-image-preview {
width: 100%;
// use the same proportions as the cover image of https://dev.to/
@@ -144,7 +152,7 @@
}
.post-footer {
margin-top: 0.4rem;
margin-block: 0.4rem 0;
display: flex;
justify-content: space-between;
align-items: center;
@@ -156,7 +164,7 @@
padding: 0;
@include link(true, true);
.post-tag:not(:last-child)::after {
content: ',';
margin-right: 0.25rem;
-1
View File
@@ -17,4 +17,3 @@
@import '_home';
@import '_404';
@import '_offline';
@import '_friends';
+18 -32
View File
@@ -1,6 +1,7 @@
@import '../_partials/_single/toc';
@import '../_partials/_single/fixit-decryptor';
@import '../_partials/_single/collections';
@import '../_partials/_single/related';
.single {
.single-title {
@@ -97,6 +98,7 @@
hr {
position: relative;
height: 1em;
margin-block: 1em;
background: linear-gradient(to right, var(--#{$prefix}hr-background-color) 50%, transparent 50%);
background-size: 10px 2px;
background-position: center;
@@ -104,8 +106,6 @@
border: none;
&.awesome-hr {
margin-block: 0.5em;
&::before {
display: inline-block;
font-weight: 600;
@@ -249,11 +249,14 @@
li[data-task='x'],
li[data-task='-'] {
--#{$prefix}task-color: var(--#{$prefix}secondary);
text-decoration: line-through;
text-decoration: line-through rgba(145, 145, 145, 0.6);
}
li[data-task='x'] {
--#{$prefix}checkbox-color: var(--#{$prefix}primary);
}
li[data-task='-'] {
opacity: 0.6;
}
li[data-task='/'] {
--#{$prefix}task-color: var(--#{$prefix}success);
}
@@ -304,6 +307,7 @@
}
.table-wrapper {
position: relative;
overflow-x: auto;
--#{$prefix}scrollbar-thumb-color: #{$table-background-color};
@@ -363,31 +367,9 @@
img {
max-width: 100%;
min-height: 1em;
&:not([height]) {
height: auto;
}
&[loading='lazy'][srcset]:not([data-lazyloaded]) {
&:not(.suffix-invalid__small) {
width: var(--width-small, var(--width));
aspect-ratio: var(--aspect-ratio-small, var(--aspect-ratio));
}
&:not(.suffix-invalid) {
@media (min-resolution: 1.01dppx) and (max-resolution: 1.5dppx) {
width: calc(var(--width) / 1.5);
aspect-ratio: var(--aspect-ratio);
}
}
&:not(.suffix-invalid__large) {
@media (min-resolution: 1.51dppx) {
width: calc(var(--width-large, var(--width)) / 2);
aspect-ratio: var(--aspect-ratio-large, var(--aspect-ratio));
}
}
// SVG performs differently in Safari compared to other browsers
&:not([src*='.svg']) {
min-height: 1em;
}
&.version {
@@ -416,6 +398,7 @@
img {
display: block;
margin: 0 auto;
height: auto;
overflow: hidden;
}
}
@@ -495,10 +478,6 @@
}
}
hr {
margin-block: 0;
}
kbd {
display: inline-block;
padding: 0 0.25rem;
@@ -518,6 +497,13 @@
}
}
// Katex styles
.katex-display {
max-width: 100%;
overflow-x: auto;
padding-block: 2px;
}
@import '../_partials/_single/alert';
@import '../_partials/_single/code';
@import '../_shortcodes';
-6
View File
@@ -1,6 +0,0 @@
.special {
.single-title,
.single-subtitle {
text-align: right;
}
}
@@ -1,5 +1,5 @@
/**
* @Description: Style of layout named 'friends'.
* Style of layout named 'friends'.
* @Author: Lruihao <https://lruihao.cn>
* @Updated: 2022/3/11 21:36
*/
+14
View File
@@ -0,0 +1,14 @@
.special {
.single-title,
.single-subtitle {
text-align: right;
}
&.friends {
@import '_friends';
}
&.search {
@import '_search';
}
}
+10
View File
@@ -0,0 +1,10 @@
// Style of layout named 'search'
// TODO Adapting to dark mode, maybe use css variables
// Google CSE
.gcse-searchbox:empty,
.gcse-searchresults:empty {
display: none;
}
// Bing CSE (Unsupported)
+1 -2
View File
@@ -1,5 +1,4 @@
.categories-card,
.collections-card {
.taxonomy-cards {
margin: 0 auto;
display: flex;
align-items: flex-start;
@@ -130,7 +130,7 @@
font-size: $collection-title-font-size;
&::before {
content: attr(data-collections) '';
content: attr(title) '';
}
}
@@ -0,0 +1,73 @@
// Related Content List (aside)
.related-details {
&:not(:first-of-type)::before {
content: '';
display: block;
border: 0;
padding-top: 1px;
background: var(--#{$prefix}divider-edge-weak);
margin-block: 1rem 0.5rem;
}
&:not(:last-of-type) {
margin-bottom: 0.5rem;
}
.related-summary {
display: flex;
align-items: baseline;
gap: 0.25em;
padding: 0.2em 0.5em;
> i.fa-layer-group {
flex-shrink: 0;
}
.related-title {
font-weight: bold;
font-size: $related-title-font-size;
}
.related-count {
flex-shrink: 0;
color: var(--#{$prefix}secondary);
}
.details-icon {
flex-shrink: 0;
}
@include user-select(none);
}
.related-content {
font-size: $related-list-font-size;
.related-list {
margin: 0;
padding-inline: 1.6em 0.8em;
padding-block: 0.4em;
text-indent: -0.8em;
list-style: none;
overflow-y: scroll;
max-height: 60vh;
@include scrollbar-width(none, 0);
.related-item > a::before,
.related-item > span::before {
content: '|';
font-weight: 600;
margin-right: 0.5em;
position: relative;
bottom: 2px;
color: $single-link-color;
[data-theme='dark'] & {
color: $single-link-color-dark;
}
}
}
}
}
+1
View File
@@ -2,5 +2,6 @@
@import '_widgets/fixed-button';
@import '_widgets/github-corner';
@import '_widgets/noscript-warning';
@import '_widgets/post-chat';
@import '_widgets/reading-progress';
@import '_widgets/typeit';
@@ -0,0 +1,4 @@
#postChat_button,
.post-TianliGPT {
@extend .print-d-none;
}
@@ -1,29 +1,13 @@
.reading-progress-bar {
height: var(--#{$prefix}progress-h, 2px);
background-color: var(--#{$prefix}progress-bg, var(--#{$prefix}info));
--progress: 0;
height: var(--progress-h, 2px);
width: var(--progress);
background-color: var(--bg-progress, var(--#{$prefix}info));
position: fixed;
left: 0;
right: 0;
transform-origin: var(--#{$prefix}progress-start, left) 50%;
animation: grow-progress 3s linear;
animation-timeline: scroll();
@include z-index(2);
@extend .print-d-none;
&[data-reversed=true] {
animation-name: grow-progress-reversed;
}
[data-theme="dark"] & {
background-color: var(--#{$prefix}progress-bg-dark, var(--#{$prefix}info-dark));
}
@keyframes grow-progress {
from { transform: scaleX(0); }
to { transform: scaleX(1); }
}
@keyframes grow-progress-reversed {
from { transform: scaleX(1); }
to { transform: scaleX(0); }
background-color: var(--bg-progress-dark, var(--#{$prefix}info-dark));
}
}
-4
View File
@@ -25,10 +25,6 @@
&:empty {
display: none;
}
// BUG of Hugo https://github.com/gohugoio/hugo/issues/12913
&:has(> p:only-child:empty) {
display: none;
}
}
i.icon {
+5
View File
@@ -39,6 +39,7 @@ $global-link-hover-color: #2983bb !default; // 潮蓝
$global-link-hover-color-dark: #fff !default;
// Color of the border
// TODO refactor border colors
$global-border-color: #f0f0f0 !default;
$global-border-color-dark: #363636 !default;
// ========== Global ========== //
@@ -102,6 +103,10 @@ $toc-content-font-size: 0.875rem !default;
$collection-title-font-size: 1rem !default;
$collection-list-font-size: 0.875rem !default;
// Font size of the Related Content List
$related-title-font-size: 1rem !default;
$related-list-font-size: 0.875rem !default;
// Color of the single link
$single-link-color: #2376b7 !default; // 花青
$single-link-color-dark: #1781b5 !default; // 釉蓝
+5 -5
View File
@@ -30,8 +30,8 @@ libFiles:
cryptoSha256JS: crypto-js@4.2.0/sha256.js
# echarts@5.3.3 https://github.com/apache/echarts
echartsJS: echarts@5.3.3/dist/echarts.min.js
# fontawesome-free@6.4.2 https://github.com/FortAwesome/Font-Awesome
fontawesomeFreeCSS: '@fortawesome/fontawesome-free@6.4.2/css/all.min.css'
# fontawesome-free@6.7.1 https://github.com/FortAwesome/Font-Awesome
fontawesomeFreeCSS: '@fortawesome/fontawesome-free@6.7.1/css/all.min.css'
# fusejs@6.6.2 https://github.com/krisk/fuse
fuseJS: fuse.js@6.6.2/dist/fuse.min.js
# gitalk@1.7.2 https://github.com/gitalk/gitalk
@@ -72,9 +72,9 @@ libFiles:
typeitJS: typeit@8.8.4/dist/index.umd.js
# valine@1.5.2 https://github.com/xCss/Valine
valineJS: valine@1.5.2/dist/Valine.min.js
# waline@2.15.8 https://github.com/walinejs/waline
walineCSS: '@waline/client@2.15.8/dist/waline.css'
walineJS: '@waline/client@2.15.8/dist/waline.js'
# waline@3.4.1 https://github.com/walinejs/waline
walineCSS: '@waline/client@3.4.1/dist/waline.css'
walineJS: '@waline/client@3.4.1/dist/waline.umd.js'
# xxhash-wasm@1.0.2 https://github.com/jungomi/xxhash-wasm
xxhashWasmJS: xxhash-wasm@1.0.2/umd/xxhash-wasm.js
+5 -5
View File
@@ -30,8 +30,8 @@ libFiles:
cryptoSha256JS: crypto-js@4.2.0/sha256.js
# echarts@5.3.3 https://github.com/apache/echarts
echartsJS: echarts@5.3.3/dist/echarts.min.js
# fontawesome-free@6.4.2 https://github.com/FortAwesome/Font-Awesome
fontawesomeFreeCSS: '@fortawesome/fontawesome-free@6.4.2/css/all.min.css'
# fontawesome-free@6.7.1 https://github.com/FortAwesome/Font-Awesome
fontawesomeFreeCSS: '@fortawesome/fontawesome-free@6.7.1/css/all.min.css'
# fusejs@6.6.2 https://github.com/krisk/fuse
fuseJS: fuse.js@6.6.2/dist/fuse.min.js
# gitalk@1.7.2 https://github.com/gitalk/gitalk
@@ -72,8 +72,8 @@ libFiles:
typeitJS: typeit@8.8.4/dist/index.umd.js
# valine@1.5.2 https://github.com/xCss/Valine
valineJS: valine@1.5.2/dist/Valine.min.js
# waline@2.15.8 https://github.com/walinejs/waline
walineCSS: '@waline/client@2.15.8/dist/waline.css'
walineJS: '@waline/client@2.15.8/dist/waline.js'
# waline@3.4.1 https://github.com/walinejs/waline
walineCSS: '@waline/client@3.4.1/dist/waline.css'
walineJS: '@waline/client@3.4.1/dist/waline.umd.js'
# xxhash-wasm@1.0.2 https://github.com/jungomi/xxhash-wasm
xxhashWasmJS: xxhash-wasm@1.0.2/umd/xxhash-wasm.js
+8
View File
@@ -673,6 +673,14 @@ credly:
Icon:
Class: fa-solid fa-certificate
# 086: Bluesky
bluesky:
Weight: 86
Title: Bluesky
Prefix: https://bsky.app/profile/
Icon:
Class: fa-brands fa-bluesky
# Phone
phone:
Weight: 997
+131 -24
View File
@@ -1,3 +1,4 @@
// TODO use ESLint to check the code style
import Util from './util';
class FixIt {
@@ -124,6 +125,21 @@ class FixIt {
const $searchToggle = document.getElementById(`search-toggle-${suffix}`);
const $searchLoading = document.getElementById(`search-loading-${suffix}`);
const $searchClear = document.getElementById(`search-clear-${suffix}`);
const $searchCancel = document.getElementById('search-cancel-mobile');
// goto the PostChat panel rather than search results
if (searchConfig.type === 'post-chat' && window.postChatUser) {
if (isMobile) {
$searchInput.addEventListener('focus', () => {
window.postChatUser.setSearchInput('');
}, false);
} else {
$searchToggle.addEventListener('click', () => {
window.postChatUser.setSearchInput('');
}, false);
}
return;
}
if (isMobile) {
this._searchMobileOnce = true;
@@ -132,7 +148,7 @@ class FixIt {
document.body.classList.add('blur');
$header.classList.add('open');
}, false);
document.getElementById('search-cancel-mobile').addEventListener('click', () => {
$searchCancel.addEventListener('click', () => {
this.disableScrollEvent = false;
$header.classList.remove('open');
document.body.classList.remove('blur');
@@ -159,8 +175,10 @@ class FixIt {
document.body.classList.add('blur');
$header.classList.add('open');
$searchInput.focus();
this.disableScrollEvent = true;
}, false);
$searchClear.addEventListener('click', () => {
this.disableScrollEvent = false;
$searchClear.style.display = 'none';
this._searchDesktop && this._searchDesktop.autocomplete.setVal('');
}, false);
@@ -289,25 +307,49 @@ class FixIt {
finish([]);
});
} else finish(search());
}
} else if (searchConfig.type === 'cse') {
const cseConfig = this.config.cse;
if (cseConfig.engine === 'google' && cseConfig.cx) {
finish([{
uri: `${cseConfig.resultsPage}#gsc.tab=0&gsc.q=${encodeURIComponent(query)}`,
title: cseConfig.searchIn,
date: '<i class="fa-brands fa-searchengin fa-xl" aria-hidden="true"></i>',
context: cseConfig.gotoResultsPage
}]);
}
} else {
finish([]);
}
},
templates: {
suggestion: ({ title, date, context }) =>
`<div><span class="suggestion-title">${title}</span><span class="suggestion-date">${date}</span></div><div class="suggestion-context">${context}</div>`,
empty: ({ query }) => `<div class="search-empty">${searchConfig.noResultsFound}: <span class="search-query">"${query}"</span></div>`,
footer: ({}) => {
const { searchType, icon, href } =
searchConfig.type === 'algolia'
? {
searchType: 'algolia',
icon: '<i class="fa-brands fa-algolia fa-fw" aria-hidden="true"></i>',
href: 'https://www.algolia.com/'
}
: {
searchType: 'Fuse.js',
icon: '',
href: 'https://fusejs.io/'
}
let searchType, icon, href;
switch (searchConfig.type) {
case 'algolia':
searchType = 'algolia';
icon = '<i class="fa-brands fa-algolia fa-fw" aria-hidden="true"></i>';
href = 'https://www.algolia.com/';
break;
case 'fuse':
searchType = 'Fuse.js';
icon = '';
href = 'https://fusejs.io/';
break;
case 'cse':
if (this.config.cse.engine === 'google') {
searchType = 'Google CSE';
icon = '<i class="fa-brands fa-google fa-fw" aria-hidden="true"></i>';
href = 'https://programmablesearchengine.google.com/';
}
break;
default:
searchType = '';
icon = '';
href = '';
}
return `<div class="search-footer">Search by <a href="${href}" rel="noopener noreferrer" target="_blank">${icon} ${searchType}</a></div>`;
}
}
@@ -642,12 +684,53 @@ class FixIt {
this._echartsArr = [];
const stagingDOM = this.util.getStagingDOM()
this.util.forEach(document.getElementsByClassName('echarts'), ($echarts) => {
if ($echarts.nextElementSibling.tagName === 'TEMPLATE') {
const chart = echarts.init($echarts, this.isDark ? 'dark' : 'light', { renderer: 'svg' });
stagingDOM.stage($echarts.nextElementSibling.content.cloneNode(true));
chart.setOption(stagingDOM.contentAsJson());
this._echartsArr.push(chart);
const $dataEl = $echarts.nextElementSibling;
if ($dataEl.tagName !== 'TEMPLATE') {
return;
}
const chart = echarts.init($echarts, this.isDark ? 'dark' : 'light', { renderer: 'svg' });
chart.showLoading();
stagingDOM.stage($dataEl.content.cloneNode(true));
const _setOption = (option) => {
if (!option) {
chart.hideLoading();
console.warn('ECharts option is missing or invalid. Chart disposed.', {
element: $echarts,
option: $dataEl,
});
chart.dispose();
$echarts.removeAttribute('style');
return;
}
chart.hideLoading();
chart.setOption(option);
this._echartsArr.push(chart);
};
// support JS object literal or JS code
if ($dataEl.dataset.fmt === 'js') {
try {
const jsCodes = stagingDOM.contentAsText();
/**
* Get ECharts option
* @param {Object} fixit FixIt instance
* @param {Object} chart ECharts instance
* @returns {Object|Promise} ECharts option or Promise
*/
const _getOption = new Function('fixit', 'chart',
this.util.isObjectLiteral(jsCodes) ? `return ${jsCodes}` : jsCodes
);
if ($dataEl.dataset.async === 'true') {
return Promise.resolve(_getOption(this, chart)).then(option => {
_setOption(option);
});
}
return _setOption(_getOption(this, chart));
} catch (err) {
return console.error(err);
}
}
// support JSON
_setOption(stagingDOM.contentAsJson());
});
stagingDOM.destroy();
});
@@ -914,13 +997,17 @@ class FixIt {
document.querySelector('.giscus-frame')?.contentWindow.postMessage({ giscus: message }, giscusConfig.origin);
});
this.switchThemeEventSet.add(this._giscusOnSwitchTheme);
this.giscus2parentMsg = window.addEventListener('message', (event) => {
// gicuss to parent message
this._messageListener = (event) => {
if (event.origin !== giscusConfig.origin) return;
const $script = document.querySelector('#giscus>script');
if ($script){
this._giscusOnSwitchTheme();
$script.parentElement.removeChild($script);
}
}, { once: true });
this._giscusOnSwitchTheme()
window.removeEventListener('message', this._messageListener, false);
};
window.addEventListener('message', this._messageListener, false);
return;
}
}
@@ -1026,10 +1113,10 @@ class FixIt {
this.initEcharts();
this.initTypeit();
this.initMapbox();
this.fixTocScroll();
this.initToc();
this.initTocListener();
this.initPangu();
this.fixTocScroll();
this.util.forEach(document.querySelectorAll('.encrypted-hidden'), ($element) => {
$element.classList.replace('encrypted-hidden', 'decrypted-shown');
});
@@ -1106,11 +1193,27 @@ class FixIt {
this.scrollEventSet.add(_closeRewardExclude);
}
initPostChatUser() {
if (!window.postChatUser || !postChatConfig || postChatConfig.userMode === 'magic') {
return;
}
postChat_theme = this.isDark ? 'dark' : 'light';
this.switchThemeEventSet.add((isDark) => {
const targetFrame = document.getElementById("postChat_iframeContainer")
if (targetFrame) {
window.postChatUser.setPostChatTheme(isDark ? 'dark' : 'light');
} else {
postChat_theme = isDark ? 'dark' : 'light';
}
});
}
onScroll() {
const $headers = [];
const ACCURACY = 20;
const $fixedButtons = document.querySelector('.fixed-buttons');
const $backToTop = document.querySelector('.back-to-top');
const $readingProgressBar = document.querySelector('.reading-progress-bar');
if (document.body.dataset.headerDesktop === 'auto') {
$headers.push(document.getElementById('header-desktop'));
}
@@ -1143,6 +1246,9 @@ class FixIt {
});
const contentHeight = document.body.scrollHeight - window.innerHeight;
const scrollPercent = Math.max(Math.min(100 * Math.max(this.newScrollTop, 0) / contentHeight, 100), 0);
if ($readingProgressBar) {
$readingProgressBar.style.setProperty('--progress', `${scrollPercent.toFixed(2)}%`);
}
// whether to show fixed buttons
if ($fixedButtons) {
if (scrollPercent > 1) {
@@ -1241,13 +1347,14 @@ class FixIt {
this.initWatermark();
this.initAutoMark();
this.initReward();
this.initPostChatUser();
window.setTimeout(() => {
this.initComment();
if (!this.config.encryption?.all) {
this.fixTocScroll();
this.initToc();
this.initTocListener();
this.fixTocScroll();
}
this.onScroll();
this.onResize();
+19 -2
View File
@@ -42,7 +42,7 @@ export default class Util {
isValidDate(date) {
return date instanceof Date && !isNaN(date.getTime());
}
/**
* scroll some element into view
* @param {String} selector element to scroll
@@ -109,6 +109,23 @@ export default class Util {
reject();
}
});
return this.copyText(text);
return this.copyText(text);
}
/**
* check if a string is a JS object string
* @example isObjectLiteral("{a:1,b:2}") // true
* @param {String} str string to check
* @returns {Boolean} whether the string is a JS object string
*/
isObjectLiteral(str) {
if (typeof str !== 'string') {
return false;
}
str = str.replace(/\s+/g, ' ').trim().replace(/;$/, '')
if (str.startsWith('{') && str.endsWith('}')) {
return true;
}
return false;
}
}
+2 -2
View File
@@ -9,7 +9,7 @@ crypto-js@4.2.0 https://github.com/brix/crypto-js
echarts@5.3.3 https://github.com/apache/echarts
TODO update emoji-data to 15.x
emoji-data@14.0.0 https://github.com/iamcal/emoji-data
fontawesome-free@6.4.2 https://github.com/FortAwesome/Font-Awesome
fontawesome-free@6.7.1 https://github.com/FortAwesome/Font-Awesome
fusejs@6.6.2 https://github.com/krisk/fuse
gitalk@1.7.2 https://github.com/gitalk/gitalk
instant.page@5.2.0 https://github.com/instantpage/instant.page
@@ -26,5 +26,5 @@ twemoji@14.0.2 https://github.com/twitter/twemoji
twikoo@1.6.22 https://github.com/imaegoo/twikoo
typeit@8.8.4 https://github.com/alexmacarthur/typeit
valine@1.5.2 https://github.com/xCss/Valine
waline@2.15.8 https://github.com/walinejs/waline
waline@3.4.1 https://github.com/walinejs/waline
xxhash-wasm@1.0.2 https://github.com/jungomi/xxhash-wasm
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
-1
View File
File diff suppressed because one or more lines are too long
+83
View File
File diff suppressed because one or more lines are too long
+124 -11
View File
@@ -34,6 +34,8 @@ enableRobotsTXT = true
enableGitInfo = true
# whether to use emoji code
enableEmoji = true
# the main sections of a site
mainSections = []
# -------------------------------------------------------------------------------------
# Menu Configuration
@@ -135,7 +137,7 @@ enableEmoji = true
[module]
[module.hugoVersion]
extended = true
min = "0.134.1"
min = "0.146.0"
# -------------------------------------------------------------------------------------
# Markup related configuration in Hugo
@@ -178,8 +180,13 @@ enableEmoji = true
enable = true
[markup.goldmark.extensions.extras.superscript]
enable = true
# TODO passthrough refactor https://gohugo.io/getting-started/configuration-markup/#parserattributeblock
# TODO passthrough refactor https://gohugo.io/render-hooks/passthrough/
# TODO hugo 0.122.0 https://gohugo.io/content-management/mathematics/
# [markup.goldmark.extensions.passthrough]
# enable = true
# [markup.goldmark.extensions.passthrough.delimiters]
# block = [['\[', '\]'], ['$$', '$$']]
# inline = [['\(', '\)'], ['$', '$']]
[markup.goldmark.parser]
[markup.goldmark.parser.attribute]
block = true
@@ -384,7 +391,7 @@ enableEmoji = true
# Search config
[params.search]
enable = false
# type of search engine ["algolia", "fuse"]
# type of search engine ["algolia", "fuse", "cse", "post-chat"]
type = "fuse"
# max index length of the chunked content
contentLength = 4000
@@ -414,6 +421,19 @@ enableEmoji = true
useExtendedSearch = false
ignoreFieldNorm = false
# FixIt 0.3.16 | NEW Custom Search Engine (CSE)
[params.cse]
# Search Engine: ["google", "bing"]
engine = ""
# Search results page URL (layout: search)
resultsPage = "/search/"
# Google: https://programmablesearchengine.google.com/
# Google Custom Search Engine Context
[params.cse.google]
cx = ""
# Bing (Unsupported): https://www.customsearch.ai/
[params.cse.bing]
# Header config
[params.header]
# FixIt 0.2.13 | CHANGED desktop header mode ["sticky", "normal", "auto"]
@@ -653,6 +673,7 @@ enableEmoji = true
Douyin = ""
TikTok = ""
Credly = ""
Bluesky = ""
Phone = ""
Email = ""
RSS = true
@@ -695,6 +716,13 @@ enableEmoji = true
[params.taskList]
# tip = "fa-regular fa-lightbulb"
# FixIt 0.3.15 | NEW version shortcode config
[params.repoVersion]
# url prefix for the release tag
url = "https://github.com/hugo-fixit/FixIt/releases/tag/v"
# project name
name = "FixIt"
# FixIt 0.2.12 | NEW PanguJS config
[params.pangu]
# For Chinese writing
@@ -765,6 +793,31 @@ enableEmoji = true
id = ""
# server url for your tracker if you're self hosting
server = ""
# FixIt 0.3.16 | NEW Baidu Analytics
[params.analytics.baidu]
id = ""
# FixIt 0.3.16 | NEW Umami Analytics
[params.analytics.umami]
data_website_id = ""
src = ""
data_host_url = ""
data_domains = ""
# FixIt 0.3.16 | NEW Plausible Analytics
[params.analytics.plausible]
data_domain = ""
src = ""
# FixIt 0.3.16 | NEW Cloudflare Analytics
[params.analytics.cloudflare]
token = ""
# FixIt 0.3.16 | NEW Splitbee Analytics
[params.analytics.splitbee]
enable = false
# no cookie mode
no_cookie = true
# respect the do not track setting of the browser
do_not_track = true
# token(optional), more info on https://splitbee.io/docs/embed-the-script
data_token = ""
# Cookie consent config
[params.cookieconsent]
@@ -784,7 +837,8 @@ enableEmoji = true
# Compatibility config
[params.compatibility]
# whether to use Polyfill.io to be compatible with older browsers
# whether to use Polyfill.io on cdnjs to be compatible with older browsers
# https://cdnjs.cloudflare.com/polyfill
polyfill = false
# whether to use object-fit-images to be compatible with older browsers
objectFit = false
@@ -834,6 +888,53 @@ enableEmoji = true
# "corner-indicator", "fill-left", "flash", "flat-top", "loading-bar", "mac-osx", "material", "minimal"]
theme = "minimal"
# FixIt 0.3.17 | NEW PostChat AI config
# Based on your posts to build a knowledge base, support AI summary, AI search, and AI Chatbot.
# Get PostChat Key from my invitation link, thanks for your support!
# https://ai.tianli0.top/?InviteID=IRE1S88Z
[params.postChat]
enable = false
key = ""
# How users initiate chats: ["iframe", "magic"]
userMode = "iframe"
addButton = true
defaultInput = false
left = ""
bottom = ""
width = ""
height = ""
fill = ""
backgroundColor = ""
upLoadWeb = true
showInviteLink = true
userTitle = ""
userDesc = ""
# dom container to be blacked out, e.g. [".aplayer"]
blackDom = []
# Only for iframe mode
frameWidth = "" # e.g. "375px"
frameHeight = "" # e.g. "600px"
# only for magic mode
userIcon = ""
defaultChatQuestions = []
defaultSearchQuestions = []
# FixIt 0.3.17 | NEW Summary AI config
# See https://postchat.zhheo.com/summary.html
[params.postSummary]
enable = false
# If you set `params.postChat.key`, you don't need to set `params.postSummary.key`
key = ""
title = ""
# themes options: ["", "simple", "yanzhi"]
theme = ""
postURL = ""
blacklist = ""
wordLimit = 1000
typingAnimate = true
beginningText = ""
loadingText = true
# FixIt 0.3.10 | NEW Global Feed config for RSS, Atom and JSON feed.
[params.feed]
# The number of posts to include in the feed. If set to -1, all posts.
@@ -844,18 +945,31 @@ enableEmoji = true
[params.feed.follow]
feedId = ""
userId = ""
# FixIt 0.3.17 | NEW Image config
[params.image]
# cache remote images for better optimisations
cacheRemote = false
# Image resizing and optimisation
optimise = false
# FixIt 0.3.12 | NEW Custom partials config
# Custom partials must be stored in the /layouts/partials/ directory.
# Depends on open custom blocks https://fixit.lruihao.cn/references/blocks/
[params.customPartials]
head = []
menuDesktop = []
menuMobile = []
profile = []
aside = []
comment = []
footer = []
widgets = []
assets = []
postTocBefore = []
postTocAfter = []
postContentBefore = []
postContentAfter = []
postFooterBefore = []
postFooterAfter = []
@@ -901,6 +1015,8 @@ enableEmoji = true
linkToEdit = true
# FixIt 0.3.0 | NEW whether to show link to report issue for the post
linkToReport = true
# FixIt 0.3.20 | NEW whether to show link to view the post in VSCode
linkToVscode = true
# FixIt 0.3.10 | CHANGED Page style ["narrow", "normal", "wide", ...]
pageStyle = "normal"
# FixIt 0.2.17 | CHANGED Auto Bookmark Support
@@ -1002,15 +1118,12 @@ enableEmoji = true
scale = true
# whether to add FullscreenControl
fullscreen = true
# FixIt 0.3.0 | NEW [Experimental] cache remote images locally, see: https://github.com/hugo-fixit/FixIt/pull/362
[params.page.cacheRemoteImages]
enable = false
# replace remote image url with local image url (place in public/images/remote/)
replace = false
# FixIt 0.3.0 | NEW Related content config (https://gohugo.io/content-management/related/)
[params.page.related]
enable = false
count = 5
# FixIt 0.3.20 | NEW position of related content, optional values: ["aside", "footer"]
position = ["aside", "footer"]
# FixIt 0.2.17 | NEW Donate (Sponsor) settings
[params.page.reward]
enable = false
@@ -1100,8 +1213,8 @@ enableEmoji = true
appKey = ""
placeholder = ""
avatar = "mp"
meta = ""
requiredFields = ""
meta = ['nick','mail','link']
requiredFields = []
pageSize = 10
lang = ""
visitor = true
+43 -41
View File
@@ -1,27 +1,26 @@
# Translations for German
# Übersetzung auf Deutsch
# https://gohugo.io/content-management/multilingual/#translation-of-strings
# TODO Some fields are waiting for your translation
# === init ===
[init]
configurationError = ""
compatibilityError = ""
devVersionWarn = ""
devEnvWarn = ""
quicklyUpgrade = ""
configurationError = "Konfigurationsfehler\nSie haben den FixIt-Versionsparameter noch nicht korrekt konfiguriert. Siehe https://fixit.lruihao.cn/documentation/basics/#theme-configuration"
compatibilityError = "Kompatibilitätsfehler ({{ .From }} -> {{ .To }}):\nSie haben ein inkompatibles Update. Siehe https://github.com/hugo-fixit/FixIt/releases"
devVersionWarn = "Sie verwenden eine Entwicklungsversion von FixIt. Bitte erwägen Sie die Verwendung einer stabilen Version.\nSiehe https://github.com/hugo-fixit/FixIt/releases"
devEnvWarn = "Die aktuelle Umgebung ist \"Entwicklung\". Das \"Kommentarsystem\", \"PWA\", \"CDN\", \"Fingerprint\" und \"Analytics\" werden deaktiviert."
quicklyUpgrade = "Schnelles Upgrade verwenden Sie den Befehl: "
# === init ===
# === baseof ===
[baseof]
backToTop = "Nach oben"
viewComments = "Kommentare anzeigen"
noscript = ""
noscript = "Diese Website funktioniert am besten mit aktiviertem JavaScript."
# === baseof ===
# === Taxonomy ===
[archives]
other = ""
other = "Archiv"
[allSome]
other = "Alle {{ .Some }}"
@@ -33,10 +32,10 @@ other = "Kategorie"
other = "Kategorien"
[collection]
other = ""
other = "Sammlung"
[collections]
other = ""
other = "Sammlungen"
[tag]
other = "Tag"
@@ -53,12 +52,12 @@ other = "Artikel"
recentlyUpdated = "Zuletzt aktualisiert"
[section.totalWordCount]
one = ""
other = ""
one = "Ein Wort"
other = "Insgesamt {{ .Count }} Wörter"
[section.archiveCounter]
one = ""
other = ""
one = "Nur ein Artikel"
other = "Insgesamt {{ .Count }} Artikel"
# === Section ===
# === Pagination ===
@@ -92,6 +91,8 @@ facebookLanguageCode = "de_DE"
[assets]
search = "Suche"
searchPlaceholder = "Suche nach Titel und Inhalt..."
searchIn = "Suche in {{ . }}"
gotoResultsPage = "Zu den Suchergebnissen ..."
clear = "Leeren"
cancel = "Abbrechen"
noResultsFound = "Keine Ergebnisse gefunden"
@@ -111,26 +112,27 @@ other = "Teilen auf"
# === posts/single.html ===
[single]
contents = "Inhalt"
pin = ""
repost = ""
pin = "Oben anheften"
repost = "Erneut posten"
publishedOnDate = "veröffentlicht an {{ .Date }}"
views = "Aufrufe"
comments = "Kommentare"
author = "Autor"
updatedOnDate = "Aktualisiert am {{ .Date }}"
readMarkdown = "Markdown anzeigen"
viewSource = ""
viewSource = "Quelle anzeigen"
editThisPage = "Diese Seite bearbeiten"
reportIssue = ""
reportIssue = "Problem melden"
openInEditor = "Im Editor öffnen"
back = "Zurück"
home = "Startseite"
readMore = "Mehr lesen"
expirationReminder = "Dieser Artikel wurde zuletzt auf {{ .Date }} aktualisiert, der Inhalt kann veraltet sein."
encryptedAbstract = ""
encryptedMessage = ""
encryptedAbstract = "Dieser Artikel wurde verschlüsselt, daher ist sein Rohinhalt unsichtbar!"
encryptedMessage = "Bitte geben Sie das Passwort ein"
password = "Passwort"
enterBtn = ""
encryptyAgain = ""
enterBtn = "Eintreten"
encryptyAgain = "Erneut verschlüsseln"
relatedContent = "Ähnliche Inhalte"
[single.includedIn]
@@ -142,7 +144,7 @@ both = "enthalten in {{ .Categories }} und {{ .Collections }}"
one = "Ein Wort"
other = "{{ .Count }} Wörter"
[single.fuzzywordcount]
[single.fuzzyWordCount]
other = "{{ .Count }} Wörter (ungefähr)"
[single.readingTime]
@@ -150,11 +152,11 @@ one = "Eine Minute"
other = "{{ .Count }} Minuten"
[single.reward]
donate = ""
wechatpay = ""
alipay = ""
paypal = ""
bitcoin = ""
donate = "Spenden"
wechatpay = "WeChat Pay"
alipay = "Alipay"
paypal = "PayPal"
bitcoin = "Bitcoin"
# === posts/single.html ===
# === 404.html ===
@@ -175,23 +177,23 @@ other = "Sie sind nicht mit dem Internet verbunden, es stehen nur zwischengespei
# === GitHub Alert ===
[alert]
note = ""
tip = ""
important = ""
warning = ""
caution = ""
note = "Hinweis"
tip = "Tipp"
important = "Wichtig"
warning = "Warnung"
caution = "Vorsicht"
# === GitHub Alert ===
# === Task lists ===
[taskList]
" " = ""
"x" = ""
"/" = ""
"-" = ""
"<" = ""
">" = ""
"!" = ""
"?" = ""
" " = "Nicht überprüft"
"x" = "Überprüft"
"/" = "In Bearbeitung"
"-" = "Abgebrochen"
"<" = "Geplant"
">" = "Verschoben"
"!" = "Wichtig"
"?" = "Frage"
# === Task lists ===
# === shortcodes/admonition.html ===
+4 -1
View File
@@ -6,7 +6,7 @@
configurationError = "Configuration Error\nYou haven't configured the FixIt version param correctly yet. See https://fixit.lruihao.cn/documentation/basics/#theme-configuration"
compatibilityError = "Compatibility Error ({{ .From }} -> {{ .To }}):\nYou have an incompatible update. See https://github.com/hugo-fixit/FixIt/releases"
devVersionWarn = "You are using a development version of FixIt. Please consider using a stable version.\nSee https://github.com/hugo-fixit/FixIt/releases"
devEnvWarn = "Current environment is \"development\". The \"comment system\", \"PWA\", \"CDN\" and \"fingerprint\" will be disabled."
devEnvWarn = "Current environment is \"development\". The \"comment system\", \"PWA\", \"CDN\", \"fingerprint\" and \"analytics\" will be disabled."
quicklyUpgrade = "Quickly upgrade use command: "
# === init ===
@@ -91,6 +91,8 @@ facebookLanguageCode = "en_US"
[assets]
search = "Search"
searchPlaceholder = "Search titles or contents ..."
searchIn = "Search in {{ . }}"
gotoResultsPage = "Go to search results page ..."
clear = "Clear"
cancel = "Cancel"
noResultsFound = "No results found"
@@ -121,6 +123,7 @@ readMarkdown = "Read Markdown"
viewSource = "View source"
editThisPage = "Edit this page"
reportIssue = "Report issue"
openInEditor = "Open in editor"
back = "Back"
home = "Home"
readMore = "Read More"
+42 -40
View File
@@ -1,27 +1,26 @@
# Translations for Spanish
# Traducciones para español
# https://gohugo.io/content-management/multilingual/#translation-of-strings
# TODO Some fields are waiting for your translation
# === init ===
[init]
configurationError = ""
compatibilityError = ""
devVersionWarn = ""
devEnvWarn = ""
quicklyUpgrade = ""
configurationError = "Error de configuración\nAún no ha configurado correctamente el parámetro de versión de FixIt. Consulte https://fixit.lruihao.cn/documentation/basics/#theme-configuration"
compatibilityError = "Error de compatibilidad ({{ .From }} -> {{ .To }}):\nTiene una actualización incompatible. Consulte https://github.com/hugo-fixit/FixIt/releases"
devVersionWarn = "Está utilizando una versión de desarrollo de FixIt. Considere usar una versión estable.\nConsulte https://github.com/hugo-fixit/FixIt/releases"
devEnvWarn = "El entorno actual es \"desarrollo\". El \"sistema de comentarios\", \"PWA\", \"CDN\", \"huella digital\" y \"análisis\" estarán deshabilitados."
quicklyUpgrade = "Actualización rápida use el comando: "
# === init ===
# === baseof ===
[baseof]
backToTop = "Volver arriba"
viewComments = "Ver comentarios"
noscript = ""
noscript = "Este sitio web funciona mejor con JavaScript habilitado."
# === baseof ===
# === Taxonomy ===
[archives]
other = ""
other = "Total {{ .Count }} artículos"
[allSome]
other = "Todo {{ .Some }}"
@@ -33,10 +32,10 @@ other = "Categoría"
other = "Categorías"
[collection]
other = ""
other = "Colección"
[collections]
other = ""
other = "Colecciones"
[tag]
other = "Etiqueta"
@@ -53,12 +52,12 @@ other = "Artículos"
recentlyUpdated = "Actualizado recientemente"
[section.totalWordCount]
one = ""
other = ""
one = "Una palabra"
other = "Total {{ .Count }} palabras"
[section.archiveCounter]
one = ""
other = ""
one = "Solo un artículo"
other = "Total {{ .Count }} artículos"
# === Section ===
# === Pagination ===
@@ -92,6 +91,8 @@ facebookLanguageCode = "es_MX"
[assets]
search = "Buscar"
searchPlaceholder = "Busca títulos o contenido..."
searchIn = "Buscar en {{ . }}"
gotoResultsPage = "Ir a la página de resultados de búsqueda ..."
clear = "Limpiar"
cancel = "Cancelar"
noResultsFound = "No se encontraron resultados"
@@ -111,26 +112,27 @@ other = "Compartir en"
# === posts/single.html ===
[single]
contents = "Contenido"
pin = ""
repost = ""
pin = "Fijar en la parte superior"
repost = "Repostear"
publishedOnDate = "publicado el {{ .Date }}"
views = "vistas"
comments = "Comentarios"
author = "Autor"
updatedOnDate = "Actualizado el {{ .Date }}"
readMarkdown = "Leer Markdown"
viewSource = ""
viewSource = "Ver fuente"
editThisPage = "Editar esta página"
reportIssue = ""
reportIssue = "Reportar problema"
openInEditor = "Abrir en el editor"
back = "Regresar"
home = "Inicio"
readMore = "Leer más"
expirationReminder = "Este artículo se actualizó por última vez el {{ .Date }}, es posible que el contenido no esté actualizado."
encryptedAbstract = ""
encryptedMessage = ""
encryptedAbstract = "Este artículo ha sido encriptado, por lo que su contenido bruto es invisible!"
encryptedMessage = "Por favor, ingrese la contraseña"
password = "Contraseña"
enterBtn = ""
encryptyAgain = ""
enterBtn = "Entrar"
encryptyAgain = "Encriptar de nuevo"
relatedContent = "Contenido relacionado"
[single.includedIn]
@@ -150,11 +152,11 @@ one = "Un minuto"
other = "{{ .Count }} minutos"
[single.reward]
donate = ""
wechatpay = ""
alipay = ""
paypal = ""
bitcoin = ""
donate = "Donar"
wechatpay = "WeChat Pay"
alipay = "Alipay"
paypal = "PayPal"
bitcoin = "Bitcoin"
# === posts/single.html ===
# === 404.html ===
@@ -175,23 +177,23 @@ other = "No está conectado a Internet, solo estarán disponibles las páginas a
# === GitHub Alert ===
[alert]
note = ""
tip = ""
important = ""
warning = ""
caution = ""
note = "Nota"
tip = "Consejo"
important = "Importante"
warning = "Advertencia"
caution = "Precaución"
# === GitHub Alert ===
# === Task lists ===
[taskList]
" " = ""
"x" = ""
"/" = ""
"-" = ""
"<" = ""
">" = ""
"!" = ""
"?" = ""
" " = "No verificado"
"x" = "Verificado"
"/" = "En progreso"
"-" = "Cancelado"
"<" = "Programado"
">" = "Reprogramado"
"!" = "Importante"
"?" = "Pregunta"
# === Task lists ===
# === shortcodes/admonition.html ===
+25 -22
View File
@@ -7,7 +7,7 @@
configurationError = "Erreur de configuration\nVous n'avez pas configuré la version de FixIt correctement. Voir https://fixit.lruihao.cn/documentation/basics/#theme-configuration"
compatibilityError = "Erreur de compatibilité ({{ .From }} -> {{ .To }}):\nVous avez une mise à jour incompatible. Voir https://github.com/hugo-fixit/FixIt/releases"
devVersionWarn = "Vous utilisez une version de développement de FixIt. Veuillez considérer l'utilisation d'une version stable.\nVoir https://github.com/hugo-fixit/FixIt/releases"
devEnvWarn = "L'environnement actuel est \"développement\". Le \"système de commentaires\", le \"PWA\", le \"CDN\" et la \"prise d'empreinte\" seront désactivés."
devEnvWarn = "L'environnement actuel est \"développement\". Le \"système de commentaires\", le \"PWA\", le \"CDN\", le \"prise d'empreinte\" et la \"analyses\" seront désactivés."
quicklyUpgrade = "La mise à jour rapide utilise la commande: "
# === init ===
@@ -20,7 +20,7 @@ noscript = "Ce site Web fonctionne mieux quand JavaScript est activé."
# === Taxonomy ===
[archives]
other = ""
other = "Archives"
[allSome]
other = "Tous les {{ .Some }}"
@@ -32,10 +32,10 @@ other = "Catégorie"
other = "Catégories"
[collection]
other = ""
other = "Collection"
[collections]
other = ""
other = "Collections"
[tag]
other = "Tag"
@@ -56,8 +56,8 @@ one = "Nombre de mots: 1"
other = "Nombre de mots: {{ .Count }}"
[section.archiveCounter]
one = ""
other = ""
one = "Seulement un article"
other = "{{ .Count }} articles au total"
# === Section ===
# === Pagination ===
@@ -91,6 +91,8 @@ facebookLanguageCode = "fr"
[assets]
search = "Chercher"
searchPlaceholder = "Rechercher des titres, des contenus..."
searchIn = "Rechercher dans {{ . }}"
gotoResultsPage = "Aller à la page de résultats de recherche ..."
clear = "Effacer"
cancel = "Annuler"
noResultsFound = "Aucun résultat trouvé"
@@ -110,7 +112,7 @@ other = "Partager via"
# === posts/single.html ===
[single]
contents = "Contenus"
pin = ""
pin = "Épingler en haut"
repost = "Reposter"
publishedOnDate = "publié le {{ .Date }}"
views = "vues"
@@ -118,9 +120,10 @@ comments = "commentaires"
author = "Auteur"
updatedOnDate = "Mis à jour le {{ .Date }}"
readMarkdown = "Ouvrir le Markdown"
viewSource = ""
viewSource = "Voir la source"
editThisPage = "Modifier cette page"
reportIssue = ""
reportIssue = "Signaler un problème"
openInEditor = "Ouvrir dans l'éditeur"
back = "Retour"
home = "Accueil"
readMore = "En savoir plus"
@@ -174,23 +177,23 @@ other = "Vous n'êtes pas connecté à Internet, seules les pages mises en cache
# === GitHub Alert ===
[alert]
note = ""
tip = ""
important = ""
warning = ""
caution = ""
note = "Remarque"
tip = "Astuce"
important = "Important"
warning = "Avertissement"
caution = "Attention"
# === GitHub Alert ===
# === Task lists ===
[taskList]
" " = ""
"x" = ""
"/" = ""
"-" = ""
"<" = ""
">" = ""
"!" = ""
"?" = ""
" " = "Non vérifié"
"x" = "Vérifié"
"/" = "En cours"
"-" = "Annulé"
"<" = "Planifié"
">" = "Replanifié"
"!" = "Important"
"?" = "Question"
# === Task lists ===
# === shortcodes/admonition.html ===
+17 -14
View File
@@ -7,7 +7,7 @@
configurationError = "कन्फ़िग्यरेशन त्रुटि \nआपने फिक्सइट संस्करण पैरामीटर को सही ढंग से कॉन्फ़िगर नहीं किया है।. यह देखें: https://fixit.lruihao.cn/documentation/basics/#theme-configuration"
compatibilityError = "संगतता त्रुटि ({{ .From }} -> {{ .To }}):\nआपके पास एक असंगत अपडेट है. यह देखें: https://github.com/hugo-fixit/FixIt/releases"
devVersionWarn = "आप फिक्सइट के डिवेलपर संस्करण का उपयोग कर रहे हैं। कृपया एक स्थिर संस्करण का उपयोग करने पर विचार करें।\nयह देखें: https://github.com/hugo-fixit/FixIt/releases"
devEnvWarn = "वर्तमान परिवेश \"डिवेलप्मेंट\" का है। \"टिप्पणी प्रणाली\", \"पीडब्ल्यूए\", \"सीडीएन\" और \"फ़िंगरप्रिंट\" अक्षम कर दिए जाएंगे। "
devEnvWarn = "वर्तमान परिवेश \"डिवेलप्मेंट\" का है। \"टिप्पणी प्रणाली\", \"पीडब्ल्यूए\", \"सीडीएन\", \"फ़िंगरप्रिंट\" और \"विश्लेषण\" अक्षम कर दिए जाएंगे।"
quicklyUpgrade = "शीघ्रता से अपग्रेड यह कमांड का उपयोग करें: "
# === init ===
@@ -92,6 +92,8 @@ facebookLanguageCode = "hi"
[assets]
search = "खोज"
searchPlaceholder = "शीर्षक या सामग्री खोजें ..."
searchIn = "{{ . }} में खोजें"
gotoResultsPage = "खोज परिणाम पेज पर जाएं ..."
clear = "साफ़ करें"
cancel = "रद्द करें"
noResultsFound = "कोई परिणाम नहीं मिला"
@@ -122,6 +124,7 @@ readMarkdown = "मार्कडाउन पढ़ें"
viewSource = "स्रोत देखें"
editThisPage = "इस पृष्ठ को संपादित करें"
reportIssue = "समस्या की रिपोर्ट करें"
openInEditor = "संपादक में खोलें"
back = "पीछे"
home = "घर"
readMore = "और पढ़ें"
@@ -175,23 +178,23 @@ other = "आप इंटरनेट से कनेक्ट नहीं ह
# === GitHub Alert ===
[alert]
note = ""
tip = ""
important = ""
warning = ""
caution = ""
note = "ध्यान दें"
tip = "टिप"
important = "महत्वपूर्ण"
warning = "चेतावनी"
caution = "सावधान"
# === GitHub Alert ===
# === Task lists ===
[taskList]
" " = ""
"x" = ""
"/" = ""
"-" = ""
"<" = ""
">" = ""
"!" = ""
"?" = ""
" " = "जांच नहीं की गई"
"x" = "जांच की गई"
"/" = "काम जारी है"
"-" = "रद्द किया गया"
"<" = "अनुसूचित"
">" = "पुनः अनुसूचित"
"!" = "महत्वपूर्ण"
"?" = "सवाल"
# === Task lists ===
# === shortcodes/admonition.html ===
+42 -40
View File
@@ -1,27 +1,26 @@
# Translations for Italian
# Traduzioni per l'italiano
# https://gohugo.io/content-management/multilingual/#translation-of-strings
# TODO Some fields are waiting for your translation
# === init ===
[init]
configurationError = ""
compatibilityError = ""
devVersionWarn = ""
devEnvWarn = ""
quicklyUpgrade = ""
configurationError = "Errore di configurazione\nNon hai ancora configurato correttamente il parametro della versione di FixIt. Vedi https://fixit.lruihao.cn/documentation/basics/#theme-configuration"
compatibilityError = "Errore di compatibilità ({{ .From }} -> {{ .To }}):\nHai un aggiornamento incompatibile. Vedi https://github.com/hugo-fixit/FixIt/releases"
devVersionWarn = "Stai utilizzando una versione di sviluppo di FixIt. Si prega di considerare l'utilizzo di una versione stabile.\nVedi https://github.com/hugo-fixit/FixIt/releases"
devEnvWarn = "L'ambiente attuale è \"sviluppo\". Il \"sistema di commenti\", \"PWA\", \"CDN\", \"impronta digitale\" e \"analisi\" saranno disabilitati."
quicklyUpgrade = "Aggiornamento rapido usa il comando: "
# === init ===
# === baseof ===
[baseof]
backToTop = "Torna all'inizio"
viewComments = "Vedi commenti"
noscript = ""
noscript = "Questo sito funziona meglio con JavaScript abilitato."
# === baseof ===
# === Taxonomy ===
[archives]
other = ""
other = "Archivi"
[allSome]
other = "Tutti {{ .Some }}"
@@ -33,10 +32,10 @@ other = "Categoria"
other = "Categorie"
[collection]
other = ""
other = "Collezione"
[collections]
other = ""
other = "Collezioni"
[tag]
other = "Etichetta"
@@ -53,12 +52,12 @@ other = "Articoli"
recentlyUpdated = "Aggiornati di recente"
[section.totalWordCount]
one = ""
other = ""
one = "Una parola"
other = "Totale {{ .Count }} parole"
[section.archiveCounter]
one = ""
other = ""
one = "Solo un articolo"
other = "Totale {{ .Count }} articoli"
# === Section ===
# === Pagination ===
@@ -92,6 +91,8 @@ facebookLanguageCode = "it"
[assets]
search = "Cerca"
searchPlaceholder = "Cerca il titolo o il contenuto dell'articolo ..."
searchIn = "Cerca in"
gotoResultsPage = "Vai alla pagina dei risultati della ricerca ..."
clear = "Chiaro"
cancel = "Annulla"
noResultsFound = "Nessun risultato trovato"
@@ -111,26 +112,27 @@ other = "Condividi su"
# === posts/single.html ===
[single]
contents = "Contenuti"
pin = ""
repost = ""
pin = "Fissa in alto"
repost = "Ripubblica"
publishedOnDate = "pubblicato su {{ .Date }}"
views = "visualizzazioni"
comments = "commenti"
author = "Autore"
updatedOnDate = "Aggiornato il {{ .Date }}"
readMarkdown = "Leggi Markdown"
viewSource = ""
viewSource = "Visualizza sorgente"
editThisPage = "Modifica questa pagina"
reportIssue = ""
reportIssue = "Segnala un problema"
openInEditor = "Apri nell'editor"
back = "Indietro"
home = "Home"
readMore = "Leggi di più"
expirationReminder = "Questo articolo è stato aggiornato l'ultima volta il {{ .Date }}, il contenuto potrebbe non essere aggiornato."
encryptedAbstract = ""
encryptedMessage = ""
encryptedAbstract = "Questo articolo è stato crittografato, quindi il suo contenuto grezzo è invisibile!"
encryptedMessage = "Per favore inserisci la password"
password = "Password"
enterBtn = ""
encryptyAgain = ""
enterBtn = "Entra"
encryptyAgain = "Crittografa di nuovo"
relatedContent = "Contenuti correlati"
[single.includedIn]
@@ -150,11 +152,11 @@ one = "Un minuto"
other = "{{ .Count }} minuti"
[single.reward]
donate = ""
wechatpay = ""
alipay = ""
paypal = ""
bitcoin = ""
donate = "Dona"
wechatpay = "WeChat Pay"
alipay = "Alipay"
paypal = "PayPal"
bitcoin = "Bitcoin"
# === posts/single.html ===
# === 404.html ===
@@ -175,23 +177,23 @@ other = "Non sei connesso a Internet, saranno disponibili solo le pagine memoriz
# === GitHub Alert ===
[alert]
note = ""
tip = ""
important = ""
warning = ""
caution = ""
note = "Nota"
tip = "Suggerimento"
important = "Importante"
warning = "Avvertimento"
caution = "Attenzione"
# === GitHub Alert ===
# === Task lists ===
[taskList]
" " = ""
"x" = ""
"/" = ""
"-" = ""
"<" = ""
">" = ""
"!" = ""
"?" = ""
" " = "Non verificato"
"x" = "Verificato"
"/" = "In corso"
"-" = "Annullato"
"<" = "Programmato"
">" = "Ripianificato"
"!" = "Importante"
"?" = "Domanda"
# === Task lists ===
# === shortcodes/admonition.html ===
+42 -40
View File
@@ -1,27 +1,26 @@
# Translations for Polish
# Tłumaczenie na język polski
# https://gohugo.io/content-management/multilingual/#translation-of-strings
# TODO Some fields are waiting for your translation
# === init ===
[init]
configurationError = ""
compatibilityError = ""
devVersionWarn = ""
devEnvWarn = ""
quicklyUpgrade = ""
configurationError = "Błąd konfiguracji\nNie skonfigurowałeś jeszcze poprawnie parametru wersji FixIt. Zobacz https://fixit.lruihao.cn/documentation/basics/#theme-configuration"
compatibilityError = "Błąd zgodności ({{ .From }} -> {{ .To }}):\nMasz niekompatybilną aktualizację. Zobacz https://github.com/hugo-fixit/FixIt/releases"
devVersionWarn = "Używasz wersji deweloperskiej FixIt. Proszę rozważyć użycie stabilnej wersji.\nZobacz https://github.com/hugo-fixit/FixIt/releases"
devEnvWarn = "Obecne środowisko to \"rozwój\". \"System komentarzy\", \"PWA\", \"CDN\", \"odcisk palca\" i \"analiza\" będą wyłączone."
quicklyUpgrade = "Szybka aktualizacja użyj polecenia: "
# === init ===
# === baseof ===
[baseof]
backToTop = "Powrót do góry"
viewComments = "Zobacz komentarze"
noscript = ""
noscript = "Ta strona działa najlepiej z włączonym JavaScriptem."
# === baseof ===
# === Taxonomy ===
[archives]
other = ""
other = "Archiwum"
[allSome]
other = "Wszystkie {{ .Some }}"
@@ -33,10 +32,10 @@ other = "Kategoria"
other = "Kategorie"
[collection]
other = ""
other = "Collection"
[collections]
other = ""
other = "Collections"
[tag]
other = "Tag"
@@ -53,12 +52,12 @@ other = "Posty"
recentlyUpdated = "Ostatnio zaktualizowane"
[section.totalWordCount]
one = ""
other = ""
one = "Jedno słowo"
other = "Łącznie {{ .Count }} słów"
[section.archiveCounter]
one = ""
other = ""
one = "Tylko jeden artykuł"
other = "Łącznie {{ .Count }} artykułów"
# === Section ===
# === Pagination ===
@@ -92,6 +91,8 @@ facebookLanguageCode = "pl"
[assets]
search = "Szukaj"
searchPlaceholder = "Wyszukaj tytuł lub treść artykułu ..."
searchIn = "Szukaj w {{ . }}"
gotoResultsPage = "Przejdź do strony wyników wyszukiwania ..."
clear = "Pusty"
cancel = "Anuluj"
noResultsFound = "Nie znaleziono wyników"
@@ -111,26 +112,27 @@ other = "Udostępnij na"
# === posts/single.html ===
[single]
contents = "Spis treści"
pin = ""
repost = ""
pin = "Przypnij na górze"
repost = "Prześlij ponownie"
publishedOnDate = "opublikowano {{ .Date }}"
views = "wyświetleń"
comments = "komentarzy"
author = "Autor"
updatedOnDate = "Zaktualizowano {{ .Date }}"
readMarkdown = "Zobacz Markdown"
viewSource = ""
viewSource = "Zobacz źródło"
editThisPage = "Edytuj tą stronę"
reportIssue = ""
reportIssue = "Zgłoś problem"
openInEditor = "Otwórz w edytorze"
back = "Wstecz"
home = "Strona główna"
readMore = "Czytaj więcej"
expirationReminder = "Ten artykuł był ostatnio aktualizowany {{ .Date }}, jego treść może być nieaktualna."
encryptedAbstract = ""
encryptedMessage = ""
encryptedAbstract = "Ten artykuł został zaszyfrowany, więc jego surowa treść jest niewidoczna!"
encryptedMessage = "Proszę wprowadzić hasło"
password = "Hasło"
enterBtn = ""
encryptyAgain = ""
enterBtn = "Wejdź"
encryptyAgain = "Zaszyfruj ponownie"
relatedContent = "Powiązane treści"
[single.includedIn]
@@ -150,11 +152,11 @@ one = "Jedna minuta"
other = "{{ .Count }} minuty"
[single.reward]
donate = ""
wechatpay = ""
alipay = ""
paypal = ""
bitcoin = ""
donate = "Wesprzyj"
wechatpay = "WeChat Pay"
alipay = "Alipay"
paypal = "PayPal"
bitcoin = "Bitcoin"
# === posts/single.html ===
# === 404.html ===
@@ -175,23 +177,23 @@ other = "Nie masz połączenia z Internetem, dostępne będą tylko strony z pam
# === GitHub Alert ===
[alert]
note = ""
tip = ""
important = ""
warning = ""
caution = ""
note = "Notatka"
tip = "Wskazówka"
important = "Ważne"
warning = "Ostrzeżenie"
caution = "Ostrożność"
# === GitHub Alert ===
# === Task lists ===
[taskList]
" " = ""
"x" = ""
"/" = ""
"-" = ""
"<" = ""
">" = ""
"!" = ""
"?" = ""
" " = "Niezweryfikowane"
"x" = "Zweryfikowane"
"/" = "W toku"
"-" = "Anulowane"
"<" = "Zaplanowane"
">" = "Przełożone"
"!" = "Ważne"
"?" = "Pytanie"
# === Task lists ===
# === shortcodes/admonition.html ===
+58 -55
View File
@@ -1,27 +1,26 @@
# Translations for Brazilian Portuguese
# Tradução para português do Brasil
# https://gohugo.io/content-management/multilingual/#translation-of-strings
# TODO Some fields are waiting for your translation
# === init ===
[init]
configurationError = ""
compatibilityError = ""
devVersionWarn = ""
devEnvWarn = ""
quicklyUpgrade = ""
configurationError = "Erro de configuração\nVocê ainda não configurou o parâmetro da versão do FixIt corretamente. Consulte https://fixit.lruihao.cn/documentation/basics/#theme-configuration"
compatibilityError = "Erro de compatibilidade ({{ .From }} -> {{ .To }}):\nVocê tem uma atualização incompatível. Consulte https://github.com/hugo-fixit/FixIt/releases"
devVersionWarn = "Você está usando a versão de desenvolvedor do FixIt. Por favor, use uma versão estável. \nConsulte https://github.com/hugo-fixit/FixIt/releases"
devEnvWarn = "O ambiente atual é \"development\". O \"comment system\", \"PWA\", \"CDN\", \"fingerprint\" e \"analytics\" serão desativados."
quicklyUpgrade = "Utilize o comando para atualizar rapidamente:"
# === init ===
# === baseof ===
[baseof]
backToTop = "Voltar ao topo"
viewComments = "Ver comentários"
noscript = ""
noscript = "Este site funciona melhor com o JavaScript ativado."
# === baseof ===
# === Taxonomy ===
[archives]
other = ""
other = "Arquivos"
[allSome]
other = "{{ .Some }}"
@@ -33,10 +32,10 @@ other = "Categoria"
other = "Categorias"
[collection]
other = ""
other = "Coleção"
[collections]
other = ""
other = "Coleções"
[tag]
other = "Tag"
@@ -46,6 +45,7 @@ other = "Tags"
[posts]
other = "Posts"
# === Taxonomy ===
# === Section ===
@@ -53,12 +53,12 @@ other = "Posts"
recentlyUpdated = "Recentemente atualizado"
[section.totalWordCount]
one = ""
other = ""
one = "Apenas uma palavra"
other = "Total de {{ .Count }} palavras"
[section.archiveCounter]
one = ""
other = ""
one = "Apenas um artigo"
other = "{{ .Count }} artigos no total"
# === Section ===
# === Pagination ===
@@ -75,86 +75,89 @@ switchTheme = "Trocar tema"
# === partials/footer.html ===
[footer]
poweredBySome = "Possibilitado por {{ .Hugo }} | Tema - {{ .Theme }}"
poweredBySome = "Criado com {{ .Hugo }} | Tema - {{ .Theme }}"
siteUV = "Total de visitantes"
sitePV = "Total de visitas"
siteRunning = "Website running ..."
siteRunning = "Site no ar..."
# === partials/footer.html ===
# === partials/comment.html ===
[comment]
valineLang = "en" # Valine não suporta português
valinePlaceholder = "O seu comentário ..."
valinePlaceholder = "O seu comentário..."
facebookLanguageCode = "pt_BR"
# === partials/comment.html ===
# === partials/assets.html ===
[assets]
search = "Pesquisa"
searchPlaceholder = "Pesquisar títulos ou conteúdos ..."
searchPlaceholder = "Pesquisar títulos ou conteúdos..."
searchIn = "Pesquisar em {{ . }}"
gotoResultsPage = "Ir para a página de resultados da pesquisa..."
clear = "Limpar"
cancel = "Cancelar"
noResultsFound = "Nenhum resultado encontrado"
copyToClipboard = "Copiar para a área de transferência"
editLockTitle = "Bloquear bloco de código editável"
editUnLockTitle = "Desbloqueie o bloco de código editável"
editUnLockTitle = "Desbloquear o bloco de código editável"
cookieconsentMessage = "Este site usa Cookies para melhorar sua experiência."
cookieconsentDismiss = "Aceita"
cookieconsentDismiss = "Aceitar"
cookieconsentLink = "Saber mais"
# === partials/assets.html ===
# === partials/plugin/share.html ===
[shareOn]
other = "Compartilhe em"
other = "Compartilhar em"
# === partials/plugin/share.html ===
# === posts/single.html ===
[single]
contents = "Conteúdos"
pin = ""
repost = ""
pin = "Fixar no topo"
repost = "Repostar"
publishedOnDate = "publicado em {{ .Date }}"
views = "visualizações"
comments = "comentários"
author = "Autor"
updatedOnDate = "Atualizado em {{ .Date }}"
readMarkdown = "Leia em Markdown"
viewSource = ""
viewSource = "Ver a fonte"
editThisPage = "Editar esta página"
reportIssue = ""
reportIssue = "Reportar problema"
openInEditor = "Abrir no editor"
back = "Voltar"
home = "Home"
readMore = "Leia mais"
expirationReminder = "Este artigo foi atualizado pela última vez em {{ .Date }}, o conteúdo pode estar desatualizado."
encryptedAbstract = ""
encryptedMessage = ""
password = "Contrasinha"
enterBtn = ""
encryptyAgain = ""
encryptedAbstract = "Este artigo foi encriptado, então seu contéudo bruto é invisível!"
encryptedMessage = "Por favor, insira a senha"
password = "Senha"
enterBtn = "Entrar"
encryptyAgain = "Encripte novamente"
relatedContent = "Conteúdo relacionado"
[single.includedIn]
categories = "incluido em {{ .Categories }}"
collections = "incluido em {{ .Collections }}"
both = "incluido em {{ .Categories }} e {{ .Collections }}"
categories = "incluído em {{ .Categories }}"
collections = "incluído em {{ .Collections }}"
both = "incluído em {{ .Categories }} e {{ .Collections }}"
[single.wordCount]
one = "Uma palavra"
other = "{{ .Count }} palavras"
[single.fuzzyWordCount]
other = ""
other = "Cerca de {{ .Count }} palavras"
[single.readingTime]
one = "Um minuto"
other = "{{ .Count }} minutos"
[single.reward]
donate = ""
wechatpay = ""
alipay = ""
paypal = ""
bitcoin = ""
donate = "Doe"
wechatpay = "Pague pelo WeChat"
alipay = "Alipay"
paypal = "PayPal"
bitcoin = "Bitcoin"
# === posts/single.html ===
# === 404.html ===
@@ -162,7 +165,7 @@ bitcoin = ""
other = "Página não encontrada"
[pageNotFoundText]
other = "A página que você procura não existe. Desculpe"
other = "A página que você procura não existe. Desculpe."
# === 404.html ===
# === offline ===
@@ -175,34 +178,34 @@ other = "Você não está conectado à Internet, apenas as páginas em cache est
# === GitHub Alert ===
[alert]
note = ""
tip = ""
important = ""
warning = ""
caution = ""
note = "Nota"
tip = "Sugestão"
important = "Importante"
warning = "Aviso"
caution = "Cuidado"
# === GitHub Alert ===
# === Task lists ===
[taskList]
" " = ""
"x" = ""
"/" = ""
"-" = ""
"<" = ""
">" = ""
"!" = ""
"?" = ""
" " = "Não verificado"
"x" = "Verificado"
"/" = "Em progresso"
"-" = "Cancelado"
"<" = "Agendado"
">" = "Reagendado"
"!" = "Importante"
"?" = "Dúvida"
# === Task lists ===
# === shortcodes/admonition.html ===
[admonition]
note = "Nota"
abstract = "Abstrato"
abstract = "Resumo"
info = "Info"
todo = "A fazer"
tip = "Dica"
success = "Sucesso"
question = "Pergunta"
question = "Dúvida"
warning = "Aviso"
failure = "Falha"
danger = "Perigo"
+42 -40
View File
@@ -1,27 +1,26 @@
# Translations for Romanian
# Traduceri pentru limba română
# https://gohugo.io/content-management/multilingual/#translation-of-strings
# TODO Some fields are waiting for your translation
# === init ===
[init]
configurationError = ""
compatibilityError = ""
devVersionWarn = ""
devEnvWarn = ""
quicklyUpgrade = ""
configurationError = "Eroare de configurare\nNu ați configurat corect parametrul versiunii FixIt. Consultați https://fixit.lruihao.cn/documentation/basics/#theme-configuration"
compatibilityError = "Eroare de compatibilitate ({{ .From }} -> {{ .To }}):\nAveți o actualizare incompatibilă. Consultați https://github.com/hugo-fixit/FixIt/releases"
devVersionWarn = "Utilizați o versiune de dezvoltare a FixIt. Vă rugăm să luați în considerare utilizarea unei versiuni stabile.\nConsultați https://github.com/hugo-fixit/FixIt/releases"
devEnvWarn = "Mediul curent este \"dezvoltare\". \"Sistemul de comentarii\", \"PWA\", \"CDN\", \"amprentă\" și \"analize\" vor fi dezactivate."
quicklyUpgrade = "Actualizare rapidă utilizați comanda: "
# === init ===
# === baseof ===
[baseof]
backToTop = "Înapoi Sus"
viewComments = "Vizualizare Comentarii"
noscript = ""
noscript = "Acest site funcționează cel mai bine cu JavaScript activat."
# === baseof ===
# === Taxonomy ===
[archives]
other = ""
other = "Arhive"
[allSome]
other = "Toate {{ .Some }}"
@@ -33,10 +32,10 @@ other = "Categorie"
other = "Categorii"
[collection]
other = ""
other = "Colecție"
[collections]
other = ""
other = "Colecții"
[tag]
other = "Etichetă"
@@ -53,12 +52,12 @@ other = "Articole"
recentlyUpdated = "Actualizat recent"
[section.totalWordCount]
one = ""
other = ""
one = "Un cuvânt"
other = "Total {{ .Count }} cuvinte"
[section.archiveCounter]
one = ""
other = ""
one = "Un singur articol"
other = "{{ .Count }} articole în total"
# === Section ===
# === Pagination ===
@@ -92,6 +91,8 @@ facebookLanguageCode = "ro_RO"
[assets]
search = "Căutare"
searchPlaceholder = "Căutarea titlului sau conținutului articolului ..."
searchIn = "Căutare în {{ . }}"
gotoResultsPage = "Mergi la pagina de rezultate a căutării ..."
clear = "Golire"
cancel = "Anulare"
noResultsFound = "Nici un rezultat gasit"
@@ -111,26 +112,27 @@ other = "Distribuie pe"
# === posts/single.html ===
[single]
contents = "Cuprins"
pin = ""
repost = ""
pin = "Fixează în partea de sus"
repost = "Repostează"
publishedOnDate = "publicat la {{ .Date }}"
views = "vizualizări"
comments = "comentarii"
author = "Autor"
updatedOnDate = "Actualizat la {{ .Date }}"
readMarkdown = "Citire Markdown"
viewSource = ""
viewSource = "Vezi sursa"
editThisPage = "Editați această pagină"
reportIssue = ""
reportIssue = "Raportează o problemă"
openInEditor = "Deschide în editor"
back = "Înapoi"
home = "Acasă"
readMore = "Citește mai mult"
expirationReminder = "Acest articol a fost actualizat ultima dată pe {{ .Date }}, conținutul poate fi depășit."
encryptedAbstract = ""
encryptedMessage = ""
encryptedAbstract = "Acest articol a fost criptat, astfel încât conținutul său brut este invizibil!"
encryptedMessage = "Vă rugăm să introduceți parola"
password = "Parolă"
enterBtn = ""
encryptyAgain = ""
enterBtn = "Intră"
encryptyAgain = "Criptează din nou"
relatedContent = "Conținut înrudit"
[single.includedIn]
@@ -150,11 +152,11 @@ one = "Un minut"
other = "{{ .Count }} minute"
[single.reward]
donate = ""
wechatpay = ""
alipay = ""
paypal = ""
bitcoin = ""
# donate = "Donați"
wechatpay = "WeChat Pay"
alipay = "Alipay"
paypal = "PayPal"
bitcoin = "Bitcoin"
# === posts/single.html ===
# === 404.html ===
@@ -175,23 +177,23 @@ other = "Nu sunteți conectat la Internet, vor fi disponibile doar paginile stoc
# === GitHub Alert ===
[alert]
note = ""
tip = ""
important = ""
warning = ""
caution = ""
note = "Notă"
tip = "Sfat"
important = "Important"
warning = "Avertisment"
caution = "Atenție"
# === GitHub Alert ===
# === Task lists ===
[taskList]
" " = ""
"x" = ""
"/" = ""
"-" = ""
"<" = ""
">" = ""
"!" = ""
"?" = ""
" " = "Necontrolat"
"x" = "Controlat"
"/" = "În progres"
"-" = "Anulat"
"<" = "Programat"
">" = "Reprogramat"
"!" = "Important"
"?" = "Întrebare"
# === Task lists ===
# === shortcodes/admonition.html ===
+37 -35
View File
@@ -1,27 +1,26 @@
# Translations for Russian
# Переводы на русский
# https://gohugo.io/content-management/multilingual/#translation-of-strings
# TODO Some fields are waiting for your translation
# === init ===
[init]
configurationError = ""
compatibilityError = ""
devVersionWarn = ""
devEnvWarn = ""
quicklyUpgrade = ""
configurationError = "Ошибка конфигурации\nВы еще не настроили параметр версии FixIt правильно. См. https://fixit.lruihao.cn/documentation/basics/#theme-configuration"
compatibilityError = "Ошибка совместимости ({{ .From }} -> {{ .To }}):\nУ вас есть несовместимое обновление. См. https://github.com/hugo-fixit/FixIt/releases"
devVersionWarn = "Вы используете версию разработки FixIt. Пожалуйста, рассмотрите возможность использования стабильной версии.\nСм. https://github.com/hugo-fixit/FixIt/releases"
devEnvWarn = "Текущая среда - \"разработка\". \"Система комментариев\", \"PWA\", \"CDN\", \"отпечаток\" и \"аналитика\" будут отключены."
quicklyUpgrade = "Быстрое обновление используйте команду: "
# === init ===
# === baseof ===
[baseof]
backToTop = "Наверх"
viewComments = "Посмотреть комментарии"
noscript = ""
noscript = "Этот сайт работает лучше с включенным JavaScript."
# === baseof ===
# === Taxonomy ===
[archives]
other = ""
other = "Архив"
[allSome]
other = "Все {{ .Some }}"
@@ -33,10 +32,10 @@ other = "Категория"
other = "Категории"
[collection]
other = ""
other = "Collection"
[collections]
other = ""
other = "Collections"
[tag]
other = "Тэг"
@@ -53,12 +52,12 @@ other = "Статьи"
recentlyUpdated = "Недавно обновленные"
[section.totalWordCount]
one = ""
other = ""
one = "Всего одно слово"
other = "Всего {{ .Count }} слов"
[section.archiveCounter]
one = ""
other = ""
one = "Только одна статья"
other = "Всего {{ .Count }} статей"
# === Section ===
# === Pagination ===
@@ -92,6 +91,8 @@ facebookLanguageCode = "ru_RU"
[assets]
search = "Поиск"
searchPlaceholder = "Поиск заголовков или содержимого ..."
searchIn = "Поиск в {{ . }}"
gotoResultsPage = "Перейти на страницу результатов поиска ..."
clear = "Очистить"
cancel = "Отменить"
noResultsFound = "Результатов не найдено"
@@ -111,26 +112,27 @@ other = "Поделиться в"
# === posts/single.html ===
[single]
contents = "Содержание"
pin = ""
repost = ""
pin = "Закрепить наверху"
repost = "Перепостить"
publishedOnDate = "Опубликовано {{ .Date }}"
views = "просмотров"
comments = "комментариев"
author = "Автор"
updatedOnDate = "Oбновлена {{ .Date }}"
readMarkdown = "Читать Markdown"
viewSource = ""
viewSource = "Просмотреть источник"
editThisPage = "Редактировать эту страницу"
reportIssue = ""
reportIssue = "Сообщить о проблеме"
openInEditor = "Открыть в редакторе"
back = "Назад"
home = "Домой"
readMore = "Читать больше"
expirationReminder = "Эта статья последний раз обновлялась {{ .Date }}, содержание может быть устаревшим."
encryptedAbstract = ""
encryptedMessage = ""
encryptedAbstract = "Эта статья была зашифрована, поэтому ее исходное содержание невидимо!"
encryptedMessage = "Пожалуйста, введите пароль"
password = "арготизм"
enterBtn = ""
encryptyAgain = ""
enterBtn = "Войти"
encryptyAgain = "Зашифровать снова"
relatedContent = "Связанный контент"
[single.includedIn]
@@ -175,23 +177,23 @@ other = "Вы не подключены к интернету, будут дос
# === GitHub Alert ===
[alert]
note = ""
tip = ""
important = ""
warning = ""
caution = ""
note = "Примечание"
tip = "Совет"
important = "Важно"
warning = "Предупреждение"
caution = "Осторожно"
# === GitHub Alert ===
# === Task lists ===
[taskList]
" " = ""
"x" = ""
"/" = ""
"-" = ""
"<" = ""
">" = ""
"!" = ""
"?" = ""
" " = "Не проверено"
"x" = "Проверено"
"/" = "В процессе"
"-" = "Отменено"
"<" = "Запланировано"
">" = "Перенесено"
"!" = "Важно"
"?" = "Вопрос"
# === Task lists ===
# === shortcodes/admonition.html ===
+42 -40
View File
@@ -1,27 +1,26 @@
# Translations for Serbian
# Превод на Српски
# https://gohugo.io/content-management/multilingual/#translation-of-strings
# TODO Some fields are waiting for your translation
# === init ===
[init]
configurationError = ""
compatibilityError = ""
devVersionWarn = ""
devEnvWarn = ""
quicklyUpgrade = ""
configurationError = "Грешка у конфигурацији\nНисте правилно конфигурисали параметар верзије FixIt. Погледајте https://fixit.lruihao.cn/documentation/basics/#theme-configuration"
compatibilityError = "Грешка у компатибилности ({{ .From }} -> {{ .To }}):\nИмате некомпатибилно ажурирање. Погледајте https://github.com/hugo-fixit/FixIt/releases"
devVersionWarn = "Користите развојну верзију FixIt. Размотрите коришћење стабилне верзије.\nПогледајте https://github.com/hugo-fixit/FixIt/releases"
devEnvWarn = "Тренутно окружење је \"развојно\". \"Систем коментара\", \"PWA\", \"CDN\", \"отисак прста\" и \"аналитика\" ће бити онемогућени."
quicklyUpgrade = "Брзо ажурирање користите команду: "
# === init ===
# === baseof ===
[baseof]
backToTop = "Назад на Врх"
viewComments = "Погледај Коментаре"
noscript = ""
noscript = "Овај сајт најбоље ради са омогућеним JavaScript-ом."
# === baseof ===
# === Taxonomy ===
[archives]
other = ""
other = "Остало"
[allSome]
other = "Све {{ .Some }}"
@@ -33,10 +32,10 @@ other = "Категорија"
other = "Категорије"
[collection]
other = ""
other = "Collection"
[collections]
other = ""
other = "Collections"
[tag]
other = "Таг"
@@ -53,12 +52,12 @@ other = "Постови"
recentlyUpdated = "Недавно Ажурирано"
[section.totalWordCount]
one = ""
other = ""
one = "Једна реч"
other = "Укупно {{ .Count }} речи"
[section.archiveCounter]
one = ""
other = ""
one = "Само један чланак"
other = "{{ .Count }} чланака укупно"
# === Section ===
# === Pagination ===
@@ -92,6 +91,8 @@ facebookLanguageCode = "sr_RS"
[assets]
search = "Претрага"
searchPlaceholder = "Претражи наслове или садржај..."
searchIn = "Претражи у {{ . }}"
gotoResultsPage = "Иди на страницу резултата претраге ..."
clear = "Очисти"
cancel = "Поништи"
noResultsFound = "Без резултата"
@@ -111,26 +112,27 @@ other = "Подели на"
# === posts/single.html ===
[single]
contents = "Садржаји"
pin = ""
repost = ""
pin = "Закачи"
repost = "Поново објави"
publishedOnDate = "објављено {{ .Date }}"
views = "прегледа"
comments = "коментари"
author = "Аутор"
updatedOnDate = "Ажурирано {{ .Date }}"
readMarkdown = "Читај Markdown"
viewSource = ""
viewSource = "Погледај извор"
editThisPage = "Уреди ову страницу"
reportIssue = ""
reportIssue = "Пријави проблем"
openInEditor = "Отвори у уреднику"
back = "Назад"
home = "Почетна"
readMore = "Прочитај више"
expirationReminder = "Овај чланак је последњи пут ажуриран {{ .Date }}, садржај је можда застарео."
encryptedAbstract = ""
encryptedMessage = ""
encryptedAbstract = "Овај чланак је шифрован."
encryptedMessage = "Унесите лозинку да бисте видели садржај."
password = "Паролица"
enterBtn = ""
encryptyAgain = ""
enterBtn = "Унеси"
encryptyAgain = "Поново шифруј"
relatedContent = "Повезани садржај"
[single.includedIn]
@@ -150,11 +152,11 @@ one = "Један минут"
other = "{{ .Count }} минута"
[single.reward]
donate = ""
wechatpay = ""
alipay = ""
paypal = ""
bitcoin = ""
donate = "Донирај"
wechatpay = "WeChat Pay"
alipay = "Alipay"
paypal = "PayPal"
bitcoin = "Bitcoin"
# === posts/single.html ===
# === 404.html ===
@@ -175,23 +177,23 @@ other = "Нисте повезани на Интернет, биће досту
# === GitHub Alert ===
[alert]
note = ""
tip = ""
important = ""
warning = ""
caution = ""
note = "Напомена"
tip = "Савет"
important = "Важно"
warning = "Упозорење"
caution = "Опрез"
# === GitHub Alert ===
# === Task lists ===
[taskList]
" " = ""
"x" = ""
"/" = ""
"-" = ""
"<" = ""
">" = ""
"!" = ""
"?" = ""
" " = "Непроверено"
"x" = "Проверено"
"/" = "У току"
"-" = "Отказано"
"<" = "Планирано"
">" = "Преустановљено"
"!" = "Важно"
"?" = "Питање"
# === Task lists ===
# === shortcodes/admonition.html ===
+42 -40
View File
@@ -1,26 +1,25 @@
# Translations for Vietnamese
# https://gohugo.io/content-management/multilingual/#translation-of-strings
# TODO Some fields are waiting for your translation
# === init ===
[init]
configurationError = ""
compatibilityError = ""
devVersionWarn = ""
devEnvWarn = ""
quicklyUpgrade = ""
configurationError = "Lỗi cấu hình\nBạn chưa cấu hình tham số phiên bản FixIt đúng cách. Xem https://fixit.lruihao.cn/documentation/basics/#theme-configuration"
compatibilityError = "Lỗi tương thích ({{ .From }} -> {{ .To }}):\nBạn có một bản cập nhật không tương thích. Xem https://github.com/hugo-fixit/FixIt/releases"
devVersionWarn = "Bạn đang sử dụng một phiên bản phát triển của FixIt. Vui lòng xem xét sử dụng một phiên bản ổn định.\nXem https://github.com/hugo-fixit/FixIt/releases"
devEnvWarn = "Môi trường hiện tại là \"development\". \"Hệ thống bình luận\", \"PWA\", \"CDN\", \"vân tay\" và \"thống kê\" sẽ bị vô hiệu hóa."
quicklyUpgrade = "Nâng cấp nhanh bằng lệnh: "
# === init ===
# === baseof ===
[baseof]
backToTop = "Lên trên"
viewComments = "Xem bình luận"
noscript = ""
noscript = "Trang web này hoạt động tốt nhất khi JavaScript được kích hoạt."
# === baseof ===
# === Taxonomy ===
[archives]
other = ""
other = "Bài viết cũ"
[allSome]
other = "Tất cả {{ .Some }}"
@@ -32,10 +31,10 @@ other = "Danh mục"
other = "Danh mục"
[collection]
other = ""
other = "Collection"
[collections]
other = ""
other = "Collections"
[tag]
other = "Nhãn"
@@ -52,12 +51,12 @@ other = "Bài viết"
recentlyUpdated = "Mới nhất"
[section.totalWordCount]
one = ""
other = ""
one = "Chỉ một từ"
other = "Tổng cộng {{ .Count }} từ"
[section.archiveCounter]
one = ""
other = ""
one = "Chỉ một bài viết"
other = "{{ .Count }} bài viết"
# === Section ===
# === Pagination ===
@@ -91,6 +90,8 @@ facebookLanguageCode = "vi"
[assets]
search = "Tìm kiếm"
searchPlaceholder = "Tìm tiêu đề hoặc nội dung..."
searchIn = "Tìm kiếm trong {{ . }}"
gotoResultsPage = "Đi đến trang kết quả tìm kiếm ..."
clear = "Xoá"
cancel = "Huỷ"
noResultsFound = "Không tìm thấy"
@@ -110,26 +111,27 @@ other = "Chia sẻ trên"
# === posts/single.html ===
[single]
contents = "Nội dung"
pin = ""
repost = ""
pin = "Ghim ở đầu trang"
repost = "Đăng lại"
publishedOnDate = "đăng ngày {{ .Date }}"
views = "lượt xem"
comments = "bình luận"
author = "Tác giả"
updatedOnDate = "Cập nhật ngày {{ .Date }}"
readMarkdown = "Đọc với định dạng Markdown"
viewSource = ""
viewSource = "Xem mã nguồn"
editThisPage = "Chỉnh sửa trang này"
reportIssue = ""
reportIssue = "Báo cáo lỗi"
openInEditor = "Mở trong trình chỉnh sửa"
back = "Quay lại"
home = "Trang chủ"
readMore = "Đọc thêm"
expirationReminder = "Bài viết này được cập nhật lần cuối vào {{ .Date }}, nội dung có thể đã lỗi thời."
encryptedAbstract = ""
encryptedMessage = ""
encryptedAbstract = "Bài viết này đã được mã hóa, nên nội dung gốc không thể nhìn thấy!"
encryptedMessage = "Vui lòng nhập mật khẩu"
password = "Mật khẩu"
enterBtn = ""
encryptyAgain = ""
enterBtn = "Nhập"
encryptyAgain = "Mã hóa lại"
relatedContent = "Nội dung liên quan"
[single.includedIn]
@@ -149,11 +151,11 @@ one = "One minute"
other = "{{ .Count }} phút"
[single.reward]
donate = ""
wechatpay = ""
alipay = ""
paypal = ""
bitcoin = ""
donate = "Ủng hộ"
wechatpay = "WeChat Pay"
alipay = "Alipay"
paypal = "PayPal"
bitcoin = "Bitcoin"
# === posts/single.html ===
# === 404.html ===
@@ -174,23 +176,23 @@ other = "Bạn chưa kết nối với Internet, chỉ các trang được lưu
# === GitHub Alert ===
[alert]
note = ""
tip = ""
important = ""
warning = ""
caution = ""
note = "Ghi chú"
tip = "Mẹo"
important = "Quan trọng"
warning = "Cảnh báo"
caution = "Chú ý"
# === GitHub Alert ===
# === Task lists ===
[taskList]
" " = ""
"x" = ""
"/" = ""
"-" = ""
"<" = ""
">" = ""
"!" = ""
"?" = ""
" " = "Chưa kiểm tra"
"x" = "Đã kiểm tra"
"/" = "Đang tiến hành"
"-" = "Đã hủy"
"<" = "Đã lên lịch"
">" = "Đã lên lịch lại"
"!" = "Quan trọng"
"?" = "Câu hỏi"
# === Task lists ===
# === shortcodes/admonition.html ===
+4 -1
View File
@@ -7,7 +7,7 @@
configurationError = "配置文件错误\n您还没有正确配置 FixIt 的版本参数。参考 https://fixit.lruihao.cn/zh-cn/documentation/basics/#theme-configuration"
compatibilityError = "兼容性错误 ({{ .From }} -> {{ .To }}):\n您进行了一次不兼容的更新。参考 https://github.com/hugo-fixit/FixIt/releases"
devVersionWarn = "您正在使用开发版的 FixIt,请考虑使用稳定版。\n见 https://github.com/hugo-fixit/FixIt/releases"
devEnvWarn = "当前运行环境是“development”。“评论系统”、“PWA”、“CDN”“fingerprint”不会启用。"
devEnvWarn = "当前运行环境是“development”。“评论系统”、“PWA”、“CDN”“fingerprint”和“统计”不会启用。"
quicklyUpgrade = "使用命令快速升级:"
# === init ===
@@ -89,6 +89,8 @@ facebookLanguageCode = "zh_CN"
[assets]
search = "搜索"
searchPlaceholder = "搜索文章标题或内容……"
searchIn = "在 {{ . }} 中搜索"
gotoResultsPage = "前往搜索结果页面……"
clear = "清空"
cancel = "取消"
noResultsFound = "没有找到结果"
@@ -119,6 +121,7 @@ readMarkdown = "阅读原始文档"
viewSource = "查看源码"
editThisPage = "编辑此页"
reportIssue = "报告问题"
openInEditor = "在编辑器中打开"
back = "返回"
home = "主页"
readMore = "阅读全文"
+4 -1
View File
@@ -7,7 +7,7 @@
configurationError = "配置文件錯誤\n您還沒有正確配置 FixIt 的版本參數。參考 https://fixit.lruihao.cn/zh-cn/documentation/basics/#theme-configuration"
compatibilityError = "兼容性錯誤 ({{ .From }} -> {{ .To }}):\n您進行了一次不兼容的更新。参考 https://github.com/hugo-fixit/FixIt/releases"
devVersionWarn = "您正在使用開發版的 FixIt,請考慮使用穩定版。\n見 https://github.com/hugo-fixit/FixIt/releases"
devEnvWarn = "當前運行環境是“development”。“評論系統”、“PWA”、“CDN”“fingerprint”不會啟用。"
devEnvWarn = "當前運行環境是“development”。“評論系統”、“PWA”、“CDN”“fingerprint”和“統計”不會啟用。"
quicklyUpgrade = "使用命令快速升級:"
# === init ===
@@ -89,6 +89,8 @@ facebookLanguageCode = "zh-TW"
[assets]
search = "搜尋"
searchPlaceholder = "搜尋文章標題或內容……"
searchIn = "在 {{ . }} 中搜尋"
gotoResultsPage = "前往搜尋結果頁面……"
clear = "清除"
cancel = "取消"
noResultsFound = "沒有找到結果"
@@ -119,6 +121,7 @@ readMarkdown = "閱讀原始文檔"
viewSource = "查看原始碼"
editThisPage = "編輯此頁"
reportIssue = "報告問題"
openInEditor = "在編輯器中打開"
back = "返回"
home = "主頁"
readMore = "閱讀全文"
@@ -2,16 +2,12 @@
{{- if .AlertTitle | or .AlertSign | or (.AlertType | in $basicTypes | not) -}}
{{- /* The extended syntax is compatible with Obsidian and FixIt admonition shortcode. */ -}}
{{- /* === Dirty hack === */ -}}
{{- /* BUG of Hugo https://github.com/gohugoio/hugo/issues/12913 */ -}}
{{- $title := replaceRE "</([a-zA-Z]+)$" "</$1>" .AlertTitle -}}
{{- /* === Dirty hack === */ -}}
{{- $openMap := dict "+" true "-" false -}}
{{- $open := index $openMap .AlertSign | default true -}}
{{- $foldable := ne .AlertSign "" -}}
{{- dict
"Type" .AlertType
"Title" $title
"Title" .AlertTitle
"Open" $open
"Text" .Text
"Foldable" $foldable
@@ -1,2 +1,8 @@
{{- dict "Options" .Attributes "Inner" .Inner | partial "plugin/echarts.html" -}}
{{- dict
"Options" .Attributes
"Inner" .Inner
"Resources" .Page.Resources
"Position" .Position
| partial "plugin/echarts.html"
-}}
{{- .Page.Store.Set "hasEcharts" true -}}
@@ -1 +1,7 @@
{{- dict "Options" .Attributes "Inner" .Inner | partial "plugin/timeline.html" -}}
{{- dict
"Options" .Attributes
"Inner" .Inner
"Resources" .Page.Resources
"Position" .Position
| partial "plugin/timeline.html"
-}}
+15 -2
View File
@@ -7,7 +7,8 @@
{{- end -}}
{{- $headingConfig := $params.heading -}}
{{- /* Only enable in main section pages */ -}}
{{- $onlyMainSection := cond $headingConfig.number.onlyMainSection (eq .Page.Type "posts") true -}}
{{- $intersect := (slice .Page.Section .Page.Type) | intersect site.MainSections -}}
{{- $onlyMainSection := cond $headingConfig.number.onlyMainSection ((gt (len $intersect) 0) | and (eq .Page.Kind "page")) true -}}
{{- $ordered := $toc.ordered | and $headingConfig.number.enable | and $onlyMainSection -}}
{{- $h1Format := $headingConfig.number.format.h1 | default "{title}" -}}
{{- $h2Format := $headingConfig.number.format.h2 | default "{h2} {title}" -}}
@@ -31,9 +32,21 @@
{{- .Page.Scratch.SetInMap "heading-counter" (string (add $level 1)) 0 -}}
{{- end -}}
{{- $attrs := "" }}
{{- range $key, $value := .Attributes }}
{{- $attrs = printf "%s %s=%q" $attrs $key $value }}
{{- end }}
{{- with .Attributes.class }}
{{- $attrs = replace $attrs . (printf "heading-element %s" .) }}
{{- else }}
{{- $attrs = printf "class=%q %s" "heading-element" $attrs }}
{{- end }}
{{- $attrs = partial "function/trim.html" $attrs -}}
{{- /* Force decrease the markup level to avoid multiple h1 */ -}}
{{- $markupLevel := cond (gt $maxMarkupLevel $level) $maxMarkupLevel $level -}}
<h{{ $markupLevel }} id="{{ .Anchor | safeURL }}" class="heading-element">
<h{{ $markupLevel }} {{ $attrs | safeHTMLAttr }}>
{{- $title := .Text -}}
{{- if $ordered -}}
{{- /* Add 1 to the current level */ -}}
+17 -3
View File
@@ -1,13 +1,27 @@
{{- /*
A Markdown image has three components: the image description, the image destination, and optionally the image title.
![white kitten](/images/kitten.jpg "A kitten!")
------------ ------------------ ---------
description destination title
------------ ------------------ ---------
.Text .Destination .Title
*/ -}}
{{- $params := .Page.Params | merge site.Params.page -}}
{{- $optim := slice
(dict "Process" "resize 800x webp q75" "descriptor" "800w")
(dict "Process" "resize 1200x webp q75" "descriptor" "1200w")
(dict "Process" "resize 1600x webp q75" "descriptor" "1600w")
-}}
{{- if .Title | and .Text -}}
{{- $linked := ne $params.lightgallery false -}}
<figure>
{{- dict "Src" .Destination "Alt" .Text "Caption" .Text "Title" .Title "Linked" $linked "Responsive" true "Resources" .Page.Resources | partial "plugin/image.html" -}}
{{- dict "Src" .Destination "Alt" .PlainText "Title" .Title "Caption" .Text "Linked" $linked "Loading" "lazy" "Resources" .Page.Resources "OptimConfig" $optim | partial "plugin/image.html" -}}
<figcaption class="image-caption">
{{- .Text | safeHTML -}}
{{- .Title | safeHTML -}}
</figcaption>
</figure>
{{- else -}}
{{- $linked := (eq $params.lightgallery "force") | or ($params.lightgallery | and (ne .Title "")) -}}
{{- dict "Src" .Destination "Alt" .Text "Title" .Title "Linked" $linked "Responsive" true "Resources" .Page.Resources | partial "plugin/image.html" -}}
{{- dict "Src" .Destination "Alt" .PlainText "Title" .Title "Linked" $linked "Loading" "lazy" "Resources" .Page.Resources "OptimConfig" $optim | partial "plugin/image.html" -}}
{{- end -}}
@@ -17,7 +17,7 @@
<script src="//at.alicdn.com/t/font_578712_g26jo2kbzd5qm2t9.js" async defer></script>
<div class="friend-links">
{{ range $index, $friend := .Site.Data.friends }}
<a class="friend-link" title="{{ $friend.description }}" href="{{ $friend.url | safeURL }}" rel="external noopener" target="_blank">
<a class="friend-link" title="{{ $friend.description | safeHTML }}" href="{{ $friend.url | safeURL }}" rel="external noopener" target="_blank">
{{ if $friend.avatar }}
{{- dict "Src" $friend.avatar "Alt" $friend.nickname "Title" $friend.description "Class" "friend-avatar" | partial "plugin/image.html" -}}
{{ else }}
+34
View File
@@ -0,0 +1,34 @@
{{- define "title" -}}
{{- cond (.Param "capitalizeTitles") (title .Title) .Title -}}
{{- if .Site.Params.withSiteTitle }} {{ .Site.Params.titleDelimiter }} {{ .Site.Title }}{{- end -}}
{{- end -}}
{{- define "content" -}}
{{- $params := partial "function/params.html" -}}
{{- $cse := .Site.Params.cse -}}
<article class="page single special search">
<div class="header">
{{- /* Title */ -}}
<h1 class="single-title animate__animated animate__pulse animate__faster">{{- cond (.Param "capitalizeTitles") (title .Title) .Title -}}</h1>
{{- /* Subtitle */ -}}
{{- with $params.subtitle -}}<p class="single-subtitle animate__animated animate__fadeIn">{{ . | $.RenderString }}</p>{{- end -}}
</div>
{{- /* Content */ -}}
<div class="content" id="content">
{{- dict "Content" .Content "Ruby" $params.ruby "Fraction" $params.fraction "Fontawesome" $params.fontawesome | partial "function/content.html" | safeHTML -}}
</div>
{{- /* Google CSE */ -}}
{{- if eq $cse.engine "google" -}}
{{- with $cse.google.cx -}}
<script async defer src="https://cse.google.com/cse.js?cx={{ . }}"></script>
<div class="gcse-searchbox"></div>
<div class="gcse-searchresults"></div>
{{- end -}}
{{- end -}}
{{- /* Bing CSE (Unsupported) */ -}}
</article>
{{- end -}}
+9 -1
View File
@@ -3,6 +3,9 @@
<article class="single summary" itemscope itemtype="http://schema.org/Article">
{{- /* Featured image */ -}}
{{- $image := $params.featuredimagepreview | default $params.featuredimage -}}
{{- with dict "Path" $image "Resources" .Resources | partial "function/resource.html" }}
{{- $image = .RelPermalink }}
{{- end }}
{{- with .Resources.GetMatch "featured-image" -}}
{{- $image = .RelPermalink -}}
{{- end -}}
@@ -12,7 +15,12 @@
{{- with $image -}}
<div class="featured-image-preview">
<a href="{{ $.RelPermalink }}" aria-label="{{ $.Title }}">
{{- dict "Src" . "Title" $.Description "Alt" $.Title "Resources" $.Resources "Width" "50%" "Height" "50%" | partial "plugin/image.html" -}}
{{- $optim := slice
(dict "Process" "fill 800x240 Center webp q75" "descriptor" "800w")
(dict "Process" "fill 1200x360 Center webp q75" "descriptor" "1200w")
(dict "Process" "fill 1600x480 Center webp q75" "descriptor" "1600w")
-}}
{{- dict "Src" . "Title" $.Title "Resources" $.Resources "Loading" "eager" "Width" "800" "Height" "240" "Sizes" "(max-width: 680px) 100vw, (max-width: 960px) 80vw, (max-width: 1440px) 56vw, 800px" "OptimConfig" $optim "Alt" (printf "Featured image for %v" $.Title) | partial "plugin/image.html" -}}
</a>
</div>
{{- end -}}
@@ -1,6 +1,11 @@
{{- /* Categories Page */ -}}
{{- /* Taxonomies Page */ -}}
{{- $iconMap := dict
"category" "fa-regular fa-folder"
"collection" "fa-solid fa-layer-group"
-}}
{{- $icon := index $iconMap .Data.Singular | default $iconMap.category -}}
<div class="categories-card">
<div class="taxonomy-cards {{ .Data.Plural }}">
{{- range .Data.Terms.ByCount -}}
{{- $term := .Term -}}
{{- $pages := .Pages -}}
@@ -9,7 +14,7 @@
<div class="card-item-wrapper">
<h2 class="card-item-title">
<a href='{{ partial "function/escapeurl.html" .RelPermalink }}'>
{{- dict "Class" "fa-regular fa-folder fa-fw me-1" | partial "plugin/icon.html" -}}
{{- dict "Class" (add $icon " fa-fw me-1") | partial "plugin/icon.html" -}}
{{- .Page.Title }} <sup>{{ len $pages }}</sup>
</a>
</h2>
@@ -34,3 +39,4 @@
{{- end -}}
{{- end -}}
</div>
{{- /* EOF */ -}}
@@ -5,24 +5,21 @@
{{- define "content" -}}
{{- $taxonomies := .Data.Plural -}}
{{- $iconMap := dict
"categories" "fa-solid fa-folder-tree"
"collections" "fa-solid fa-layer-group"
"tags" "fa-solid fa-tags"
-}}
{{- $icon := index $iconMap $taxonomies | default $iconMap.categories -}}
<div class="page archive">
{{- $termsIcon := "" -}}
{{- if eq $taxonomies "categories" -}}
{{- $termsIcon = "fa-solid fa-folder-tree" -}}
{{- else if eq $taxonomies "tags" -}}
{{- $termsIcon = "fa-solid fa-tags" -}}
{{- else if eq $taxonomies "collections" -}}
{{- $termsIcon = "fa-solid fa-layer-group" -}}
{{- end -}}
{{- /* Title */ -}}
<h1 class="single-title animate__animated animate__pulse animate__faster">
{{- with $termsIcon -}}
{{- dict "Class" (add . " fa-fw me-1") | partial "plugin/icon.html" -}}
{{- end -}}
{{- dict "Class" (add $icon " fa-fw me-1") | partial "plugin/icon.html" -}}
{{- .Params.Title | default (T $taxonomies) | default $taxonomies | dict "Some" | T "allSome" }} <sup>{{ len .Data.Terms.ByCount }}</sup>
</h1>
{{- /* Render miscellaneous terms */ -}}
{{- .Render (add "terms/" $taxonomies) -}}
{{- /* Render different taxonomies */ -}}
{{- $template := cond ( eq $taxonomies "tags") "tags" "taxonomies" -}}
{{- .Render $template -}}
</div>
{{- end -}}
+15
View File
@@ -22,6 +22,18 @@
{{- $source := $cdn.fuseJS | default "lib/fuse/fuse.min.js" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- $config = dict "isCaseSensitive" $search.fuse.isCaseSensitive "minMatchCharLength" $search.fuse.minMatchCharLength "findAllMatches" $search.fuse.findAllMatches "location" $search.fuse.location "threshold" $search.fuse.threshold "distance" $search.fuse.distance "ignoreLocation" $search.fuse.ignoreLocation "useExtendedSearch" $search.fuse.useExtendedSearch "ignoreFieldNorm" $search.fuse.ignoreFieldNorm | dict "search" | merge $config -}}
{{- else if eq $search.type "cse" -}}
{{- $config = dict "type" "cse" | dict "search" | merge $config -}}
{{- $cse := .Site.Params.cse -}}
{{- $config = dict "resultsPage" $cse.resultsPage "gotoResultsPage" (T "assets.gotoResultsPage") | dict "cse" | merge $config -}}
{{- if (eq $cse.engine "google") | and $cse.google.cx -}}
{{- $config = dict "engine" "google" "cx" $cse.google.cx "searchIn" (T "assets.searchIn" "Google") | dict "cse" | merge $config -}}
{{- end -}}
{{- if eq $cse.engine "bing" -}}
{{- /* Unsupported */ -}}
{{- end -}}
{{- else if eq $search.type "post-chat" -}}
{{- $config = dict "type" "post-chat" | dict "search" | merge $config -}}
{{- end -}}
{{- end -}}
@@ -255,6 +267,9 @@
{{- end -}}
{{- end -}}
{{- /* PostChat */ -}}
{{- partial "plugin/post-chat-ai.html" . -}}
{{- range $params.library.css -}}
{{- dict "Source" . "Fingerprint" $fingerprint | dict "Scratch" $.Scratch "Data" | partial "scratch/style.html" -}}
{{- end -}}
+42
View File
@@ -5,6 +5,20 @@
{{- end -}}
{{- end -}}
{{- define "custom-menu:desktop" -}}
{{- $ctx := . -}}
{{- range .Site.Params.customPartials.menuDesktop -}}
{{- partial . $ctx -}}
{{- end -}}
{{- end -}}
{{- define "custom-menu:mobile" -}}
{{- $ctx := . -}}
{{- range .Site.Params.customPartials.menuMobile -}}
{{- partial . $ctx -}}
{{- end -}}
{{- end -}}
{{- define "custom-profile" -}}
{{- $ctx := . -}}
{{- range .Site.Params.customPartials.profile -}}
@@ -47,6 +61,34 @@
{{- end -}}
{{- end -}}
{{- define "custom-post__toc:before" -}}
{{- $ctx := . -}}
{{- range .Site.Params.customPartials.postTocBefore -}}
{{- partial . $ctx -}}
{{- end -}}
{{- end -}}
{{- define "custom-post__toc:after" -}}
{{- $ctx := . -}}
{{- range .Site.Params.customPartials.postTocAfter -}}
{{- partial . $ctx -}}
{{- end -}}
{{- end -}}
{{- define "custom-post__content:before" -}}
{{- $ctx := . -}}
{{- range .Site.Params.customPartials.postContentBefore -}}
{{- partial . $ctx -}}
{{- end -}}
{{- end -}}
{{- define "custom-post__content:after" -}}
{{- $ctx := . -}}
{{- range .Site.Params.customPartials.postContentAfter -}}
{{- partial . $ctx -}}
{{- end -}}
{{- end -}}
{{- define "custom-post__footer:before" -}}
{{- $ctx := . -}}
{{- range .Site.Params.customPartials.postFooterBefore -}}
+2 -6
View File
@@ -32,13 +32,9 @@
{{- $params := .Params | merge .Site.Params.Page }}
{{- $fullText := ((.Params.feed | default dict) | merge $.Config ).fulltext }}
{{- $author := partial "function/get-author-map.html" .Params.author }}
{{- $cacheRemoteImages := $params.cacheRemoteImages }}
{{- $image := $params.featuredimagepreview | default $params.featuredimage }}
{{- with dict "Path" $image "Resources" .Resources "CacheRemoteImages" $cacheRemoteImages.enable | partial "function/resource.html" }}
{{- $url := urls.Parse $image }}
{{- if not $url.Host | or $cacheRemoteImages.replace }}
{{- $image = .Permalink }}
{{- end }}
{{- with dict "Path" $image "Resources" .Resources | partial "function/resource.html" }}
{{- $image = .Permalink }}
{{- end }}
{{- with .Resources.GetMatch "featured-image" }}
{{- $image = .Permalink }}
@@ -1,22 +1,19 @@
{{- /* cache remote image locally */ -}}
{{- $resource := 0 -}}
{{- $suffixList := slice ".jpeg" ".jpg" ".png" ".gif" ".bmp" ".tif" ".tiff" ".webp" ".avif" ".svg" -}}
{{- $suffixValid := (dict "Path" .Path "Suffixes" $suffixList | partial "function/suffix-validation.html") -}}
{{- /* maybe could add domain validation */ -}}
{{- $pass := $suffixValid | or .Pass -}}
{{- $isRemote := urls.Parse .Src | partial "function/is-url-remote.html" -}}
{{- if $pass -}}
{{- with $remoteResource := resources.GetRemote .Path -}}
{{- if $isRemote -}}
{{- with try (resources.GetRemote .Src) -}}
{{- with .Err -}}
{{- erroridf "error-get-remote-image" "%s" . -}}
{{- else -}}
{{- if eq $remoteResource.ResourceType "image" -}}
{{- warnf "%s" . -}}
{{- else with .Value -}}
{{- if .ResourceType | eq "image" -}}
{{- /* placed remote image in public/images/remote/ */ -}}
{{- $resource = $remoteResource | resources.Copy (add "/images/remote/" $remoteResource.Name) -}}
{{- $resource = . | resources.Copy (add "/images/remote/" .Name) -}}
{{- end -}}
{{- else -}}
{{- warnf "Unable to get remote image %q" $.Src -}}
{{- end -}}
{{- else -}}
{{- erroridf "error-get-remote-image" "Unable to get remote image %q" .Path -}}
{{- end -}}
{{- end -}}
{{- return $resource -}}
@@ -1,12 +1,12 @@
{{- $response := dict -}}
{{- with resources.GetRemote .URL .OPTIONS -}}
{{- with try (resources.GetRemote .URL .OPTIONS) -}}
{{- with .Err -}}
{{- erroridf "error-get-remote-json" "%s" . -}}
{{- else -}}
{{- else with .Value -}}
{{- $response = .Content | transform.Unmarshal -}}
{{- else -}}
{{- erroridf "error-get-remote-json" "Unable to get remote resource %q" $.URL -}}
{{- end -}}
{{- else -}}
{{- erroridf "error-get-remote-json" "Unable to get remote resource %q" .URL -}}
{{- end -}}
{{- return $response -}}
@@ -0,0 +1 @@
{{- return and (not (eq .Scheme "")) .Host -}}
+4 -8
View File
@@ -1,22 +1,18 @@
{{- $Resources := .Resources | default page.Resources -}}
{{- $resource := 0 -}}
{{- $url := urls.Parse .Path -}}
{{- if not $url.Host | and $url.Path | and (strings.HasSuffix $url.Path "/" | not) -}}
{{- if not (partial "function/is-url-remote.html" $url) -}}
{{- $dest := strings.TrimPrefix "./" $url.Path -}}
{{- if $Resources -}}
{{- with $Resources.GetMatch $url.Path -}}
{{- with $Resources.GetMatch $dest -}}
{{- $resource = . -}}
{{- end -}}
{{- end -}}
{{- if not $resource -}}
{{- with resources.Get $url.Path -}}
{{- with resources.Get $dest -}}
{{- $resource = . -}}
{{- end -}}
{{- end -}}
{{- else -}}
{{- $cacheRemoteImages := .CacheRemoteImages | default false -}}
{{- if $cacheRemoteImages -}}
{{- $resource = partial "function/get-remote-image.html" (dict "Path" .Path) -}}
{{- end -}}
{{- end -}}
{{- return $resource -}}
@@ -1,3 +1,8 @@
{{- /*
Example:
{{- $suffixList := slice ".jpeg" ".jpg" ".png" ".gif" ".bmp" ".tif" ".tiff" ".webp" ".avif" ".svg" -}}
{{- $suffixValid := (dict "Path" .Path "Suffixes" $suffixList | partial "function/suffix-validation.html") -}}
*/ -}}
{{- $url := urls.Parse .Path -}}
{{- $path := path.Clean ((printf "%v%v" $url.Host $url.Path) | lower) -}}
{{- with $url.Scheme -}}
+3 -3
View File
@@ -28,10 +28,10 @@
*/ -}}
{{- $icon := dict "Class" (add "checkbox-icon fa-fw " (index $iconMap " ")) | partial "plugin/icon.html" -}}
{{- $label := T (printf "taskList.%v" " ") -}}
{{- $content := replaceRE `<li><input disabled="" type="checkbox"> (.+?)</li>` (printf `<li data-task=" " title=%q>%s$1</li>` $label $icon) . -}}
{{- $content := replaceRE `<li>(\n<p>)*<input disabled="" type="checkbox"> (.+?)(</p>\n)*</li>` (printf `<li data-task=" " title=%q>$1%s$2$3</li>` $label $icon) . -}}
{{- $label := T (printf "taskList.%v" "x") -}}
{{- $icon := dict "Class" (add "checkbox-icon fa-fw " (index $iconMap "x")) | partial "plugin/icon.html" -}}
{{- $content = replaceRE `<li><input checked="" disabled="" type="checkbox"> (.+?)</li>` (printf `<li data-task="x" title=%q>%s$1</li>` $label $icon) $content -}}
{{- $content = replaceRE `<li>(\n<p>)*<input checked="" disabled="" type="checkbox"> (.+?)(</p>\n)*</li>` (printf `<li data-task="x" title=%q>$1%s$2$3</li>` $label $icon) $content -}}
{{- /*
The extended syntax is compatible with Obsidian.
@@ -49,7 +49,7 @@
{{- $sign := htmlEscape . -}}
{{- $originSign := replace . "\\" "" -}}
{{- $label := (T (printf "taskList.%v" $originSign)) | default (T (printf "taskList.%v" " ")) -}}
{{- $content = replaceRE (printf `<li>\[%s\] (.+?)</li>` $sign) (printf `<li data-task=%q title=%q>%s$1</li>` $originSign $label $icon) $content -}}
{{- $content = replaceRE (printf `<li>(\n<p>)*\[%s\] (.+?)(</p>\n)*</li>` $sign) (printf `<li data-task=%q title=%q>$1%s$2$3</li>` $originSign $label $icon) $content -}}
{{- end -}}
{{- return $content -}}
+2
View File
@@ -0,0 +1,2 @@
{{- /* Trim whitespace from the beginning and end of a string */ -}}
{{- return (. | replaceRE `[\s]+` " " | strings.TrimSpace) -}}
+33
View File
@@ -37,6 +37,39 @@
<link rel="alternate" type="application/feed+json" href="{{ .Permalink }}" title="{{ $title }}" />
{{- end -}}
{{- /* Mastodon Validation for the site */ -}}
{{- with .Site.Params.social.Mastodon -}}
{{- $mastodonConfig := . -}}
{{- $id := "" -}}
{{- $prefix := "https://mastodon.social/" -}}
{{- /* Check if Mastodon is a string */ -}}
{{- if printf "%T" $mastodonConfig | eq "string" -}}
{{- $id = strings.TrimPrefix "@" $mastodonConfig -}}
{{- /* Check if Mastodon is a map/object */ -}}
{{- else if printf "%T" $mastodonConfig | eq "map[string]interface {}" -}}
{{- $id = .Id | default .id | default "" | strings.TrimPrefix "@" -}}
{{- $prefix = .Prefix | default .prefix | default $prefix -}}
{{- /* If it's neither a string nor a map, do nothing */ -}}
{{- else -}}
{{- errorf "Invalid Mastodon configuration: %#v" $mastodonConfig -}}
{{- end -}}
{{- /* Remove trailing slash from prefix */ -}}
{{- $prefix = strings.TrimSuffix "/" $prefix -}}
{{- /* Construct profile URL */ -}}
{{- $profileUrl := printf "%s/@%s" $prefix $id -}}
{{- /* Only proceed if we have a valid ID */ -}}
{{- if $id -}}
<link rel="me" href="{{ $profileUrl }}" />
<meta name="fediverse:creator" content="{{ $id }}@{{ (urls.Parse $prefix).Host }}" />
{{- end -}}
{{- end -}}
{{- /* style.min.css */ -}}
{{- $options := dict "Source" "css/style.scss" "Fingerprint" $fingerprint -}}
{{- $toCSS := dict "targetPath" "css/style.min.css" "enableSourceMap" true -}}
+8 -2
View File
@@ -8,7 +8,7 @@
<a href="{{ $homeRelPermalink }}" title="{{ .Site.Title }}">
{{- with .Site.Params.header.title -}}
{{- with .logo -}}
{{- dict "Src" . "Class" "logo" "Alt" $.Site.Title "Width" 26 "Height" 26 | partial "plugin/image.html" -}}
{{- dict "Src" . "Class" "logo" "Alt" $.Site.Title "Width" 32 "Height" 32 | partial "plugin/image.html" -}}
{{- end -}}
{{- with .pre -}}
<span class="header-title-pre">{{ . | safeHTML }}</span>
@@ -144,6 +144,9 @@
</ul>
</li>
{{- end -}}
{{- /* Custom menu items in the desktop header */ -}}
{{- block "custom-menu:desktop" . }}{{ end -}}
</ul>
</nav>
</div>
@@ -293,7 +296,7 @@
{{- .Language.LanguageName -}}
</option>
{{- end -}}
{{- else if gt (len .AllTranslations) 1 -}}
{{- else if .IsTranslated -}}
{{- range .AllTranslations -}}
<option value="{{ .RelPermalink }}"{{ if eq .Lang $.Lang }} selected disabled{{ end }}>
{{- .Language.LanguageName -}}
@@ -305,6 +308,9 @@
</select>
</span>
{{- end -}}
{{- /* Custom menu items in the mobile header */ -}}
{{- block "custom-menu:mobile" . }}{{ end -}}
</li>
</ul>
</nav>
+7 -2
View File
@@ -14,6 +14,11 @@
{{- if $avatar -}}
<div class="home-avatar">
{{- $menus := $.Site.Menus.main | default slice -}}
{{- $optim := slice
(dict "Process" "fill center 96x96 webp q75" "descriptor" "96w")
(dict "Process" "fill center 144x144 webp q75" "descriptor" "144w")
(dict "Process" "fill center 192x192 webp q75" "descriptor" "192w")
-}}
{{- $avatarMenuIndex := 0 -}}
{{- if $profile.avatarMenu -}}
{{- range $index, $menu := $menus -}}
@@ -28,10 +33,10 @@
{{- $url = .RelPermalink -}}
{{- end -}}
<a href="{{ $url }}"{{ with .Title | default .Name }} title="{{ . }}"{{ end }}{{ if (urls.Parse $url).Host }} rel="noopener noreferrer" target="_blank"{{ end }}>
{{- dict "Src" $avatar "Alt" $.Site.Params.author.name "Width" 96 "Height" 96 | partial "plugin/image.html" -}}
{{- dict "Src" $avatar "Alt" "Home avatar" "Width" 96 "Height" 96 "OptimConfig" $optim | partial "plugin/image.html" -}}
</a>
{{- else -}}
{{- dict "Src" $avatar "Alt" $.Site.Params.author.name "Width" 96 "Height" 96 | partial "plugin/image.html" -}}
{{- dict "Src" $avatar "Alt" "Home avatar" "Width" 96 "Height" 96 "OptimConfig" $optim | partial "plugin/image.html" -}}
{{- end -}}
</div>
{{- end -}}
+3 -2
View File
@@ -4,8 +4,9 @@
{{- $homeRelPermalink = strings.TrimSuffix "offline/" $homeRelPermalink -}}
{{- .Scratch.Set "homeRelPermalink" $homeRelPermalink -}}
{{- /* Set pages of main section */ -}}
{{- $pages := where .Site.RegularPages "Type" "posts" -}}
{{- /* Set pages of main sections */ -}}
{{- $pages := where .Site.RegularPages "Section" "in" .Site.MainSections -}}
{{- $pages = $pages | union (where .Site.RegularPages "Type" "in" .Site.MainSections) -}}
{{- .Scratch.Set "mainSectionPages" $pages -}}
{{- /* Select the scope named `public_repo` to generate personal access token */ -}}
+1 -1
View File
@@ -1,4 +1,4 @@
{{- .Scratch.Set "version" "v0.3.14" -}}
{{- .Scratch.Set "version" "v0.3.20" -}}
{{- .Scratch.Set "this" dict -}}
{{- partial "init/detection-env.html" . -}}
+1 -1
View File
@@ -24,7 +24,7 @@
{{- else }}
{{- $attrs = printf "class=%q %s" (printf "alert alert-%s" $.Type) $attrs }}
{{- end }}
{{- $attrs = trim $attrs " " -}}
{{- $attrs = partial "function/trim.html" $attrs -}}
<div {{ $attrs | safeHTMLAttr }}>
{{- $icon := index $iconMap .Type -}}
+43
View File
@@ -19,4 +19,47 @@
</script>
{{- dict "Source" ($analytics.fathom.server | default "cdn.usefathom.com" | printf "https://%v/tracker.js") "Async" true "Attr" "id=fathom-script" | partial "plugin/script.html" -}}
{{- end -}}
{{- /* Baidu Analytics */ -}}
{{- with $analytics.baidu.id -}}
<script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?{{ . }}";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
{{- end -}}
{{- /* Umami Analytics */ -}}
{{- with $analytics.umami.data_website_id -}}
<script async defer data-website-id="{{ . }}" src="{{ $analytics.umami.src }}" {{ with $analytics.umami.data_host_url }} data-host-url="{{ . }}" {{ end }} {{ with $analytics.umami.data_domains }} data-domains="{{ . }}" {{ end }}></script>
{{- end -}}
{{- /* Plausible Analytics */ -}}
{{- with $analytics.plausible.data_domain -}}
<script async defer data-domain="{{ . }}" src="{{ $analytics.plausible.src }}"></script>
{{- end -}}
{{- /* Cloudflare Analytics */ -}}
{{- with $analytics.cloudflare.token -}}
<script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "{{ $analytics.cloudflare.token }}"}'></script>
{{- end -}}
{{- /* Splitbee Analytics */ -}}
{{- if $analytics.splitbee.enable -}}
{{- $attr := "" -}}
{{- if $analytics.splitbee.do_not_track -}}
{{- $attr = printf `%v data-respect-dnt` $attr -}}
{{- end -}}
{{- if $analytics.splitbee.no_cookie -}}
{{- $attr = printf `%v data-no-cookie` $attr -}}
{{- end -}}
{{- with $analytics.splitbee.data_token -}}
{{- $attr = printf `%v data-token="%v"` $attr . -}}
{{- end -}}
<script defer {{ with $attr }} {{ . | safeHTMLAttr }} {{ end }} src="https://cdn.splitbee.io/sb.js"></script>
{{- end -}}
{{- end -}}
+1 -1
View File
@@ -11,7 +11,7 @@
{{- end -}}
{{- end -}}
{{- with $features | uniq -}}
{{- delimit . "%2C" | printf "https://polyfill.io/v3/polyfill.min.js?features=%v" | dict "Source" | dict "Scratch" $.Scratch "Data" | partial "scratch/script.html" -}}
{{- delimit . "%2C" | printf "https://cdnjs.cloudflare.com/polyfill/v3/polyfill.js?features=%v" | dict "Source" | dict "Scratch" $.Scratch "Data" | partial "scratch/script.html" -}}
{{- end -}}
{{- end -}}
+35 -2
View File
@@ -1,7 +1,40 @@
{{- /* Echarts support for code fences extended and shortcodes. */ -}}
{{- $width := .Options.width | default "100%" -}}
{{- $height := .Options.height | default "30rem" -}}
{{- $js := .Options.js | default false -}}
{{- $async := .Options.async | default false -}}
{{- $data := .Options.data -}}
{{- $file := .Options.file -}}
{{- $attrs := printf `style="width: %v; height: %v;"` $width $height -}}
<div class="echarts" {{ $attrs | safeHTMLAttr }}></div>
<template>{{ .Inner | transform.Unmarshal | jsonify }}</template>
{{- /* EOF */ -}}
{{- $content := strings.TrimSpace .Inner -}}
{{- if $js | or (hasSuffix $file ".js") -}}
{{- with dict "Path" $file "Resources" .Resources | partial "function/resource.html" }}
{{- $content = .Content -}}
{{- end }}
{{- if hugo.IsProduction -}}
{{- $content = replaceRE `[\s]+` " " $content -}}
{{- end -}}
{{- if not $content -}}
{{- warnf "ECharts: JS Code is empty, executing in file %s" $.Position -}}
{{- end -}}
<template data-fmt="js" data-async="{{ $async }}">{{ $content | safeJS }}</template>
{{- else -}}
{{ with $data }}
{{- $content = index site.Data.echarts (printf "%v.%v" . page.Language) | default (index site.Data.echarts .) -}}
{{- if not $content -}}
{{- warnf "ECharts: data not found, please ensure the data file \"data/echarts/%s.{json|yml|yaml|toml}\" exists." . -}}
{{- end -}}
{{- else -}}
{{- with dict "Path" $file "Resources" .Resources | partial "function/resource.html" }}
{{- $content = .Content -}}
{{- else with $file -}}
{{- warnf "ECharts: no such data file: %s" . -}}
{{- end -}}
{{- $content = $content | transform.Unmarshal -}}
{{- end -}}
{{- if not $content -}}
{{- warnf "ECharts: option is empty, executing in file %s" $.Position -}}
{{- end -}}
<template>{{ $content | jsonify }}</template>
{{- end -}}
+111
View File
@@ -0,0 +1,111 @@
{{- warnf "Deprecated image-legacy.html and will be removed in the next minor release, please use image.html instead." -}}
{{- $params := partial "function/params.html" -}}
{{- $class := .Class | default "" -}}
{{- $style := "" -}}
{{- $loading := .Loading | default "lazy" -}}
{{- $onload := "" -}}
{{- $onerror := "" -}}
{{- $cacheRemoteImages := $params.cacheRemoteImages -}}
{{- $suffixList := slice ".jpeg" ".jpg" ".png" ".gif" ".bmp" ".tif" ".tiff" ".webp" -}}
{{- $responsive := .Responsive -}}
{{- if hasPrefix .Src "data:image" -}}
{{- $responsive = false -}}
{{- end -}}
{{- /* handle for default size image */ -}}
{{- $src := .Src -}}
{{- $suffixValid := dict "Path" $src "Suffixes" $suffixList | partial "function/suffix-validation.html" -}}
{{- with dict "Path" $src "Resources" .Resources "CacheRemoteImages" $cacheRemoteImages.enable | partial "function/resource.html" -}}
{{- $url := urls.Parse $src -}}
{{- if not $url.Host | or $cacheRemoteImages.replace -}}
{{- $src = .RelPermalink -}}
{{- end -}}
{{- /* only available for image resources that are raster images */ -}}
{{- if (eq .ResourceType "image") | and $suffixValid | and $responsive -}}
{{- $style = printf "--width: %vpx;--aspect-ratio: %v / %v;" .Width .Width .Height | safeHTMLAttr -}}
{{- end -}}
{{- end -}}
{{- $srcSmall := .SrcSmall | default $src -}}
{{- $srcMedium := $src -}}
{{- $srcLarge := .SrcLarge | default $src -}}
{{- if $responsive }}
{{- /* handle for small size image */ -}}
{{- $suffixValidSmall := dict "Path" $srcSmall "Suffixes" $suffixList | partial "function/suffix-validation.html" -}}
{{- with dict "Path" .SrcSmall "Resources" .Resources "CacheRemoteImages" $cacheRemoteImages.enable | partial "function/resource.html" -}}
{{- $url := urls.Parse $.SrcSmall -}}
{{- if not $url.Host | or $cacheRemoteImages.replace -}}
{{- $srcSmall = .RelPermalink -}}
{{- end -}}
{{- if (eq .ResourceType "image") | and $suffixValidSmall -}}
{{- $style = printf "%v--width-small: %vpx;--aspect-ratio-small: %v / %v;" $style .Width .Width .Height | safeHTMLAttr -}}
{{- end -}}
{{- end -}}
{{- /* handle for large size image */ -}}
{{- $suffixValidLarge := dict "Path" $srcLarge "Suffixes" $suffixList | partial "function/suffix-validation.html" -}}
{{- with dict "Path" .SrcLarge "Resources" .Resources "CacheRemoteImages" $cacheRemoteImages.enable | partial "function/resource.html" -}}
{{- $url := urls.Parse $.SrcLarge -}}
{{- if not $url.Host | or $cacheRemoteImages.replace -}}
{{- $srcLarge = .RelPermalink -}}
{{- end -}}
{{- if (eq .ResourceType "image") | and $suffixValidLarge -}}
{{- $style = printf "%v--width-large: %vpx;--aspect-ratio-large: %v / %v;" $style .Width .Width .Height | safeHTMLAttr -}}
{{- end -}}
{{- end -}}
{{- /* handle for invalid suffix */ -}}
{{- if not $suffixValid | and $src -}}
{{- $class = printf "%v suffix-invalid" $class -}}
{{- end -}}
{{- if not $suffixValidSmall | and $srcSmall -}}
{{- $class = printf "%v suffix-invalid__small" $class -}}
{{- end -}}
{{- if not $suffixValidLarge | and $srcLarge -}}
{{- $class = printf "%v suffix-invalid__large" $class -}}
{{- end -}}
{{- /* set image srcset */ -}}
{{- if (eq $src $srcSmall) | and (eq $src $srcLarge) -}}
{{- $srcSmall = printf (cond (strings.Contains $srcSmall "?") "%v&size=small" "%v?size=small") $srcSmall -}}
{{- $srcMedium = printf (cond (strings.Contains $srcMedium "?") "%v&size=medium" "%v?size=medium") $srcMedium -}}
{{- $srcLarge = printf (cond (strings.Contains $srcLarge "?") "%v&size=large" "%v?size=large") $srcLarge -}}
{{- end -}}
{{- end -}}
{{- /* set image alt and caption */ -}}
{{- $alt := .Alt | default $src -}}
{{- $caption := .Caption | default $alt -}}
{{- /* set image lazy loading */ -}}
{{- /* for details, see https://lruihao.cn/posts/native-img-loading-lazy/ */ -}}
{{- if eq $loading "lazy" -}}
{{- /* TODO move to theme.js */ -}}
{{- $commonScript := "this.title=this.dataset.title;for(const i of ['style', 'data-title','onerror','onload']){this.removeAttribute(i);}" -}}
{{- $onload = printf " onload=\"%vthis.dataset.lazyloaded='';\"" $commonScript | safeHTMLAttr -}}
{{- $onerror = printf " onerror=\"%v\"" $commonScript | safeHTMLAttr -}}
{{- $style = printf " style=\"%vbackground: url(%v) no-repeat center;\"" $style (resources.Get "images/loading.svg" | minify).RelPermalink | safeHTMLAttr -}}
{{- end -}}
{{- /* structure of lightgallery or img */ -}}
{{- if .Linked -}}
<a class="lightgallery" href="{{ $srcLarge | safeURL }}" data-thumbnail="{{ $srcSmall | safeURL }}"{{ with $caption }} data-sub-html="<h2>{{ . }}</h2>{{ with $.Title }}<p>{{ . }}</p>{{ end }}"{{ end }}{{ with .Rel }} rel="{{ . }}"{{ end }}>
{{- end -}}
<img loading="{{ $loading }}" src="{{ $src | safeURL }}" alt="{{ $alt }}"
{{- if $responsive }} srcset="{{ $srcSmall | safeURL }}, {{ $srcMedium | safeURL }} 1.5x, {{ $srcLarge | safeURL }} 2x"{{- end -}}
{{- if eq $loading "lazy" }} data-title="{{ .Title | default $alt }}"
{{- else }} title="{{ .Title | default $alt }}"{{- end -}}
{{- with .Width }} width="{{ . }}"{{- end -}}
{{- with .Height }} height="{{ . }}"{{- end -}}
{{- with $class }} class="{{ trim . " " }}"{{- end -}}
{{- with .Decoding }} decoding="{{ . }}"{{- end -}}
{{- with .Referrerpolicy }} referrerpolicy="{{ . }}"{{- end -}}
{{- with $style -}}{{ . }}{{- end -}}
{{- with $onload -}}{{ . }}{{- end -}}
{{- with $onerror -}}{{ . }}{{- end -}}
/>
{{- if .Linked -}}
</a>
{{- end -}}
+67 -92
View File
@@ -1,106 +1,81 @@
{{- /* TODO refactor */ -}}
{{- $params := partial "function/params.html" -}}
{{- $class := .Class | default "" -}}
{{- $style := "" -}}
{{- $loading := .Loading | default "lazy" -}}
{{- $onload := "" -}}
{{- $onerror := "" -}}
{{- $cacheRemoteImages := $params.cacheRemoteImages -}}
{{- $suffixList := slice ".jpeg" ".jpg" ".png" ".gif" ".bmp" ".tif" ".tiff" ".webp" -}}
{{- /*
The image plugin is a partial that handles image resources.
{{- /* handle for default size image */ -}}
{{- $src := .Src -}}
{{- $suffixValid := dict "Path" $src "Suffixes" $suffixList | partial "function/suffix-validation.html" -}}
{{- with dict "Path" $src "Resources" .Resources "CacheRemoteImages" $cacheRemoteImages.enable | partial "function/resource.html" -}}
{{- $url := urls.Parse $src -}}
{{- if not $url.Host | or $cacheRemoteImages.replace -}}
{{- $src = .RelPermalink -}}
{{- end -}}
{{- /* only available for image resources that are raster images */ -}}
{{- if (eq .ResourceType "image") | and $suffixValid | and $.Responsive -}}
{{- $style = printf "--width: %vpx;--aspect-ratio: %v / %v;" .Width .Width .Height | safeHTMLAttr -}}
Parameters:
- Src: The path to the image.
It can be a page resource (inside a page bundle) https://gohugo.io/methods/page/resources/
or a global resource (inside the assets directory) https://gohugo.io/functions/resources/get/
or a link to a remote resource, which can be cached if the site parameter is set https://gohugo.io/functions/resources/getremote/
- Resources: If the image is a page resource, this parameter is required. It is the .Resources of the page.
- OptimConfig: optimisation parameter, defined like
{{- $optim := slice
(dict "Process" "resize 800x Center webp q75" "descriptor" "800w")
(dict "Process" "resize 1200x Center webp q75" "descriptor" "1200w")
(dict "Process" "resize 1600x Center webp q75" "descriptor" "1600w")
-}}
See https://gohugo.io/content-management/image-processing/ for more information.
- Alt: alt text for the image. https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#alt
- Height: The intrinsic height of the image, in pixels. Must be an integer without a unit.
We try to generate this value automatically if possible. https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#height
- Width: The intrinsic width of the image, in pixels. Must be an integer without a unit.
We try to generate this value automatically if possible. https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#width
- Loading: Indicates how the browser should load the image: eager or lazy. https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#loading
- Optimise: Override the site parameter to optimise the image.
- CacheRemote: Override the site parameter to cache remote images.
Thanks @HEIGE-PCloud for the original code in the DoIt theme.
https://github.com/HEIGE-PCloud/DoIt/blob/main/layouts/partials/plugin/image.html
*/ -}}
{{- $isInline := strings.HasPrefix .Src "data:image" -}}
{{- $isRemote := urls.Parse .Src | partial "function/is-url-remote.html" -}}
{{- $resource := dict -}}
{{- if not $isRemote | and (not $isInline) -}}
{{- $resource = (.Resources.Get .Src) | default (resources.Get .Src) -}}
{{- end -}}
{{- $cacheRemote := .CacheRemote | default site.Params.image.cacheRemote | default false -}}
{{- $optimise := .Optimise | default site.Params.image.optimise | default false -}}
{{- if not $resource | and $cacheRemote -}}
{{- with partial "function/get-remote-image.html" (dict "Src" .Src) -}}
{{- $resource = . -}}
{{- end -}}
{{- end -}}
{{- $srcSmall := .SrcSmall | default $src -}}
{{- $srcMedium := $src -}}
{{- $srcLarge := .SrcLarge | default $src -}}
{{- if .Responsive }}
{{- /* handle for small size image */ -}}
{{- $suffixValidSmall := dict "Path" $srcSmall "Suffixes" $suffixList | partial "function/suffix-validation.html" -}}
{{- with dict "Path" .SrcSmall "Resources" .Resources "CacheRemoteImages" $cacheRemoteImages.enable | partial "function/resource.html" -}}
{{- $url := urls.Parse $.SrcSmall -}}
{{- if not $url.Host | or $cacheRemoteImages.replace -}}
{{- $srcSmall = .RelPermalink -}}
{{- end -}}
{{- if (eq .ResourceType "image") | and $suffixValidSmall -}}
{{- $style = printf "%v--width-small: %vpx;--aspect-ratio-small: %v / %v;" $style .Width .Width .Height | safeHTMLAttr -}}
{{- end -}}
{{- end -}}
{{- /* handle for large size image */ -}}
{{- $suffixValidLarge := dict "Path" $srcLarge "Suffixes" $suffixList | partial "function/suffix-validation.html" -}}
{{- with dict "Path" .SrcLarge "Resources" .Resources "CacheRemoteImages" $cacheRemoteImages.enable | partial "function/resource.html" -}}
{{- $url := urls.Parse $.SrcLarge -}}
{{- if not $url.Host | or $cacheRemoteImages.replace -}}
{{- $srcLarge = .RelPermalink -}}
{{- end -}}
{{- if (eq .ResourceType "image") | and $suffixValidLarge -}}
{{- $style = printf "%v--width-large: %vpx;--aspect-ratio-large: %v / %v;" $style .Width .Width .Height | safeHTMLAttr -}}
{{- end -}}
{{- end -}}
{{- /* handle for invalid suffix */ -}}
{{- if not $suffixValid | and $src -}}
{{- $class = printf "%v suffix-invalid" $class -}}
{{- end -}}
{{- if not $suffixValidSmall | and $srcSmall -}}
{{- $class = printf "%v suffix-invalid__small" $class -}}
{{- end -}}
{{- if not $suffixValidLarge | and $srcLarge -}}
{{- $class = printf "%v suffix-invalid__large" $class -}}
{{- end -}}
{{- /* set image srcset */ -}}
{{- if (eq $src $srcSmall) | and (eq $src $srcLarge) -}}
{{- $srcSmall = printf (cond (strings.Contains $srcSmall "?") "%v&size=small" "%v?size=small") $srcSmall -}}
{{- $srcMedium = printf (cond (strings.Contains $srcMedium "?") "%v&size=medium" "%v?size=medium") $srcMedium -}}
{{- $srcLarge = printf (cond (strings.Contains $srcLarge "?") "%v&size=large" "%v?size=large") $srcLarge -}}
{{- end -}}
{{- $isSvg := false -}}
{{- if $resource -}}
{{- $isSvg = (eq $resource.MediaType.SubType "svg") -}}
{{- end -}}
{{- /* set image alt and caption */ -}}
{{- $optim := .OptimConfig -}}
{{- $srcset := "" -}}
{{- if $optim | and $resource | and $optimise | and (not $isSvg) -}}
{{ $srcsetSlice := slice -}}
{{- range $optim -}}
{{- if .Process -}}
{{- $processed := $resource.Process .Process -}}
{{- $srcsetSlice = $srcsetSlice | append (printf "%s %s" $processed.RelPermalink .descriptor) -}}
{{- end -}}
{{- end -}}
{{- $srcset = delimit $srcsetSlice ", " -}}
{{- end -}}
{{- $src := $resource.RelPermalink | default .Src -}}
{{- $alt := .Alt | default $src -}}
{{- $caption := .Caption | default $alt -}}
{{- /* set image lazy loading */ -}}
{{- /* for details, see https://lruihao.cn/posts/native-img-loading-lazy/ */ -}}
{{- if eq $loading "lazy" -}}
{{- /* TODO move to theme.js */ -}}
{{- $commonScript := "this.title=this.dataset.title;for(const i of ['style', 'data-title','onerror','onload']){this.removeAttribute(i);}" -}}
{{- $onload = printf " onload=\"%vthis.dataset.lazyloaded='';\"" $commonScript | safeHTMLAttr -}}
{{- $onerror = printf " onerror=\"%v\"" $commonScript | safeHTMLAttr -}}
{{- $style = printf " style=\"%vbackground: url(%v) no-repeat center;\"" $style (resources.Get "images/loading.svg" | minify).RelPermalink | safeHTMLAttr -}}
{{- $height := .Height -}}
{{- $width := .Width -}}
{{- if not $isSvg -}}
{{- $height = $height | default $resource.Height | default "" -}}
{{- $width = $width | default $resource.Width | default "" -}}
{{- end -}}
{{- /* structure of lightgallery or img */ -}}
{{- if .Linked -}}
<a class="lightgallery" href="{{ $srcLarge | safeURL }}" data-thumbnail="{{ $srcSmall | safeURL }}"{{ with $caption }} data-sub-html="<h2>{{ . }}</h2>{{ with $.Title }}<p>{{ . }}</p>{{ end }}"{{ end }}{{ with .Rel }} rel="{{ . }}"{{ end }}>
<a class="lightgallery" href="{{ $src }}" title="{{ .Title | default $alt }}" data-thumbnail="{{ $src }}"{{ with $caption }} data-sub-html="<h2>{{ . }}</h2>{{ with $.Title }}<p>{{ . }}</p>{{ end }}"{{ end }}{{ with .Rel }} rel="{{ . }}"{{ end }}>
{{- end -}}
<img loading="{{ $loading }}" src="{{ $src | safeURL }}" alt="{{ $alt }}"
{{- if .Responsive }} srcset="{{ $srcSmall | safeURL }}, {{ $srcMedium | safeURL }} 1.5x, {{ $srcLarge | safeURL }} 2x"{{- end -}}
{{- if eq $loading "lazy" }} data-title="{{ .Title | default $alt }}"
{{- else }} title="{{ .Title | default $alt }}"{{- end -}}
{{- with .Width }} width="{{ . }}"{{- end -}}
{{- with .Height }} height="{{ . }}"{{- end -}}
{{- with $class }} class="{{ trim . " " }}"{{- end -}}
{{- with .Decoding }} decoding="{{ . }}"{{- end -}}
{{- with .Referrerpolicy }} referrerpolicy="{{ . }}"{{- end -}}
{{- with $style -}}{{ . }}{{- end -}}
{{- with $onload -}}{{ . }}{{- end -}}
{{- with $onerror -}}{{ . }}{{- end -}}
/>
<img {{- with .Class }} class="{{ . }}"{{ end }}{{ with .Loading }} loading="{{ . }}"{{ end }} {{ printf "src='%v'" $src | safeHTMLAttr }}{{ with $srcset }} srcset="{{ . }}"{{ end }}{{ with .Sizes }} sizes="{{ . }}"{{ end }}{{ with $alt }} alt="{{ . }}"{{ end }}{{ with $height }} height="{{ . }}"{{ end }}{{ with $width }} width="{{ . }}"{{ end }}{{ with .Decoding }} decoding="{{ . }}"{{ end }}{{ with .Referrerpolicy }} referrerpolicy="{{ . }}"{{ end }}>
{{- if .Linked -}}
</a>
</a>
{{- end -}}
+4 -5
View File
@@ -42,11 +42,10 @@
{{- end -}}
{{- else -}}
{{- $cardIcon := .CardIcon -}}
{{- if $url.Host | and (eq .CardIcon true) -}}
{{- $cardIcon = false -}}
{{- /* 实验性功能:中国大陆地区无法使用,如果你有更好的 API 或者方案,欢迎 PR! */ -}}
{{- $favicon := partial "function/get-remote-image.html" (dict "Path" (add "https://www.google.com/s2/favicons?sz=64&domain=" $url.Host) "Pass" true) -}}
{{- with $favicon -}}
{{- if (not $cardIcon) | and $url.Host -}}
{{- with partial "function/get-remote-image.html" (dict "Src" (add "https://favicon.im/" $url.Host)) -}}
{{- $cardIcon = .RelPermalink -}}
{{- else with partial "function/get-remote-image.html" (dict "Src" (add "https://api.lruihao.cn/google/s2/favicons?sz=64&domain=" $url.Host)) -}}
{{- $cardIcon = .RelPermalink -}}
{{- end -}}
{{- end -}}
+115
View File
@@ -0,0 +1,115 @@
{{- /*
PostChat AI service.
PostChat: https://postchat.zhheo.com/addCode.html
PostSummary: https://postchat.zhheo.com/summary.html
*/ -}}
{{- $params := .Params | merge .Site.Params -}}
{{- $chatConfig := $params.postChat -}}
{{- $summaryConfig := $params.postSummary -}}
{{- $key := $chatConfig.key | default $summaryConfig.key -}}
{{- $sourcePrefix := "https://ai.tianli0.top/static/public/" -}}
{{- $jsMap := dict
"chat" "postChatUser.min.js"
"summary" "tianli_gpt.min.js"
"both" "postChatUser_summary.min.js"
-}}
{{- /* PostSummary only for public posts */ -}}
{{- $password := .Params.password | default .Site.Params.page.password -}}
{{- $isPost := (eq .Kind "page") | and (eq .Type "posts") | and (not $password) -}}
{{- $summaryEnable := cond $isPost $summaryConfig.enable false -}}
{{- $enable := $chatConfig.enable | or $summaryEnable -}}
{{- if $enable | and $key -}}
{{- $configJS := "" -}}
{{- $fingerprint := .Scratch.Get "fingerprint" -}}
{{- $sourceOpts := dict "Fingerprint" $fingerprint "Defer" true -}}
{{- /* PostSummary */ -}}
{{- if $summaryEnable -}}
{{- $postChatCSS := "https://ai.tianli0.top/static/public/postChatUser_summary.min.css" -}}
{{- dict "Source" $postChatCSS "Fingerprint" $fingerprint | dict "Scratch" .Scratch "Data" | partial "scratch/style.html" -}}
{{- $p := "tianliGPT" -}}
{{- $postSummaryConfig := printf "let %v_postSelector='#content';" $p -}}
{{- with $summaryConfig.title -}}
{{- $postSummaryConfig = add $postSummaryConfig (printf "let %v_Title='%v';" $p .) -}}
{{- end -}}
{{- with $summaryConfig.theme -}}
{{- $postSummaryConfig = add $postSummaryConfig (printf "let %v_theme='%v';" $p .) -}}
{{- end -}}
{{- with $summaryConfig.postURL -}}
{{- $postSummaryConfig = add $postSummaryConfig (printf "let %v_postURL='%v';" $p .) -}}
{{- end -}}
{{- with $summaryConfig.blacklist -}}
{{- $postSummaryConfig = add $postSummaryConfig (printf "let %v_blacklist='%v';" $p .) -}}
{{- end -}}
{{- with $summaryConfig.wordLimit -}}
{{- $postSummaryConfig = add $postSummaryConfig (printf "let %v_wordLimit=%d;" $p .) -}}
{{- end -}}
{{- if eq $summaryConfig.typingAnimate false -}}
{{- $postSummaryConfig = add $postSummaryConfig (printf "let %v_typingAnimate=false;" $p) -}}
{{- end -}}
{{- with $summaryConfig.beginningText -}}
{{- $postSummaryConfig = add $postSummaryConfig (printf "let %v_BeginningText='%v';" $p .) -}}
{{- end -}}
{{- with eq $summaryConfig.loadingText false -}}
{{- $postSummaryConfig = add $postSummaryConfig (printf "let %v_loadingText=false;" $p) -}}
{{- end -}}
{{- if $chatConfig.enable -}}
{{- $postSummaryConfig = add $postSummaryConfig (printf "let %v_recommendation=true;" $p) -}}
{{- else -}}
{{- $postSummaryConfig = add $postSummaryConfig (printf "let %v_key='%v';" $p $key) -}}
{{- end -}}
{{- $configJS = add $configJS $postSummaryConfig -}}
{{- end -}}
{{- /* PostChat */ -}}
{{- if $chatConfig.enable -}}
{{- $sourceOpts = dict "Attr" (printf "data-postChat_key=%q" $key) | merge $sourceOpts -}}
{{- $blackDom := slice
".expiration-reminder"
"meting-js"
".lnt"
-}}
{{- with $chatConfig.blackDom -}}
{{- $blackDom = $blackDom | append . -}}
{{- end -}}
{{- $upLoadWeb := cond (.IsHome | or $password | or (eq .Kind "404")) false $chatConfig.upLoadWeb -}}
{{- $postChatConfig := dict
"userMode" $chatConfig.userMode
"defaultInput" $chatConfig.defaultInput
"left" $chatConfig.left
"bottom" $chatConfig.bottom
"width" $chatConfig.width
"height" $chatConfig.height
"fill" $chatConfig.fill
"backgroundColor" $chatConfig.backgroundColor
"upLoadWeb" $upLoadWeb
"showInviteLink" $chatConfig.showInviteLink
"userTitle" $chatConfig.userTitle
"userDesc" $chatConfig.userDesc
"addButton" $chatConfig.addButton
"blackDom" $blackDom
"frameWidth" $chatConfig.frameWidth
"frameHeight" $chatConfig.frameHeight
"userIcon" $chatConfig.userIcon
"defaultChatQuestions" $chatConfig.defaultChatQuestions
"defaultSearchQuestions" $chatConfig.defaultSearchQuestions
-}}
{{- $configJS = add $configJS ($postChatConfig | jsonify | printf "var postChatConfig=%s") -}}
{{- end -}}
{{- /* Insert config */ -}}
{{- $configJS | dict "Content" | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- /* Insert script */ -}}
{{- $postChatJS := "" -}}
{{- if $chatConfig.enable | and $summaryEnable -}}
{{- $postChatJS = add $sourcePrefix (index $jsMap "both") -}}
{{- else if $chatConfig.enable -}}
{{- $postChatJS = add $sourcePrefix (index $jsMap "chat") -}}
{{- else if $summaryEnable -}}
{{- $postChatJS = add $sourcePrefix (index $jsMap "summary") -}}
{{- end -}}
{{- $sourceOpts = dict "Source" $postChatJS | merge $sourceOpts -}}
{{- $sourceOpts | dict "Scratch" $.Scratch "Data" | partial "scratch/script.html" -}}
{{- end -}}

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