Compare commits

...

187 Commits

Author SHA1 Message Date
Cell 193fd1933d 🔖 Chore(release): 0.4.0-alpha 2025-07-04 11:43:19 +08:00
Cell c9a3a6f899 ⬆️ Chore(deps-dev): bump @hugo-fixit/fixit-releaser from 1.2.2 to 1.2.3 2025-07-04 11:42:53 +08:00
Cell c9e01dd090 ⬆️ Chore(deps-dev): bump @hugo-fixit/fixit-releaser from 1.2.0 to 1.2.2 2025-07-03 17:34:42 +08:00
Cell 9293ee27f3 💥 BREAKING CHANGE: rename directory layouts/_partials/scratch to layouts/_partials/store 2025-07-03 17:31:22 +08:00
Cell 92d0a857c1 🔧 Chore(i): add conditional check for repository in component list generation workflow 2025-07-03 14:33:37 +08:00
Cell 3e8bdfd8f9 ♻️ Refactor: global/site/page scope state management (#610)
*  Perf: adjust global/site scope state management

*  Perf: adjust page scope state management
2025-07-03 12:48:32 +08:00
Cell d9043280fe 📝 Docs: update README to include MathJax support for mathematical formulas 2025-06-30 14:50:47 +08:00
Cell 3408f1596a 💄 Style: add MathJax overflow styles 2025-06-30 14:15:40 +08:00
Cell 89f9373bae ⬆️ Chore: update Hugo version to 0.147.7 in configuration files 2025-06-30 13:46:12 +08:00
Cell fb4f1f7389 ⬆️ Chore: update @hugo-fixit/fixit-releaser to version 1.2.0 2025-06-30 13:45:34 +08:00
Cell 0ce74d82f8 ♻️ Refactor: mathematical formula render (#609)
*  Feat: add support for math passthrough render hook

*  Feat: enable copy-tex extension for KaTeX server-side render

*  Feat: enhance mathematical rendering support with KaTeX and MathJax configurations

*  Feat: add KaTeX error handling and custom macros map config

*  Feat: add MathJax client-side rendering as an alternative math engine

*  Feat: update MathJax CDN configuration and enhance asset loading parameters

* 🔥 Feat: remove unused KaTeX math rendering scripts and update KaTex

*  Feat: make \KaTeX command work in MathJax

*  Feat: update KaTeX CDN links for Twikoo integration

*  Perf: Math in content encryption

* 🐛 Fix: update class name from 'fi-row' to 'fi-raw' in raw.html shortcode

* 🐛 Fix: correct MathJax math delimiters in load-mathjax.js

*  Feat: enhance MathJax configuration with additional tex parameters and update asset handling

* 🐛 Fix: adjust KaTeX display overflow behavior
2025-06-30 12:58:48 +08:00
Cell a5614505bc ♻️ Refactor: add underscore to partials and shortcodes directory names (#608) 2025-06-19 12:29:30 +08:00
Cell 6123eaac2c ♻️ Refactor: move all files in layouts/_default up to the layouts/ root (#607)
The `_default` folder is removed.
2025-06-19 11:51:52 +08:00
Cell ad092e7f72 💄 Style: fix gist and code block style
fixes 7788eded
2025-06-12 14:53:26 +08:00
Cell b2e6f70a81 ⬆️ Chore(libs): update Twikoo from 1.6.22 to 1.6.44 (#606) 2025-06-12 11:33:20 +08:00
Cell c4a1c79972 Feat: update PostChat AI link and add hotwords feature support 2025-06-05 15:05:53 +08:00
dependabot[bot] 87ca54d024 ⬆️ Chore(deps-dev): bump @hugo-fixit/fixit-releaser from 1.1.5 to 1.1.6 (#605)
Bumps [@hugo-fixit/fixit-releaser](https://github.com/hugo-fixit/fixit-releaser) from 1.1.5 to 1.1.6.
- [Release notes](https://github.com/hugo-fixit/fixit-releaser/releases)
- [Commits](https://github.com/hugo-fixit/fixit-releaser/compare/v1.1.5...v1.1.6)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Cell <1024@lruihao.cn>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-04 14:02:12 +08:00
Cell cfe1d7a601 💄 Style: fix heading mark style of details element inner 2025-05-25 22:08:12 +08:00
ych817 7788eded58 💄 Style: update code element style for headings and toc items 2025-05-25 22:04:41 +08:00
Lruihao 6a1ed440df 📝 Docs: update hugo-fixit component list 2025-05-21 11:00:42 +08:00
Cell 5b0a27125c 🔧 Feat(workflow): replace auto commit with pull request in actions 2025-05-21 10:46:44 +08:00
Cell 2cb4bb2966 🐛 Fix: invalid Mastodon configuration and icon function param error (#601)
* 🐛 Fix: parameter case exception in icon function

* 🐛 Fix: invalid Mastodon configuration
2025-05-09 11:51:49 +08:00
Cell 74f999995f 🐛 Fix(func): trim suffix zero in format-number function 2025-05-08 17:34:04 +08:00
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
Cell fd15415b9a 🔖 Chore(release): 0.3.14 2024-11-05 13:56:45 +08:00
Cell ec0663668e ♻️ Refactor: refactor reading progress with css animation 2024-11-05 11:50:16 +08:00
Cell 712cf2a868 🎉 Feat: add more type marked text support 2024-11-04 12:52:19 +08:00
Cell 41014f7f5b 🐛 Fix: pangu adds extra spaces for extended Markdown syntax fraction in Chinese 2024-11-03 00:28:29 +08:00
Cell 85d91b8527 Merge pull request #533 from hugo-fixit/feat/task-lists
🎉 Feat: support Obsidian style task lists

Closes #532
2024-11-02 12:17:13 +08:00
Cell 3a5d0dee65 🚧 Docs: fix typo 2024-11-01 18:01:06 +08:00
Cell f98ca2197a 🚧 WIP: modify translations for task lists 2024-11-01 17:29:56 +08:00
Cell db77d49afb 🚧 WIP: add params.taskList to support custom task lists 2024-11-01 15:45:01 +08:00
Cell 4df8fd023e 🚧 WIP: add translations task lists 2024-11-01 15:02:37 +08:00
Cell 8fa3538725 🚧 WIP: add six extended formats to the task lists 2024-11-01 15:02:01 +08:00
Cell 867984fda2 🎉 Feat: support Obsidian style task lists 2024-11-01 11:12:30 +08:00
Cell 8d10880b35 Feat: menu link support empty url
Close #531
2024-10-31 14:39:08 +08:00
Cell 894c512b1d 🐛 Fix: solve the problem that navigator.clipboard is unavailable under http 2024-10-29 11:31:18 +08:00
Cell 64f954ccf7 Feat: update mermaid to 11.3.0 to support more diagrams 2024-10-25 14:12:40 +08:00
Cell c08671dedf 🐛 Fix: RSS rendering issues caused by XML escape
Co-authored-by: Cell <1024@lruihao.cn>
Co-authored-by: Tim <yangzair@outlook.com>
2024-10-24 15:27:39 +08:00
Cell 28759d5020 💄 Style: update summary style at home page 2024-10-13 17:08:44 +08:00
Cell 0c0fb03a8d 🔖 Chore(release): 0.3.13 2024-10-13 16:04:51 +08:00
Cell 39ccc51610 Chore: code optimization 2024-10-13 12:27:22 +08:00
Cell 581466fd25 Feat: refactor summary and headings render, add summaryPlainify param and front matter
See http://fixit.lruihao.cn/documentation/content-management/introduction/#content-summaries
2024-10-12 17:59:07 +08:00
Cell 9471b94b09 📝 Docs: update README 2024-10-11 14:49:52 +08:00
Cell c974c905e5 Feat: add recently updated pages support for archives, section and term list
and remove recentlyUpdated.rss
2024-10-11 13:57:07 +08:00
Cell 3edabbef89 Feat: optionally exclude content from sitemap 2024-10-11 10:36:10 +08:00
Cell f738e4a926 Merge pull request #519 from hugo-fixit/obsidian-callouts
🎉 Feat: support extended alert syntax compatible with Obsidian Callouts

min hugo version 0.134.1
2024-10-10 10:57:01 +08:00
Cell 12cc5f7e60 Feat: add custom admonitions support
hugo 0.134.1
2024-10-10 10:06:22 +08:00
Cell 39a48f35f0 Perf: if .AlertType not in basic types, rendering to extended alert syntax 2024-10-09 11:13:11 +08:00
Cell f7670a714b 🐛 Fix(ignore): resolves Hugo lost closing tag in .AlertTitle 2024-10-09 10:42:37 +08:00
Cell cf71f1e289 ⬆️ Chore: update min hugo version to 0.134.0 2024-10-08 16:08:20 +08:00
Cell bd40c85586 🎉 Feat: support alert foldable title for blockquote compatible with Obsidian Callouts
refactor admonition shortcode: add todo type and aliases type
change min hugo version: 0.134.0
2024-10-08 15:12:01 +08:00
Cell 19ceeb2e99 💄 Style: update footnotes style 2024-10-06 11:57:41 +08:00
Cell 95436c11ac Feat: add HTML&MD render for single subtitle 2024-10-04 01:40:54 +08:00
dependabot[bot] b66fd37057 chore(deps-dev): bump husky from 9.1.5 to 9.1.6
Bumps [husky](https://github.com/typicode/husky) from 9.1.5 to 9.1.6.
- [Release notes](https://github.com/typicode/husky/releases)
- [Commits](https://github.com/typicode/husky/compare/v9.1.5...v9.1.6)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-02 13:07:21 +08:00
Cell 58cfa55e65 🐛 Fix: toc data patch 2024-10-02 13:04:00 +08:00
Cell 9c440df3d0 Feat: add param.capitalizeTitles, default is true 2024-10-02 01:54:19 +08:00
Cell 53f221b77a 💄 Style: change summary content style since hugo 0.134.0 2024-10-01 21:19:07 +08:00
Cell 729c2c394a Merge pull request #511 from Xm798/dev
 Feat: Add Follow site challenge support in RSS feed
2024-10-01 21:15:19 +08:00
Xm798 566a87c791 Feat: Add Follow site challenge support in RSS feed 2024-10-01 21:12:14 +08:00
Cell e9edbba217 Feat: add params.sourceURL and params.editURL for special pages 2024-10-01 19:50:42 +08:00
Cell 9e9bc9effd Feat(ignore): add data-adapters attribute
It is helpful to identify whether the content originated from a content adapters.
2024-10-01 18:10:48 +08:00
Cell b44555d403 🐛 Fix: don's show emtpy toc 2024-10-01 16:12:26 +08:00
Cell ed8cf316a5 Feat: add separator and capitalize options for breadcrumb config 2024-10-01 14:59:29 +08:00
233 changed files with 3639 additions and 1924 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,40 @@
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
pull-requests: write # To create a pull request
jobs:
generate-component-list:
if: github.repository == 'hugo-fixit/FixIt'
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>'
- name: Create Pull Request
uses: peter-evans/create-pull-request@v7
with:
title: 'Update hugo-fixit component list'
commit-message: ':memo: Docs: update hugo-fixit component list'
body: 'This PR updates the hugo-fixit component list in the README.'
base: main
branch: update-component-list
labels: documentation
reviewers: Lruihao
+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
+109 -31
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.132.0-ff4088?style=flat&logo=hugo)](https://gohugo.io/)
[![Hugo](https://img.shields.io/badge/Hugo-%5E0.147.7-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,16 +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 -->
## 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
@@ -94,11 +131,13 @@ Click the following links to generate a new repository with template:
### Extended Features
- **AI Summary**, **AI Search** and **AI Chatbot** supported by [PostChat](https://ai.zhheo.com/console/login?InviteID=85041330)
- **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.zhheo.com/console/login?InviteID=85041330)
- **Custom Search Engine (CSE)** supported by [Google](https://programmablesearchengine.google.com/)
- **Twemoji** supported
- Automatically **highlighting** code
- **Copy code** to clipboard with one click
@@ -106,7 +145,7 @@ Click the following links to generate a new repository with template:
- Extended Markdown syntax for **[Font Awesome](https://fontawesome.com/) icons**
- Extended Markdown syntax for **ruby annotation**
- Extended Markdown syntax for **fraction**
- **Mathematical formula** supported by [KaTeX](https://katex.org/)
- **Mathematical formula** supported by [KaTeX](https://katex.org/) or [MathJax](https://www.mathjax.org)
- **Diagrams** code fences extended and shortcode supported by [mermaid](https://github.com/knsv/mermaid)
- **Interactive data visualization** shortcode and code fences extended supported by [ECharts](https://echarts.apache.org/)
- **Timeline** code fences extended and shortcode supported
@@ -124,13 +163,14 @@ Click the following links to generate a new repository with template:
- 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
@@ -146,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)\
🐟 A canvas implemented animation effect of small fish swimming.
- [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)\
A Hugo theme component with caniuse shortcode.
- [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
@@ -161,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
@@ -172,7 +245,7 @@ Don't forget to leave a ⭐️ if you like this theme, thanks!
## Contributing
We welcome you to join the development of FixIt. Please see [contributing document](CONTRIBUTING.md). 🤗
We welcome you to join the development of FixIt. Please see [contributing document](/CONTRIBUTING.md). 🤗
Also, we welcome Issue or PR to our [official-components](https://github.com/hugo-fixit).
@@ -200,6 +273,7 @@ Thanks to all the [contributors](https://github.com/hugo-fixit/FixIt/graphs/cont
- [Sharer.js](https://github.com/ellisonleao/sharer.js)
- [TypeIt](https://typeitjs.com/)
- [KaTeX](https://katex.org/)
- [MathJax](https://www.mathjax.org)
- [mermaid](https://github.com/mermaid-js/mermaid)
- [ECharts](https://echarts.apache.org/)
- [Mapbox GL JS](https://docs.mapbox.com/mapbox-gl-js)
@@ -233,16 +307,20 @@ Thanks to all the [contributors](https://github.com/hugo-fixit/FixIt/graphs/cont
## License
FixIt is licensed under the **MIT** license. Check the [LICENSE file](LICENSE) for details.
FixIt is licensed under the **MIT** license. Check the [LICENSE file](/LICENSE) for details.
## Sponsor
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")
+111 -33
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.132.0-ff4088?style=flat&logo=hugo)](https://gohugo.io/)
[![Hugo](https://img.shields.io/badge/Hugo-%5E0.147.7-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,9 +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
@@ -61,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**
@@ -94,11 +135,13 @@
### 扩展功能
- 支持基于 [PostChat](https://ai.zhheo.com/console/login?InviteID=85041330) 的 **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.zhheo.com/console/login?InviteID=85041330) 的**搜索**
- 支持基于 [Google](https://programmablesearchengine.google.com/) 的**自定义搜索引擎 (CSE)**
- 支持 **Twemoji**
- 支持**代码高亮**
- 一键**复制代码**到剪贴板
@@ -106,7 +149,7 @@
- 支持 **[Font Awesome](https://fontawesome.com/) 图标**的扩展 Markdown 语法
- 支持**上标注释**的扩展 Markdown 语法
- 支持**分数**的扩展 Markdown 语法
- 支持基于 [KaTeX](https://katex.org/) 的**数学公式**
- 支持基于 [KaTeX](https://katex.org/) 或 [MathJax](https://www.mathjax.org) 的**数学公式**
- 支持基于 [mermaid](https://github.com/knsv/mermaid) 的**图表** 代码块扩展语法和 shortcode
- 支持基于 [ECharts](https://echarts.apache.org/) 的**交互式数据可视化** 代码块扩展语法和 shortcode
- 支持 **Timeline** 的代码块扩展语法和 shortcode
@@ -124,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>
- 英语
- 简体中文
@@ -146,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)\
🐟 A canvas implemented animation effect of small fish swimming.
- [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)\
A Hugo theme component with caniuse shortcode.
- [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>
## 社区支持
@@ -165,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
@@ -176,7 +249,7 @@ Gitee 镜像仓库:<https://gitee.com/lruihao/FixIt>
## 参与贡献
我们欢迎你加入 FixIt 的开发,贡献出你的一份力量。请看开源 [贡献指南](CONTRIBUTING.md)。 🤗
我们欢迎你加入 FixIt 的开发,贡献出你的一份力量。请看开源 [贡献指南](/CONTRIBUTING.md)。 🤗
你也可以随时向我们的 [官方插件](https://github.com/hugo-fixit) 提交 Issue 或 Pull Request。
@@ -204,6 +277,7 @@ Gitee 镜像仓库:<https://gitee.com/lruihao/FixIt>
- [Sharer.js](https://github.com/ellisonleao/sharer.js)
- [TypeIt](https://typeitjs.com/)
- [KaTeX](https://katex.org/)
- [MathJax](https://www.mathjax.org)
- [mermaid](https://github.com/mermaid-js/mermaid)
- [ECharts](https://echarts.apache.org/)
- [Mapbox GL JS](https://docs.mapbox.com/mapbox-gl-js)
@@ -237,16 +311,20 @@ Gitee 镜像仓库:<https://gitee.com/lruihao/FixIt>
## 许可协议
FixIt 根据 **MIT** 许可协议授权。更多信息请查看 [LICENSE 文件](LICENSE)。
FixIt 根据 **MIT** 许可协议授权。更多信息请查看 [LICENSE 文件](/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 }}
---
+27
View File
@@ -54,6 +54,33 @@ abbr[title] {
text-decoration-skip-ink: none;
}
img {
object-fit: cover;
}
img,video {
max-width: 100%;
height: auto;
}
%code {
padding: 0.2em 0.4em;
margin: 0;
font-size: $code-font-size;
font-family: $code-font-family;
color: $code-color;
background-color: rgba(175, 184, 193, 0.2);
text-decoration: inherit;
@include border-radius($global-border-radius);
@include overflow-wrap(break-word);
@include line-break(auto);
[data-theme='dark'] & {
color: $code-color-dark;
background-color: rgba(99, 110, 123, 0.4);
}
}
@include link(true, true);
@import '../_partials/scrollbar';
+2 -2
View File
@@ -30,8 +30,8 @@
.breadcrumb-item {
display: flex;
+.breadcrumb-item::before {
content: "/";
+ .breadcrumb-item::before {
content: attr(data-separator);
display: inline-block;
padding-inline: 0.5rem;
color: $global-font-secondary-color;
+9 -6
View File
@@ -98,6 +98,10 @@ header {
}
}
.menu-link[href="javascript:void(0);"] {
color: inherit;
}
.menu-link i {
@include transform(perspective(1rem));
@include transition(transform 0.4s ease);
@@ -114,7 +118,7 @@ header {
}
}
.search {
.menu .search {
position: relative;
input {
@@ -275,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));
@@ -380,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));
}
@@ -508,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;
+10 -2
View File
@@ -1,7 +1,11 @@
:root {
// Note: Custom variable values only support SassScript inside `#{}`.
// TODO migrate SCSS variables to CSS variables
// Theme colors varibles
--#{$prefix}global-font-color: #{$global-font-color};
--#{$prefix}global-border-color: #{$global-border-color};
// Theme colors variables
@each $color, $value in $theme-colors {
--#{$prefix}#{$color}: #{$value};
}
@@ -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};
@@ -26,6 +31,9 @@
// 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 -37
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/
@@ -124,39 +132,13 @@
}
.content {
@include box(vertical);
-webkit-line-clamp: 3;
margin-top: 0.3rem;
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
@include overflow-wrap(break-word);
color: $global-font-secondary-color;
[data-theme='dark'] & {
color: $global-font-secondary-color-dark;
}
h2,
h3,
h4,
h5,
h6,
p {
font-size: 1rem;
line-height: 1.5;
display: inline;
&::after {
content: '\A';
white-space: pre;
}
}
h2 {
font-size: 1.125rem;
}
@include link(false, true);
b,
@@ -170,7 +152,7 @@
}
.post-footer {
margin-top: 0.4rem;
margin-block: 0.4rem 0;
display: flex;
justify-content: space-between;
align-items: center;
@@ -182,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';
+89 -47
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 {
@@ -27,10 +28,10 @@
}
.single-subtitle {
margin: 0.5rem 0;
margin-block: 0 0.5rem;
font-size: 1.2rem;
font-weight: normal;
line-height: 100%;
line-height: 1.15;
}
.post-meta {
@@ -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;
@@ -155,7 +155,7 @@
font-size: 0.85em;
}
> .heading-element {
.heading-element {
display: flex;
font-weight: bold;
line-height: 1.25;
@@ -166,11 +166,6 @@
font-weight: bolder;
}
code {
padding: 0 .2em;
font-size: inherit;
}
&:hover,
&:target {
> .heading-mark {
@@ -230,6 +225,41 @@
ul {
list-style-type: disc;
// Task lists
li[data-task] {
list-style: none;
margin-left: -1.5rem;
}
}
// Task lists
li[data-task] {
color: var(--#{$prefix}task-color);
.checkbox-icon {
margin-right: 0.25em;
color: var(--#{$prefix}checkbox-color);
}
}
li[data-task='x'],
li[data-task='-'] {
--#{$prefix}task-color: var(--#{$prefix}secondary);
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);
}
li[data-task='!'] {
--#{$prefix}checkbox-color: var(--#{$prefix}danger);
}
li[data-task='?'] {
--#{$prefix}checkbox-color: var(--#{$prefix}warning);
}
dl {
@@ -257,7 +287,22 @@
}
}
mark {
padding: 0.14em 0.28em;
background-color: var(--#{$prefix}mark-background-color, mark);
color: var(--#{$prefix}mark-color, marktext);
@include border-radius($global-border-radius);
@each $color, $value in $theme-colors {
&.mark-#{$color} {
--#{$prefix}mark-color: #fff;
--#{$prefix}mark-background-color: var(--#{$prefix}#{$color});
}
}
}
.table-wrapper {
position: relative;
overflow-x: auto;
--#{$prefix}scrollbar-thumb-color: #{$table-background-color};
@@ -317,31 +362,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 {
@@ -370,6 +393,7 @@
img {
display: block;
margin: 0 auto;
height: auto;
overflow: hidden;
}
}
@@ -422,6 +446,16 @@
margin-block: 1em;
padding-left: 1rem;
}
hr {
background-color: var(--#{$prefix}hr-background-color);
height: 1px;
margin-block: 1em;
}
code {
font-size: 0.75rem;
}
a:not(.footnote-backref) {
color: inherit;
@@ -439,18 +473,6 @@
}
}
hr {
margin-block: 0;
}
.footnotes {
hr {
background-color: var(--#{$prefix}hr-background-color);
height: 1px;
margin-block: 1em;
}
}
kbd {
display: inline-block;
padding: 0 0.25rem;
@@ -470,6 +492,26 @@
}
}
// KaTeX styles
.katex-display {
max-width: 100%;
overflow-x: auto;
overflow-y: hidden;
}
.katex-error {
padding: 0.14em 0.28em;
background-color: mark;
cursor: help;
@include border-radius($global-border-radius);
}
// MathJax styles
mjx-container[jax='CHTML'][display='true'] {
max-width: 100%;
overflow-x: auto;
overflow-y: hidden;
}
@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;
+20 -14
View File
@@ -1,40 +1,46 @@
.details {
.details-summary {
> .details-summary {
@include border-radius($global-border-radius);
&:hover {
cursor: pointer;
}
}
i.details-icon {
color: $global-font-secondary-color;
@include transition(transform 0.2s ease);
i.details-icon {
color: $global-font-secondary-color;
@include transition(transform 0.2s ease);
[data-theme='dark'] & {
color: $global-font-secondary-color-dark;
[data-theme='dark'] & {
color: $global-font-secondary-color-dark;
}
}
}
.details-content {
> .details-content {
max-height: 0;
overflow-y: hidden;
@include details-transition-open;
}
&.open {
.details-summary {
> .details-summary {
@include border-radius($global-border-radius $global-border-radius 0 0);
i.details-icon {
@include transform(rotate(90deg));
}
}
i.details-icon {
@include transform(rotate(90deg));
}
.details-content {
> .details-content {
max-height: 100%;
@include border-radius(0 0 $global-border-radius $global-border-radius);
@include details-transition-close;
}
}
&.disabled {
> .details-summary {
cursor: default;
}
}
}
+55 -15
View File
@@ -1,15 +1,55 @@
// Color map of admonition [$type $color $background-color, ... ]
$admonition-color-map:
'note' #448aff rgba(68, 138, 255, 0.1),
'abstract' #00b0ff rgba(0, 176, 255, 0.1),
'info' #00b8d4 rgba(0, 184, 212, 0.1),
'tip' #00bfa5 rgba(0, 191, 165, 0.1),
'success' #00c853 rgba(0, 200, 83, 0.1),
'question' #64dd17 rgba(100, 221, 23, 0.1),
'warning' #ff9100 rgba(255, 145, 0, 0.1),
'failure' #ff5252 rgba(255, 82, 82, 0.1),
'danger' #ff1744 rgba(255, 23, 68, 0.1),
'bug' #f50057 rgba(245, 0, 87, 0.1),
'example' #651fff rgba(101, 31, 255, 0.1),
'quote' #9e9e9e rgba(159, 159, 159, 0.1)
!default;
// Color map of admonitions
$admonition-color-map: (
note: (
color: #448aff,
bg-color: rgba(68, 138, 255, 0.1),
),
abstract: (
color: #00b0ff,
bg-color: rgba(0, 176, 255, 0.1),
),
info: (
color: #00b8d4,
bg-color: rgba(0, 184, 212, 0.1),
),
todo: (
color: #5e9aff,
bg-color: rgba(94, 154, 255, 0.1),
),
tip: (
color: #00bfa5,
bg-color: rgba(0, 191, 165, 0.1),
),
success: (
color: #00c853,
bg-color: rgba(0, 200, 83, 0.1),
),
question: (
color: #ffbd67,
bg-color: rgba(255, 190, 0, 0.1),
),
warning: (
color: #ff9100,
bg-color: rgba(255, 145, 0, 0.1),
),
failure: (
color: #ff5252,
bg-color: rgba(255, 82, 82, 0.1),
),
danger: (
color: #ff1744,
bg-color: rgba(255, 23, 68, 0.1),
),
bug: (
color: #f50057,
bg-color: rgba(245, 0, 87, 0.1),
),
example: (
color: #651fff,
bg-color: rgba(101, 31, 255, 0.1),
),
quote: (
color: #9e9e9e,
bg-color: rgba(159, 159, 159, 0.1),
),
) !default;
+45 -15
View File
@@ -1,16 +1,46 @@
// Color map of alert [$type $border-color $color, ... ]
$alert-color-map:
'note' #0969da #0969da,
'tip' #1a7f37 #1a7f37,
'important' #8250df #8250df,
'warning' #bf8700 #9a6700,
'caution' #cf222e #d1242f,
!default;
// Color map of basic alerts
$alert-color-map: (
note: (
border-color: #0969da,
color: #0969da,
),
tip: (
border-color: #1a7f37,
color: #1a7f37,
),
important: (
border-color: #8250df,
color: #8250df,
),
warning: (
border-color: #bf8700,
color: #9a6700,
),
caution: (
border-color: #cf222e,
color: #d1242f,
),
) !default;
$alert-color-map-dark:
'note' #316dca #478be6,
'tip' #347d39 #57ab5a,
'important' #8256d0 #986ee2,
'warning' #966600 #c69026,
'caution' #c93c37 #e5534b,
!default;
$alert-color-map-dark: (
note: (
border-color: #316dca,
color: #478be6,
),
tip: (
border-color: #347d39,
color: #57ab5a,
),
important: (
border-color: #8256d0,
color: #986ee2,
),
warning: (
border-color: #966600,
color: #c69026,
),
caution: (
border-color: #c93c37,
color: #e5534b,
),
) !default;
+6 -6
View File
@@ -26,18 +26,18 @@
}
}
@each $type, $border-color, $color in $alert-color-map {
@each $type, $item in $alert-color-map {
&.alert-#{$type} {
--#{$prefix}alert-border-color: #{$border-color};
--#{$prefix}alert-color: #{$color};
--#{$prefix}alert-border-color: #{map-get($item, border-color)};
--#{$prefix}alert-color: #{map-get($item, color)};
}
}
[data-theme='dark'] & {
@each $type, $border-color, $color in $alert-color-map-dark {
@each $type, $item in $alert-color-map-dark {
&.alert-#{$type} {
--#{$prefix}alert-border-color: #{$border-color};
--#{$prefix}alert-color: #{$color};
--#{$prefix}alert-border-color: #{map-get($item, border-color)};
--#{$prefix}alert-color: #{map-get($item, color)};
}
}
}
+13 -22
View File
@@ -1,20 +1,6 @@
// inline code
code {
padding: 0.2em 0.4em;
margin: 0;
font-size: $code-font-size;
font-family: $code-font-family;
color: $code-color;
background-color: rgba(175, 184, 193, 0.2);
text-decoration: inherit;
@include border-radius($global-border-radius);
@include overflow-wrap(break-word);
@include line-break(auto);
[data-theme='dark'] & {
color: $code-color-dark;
background-color: rgba(99, 110, 123, 0.4);
}
@extend %code;
}
// indented code
@@ -23,7 +9,7 @@ pre:not(.mermaid[data-processed='true']) {
line-height: 1.45em;
padding: 0.5rem;
overflow: auto;
font-size: $code-font-size;
font-size: $code-block-font-size;
font-family: $code-font-family;
@include border-radius($global-border-radius);
@include tab-size(4);
@@ -37,6 +23,7 @@ pre:not(.mermaid[data-processed='true']) {
code {
padding: 0;
background-color: transparent;
font-size: inherit;
@include border-radius(0);
@include max-content(min-width);
@@ -54,7 +41,7 @@ pre:not(.mermaid[data-processed='true']) {
.highlight,
.gist {
font-size: $code-font-size;
font-size: $code-block-font-size;
font-family: $code-font-family;
.table-wrapper {
@@ -354,6 +341,7 @@ pre:not(.mermaid[data-processed='true']) {
.gist-meta {
padding: 0.4rem 0.8rem;
@include link(false, false);
@include border-radius(0 0 $global-border-radius $global-border-radius);
background-color: darken($code-background-color, 5%);
[data-theme='dark'] & {
@@ -362,12 +350,15 @@ pre:not(.mermaid[data-processed='true']) {
}
.table-wrapper {
.highlight {
background-color: $code-background-color;
padding-block: 0.25rem;
@include border-radius($global-border-radius $global-border-radius 0 0);
background-color: $code-background-color;
[data-theme='dark'] & {
background-color: $code-background-color-dark;
}
[data-theme='dark'] & {
background-color: $code-background-color-dark;
}
.highlight {
background-color: transparent;
}
}
@@ -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;
}
}
}
}
}
+6 -1
View File
@@ -8,6 +8,10 @@
.toc-content {
font-size: $toc-content-font-size;
code {
@extend %code;
}
ul {
text-indent: -0.8em;
padding-left: 0.8em;
@@ -110,7 +114,8 @@
.toc-content {
overflow-y: scroll;
max-height: calc(100vh - #{2*$header-height});
// TODO 这里计算错误,待重构
max-height: calc(100vh - #{2 * $header-height});
@include scrollbar-width(none, 0);
&.always-active ul,
+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;
}
+34 -33
View File
@@ -16,6 +16,15 @@
.admonition-content {
padding: 0.5rem 0;
// for extended alert syntax
> p {
margin: 0;
}
// title-only alert
&:empty {
display: none;
}
}
i.icon {
@@ -30,43 +39,35 @@
top: 0.6rem;
right: 0.3rem;
}
background-color: var(--#{$prefix}admonition-bg-color);
border-left-color: var(--#{$prefix}admonition-color);
@each $type, $color, $background-color in $admonition-color-map {
@if $type == 'note' {
background-color: $background-color;
border-left-color: $color;
> .admonition-title {
border-bottom-color: var(--#{$prefix}admonition-bg-color);
background-color: var(--#{$prefix}admonition-bg-color-collapsed);
.admonition-title {
border-bottom-color: $background-color;
background-color: opacify($background-color, 0.15);
}
&.open .admonition-title {
background-color: $background-color;
}
i.icon {
color: $color;
}
i.icon {
color: var(--#{$prefix}admonition-color);
}
@else {
}
&.open > .admonition-title {
background-color: var(--#{$prefix}admonition-bg-color);
}
// default admonition type is note
--#{$prefix}admonition-color: #{map-get(map-get($admonition-color-map, note), color)};
--#{$prefix}admonition-bg-color: #{map-get(map-get($admonition-color-map, note), bg-color)};
--#{$prefix}admonition-bg-color-collapsed: #{opacify(map-get(map-get($admonition-color-map, note), bg-color), 0.15)};
// set color for each admonition type
@each $type, $item in $admonition-color-map {
@if $type != 'note' {
&.#{$type} {
background-color: $background-color;
border-left-color: $color;
.admonition-title {
border-bottom-color: $background-color;
background-color: opacify($background-color, 0.15);
}
&.open .admonition-title {
background-color: $background-color;
}
i.icon {
color: $color;
}
--#{$prefix}admonition-color: #{map-get($item, color)};
--#{$prefix}admonition-bg-color: #{map-get($item, bg-color)};
--#{$prefix}admonition-bg-color-collapsed: #{opacify(map-get($item, bg-color), 0.15)};
}
}
}
+7 -1
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; // 釉蓝
@@ -159,7 +164,8 @@ $code-info-color: #9c9c9c !default;
$code-info-color-dark: #b1b0b0 !default;
// Font size of the code
$code-font-size: 0.875rem !default;
$code-font-size: 0.875em !default;
$code-block-font-size: 0.875rem !default;
// Font family of the code
$code-font-family: Source Code Pro, Menlo, Consolas, Monaco, monospace, $global-font-family !default;
+10 -13
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
@@ -39,12 +39,9 @@ libFiles:
gitalkJS: gitalk@1.7.2/dist/gitalk.min.js
# instant.page@5.2.0 https://github.com/instantpage/instant.page
instantPage: instant.page@5.2.0/instantpage.min.js
# katex@0.16.10 https://github.com/KaTeX/KaTeX
katexAutoRenderJS: katex@0.16.10/dist/contrib/auto-render.min.js
katexCopyTexJS: katex@0.16.10/dist/contrib/copy-tex.min.js
katexCSS: katex@0.16.10/dist/katex.min.css
katexJS: katex@0.16.10/dist/katex.min.js
katexMhchemJS: katex@0.16.10/dist/contrib/mhchem.min.js
# katex@0.16.22 https://github.com/KaTeX/KaTeX
katexCopyTexJS: katex@0.16.22/dist/contrib/copy-tex.min.js
katexCSS: katex@0.16.22/dist/katex.min.css
# lightgallery@2.7.2 https://github.com/sachinchoolur/lightgallery
lightgalleryCSS: lightgallery@2.7.2/css/lightgallery-bundle.min.css
lightgalleryJS: lightgallery@2.7.2/lightgallery.min.js
@@ -66,15 +63,15 @@ libFiles:
sharerJS: sharer.js@0.5.1/sharer.min.js
# twemoji@14.0.2 https://github.com/twitter/twemoji
twemojiJS: twemoji@14.0.2/dist/twemoji.min.js
# twikoo@1.6.22 https://github.com/imaegoo/twikoo
twikooJS: twikoo@1.6.22/dist/twikoo.all.min.js
# twikoo@1.6.44 https://github.com/imaegoo/twikoo
twikooJS: twikoo@1.6.44/dist/twikoo.all.min.js
# typeit@8.8.4 https://github.com/alexmacarthur/typeit
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
+10 -13
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
@@ -39,12 +39,9 @@ libFiles:
gitalkJS: gitalk@1.7.2/dist/gitalk.min.js
# instant.page@5.2.0 https://github.com/instantpage/instant.page
instantPage: instant.page@5.2.0/instantpage.js
# katex@0.16.10 https://github.com/KaTeX/KaTeX
katexAutoRenderJS: katex@0.16.10/dist/contrib/auto-render.min.js
katexCopyTexJS: katex@0.16.10/dist/contrib/copy-tex.min.js
katexCSS: katex@0.16.10/dist/katex.min.css
katexJS: katex@0.16.10/dist/katex.min.js
katexMhchemJS: katex@0.16.10/dist/contrib/mhchem.min.js
# katex@0.16.22 https://github.com/KaTeX/KaTeX
katexCopyTexJS: katex@0.16.22/dist/contrib/copy-tex.min.js
katexCSS: katex@0.16.22/dist/katex.min.css
# lightgallery@2.7.2 https://github.com/sachinchoolur/lightgallery
lightgalleryCSS: lightgallery@2.7.2/css/lightgallery-bundle.min.css
lightgalleryJS: lightgallery@2.7.2/lightgallery.min.js
@@ -66,14 +63,14 @@ libFiles:
sharerJS: sharer.js@0.5.1/sharer.min.js
# twemoji@14.0.2 https://github.com/twitter/twemoji
twemojiJS: twemoji@14.0.2/dist/twemoji.min.js
# twikoo@1.6.22 https://github.com/imaegoo/twikoo
twikooJS: twikoo@1.6.22/dist/twikoo.all.min.js
# twikoo@1.6.44 https://github.com/imaegoo/twikoo
twikooJS: twikoo@1.6.44/dist/twikoo.all.min.js
# typeit@8.8.4 https://github.com/alexmacarthur/typeit
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
+45
View File
@@ -0,0 +1,45 @@
import * as params from '@params'
/**
* Load MathJax script dynamically
*/
function loadMathJax() {
const script = document.createElement('script')
script.src = params.cdn || 'https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js'
script.async = true
document.head.appendChild(script)
}
/**
* Configuring MathJax
* https://docs.mathjax.org/en/latest/options/index.html
*/
window.MathJax = {
tex: {
displayMath: [['\\[', '\\]'], ['$$', '$$']],
inlineMath: [['\\(', '\\)'], ['$', '$']],
packages: {
...params.packages,
},
// custom macros
macros: {
// make \KaTeX command work in MathJax
KaTeX: '{K\\kern-.325em\\raise.21em{\\scriptstyle{A}}\\kern-.17em\\TeX}',
...params.macros,
},
...params.tex,
},
loader: {
...params.loader,
failed: function (error) {
console.error(`MathJax(${error.package || '?'}): ${error.message}`);
},
},
options: {
ignoreHtmlClass: 'comment',
processHtmlClass: 'content',
...params.options,
}
}
loadMathJax()
+139 -37
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>`;
}
}
@@ -334,7 +376,7 @@ class FixIt {
}
initDetails(target = document) {
this.util.forEach(target.getElementsByClassName('details'), ($details) => {
this.util.forEach(target.querySelectorAll('.details:not(.disabled)'), ($details) => {
const $summary = $details.querySelector('.details-summary');
$summary.addEventListener('click', () => {
$details.classList.toggle('open');
@@ -464,7 +506,7 @@ class FixIt {
}
$copy.title = this.config.code.copyTitle;
$copy.addEventListener('click', () => {
navigator.clipboard.writeText(code).then(() => {
this.util.copyText(code).then(() => {
this.util.animateCSS($code, 'animate__flash');
}, () => {
console.error('Clipboard write failed!', 'Your browser does not support clipboard API!');
@@ -594,18 +636,12 @@ class FixIt {
}
}
initMath(target = document.body) {
if (this.config.math) {
renderMathInElement(target, this.config.math);
}
}
initMermaid() {
if (!window.mermaid?.initialize) {
if (!this.config.mermaid) {
return;
}
const _initializeAndRun = () => {
const themes = window.mermaid.themes ?? ['default', 'dark'];
const themes = this.config.mermaid.themes ?? ['default', 'dark'];
window.mermaid.initialize({
securityLevel: 'loose',
startOnLoad: false,
@@ -642,12 +678,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 +991,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;
}
}
@@ -999,6 +1080,8 @@ class FixIt {
}
const selector = this.config.pangu.selector;
if (selector) {
// to avoid extra spaces for extended Markdown syntax fraction in Chinese
pangu.ignoredTags = /^(script|code|pre|textarea|sup|sub)$/i;
if (selector.startsWith('#')) {
pangu.spacingElementById(selector.slice(1));
} else if (selector.startsWith('.')) {
@@ -1011,6 +1094,10 @@ class FixIt {
pangu.autoSpacingPage();
}
initMathJax() {
window.MathJax?.typeset && window.MathJax.typeset();
}
initFixItDecryptor() {
this.decryptor = new FixItDecryptor({
decrypted: () => {
@@ -1019,15 +1106,15 @@ class FixIt {
this.initLightGallery();
this.initCodeWrapper();
this.initTable();
this.initMath();
this.initMermaid();
this.initEcharts();
this.initTypeit();
this.initMapbox();
this.fixTocScroll();
this.initToc();
this.initTocListener();
this.initPangu();
this.fixTocScroll();
this.initMathJax();
this.util.forEach(document.querySelectorAll('.encrypted-hidden'), ($element) => {
$element.classList.replace('encrypted-hidden', 'decrypted-shown');
});
@@ -1038,12 +1125,12 @@ class FixIt {
this.initLightGallery();
this.initCodeWrapper();
this.initTable($content);
this.initMath($content);
this.initMermaid();
this.initEcharts();
this.initTypeit($content);
this.initMapbox();
this.initPangu();
this.initMathJax();
this.util.forEach($content.querySelectorAll('.encrypted-hidden'), ($element) => {
$element.classList.replace('encrypted-hidden', 'decrypted-shown');
});
@@ -1104,6 +1191,21 @@ 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;
@@ -1224,7 +1326,6 @@ class FixIt {
this.initLightGallery();
this.initCodeWrapper();
this.initTable();
this.initMath();
this.initMermaid();
this.initEcharts();
this.initTypeit();
@@ -1243,13 +1344,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();
+43 -1
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
@@ -86,4 +86,46 @@ export default class Util {
}
}
}
/**
* copy text to clipboard
* @param {String} text text to copy
* @returns {Promise} promise
*/
copyText(text) {
if (navigator.clipboard) {
this.copyText = (text) => navigator.clipboard.writeText(text);
return this.copyText(text);
}
this.copyText = (text) => new Promise((resolve, reject) => {
const input = document.createElement('input');
input.value = text;
document.body.appendChild(input);
input.select();
if (document.execCommand('copy')) {
document.body.removeChild(input);
resolve();
} else {
reject();
}
});
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;
}
}
+4 -4
View File
@@ -9,11 +9,11 @@ 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
katex@0.16.10 https://github.com/KaTeX/KaTeX
katex@0.16.22 https://github.com/KaTeX/KaTeX
lightgallery@2.7.2 https://github.com/sachinchoolur/lightgallery
mapbox-gl@2.10.0 https://github.com/mapbox/mapbox-gl-js
meting@2.0.1 https://github.com/metowolf/MetingJS
@@ -23,8 +23,8 @@ pangu.js@4.0.7 https://github.com/vinta/pangu.js
sharer.js@0.5.1 https://github.com/ellisonleao/sharer.js
simple-icons@9.19.0 https://github.com/simple-icons/simple-icons
twemoji@14.0.2 https://github.com/twitter/twemoji
twikoo@1.6.22 https://github.com/imaegoo/twikoo
twikoo@1.6.44 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
View File
@@ -1 +0,0 @@
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("katex")):"function"==typeof define&&define.amd?define(["katex"],t):"object"==typeof exports?exports.renderMathInElement=t(require("katex")):e.renderMathInElement=t(e.katex)}("undefined"!=typeof self?self:this,(function(e){return function(){"use strict";var t={771:function(t){t.exports=e}},n={};function r(e){var o=n[e];if(void 0!==o)return o.exports;var i=n[e]={exports:{}};return t[e](i,i.exports,r),i.exports}r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,{a:t}),t},r.d=function(e,t){for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};var o={};return function(){r.d(o,{default:function(){return d}});var e=r(771),t=r.n(e);const n=function(e,t,n){let r=n,o=0;const i=e.length;for(;r<t.length;){const n=t[r];if(o<=0&&t.slice(r,r+i)===e)return r;"\\"===n?r++:"{"===n?o++:"}"===n&&o--,r++}return-1},i=/^\\begin{/;var a=function(e,t){let r;const o=[],a=new RegExp("("+t.map((e=>e.left.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"))).join("|")+")");for(;r=e.search(a),-1!==r;){r>0&&(o.push({type:"text",data:e.slice(0,r)}),e=e.slice(r));const a=t.findIndex((t=>e.startsWith(t.left)));if(r=n(t[a].right,e,t[a].left.length),-1===r)break;const l=e.slice(0,r+t[a].right.length),s=i.test(l)?l:e.slice(t[a].left.length,r);o.push({type:"math",data:s,rawData:l,display:t[a].display}),e=e.slice(r+t[a].right.length)}return""!==e&&o.push({type:"text",data:e}),o};const l=function(e,n){const r=a(e,n.delimiters);if(1===r.length&&"text"===r[0].type)return null;const o=document.createDocumentFragment();for(let e=0;e<r.length;e++)if("text"===r[e].type)o.appendChild(document.createTextNode(r[e].data));else{const i=document.createElement("span");let a=r[e].data;n.displayMode=r[e].display;try{n.preProcess&&(a=n.preProcess(a)),t().render(a,i,n)}catch(i){if(!(i instanceof t().ParseError))throw i;n.errorCallback("KaTeX auto-render: Failed to parse `"+r[e].data+"` with ",i),o.appendChild(document.createTextNode(r[e].rawData));continue}o.appendChild(i)}return o},s=function(e,t){for(let n=0;n<e.childNodes.length;n++){const r=e.childNodes[n];if(3===r.nodeType){let o=r.textContent,i=r.nextSibling,a=0;for(;i&&i.nodeType===Node.TEXT_NODE;)o+=i.textContent,i=i.nextSibling,a++;const s=l(o,t);if(s){for(let e=0;e<a;e++)r.nextSibling.remove();n+=s.childNodes.length-1,e.replaceChild(s,r)}else n+=a}else if(1===r.nodeType){const e=" "+r.className+" ";-1===t.ignoredTags.indexOf(r.nodeName.toLowerCase())&&t.ignoredClasses.every((t=>-1===e.indexOf(" "+t+" ")))&&s(r,t)}}};var d=function(e,t){if(!e)throw new Error("No element provided to render");const n={};for(const e in t)t.hasOwnProperty(e)&&(n[e]=t[e]);n.delimiters=n.delimiters||[{left:"$$",right:"$$",display:!0},{left:"\\(",right:"\\)",display:!1},{left:"\\begin{equation}",right:"\\end{equation}",display:!0},{left:"\\begin{align}",right:"\\end{align}",display:!0},{left:"\\begin{alignat}",right:"\\end{alignat}",display:!0},{left:"\\begin{gather}",right:"\\end{gather}",display:!0},{left:"\\begin{CD}",right:"\\end{CD}",display:!0},{left:"\\[",right:"\\]",display:!0}],n.ignoredTags=n.ignoredTags||["script","noscript","style","textarea","pre","code","option"],n.ignoredClasses=n.ignoredClasses||[],n.errorCallback=n.errorCallback||console.error,n.macros=n.macros||{},s(e,n)}}(),o=o.default}()}));
+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
File diff suppressed because one or more lines are too long
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
+191 -30
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.132.0"
min = "0.147.7"
# -------------------------------------------------------------------------------------
# Markup related configuration in Hugo
@@ -178,8 +180,12 @@ enableEmoji = true
enable = true
[markup.goldmark.extensions.extras.superscript]
enable = true
# TODO passthrough refactor https://gohugo.io/getting-started/configuration-markup/#parserattributeblock
# TODO hugo 0.122.0 https://gohugo.io/content-management/mathematics/
# 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
@@ -197,6 +203,7 @@ enableEmoji = true
[sitemap]
changefreq = "weekly"
disable = false
filename = "sitemap.xml"
priority = 0.5
@@ -329,6 +336,8 @@ enableEmoji = true
enablePWA = false
# FixIt 0.2.14 | NEW whether to add external Icon for external links automatically
externalIcon = false
# FixIt 0.3.13 | NEW whether to capitalize titles
capitalizeTitles = true
# FixIt 0.3.0 | NEW whether to add site title to the title of every page
# remember to set up your site title in `hugo.toml` (e.g. title = "title")
withSiteTitle = true
@@ -337,6 +346,8 @@ enableEmoji = true
# FixIt 0.3.0 | NEW whether to add site subtitle to the title of index page
# remember to set up your site subtitle by `params.header.subtitle.name`
indexWithSubtitle = false
# FixIt 0.3.13 | NEW whether to show summary in plain text
summaryPlainify = false
# FixIt 0.2.14 | NEW FixIt will, by default, inject a theme meta tag in the HTML head on the home page only.
# You can turn it off, but we would really appreciate if you dont, as this is a good way to watch FixIt's popularity on the rise.
disableThemeInject = false
@@ -379,7 +390,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
@@ -409,6 +420,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"]
@@ -439,6 +463,9 @@ enableEmoji = true
enable = false
sticky = false
showHome = false
# FixIt 0.3.13 | NEW
separator = "/"
capitalize = true
# FixIt 0.3.10 | NEW Post navigation config
[params.navigation]
@@ -501,13 +528,6 @@ enableEmoji = true
limit = -1
# whether to show the full text content in feed.
fullText = false
# FixIt 0.2.13 | NEW recently updated pages config
# TODO refactor to support archives, section, taxonomy and term
[params.section.recentlyUpdated]
enable = false
rss = false
days = 30
maxCount = 10
# Term list (category or tag) page config
[params.list]
@@ -522,6 +542,14 @@ enableEmoji = true
# whether to show the full text content in feed.
fullText = false
# FixIt 0.3.13 | NEW recently updated pages config for archives, section and term list
[params.recentlyUpdated]
archives = true
section = true
list = true
days = 30
maxCount = 10
# FixIt 0.2.17 | NEW TagCloud config for tags page
[params.tagcloud]
enable = false
@@ -644,6 +672,7 @@ enableEmoji = true
Douyin = ""
TikTok = ""
Credly = ""
Bluesky = ""
Phone = ""
Email = ""
RSS = true
@@ -674,6 +703,25 @@ enableEmoji = true
# For values, see https://mermaid.js.org/config/theming.html#available-themes
themes = ["default", "dark"]
# FixIt 0.3.13 | NEW Admonitions custom config
# See https://fixit.lruihao.cn/documentation/content-management/shortcodes/extended/admonition/#custom-admonitions
# syntax: <type> = <icon>
[params.admonition]
# ban = "fa-solid fa-ban"
# FixIt 0.3.14 | NEW Task lists custom config
# See https://fixit.lruihao.cn/documentation/content-management/advanced/#custom-task-lists
# syntax: <sign> = <icon>
[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
@@ -744,6 +792,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]
@@ -763,7 +836,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
@@ -813,24 +887,90 @@ 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.zhheo.com/console/login?InviteID=85041330
[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.4.0 | NEW
hotWords = true
# FixIt 0.3.17 | NEW Summary AI config
# See https://ai.zhheo.com/docs/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.
limit = 10
# whether to show the full text content in feed.
fullText = true
# Site Challenge for Follow: https://follow.is/
[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 = []
@@ -876,6 +1016,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
@@ -938,19 +1080,41 @@ enableEmoji = true
h4 = "{h2}.{h3}.{h4} {title}"
h5 = "{h2}.{h3}.{h4}.{h5} {title}"
h6 = "{h2}.{h3}.{h4}.{h5}.{h6} {title}"
# FixIt 0.2.16 | CHANGED KaTeX mathematical formulas (https://katex.org)
# FixIt 0.4.0 | CHANGED mathematical formulas configuration
# See http://fixit.lruihao.cn/documentation/content-management/markdown-syntax/extended/#formula
[params.page.math]
enable = true
# default inline delimiter is $ ... $ and \( ... \)
inlineLeftDelimiter = ""
inlineRightDelimiter = ""
# default block delimiter is $$ ... $$, \[ ... \], \begin{equation} ... \end{equation} and some other functions
blockLeftDelimiter = ""
blockRightDelimiter = ""
# KaTeX extension copy_tex
copyTex = true
# KaTeX extension mhchem
mhchem = true
# mathematical formulas rendering engines, optional values: ["katex", "mathjax"]
type = "katex"
# KaTeX server-side rendering (https://katex.org)
# KaTeX partial config: https://gohugo.io/functions/transform/tomath/#options
[params.page.math.katex]
# KaTeX extension copy-tex
copyTex = true
throwOnError = false
errorColor = "#ff4949"
# custom macros map
# syntax: <macro> = <definition>
[params.page.math.katex.macros]
# "\\f" = "#1f(#2)" # usage: $\f{a}{b}$
# MathJax server-side rendering (https://www.mathjax.org)
# MathJax config: https://docs.mathjax.org/en/latest/options/index.html
[params.page.math.mathjax]
cdn = "https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"
[params.page.math.mathjax.packages]
# "[+]" = ["configmacros"]
# custom macros map
# syntax: <macro> = <definition>
[params.page.math.mathjax.macros]
# "bold" = ["{\\bf #1}", 1] # usage: $\bold{math}$
[params.page.math.mathjax.loader]
load = ["ui/safe"]
[params.page.math.mathjax.loader.paths]
# custom = "https://cdn.jsdelivr.net/gh/sonoisa/XyJax-v3@3.0.1/build/"
# more loader config e.g source, dependencies, provides etc.
[params.page.math.mathjax.options]
enableMenu = true
# more options config e.g. skipHtmlTags, ignoreHtmlClass etc.
# Code wrapper config
[params.page.code]
# FixIt 0.3.9 | NEW whether to enable the code wrapper
@@ -977,15 +1141,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
@@ -1075,8 +1236,8 @@ enableEmoji = true
appKey = ""
placeholder = ""
avatar = "mp"
meta = ""
requiredFields = ""
meta = ['nick','mail','link']
requiredFields = []
pageSize = 10
lang = ""
visitor = true
+48 -33
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,18 +177,31 @@ 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]
" " = "Nicht überprüft"
"x" = "Überprüft"
"/" = "In Bearbeitung"
"-" = "Abgebrochen"
"<" = "Geplant"
">" = "Verschoben"
"!" = "Wichtig"
"?" = "Frage"
# === Task lists ===
# === shortcodes/admonition.html ===
[admonition]
note = "Notiz"
abstract = "Kurzfassung"
info = "Info"
todo = "Aufgabe"
tip = "Tipp"
success = "Erfolg"
question = "Frage"
+17 -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"
@@ -181,11 +184,24 @@ warning = "Warning"
caution = "Caution"
# === GitHub Alert ===
# === Task lists ===
[taskList]
" " = "Unchecked"
"x" = "Checked"
"/" = "In Progress"
"-" = "Cancelled"
"<" = "Scheduled"
">" = "Rescheduled"
"!" = "Important"
"?" = "Question"
# === Task lists ===
# === shortcodes/admonition.html ===
[admonition]
note = "Note"
abstract = "Abstract"
info = "Info"
todo = "Todo"
tip = "Tip"
success = "Success"
question = "Question"
+47 -32
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,18 +177,31 @@ 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]
" " = "No verificado"
"x" = "Verificado"
"/" = "En progreso"
"-" = "Cancelado"
"<" = "Programado"
">" = "Reprogramado"
"!" = "Importante"
"?" = "Pregunta"
# === Task lists ===
# === shortcodes/admonition.html ===
[admonition]
note = "Nota"
abstract = "Resumen"
info = "Información"
todo = "Por hacer"
tip = "Consejo"
success = "Éxito"
question = "Pregunta"
+30 -14
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,18 +177,31 @@ 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]
" " = "Non vérifié"
"x" = "Vérifié"
"/" = "En cours"
"-" = "Annulé"
"<" = "Planifié"
">" = "Replanifié"
"!" = "Important"
"?" = "Question"
# === Task lists ===
# === shortcodes/admonition.html ===
[admonition]
note = "Remarque"
abstract = "Résumé"
info = "Info"
todo = "À faire"
tip = "Astuce"
success = "Succès"
question = "Question"
+22 -6
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,18 +178,31 @@ other = "आप इंटरनेट से कनेक्ट नहीं ह
# === GitHub Alert ===
[alert]
note = ""
tip = ""
important = ""
warning = ""
caution = ""
note = "ध्यान दें"
tip = "टिप"
important = "महत्वपूर्ण"
warning = "चेतावनी"
caution = "सावधान"
# === GitHub Alert ===
# === Task lists ===
[taskList]
" " = "जांच नहीं की गई"
"x" = "जांच की गई"
"/" = "काम जारी है"
"-" = "रद्द किया गया"
"<" = "अनुसूचित"
">" = "पुनः अनुसूचित"
"!" = "महत्वपूर्ण"
"?" = "सवाल"
# === Task lists ===
# === shortcodes/admonition.html ===
[admonition]
note = "ध्यान दें"
abstract = "सारांश"
info = "जानकारी"
todo = "करने के लिए"
tip = "टिप"
success = "सफलता"
question = "प्रश्न"
+47 -32
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,18 +177,31 @@ 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]
" " = "Non verificato"
"x" = "Verificato"
"/" = "In corso"
"-" = "Annullato"
"<" = "Programmato"
">" = "Ripianificato"
"!" = "Importante"
"?" = "Domanda"
# === Task lists ===
# === shortcodes/admonition.html ===
[admonition]
note = "Note"
abstract = "Sommario"
info = "Info"
todo = "Da fare"
tip = "Suggerimenti"
success = "Successo"
question = "Domande"
+47 -32
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,18 +177,31 @@ 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]
" " = "Niezweryfikowane"
"x" = "Zweryfikowane"
"/" = "W toku"
"-" = "Anulowane"
"<" = "Zaplanowane"
">" = "Przełożone"
"!" = "Ważne"
"?" = "Pytanie"
# === Task lists ===
# === shortcodes/admonition.html ===
[admonition]
note = "Notka"
abstract = "Streszczenie"
info = "Info"
todo = "Do zrobienia"
tip = "Wskazówka"
success = "Sukces"
question = "Pytanie"
+63 -47
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,21 +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]
" " = "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"
+47 -32
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,18 +177,31 @@ 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]
" " = "Necontrolat"
"x" = "Controlat"
"/" = "În progres"
"-" = "Anulat"
"<" = "Programat"
">" = "Reprogramat"
"!" = "Important"
"?" = "Întrebare"
# === Task lists ===
# === shortcodes/admonition.html ===
[admonition]
note = "Notă"
abstract = "Rezumat"
info = "Info"
todo = "De făcut"
tip = "Sfat"
success = "Succes"
question = "Întrebare"
+42 -27
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,18 +177,31 @@ other = "Вы не подключены к интернету, будут дос
# === GitHub Alert ===
[alert]
note = ""
tip = ""
important = ""
warning = ""
caution = ""
note = "Примечание"
tip = "Совет"
important = "Важно"
warning = "Предупреждение"
caution = "Осторожно"
# === GitHub Alert ===
# === Task lists ===
[taskList]
" " = "Не проверено"
"x" = "Проверено"
"/" = "В процессе"
"-" = "Отменено"
"<" = "Запланировано"
">" = "Перенесено"
"!" = "Важно"
"?" = "Вопрос"
# === Task lists ===
# === shortcodes/admonition.html ===
[admonition]
note = "Замечание"
abstract = "Краткое описание"
info = "Инфо"
todo = "Сделать"
tip = "Совет"
success = "Удачто"
question = "Вопрос"
+47 -32
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,18 +177,31 @@ other = "Нисте повезани на Интернет, биће досту
# === GitHub Alert ===
[alert]
note = ""
tip = ""
important = ""
warning = ""
caution = ""
note = "Напомена"
tip = "Савет"
important = "Важно"
warning = "Упозорење"
caution = "Опрез"
# === GitHub Alert ===
# === Task lists ===
[taskList]
" " = "Непроверено"
"x" = "Проверено"
"/" = "У току"
"-" = "Отказано"
"<" = "Планирано"
">" = "Преустановљено"
"!" = "Важно"
"?" = "Питање"
# === Task lists ===
# === shortcodes/admonition.html ===
[admonition]
note = "Напомена"
abstract = "Сажетак"
info = "Инфо"
todo = "То-до"
tip = "Савет"
success = "Успех"
question = "Питање"
+47 -32
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,18 +176,31 @@ 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]
" " = "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 ===
[admonition]
note = "Ghi chú"
abstract = "Tóm tắt"
info = "Thông tin"
todo = "Cần làm"
tip = "Mẹo"
success = "Thành công"
question = "Câu hỏi"
+17 -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 = "阅读全文"
@@ -177,11 +180,24 @@ warning = "警告"
caution = "小心"
# === GitHub Alert ===
# === Task lists ===
[taskList]
" " = "未完成"
"x" = "已完成"
"/" = "进行中"
"-" = "已取消"
"<" = "已计划"
">" = "已重新计划"
"!" = "重要"
"?" = "问题"
# === Task lists ===
# === shortcodes/admonition.html ===
[admonition]
note = "注意"
abstract = "摘要"
info = "信息"
todo = "待办"
tip = "技巧"
success = "成功"
question = "问题"
+17 -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 = "閱讀全文"
@@ -177,11 +180,24 @@ warning = "警告"
caution = "小心"
# === GitHub Alert ===
# === Task lists ===
[taskList]
" " = "未完成"
"x" = "已完成"
"/" = "進行中"
"-" = "已取消"
"<" = "已計劃"
">" = "已重新計劃"
"!" = "重要"
"?" = "問題"
# === Task lists ===
# === shortcodes/admonition.html ===
[admonition]
note = "注意"
abstract = "摘要"
info = "資訊"
todo = "待辦"
tip = "提示"
success = "成功"
question = "問題"
@@ -1,11 +0,0 @@
{{- $attrs := "" }}
{{- range $key, $value := .Attributes }}
{{- $attrs = printf "%s %s=%q" $attrs $key $value }}
{{- end }}
{{- $attrs = trim $attrs " " }}
{{- if eq .Type "alert" -}}
{{- dict "Text" .Text "Type" .AlertType "Attributes" .Attributes | partial "plugin/alert.html" -}}
{{- else -}}
<blockquote {{- with $attrs }} {{ . | safeHTMLAttr }}{{ end }}>{{ .Text | safeHTML }}</blockquote>
{{- end -}}
@@ -1,2 +0,0 @@
{{- dict "Options" .Attributes "Inner" .Inner | partial "plugin/echarts.html" -}}
{{- .Page.Store.Set "hasEcharts" true -}}
@@ -1 +0,0 @@
{{- dict "Options" .Attributes "Inner" .Inner | partial "plugin/timeline.html" -}}
@@ -1,66 +0,0 @@
{{- /* Read the config and format */ -}}
{{- $params := .Page.Params | merge site.Params.page -}}
{{- $ordered := $params.toc.ordered | and $params.heading.number.enable -}}
{{- $h1Format := $params.heading.number.format.h1 | default "{title}" -}}
{{- $h2Format := $params.heading.number.format.h2 | default "{h2} {title}" -}}
{{- $h3Format := $params.heading.number.format.h3 | default "{h2}.{h3} {title}" -}}
{{- $h4Format := $params.heading.number.format.h4 | default "{h2}.{h3}.{h4} {title}" -}}
{{- $h5Format := $params.heading.number.format.h5 | default "{h2}.{h3}.{h4}.{h5} {title}" -}}
{{- $h6Format := $params.heading.number.format.h6 | default "{h2}.{h3}.{h4}.{h5}.{h6} {title}" -}}
{{- if $ordered -}}
{{- /* Set the count for child level to 0 */ -}}
{{- .Page.Scratch.SetInMap "heading-counter" (string (add .Level 1)) 0 -}}
{{- end -}}
<h{{ .Level }} id="{{ .Anchor | safeURL }}" class="heading-element">
{{- $title := .Text -}}
{{- /* Only enable in main section pages */ -}}
{{- $onlyMainSection := cond $params.heading.number.onlyMainSection (eq .Page.Type "posts") true -}}
{{- if $ordered | and $onlyMainSection -}}
{{- /* Add 1 to the current level */ -}}
{{- $headingMap := .Page.Scratch.Get "heading-counter" -}}
{{- $count := (string .Level) | index $headingMap | int | add 1 -}}
{{- .Page.Scratch.SetInMap "heading-counter" (string .Level) $count -}}
{{- /* Get the counters for all levels */ -}}
{{- $h1 := "1" | index $headingMap | int | string -}}
{{- $h2 := "2" | index $headingMap | int | string -}}
{{- $h3 := "3" | index $headingMap | int | string -}}
{{- $h4 := "4" | index $headingMap | int | string -}}
{{- $h5 := "5" | index $headingMap | int | string -}}
{{- $h6 := "6" | index $headingMap | int | string -}}
{{- /* Apply the level based on the format */ -}}
{{- $title = "" -}}
{{- if .Level | eq 1 -}}
{{- $title = $h1Format -}}
{{- else if .Level | eq 2 -}}
{{- $title = $h2Format -}}
{{- else if .Level | eq 3 -}}
{{- $title = $h3Format -}}
{{- else if .Level | eq 4 -}}
{{- $title = $h4Format -}}
{{- else if .Level | eq 5 -}}
{{- $title = $h5Format -}}
{{- else if .Level | eq 6 -}}
{{- $title = $h6Format -}}
{{- end -}}
{{- $title = replace $title "{h1}" $h1 -}}
{{- $title = replace $title "{h2}" $h2 -}}
{{- $title = replace $title "{h3}" $h3 -}}
{{- $title = replace $title "{h4}" $h4 -}}
{{- $title = replace $title "{h5}" $h5 -}}
{{- $title = replace $title "{h6}" $h6 -}}
{{- $title = replace $title "{title}" .Text -}}
{{- end -}}
{{- if $params.heading.capitalize -}}
{{- $title = replace $title .PlainText (title .PlainText) -}}
{{- end -}}
<span>{{ $title | safeHTML }}</span>
<a href="#{{ .Anchor | safeURL }}" class="heading-mark">
<svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
</a>
</h{{ .Level }}>
{{- /* EOF */ -}}
@@ -1,13 +0,0 @@
{{- $params := .Page.Params | merge site.Params.page -}}
{{- 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" -}}
<figcaption class="image-caption">
{{- .Text | 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" -}}
{{- end -}}
-13
View File
@@ -1,13 +0,0 @@
# {{ .Site.Title }}
{{ $pages := .Scratch.Get "mainSectionPages" -}}
{{- $pages = where $pages "Draft" "eq" false -}}
{{- T "section.archiveCounter" (len $pages) }}
{{ range $pages.GroupByPublishDate "2006" }}
{{- if ne .Key "0001" -}}
{{- printf "\n## %v\n\n%v\n\n" .Key (T "section.archiveCounter" .Pages.Len) -}}
{{- range .Pages -}}
{{- printf "- %v [%v](%v \"%v\")\n" (.PublishDate.Format "01-02") .Title .Permalink (.PublishDate.Format "2006-01-02 15:04:05") -}}
{{- end -}}
{{- end -}}
{{- end -}}
@@ -0,0 +1,24 @@
{{- $basicTypes := slice "note" "tip" "important" "warning" "caution" -}}
{{- if .AlertTitle | or .AlertSign | or (.AlertType | in $basicTypes | not) -}}
{{- /* The extended syntax is compatible with Obsidian and FixIt admonition shortcode. */ -}}
{{- $openMap := dict "+" true "-" false -}}
{{- $open := index $openMap .AlertSign | default true -}}
{{- $foldable := ne .AlertSign "" -}}
{{- dict
"Type" .AlertType
"Title" .AlertTitle
"Open" $open
"Text" .Text
"Foldable" $foldable
| partial "plugin/admonition.html"
-}}
{{- else -}}
{{- /* The basic syntax is compatible with GitHub, Obsidian, and Typora. */ -}}
{{- dict
"Type" .AlertType
"Text" .Text
"Attributes" .Attributes
| partial "plugin/alert.html"
-}}
{{- end -}}
@@ -0,0 +1,8 @@
{{- dict
"Options" .Attributes
"Inner" .Inner
"Resources" .Page.Resources
"Position" .Position
| partial "plugin/echarts.html"
-}}
{{- .Page.Store.Set "hasEcharts" true -}}
@@ -0,0 +1,7 @@
{{- dict
"Options" .Attributes
"Inner" .Inner
"Resources" .Page.Resources
"Position" .Position
| partial "plugin/timeline.html"
-}}
+97
View File
@@ -0,0 +1,97 @@
{{- /* Read the config and format */ -}}
{{- $params := .Page.Params | merge site.Params.page -}}
{{- /* Toc data patch */ -}}
{{- $toc := $params.toc -}}
{{- if not (reflect.IsMap $toc) -}}
{{- $toc = dict "enable" $toc | merge site.Params.page.toc -}}
{{- end -}}
{{- $headingConfig := $params.heading -}}
{{- /* Only enable in main section pages */ -}}
{{- $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}" -}}
{{- $h3Format := $headingConfig.number.format.h3 | default "{h2}.{h3} {title}" -}}
{{- $h4Format := $headingConfig.number.format.h4 | default "{h2}.{h3}.{h4} {title}" -}}
{{- $h5Format := $headingConfig.number.format.h5 | default "{h2}.{h3}.{h4}.{h5} {title}" -}}
{{- $h6Format := $headingConfig.number.format.h6 | default "{h2}.{h3}.{h4}.{h5}.{h6} {title}" -}}
{{- $level := .Level -}}
{{- $maxMarkupLevel := 2 -}}
{{- /* Disable ordered headings on home page */ -}}
{{- if eq hugo.Context.MarkupScope "home" -}}
{{- $ordered = false -}}
{{- /* Decrease the level to match the correct HTML level */ -}}
{{- $level = add $level 1 -}}
{{- $maxMarkupLevel = 3 -}}
{{- end -}}
{{- if $ordered -}}
{{- /* Set the count for child level to 0 */ -}}
{{- .Page.Store.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 }} {{ $attrs | safeHTMLAttr }}>
{{- $title := .Text -}}
{{- if $ordered -}}
{{- /* Add 1 to the current level */ -}}
{{- $headingMap := .Page.Store.Get "heading-counter" -}}
{{- $count := (string $level) | index $headingMap | int | add 1 -}}
{{- .Page.Store.SetInMap "heading-counter" (string $level) $count -}}
{{- /* Get the counters for all levels */ -}}
{{- $h1 := "1" | index $headingMap | int | string -}}
{{- $h2 := "2" | index $headingMap | int | string -}}
{{- $h3 := "3" | index $headingMap | int | string -}}
{{- $h4 := "4" | index $headingMap | int | string -}}
{{- $h5 := "5" | index $headingMap | int | string -}}
{{- $h6 := "6" | index $headingMap | int | string -}}
{{- /* Apply the level based on the format */ -}}
{{- $title = "" -}}
{{- if $level | eq 1 -}}
{{- $title = $h1Format -}}
{{- else if $level | eq 2 -}}
{{- $title = $h2Format -}}
{{- else if $level | eq 3 -}}
{{- $title = $h3Format -}}
{{- else if $level | eq 4 -}}
{{- $title = $h4Format -}}
{{- else if $level | eq 5 -}}
{{- $title = $h5Format -}}
{{- else if $level | eq 6 -}}
{{- $title = $h6Format -}}
{{- end -}}
{{- $title = replace $title "{h1}" $h1 -}}
{{- $title = replace $title "{h2}" $h2 -}}
{{- $title = replace $title "{h3}" $h3 -}}
{{- $title = replace $title "{h4}" $h4 -}}
{{- $title = replace $title "{h5}" $h5 -}}
{{- $title = replace $title "{h6}" $h6 -}}
{{- $title = replace $title "{title}" .Text -}}
{{- end -}}
{{- if $headingConfig.capitalize -}}
{{- $title = replace $title .PlainText (title .PlainText) -}}
{{- end -}}
<span>{{ $title | safeHTML }}</span>
<a href="#{{ .Anchor | safeURL }}" class="heading-mark">
<svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
</a>
</h{{ $markupLevel }}>
{{- /* EOF */ -}}
+27
View File
@@ -0,0 +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" .PlainText "Title" .Title "Caption" .Text "Linked" $linked "Loading" "lazy" "Resources" .Page.Resources "OptimConfig" $optim | partial "plugin/image.html" -}}
<figcaption class="image-caption">
{{- .Title | safeHTML -}}
</figcaption>
</figure>
{{- else -}}
{{- $linked := (eq $params.lightgallery "force") | or ($params.lightgallery | and (ne .Title "")) -}}
{{- dict "Src" .Destination "Alt" .PlainText "Title" .Title "Linked" $linked "Loading" "lazy" "Resources" .Page.Resources "OptimConfig" $optim | partial "plugin/image.html" -}}
{{- end -}}
+45
View File
@@ -0,0 +1,45 @@
{{- $params := .Page.Params | merge site.Params.page -}}
{{- $math := $params.math -}}
{{- if eq $math true -}}
{{- $math = dict "enable" true | merge site.Params.page.math -}}
{{- else if eq $math false -}}
{{- $math = dict "enable" false -}}
{{- end -}}
{{- /*
Mathematical formulas rendering:
- KaTeX server-side rendering
- MathJax client-side rendering
Regular passthrough rendering:
- [todo] support more features in future
*/ -}}
{{- if $math.enable -}}
{{- if eq $math.type "katex" -}}
{{- $katex := $math.katex -}}
{{- $opts := dict "output" "htmlAndMathml" "displayMode" (eq $.Type "block") }}
{{- $opts = dict "throwOnError" $katex.throwOnError "errorColor" $katex.errorColor | merge $opts }}
{{- $macros := $katex.macros | default dict -}}
{{- if $macros -}}
{{- $opts = dict "macros" $macros | merge $opts -}}
{{- end -}}
{{- /* render mathematical markup to HTML */ -}}
{{- with try (transform.ToMath .Inner $opts) }}
{{- with .Err }}
{{- errorf "Unable to render mathematical markup to HTML using the transform.ToMath function. The KaTeX display engine threw the following error: %s: see %s." . $.Position }}
{{- else }}
{{- .Value }}
{{- $.Page.Store.Set "hasKaTeX" true -}}
{{- end }}
{{- end -}}
{{- else if eq $math.type "mathjax" -}}
{{- if eq $.Type "block" -}}
$${{- .Inner -}}$$
{{- else -}}
${{ .Inner }}$
{{- end -}}
{{- end -}}
{{- else -}}
{{- /* Regular passthrough rendering */ -}}
{{- /* waiting for Hugo interface to get delimiters */ -}}
{{- .Inner -}}
{{- end -}}
@@ -1,53 +1,66 @@
{{- $noop := .WordCount -}}
{{- $params := partial "function/params.html" -}}
{{- $cdn := .Scratch.Get "cdn" | default dict -}}
{{- $fingerprint := .Scratch.Get "fingerprint" -}}
{{- $config := (.Scratch.Get "this").config -}}
{{- $config = dict "version" (.Scratch.Get "version") | merge $config -}}
{{- $cdn := .Site.Store.Get "cdn" | default dict -}}
{{- $fingerprint := .Site.Store.Get "fingerprint" -}}
{{- $config := (.Store.Get "this").config -}}
{{- $config = dict "version" (hugo.Store.Get "version") | merge $config -}}
{{- /* Search */ -}}
{{- if .Site.Params.search | and .Site.Params.search.enable -}}
{{- $search := .Site.Params.search -}}
{{- /* TODO update "lib/autocomplete-js/umd/index.production.js" */ -}}
{{- $source := $cdn.autocompleteJS | default "lib/autocomplete/autocomplete.min.js" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Page" . "Data" | partial "store/script.html" -}}
{{- $config = dict "maxResultLength" $search.maxResultLength "snippetLength" $search.snippetLength "highlightTag" $search.highlightTag "noResultsFound" (T "assets.noResultsFound") | dict "search" | merge $config -}}
{{- if eq $search.type "algolia" -}}
{{- $source := $cdn.algoliasearchJS | default "lib/algoliasearch/algoliasearch-lite.umd.min.js" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Page" . "Data" | partial "store/script.html" -}}
{{- $config = dict "type" "algolia" "algoliaIndex" $search.algolia.index "algoliaAppID" $search.algolia.appID "algoliaSearchKey" $search.algolia.searchKey | dict "search" | merge $config -}}
{{- else if eq $search.type "fuse" -}}
{{- with .Site.Home.OutputFormats.Get "search" -}}
{{- $config = dict "type" "fuse" "fuseIndexURL" .RelPermalink | dict "search" | merge $config -}}
{{- end -}}
{{- $source := $cdn.fuseJS | default "lib/fuse/fuse.min.js" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Page" . "Data" | partial "store/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 -}}
{{- /* instant.page */ -}}
{{- if $params.instantPage -}}
{{- $source := $cdn.instantPage | default "lib/instant-page/instantpage.min.js" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Attr" `type="module"` "Async" true "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Attr" `type="module"` "Async" true "Defer" true | dict "Page" . "Data" | partial "store/script.html" -}}
{{- end -}}
{{- /* twemoji */ -}}
{{- if $params.twemoji -}}
{{- $source := $cdn.twemojiJS | default "lib/twemoji/twemoji.min.js" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Page" . "Data" | partial "store/script.html" -}}
{{- $config = dict "twemoji" true | merge $config -}}
{{- end -}}
{{- /* lightgallery */ -}}
{{- if $params.lightgallery | or (eq $params.lightgallery "force") -}}
{{- $source := $cdn.lightgalleryCSS | default "lib/lightgallery/css/lightgallery-bundle.min.css" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint | dict "Scratch" .Scratch "Data" | partial "scratch/style.html" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint | dict "Page" . "Data" | partial "store/style.html" -}}
{{- $source := $cdn.lightgalleryJS | default "lib/lightgallery/lightgallery.min.js" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Page" . "Data" | partial "store/script.html" -}}
{{- $source := $cdn.lightgalleryThumbnailJS | default "lib/lightgallery/plugins/thumbnail/lg-thumbnail.min.js" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Page" . "Data" | partial "store/script.html" -}}
{{- $source := $cdn.lightgalleryZoomJS | default "lib/lightgallery/plugins/zoom/lg-zoom.min.js" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Page" . "Data" | partial "store/script.html" -}}
{{- $config = dict "lightgallery" true | merge $config -}}
{{- end -}}
@@ -66,66 +79,71 @@
{{- /* Sharer.js */ -}}
{{- if $params.share.enable -}}
{{- $source := $cdn.sharerJS | default "lib/sharer/sharer.min.js" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Async" true "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Async" true "Defer" true | dict "Page" . "Data" | partial "store/script.html" -}}
{{- end -}}
{{- /* TypeIt */ -}}
{{- if .Store.Get "hasTyped" -}}
{{- $typeit := .Site.Params.typeit -}}
{{- $source := $cdn.typeitJS | default "lib/typeit/index.umd.js" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Scratch" $.Scratch "Data" | partial "scratch/script.html" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Page" . "Data" | partial "store/script.html" -}}
{{- $config = dict "speed" $typeit.speed "cursorSpeed" $typeit.cursorSpeed "cursorChar" $typeit.cursorChar "duration" $typeit.duration "loop" $typeit.loop | dict "typeit" | merge $config -}}
{{- end -}}
{{- /* KaTeX */ -}}
{{- $math := .Scratch.Get "math" -}}
{{- /* Mathematical formulas */ -}}
{{- $math := .Store.Get "math" -}}
{{- if $math.enable -}}
{{- $source := $cdn.katexCSS | default "lib/katex/katex.min.css" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Preload" true | dict "Scratch" .Scratch "Data" | partial "scratch/style.html" -}}
{{- $source := $cdn.katexJS | default "lib/katex/katex.min.js" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- $source := $cdn.katexAutoRenderJS | default "lib/katex/auto-render.min.js" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- if $math.copyTex -}}
{{- $source := $cdn.katexCopyTexJS | default "lib/katex/copy-tex.min.js" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- /* KaTeX */ -}}
{{- if (eq $math.type "katex") | and (.Store.Get "hasKaTeX") -}}
{{- $source := $cdn.katexCSS | default "lib/katex/katex.min.css" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Preload" true | dict "Page" . "Data" | partial "store/style.html" -}}
{{- /* Copy-tex extension */ -}}
{{- if $math.katex.copyTex -}}
{{- $source := $cdn.katexCopyTexJS | default "lib/katex/copy-tex.min.js" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Page" . "Data" | partial "store/script.html" -}}
{{- end -}}
{{- end -}}
{{- if $math.mhchem -}}
{{- $source := $cdn.katexMhchemJS | default "lib/katex/mhchem.min.js" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- /* MathJax */ -}}
{{- if eq $math.type "mathjax" -}}
{{/* TODO improve MathJax setup. e.g. content encryption, Twikoo math etc. */}}
{{- $mathjax := $math.mathjax -}}
{{- $source := "js/lib/load-mathjax.js" -}}
{{- $options := dict "targetPath" "js/lib/load-mathjax.min.js" "minify" hugo.IsProduction -}}
{{- $mathjaxOpts := $mathjax.options | default dict -}}
{{- $mathjaxOpts = dict "enableMenu" $mathjaxOpts.enablemenu | merge $mathjaxOpts -}}
{{- $params := dict
"cdn" $mathjax.cdn
"tex" ($mathjax.tex | default dict)
"packages" ($mathjax.packages | default dict)
"macros" ($mathjax.macros | default dict)
"loader" ($mathjax.loader | default dict)
"options" $mathjaxOpts
-}}
{{- $options = dict "params" $params | merge $options -}}
{{- if not hugo.IsProduction -}}
{{- $options = dict "sourceMap" "external" | merge $options -}}
{{- end -}}
{{- dict "Source" $source "Build" $options "Fingerprint" $fingerprint "Async" true "Defer" true | dict "Page" . "Data" | partial "store/script.html" -}}
{{- end -}}
{{- $delimiters := slice (dict "left" "$$" "right" "$$" "display" true) (dict "left" "\\[" "right" "\\]" "display" true) -}}
{{- $delimiters = $delimiters | append (dict "left" "\\begin{equation}" "right" "\\end{equation}" "display" true) -}}
{{- $delimiters = $delimiters | append (dict "left" "\\begin{equation*}" "right" "\\end{equation*}" "display" true) -}}
{{- $delimiters = $delimiters | append (dict "left" "\\begin{align}" "right" "\\end{align}" "display" true) -}}
{{- $delimiters = $delimiters | append (dict "left" "\\begin{align*}" "right" "\\end{align*}" "display" true) -}}
{{- $delimiters = $delimiters | append (dict "left" "\\begin{alignat}" "right" "\\end{alignat}" "display" true) -}}
{{- $delimiters = $delimiters | append (dict "left" "\\begin{alignat*}" "right" "\\end{alignat*}" "display" true) -}}
{{- $delimiters = $delimiters | append (dict "left" "\\begin{gather}" "right" "\\end{gather}" "display" true) -}}
{{- $delimiters = $delimiters | append (dict "left" "\\begin{CD}" "right" "\\end{CD}" "display" true) -}}
{{- if and $math.blockLeftDelimiter $math.blockRightDelimiter -}}
{{- $delimiters = $delimiters | append (dict "left" $math.blockLeftDelimiter "right" $math.blockRightDelimiter "display" true) -}}
{{- end -}}
{{- $delimiters = $delimiters | append (dict "left" "$" "right" "$" "display" false) (dict "left" "\\(" "right" "\\)" "display" false) -}}
{{- if and $math.inlineLeftDelimiter $math.inlineRightDelimiter -}}
{{- $delimiters = $delimiters | append (dict "left" $math.inlineRightDelimiter "right" $math.inlineRightDelimiter "display" false) -}}
{{- end -}}
{{- $config = dict "strict" false "delimiters" $delimiters | dict "math" | merge $config -}}
{{- end -}}
{{- /* mermaid */ -}}
{{- if .Store.Get "hasMermaid" -}}
{{- $config = dict "themes" .Site.Params.mermaid.themes | dict "mermaid" | merge $config -}}
<script type="module">
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs';
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11.3.0/dist/mermaid.esm.min.mjs';
// Style conflict with ZenUML
// import zenuml from 'https://cdn.jsdelivr.net/npm/@mermaid-js/mermaid-zenuml@0.2.0/dist/mermaid-zenuml.esm.min.mjs'
// await mermaid.registerExternalDiagrams([zenuml]);
window.mermaid = mermaid;
window.mermaid.themes = {{ .Site.Params.mermaid.themes }};
</script>
{{- end -}}
{{- /* ECharts */ -}}
{{- if .Store.Get "hasEcharts" -}}
{{- $source := $cdn.echartsJS | default "lib/echarts/echarts.min.js" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Page" . "Data" | partial "store/script.html" -}}
{{- $lightTheme := resources.Get "lib/echarts/theme/light.yml" | transform.Unmarshal -}}
{{- $darkTheme := resources.Get "lib/echarts/theme/dark.yml" | transform.Unmarshal -}}
{{- $config = dict "lightTheme" $lightTheme "darkTheme" $darkTheme | dict "echarts" | merge $config -}}
@@ -134,10 +152,10 @@
{{- /* Mapbox GL */ -}}
{{- if .HasShortcode "mapbox" -}}
{{- $source := $cdn.mapboxGLCSS | default "lib/mapbox-gl/mapbox-gl.css" -}}
{{- dict "Source" $source "Minify" true "Fingerprint" $fingerprint "Preload" true | dict "Scratch" .Scratch "Data" | partial "scratch/style.html" -}}
{{- dict "Source" $source "Minify" true "Fingerprint" $fingerprint "Preload" true | dict "Page" . "Data" | partial "store/style.html" -}}
{{- $source = $cdn.mapboxGLJS | default "lib/mapbox-gl/mapbox-gl.js" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- dict "Source" "lib/mapbox-gl/mapbox-gl-language.js" "Minify" true "Fingerprint" $fingerprint "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Page" . "Data" | partial "store/script.html" -}}
{{- dict "Source" "lib/mapbox-gl/mapbox-gl-language.js" "Minify" true "Fingerprint" $fingerprint "Defer" true | dict "Page" . "Data" | partial "store/script.html" -}}
{{- $config = dict "accessToken" $params.mapbox.accessToken "RTLTextPlugin" "https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-rtl-text/v0.2.0/mapbox-gl-rtl-text.js" | dict "mapbox" | merge $config -}}
{{- end -}}
@@ -145,23 +163,23 @@
{{- if .HasShortcode "music" -}}
{{- /* APlayer */ -}}
{{- $source := $cdn.aplayerCSS | default "lib/aplayer/APlayer.min.css" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Preload" true | dict "Scratch" .Scratch "Data" | partial "scratch/style.html" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Preload" true | dict "Page" . "Data" | partial "store/style.html" -}}
{{- $options := dict "targetPath" "lib/aplayer/dark.min.css" "enableSourceMap" true -}}
{{- dict "Source" "lib/aplayer/dark.scss" "ToCSS" $options "Fingerprint" $fingerprint | dict "Scratch" .Scratch "Data" | partial "scratch/style.html" -}}
{{- dict "Source" "lib/aplayer/dark.scss" "ToCSS" $options "Fingerprint" $fingerprint | dict "Page" . "Data" | partial "store/style.html" -}}
{{- $source := $cdn.aplayerJS | default "lib/aplayer/APlayer.min.js" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Page" . "Data" | partial "store/script.html" -}}
{{- /* MetingJS */ -}}
{{- $source := $cdn.metingJS | default "lib/meting/Meting.min.js" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Page" . "Data" | partial "store/script.html" -}}
{{- end -}}
{{- /* Cookie Consent */ -}}
{{- if .Site.Params.cookieconsent | and .Site.Params.cookieconsent.enable -}}
{{- $source := $cdn.cookieconsentCSS | default "lib/cookieconsent/cookieconsent.min.css" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint | dict "Scratch" .Scratch "Data" | partial "scratch/style.html" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint | dict "Page" . "Data" | partial "store/style.html" -}}
{{- $source := $cdn.cookieconsentJS | default "lib/cookieconsent/cookieconsent.min.js" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Page" . "Data" | partial "store/script.html" -}}
{{- $cookieconsentConfig := dict "popup" (dict "background" "#1aa3ff") "button" (dict "background" "#f0f0f0") | dict "theme" "edgeless" "palette" -}}
{{- $cookieconsentConfig = .Site.Params.cookieconsent | merge $cookieconsentConfig -}}
{{- $cookieconsentConfig = dict "message" ($cookieconsentConfig.content.message | default (T "assets.cookieconsentMessage")) "dismiss" ($cookieconsentConfig.content.dismiss | default (T "assets.cookieconsentDismiss")) "link" ($cookieconsentConfig.content.link | default (T "assets.cookieconsentLink")) | dict "content" | merge $cookieconsentConfig -}}
@@ -171,14 +189,14 @@
{{- /* PanguJS */ -}}
{{- if eq .Site.Params.pangu.enable true -}}
{{- $source := $cdn.panguJS | default "lib/pangu/pangu.min.js" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Page" . "Data" | partial "store/script.html" -}}
{{- $config = dict "pangu" .Site.Params.pangu | merge $config -}}
{{- end -}}
{{- /* Watermark */ -}}
{{- if eq .Site.Params.watermark.enable true -}}
{{- $source := $cdn.cellWatermarkJS | default "lib/cell-watermark/watermark.min.js" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Page" . "Data" | partial "store/script.html" -}}
{{- /* Hugo bug: case insensitive for `.Site.Params` */ -}}
{{- $config = dict "watermark" .Site.Params.watermark | merge $config -}}
{{- end -}}
@@ -190,27 +208,27 @@
{{- $cryptoEncBase64JS := $cdn.cryptoEncBase64JS | default "lib/crypto-js/enc-base64.js" -}}
{{- $cryptoSha256JS := $cdn.cryptoSha256JS | default "lib/crypto-js/sha256.js" -}}
{{- $xxhashWasmJS := $cdn.xxhashWasmJS | default "lib/xxhash-wasm/xxhash-wasm.js" -}}
{{- dict "Source" $cryptoCoreJS "Minify" true "Fingerprint" $fingerprint "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- dict "Source" $cryptoEncBase64JS "Minify" true "Fingerprint" $fingerprint "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- dict "Source" $cryptoSha256JS "Minify" true "Fingerprint" $fingerprint "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- dict "Source" $xxhashWasmJS "Fingerprint" $fingerprint "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- dict "Source" $cryptoCoreJS "Minify" true "Fingerprint" $fingerprint "Defer" true | dict "Page" . "Data" | partial "store/script.html" -}}
{{- dict "Source" $cryptoEncBase64JS "Minify" true "Fingerprint" $fingerprint "Defer" true | dict "Page" . "Data" | partial "store/script.html" -}}
{{- dict "Source" $cryptoSha256JS "Minify" true "Fingerprint" $fingerprint "Defer" true | dict "Page" . "Data" | partial "store/script.html" -}}
{{- dict "Source" $xxhashWasmJS "Fingerprint" $fingerprint "Defer" true | dict "Page" . "Data" | partial "store/script.html" -}}
{{- /* Decryption script */ -}}
{{- $options := dict "targetPath" "js/fixit-decryptor.min.js" "minify" hugo.IsProduction -}}
{{- if not hugo.IsProduction -}}
{{- $options = dict "sourceMap" "external" | merge $options -}}
{{- end -}}
{{- dict "Source" (resources.Get "js/fixit-decryptor.js") "Build" $options "Fingerprint" $fingerprint "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- dict "Source" (resources.Get "js/fixit-decryptor.js") "Build" $options "Fingerprint" $fingerprint "Defer" true | dict "Page" . "Data" | partial "store/script.html" -}}
{{- $config = dict "all" (isset $params "password") "shortcode" ($encryptPartial | default false) | dict "encryption" | merge $config -}}
{{- end -}}
{{- /* 不蒜子 */ -}}
{{- if .Site.Params.busuanzi.enable | and hugo.IsProduction -}}
{{- $source := .Site.Params.busuanzi.source | default "https://vercount.one/js" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Async" true "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Async" true "Defer" true | dict "Page" . "Data" | partial "store/script.html" -}}
{{- end -}}
{{- /* Site creation time */ -}}
{{- $siteTime := .Scratch.Get "siteTime" -}}
{{- $siteTime := .Site.Store.Get "siteTime" -}}
{{- if $siteTime.enable -}}
{{- with $siteTime.value -}}
{{- $config = dict "siteTime" . | merge $config -}}
@@ -244,27 +262,30 @@
{{- $paceCSS = printf "%v/pace-theme-default.min.css" . -}}
{{- end -}}
{{- end -}}
{{- dict "Source" $paceJS "Fingerprint" $fingerprint "Async" true "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- dict "Source" $paceCSS "Fingerprint" $fingerprint | dict "Scratch" .Scratch "Data" | partial "scratch/style.html" -}}
{{- dict "Source" $paceJS "Fingerprint" $fingerprint "Async" true "Defer" true | dict "Page" . "Data" | partial "store/script.html" -}}
{{- dict "Source" $paceCSS "Fingerprint" $fingerprint | dict "Page" . "Data" | partial "store/style.html" -}}
{{- /* To patch pace theme flat-top z-index error */ -}}
{{- if eq $.Site.Params.pace.theme "flat-top" -}}
{{- dict "Source" "lib/pace/pace-patch-flat-top.css" "Fingerprint" $fingerprint | dict "Scratch" .Scratch "Data" | partial "scratch/style.html" -}}
{{- dict "Source" "lib/pace/pace-patch-flat-top.css" "Fingerprint" $fingerprint | dict "Page" . "Data" | partial "store/style.html" -}}
{{- 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" -}}
{{- dict "Source" . "Fingerprint" $fingerprint | dict "Page" $ "Data" | partial "store/style.html" -}}
{{- end -}}
{{- range $params.library.js -}}
{{- dict "Source" . "Fingerprint" $fingerprint "Defer" true | dict "Scratch" $.Scratch "Data" | partial "scratch/script.html" -}}
{{- dict "Source" . "Fingerprint" $fingerprint "Defer" true | dict "Page" $ "Data" | partial "store/script.html" -}}
{{- end -}}
{{- with .Store.Get "styleArr" -}}
{{- $content := delimit . " " -}}
{{- $path := substr (md5 $.RelPermalink) 0 8 | printf "css/%v" -}}
{{- $options := printf "%v.min.css" $path | dict "targetPath" -}}
{{- dict "Content" $content "Path" (printf "%v.scss" $path) "ToCSS" $options | dict "Scratch" $.Scratch "Data" | partial "scratch/style.html" -}}
{{- dict "Content" $content "Path" (printf "%v.scss" $path) "ToCSS" $options | dict "Page" $ "Data" | partial "store/style.html" -}}
{{- end -}}
{{- /* Config script */ -}}
@@ -272,14 +293,14 @@
{{- if hugo.IsServer -}}
{{- $configJS = add $configJS "console.log('Page config:', window.config);" -}}
{{- end -}}
{{- $configJS | dict "Content" | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- $configJS | dict "Content" | dict "Page" . "Data" | partial "store/script.html" -}}
{{- /* Theme script */ -}}
{{- $options := dict "targetPath" "js/theme.min.js" "minify" hugo.IsProduction -}}
{{- if not hugo.IsProduction -}}
{{- $options = dict "sourceMap" "external" | merge $options -}}
{{- end -}}
{{- dict "Source" (resources.Get "js/theme.js") "Build" $options "Fingerprint" $fingerprint "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- dict "Source" (resources.Get "js/theme.js") "Build" $options "Fingerprint" $fingerprint "Defer" true | dict "Page" . "Data" | partial "store/script.html" -}}
{{- /* Custom Assets */ -}}
{{- block "custom-assets" . }}{{ end -}}
@@ -290,20 +311,20 @@
{{- if not hugo.IsProduction -}}
{{- $options = dict "sourceMap" "inline" | merge $options -}}
{{- end -}}
{{- dict "Source" . "Build" $options "Fingerprint" $fingerprint "Defer" true | dict "Scratch" $.Scratch "Data" | partial "scratch/script.html" -}}
{{- dict "Source" . "Build" $options "Fingerprint" $fingerprint "Defer" true | dict "Page" $ "Data" | partial "store/script.html" -}}
{{- end -}}
{{- with .Store.Get "scriptArr" -}}
{{- $content := delimit . "\n" -}}
{{- $targetPath := substr (md5 $.RelPermalink) 0 8 | printf "js/%v.js" -}}
{{- dict "Content" $content "Path" $targetPath "Defer" true | dict "Scratch" $.Scratch "Data" | partial "scratch/script.html" -}}
{{- dict "Content" $content "Path" $targetPath "Defer" true | dict "Page" $ "Data" | partial "store/script.html" -}}
{{- end -}}
{{- range (.Scratch.Get "this").style -}}
{{- range (.Store.Get "this").style -}}
{{- partial "plugin/style.html" . -}}
{{- end -}}
{{- range (.Scratch.Get "this").script -}}
{{- range (.Store.Get "this").script -}}
{{- partial "plugin/script.html" . -}}
{{- end -}}
+37
View File
@@ -0,0 +1,37 @@
{{- if (gt (len .Ancestors.Reverse) 1) | and (eq .Site.Params.breadcrumb.enable true) -}}
{{- $separator := .Site.Params.breadcrumb.separator | default "/" -}}
<nav aria-label="breadcrumb" class="breadcrumb-container{{ if .Site.Params.breadcrumb.sticky }} sticky{{ end }}">
<ol class="breadcrumb">
{{- range .Ancestors.Reverse -}}
{{- if .IsHome | and (not .Site.Params.breadcrumb.showHome) -}}
{{- continue -}}
{{- end -}}
{{- $title := "" -}}
{{- $capitalizeTitles := .Param "capitalizeTitles" -}}
{{- with .Description -}}
{{- $title = . -}}
{{- else -}}
{{- $title = cond $capitalizeTitles (title .LinkTitle) .LinkTitle -}}
{{- if .IsPage | and .Summary -}}
{{- $title = .Summary | plainify -}}
{{- end -}}
{{- end -}}
{{- $innerText := "" -}}
{{- if .IsHome -}}
{{- $innerText = T "single.home" -}}
{{- else -}}
{{- $innerText = (T (add .TranslationKey ".breadcrumbTitle")) | default (lower .LinkTitle | T) | default .LinkTitle -}}
{{- $innerText = cond ((.Param "breadcrumb.capitalize") | and $capitalizeTitles) (title $innerText) $innerText -}}
{{- end -}}
<li class="breadcrumb-item" data-separator="{{ $separator }}"><a href="{{ .RelPermalink }}" title="{{ $title }}">{{ $innerText }}</a></li>
{{- end -}}
{{- $currentText := (T (add .TranslationKey ".breadcrumbTitle")) | default (lower .LinkTitle | T) | default .LinkTitle -}}
{{- $currentText = cond ((.Param "breadcrumb.capitalize") | and (.Param "capitalizeTitles")) (title $currentText) $currentText -}}
<li class="breadcrumb-item active" data-separator="{{ $separator }}" aria-current="page">{{ $currentText }}</li>
</ol>
</nav>
{{- end -}}
@@ -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 -}}
@@ -6,7 +6,6 @@
{{- if ge .Config.limit 1 -}}
{{- $pages = $pages | first .Config.limit -}}
{{- end -}}
{{- $length := $pages.Len -}}
{{- printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>" | safeHTML }}
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
@@ -14,7 +13,13 @@
<title>{{ .Title }}</title>
<link>{{ .Permalink }}</link>
<description>{{ .Site.Params.description | default .Site.Title }}</description>
<generator>Hugo {{ hugo.Version }} &amp; FixIt {{ .Version }}</generator>
{{- if and (.Site.Params.feed.follow.feedId) (.Site.Params.feed.follow.userId) }}
<follow_challenge>
<feedId>{{ .Site.Params.feed.follow.feedId }}</feedId>
<userId>{{ .Site.Params.feed.follow.userId }}</userId>
</follow_challenge>
{{- end }}
<generator>Hugo {{ hugo.Version }} &amp; FixIt {{ hugo.Store.Get "version" }}</generator>
<language>{{ .Site.Language.LanguageCode }}</language>{{ with .Site.Params.author.email }}
<managingEditor>{{.}}{{ with $.Site.Params.author.name }} ({{ . }}){{ end }}</managingEditor>{{ end }}{{ with .Site.Params.author.email }}
<webMaster>{{ . }}{{ with $.Site.Params.author.name }} ({{ . }}){{ end }}</webMaster>{{ end }}{{ with .Site.Copyright }}
@@ -27,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 }}
@@ -54,14 +55,12 @@
{{- end }}
{{- if $fullText }}
<description>
{{- "<![CDATA[" | safeHTML }}
{{- $content := dict "Content" .Content "Ruby" $params.ruby "Fraction" $params.fraction "Fontawesome" $params.fontawesome | partial "function/content.html" }}
{{- /* {{- $content | replaceRE `<figure[^>]*>.*</figure>` "" | replaceRE `<img[^>]*( /)?>` "" | safeHTML -}} */ -}}
{{- with $image }}
{{- $content = add (printf "<img src=%q alt=%q referrerpolicy=%q>" . "featured image" "no-referrer") $content | safeHTML }}
{{- end }}
{{- $content | transform.XMLEscape | safeHTML }}
{{- "]]>" | safeHTML -}}
{{- $content | transform.XMLEscape | safeHTML -}}
</description>
{{- else }}
<description>{{ (.Summary | default .Description | default .Title) | transform.XMLEscape | safeHTML }}</description>
@@ -10,7 +10,7 @@
{{- if ne $footerConfig.powered.enable false -}}
<div class="footer-line powered{{ with $footerConfig.order.powered }} order-{{ . }}{{ end }}">
{{- $hugo := printf `<a href="https://gohugo.io/" target="_blank" rel="external nofollow noopener noreferrer" title="Hugo %v">{hugoLogo}Hugo</a>` hugo.Version -}}
{{- $theme := printf `<a href="https://github.com/hugo-fixit/FixIt" target="_blank" rel="external" title="FixIt %v">{themeLogo}FixIt</a>` (.Scratch.Get "version") -}}
{{- $theme := printf `<a href="https://github.com/hugo-fixit/FixIt" target="_blank" rel="external" title="FixIt %v">{themeLogo}FixIt</a>` (hugo.Store.Get "version") -}}
{{- if $footerConfig.powered.hugoLogo -}}
{{- $hugoLogo := printf `<img class="hugo-icon" src="%v" alt="Hugo logo" /> ` (resources.Get "images/hugo.svg" | minify).RelPermalink -}}
{{- $hugo = replace $hugo "{hugoLogo}" $hugoLogo -}}
@@ -42,7 +42,7 @@
{{- /* Author */ -}}
{{- if ne $footerConfig.author false -}}
<span class="author" itemprop="copyrightHolder">
{{ partial "plugin/link.html" (dict "Destination" ($.Site.Params.author.link | default (.Scratch.Get "homeRelPermalink")) "Content" .Site.Params.author.name) -}}
{{ partial "plugin/link.html" (dict "Destination" ($.Site.Params.author.link | default (.Site.Store.Get "homeRelPermalink")) "Content" .Site.Params.author.name) -}}
</span>
{{- end -}}
@@ -53,7 +53,7 @@
</div>
{{- end -}}
{{- $siteTime := .Scratch.Get "siteTime" -}}
{{- $siteTime := .Site.Store.Get "siteTime" -}}
{{- if $siteTime.enable -}}
<div class="footer-line statistics{{ with $footerConfig.order.statistics }} order-{{ . }}{{ end }}">
{{- if $siteTime.enable | and $siteTime.value -}}
@@ -14,8 +14,8 @@
{{- $content = partial "function/fontawesome.html" $content -}}
{{- end -}}
{{- $content = partial "function/checkbox.html" $content -}}
{{- $content = partial "function/task-lists.html" $content -}}
{{- $content = partial "function/marked-text.html" $content -}}
{{- $content = partial "function/escape.html" $content -}}
{{- end -}}
@@ -0,0 +1,17 @@
{{- /*
Format a number with a specific precision and add 'k' if it's greater than 1000
Usage: {{ partial "function/format-number" (dict "PRECISION" 2 "NUMBER" 5201314) }}
Example Output: 19980.52k
*/ -}}
{{- $number := .NUMBER -}}
{{- $precision := .PRECISION | default 1 -}}
{{- with $number -}}
{{- if ge . 1000 -}}
{{- $fmtNum := lang.FormatNumberCustom $precision (div . 1000.0) "- ." -}}
{{- $fmtNum = $fmtNum | strings.TrimSuffix "0" | strings.TrimSuffix "." -}}
{{- $number = printf "%vk" $fmtNum -}}
{{- end -}}
{{- end -}}
{{- return $number -}}

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