Compare commits

...

147 Commits

Author SHA1 Message Date
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
Cell f9dde8fd2c 🔖 Chore(release): 0.3.12 2024-09-28 14:28:55 +08:00
Cell 27a7605b49 🐛 Fix(ignore): fix typo
#505 #508
2024-09-27 17:34:21 +08:00
Cell 456db3851b 🚚 Feat: supersede markup.tableOfContents settings with params.page.toc 2024-09-27 17:10:17 +08:00
Cell c36d87fd84 ♻️ Refactor: color scheme checking and move data-theme to document element 2024-09-27 12:52:29 +08:00
Cell 954d86432f Feat: add custom partials options params.customPartials 2024-09-25 18:28:35 +08:00
Cell fabe057f61 🐛 Fix: mapbox page parameters do not take effect 2024-09-23 16:25:18 +08:00
Tim Yang 185c68035a Feat: more markers can be added to mapbox (#506)
* feat:  More markers can be added to mapbox

* 🐛 Fix: move mapbox param `markers` to **seventh** positional parameter

---------

Co-authored-by: Cell <1024@lruihao.cn>
2024-09-23 15:52:33 +08:00
Cell 9d0518eb85 📝 Docs: update hugo.toml 2024-09-14 11:31:09 +08:00
Chris Weyl b727c382bb 🎉 Add Credly as a "social"
...to make it easier to link people to all those delicious badges.
2024-09-14 08:57:39 +08:00
Cell 849d7d486d Revert "📝 Chore: update .gitattributes"
This reverts commit 72594d9612.
2024-09-12 15:00:14 +08:00
Cell 72594d9612 📝 Chore: update .gitattributes 2024-09-11 02:00:47 +08:00
Cell fad3c988de ⬆️ Chore(deps-dev): bump husky from 9.1.4 to 9.1.5
Co-authored-by: Lruihao <1024@lruihao.cn>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-10 17:49:00 +08:00
Cell b76e6af972 🐛 Fix: typo in typeit initialization
Oops! O><O||| 🍻
2024-09-10 17:39:35 +08:00
Cell 617e2df2e6 🔧 Chore: update typeit to v8.8.4 2024-09-10 17:36:19 +08:00
Cell dafc2665c3 Feat: add HTML support for profile subtitle 2024-09-10 14:23:00 +08:00
Cell de0dae97c1 🚀 Chore: migrate build scripts to fixit-releaser dev dependency 2024-09-06 20:36:30 +08:00
Cell b64908c9e2 🐛 Fix: RSS link target error in social links 2024-09-04 14:48:47 +08:00
Cell 1ca9fdb760 ♻️ Refactor: javascript output for inline scripts 2024-09-01 00:37:16 +08:00
Cell 9e67e259fb 🐛 Fix: style and script shortcodes missing values in page Scratch 2024-08-31 16:30:31 +08:00
Cell c2bcccc996 🚀 Chore: after running npm version or manually modifying the version number, skip the update FixIt internal version 2024-08-30 13:41:56 +08:00
Cell 4203b573cb 🔖 Chore(release): 0.3.11 2024-08-30 12:57:57 +08:00
Cell 5991958bca 🐛 Fix: FixIt theme internal version number error 2024-08-30 12:57:09 +08:00
Cell afc504e33a 🔖 Chore(release): 0.3.10 2024-08-30 11:19:23 +08:00
Cell c8081affa6 ⬆️ Chore(libs): update Valine from 1.5.1 to 1.5.2 2024-08-30 10:53:19 +08:00
Cell 1f22b538b5 Chore: simplified code 2024-08-30 10:42:51 +08:00
Cell 442ec84049 ⬆️ Chore: update min hugo version to 0.132.0 2024-08-29 22:45:00 +08:00
Cell 52184d96d4 💄 Style: update center-quote shortcode style 2024-08-29 22:37:31 +08:00
Cell 5dac03a90d 🌐 Feat: add translations for alerts 2024-08-29 22:30:06 +08:00
Cell e2cf5fe31d 💄 Style: add alert stylesheet 2024-08-29 22:30:06 +08:00
Cell 8798f5b51f 🎉 Feat: add blockquote render hook to support GitHub alerts markdown syntax
simpler callouts or admonitions sytax
2024-08-29 22:30:06 +08:00
Cell 3b99838980 ♻️ Refactor: icon plugin 2024-08-29 17:52:56 +08:00
Cell 5aaacec004 🐛 Fix: resources get match error for page images 2024-08-29 14:47:02 +08:00
Cell 349de54009 🐛 Fix: featuredimagepreview error in summary and RSS 2024-08-29 14:05:40 +08:00
Cell 312b6363dc Merge pull request #494 from hugo-fixit/content-encryption
🔒 Perf: enhance content encryption security
2024-08-29 11:20:34 +08:00
Cell a67efe41be 🔧 Chore: update version automatic update script 2024-08-29 11:17:38 +08:00
Cell 64529c99c8 📝 Docs(ignore): update memo 2024-08-29 10:54:50 +08:00
Cell ede47a2bae ♻️ Refactor: convert FixItDecryptor to ES6 Class 2024-08-29 10:49:51 +08:00
Cell b7ed9cac69 ♻️ Refactor: refactor content encryption 2024-08-29 10:24:16 +08:00
Cell ccce5b52fd 📈 Feat: remove noreferrer from friend links and version shortcode 2024-08-26 14:49:43 +08:00
Cell e7dd4c838c Chore: unified content encryption function 2024-08-26 11:22:45 +08:00
Cell 18643271f8 📝 Docs: update default outputs config 2024-08-26 11:03:28 +08:00
Cell 91f3c7c3cf 🐛 Fix: fix fixit-encryptor shortcode duplicate binding events 2024-08-26 10:58:34 +08:00
Cell 466bb7b7e9 🔒 Perf: use xxHash instead of md5 to calculate the hash value of a password
Update min hugo version to 0.129.0 for using xxHash function
2024-08-25 13:48:28 +08:00
Cell 3ffef8acb0 ♻️ Refactor: refactor the feed and search features (#490)
* 🔍 Refactor: add JSON feed support and refactor output formats build in FixIt

Close #475

* 🚚 Feat: migrate index templates to layouts/_default folder and home.[name].html

* 📝 Style(ignore): fix typo

* 🚚 Chore: migrate index templates to default home templates

* 🚚 Chore: migrate section templates to layouts/section folder

*  Feat: add JSON feed support for section pages (#475)

* 🚧 Feat: add common template for JSON feed (#475)

* 🚧 Feat: add JSON feed support for section and term list pages

* 🚀 Chore: fix git stage error in update-version script

*  Perf: add front matter hiddenFromFeed for JSON feed (#475)

* 🔍 Feat: add tags attribute for JSON feed (#475)

* ♻️ Refactor: refactor RSS feed templates

Close #488

* 🚧 WIP: rename json-feed.html to json.html

* 🚧 Feat: revert single.md

*  Perf: enhance JSON feed 1.1 compatibility

* ♻️ Refactor: refactor post author map getting

*  WIP: add featured image support in feed

* 📝 Docs: update README and screenshot

* 🔧 Chore: update changelog template

* 🚧 WIP: add feed scoped config for section and list

* 🔥 Feat: migrate JSON feed to hugo-fixit/hugo-json-feed

Close hugo-fixit/hugo-json-feed#1

* 🚚 Feat: remove front matter hiddenFromRss and rssFullText,  add  front matter hiddenFromFeed
2024-08-24 17:30:31 +08:00
Cell 6a83650506 Feat: add post navigation config and remove params.Site.Params.navigationReverse
Closes #480
2024-08-11 16:30:01 +08:00
Cell 1c84791db9 🔥 Feat: migrate mobile devtools to a single compenent (#474) 2024-08-10 11:49:36 +08:00
Cell 24873c5e99 🚸 Chore: update FixIt theme version detection in dev mode 2024-08-09 10:40:09 +08:00
Cell 51d64cb152 📝 Docs(ignore): update README 2024-08-08 10:17:11 +08:00
Cell 94553e9b8e 📝 Docs: update CONTRIBUTING.md 2024-08-06 17:30:47 +08:00
Cell 656f00b6a4 🚀 Chore: optimize development process: automatically update FixIt version 2024-08-06 17:30:32 +08:00
Cell 9a1b4570a7 💄 Style: update common style 2024-08-05 15:48:47 +08:00
Cell 976db36bc8 Feat: add more params for typeit shortcodes
resolves #483
2024-08-04 12:30:06 +08:00
Cell c0942a92b9 Feat: open more custom blocks (#479)
- custom-comment
- custom-post__footer:before
- custom-post__footer:after
2024-08-03 12:20:29 +08:00
Cell 0a5007921a 🍱 Chore: update screenshot and thumbnail 2024-08-01 15:12:54 +08:00
Cell a482e14bd5 🐛 Fix(ignore): fix bug in dev ed2f5f6d 2024-08-01 10:05:18 +08:00
Cell 9109ef22e2 Perf(ignore): remove busuanzi.core and add busuanzi.source (#472) 2024-07-30 16:40:41 +08:00
Cell ed2f5f6d10 ♻️ Refactor: refactor page style with CSS round function
Resolved #482
2024-07-29 20:10:40 +08:00
Cell 4065ce606a Perf: disable PWA in the built-in development server 2024-07-28 23:12:48 +08:00
Cell 72a77c2fc5 Perf(ignore): disable busuanzi in dev environment 2024-07-28 23:09:16 +08:00
Navjot Singh 291364255c Block AI Bots and crawlers 2024-07-28 17:24:16 +08:00
Cell 66b86d97cf 💄 Style: change font size of the Collection List and TOC 2024-07-28 17:11:45 +08:00
Cell 16c903fac9 🐛 Fix: fix rendering errors caused by decimal points in page width styles
Closes giscus/giscus#1426
2024-07-28 16:18:23 +08:00
Cell 7c85205519 :bug :Fix: heading front matter is not effective 2024-07-28 14:25:45 +08:00
Cell 7c67b90acf ♻️ Refactor: deprecate params.ibruce in favor of params.busuanzi powered by Vercount
Resolve #472
Close EvanNotFound/vercount#10
2024-07-28 13:34:53 +08:00
Cell 6c752c1bbd 📝 Docs(ignore): update zsxq link 2024-07-26 16:25:19 +08:00
Cell b8ecfc1127 💄 Style: revert timeline animation to fade style 2024-07-25 11:33:23 +08:00
Tim a0b4b81fd6 style: 💄 change the icon of edit button in code block header to fa-pen-to-square 2024-07-25 09:34:56 +08:00
164 changed files with 2959 additions and 1997 deletions
-19
View File
@@ -1,19 +0,0 @@
{
"output": "CHANGELOG.md",
"template": ".auto-changelog/template.hbs",
"handlebarsSetup": ".auto-changelog/setup.js",
"sortCommits": "relevance",
"commitLimit": false,
"ignoreCommitPattern": "\\(ignore\\)",
"replaceText": {
"^(Feat|feat):": ":sparkles: Feat:",
"^(Fix|fix):": ":bug: Fix:",
"^(Build|build):": ":hammer: Build:",
"^(Refactor|refactor):": ":recycle: Refactor:",
"^(Style|style):": ":lipstick: Style:",
"^(Perf|perf):": ":zap: Perf:",
"^(Test|test):": ":white_check_mark: Test:",
"^(Docs|docs):": ":memo: Docs:",
"^(Chore|chore):": ":wrench: Chore:"
}
}
-31
View File
@@ -1,31 +0,0 @@
// Custom Handlebars helpers
module.exports = function (Handlebars) {
/**
* Handlebars helper to replace a string with another string
* @param {String} context the string to replace
* @param {Object} options
* @param {String} options.hash.from the string to replace
* @param {String} options.hash.to the string to replace with
* @example {{replace "foo bar" from="foo" to="baz"}} => "baz bar"
*/
Handlebars.registerHelper('replace', function (context, options) {
return context.replace(options.hash.from, options.hash.to)
})
/**
* Handlebars helper to convert a name to a GitHub username
* @param {String} context name to convert
* @param {Object} options
* @param {Boolean} [options.hash.linked=true] whether to return a linked username
* @example {{githubUser "Cell"}} => "Lruihao"
*/
Handlebars.registerHelper('githubUser', function (context, { hash: { linked = false }}) {
const map = {
'Cell': "Lruihao",
}
const username = map[context] || context
if (linked) {
return `[@${username}](https://github.com/${username})`
}
return `@${username}`
})
}
-70
View File
@@ -1,70 +0,0 @@
# Changelog
All notable changes to this project will be documented in this file.
{{!-- if need, set replaceText in config.json "#(\\d+)": "[#$1](https://github.com/hugo-fixit/FixIt/issues/$1)" --}}
{{#each releases}}
{{#if href}}
## [{{title}}]({{href}}){{#if tag}} - {{isoDate}}{{/if}}
{{else}}
## {{title}}{{#if tag}} - {{isoDate}}{{/if}}
{{/if}}
{{#if summary}}
{{summary}}
{{/if}}
{{!-- List commits with `Breaking change: ` somewhere in the message --}}
{{#commit-list commits heading='### :boom: Breaking Changes' message='^(Breaking change|BREAKING CHANGE):'}}
- {{subject}} [`{{shorthash}}`]({{href}}) by {{githubUser author}}
{{/commit-list}}
{{!-- List commits that add new features, but exclude those that have `:sparkles:` in the message --}}
{{#commit-list commits heading='### :tada: New Features' message='(:tada:|Feat:|feat:)' exclude='^:sparkles:'}}
- {{subject}} [`{{shorthash}}`]({{href}}) by {{githubUser author}}
{{/commit-list}}
{{!-- List commits that enhance existing features, but exclude those that have `:tada:` in the message --}}
{{#commit-list commits heading='### :sparkles: Enhancements' message='(:sparkles:|Feat:|feat:|Perf:|perf:)' exclude='^:tada:'}}
- {{subject}} [`{{shorthash}}`]({{href}}) by {{githubUser author}}
{{/commit-list}}
{{!-- List commits that bug fixes --}}
{{#commit-list commits heading='### :bug: Bug Fixes' message='(:bug:|Fix:|fix:)'}}
- {{subject}} [`{{shorthash}}`]({{href}}) by {{githubUser author}}
{{/commit-list}}
{{!-- List commits that improve the documentation --}}
{{#commit-list commits heading='### :memo: Documentation' message='(:memo:|Docs:|docs:)'}}
- {{subject}} [`{{shorthash}}`]({{href}}) by {{githubUser author}}
{{/commit-list}}
{{!-- List other changes commits --}}
{{#commit-list commits heading='### :wrench: Other Changes' message='(Refactor:|refactor:|Style:|style:|Test:|test:|Chore:|chore:|Build:|build:)'}}
- {{subject}} [`{{shorthash}}`]({{href}}) by {{githubUser author}}
{{/commit-list}}
**Full Changelog**: {{href}}
---
### Uncategorized
{{#if merges}}
#### Merged pull requests
{{#each merges}}
{{!-- {{#if href}}[`#{{id}}`]({{href}}){{/if}} --}}
- {{#if commit.breaking}}**Breaking change:** {{/if}}{{message}} by {{githubUser author}} in {{#if id}}#{{id}}{{/if}}
{{/each}}
{{/if}}
{{#if fixes}}
#### Closed issues
{{#each fixes}}
- {{#if commit.breaking}}**Breaking change:** {{/if}}{{commit.subject}}{{#each fixes}} {{#if id}}#{{id}}{{/if}}{{/each}} by {{githubUser commit.author}}
{{/each}}
{{/if}}
{{/each}}
+1 -1
View File
@@ -18,4 +18,4 @@ jobs:
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
+1
View File
@@ -0,0 +1 @@
npx fixit-releaser version --dev
+1
View File
@@ -0,0 +1 @@
v18
+20 -15
View File
@@ -1,5 +1,7 @@
# CONTRIBUTING
Make sure that you follow [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) while contributing and engaging in the discussions.
## How to contribute to this project
First, fork this repository by clicking the fork button.
@@ -43,22 +45,21 @@ Finally, create a new pull request at <https://github.com/hugo-fixit/FixIt/pulls
| :-- | :-- |
| master | _The branch open to the public and release versions_ |
| dev | _The development branch of the next version_ |
| RC branch | _The release candidate branch of the next version, e.g. v0.2.12-RC_ |
| single feature | _The branch to enhancements or fixes_ |
### Merge events
| event | merge |
| :-- | :-- |
| release | **RC branch => master:** `--rebase` |
| release | **dev => master:** `--rebase` |
| PR | **others:master => master:** `--rebase` |
| single feature| **feature branch => RC branch:** `--merge` |
| single feature| **feature branch => dev/master:** `--merge` |
### Commit message
#### Format
`[{emoji} ]{type}[({module})]: {subject within 50 words}[ (#{issue/pull request})]`
`[{emoji} ]{type}[({scope})]: {subject within 50 words}[ (#{issue/pull request})]`
example:
@@ -73,15 +74,19 @@ example:
#### Message
| Emoji | Type | Example | Description (No Ambiguous) |
| :-------------------------------------------- | :------- | :----------------------------------------------------------- | :----------------------------------------------------------- |
| :tada: <br>:sparkles: | Feat | Feat: add {feature} | new feature |
| :truck: | | Feat: adjust/migrate {feature name}, {change details} | For the adjustment feature, it is necessary to describe the current situation (before) and after adjustment (after) |
| :fire: | | Feat: delete {feature name}, {deletion reason} | If the feature is deleted, the reason for deletion must be explained |
| :bug: <br>:construction: <br>:rotating_light: | Fix | Fix: fix {bug description} | Fix known bugs |
| :art: <br>:lipstick: <br>:pencil2: | Style | Style: Typesetting/CSS style {optimizing content} | Changes that do not affect code operation, such as code layout and style change |
| Emoji | Type | Example | Description (No Ambiguous) |
| :-------------------------------------------- | :------- | :----------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------- |
| :tada:<br>:sparkles: | Feat | Feat: add {feature} | new feature |
| :truck: | | Feat: adjust/migrate {feature name}, {change details} | For the adjustment feature, it is necessary to describe the current situation (before) and after adjustment (after) |
| :fire: | | Feat: delete {feature name}, {deletion reason} | If the feature is deleted, the reason for deletion must be explained |
| :bug: <br>:construction: <br>:rotating_light: | Fix | Fix: fix {bug description} | Fix known bugs |
| :art: <br>:lipstick: <br>:pencil2: | Style | Style: Typesetting/CSS style {optimizing content} | Changes that do not affect code operation, such as code layout and style change |
| :recycle: | Refactor | Refactor: override {feature name} | It is neither a new function nor a code change to fix a bug. Simply rewriting the code of a function does not affect the function result |
| :zap: | Perf | Perf: improve performance {function name}, {improve content} | Optimize code performance |
| :rewind: | Revert | Revert: restore version {commit message of restore version} | Restore the version of one commit |
| :pencil: <br>:pencil2: | Docs | Docs: revise comments/update documents | Adjustment of documents and notes |
| :wrench: | Chore | Chore: update plugin version | Changes in the construction process or auxiliary tools |
| :zap: | Perf | Perf: improve performance {function name}, {improve content} | Optimize code performance |
| :rewind: | Revert | Revert: restore version {commit message of restore version} | Restore the version of one commit |
| :pencil:<br>:pencil2: | Docs | Docs: revise comments/update documents | Adjustment of documents and notes |
| :wrench: | Chore | Chore: update plugin version | Changes in the construction process or auxiliary tools |
> [!note]
> The change log is automatically generated based on the commit message.\
> Use `Chore` type or add `(ignore)` scope to ignore including in.
+72 -44
View File
@@ -1,36 +1,61 @@
# FixIt Theme | Hugo
<!-- 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>
<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
[![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.127.0-ff4088?style=flat&logo=hugo)](https://gohugo.io/)
[![Hugo](https://img.shields.io/badge/Hugo-%5E0.134.1-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)
👉 English README | [简体中文说明](README.zh-cn.md)
> «FixIt» is a **clean**, **elegant** but **advanced** blog theme for [Hugo](https://gohugo.io/).
[FixIt](https://github.com/hugo-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.
It is based on the original [LoveIt Theme](https://github.com/dillonzq/LoveIt), [KeepIt Theme](https://github.com/Fastbyte01/KeepIt) and [LeaveIt Theme](https://github.com/liuzc/LeaveIt).[^1]
## Live Preview
![Hugo Theme FixIt](https://fixit.lruihao.cn/images/apple-devices-preview.webp)
<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>.
</p>
## Getting started
## Documentation
1. [Installation](https://fixit.lruihao.cn/documentation/installation/)
2. [Getting Started](https://fixit.lruihao.cn/documentation/getting-started/)
3. [Content Management](https://fixit.lruihao.cn/documentation/content-management/)
4. [Advanced Usage](https://fixit.lruihao.cn/documentation/advanced/)
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.
Alternatively, you can run the [documentation site](https://fixit.lruihao.cn/) locally. For more details, see [hugo-fixit/docs](https://github.com/hugo-fixit/docs).
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
- [hugo-fixit/hugo-fixit-start](https://github.com/hugo-fixit/hugo-fixit-start/generate)
- [hugo-fixit/hugo-fixit-start1](https://github.com/hugo-fixit/hugo-fixit-start1/generate)
- [hugo-fixit/docs](https://github.com/hugo-fixit/docs/generate)
- [Lruihao/hugo-blog](https://github.com/Lruihao/hugo-blog/generate)
Click the following links to generate a new repository with template:
## Who used FixIt
| 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] |
To see this theme in action, here are some [live demo sites](https://fixit.lruihao.cn/friends/) which are rendered with **FixIt** theme.
[starter]: https://github.com/hugo-fixit/hugo-fixit-starter
[starter:generate]: https://github.com/hugo-fixit/hugo-fixit-starter/generate
[starter1]: https://github.com/hugo-fixit/hugo-fixit-starter1
[starter1:generate]: https://github.com/hugo-fixit/hugo-fixit-starter1/generate
[docs]: https://github.com/hugo-fixit/docs
[docs:generate]: https://github.com/hugo-fixit/docs/generate
[lruihao-blog]: https://github.com/Lruihao/hugo-blog
[lruihao-blog:generate]: https://github.com/Lruihao/hugo-blog/generate
## Why choose FixIt
I don't know why 🤷
<!-- Too lazy to write... -->
## Features
@@ -40,6 +65,11 @@ To see this theme in action, here are some [live demo sites](https://fixit.lruih
- 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
@@ -77,7 +107,8 @@ To see this theme in action, here are some [live demo sites](https://fixit.lruih
- **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/) or CSE
- **Custom Search Engine (CSE)** supported by [Google](https://programmablesearchengine.google.com/)
- **Twemoji** supported
- Automatically **highlighting** code
- **Copy code** to clipboard with one click
@@ -95,12 +126,12 @@ To see this theme in action, here are some [live demo sites](https://fixit.lruih
- Kinds of **admonitions** shortcode
- **Custom style** shortcode
- **Custom script** shortcode
- Open more **custom blocks**
- **Animated typing** supported by [TypeIt](https://typeitjs.com/)
- **Cookie consent banner** supported by [cookieconsent](https://github.com/osano/cookieconsent)
- **Web Watermark** supported by [cell-watermark](https://github.com/Lruihao/watermark)
- **Chinese typesetting** supported by [pangu.js](https://github.com/vinta/pangu.js)
- Options to **cache remote image** locally
- High **extensibility**
- ...
### Theme Components
@@ -133,27 +164,30 @@ FixIt supports the following languages:
All feedback is welcome! Head over to the [discussions][discussions], [Pull requests][pulls] and [issues][issues] tracker.
| Community | Description |
| :------------------------- | :------------------------------- |
| [Discussions][discussions] | Official GitHub discussion forum |
| [FixIt QQ group][qq-group] | Official QQ group: `814031017` |
| [Hugo FixIt Planet][zsxq] | Official Knowledge Planet |
| Official Community | Description |
| :-------------------------- | :------------------------------ |
| [Discussions][discussions] | GitHub discussion forum |
| [FixIt WeChat group][wx-mp] | Follow and reply "FixIt" to get |
| [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
[qq-group]: https://qm.qq.com/cgi-bin/qm/qr?k=awbwdTtSQ_-H5QGzeJxdWgv6JMbNehNM&jump_from=webapi
[zsxq]: https://t.zsxq.com/oZYCt
[zsxq]: https://t.zsxq.com/GgKEW
[wx-mp]: https://lruihao.cn/images/qr-wx-mp.webp
## Contributing
- [Roadmap of FixIt](https://github.com/orgs/hugo-fixit/projects/2)
We welcome you to join the development of FixIt. Please see [contributing document](/CONTRIBUTING.md). 🤗
Please see [CONTRIBUTING.md](CONTRIBUTING.md) for getting started with the contribution.
Also, we welcome Issue or PR to our [official-components](https://github.com/hugo-fixit).
Make sure that you follow [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) while contributing and engaging in the discussions.
**When contributing, please first discuss the change you wish to make via an issue on this repository before making the actual change**.
> [!note]
> When contributing, please first discuss the change you wish to make via a discussion on this repository before making the actual change.
## Acknowledgements
@@ -186,6 +220,7 @@ Thanks to all the [contributors](https://github.com/hugo-fixit/FixIt/graphs/cont
- [cookieconsent](https://github.com/osano/cookieconsent)
- [cell-watermark](https://github.com/Lruihao/watermark)
- [不蒜子](http://busuanzi.ibruce.info/)
- [Vercount](https://github.com/EvanNotFound/vercount)
- [pangu.js](https://github.com/vinta/pangu.js)
- [Artalk](https://artalk.js.org/)
- [Waline](https://waline.js.org/)
@@ -193,9 +228,8 @@ Thanks to all the [contributors](https://github.com/hugo-fixit/FixIt/graphs/cont
- [github-corners](https://github.com/tholman/github-corners)
- [giscus](https://giscus.app/)
- [crypto-js](https://github.com/brix/crypto-js)
- [vConsole](https://github.com/Tencent/vConsole)
- [eruda](https://github.com/liriliri/eruda)
- [pace](https://github.com/CodeByZach/pace)
- [xxhash-wasm](https://github.com/jungomi/xxhash-wasm)
</details>
@@ -209,22 +243,16 @@ 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.
## Author
Follow [Lruihao](https://github.com/Lruihao "Follow me on GitHub")
FixIt is licensed under the **MIT** license. Check the [LICENSE file](/LICENSE) for details.
## Sponsor
[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/hugo-fixit/FixIt)
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)
Don't forget to leave a ⭐️ if you like this theme, thanks!
## Author
[^1]: The theme name is interesting: "leave it, keep it, love it, fix it". Appears and leaves, loves but cannot keep. Doesn't it look like that damn love and BUG? 🤣
[Lruihao](https://github.com/Lruihao "Follow me on GitHub")
+76 -48
View File
@@ -1,36 +1,61 @@
# FixIt 主题 | Hugo
<!-- 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>
<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
[![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.127.0-ff4088?style=flat&logo=hugo)](https://gohugo.io/)
[![Hugo](https://img.shields.io/badge/Hugo-%5E0.134.1-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)
👉 [English README](README.md) | 简体中文说明
> «FixIt» 是一个**简洁**、**优雅**且**高效**的 [Hugo](https://gohugo.io/) 博客主题。
[FixIt](https://github.com/hugo-fixit/FixIt) 是一个**简洁**、**优雅**且**高效**的 [Hugo](https://gohugo.io/) 博客主题。
它的原型基于 [LoveIt](https://github.com/dillonzq/LoveIt) 主题,[KeepIt](https://github.com/Fastbyte01/KeepIt) 主题和 [LeaveIt](https://github.com/liuzc/LeaveIt) 主题。
它的原型基于 [LoveIt 主题](https://github.com/dillonzq/LoveIt)[KeepIt 主题](https://github.com/Fastbyte01/KeepIt) 和 [LeaveIt 主题](https://github.com/liuzc/LeaveIt)。[^1]
## 即时预览
![Hugo Theme FixIt](https://fixit.lruihao.cn/images/apple-devices-preview.webp)
<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>。
</p>
## 主题文档
1. [安装篇](https://fixit.lruihao.cn/zh-cn/documentation/installation/)
2. [入门篇](https://fixit.lruihao.cn/zh-cn/documentation/getting-started/)
3. [内容管理](https://fixit.lruihao.cn/zh-cn/documentation/content-management/)
4. [进阶篇](https://fixit.lruihao.cn/zh-cn/documentation/advanced/)
前往 [快速上手](https://fixit.lruihao.cn/zh-cn/documentation/getting-started/quick-start/) 页面,了解如何使用 FixIt 主题创建一个新网站的详细步骤。
或者在本地运行 [文档站点](https://fixit.lruihao.cn/zh-cn/),更多细节详见 [hugo-fixit/docs](https://github.com/hugo-fixit/docs)
大纲:[安装篇](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/)
## 模板仓库
- [hugo-fixit/hugo-fixit-start](https://github.com/hugo-fixit/hugo-fixit-start/generate)
- [hugo-fixit/hugo-fixit-start1](https://github.com/hugo-fixit/hugo-fixit-start1/generate)
- [hugo-fixit/docs](https://github.com/hugo-fixit/docs/generate)
- [Lruihao/hugo-blog](https://github.com/Lruihao/hugo-blog/generate)
点击以下链接使用模板生成一个新的仓库:
## 谁在用 FixIt
| 模板 | 仓库 | 生成链接 |
| :---------------------------------- | :-------------------------------- | :-------------------------------: |
| 基于 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] |
为了直观地浏览主题特性,这里有一些基于 **FixIt** 主题渲染的 [预览网站](https://fixit.lruihao.cn/zh-cn/friends/)。
[starter]: https://github.com/hugo-fixit/hugo-fixit-starter
[starter:generate]: https://github.com/hugo-fixit/hugo-fixit-starter/generate
[starter1]: https://github.com/hugo-fixit/hugo-fixit-starter1
[starter1:generate]: https://github.com/hugo-fixit/hugo-fixit-starter1/generate
[docs]: https://github.com/hugo-fixit/docs
[docs:generate]: https://github.com/hugo-fixit/docs/generate
[lruihao-blog]: https://github.com/Lruihao/hugo-blog
[lruihao-blog:generate]: https://github.com/Lruihao/hugo-blog/generate
## 为什么选择 FixIt
我也不知道为什么 🤷
<!-- 懒的写…… -->
## 特性
@@ -40,6 +65,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**
@@ -77,7 +107,8 @@
- 支持**二级菜单**
- 支持**内容加密**(页面、局部)
- 支持**友情链接**的页面模板
- 支持基于 [algolia](https://www.algolia.com/)[Fuse.js](https://fusejs.io/) 的**搜索**
- 支持基于 [algolia](https://www.algolia.com/)[Fuse.js](https://fusejs.io/)**CSE** 的**搜索**
- 支持基于 [Google](https://programmablesearchengine.google.com/) 的**自定义搜索引擎 (CSE)**
- 支持 **Twemoji**
- 支持**代码高亮**
- 一键**复制代码**到剪贴板
@@ -95,17 +126,17 @@
- 支持多种**注释**的 shortcode
- 支持**自定义样式**的 shortcode
- 支持**自定义脚本**的 shortcode
- 支持**自定义模板块**
- 支持基于 [TypeIt](https://typeitjs.com/) 的**打字动画** shortcode
- 支持基于 [cookieconsent](https://github.com/osano/cookieconsent) 的 **Cookie 许可横幅**
- 支持基于 [cell-watermark](https://github.com/Lruihao/watermark) 的**网页水印**
- 支持基于 [pangu.js](https://github.com/vinta/pangu.js) 的**中文排版**
- 支持本地**缓存远程图床图片**
- 高**扩展性**
- ……
### 主题组件
FixIt 主题旨在在 **简洁性****可扩展性** 之间取得平衡。为此,我们开发了一系列额外的 [Hugo 主题组件](https://fixit.lruihao.cn/zh-cn/components/) 供用户选择。
FixIt 主题旨在在**简洁性**和**可扩展性**之间取得平衡。为此,我们开发了一系列额外的 [Hugo 主题组件](https://fixit.lruihao.cn/zh-cn/components/) 供用户选择。
## 多语言和国际化
@@ -129,35 +160,38 @@ FixIt 支持下列语言:
[语言兼容性](https://fixit.lruihao.cn/zh-cn/theme-documentation-basics/#language-compatibility)
## 镜像
Gitee 镜像仓库:<https://gitee.com/lruihao/FixIt>
## 社区支持
所有的反馈都是欢迎的!详见 [Discussions][discussions]、[Pull requests][pulls] 和 [Issues][issues]。
| 社区 | 说明 |
| :--------------------------- | :---------------------- |
| [Discussions][discussions] | 官方 GitHub 讨论区 |
| [FixIt 主题交流群][qq-group] | 官方 QQ 群:`814031017` |
| [Hugo FixIt 星球][zsxq] | 官方知识星球 |
| 官方社区 | 说明 |
| :--------------------------------- | :------------------------------ |
| [Discussions][discussions] | GitHub 讨论区 |
| [FixIt 主题交流群(微信)][wx-mp] | 关注「菠菜眾長」回复“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
[qq-group]: https://qm.qq.com/cgi-bin/qm/qr?k=awbwdTtSQ_-H5QGzeJxdWgv6JMbNehNM&jump_from=webapi
[zsxq]: https://t.zsxq.com/oZYCt
[zsxq]: https://t.zsxq.com/GgKEW
[wx-mp]: https://lruihao.cn/images/qr-wx-mp.webp
## 参与贡献
- [Hugo FixIt 路线图](https://github.com/orgs/hugo-fixit/projects/2)
我们欢迎你加入 FixIt 的开发,贡献出你的一份力量。请看开源 [贡献指南](/CONTRIBUTING.md)。 🤗
请参阅 [CONTRIBUTING.md](CONTRIBUTING.md) 以了解贡献该项目的基本信息
你也可以随时向我们的 [官方插件](https://github.com/hugo-fixit) 提交 Issue 或 Pull Request
确保在贡献和参与讨论时遵守 [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)。
**贡献时,请先通过此存储库上的问题讨论你希望进行的更改,然后再进行实际更改**
## 镜像
- Gitee 镜像仓库:<https://gitee.com/lruihao/FixIt>
> [!note]
> 在贡献时,请先通过此存储库上的讨论来讨论你希望进行的更改,然后再进行实际更改。
## 致谢
@@ -190,6 +224,7 @@ FixIt 支持下列语言:
- [cookieconsent](https://github.com/osano/cookieconsent)
- [cell-watermark](https://github.com/Lruihao/watermark)
- [不蒜子](http://busuanzi.ibruce.info/)
- [Vercount](https://github.com/EvanNotFound/vercount)
- [pangu.js](https://github.com/vinta/pangu.js)
- [Artalk](https://artalk.js.org/)
- [Waline](https://waline.js.org/)
@@ -197,9 +232,8 @@ FixIt 支持下列语言:
- [github-corners](https://github.com/tholman/github-corners)
- [giscus](https://giscus.app/zh-CN)
- [crypto-js](https://github.com/brix/crypto-js)
- [vConsole](https://github.com/Tencent/vConsole)
- [eruda](https://github.com/liriliri/eruda)
- [pace](https://github.com/CodeByZach/pace)
- [xxhash-wasm](https://github.com/jungomi/xxhash-wasm)
</details>
@@ -213,22 +247,16 @@ FixIt 支持下列语言:
## 许可协议
FixIt 根据 **MIT** 许可协议授权。更多信息请查看 [LICENSE 文件](LICENSE)。
## 作者
Follow [Lruihao](https://github.com/Lruihao "在 GitHub 上关注我")
FixIt 根据 **MIT** 许可协议授权。更多信息请查看 [LICENSE 文件](/LICENSE)。
## 赞助支持
[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/hugo-fixit/FixIt)
如果你喜爱这个主题,请考虑给我买杯咖啡 ☕️,谢谢!
- [微信支付](images/wechatpay.jpg)
- [支付宝](images/alipay.jpg)
- [微信支付](/images/wechatpay.jpg)
- [支付宝](/images/alipay.jpg)
- [PayPal](https://paypal.me/Lruihao)
如果你喜欢这个主题,别忘了留下一颗 ⭐️ 哦,谢谢!
## 作者
[^1]: 主题名称趣谈:“leave it, keep itlove itfix it”。出现又离开,爱而不得。这像不像那该死的爱情和 BUG 呢?🤣
[Lruihao](https://github.com/Lruihao "在 GitHub 上关注我")
+1 -1
View File
@@ -20,8 +20,8 @@ categories:
- draft
hiddenFromHomePage: false
hiddenFromSearch: false
hiddenFromRss: false
hiddenFromRelated: false
hiddenFromFeed: false
summary:
resources:
- name: featured-image
+1 -1
View File
@@ -20,8 +20,8 @@ categories:
- draft
hiddenFromHomePage: false
hiddenFromSearch: false
hiddenFromRss: false
hiddenFromRelated: false
hiddenFromFeed: false
summary:
resources:
- name: featured-image
+5
View File
@@ -0,0 +1,5 @@
---
title: {{ T "assets.search" }}
layout: search
date: {{ .Date }}
---
+1 -1
View File
@@ -30,7 +30,7 @@ body {
color: $global-font-color;
@include overflow-wrap(break-word);
&[data-theme='dark'] {
[data-theme='dark'] & {
color: $global-font-color-dark;
background-color: $global-background-color-dark;
}
+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;
-6
View File
@@ -21,12 +21,6 @@
.d-none {
display: none !important;
}
.d-none-desktop {
display: none;
}
.d-none-mobile {
display: block;
}
.ms-1,
.mx-1 {
+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;
}
}
}
+11 -10
View File
@@ -1,9 +1,9 @@
@media only screen and (min-width: 1441px) {
%page-style {
width: 60%;
width: ROUND(60%, 2px);
[data-page-style='wide'] & {
width: 64%;
width: ROUND(64%, 2px);
}
[data-page-style='narrow'] & {
@@ -14,20 +14,20 @@
@media only screen and (max-width: 1440px) {
%page-style {
width: 56%;
width: ROUND(56%, 2px);
[data-page-style='wide'] & {
width: 60%;
width: ROUND(60%, 2px);
}
}
}
@media only screen and (max-width: 1200px) {
%page-style {
width: 52%;
width: ROUND(52%, 2px);
[data-page-style='wide'] & {
width: 56%;
width: ROUND(56%, 2px);
}
}
@@ -42,7 +42,7 @@
@media only screen and (max-width: 960px) {
%page-style {
width: 80% !important;
width: ROUND(80%, 2px) !important;
}
aside {
@@ -58,8 +58,10 @@
}
}
@media only screen and (min-width: 681px) {
.d-none-desktop {
display: none;
}
.breadcrumb-container.sticky {
body:not([data-header-desktop='sticky']) & {
top: 0;
@@ -80,8 +82,7 @@
display: none;
}
#header-mobile,
.d-none-desktop {
#header-mobile {
display: block;
}
+48
View File
@@ -18,3 +18,51 @@
-webkit-animation-name: #{$prefix}pulse !important;
animation-name: #{$prefix}pulse !important;
}
/**
* After the CSS round() function exceeds 90% browser support in the future, this code can be removed
* See https://caniuse.com/mdn-css_types_round
*/
@supports not (width: ROUND(60%, 2px)) {
@media only screen and (min-width: 1441px) {
%page-style {
width: 60%;
[data-page-style='wide'] & {
width: 64%;
}
[data-page-style='narrow'] & {
max-width: 800px;
}
}
}
@media only screen and (max-width: 1440px) {
%page-style {
width: 56%;
[data-page-style='wide'] & {
width: 60%;
}
}
}
@media only screen and (max-width: 1200px) {
%page-style {
width: 52%;
[data-page-style='wide'] & {
width: 56%;
}
}
}
@media only screen and (max-width: 960px) {
%page-style {
width: 80% !important;
}
}
@media only screen and (max-width: 680px) {
%page-style {
width: 100% !important;
}
}
}
+8 -1
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};
}
@@ -26,6 +30,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%)};
}
+21 -37
View File
@@ -81,22 +81,32 @@
}
.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%;
// resolve the aspect ratio issue temporarily
max-width: 1000px;
// use the same proportions as the cover image of https://dev.to/
aspect-ratio: auto 1000 / 420;
position: relative;
@@ -124,39 +134,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 +154,7 @@
}
.post-footer {
margin-top: 0.4rem;
margin-block: 0.4rem 0;
display: flex;
justify-content: space-between;
align-items: center;
@@ -182,7 +166,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';
+73 -17
View File
@@ -27,10 +27,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 {
@@ -73,7 +73,7 @@
}
.featured-image {
margin: 0.5rem 0 1rem 0;
margin: 1rem 0;
img {
display: block;
@@ -97,6 +97,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 +105,6 @@
border: none;
&.awesome-hr {
margin-block: 0.5em;
&::before {
display: inline-block;
font-weight: 600;
@@ -131,6 +130,7 @@
}
.content {
margin-block: 1rem;
> h1,
> h2 {
font-size: 1.5em;
@@ -229,6 +229,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 {
@@ -256,7 +291,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};
@@ -421,6 +471,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;
@@ -438,18 +498,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;
@@ -469,6 +517,14 @@
}
}
// Katex styles
.katex-display {
max-width: 100%;
overflow-x: auto;
padding-block: 2px;
}
@import '../_partials/_single/alert';
@import '../_partials/_single/code';
@import '../_shortcodes';
}
-6
View File
@@ -1,6 +0,0 @@
.special {
.single-title,
.single-subtitle {
text-align: right;
}
}
@@ -1,5 +1,5 @@
/**
* @Description: Style of layout named 'friends'.
* Style of layout named 'friends'.
* @Author: Lruihao <https://lruihao.cn>
* @Updated: 2022/3/11 21:36
*/
+14
View File
@@ -0,0 +1,14 @@
.special {
.single-title,
.single-subtitle {
text-align: right;
}
&.friends {
@import '_friends';
}
&.search {
@import '_search';
}
}
+10
View File
@@ -0,0 +1,10 @@
// Style of layout named 'search'
// TODO Adapting to dark mode, maybe use css variables
// Google CSE
.gcse-searchbox:empty,
.gcse-searchresults:empty {
display: none;
}
// Bing CSE (Unsupported)
+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;
+46
View File
@@ -0,0 +1,46 @@
// 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: (
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;
+44
View File
@@ -0,0 +1,44 @@
.alert {
padding: 0.5rem 1rem;
margin-block: 1rem;
color: inherit;
border-left: 0.25em solid var(--#{$prefix}alert-border-color);
> :first-child {
margin-top: 0;
}
> :last-child {
margin-bottom: 0;
}
.alert-title {
display: flex;
font-weight: 500;
align-items: center;
line-height: 1;
margin-bottom: 1rem;
color: var(--#{$prefix}alert-color);
> svg.icon {
width: initial;
height: initial;
margin-right: 0.5rem;
}
}
@each $type, $item in $alert-color-map {
&.alert-#{$type} {
--#{$prefix}alert-border-color: #{map-get($item, border-color)};
--#{$prefix}alert-color: #{map-get($item, color)};
}
}
[data-theme='dark'] & {
@each $type, $item in $alert-color-map-dark {
&.alert-#{$type} {
--#{$prefix}alert-border-color: #{map-get($item, border-color)};
--#{$prefix}alert-color: #{map-get($item, color)};
}
}
}
}
@@ -2,7 +2,7 @@
.collection-card {
font-size: 0.875rem;
background-color: darken($global-background-color, 3%);
margin-block: 2rem -1rem;
margin-block: 1rem;
padding: 1rem 1.25rem;
position: relative;
@include border-radius($global-border-radius * 1.5);
@@ -127,6 +127,7 @@
.collection-name {
flex-grow: 1;
font-weight: bold;
font-size: $collection-title-font-size;
&::before {
content: attr(data-collections) '';
@@ -146,7 +147,7 @@
}
.collection-content {
font-size: $toc-content-font-size;
font-size: $collection-list-font-size;
background-color: darken($global-background-color, 2%);
[data-theme='dark'] & {
@@ -1,12 +1,16 @@
.fixit-decryptor-container {
font-family: $global-font-family;
text-align: center;
margin-top: 3rem;
margin-block: var(--fixit-decryptor-margin-block);
.fixit-decryptor-loading {
vertical-align: middle;
}
.fixit-decryptor-input,
.fixit-decryptor-btn,
.fixit-encryptor-btn {
display: inline-block;
display: none;
box-sizing: border-box;
outline: none;
color: $global-font-color;
@@ -60,12 +64,33 @@
background-color: $header-background-color-dark;
}
}
.fixit-encryptor-btn {
display: none;
}
}
// fixit-encryptor shortcodes
fixit-encryptor {
&.initialized > .fixit-decryptor-container {
.fixit-decryptor-input,
.fixit-decryptor-btn {
display: inline-block;
}
.fixit-decryptor-loading {
display: none;
}
}
cipher-text {
display: none !important;
}
}
// fixit-encryptor for for the encrypted pages
article fixit-encryptor {
.fixit-decryptor-container {
margin-top: 1rem;
--fixit-decryptor-margin-block: 2rem;
}
&.decrypted > .fixit-decryptor-container {
.fixit-decryptor-loading,
@@ -73,6 +98,20 @@ fixit-encryptor {
.fixit-decryptor-btn {
display: none;
}
.fixit-encryptor-btn {
display: inline-block;
}
}
}
// fixit-encryptor shortcodes
#content fixit-encryptor {
.fixit-decryptor-container {
--fixit-decryptor-margin-block: 1rem;
}
&.decrypted > .fixit-decryptor-container {
display: none;
}
}
@@ -1,7 +1,6 @@
.post-reward {
padding: 1rem;
text-align: center;
margin-bottom: -1rem;
@extend .print-d-none;
&:has(.reward-ways:empty) {
+38 -33
View File
@@ -16,6 +16,19 @@
.admonition-content {
padding: 0.5rem 0;
// for extended alert syntax
> p {
margin: 0;
}
// title-only alert
&:empty {
display: none;
}
// BUG of Hugo https://github.com/gohugoio/hugo/issues/12913
&:has(> p:only-child:empty) {
display: none;
}
}
i.icon {
@@ -30,43 +43,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)};
}
}
}
+2 -2
View File
@@ -1,10 +1,10 @@
.blockquote-center {
blockquote.blockquote-center {
border-left: none;
margin: 40px 0;
padding: 0;
position: relative;
text-align: center;
color: initial;
color: inherit;
&::after,
&::before {
+10 -6
View File
@@ -11,17 +11,21 @@
&[data-animation] {
.#{$prefix}timeline-item::before {
border-color: var(--timeline-color);
animation-name: change-border-color;
animation-duration: 0.9s;
animation-direction: alternate;
animation-name: border-color-fade;
animation-duration: 2s;
animation-iteration-count: infinite;
animation-timing-function: cubic-bezier(0.4, 0, 1, 1);
animation-delay: calc(var(--timeline-index) * 0.3s);
@keyframes change-border-color {
to {
@keyframes border-color-fade {
0% {
border-color: var(--timeline-color);
}
50% {
border-color: var(--timeline-circle-color);
}
100% {
border-color: var(--timeline-color);
}
}
}
}
+8 -2
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 ========== //
@@ -95,8 +96,12 @@ $tag-cloud-end-dark: $global-font-color-dark!default;
// ========== Single Content ========== //
// Font size of the TOC
$toc-title-font-size: 1.2rem !default;
$toc-content-font-size: 1rem !default;
$toc-title-font-size: 1rem !default;
$toc-content-font-size: 0.875rem !default;
// Font size of the Collection List
$collection-title-font-size: 1rem !default;
$collection-list-font-size: 0.875rem !default;
// Color of the single link
$single-link-color: #2376b7 !default; // 花青
@@ -172,6 +177,7 @@ $github-corner-fill-dark: $header-background-color !default;
// ========== GitHub Corners ========== //
@import '_partials/_maps/admonition';
@import '_partials/_maps/alert';
@import '_partials/_maps/code-highlight';
@import '_partials/_maps/code-type';
@import '_partials/_maps/colors';
+1 -1
View File
@@ -7,7 +7,7 @@
@import "_core/base";
@import "_core/layout";
@import "_core/common";
@import "_core/patch";
@import "_page";
@import "_core/media";
@import "_core/patch";
@import "_custom";
+11 -14
View File
@@ -27,14 +27,11 @@ libFiles:
# crypto-js@4.2.0 https://github.com/brix/crypto-js
cryptoCoreJS: crypto-js@4.2.0/core.js
cryptoEncBase64JS: crypto-js@4.2.0/enc-base64.js
cryptoMd5JS: crypto-js@4.2.0/md5.js
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
# eruda@3.0.1 https://github.com/liriliri/eruda
erudaJS: eruda@3.0.1/eruda.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
@@ -71,13 +68,13 @@ libFiles:
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
# typeit@8.7.1 https://github.com/alexmacarthur/typeit
typeitJS: typeit@8.7.1/dist/index.umd.js
# valine@1.5.1 https://github.com/xCss/Valine
valineJS: valine@1.5.1/dist/Valine.min.js
# vconsole@3.15.1 https://github.com/Tencent/vConsole
vconsoleJS: vconsole@3.15.1/dist/vconsole.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'
# 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@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
+11 -15
View File
@@ -27,14 +27,11 @@ libFiles:
# crypto-js@4.2.0 https://github.com/brix/crypto-js
cryptoCoreJS: crypto-js@4.2.0/core.js
cryptoEncBase64JS: crypto-js@4.2.0/enc-base64.js
cryptoMd5JS: crypto-js@4.2.0/md5.js
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
# eruda@3.0.1 https://github.com/liriliri/eruda
erudaJS: eruda@3.0.1/eruda.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
@@ -71,13 +68,12 @@ libFiles:
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
# typeit@8.7.1 https://github.com/alexmacarthur/typeit
typeitJS: typeit@8.7.1/dist/index.umd.js
# valine@1.5.1 https://github.com/xCss/Valine
valineJS: valine@1.5.1/dist/Valine.min.js
# vconsole@3.15.1 https://github.com/Tencent/vConsole
vconsoleJS: vconsole@3.15.1/dist/vconsole.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'
# 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@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
+17 -1
View File
@@ -665,6 +665,22 @@ tiktok:
Icon:
Class: fa-brands fa-tiktok
# 085 Credly
credly:
Weight: 85
Title: Credly
Prefix: https://www.credly.com/users/
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
@@ -684,7 +700,7 @@ email:
# RSS
rss:
Weight: 999
Url: /index.xml
Url: index.xml
Title: RSS
Newtab: true
Icon:
+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></svg>

After

Width:  |  Height:  |  Size: 409 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg>

After

Width:  |  Height:  |  Size: 354 B

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path d="M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z"></path></svg>

After

Width:  |  Height:  |  Size: 800 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></svg>

After

Width:  |  Height:  |  Size: 524 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path d="M4.47.22A.749.749 0 0 1 5 0h6c.199 0 .389.079.53.22l4.25 4.25c.141.14.22.331.22.53v6a.749.749 0 0 1-.22.53l-4.25 4.25A.749.749 0 0 1 11 16H5a.749.749 0 0 1-.53-.22L.22 11.53A.749.749 0 0 1 0 11V5c0-.199.079-.389.22-.53Zm.84 1.28L1.5 5.31v5.38l3.81 3.81h5.38l3.81-3.81V5.31L10.69 1.5ZM8 4a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 8 4Zm0 8a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg>

After

Width:  |  Height:  |  Size: 493 B

+104 -94
View File
@@ -1,67 +1,57 @@
/**
* FixIt decryptor for encrypted pages and fixit-encryptor shortcode
* @param {Object} options
* @param {Function} [options.decrypted] [Lifecycle Hooks] handler after decrypting
* @param {Function} [options.reset] [Lifecycle Hooks] handler after encrypting again
* @param {Number} [options.duration=86400] number of seconds to cache decryption statistics. unit: s
* @author @Lruihao https://lruihao.cn
* @since v0.2.15
*/
FixItDecryptor = function (options = {}) {
var _proto = FixItDecryptor.prototype;
this.options = options || {};
this.options.duration = this.options.duration || 24 * 60 * 60; // default cache one day
this.decryptedEventSet = new Set();
this.partialDecryptedEventSet = new Set();
this.resetEventSet = new Set();
this.$el = document.querySelector('.fixit-decryptor-container');
class FixItDecryptor {
/**
* FixIt decryptor for encrypted pages and fixit-encryptor shortcode
* @param {Object} options
* @param {Function} [options.decrypted] [Lifecycle Hooks] handler after decrypting
* @param {Function} [options.reset] [Lifecycle Hooks] handler after encrypting again
* @param {Number} [options.duration=86400] number of seconds to cache decryption statistics. unit: s
*/
constructor(options = {}) {
this.options = options || {};
this.options.duration = this.options.duration || 24 * 60 * 60; // default cache one day
this.decryptedEventSet = new Set();
this.partialDecryptedEventSet = new Set();
this.resetEventSet = new Set();
customElements.get('fixit-encryptor') || customElements.define('fixit-encryptor', class extends HTMLElement {});
customElements.get('cipher-text') || customElements.define('cipher-text', class extends HTMLElement {});
}
/**
* decrypt content
* @param {Element} $content content element
* @param {Element} $cipherText cipher text element
* @param {Element} $target target content element
* @param {String} salt salt string
* @param {Boolean} [isAll=true] whether to decrypt all content
*/
var _decryptContent = ($content, salt, isAll=true) => {
#decryptContent($cipherText, $target, salt) {
try {
if (isAll) {
// decrypt all content
this.$el.querySelector('.fixit-decryptor-loading').classList.add('d-none');
this.$el.querySelector('.fixit-decryptor-input').classList.add('d-none');
this.$el.querySelector('.fixit-decryptor-btn').classList.add('d-none');
this.$el.querySelector('.fixit-encryptor-btn').classList.remove('d-none');
} else {
// decrypt shortcode content
$content.parentElement.classList.add('decrypted');
}
$content.insertAdjacentHTML(
'afterbegin',
CryptoJS.enc.Base64
.parse($content.getAttribute('data-content').replace(salt, ''))
.toString(CryptoJS.enc.Utf8)
);
$target.innerHTML = CryptoJS.enc.Base64
.parse($cipherText.innerText.replace(salt, ''))
.toString(CryptoJS.enc.Utf8);
$cipherText.parentElement.classList.add('decrypted');
} catch (err) {
return console.error(err);
}
// decrypted hook
const eventSet = isAll ? this.decryptedEventSet : this.partialDecryptedEventSet;
const eventSet = $target.id === 'content' ? this.decryptedEventSet : this.partialDecryptedEventSet;
for (const event of eventSet) {
event($content);
event($target);
}
};
}
/**
* validate password
* @param {Element} $decryptor decryptor element
* @param {Element} $content content element
* @param {Element} $encryptor fixit-encryptor element
* @param {Function} callback callback function after password validation
* @returns
*/
var _validatePassword = ($decryptor, $content, callback) => {
const password = $content.getAttribute('data-password');
const inputEl = $decryptor.querySelector('.fixit-decryptor-input');
async #validatePassword($encryptor, callback) {
const $cipherText = $encryptor.querySelector('cipher-text');
const password = $cipherText.dataset.password;
const inputEl = $encryptor.querySelector('.fixit-decryptor-input');
const input = inputEl.value.trim();
const inputMd5 = CryptoJS.MD5(input).toString();
// Warning: insufficient-password-hash Weak hashing algorithms for passwords poses security risks.
const { h64ToString } = await xxhash();
const inputHash = h64ToString(input);
const inputSha256 = CryptoJS.SHA256(input).toString();
const saltLen = input.length % 2 ? input.length : input.length + 1;
@@ -71,84 +61,103 @@ FixItDecryptor = function (options = {}) {
alert('Please enter the correct password!');
return console.warn('Please enter the correct password!');
}
if (inputMd5 !== password) {
if (inputHash !== password) {
alert(`Password error: ${input} not the correct password!`);
return console.warn(`Password error: ${input} not the correct password!`);
}
callback(inputMd5, inputSha256.slice(saltLen));
callback($cipherText, inputHash, inputSha256.slice(saltLen));
}
/**
* initialize FixIt decryptor
* @param {Object} options
* @param {Boolean} options.all whether to decrypt all content
* @param {String} options.shortcode whether to decrypt fixit-encryptor shortcode
*/
_proto.init = () => {
init({ all, shortcode }) {
this.addEventListener('decrypted', this.options?.decrypted);
this.addEventListener('partial-decrypted', this.options?.partialDecrypted);
this.addEventListener('reset', this.options?.reset);
const $content = document.querySelector('#content');
if (shortcode) {
this.addEventListener('decrypted', () => {
this.initShortcodes($content);
});
this.addEventListener('partial-decrypted', ($parent) => {
this.initShortcodes($parent);
});
}
if (all) {
this.initPage();
} else if (shortcode) {
this.initShortcodes($content);
}
}
/**
* initialize FixIt decryptor for the encrypted pages
*/
initPage() {
this.validateCache();
const $encryptor = document.querySelector('article > fixit-encryptor');
const $content = document.querySelector('#content');
const decryptorHandler = () => {
const $content = document.querySelector('#content');
_validatePassword(this.$el, $content, (passwordMD5, salt) => {
this.#validatePassword($encryptor, ($cipherText, passwordHash, salt) => {
// cache decryption statistics
window.localStorage?.setItem(
`fixit-decryptor/#${location.pathname}`,
JSON.stringify({
expiration: Math.ceil(Date.now() / 1000) + this.options.duration,
password: passwordMD5,
password: passwordHash,
salt,
})
);
_decryptContent($content, salt);
this.#decryptContent($cipherText, $content, salt);
});
};
// bind decryptor input enter keydown event
this.$el.querySelector('#fixit-decryptor-input')?.addEventListener('keydown', (e) => {
$encryptor.querySelector('.fixit-decryptor-input')?.addEventListener('keydown', (e) => {
if (e.key === 'Enter') {
e.preventDefault();
decryptorHandler();
}
});
// bind decryptor button click event
this.$el.querySelector('.fixit-decryptor-btn')?.addEventListener('click', (e) => {
$encryptor.querySelector('.fixit-decryptor-btn')?.addEventListener('click', (e) => {
e.preventDefault();
decryptorHandler();
});
// bind encryptor button click event
this.$el.querySelector('.fixit-encryptor-btn')?.addEventListener('click', (e) => {
$encryptor.querySelector('.fixit-encryptor-btn')?.addEventListener('click', (e) => {
e.preventDefault();
e.target.classList.add('d-none')
this.$el.querySelector('.fixit-decryptor-input').classList.remove('d-none');
this.$el.querySelector('.fixit-decryptor-btn').classList.remove('d-none');
document.querySelector('#content').innerHTML = '';
document.querySelector('#content').insertAdjacentElement(
'afterbegin',
this.$el
);
$encryptor.classList.remove('decrypted');
$content.innerHTML = '';
window.localStorage?.removeItem(`fixit-decryptor/#${location.pathname}`);
// reset hook
for (const event of this.resetEventSet) {
event();
}
});
};
$encryptor.classList.add('initialized');
}
/**
* initialize fixit-encryptor shortcodes
* initialize FixIt decryptor for fixit-encryptor shortcodes
* @param {Element} $parent parent element
*/
_proto.initShortcodes = () => {
customElements.get('fixit-encryptor') || customElements.define('fixit-encryptor', class extends HTMLElement {});
const $shortcodes = document.querySelectorAll('fixit-encryptor:not(:has(.decrypted))');
initShortcodes($parent) {
const $shortcodes = $parent.querySelectorAll('fixit-encryptor:not(.initialized)');
$shortcodes.forEach($shortcode => {
const decryptorHandler = () => {
const $decryptor = $shortcode.querySelector('.fixit-decryptor-container');
const $content = $shortcode.querySelector('[data-password][data-content]');
_validatePassword($decryptor, $content, (passwordMD5, salt) => {
_decryptContent($content, salt, false);
const $content = $shortcode.querySelector('.decryptor-content');
this.#validatePassword($shortcode, ($cipherText, passwordHash, salt) => {
this.#decryptContent($cipherText, $content, salt);
});
};
@@ -165,34 +174,32 @@ FixItDecryptor = function (options = {}) {
e.preventDefault();
decryptorHandler();
});
$shortcode.classList.add('initialized');
});
};
}
/**
* validate the cached decryption statistics in localStorage
* @returns {FixItDecryptor}
*/
_proto.validateCache = () => {
validateCache() {
const $content = document.querySelector('#content');
const password = $content.getAttribute('data-password');
const $encryptor = document.querySelector('article > fixit-encryptor');
const $cipherText = $encryptor.querySelector('cipher-text');
const password = $cipherText.dataset.password;
const cachedStat = JSON.parse(window.localStorage?.getItem(`fixit-decryptor/#${location.pathname}`));
if (!cachedStat) {
this.$el.querySelector('.fixit-decryptor-loading').classList.add('d-none');
this.$el.querySelector('.fixit-decryptor-input').classList.remove('d-none');
this.$el.querySelector('.fixit-decryptor-btn').classList.remove('d-none');
if (!cachedStat || cachedStat?.password !== password || Number(cachedStat?.expiration) < Math.ceil(Date.now() / 1000)) {
if (cachedStat) {
window.localStorage?.removeItem(`fixit-decryptor/#${location.pathname}`);
console.warn('The password has expired, please re-enter!');
}
return this;
}
if (cachedStat?.password !== password || Number(cachedStat?.expiration) < Math.ceil(Date.now() / 1000)) {
this.$el.querySelector('.fixit-decryptor-loading').classList.add('d-none');
this.$el.querySelector('.fixit-decryptor-input').classList.remove('d-none');
window.localStorage?.removeItem(`fixit-decryptor/#${location.pathname}`);
console.warn('The password has expired, please re-enter!');
return this;
}
_decryptContent($content, cachedStat.salt);
this.#decryptContent($cipherText, $content, cachedStat.salt);
return this;
};
}
/**
* add event listener for FixIt Decryptor
@@ -200,7 +207,7 @@ FixItDecryptor = function (options = {}) {
* @param {Function} listener event handler
* @returns {FixItDecryptor}
*/
_proto.addEventListener = (event, listener) => {
addEventListener(event, listener) {
if (typeof listener !== 'function') {
return this;
}
@@ -219,7 +226,7 @@ FixItDecryptor = function (options = {}) {
break;
}
return this;
};
}
/**
* remove event listener for FixIt Decryptor
@@ -227,7 +234,7 @@ FixItDecryptor = function (options = {}) {
* @param {Function} listener event handler
* @returns {FixItDecryptor}
*/
_proto.removeEventListener = (event, listener) => {
removeEventListener(event, listener) {
if (typeof listener !== 'function') {
return this;
}
@@ -246,5 +253,8 @@ FixItDecryptor = function (options = {}) {
break;
}
return this;
};
};
}
}
window.FixItDecryptor = FixItDecryptor;
+21
View File
@@ -0,0 +1,21 @@
import params from '@params';
/**
* Check theme isDark before body rendering
*/
(function () {
const localStorage = window.localStorage;
if (!localStorage) {
return;
}
let isDark = false;
const themeUsed = localStorage.getItem('theme');
if (themeUsed) {
isDark = themeUsed === 'dark';
} else {
isDark = params.defaultTheme === 'auto' ?
window.matchMedia('(prefers-color-scheme: dark)').matches :
params.defaultTheme === 'dark';
}
isDark && (document.documentElement.dataset.theme = 'dark');
})();
+70 -68
View File
@@ -3,7 +3,7 @@ import Util from './util';
class FixIt {
constructor() {
this.config = window.config;
this.isDark = document.body.dataset.theme === 'dark';
this.isDark = document.documentElement.dataset.theme === 'dark';
this.util = new Util();
this.newScrollTop = this.util.getScrollTop();
this.oldScrollTop = this.newScrollTop;
@@ -89,7 +89,7 @@ class FixIt {
initSwitchTheme() {
this.util.forEach(document.getElementsByClassName('theme-switch'), ($themeSwitch) => {
$themeSwitch.addEventListener('click', () => {
document.body.dataset.theme = document.body.dataset.theme === 'dark' ? 'light' : 'dark';
document.documentElement.dataset.theme = this.isDark ? 'light' : 'dark';
this.isDark = !this.isDark;
window.localStorage?.setItem('theme', this.isDark ? 'dark' : 'light');
for (let event of this.switchThemeEventSet) {
@@ -159,8 +159,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 +291,47 @@ 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
}]);
}
}
},
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 +358,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');
@@ -423,20 +447,20 @@ class FixIt {
if (this.config.code.editable) {
const $edit = document.createElement('span');
$edit.classList.add('edit');
$edit.insertAdjacentHTML('afterbegin', `<i class="fa-solid fa-key fa-fw" title="${this.config.code.editUnLockTitle}" aria-hidden="true"></i>`);
$edit.insertAdjacentHTML('afterbegin', `<i class="fa-solid fa-pen-to-square fa-fw" title="${this.config.code.editUnLockTitle}" aria-hidden="true"></i>`);
$edit.addEventListener('click', () => {
const $iconKey = $edit.querySelector('.fa-key');
const $iconKey = $edit.querySelector('.fa-pen-to-square');
const $iconLock = $edit.querySelector('.fa-lock');
const $preChromas = $edit.parentElement.parentElement.querySelectorAll('pre.chroma');
const $preChroma = $preChromas.length === 2 ? $preChromas[1] : $preChromas[0];
if ($iconKey) {
$iconKey.classList.add('fa-lock');
$iconKey.classList.remove('fa-key');
$iconKey.classList.remove('fa-pen-to-square');
$iconKey.title = this.config.code.editLockTitle;
$preChroma.setAttribute('contenteditable', true);
$preChroma.focus();
} else {
$iconLock.classList.add('fa-key');
$iconLock.classList.add('fa-pen-to-square');
$iconLock.classList.remove('fa-lock');
$iconLock.title = this.config.code.editUnLockTitle;
$preChroma.setAttribute('contenteditable', false);
@@ -464,7 +488,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!');
@@ -601,11 +625,11 @@ class FixIt {
}
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,
@@ -669,7 +693,7 @@ class FixIt {
this._mapboxArr = this._mapboxArr || [];
}
this.util.forEach(document.querySelectorAll('.mapbox:empty'), ($mapbox) => {
const { lng, lat, zoom, lightStyle, darkStyle, marked, navigation, geolocate, scale, fullscreen } = JSON.parse($mapbox.dataset.options);
const { lng, lat, zoom, lightStyle, darkStyle, marked, markers, navigation, geolocate, scale, fullscreen } = JSON.parse($mapbox.dataset.options);
const mapbox = new mapboxgl.Map({
container: $mapbox,
center: [lng, lat],
@@ -681,6 +705,17 @@ class FixIt {
if (marked) {
new mapboxgl.Marker().setLngLat([lng, lat]).addTo(mapbox);
}
const markerArray = typeof markers === 'string' ? JSON.parse(markers) : markers;
if (Array.isArray(markerArray) && markerArray.length > 0) {
markerArray.forEach(marker => {
const { lng: markerLng, lat: markerLat, description } = marker;
const popup = new mapboxgl.Popup({ offset: 25 }).setText(description);
new mapboxgl.Marker()
.setLngLat([markerLng, markerLat])
.setPopup(popup)
.addTo(mapbox);
});
}
if (navigation) {
mapbox.addControl(new mapboxgl.NavigationControl(), 'bottom-right');
}
@@ -738,7 +773,7 @@ class FixIt {
Object.values(groupMap).forEach((group) => {
const typeone = (i) => {
const typeitElement = group[i];
const singleLoop = typeitElement.dataset.loop;
const singleData = typeitElement.dataset;
stagingDOM.stage(typeitElement.querySelector('template').content.cloneNode(true));
// for shortcodes usage
let targetEle = typeitElement.firstElementChild
@@ -750,18 +785,19 @@ class FixIt {
// create a new instance of TypeIt for each element
const instance = new TypeIt(targetEle, {
strings: stagingDOM.$el.querySelector('pre')?.innerHTML || stagingDOM.contentAsHtml(),
speed: speed,
speed: Number(singleData.speed) >= 0 ? Number(singleData.speed) : speed,
lifeLike: true,
cursorSpeed: cursorSpeed,
cursorChar: cursorChar,
cursorSpeed: Number(singleData.cursorSpeed) >= 0 ? Number(singleData.cursorSpeed) : cursorSpeed,
cursorChar: singleData.cursorChar || cursorChar,
waitUntilVisible: true,
loop: singleLoop ? JSON.parse(singleLoop) : loop,
loop: singleData.loop ? singleData.loop === 'true' : loop,
afterComplete: () => {
const duration = Number(singleData.duration ?? typeitConfig.duration);
if (i === group.length - 1) {
if (typeitConfig.duration >= 0) {
if (duration >= 0) {
window.setTimeout(() => {
instance.destroy();
}, typeitConfig.duration);
}, duration);
}
return;
}
@@ -987,6 +1023,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('.')) {
@@ -1042,42 +1080,7 @@ class FixIt {
});
}
});
if (this.config.encryption?.shortcode) {
this.decryptor.addEventListener('decrypted', () => {
this.decryptor.initShortcodes();
})
this.decryptor.addEventListener('partial-decrypted', () => {
this.decryptor.initShortcodes();
})
this.decryptor.initShortcodes();
}
this.config.encryption?.all && this.decryptor.init();
}
initMDevtools() {
const type = this.config?.mDevtools;
if (typeof window.orientation === 'undefined') {
return;
}
if (type === 'vConsole') {
const vConsole = new VConsole({
target: '.widgets',
theme: this.isDark ? 'dark' : 'light'
});
this._vConsoleOnSwitchTheme = this._vConsoleOnSwitchTheme || (() => {
vConsole.setOption('theme', this.isDark ? 'dark' : 'light');
});
this.switchThemeEventSet.add(this._vConsoleOnSwitchTheme);
}
if(type === 'eruda') {
eruda.init({
defaults: { theme: this.isDark ? 'Dark' : 'Light' }
});
this._erudaOnSwitchTheme = this._erudaOnSwitchTheme || (() => {
eruda.util.evalCss.setTheme(this.isDark ? 'Dark' : 'Light');
});
this.switchThemeEventSet.add(this._erudaOnSwitchTheme);
}
this.decryptor.init(this.config.encryption);
}
initAutoMark() {
@@ -1264,7 +1267,6 @@ class FixIt {
this.initSiteTime();
this.initServiceWorker();
this.initWatermark();
this.initMDevtools();
this.initAutoMark();
this.initReward();
+25
View File
@@ -86,4 +86,29 @@ 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);
}
}
+5 -6
View File
@@ -9,8 +9,7 @@ crypto-js@4.2.0 https://github.com/brix/crypto-js
echarts@5.3.3 https://github.com/apache/echarts
TODO update emoji-data to 15.x
emoji-data@14.0.0 https://github.com/iamcal/emoji-data
eruda@3.0.1 https://github.com/liriliri/eruda
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
@@ -25,7 +24,7 @@ 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
typeit@8.7.1 https://github.com/alexmacarthur/typeit
valine@1.5.1 https://github.com/xCss/Valine
vconsole@3.15.1 https://github.com/Tencent/vConsole
waline@2.15.8 https://github.com/walinejs/waline
typeit@8.8.4 https://github.com/alexmacarthur/typeit
valine@1.5.2 https://github.com/xCss/Valine
waline@3.4.1 https://github.com/walinejs/waline
xxhash-wasm@1.0.2 https://github.com/jungomi/xxhash-wasm
-268
View File
@@ -1,268 +0,0 @@
;(function (root, factory) {
if (typeof exports === "object") {
// CommonJS
module.exports = exports = factory(require("./core"));
}
else if (typeof define === "function" && define.amd) {
// AMD
define(["./core"], factory);
}
else {
// Global (browser)
factory(root.CryptoJS);
}
}(this, function (CryptoJS) {
(function (Math) {
// Shortcuts
var C = CryptoJS;
var C_lib = C.lib;
var WordArray = C_lib.WordArray;
var Hasher = C_lib.Hasher;
var C_algo = C.algo;
// Constants table
var T = [];
// Compute constants
(function () {
for (var i = 0; i < 64; i++) {
T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0;
}
}());
/**
* MD5 hash algorithm.
*/
var MD5 = C_algo.MD5 = Hasher.extend({
_doReset: function () {
this._hash = new WordArray.init([
0x67452301, 0xefcdab89,
0x98badcfe, 0x10325476
]);
},
_doProcessBlock: function (M, offset) {
// Swap endian
for (var i = 0; i < 16; i++) {
// Shortcuts
var offset_i = offset + i;
var M_offset_i = M[offset_i];
M[offset_i] = (
(((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
(((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
);
}
// Shortcuts
var H = this._hash.words;
var M_offset_0 = M[offset + 0];
var M_offset_1 = M[offset + 1];
var M_offset_2 = M[offset + 2];
var M_offset_3 = M[offset + 3];
var M_offset_4 = M[offset + 4];
var M_offset_5 = M[offset + 5];
var M_offset_6 = M[offset + 6];
var M_offset_7 = M[offset + 7];
var M_offset_8 = M[offset + 8];
var M_offset_9 = M[offset + 9];
var M_offset_10 = M[offset + 10];
var M_offset_11 = M[offset + 11];
var M_offset_12 = M[offset + 12];
var M_offset_13 = M[offset + 13];
var M_offset_14 = M[offset + 14];
var M_offset_15 = M[offset + 15];
// Working variables
var a = H[0];
var b = H[1];
var c = H[2];
var d = H[3];
// Computation
a = FF(a, b, c, d, M_offset_0, 7, T[0]);
d = FF(d, a, b, c, M_offset_1, 12, T[1]);
c = FF(c, d, a, b, M_offset_2, 17, T[2]);
b = FF(b, c, d, a, M_offset_3, 22, T[3]);
a = FF(a, b, c, d, M_offset_4, 7, T[4]);
d = FF(d, a, b, c, M_offset_5, 12, T[5]);
c = FF(c, d, a, b, M_offset_6, 17, T[6]);
b = FF(b, c, d, a, M_offset_7, 22, T[7]);
a = FF(a, b, c, d, M_offset_8, 7, T[8]);
d = FF(d, a, b, c, M_offset_9, 12, T[9]);
c = FF(c, d, a, b, M_offset_10, 17, T[10]);
b = FF(b, c, d, a, M_offset_11, 22, T[11]);
a = FF(a, b, c, d, M_offset_12, 7, T[12]);
d = FF(d, a, b, c, M_offset_13, 12, T[13]);
c = FF(c, d, a, b, M_offset_14, 17, T[14]);
b = FF(b, c, d, a, M_offset_15, 22, T[15]);
a = GG(a, b, c, d, M_offset_1, 5, T[16]);
d = GG(d, a, b, c, M_offset_6, 9, T[17]);
c = GG(c, d, a, b, M_offset_11, 14, T[18]);
b = GG(b, c, d, a, M_offset_0, 20, T[19]);
a = GG(a, b, c, d, M_offset_5, 5, T[20]);
d = GG(d, a, b, c, M_offset_10, 9, T[21]);
c = GG(c, d, a, b, M_offset_15, 14, T[22]);
b = GG(b, c, d, a, M_offset_4, 20, T[23]);
a = GG(a, b, c, d, M_offset_9, 5, T[24]);
d = GG(d, a, b, c, M_offset_14, 9, T[25]);
c = GG(c, d, a, b, M_offset_3, 14, T[26]);
b = GG(b, c, d, a, M_offset_8, 20, T[27]);
a = GG(a, b, c, d, M_offset_13, 5, T[28]);
d = GG(d, a, b, c, M_offset_2, 9, T[29]);
c = GG(c, d, a, b, M_offset_7, 14, T[30]);
b = GG(b, c, d, a, M_offset_12, 20, T[31]);
a = HH(a, b, c, d, M_offset_5, 4, T[32]);
d = HH(d, a, b, c, M_offset_8, 11, T[33]);
c = HH(c, d, a, b, M_offset_11, 16, T[34]);
b = HH(b, c, d, a, M_offset_14, 23, T[35]);
a = HH(a, b, c, d, M_offset_1, 4, T[36]);
d = HH(d, a, b, c, M_offset_4, 11, T[37]);
c = HH(c, d, a, b, M_offset_7, 16, T[38]);
b = HH(b, c, d, a, M_offset_10, 23, T[39]);
a = HH(a, b, c, d, M_offset_13, 4, T[40]);
d = HH(d, a, b, c, M_offset_0, 11, T[41]);
c = HH(c, d, a, b, M_offset_3, 16, T[42]);
b = HH(b, c, d, a, M_offset_6, 23, T[43]);
a = HH(a, b, c, d, M_offset_9, 4, T[44]);
d = HH(d, a, b, c, M_offset_12, 11, T[45]);
c = HH(c, d, a, b, M_offset_15, 16, T[46]);
b = HH(b, c, d, a, M_offset_2, 23, T[47]);
a = II(a, b, c, d, M_offset_0, 6, T[48]);
d = II(d, a, b, c, M_offset_7, 10, T[49]);
c = II(c, d, a, b, M_offset_14, 15, T[50]);
b = II(b, c, d, a, M_offset_5, 21, T[51]);
a = II(a, b, c, d, M_offset_12, 6, T[52]);
d = II(d, a, b, c, M_offset_3, 10, T[53]);
c = II(c, d, a, b, M_offset_10, 15, T[54]);
b = II(b, c, d, a, M_offset_1, 21, T[55]);
a = II(a, b, c, d, M_offset_8, 6, T[56]);
d = II(d, a, b, c, M_offset_15, 10, T[57]);
c = II(c, d, a, b, M_offset_6, 15, T[58]);
b = II(b, c, d, a, M_offset_13, 21, T[59]);
a = II(a, b, c, d, M_offset_4, 6, T[60]);
d = II(d, a, b, c, M_offset_11, 10, T[61]);
c = II(c, d, a, b, M_offset_2, 15, T[62]);
b = II(b, c, d, a, M_offset_9, 21, T[63]);
// Intermediate hash value
H[0] = (H[0] + a) | 0;
H[1] = (H[1] + b) | 0;
H[2] = (H[2] + c) | 0;
H[3] = (H[3] + d) | 0;
},
_doFinalize: function () {
// Shortcuts
var data = this._data;
var dataWords = data.words;
var nBitsTotal = this._nDataBytes * 8;
var nBitsLeft = data.sigBytes * 8;
// Add padding
dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);
var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);
var nBitsTotalL = nBitsTotal;
dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = (
(((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) |
(((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00)
);
dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
(((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) |
(((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00)
);
data.sigBytes = (dataWords.length + 1) * 4;
// Hash final blocks
this._process();
// Shortcuts
var hash = this._hash;
var H = hash.words;
// Swap endian
for (var i = 0; i < 4; i++) {
// Shortcut
var H_i = H[i];
H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
(((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);
}
// Return final computed hash
return hash;
},
clone: function () {
var clone = Hasher.clone.call(this);
clone._hash = this._hash.clone();
return clone;
}
});
function FF(a, b, c, d, x, s, t) {
var n = a + ((b & c) | (~b & d)) + x + t;
return ((n << s) | (n >>> (32 - s))) + b;
}
function GG(a, b, c, d, x, s, t) {
var n = a + ((b & d) | (c & ~d)) + x + t;
return ((n << s) | (n >>> (32 - s))) + b;
}
function HH(a, b, c, d, x, s, t) {
var n = a + (b ^ c ^ d) + x + t;
return ((n << s) | (n >>> (32 - s))) + b;
}
function II(a, b, c, d, x, s, t) {
var n = a + (c ^ (b | ~d)) + x + t;
return ((n << s) | (n >>> (32 - s))) + b;
}
/**
* Shortcut function to the hasher's object interface.
*
* @param {WordArray|string} message The message to hash.
*
* @return {WordArray} The hash.
*
* @static
*
* @example
*
* var hash = CryptoJS.MD5('message');
* var hash = CryptoJS.MD5(wordArray);
*/
C.MD5 = Hasher._createHelper(MD5);
/**
* Shortcut function to the HMAC's object interface.
*
* @param {WordArray|string} message The message to hash.
* @param {WordArray|string} key The secret key.
*
* @return {WordArray} The HMAC.
*
* @static
*
* @example
*
* var hmac = CryptoJS.HmacMD5(message, key);
*/
C.HmacMD5 = Hasher._createHmacHelper(MD5);
}(Math));
return CryptoJS.MD5;
}));
-3
View File
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
+6 -6
View File
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
File diff suppressed because one or more lines are too long
+175 -64
View File
@@ -135,7 +135,7 @@ enableEmoji = true
[module]
[module.hugoVersion]
extended = true
min = "0.127.0"
min = "0.134.1"
# -------------------------------------------------------------------------------------
# Markup related configuration in Hugo
@@ -178,8 +178,13 @@ enableEmoji = true
enable = true
[markup.goldmark.extensions.extras.superscript]
enable = true
# TODO passthrough refactor https://gohugo.io/getting-started/configuration-markup/#parserattributeblock
# TODO passthrough refactor https://gohugo.io/render-hooks/passthrough/
# TODO hugo 0.122.0 https://gohugo.io/content-management/mathematics/
# [markup.goldmark.extensions.passthrough]
# enable = true
# [markup.goldmark.extensions.passthrough.delimiters]
# block = [['\[', '\]'], ['$$', '$$']]
# inline = [['\(', '\)'], ['$', '$']]
[markup.goldmark.parser]
[markup.goldmark.parser.attribute]
block = true
@@ -189,11 +194,6 @@ enableEmoji = true
# whether to use HTML tags directly in the document
unsafe = true
xhtml = false
# Table Of Contents settings
[markup.tableOfContents]
ordered = false
startLevel = 2
endLevel = 6
# -------------------------------------------------------------------------------------
# Sitemap Configuration
@@ -202,6 +202,7 @@ enableEmoji = true
[sitemap]
changefreq = "weekly"
disable = false
filename = "sitemap.xml"
priority = 0.5
@@ -231,12 +232,8 @@ enableEmoji = true
# -------------------------------------------------------------------------------------
[mediaTypes]
# Options to make output .md files
[mediaTypes."text/markdown"]
suffixes = ["md"]
# Options to make output .txt files
[mediaTypes."text/plain"]
suffixes = ["txt"]
# [mediaTypes."application/feed+json"]
# suffixes = ["json"]
# -------------------------------------------------------------------------------------
# Output Format Definitions
@@ -244,11 +241,6 @@ enableEmoji = true
# -------------------------------------------------------------------------------------
[outputFormats]
# Options to make output .md files
[outputFormats.MarkDown]
mediaType = "text/markdown"
isPlainText = true
isHTML = false
# FixIt 0.3.0 | NEW Options to make output /archives/index.html file
[outputFormats.archives]
path = "archives"
@@ -257,6 +249,7 @@ enableEmoji = true
isPlainText = false
isHTML = true
permalinkable = true
notAlternative = true
# FixIt 0.3.0 | NEW Options to make output /offline/index.html file
[outputFormats.offline]
path = "offline"
@@ -265,18 +258,29 @@ enableEmoji = true
isPlainText = false
isHTML = true
permalinkable = true
notAlternative = true
# FixIt 0.3.0 | NEW Options to make output readme.md file
[outputFormats.README]
[outputFormats.readme]
baseName = "readme"
mediaType = "text/markdown"
isPlainText = true
isHTML = false
notAlternative = true
# FixIt 0.3.0 | CHANGED Options to make output baidu_urls.txt file
[outputFormats.baidu_urls]
baseName = "baidu_urls"
mediaType = "text/plain"
isPlainText = true
isHTML = false
notAlternative = true
# FixIt 0.3.10 | NEW Options to make output search.json file
[outputFormats.search]
baseName = "search"
mediaType = "application/json"
rel = "search"
isPlainText = true
isHTML = false
permalinkable = true
# -------------------------------------------------------------------------------------
# Customizing Output Formats
@@ -284,17 +288,17 @@ enableEmoji = true
# -------------------------------------------------------------------------------------
# Options to make hugo output files, the optional values are below:
# home: ["HTML", "RSS", "JSON", "archives", "offline", "README", "baidu_urls"]
# page: ["HTML", "MarkDown"]
# section: ["HTML", "RSS"]
# taxonomy: ["HTML", "RSS"]
# term: ["HTML", "RSS"]
# home = ["html", "rss", "archives", "offline", "readme", "baidu_urls", "search"]
# page = ["html", "markdown"]
# section = ["html", "rss"]
# taxonomy = ["html"]
# term = ["html", "rss"]
[outputs]
home = ["HTML", "RSS", "JSON", "archives"]
page = ["HTML", "MarkDown"]
section = ["HTML", "RSS"]
taxonomy = ["HTML"]
term = ["HTML", "RSS"]
home = ["html", "rss", "archives", "offline", "search"]
page = ["html", "markdown"]
section = ["html", "rss"]
taxonomy = ["html"]
term = ["html", "rss"]
# -------------------------------------------------------------------------------------
# Taxonomies Configuration
@@ -331,8 +335,8 @@ enableEmoji = true
enablePWA = false
# FixIt 0.2.14 | NEW whether to add external Icon for external links automatically
externalIcon = false
# FixIt 0.3.0 | NEW whether to reverse the order of the navigation menu
navigationReverse = 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
@@ -341,6 +345,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
@@ -383,7 +389,7 @@ enableEmoji = true
# Search config
[params.search]
enable = false
# type of search engine ["algolia", "fuse"]
# type of search engine ["algolia", "fuse", "cse"]
type = "fuse"
# max index length of the chunked content
contentLength = 4000
@@ -413,6 +419,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"]
@@ -443,6 +462,16 @@ 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]
# whether to show the post navigation in section pages scope
inSection = false
# whether to reverse the next/previous post navigation order
reverse = false
# Footer config
[params.footer]
@@ -492,24 +521,33 @@ enableEmoji = true
paginate = 20
# date format (month and day)
dateFormat = "01-02"
# amount of RSS pages
rss = 10
# 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
# FixIt 0.3.10 | NEW Section feed config for RSS, Atom and JSON feed.
[params.section.feed]
# The number of posts to include in the feed. If set to -1, all posts.
limit = -1
# whether to show the full text content in feed.
fullText = false
# List (category or tag) page config
# Term list (category or tag) page config
[params.list]
# special amount of posts in each list page
paginate = 20
# date format (month and day)
dateFormat = "01-02"
# amount of RSS pages
rss = 10
# FixIt 0.3.10 | NEW Term list feed config for RSS, Atom and JSON feed.
[params.list.feed]
# The number of posts to include in the feed. If set to -1, all posts.
limit = -1
# 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]
@@ -521,8 +559,6 @@ enableEmoji = true
# Home page config
[params.home]
# amount of RSS pages
rss = 10
# Home page profile
[params.home.profile]
enable = false
@@ -534,7 +570,7 @@ enableEmoji = true
avatarMenu = ""
# title shown in home page (HTML format is supported)
title = ""
# subtitle shown in home page
# subtitle shown in home page (HTML format is supported)
subtitle = ""
# whether to use typeit animation for subtitle
typeit = true
@@ -634,6 +670,8 @@ enableEmoji = true
TryHackMe = ""
Douyin = ""
TikTok = ""
Credly = ""
Bluesky = ""
Phone = ""
Email = ""
RSS = true
@@ -664,6 +702,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
@@ -693,11 +750,16 @@ enableEmoji = true
# FixIt 0.2.13 | NEW watermark's fontFamily
fontFamily = "inherit"
# FixIt 0.2.12 | NEW Busuanzi count
[params.ibruce]
# FixIt 0.3.10 | NEW Busuanzi count
[params.busuanzi]
# whether to enable busuanzi count
enable = false
# Enable in post meta
enablePost = false
# busuanzi count core script source. Default is https://vercount.one/js
source = "https://vercount.one/js"
# whether to show the site views
siteViews = true
# whether to show the page views
pageViews = true
# Site verification code config for Google/Bing/Yandex/Pinterest/Baidu/360/Sogou
[params.verification]
@@ -729,6 +791,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]
@@ -797,6 +884,33 @@ enableEmoji = true
# ["barber-shop", "big-counter", "bounce", "center-atom", "center-circle", "center-radar", "center-simple",
# "corner-indicator", "fill-left", "flash", "flat-top", "loading-bar", "mac-osx", "material", "minimal"]
theme = "minimal"
# 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.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 = []
postFooterBefore = []
postFooterAfter = []
# FixIt 0.2.15 | NEW Developer options
# Select the scope named `public_repo` to generate personal access token,
@@ -805,11 +919,6 @@ enableEmoji = true
enable = false
# Check for updates
c4u = false
# Mobile Devtools config
[params.dev.mDevtools]
enable = false
# "vConsole", "eruda" supported
type = "vConsole"
# Page config
[params.page]
@@ -819,10 +928,10 @@ enableEmoji = true
hiddenFromHomePage = false
# whether to hide a page from search results
hiddenFromSearch = false
# FixIt 0.3.0 | NEW whether to hide a page from RSS feed
hiddenFromRss = false
# FixIt 0.3.0 | NEW whether to hide a page from related posts
hiddenFromRelated = false
# FixIt 0.3.10 | NEW whether to hide a page from RSS, Atom and JSON feed
hiddenFromFeed = false
# whether to enable twemoji
twemoji = false
# FixIt 0.2.18 | CHANGED whether to enable lightgallery
@@ -845,9 +954,7 @@ enableEmoji = true
linkToEdit = true
# FixIt 0.3.0 | NEW whether to show link to report issue for the post
linkToReport = true
# whether to show the full text content in RSS
rssFullText = false
# FixIt 0.2.13 | NEW Page style ["narrow", "normal", "wide", ...]
# FixIt 0.3.10 | CHANGED Page style ["narrow", "normal", "wide", ...]
pageStyle = "normal"
# FixIt 0.2.17 | CHANGED Auto Bookmark Support
# If true, save the reading progress when closing the page.
@@ -879,6 +986,10 @@ enableEmoji = true
auto = true
# FixIt 0.2.13 | NEW position of TOC ["left", "right"]
position = "right"
# FixIt 0.3.12 | NEW supersede `markup.tableOfContents` settings
ordered = false
startLevel = 2
endLevel = 6
# FixIt 0.2.13 | NEW Display a message at the beginning of an article to warn the reader that its content might be expired
[params.page.expirationReminder]
enable = false
@@ -892,7 +1003,7 @@ enableEmoji = true
[params.page.heading]
# FixIt 0.3.3 | NEW whether to capitalize automatic text of headings
capitalize = false
# used with `markup.tableOfContents.ordered` parameter
# FixIt 0.3.12 | CHANGED must set `params.page.toc.ordered` to true
[params.page.heading.number]
# whether to enable auto heading numbering
enable = false
@@ -933,9 +1044,9 @@ enableEmoji = true
# access token of Mapbox GL JS
accessToken = ""
# style for the light theme
lightStyle = "mapbox://styles/mapbox/light-v9"
lightStyle = "mapbox://styles/mapbox/light-v11"
# style for the dark theme
darkStyle = "mapbox://styles/mapbox/dark-v9"
darkStyle = "mapbox://styles/mapbox/dark-v11"
# whether to add NavigationControl
navigation = true
# whether to add GeolocateControl
+51 -28
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 = ""
RCVersionWarn = ""
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,26 @@ 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"
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 +143,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 +151,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 ===
@@ -173,11 +174,33 @@ other = "Offline"
other = "Sie sind nicht mit dem Internet verbunden, es stehen nur zwischengespeicherte Seiten zur Verfügung."
# === offline ===
# === GitHub Alert ===
[alert]
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"
+26 -2
View File
@@ -5,8 +5,8 @@
[init]
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"
RCVersionWarn = "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\", \"CDN\" and \"fingerprint\" will be disabled."
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\", \"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"
@@ -172,11 +174,33 @@ other = "Offline"
other = "You are not connected to the Internet, only cached pages will be available."
# === offline ===
# === GitHub Alert ===
[alert]
note = "Note"
tip = "Tip"
important = "Important"
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"
+50 -27
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 = ""
RCVersionWarn = ""
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,26 @@ 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"
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 +151,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 ===
@@ -173,11 +174,33 @@ other = "desconectado"
other = "No está conectado a Internet, solo estarán disponibles las páginas almacenadas en caché."
# === offline ===
# === GitHub Alert ===
[alert]
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"
+34 -10
View File
@@ -6,8 +6,8 @@
[init]
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"
RCVersionWarn = "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 \"CDN\" et la \"prise d'empreinte\" seront désactivés."
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\", 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,9 @@ 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"
back = "Retour"
home = "Accueil"
readMore = "En savoir plus"
@@ -172,11 +174,33 @@ other = "Hors ligne"
other = "Vous n'êtes pas connecté à Internet, seules les pages mises en cache seront disponibles."
# === offline ===
# === GitHub Alert ===
[alert]
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"
+26 -2
View File
@@ -6,8 +6,8 @@
[init]
configurationError = "कन्फ़िग्यरेशन त्रुटि \nआपने फिक्सइट संस्करण पैरामीटर को सही ढंग से कॉन्फ़िगर नहीं किया है।. यह देखें: https://fixit.lruihao.cn/documentation/basics/#theme-configuration"
compatibilityError = "संगतता त्रुटि ({{ .From }} -> {{ .To }}):\nआपके पास एक असंगत अपडेट है. यह देखें: https://github.com/hugo-fixit/FixIt/releases"
RCVersionWarn = "आप फिक्सइट के डिवेलपर संस्करण का उपयोग कर रहे हैं। कृपया एक स्थिर संस्करण का उपयोग करने पर विचार करें।\nयह देखें: https://github.com/hugo-fixit/FixIt/releases"
devEnvWarn = "वर्तमान परिवेश \"डिवेलप्मेंट\" का है। \"टिप्पणी प्रणाली\", \"सीडीएन\" और \"फ़िंगरप्रिंट\" अक्षम कर दिए जाएंगे। "
devVersionWarn = "आप फिक्सइट के डिवेलपर संस्करण का उपयोग कर रहे हैं। कृपया एक स्थिर संस्करण का उपयोग करने पर विचार करें।\nयह देखें: https://github.com/hugo-fixit/FixIt/releases"
devEnvWarn = "वर्तमान परिवेश \"डिवेलप्मेंट\" का है। \"टिप्पणी प्रणाली\", \"पीडब्ल्यूए\", \"सीडीएन\", \"फ़िंगरप्रिंट\" और \"विश्लेषण\" अक्षम कर दिए जाएंगे।"
quicklyUpgrade = "शीघ्रता से अपग्रेड यह कमांड का उपयोग करें: "
# === init ===
@@ -92,6 +92,8 @@ facebookLanguageCode = "hi"
[assets]
search = "खोज"
searchPlaceholder = "शीर्षक या सामग्री खोजें ..."
searchIn = "{{ . }} में खोजें"
gotoResultsPage = "खोज परिणाम पेज पर जाएं ..."
clear = "साफ़ करें"
cancel = "रद्द करें"
noResultsFound = "कोई परिणाम नहीं मिला"
@@ -173,11 +175,33 @@ other = "ऑफलाइन"
other = "आप इंटरनेट से कनेक्ट नहीं हैं, केवल कैश्ड पेज ही उपलब्ध होंगे।"
# === offline ===
# === GitHub Alert ===
[alert]
note = "ध्यान दें"
tip = "टिप"
important = "महत्वपूर्ण"
warning = "चेतावनी"
caution = "सावधान"
# === GitHub Alert ===
# === Task lists ===
[taskList]
" " = "जांच नहीं की गई"
"x" = "जांच की गई"
"/" = "काम जारी है"
"-" = "रद्द किया गया"
"<" = "अनुसूचित"
">" = "पुनः अनुसूचित"
"!" = "महत्वपूर्ण"
"?" = "सवाल"
# === Task lists ===
# === shortcodes/admonition.html ===
[admonition]
note = "ध्यान दें"
abstract = "सारांश"
info = "जानकारी"
todo = "करने के लिए"
tip = "टिप"
success = "सफलता"
question = "प्रश्न"
+50 -27
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 = ""
RCVersionWarn = ""
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,26 @@ 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"
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 +151,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 ===
@@ -173,11 +174,33 @@ other = "disconnesso"
other = "Non sei connesso a Internet, saranno disponibili solo le pagine memorizzate nella cache."
# === offline ===
# === GitHub Alert ===
[alert]
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"
+50 -27
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 = ""
RCVersionWarn = ""
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,26 @@ 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"
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 +151,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 ===
@@ -173,11 +174,33 @@ other = "Offline"
other = "Nie masz połączenia z Internetem, dostępne będą tylko strony z pamięci podręcznej."
# === offline ===
# === GitHub Alert ===
[alert]
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"
+66 -42
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 = ""
RCVersionWarn = ""
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,88 @@ 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"
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 +164,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 ===
@@ -173,14 +175,36 @@ other = "Offline"
other = "Você não está conectado à Internet, apenas as páginas em cache estarão disponíveis."
# === offline ===
# === GitHub Alert ===
[alert]
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"
+50 -27
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 = ""
RCVersionWarn = ""
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,26 @@ 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ă"
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 +151,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 ===
@@ -173,11 +174,33 @@ other = "Deconectat"
other = "Nu sunteți conectat la Internet, vor fi disponibile doar paginile stocate în cache."
# === offline ===
# === GitHub Alert ===
[alert]
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"
+45 -22
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 = ""
RCVersionWarn = ""
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,26 @@ 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 = "Сообщить о проблеме"
back = "Назад"
home = "Домой"
readMore = "Читать больше"
expirationReminder = "Эта статья последний раз обновлялась {{ .Date }}, содержание может быть устаревшим."
encryptedAbstract = ""
encryptedMessage = ""
encryptedAbstract = "Эта статья была зашифрована, поэтому ее исходное содержание невидимо!"
encryptedMessage = "Пожалуйста, введите пароль"
password = "арготизм"
enterBtn = ""
encryptyAgain = ""
enterBtn = "Войти"
encryptyAgain = "Зашифровать снова"
relatedContent = "Связанный контент"
[single.includedIn]
@@ -173,11 +174,33 @@ other = "Не в сети"
other = "Вы не подключены к интернету, будут доступны только кешированные страницы."
# === offline ===
# === GitHub Alert ===
[alert]
note = "Примечание"
tip = "Совет"
important = "Важно"
warning = "Предупреждение"
caution = "Осторожно"
# === GitHub Alert ===
# === Task lists ===
[taskList]
" " = "Не проверено"
"x" = "Проверено"
"/" = "В процессе"
"-" = "Отменено"
"<" = "Запланировано"
">" = "Перенесено"
"!" = "Важно"
"?" = "Вопрос"
# === Task lists ===
# === shortcodes/admonition.html ===
[admonition]
note = "Замечание"
abstract = "Краткое описание"
info = "Инфо"
todo = "Сделать"
tip = "Совет"
success = "Удачто"
question = "Вопрос"
+50 -27
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 = ""
RCVersionWarn = ""
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,26 @@ other = "Подели на"
# === posts/single.html ===
[single]
contents = "Садржаји"
pin = ""
repost = ""
pin = "Закачи"
repost = "Поново објави"
publishedOnDate = "објављено {{ .Date }}"
views = "прегледа"
comments = "коментари"
author = "Аутор"
updatedOnDate = "Ажурирано {{ .Date }}"
readMarkdown = "Читај Markdown"
viewSource = ""
viewSource = "Погледај извор"
editThisPage = "Уреди ову страницу"
reportIssue = ""
reportIssue = "Пријави проблем"
back = "Назад"
home = "Почетна"
readMore = "Прочитај више"
expirationReminder = "Овај чланак је последњи пут ажуриран {{ .Date }}, садржај је можда застарео."
encryptedAbstract = ""
encryptedMessage = ""
encryptedAbstract = "Овај чланак је шифрован."
encryptedMessage = "Унесите лозинку да бисте видели садржај."
password = "Паролица"
enterBtn = ""
encryptyAgain = ""
enterBtn = "Унеси"
encryptyAgain = "Поново шифруј"
relatedContent = "Повезани садржај"
[single.includedIn]
@@ -150,11 +151,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 ===
@@ -173,11 +174,33 @@ other = "Оффлине"
other = "Нисте повезани на Интернет, биће доступне само кеширане странице."
# === offline ===
# === GitHub Alert ===
[alert]
note = "Напомена"
tip = "Савет"
important = "Важно"
warning = "Упозорење"
caution = "Опрез"
# === GitHub Alert ===
# === Task lists ===
[taskList]
" " = "Непроверено"
"x" = "Проверено"
"/" = "У току"
"-" = "Отказано"
"<" = "Планирано"
">" = "Преустановљено"
"!" = "Важно"
"?" = "Питање"
# === Task lists ===
# === shortcodes/admonition.html ===
[admonition]
note = "Напомена"
abstract = "Сажетак"
info = "Инфо"
todo = "То-до"
tip = "Савет"
success = "Успех"
question = "Питање"
+50 -27
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 = ""
RCVersionWarn = ""
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,26 @@ 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"
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 +150,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 ===
@@ -172,11 +173,33 @@ other = "ngoại tuyến"
other = "Bạn chưa kết nối với Internet, chỉ các trang được lưu trong bộ nhớ cache sẽ khả dụng."
# === offline ===
# === GitHub Alert ===
[alert]
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"
+26 -2
View File
@@ -6,8 +6,8 @@
[init]
configurationError = "配置文件错误\n您还没有正确配置 FixIt 的版本参数。参考 https://fixit.lruihao.cn/zh-cn/documentation/basics/#theme-configuration"
compatibilityError = "兼容性错误 ({{ .From }} -> {{ .To }}):\n您进行了一次不兼容的更新。参考 https://github.com/hugo-fixit/FixIt/releases"
RCVersionWarn = "您正在使用开发版的 FixIt,请考虑使用稳定版。\n见 https://github.com/hugo-fixit/FixIt/releases"
devEnvWarn = "当前运行环境是“development”。“评论系统”“CDN”“fingerprint”不会启用。"
devVersionWarn = "您正在使用开发版的 FixIt,请考虑使用稳定版。\n见 https://github.com/hugo-fixit/FixIt/releases"
devEnvWarn = "当前运行环境是“development”。“评论系统”、“PWA”、“CDN”“fingerprint”和“统计”不会启用。"
quicklyUpgrade = "使用命令快速升级:"
# === init ===
@@ -89,6 +89,8 @@ facebookLanguageCode = "zh_CN"
[assets]
search = "搜索"
searchPlaceholder = "搜索文章标题或内容……"
searchIn = "在 {{ . }} 中搜索"
gotoResultsPage = "前往搜索结果页面……"
clear = "清空"
cancel = "取消"
noResultsFound = "没有找到结果"
@@ -168,11 +170,33 @@ other = "离线"
other = "您没有连接到 Internet,只有缓存的页面可用。"
# === offline ===
# === GitHub Alert ===
[alert]
note = "注意"
tip = "提示"
important = "重要"
warning = "警告"
caution = "小心"
# === GitHub Alert ===
# === Task lists ===
[taskList]
" " = "未完成"
"x" = "已完成"
"/" = "进行中"
"-" = "已取消"
"<" = "已计划"
">" = "已重新计划"
"!" = "重要"
"?" = "问题"
# === Task lists ===
# === shortcodes/admonition.html ===
[admonition]
note = "注意"
abstract = "摘要"
info = "信息"
todo = "待办"
tip = "技巧"
success = "成功"
question = "问题"
+26 -2
View File
@@ -6,8 +6,8 @@
[init]
configurationError = "配置文件錯誤\n您還沒有正確配置 FixIt 的版本參數。參考 https://fixit.lruihao.cn/zh-cn/documentation/basics/#theme-configuration"
compatibilityError = "兼容性錯誤 ({{ .From }} -> {{ .To }}):\n您進行了一次不兼容的更新。参考 https://github.com/hugo-fixit/FixIt/releases"
RCVersionWarn = "您正在使用開發版的 FixIt,請考慮使用穩定版。\n見 https://github.com/hugo-fixit/FixIt/releases"
devEnvWarn = "當前運行環境是“development”。“評論系統”“CDN”“fingerprint”不會啟用。"
devVersionWarn = "您正在使用開發版的 FixIt,請考慮使用穩定版。\n見 https://github.com/hugo-fixit/FixIt/releases"
devEnvWarn = "當前運行環境是“development”。“評論系統”、“PWA”、“CDN”“fingerprint”和“統計”不會啟用。"
quicklyUpgrade = "使用命令快速升級:"
# === init ===
@@ -89,6 +89,8 @@ facebookLanguageCode = "zh-TW"
[assets]
search = "搜尋"
searchPlaceholder = "搜尋文章標題或內容……"
searchIn = "在 {{ . }} 中搜尋"
gotoResultsPage = "前往搜尋結果頁面……"
clear = "清除"
cancel = "取消"
noResultsFound = "沒有找到結果"
@@ -168,11 +170,33 @@ other = "離線"
other = "您沒有連接到 Internet,只有緩存的頁面可用。"
# === offline ===
# === GitHub Alert ===
[alert]
note = "注意"
tip = "提示"
important = "重要"
warning = "警告"
caution = "小心"
# === GitHub Alert ===
# === Task lists ===
[taskList]
" " = "未完成"
"x" = "已完成"
"/" = "進行中"
"-" = "已取消"
"<" = "已計劃"
">" = "已重新計劃"
"!" = "重要"
"?" = "問題"
# === Task lists ===
# === shortcodes/admonition.html ===
[admonition]
note = "注意"
abstract = "摘要"
info = "資訊"
todo = "待辦"
tip = "提示"
success = "成功"
question = "問題"
Binary file not shown.

After

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 353 KiB

After

Width:  |  Height:  |  Size: 436 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 KiB

After

Width:  |  Height:  |  Size: 109 KiB

@@ -0,0 +1,28 @@
{{- $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. */ -}}
{{- /* === Dirty hack === */ -}}
{{- /* BUG of Hugo https://github.com/gohugoio/hugo/issues/12913 */ -}}
{{- $title := replaceRE "</([a-zA-Z]+)$" "</$1>" .AlertTitle -}}
{{- /* === Dirty hack === */ -}}
{{- $openMap := dict "+" true "-" false -}}
{{- $open := index $openMap .AlertSign | default true -}}
{{- $foldable := ne .AlertSign "" -}}
{{- dict
"Type" .AlertType
"Title" $title
"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 -}}
+43 -24
View File
@@ -1,26 +1,45 @@
{{- /* Read the config and format */ -}}
{{- $params := partial "function/params.html" -}}
{{- $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}" -}}
{{- $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 */ -}}
{{- $onlyMainSection := cond $headingConfig.number.onlyMainSection (eq .Page.Type "posts") 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 -}}
{{- if $params.heading.number.enable -}}
{{- /* Set the count for child level to 0 */ -}}
{{- .Page.Scratch.SetInMap "heading-counter" (string (add .Level 1)) 0 -}}
{{- /* 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 -}}
<h{{ .Level }} id="{{ .Anchor | safeURL }}" class="heading-element">
{{- if $ordered -}}
{{- /* Set the count for child level to 0 */ -}}
{{- .Page.Scratch.SetInMap "heading-counter" (string (add $level 1)) 0 -}}
{{- end -}}
{{- /* Force decrease the markup level to avoid multiple h1 */ -}}
{{- $markupLevel := cond (gt $maxMarkupLevel $level) $maxMarkupLevel $level -}}
<h{{ $markupLevel }} 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 $params.heading.number.enable | and $onlyMainSection -}}
{{- if $ordered -}}
{{- /* 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 -}}
{{- $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 -}}
@@ -32,17 +51,17 @@
{{- /* Apply the level based on the format */ -}}
{{- $title = "" -}}
{{- if .Level | eq 1 -}}
{{- if $level | eq 1 -}}
{{- $title = $h1Format -}}
{{- else if .Level | eq 2 -}}
{{- else if $level | eq 2 -}}
{{- $title = $h2Format -}}
{{- else if .Level | eq 3 -}}
{{- else if $level | eq 3 -}}
{{- $title = $h3Format -}}
{{- else if .Level | eq 4 -}}
{{- else if $level | eq 4 -}}
{{- $title = $h4Format -}}
{{- else if .Level | eq 5 -}}
{{- else if $level | eq 5 -}}
{{- $title = $h5Format -}}
{{- else if .Level | eq 6 -}}
{{- else if $level | eq 6 -}}
{{- $title = $h6Format -}}
{{- end -}}
@@ -54,12 +73,12 @@
{{- $title = replace $title "{h6}" $h6 -}}
{{- $title = replace $title "{title}" .Text -}}
{{- end -}}
{{- if $params.heading.capitalize -}}
{{- 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{{ .Level }}>
</h{{ $markupLevel }}>
{{- /* EOF */ -}}
+3 -2
View File
@@ -1,13 +1,14 @@
{{- /* TODO refactor */ -}}
{{- $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 | partial "plugin/image.html" -}}
{{- 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 | partial "plugin/image.html" -}}
{{- dict "Src" .Destination "Alt" .Text "Title" .Title "Linked" $linked "Responsive" true "Resources" .Page.Resources | partial "plugin/image.html" -}}
{{- end -}}
+3 -5
View File
@@ -1,5 +1,4 @@
{{- partial "init/index.html" . -}}
{{- partial "custom.html" . -}}
<!DOCTYPE html>
<html itemscope itemtype="http://schema.org/WebPage" lang="{{ .Site.LanguageCode }}">
@@ -15,14 +14,13 @@
{{- partial "head/meta.html" . -}}
{{- partial "head/link.html" . -}}
{{- partial "head/seo.html" . -}}
{{- partial "head/script.html" . -}}
{{- /* TODO preload script https://developer.mozilla.org/zh-CN/docs/Web/HTML/Attributes/rel/preload */ -}}
{{- /* TODO add config and page config to config.js (static) */ -}}
{{- /* Custom head */ -}}
{{- block "custom-head" . }}{{ end -}}
</head>
<body data-header-desktop="{{ .Site.Params.header.desktopMode }}" data-header-mobile="{{ .Site.Params.header.mobileMode }}">
{{- /* Check theme isDark before body rendering */ -}}
{{- $theme := .Site.Params.defaulttheme -}}
<script>(window.localStorage?.getItem('theme') ? localStorage.getItem('theme') === 'dark' : ('{{ $theme }}' === 'auto' ? window.matchMedia('(prefers-color-scheme: dark)').matches : '{{ $theme }}' === 'dark')) && document.body.setAttribute('data-theme', 'dark');</script>
{{- /* Body wrapper */ -}}
<div class="wrapper" data-page-style="{{ (partial `function/params.html`).pageStyle | default `normal` }}">
{{- partial "header.html" . -}}
@@ -39,6 +39,7 @@
{{- else -}}
{{- $pages = .Paginate $pages -}}
{{- end -}}
{{- partial "recently-updated.html" . -}}
{{- range $pages.PageGroups -}}
<h2 class="group-title">
{{- dict "Class" "fa-regular fa-calendar fa-fw me-1" | partial "plugin/icon.html" -}}
@@ -52,7 +53,7 @@
{{- dict "Class" "fa-solid fa-share fa-fw text-success me-1" | partial "plugin/icon.html" -}}
{{- end -}}
{{- /* Use the original title after archiving the articles */ -}}
{{- title .Title -}}
{{- cond (.Param "capitalizeTitles") (title .Title) .Title -}}
</a>
<span class="archive-item-date" title='{{ "2006-01-02 15:04:05" | .Date.Format }}'>
{{- .Date | dateFormat ($.Site.Params.archives.dateFormat | default "01-02") -}}
+46
View File
@@ -0,0 +1,46 @@
{{- if .Site.Params.search.enable -}}
{{- $index := slice -}}
{{- $pages := where .Site.RegularPages "Params.password" "eq" nil -}}
{{- if .Site.Params.page.hiddenFromSearch -}}
{{- $pages = where $pages "Params.hiddenfromsearch" false -}}
{{- else -}}
{{- $pages = where $pages "Params.hiddenfromsearch" "!=" true -}}
{{- end -}}
{{- range $pages -}}
{{- $uri := .RelPermalink -}}
{{- if $.Site.Params.search.absoluteURL -}}
{{- $uri = .Permalink -}}
{{- end -}}
{{- $meta := dict "uri" $uri "title" .Title "tags" .Params.tags "categories" .Params.categories -}}
{{- $meta = $.Site.Params.dateFormat | default "2006-01-02" | .PublishDate.Format | dict "date" | merge $meta -}}
{{- with .Description -}}
{{- $index = $index | append (dict "content" . "objectID" $uri | merge $meta) -}}
{{- end -}}
{{- $params := .Params | merge $.Site.Params.page -}}
{{/* Extended Markdown syntax */}}
{{- $content := dict "Content" .Content "Ruby" $params.ruby "Fraction" $params.fraction "Fontawesome" $params.fontawesome | partial "function/content.html" -}}
{{/* Remove line number for code */}}
{{- $content = $content | replaceRE `<span class="lnt?"> *\d*\n?</span>` "" -}}
{{- range $i, $contenti := split $content "<h2 id=" -}}
{{- if gt $i 0 -}}
{{- $contenti = printf "<h2 id=%v" $contenti -}}
{{- end -}}
{{- range $j, $contentj := split $contenti "<h3 id=" -}}
{{- if gt $j 0 -}}
{{- $contentj = printf "<h3 id=%v" $contentj -}}
{{- end -}}
{{/* Plainify, unescape and remove (\n, \t) */}}
{{- $contentj = $contentj | plainify | htmlUnescape | replaceRE `[\n\t ]+` " " -}}
{{- if gt $.Site.Params.search.contentLength 0 -}}
{{- $contentj = substr $contentj 0 $.Site.Params.search.contentLength -}}
{{- end -}}
{{- if $contentj | and (ne $contentj " ") -}}
{{- $one := printf "%v:%v:%v" $uri $i $j | dict "content" $contentj "objectID" | merge $meta -}}
{{- $index = $index | append $one -}}
{{- end -}}
{{- end -}}
{{- end -}}
{{- end -}}
{{- $index | jsonify | safeJS -}}
{{- end -}}
+7 -21
View File
@@ -1,5 +1,5 @@
{{- define "title" -}}
{{- title .Title -}}
{{- cond (.Param "capitalizeTitles") (title .Title) .Title -}}
{{- if .Site.Params.withSiteTitle }} {{ .Site.Params.titleDelimiter }} {{ .Site.Title }}{{- end -}}
{{- end -}}
@@ -8,37 +8,23 @@
<article class="page single special">
<div class="header">
{{- /* Title */ -}}
<h1 class="single-title animate__animated animate__pulse animate__faster">{{- title .Title -}}</h1>
<h1 class="single-title animate__animated animate__pulse animate__faster">{{- cond (.Param "capitalizeTitles") (title .Title) .Title -}}</h1>
{{- /* Subtitle */ -}}
{{- with $params.subtitle -}}<p class="single-subtitle animate__animated animate__fadeIn">{{ . }}</p>{{- end -}}
{{- with $params.subtitle -}}<p class="single-subtitle animate__animated animate__fadeIn">{{ . | $.RenderString }}</p>{{- end -}}
</div>
{{- /* Content */ -}}
{{- $content := dict "Content" .Content "Ruby" $params.ruby "Fraction" $params.fraction "Fontawesome" $params.fontawesome | partial "function/content.html" | safeHTML -}}
{{- if $params.password -}}
{{- $saltLen := strings.RuneCount (trim $params.password " ") -}}
{{- $saltLen = cond (eq (mod $saltLen 2) 0) (add $saltLen 1) $saltLen -}}
{{- $base64EncodeContent := $content | base64Encode -}}
{{- $content = printf "%v%v%v"
(substr $base64EncodeContent 0 $saltLen)
(substr (sha256 $params.password) $saltLen)
(substr $base64EncodeContent $saltLen)
-}}
{{- end -}}
<div
class="content"
id="content"
{{ with $params.password }}data-password="{{ md5 $params.password }}"{{ end }}
{{ with $params.password }}data-content="{{ $content }}"{{ end }}
>
<div class="content" id="content">
{{- if not $params.password -}}
{{- $content -}}
{{- else -}}
{{- partial "single/fixit-decryptor.html" . -}}
{{- end -}}
</div>
{{- /* Content Encryption */ -}}
{{- dict "Content" $content "Password" $params.password "Message" $params.message | partial "plugin/fixit-encryptor.html" -}}
{{- /* Comment */ -}}
{{- partial "single/comment.html" . -}}
</article>
+1 -1
View File
@@ -1,6 +1,6 @@
{{- $params := partial "function/params.html" -}}
{{- $author := .Store.Get "author" -}}
# {{ title .Title }}
# {{ cond (.Param "capitalizeTitles") (title .Title) .Title }}
{{ if $params.password -}}
_**{{ T "single.encryptedAbstract" }}**_
+10 -3
View File
@@ -31,7 +31,7 @@
<span title="{{ $title }}" class="icon-repost">{{- $icon | partial "plugin/icon.html" -}}</span>
{{- end -}}
{{- end -}}
<a href="{{ .RelPermalink }}">{{ title .Title }}</a>
<a href="{{ .RelPermalink }}">{{ cond (.Param "capitalizeTitles") (title .Title) .Title }}</a>
</h2>
{{- /* Meta */ -}}
@@ -49,8 +49,14 @@
{{- /* Summary content */ -}}
<div class="content">
{{- with .Summary -}}
{{- dict "Content" . "Ruby" $params.ruby "Fraction" $params.fraction "Fontawesome" $params.fontawesome | partial "function/content.html" | safeHTML -}}
{{- if .Summary -}}
{{- $plainify := (.Param "summaryPlainify") | default false -}}
{{- with .Markup "home" -}}
{{- with .Render -}}
{{- $summary := dict "Content" .Summary.Text "Ruby" $params.ruby "Fraction" $params.fraction "Fontawesome" $params.fontawesome | partial "function/content.html" | safeHTML -}}
{{- cond $plainify ($summary | plainify) $summary -}}
{{- end -}}
{{- end -}}
{{- else -}}
{{- .Description | safeHTML -}}
{{- end -}}
@@ -70,3 +76,4 @@
{{- end -}}
</div>
</article>
{{- /* EOF */ -}}
-46
View File
@@ -1,46 +0,0 @@
{{- if .Site.Params.search.enable -}}
{{- $index := slice -}}
{{- $pages := where .Site.RegularPages "Params.password" "eq" nil -}}
{{- if .Site.Params.page.hiddenFromSearch -}}
{{- $pages = where $pages "Params.hiddenfromsearch" false -}}
{{- else -}}
{{- $pages = where $pages "Params.hiddenfromsearch" "!=" true -}}
{{- end -}}
{{- range $pages -}}
{{- $uri := .RelPermalink -}}
{{- if $.Site.Params.search.absoluteURL -}}
{{- $uri = .Permalink -}}
{{- end -}}
{{- $meta := dict "uri" $uri "title" .Title "tags" .Params.tags "categories" .Params.categories -}}
{{- $meta = $.Site.Params.dateFormat | default "2006-01-02" | .PublishDate.Format | dict "date" | merge $meta -}}
{{- with .Description -}}
{{- $index = $index | append (dict "content" . "objectID" $uri | merge $meta) -}}
{{- end -}}
{{- $params := .Params | merge $.Site.Params.page -}}
{{/* Extended Markdown syntax */}}
{{- $content := dict "Content" .Content "Ruby" $params.ruby "Fraction" $params.fraction "Fontawesome" $params.fontawesome | partial "function/content.html" -}}
{{/* Remove line number for code */}}
{{- $content = $content | replaceRE `<span class="lnt?"> *\d*\n?</span>` "" -}}
{{- range $i, $contenti := split $content "<h2 id=" -}}
{{- if gt $i 0 -}}
{{- $contenti = printf "<h2 id=%v" $contenti -}}
{{- end -}}
{{- range $j, $contentj := split $contenti "<h3 id=" -}}
{{- if gt $j 0 -}}
{{- $contentj = printf "<h3 id=%v" $contentj -}}
{{- end -}}
{{/* Plainify, unescape and remove (\n, \t) */}}
{{- $contentj = $contentj | plainify | htmlUnescape | replaceRE `[\n\t ]+` " " -}}
{{- if gt $.Site.Params.search.contentLength 0 -}}
{{- $contentj = substr $contentj 0 $.Site.Params.search.contentLength -}}
{{- end -}}
{{- if $contentj | and (ne $contentj " ") -}}
{{- $one := printf "%v:%v:%v" $uri $i $j | dict "content" $contentj "objectID" | merge $meta -}}
{{- $index = $index | append $one -}}
{{- end -}}
{{- end -}}
{{- end -}}
{{- end -}}
{{- $index | jsonify | safeJS -}}
{{- end -}}
-46
View File
@@ -1,46 +0,0 @@
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
<channel>
<title>
{{- .Site.Title -}}
</title>
<link>
{{- .Permalink -}}
</link>
<description>
{{- .Site.Params.description | default .Site.Title -}}
</description>
<generator>Hugo -- gohugo.io</generator>
{{- with .Site.LanguageCode -}}
<language>
{{- . -}}
</language>
{{- end -}}
{{- with .Site.Params.author.email -}}
<managingEditor>
{{- . }}{{ with $.Site.Params.author.name }} ({{ . }}){{ end -}}
</managingEditor>
<webMaster>
{{- . }}{{ with $.Site.Params.author.name }} ({{ . }}){{ end -}}
</webMaster>
{{- end -}}
{{- with .Site.Copyright -}}
<copyright>
{{- . -}}
</copyright>
{{- end -}}
{{- if not .Date.IsZero -}}
<lastBuildDate>
{{- .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" -}}
</lastBuildDate>
{{- end -}}
{{ with .OutputFormats.Get "RSS" }}
{{ printf "<atom:link href=%q rel=\"self\" type=%q />" .Permalink .MediaType | safeHTML }}
{{ end }}
{{- range .Scratch.Get "mainSectionPages" | first (.Site.Params.home.rss | default 10) -}}
{{- /* TODO 0.4.0 待重构为去掉 `.page` 改用 hugo 推荐的 .Param 方法获取页面参数 */ -}}
{{- $params := .Params | merge site.Params.page -}}
{{- if $params.password | or $params.hiddenFromRss }}{{ continue }}{{ end -}}
{{- dict "Page" . "Site" .Site | partial "rss/item.html" -}}
{{- end -}}
</channel>
</rss>
+4 -4
View File
@@ -1,5 +1,5 @@
{{- define "title" -}}
{{- title .Title -}}
{{- cond (.Param "capitalizeTitles") (title .Title) .Title -}}
{{- if .Site.Params.withSiteTitle }} {{ .Site.Params.titleDelimiter }} {{ .Site.Title }}{{- end -}}
{{- end -}}
@@ -8,16 +8,16 @@
<article class="page single special friends">
<div class="header">
{{- /* Title */ -}}
<h1 class="single-title animate__animated animate__pulse animate__faster">{{- title .Title -}}</h1>
<h1 class="single-title animate__animated animate__pulse animate__faster">{{- cond (.Param "capitalizeTitles") (title .Title) .Title -}}</h1>
{{- /* Subtitle */ -}}
{{- with $params.subtitle -}}<p class="single-subtitle animate__animated animate__fadeIn">{{ . }}</p>{{- end -}}
{{- with $params.subtitle -}}<p class="single-subtitle animate__animated animate__fadeIn">{{ . | $.RenderString }}</p>{{- end -}}
</div>
{{- /* Friend links */ -}}
<script src="//at.alicdn.com/t/font_578712_g26jo2kbzd5qm2t9.js" async defer></script>
<div class="friend-links">
{{ range $index, $friend := .Site.Data.friends }}
<a class="friend-link" title="{{ $friend.description }}" href="{{ $friend.url | safeURL }}" rel="external noopener noreferrer" target="_blank">
<a class="friend-link" title="{{ $friend.description }}" href="{{ $friend.url | safeURL }}" rel="external noopener" target="_blank">
{{ if $friend.avatar }}
{{- dict "Src" $friend.avatar "Alt" $friend.nickname "Title" $friend.description "Class" "friend-avatar" | partial "plugin/image.html" -}}
{{ else }}
+34
View File
@@ -0,0 +1,34 @@
{{- define "title" -}}
{{- cond (.Param "capitalizeTitles") (title .Title) .Title -}}
{{- if .Site.Params.withSiteTitle }} {{ .Site.Params.titleDelimiter }} {{ .Site.Title }}{{- end -}}
{{- end -}}
{{- define "content" -}}
{{- $params := partial "function/params.html" -}}
{{- $cse := .Site.Params.cse -}}
<article class="page single special search">
<div class="header">
{{- /* Title */ -}}
<h1 class="single-title animate__animated animate__pulse animate__faster">{{- cond (.Param "capitalizeTitles") (title .Title) .Title -}}</h1>
{{- /* Subtitle */ -}}
{{- with $params.subtitle -}}<p class="single-subtitle animate__animated animate__fadeIn">{{ . | $.RenderString }}</p>{{- end -}}
</div>
{{- /* Content */ -}}
<div class="content" id="content">
{{- dict "Content" .Content "Ruby" $params.ruby "Fraction" $params.fraction "Fontawesome" $params.fontawesome | partial "function/content.html" | safeHTML -}}
</div>
{{- /* Google CSE */ -}}
{{- if eq $cse.engine "google" -}}
{{- with $cse.google.cx -}}
<script async defer src="https://cse.google.com/cse.js?cx={{ . }}"></script>
<div class="gcse-searchbox"></div>
<div class="gcse-searchresults"></div>
{{- end -}}
{{- end -}}
{{- /* Bing CSE (Unsupported) */ -}}
</article>
{{- end -}}
+39 -26
View File
@@ -16,12 +16,22 @@
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/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 "json" -}}
{{- 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" -}}
{{- $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 -}}
{{- end -}}
{{- end -}}
@@ -115,10 +125,13 @@
{{- /* 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 -}}
@@ -188,30 +201,24 @@
{{- if $params.password | or $encryptPartial -}}
{{- $cryptoCoreJS := $cdn.cryptoCoreJS | default "lib/crypto-js/core.js" -}}
{{- $cryptoEncBase64JS := $cdn.cryptoEncBase64JS | default "lib/crypto-js/enc-base64.js" -}}
{{- $cryptoMd5JS := $cdn.cryptoMd5JS | default "lib/crypto-js/md5.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" $cryptoMd5JS "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" "js/fixit-decryptor.js" "Minify" hugo.IsProduction "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" -}}
{{- /* 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" -}}
{{- $config = dict "all" (isset $params "password") "shortcode" ($encryptPartial | default false) | dict "encryption" | merge $config -}}
{{- end -}}
{{- /* Mobile Devtools */ -}}
{{- $mDevtools := (.Scratch.Get "devOpts").mDevtools -}}
{{- if $mDevtools.enable -}}
{{- $devtoolsJS := $cdn.vconsoleJS | default "lib/vconsole/vconsole.min.js" -}}
{{- if eq $mDevtools.type "eruda" -}}
{{- $devtoolsJS = $cdn.erudaJS | default "lib/eruda/eruda.js" -}}
{{- end -}}
{{- dict "Source" $devtoolsJS "Fingerprint" $fingerprint "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- $config = dict "mDevtools" ($mDevtools.type | default "vConsole") | merge $config -}}
{{- end -}}
{{- /* 不蒜子 */ -}}
{{- if eq .Site.Params.ibruce.enable true -}}
{{- $source := "//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js" -}}
{{- 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" -}}
{{- end -}}
@@ -224,7 +231,7 @@
{{- end -}}
{{- /* PWA */ -}}
{{- if .Site.Params.enablePWA | and hugo.IsProduction -}}
{{- if not hugo.IsServer | and .Site.Params.enablePWA | and hugo.IsProduction -}}
{{- $options := dict "targetPath" "service-worker.min.js" "minify" true -}}
{{- $source := resources.Get "js/service-worker.js" | js.Build $options -}}
{{- $_ := $source.RelPermalink -}}
@@ -266,15 +273,19 @@
{{- dict "Source" . "Fingerprint" $fingerprint "Defer" true | dict "Scratch" $.Scratch "Data" | partial "scratch/script.html" -}}
{{- end -}}
{{- with (.Scratch.Get "this").styleArr -}}
{{- $content := delimit . "" -}}
{{- $path := substr (md5 $content) 0 6 | printf "css/%v" -}}
{{- 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" -}}
{{- end -}}
{{- /* Config script */ -}}
{{- $config | jsonify | printf "window.config=%s;" | dict "Content" | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- $configJS := $config | jsonify | printf "window.config=%s;" -}}
{{- if hugo.IsServer -}}
{{- $configJS = add $configJS "console.log('Page config:', window.config);" -}}
{{- end -}}
{{- $configJS | dict "Content" | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- /* Theme script */ -}}
{{- $options := dict "targetPath" "js/theme.min.js" "minify" hugo.IsProduction -}}
@@ -295,8 +306,10 @@
{{- dict "Source" . "Build" $options "Fingerprint" $fingerprint "Defer" true | dict "Scratch" $.Scratch "Data" | partial "scratch/script.html" -}}
{{- end -}}
{{- with (.Scratch.Get "this").scriptArr -}}
{{- delimit . "\n" | dict "Content" | dict "Scratch" $.Scratch "Data" | partial "scratch/script.html" -}}
{{- 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" -}}
{{- end -}}
{{- range (.Scratch.Get "this").style -}}
+10 -5
View File
@@ -1,4 +1,5 @@
{{- 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 -}}
@@ -7,12 +8,13 @@
{{- end -}}
{{- $title := "" -}}
{{- $capitalizeTitles := .Param "capitalizeTitles" -}}
{{- with .Description -}}
{{- $title = . -}}
{{- else -}}
{{- $title = title .LinkTitle -}}
{{- $title = cond $capitalizeTitles (title .LinkTitle) .LinkTitle -}}
{{- if .IsPage | and .Summary -}}
{{- $title = .Summary -}}
{{- $title = .Summary | plainify -}}
{{- end -}}
{{- end -}}
@@ -20,13 +22,16 @@
{{- if .IsHome -}}
{{- $innerText = T "single.home" -}}
{{- else -}}
{{- $innerText = ((T (add .TranslationKey ".breadcrumbTitle")) | default (lower .LinkTitle | T) | default .LinkTitle) | title -}}
{{- $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"><a href="{{ .RelPermalink }}" title="{{ $title }}">{{ $innerText }}</a></li>
<li class="breadcrumb-item" data-separator="{{ $separator }}"><a href="{{ .RelPermalink }}" title="{{ $title }}">{{ $innerText }}</a></li>
{{- end -}}
<li class="breadcrumb-item active" aria-current="page">{{ (T (add .TranslationKey ".breadcrumbTitle")) | default (lower .LinkTitle | T) | default .LinkTitle | title }}</li>
{{- $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 -}}
+59 -5
View File
@@ -1,22 +1,76 @@
{{- /*
To avoid upgrade conflicts and facilitate the reference of theme components,
it's strongly recommended to copy this file from the theme to your project and override it.
*/ -}}
{{- define "custom-head" -}}
{{- $ctx := . -}}
{{- range .Site.Params.customPartials.head -}}
{{- partial . $ctx -}}
{{- 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 -}}
{{- partial . $ctx -}}
{{- end -}}
{{- end -}}
{{- define "custom-aside" -}}
{{- $ctx := . -}}
{{- range .Site.Params.customPartials.aside -}}
{{- partial . $ctx -}}
{{- end -}}
{{- end -}}
{{- define "custom-comment" -}}
{{- $ctx := . -}}
{{- range .Site.Params.customPartials.comment -}}
{{- partial . $ctx -}}
{{- end -}}
{{- end -}}
{{- define "custom-footer" -}}
{{- $ctx := . -}}
{{- range .Site.Params.customPartials.footer -}}
{{- partial . $ctx -}}
{{- end -}}
{{- end -}}
{{- define "custom-widgets" -}}
{{- $ctx := . -}}
{{- range .Site.Params.customPartials.widgets -}}
{{- partial . $ctx -}}
{{- end -}}
{{- end -}}
{{- define "custom-assets" -}}
{{- $ctx := . -}}
{{- range .Site.Params.customPartials.assets -}}
{{- partial . $ctx -}}
{{- end -}}
{{- end -}}
{{- define "custom-post__footer:before" -}}
{{- $ctx := . -}}
{{- range .Site.Params.customPartials.postFooterBefore -}}
{{- partial . $ctx -}}
{{- end -}}
{{- end -}}
{{- define "custom-post__footer:after" -}}
{{- $ctx := . -}}
{{- range .Site.Params.customPartials.postFooterAfter -}}
{{- partial . $ctx -}}
{{- end -}}
{{- end -}}

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